summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml9
-rw-r--r--apps/admin_audit/appinfo/info.xml16
-rw-r--r--apps/comments/appinfo/info.xml17
-rw-r--r--apps/dav/appinfo/info.xml37
-rw-r--r--apps/encryption/appinfo/info.xml40
-rw-r--r--apps/federatedfilesharing/appinfo/info.xml14
-rw-r--r--apps/federatedfilesharing/l10n/ja.js1
-rw-r--r--apps/federatedfilesharing/l10n/ja.json1
-rw-r--r--apps/federation/appinfo/info.xml27
-rw-r--r--apps/files/appinfo/info.xml50
-rw-r--r--apps/files/l10n/ja.js14
-rw-r--r--apps/files/l10n/ja.json14
-rw-r--r--apps/files_external/appinfo/info.xml35
-rw-r--r--apps/files_external/l10n/ast.js1
-rw-r--r--apps/files_external/l10n/ast.json1
-rw-r--r--apps/files_external/l10n/ja.js12
-rw-r--r--apps/files_external/l10n/ja.json12
-rw-r--r--apps/files_sharing/appinfo/info.xml52
-rw-r--r--apps/files_sharing/l10n/ja.js4
-rw-r--r--apps/files_sharing/l10n/ja.json4
-rw-r--r--apps/files_sharing/l10n/pt_PT.js1
-rw-r--r--apps/files_sharing/l10n/pt_PT.json1
-rw-r--r--apps/files_trashbin/appinfo/info.xml18
-rw-r--r--apps/files_versions/appinfo/info.xml26
-rw-r--r--apps/lookup_server_connector/appinfo/info.xml18
-rw-r--r--apps/oauth2/appinfo/info.xml9
-rw-r--r--apps/oauth2/l10n/ast.js1
-rw-r--r--apps/oauth2/l10n/ast.json1
-rw-r--r--apps/provisioning_api/appinfo/info.xml20
-rw-r--r--apps/sharebymail/appinfo/info.xml51
-rw-r--r--apps/systemtags/appinfo/info.xml19
-rw-r--r--apps/testing/appinfo/info.xml18
-rw-r--r--apps/theming/appinfo/info.xml20
-rw-r--r--apps/theming/l10n/ast.js2
-rw-r--r--apps/theming/l10n/ast.json2
-rw-r--r--apps/twofactor_backupcodes/appinfo/info.xml23
-rw-r--r--apps/twofactor_backupcodes/l10n/nb.js1
-rw-r--r--apps/twofactor_backupcodes/l10n/nb.json1
-rw-r--r--apps/updatenotification/appinfo/info.xml10
-rw-r--r--apps/user_ldap/appinfo/info.xml23
-rw-r--r--apps/workflowengine/appinfo/info.xml20
-rw-r--r--apps/workflowengine/l10n/ja.js1
-rw-r--r--apps/workflowengine/l10n/ja.json1
-rw-r--r--core/Command/App/CheckCode.php53
-rw-r--r--core/l10n/nb.js2
-rw-r--r--core/l10n/nb.json2
-rw-r--r--core/l10n/pt_PT.js21
-rw-r--r--core/l10n/pt_PT.json21
-rw-r--r--core/register_command.php3
-rw-r--r--lib/l10n/ast.js1
-rw-r--r--lib/l10n/ast.json1
-rw-r--r--lib/l10n/pt_PT.js90
-rw-r--r--lib/l10n/pt_PT.json90
-rw-r--r--lib/private/App/AppManager.php5
-rw-r--r--lib/private/App/CodeChecker/InfoChecker.php149
-rw-r--r--lib/private/Repair/Collation.php5
-rw-r--r--resources/app-info-shipped.xsd671
-rw-r--r--resources/app-info.xsd652
-rw-r--r--settings/l10n/ast.js1
-rw-r--r--settings/l10n/ast.json1
-rw-r--r--settings/l10n/de.js2
-rw-r--r--settings/l10n/de.json2
-rw-r--r--settings/l10n/de_DE.js2
-rw-r--r--settings/l10n/de_DE.json2
-rw-r--r--settings/l10n/es_MX.js2
-rw-r--r--settings/l10n/es_MX.json2
-rw-r--r--settings/l10n/fi.js17
-rw-r--r--settings/l10n/fi.json17
-rw-r--r--settings/l10n/nb.js6
-rw-r--r--settings/l10n/nb.json6
-rw-r--r--tests/acceptance/features/app-comments.feature2
-rw-r--r--tests/acceptance/features/bootstrap/CommentsAppContext.php64
-rw-r--r--tests/apps/testapp-dependency-missing/appinfo/info.xml9
-rw-r--r--tests/apps/testapp-infoxml/appinfo/info.xml12
-rw-r--r--tests/apps/testapp-name-missing/appinfo/info.xml11
-rw-r--r--tests/apps/testapp-version/appinfo/info.xml11
-rw-r--r--tests/apps/testapp-version/appinfo/version1
-rw-r--r--tests/apps/testapp_dependency_missing/appinfo/info.xml13
-rw-r--r--tests/apps/testapp_infoxml/appinfo/info.xml16
-rw-r--r--tests/apps/testapp_name_missing/appinfo/info.xml15
-rw-r--r--tests/apps/testapp_version/appinfo/info.xml15
-rw-r--r--tests/lib/App/CodeChecker/InfoCheckerTest.php19
82 files changed, 2180 insertions, 482 deletions
diff --git a/.drone.yml b/.drone.yml
index 614c0dc40c2..1c7eba5f0f2 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -549,6 +549,13 @@ pipeline:
when:
matrix:
TESTS-ACCEPTANCE: access-levels
+ acceptance-app-comments:
+ image: nextcloudci/integration-php7.0:integration-php7.0-6
+ commands:
+ - tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-app-comments --selenium-server selenium:4444 allow-git-repository-modifications features/app-comments.feature
+ when:
+ matrix:
+ TESTS-ACCEPTANCE: app-comments
acceptance-app-files:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
@@ -727,6 +734,8 @@ matrix:
- TESTS: acceptance
TESTS-ACCEPTANCE: access-levels
- TESTS: acceptance
+ TESTS-ACCEPTANCE: app-comments
+ - TESTS: acceptance
TESTS-ACCEPTANCE: app-files
- TESTS: acceptance
TESTS-ACCEPTANCE: app-theming
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 44abc85f105..054ed9580f2 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -1,16 +1,20 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>admin_audit</id>
<name>Auditing / Logging</name>
+ <summary>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</summary>
<description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
- <licence>AGPL</licence>
- <author>Nextcloud</author>
<version>1.4.0</version>
+ <licence>agpl</licence>
+ <author>Nextcloud</author>
<namespace>AdminAudit</namespace>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<types>
<logging/>
</types>
+ <category>monitoring</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
</info>
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index 61a23cf65f8..bc2cfe03054 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -1,19 +1,24 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>comments</id>
<name>Comments</name>
+ <summary>Files app plugin to add comments to files</summary>
<description>Files app plugin to add comments to files</description>
- <licence>AGPL</licence>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
<author>Arthur Schiwon</author>
<author>Vincent Petry</author>
<default_enable/>
- <version>1.4.0</version>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<types>
<logging/>
</types>
+ <category>office</category>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<activity>
<settings>
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml
index 7115cacfef2..3afef530e7a 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -1,22 +1,24 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>dav</id>
<name>WebDAV</name>
+ <summary>WebDAV endpoint</summary>
<description>WebDAV endpoint</description>
- <licence>AGPL</licence>
- <author>owncloud.org</author>
<version>1.5.0</version>
+ <licence>agpl</licence>
+ <author>owncloud.org</author>
+ <namespace>DAV</namespace>
<default_enable/>
<types>
<filesystem/>
</types>
- <namespace>DAV</namespace>
- <public>
- <webdav>appinfo/v1/publicwebdav.php</webdav>
- </public>
+ <category>integration</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
+
<repair-steps>
<post-migration>
<step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step>
@@ -24,6 +26,7 @@
<step>OCA\DAV\Migration\BuildCalendarSearchIndex</step>
</post-migration>
</repair-steps>
+
<commands>
<command>OCA\DAV\Command\CreateAddressBook</command>
<command>OCA\DAV\Command\CreateCalendar</command>
@@ -31,18 +34,22 @@
<command>OCA\DAV\Command\SyncSystemAddressBook</command>
</commands>
- <activity>
- <filters>
- <filter>OCA\DAV\CalDAV\Activity\Filter\Calendar</filter>
- <filter>OCA\DAV\CalDAV\Activity\Filter\Todo</filter>
- </filters>
+ <settings>
+ <admin>OCA\DAV\Settings\CalDAVSettings</admin>
+ </settings>
+ <activity>
<settings>
<setting>OCA\DAV\CalDAV\Activity\Setting\Calendar</setting>
<setting>OCA\DAV\CalDAV\Activity\Setting\Event</setting>
<setting>OCA\DAV\CalDAV\Activity\Setting\Todo</setting>
</settings>
+ <filters>
+ <filter>OCA\DAV\CalDAV\Activity\Filter\Calendar</filter>
+ <filter>OCA\DAV\CalDAV\Activity\Filter\Todo</filter>
+ </filters>
+
<providers>
<provider>OCA\DAV\CalDAV\Activity\Provider\Calendar</provider>
<provider>OCA\DAV\CalDAV\Activity\Provider\Event</provider>
@@ -50,7 +57,7 @@
</providers>
</activity>
- <settings>
- <admin>OCA\DAV\Settings\CalDAVSettings</admin>
- </settings>
+ <public>
+ <webdav>appinfo/v1/publicwebdav.php</webdav>
+ </public>
</info>
diff --git a/apps/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml
index 5744e5d2d66..2859043e72b 100644
--- a/apps/encryption/appinfo/info.xml
+++ b/apps/encryption/appinfo/info.xml
@@ -1,6 +1,9 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>encryption</id>
+ <name>Default encryption module</name>
+ <summary>Default encryption module for server-side encryption</summary>
<description>
In order to use this encryption module you need to enable server-side
encryption in the admin settings. Once enabled this module will encrypt
@@ -11,35 +14,40 @@
Please read the documentation to know all implications before you decide
to enable server-side encryption.
</description>
- <name>Default encryption module</name>
- <licence>AGPL</licence>
+ <version>2.1.0</version>
+ <licence>agpl</licence>
<author>Bjoern Schiessle</author>
<author>Clark Tomlinson</author>
+ <types>
+ <filesystem/>
+ </types>
<documentation>
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
- <version>2.1.0</version>
- <types>
- <filesystem/>
- </types>
+ <category>files</category>
+ <category>security</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+
<dependencies>
<lib>openssl</lib>
<nextcloud min-version="14" max-version="14" />
</dependencies>
- <settings>
- <admin>OCA\Encryption\Settings\Admin</admin>
- <personal>OCA\Encryption\Settings\Personal</personal>
- </settings>
- <commands>
- <command>OCA\Encryption\Command\EnableMasterKey</command>
- <command>OCA\Encryption\Command\DisableMasterKey</command>
- <command>OCA\Encryption\Command\MigrateKeys</command>
- </commands>
<repair-steps>
<post-migration>
<step>OCA\Encryption\Migration\SetMasterKeyStatus</step>
</post-migration>
</repair-steps>
+
+ <commands>
+ <command>OCA\Encryption\Command\EnableMasterKey</command>
+ <command>OCA\Encryption\Command\DisableMasterKey</command>
+ <command>OCA\Encryption\Command\MigrateKeys</command>
+ </commands>
+
+ <settings>
+ <admin>OCA\Encryption\Settings\Admin</admin>
+ <personal>OCA\Encryption\Settings\Personal</personal>
+ </settings>
</info>
diff --git a/apps/federatedfilesharing/appinfo/info.xml b/apps/federatedfilesharing/appinfo/info.xml
index ac5e3f45e95..027e62ed183 100644
--- a/apps/federatedfilesharing/appinfo/info.xml
+++ b/apps/federatedfilesharing/appinfo/info.xml
@@ -1,17 +1,23 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>federatedfilesharing</id>
<name>Federated file sharing</name>
+ <summary>Provide federated file sharing across servers</summary>
<description>Provide federated file sharing across servers</description>
- <licence>AGPL</licence>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
<author>Bjoern Schiessle</author>
<author>Roeland Jago Douma</author>
- <version>1.4.0</version>
<namespace>FederatedFileSharing</namespace>
- <category>other</category>
+ <category>files</category>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
+
<settings>
<admin>OCA\FederatedFileSharing\Settings\Admin</admin>
<personal>OCA\FederatedFileSharing\Settings\Personal</personal>
diff --git a/apps/federatedfilesharing/l10n/ja.js b/apps/federatedfilesharing/l10n/ja.js
index c25ab82bc3c..a310958d709 100644
--- a/apps/federatedfilesharing/l10n/ja.js
+++ b/apps/federatedfilesharing/l10n/ja.js
@@ -38,6 +38,7 @@ OC.L10N.register(
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "#Nextcloud の「クラウド共有ID」で私と共有できます。こちらを見てください。%s",
"Share with me through my #Nextcloud Federated Cloud ID" : "#Nextcloud の「クラウド共有ID」で私と共有できます。",
"Sharing" : "共有中",
+ "Federated file sharing" : "連携共有",
"Federated Cloud Sharing" : "統合されたクラウド共有",
"Open documentation" : "ドキュメントを開く",
"Adjust how people can share between servers." : "サーバー間でどうやって共有するかを調整する",
diff --git a/apps/federatedfilesharing/l10n/ja.json b/apps/federatedfilesharing/l10n/ja.json
index 67870054631..89c5c06bf1b 100644
--- a/apps/federatedfilesharing/l10n/ja.json
+++ b/apps/federatedfilesharing/l10n/ja.json
@@ -36,6 +36,7 @@
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "#Nextcloud の「クラウド共有ID」で私と共有できます。こちらを見てください。%s",
"Share with me through my #Nextcloud Federated Cloud ID" : "#Nextcloud の「クラウド共有ID」で私と共有できます。",
"Sharing" : "共有中",
+ "Federated file sharing" : "連携共有",
"Federated Cloud Sharing" : "統合されたクラウド共有",
"Open documentation" : "ドキュメントを開く",
"Adjust how people can share between servers." : "サーバー間でどうやって共有するかを調整する",
diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml
index c7fc2f2431a..e96c50479ae 100644
--- a/apps/federation/appinfo/info.xml
+++ b/apps/federation/appinfo/info.xml
@@ -1,30 +1,35 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>federation</id>
<name>Federation</name>
+ <summary>Federation allows you to connect with other trusted servers to exchange the user directory.</summary>
<description>Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.</description>
- <licence>AGPL</licence>
- <author>Bjoern Schiessle</author>
<version>1.4.0</version>
+ <licence>agpl</licence>
+ <author>Bjoern Schiessle</author>
<namespace>Federation</namespace>
- <category>other</category>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<default_enable/>
+
<types>
<authentication/>
</types>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<background-jobs>
<job>OCA\Federation\SyncJob</job>
</background-jobs>
- <settings>
- <admin>OCA\Federation\Settings\Admin</admin>
- </settings>
-
<commands>
<command>OCA\Federation\Command\SyncFederationAddressBooks</command>
</commands>
+
+ <settings>
+ <admin>OCA\Federation\Settings\Admin</admin>
+ </settings>
</info>
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 1faf2c80adc..f5b43070cee 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -1,22 +1,43 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>files</id>
<name>Files</name>
+ <summary>File Management</summary>
<description>File Management</description>
- <licence>AGPL</licence>
+ <version>1.9.0</version>
+ <licence>agpl</licence>
<author>Robin Appelman</author>
<author>Vincent Petry</author>
<default_enable/>
- <version>1.9.0</version>
<types>
<filesystem/>
</types>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<documentation>
<user>user-files</user>
</documentation>
+ <category>files</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
+
+ <background-jobs>
+ <job>OCA\Files\BackgroundJob\ScanFiles</job>
+ <job>OCA\Files\BackgroundJob\DeleteOrphanedItems</job>
+ <job>OCA\Files\BackgroundJob\CleanupFileLocks</job>
+ </background-jobs>
+
+ <commands>
+ <command>OCA\Files\Command\Scan</command>
+ <command>OCA\Files\Command\DeleteOrphanedFiles</command>
+ <command>OCA\Files\Command\TransferOwnership</command>
+ <command>OCA\Files\Command\ScanAppData</command>
+ </commands>
+
+ <settings>
+ <admin>OCA\Files\Settings\Admin</admin>
+ </settings>
<activity>
<settings>
@@ -39,23 +60,6 @@
</providers>
</activity>
- <background-jobs>
- <job>OCA\Files\BackgroundJob\ScanFiles</job>
- <job>OCA\Files\BackgroundJob\DeleteOrphanedItems</job>
- <job>OCA\Files\BackgroundJob\CleanupFileLocks</job>
- </background-jobs>
-
- <settings>
- <admin>OCA\Files\Settings\Admin</admin>
- </settings>
-
- <commands>
- <command>OCA\Files\Command\Scan</command>
- <command>OCA\Files\Command\DeleteOrphanedFiles</command>
- <command>OCA\Files\Command\TransferOwnership</command>
- <command>OCA\Files\Command\ScanAppData</command>
- </commands>
-
<navigations>
<navigation>
<name>Files</name>
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 7629e273784..e7e754f5ead 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -16,7 +16,10 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "空き容量が十分でなく、 {size1} をアップロードしていますが、 {size2} しか残っていません。",
"Target folder \"{dir}\" does not exist any more" : "対象フォルダー \"{dir}\" がもう存在しません",
"Not enough free space" : "十分な空き容量がありません",
+ "Uploading …" : "アップロード中...",
+ "…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中 {loadedSize} ({bitrate})",
+ "Target folder does not exist any more" : "対象フォルダーがもう存在しません",
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
@@ -56,8 +59,11 @@ OC.L10N.register(
"You don’t have permission to upload or create files here" : "ここにファイルをアップロードもしくは作成する権限がありません",
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"New" : "新規作成",
+ "{used} of {quota} used" : "{used} / {quota} 使用中",
+ "{used} used" : "{used} 使用中",
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "\"/\" is not allowed inside a file name." : "\"/\" はファイル名に利用できません。",
"\"{name}\" is not an allowed filetype" : "\"{name}\" は無効なファイル形式です",
"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!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
@@ -73,6 +79,9 @@ OC.L10N.register(
"Favorite" : "お気に入り",
"New folder" : "新しいフォルダー",
"Upload file" : "ファイルをアップロード",
+ "Not favorited" : "お気に入りではありません",
+ "Remove from favorites" : "お気に入りから削除",
+ "Add to favorites" : "お気に入りに追加",
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
"Added to favorites" : "お気に入りに追加",
"Removed from favorites" : "お気に入りから削除",
@@ -118,6 +127,8 @@ OC.L10N.register(
"Settings" : "設定",
"Show hidden files" : "隠しファイルを表示",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">WebDAV 経由でファイルにアクセス</a>するにはこのアドレスを利用してください",
+ "Cancel upload" : "アップロードをキャンセル",
"No files in here" : "ファイルがありません",
"Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。",
"No entries found in this folder" : "このフォルダーにはエントリーがありません",
@@ -132,6 +143,7 @@ OC.L10N.register(
"Tags" : "タグ",
"Deleted files" : "ゴミ箱",
"Text file" : "テキストファイル",
- "New text file.txt" : "新規のテキストファイル作成"
+ "New text file.txt" : "新規のテキストファイル作成",
+ "Move" : "移動"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 1af3dbeb40b..a643d750f1c 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -14,7 +14,10 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "空き容量が十分でなく、 {size1} をアップロードしていますが、 {size2} しか残っていません。",
"Target folder \"{dir}\" does not exist any more" : "対象フォルダー \"{dir}\" がもう存在しません",
"Not enough free space" : "十分な空き容量がありません",
+ "Uploading …" : "アップロード中...",
+ "…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中 {loadedSize} ({bitrate})",
+ "Target folder does not exist any more" : "対象フォルダーがもう存在しません",
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
@@ -54,8 +57,11 @@
"You don’t have permission to upload or create files here" : "ここにファイルをアップロードもしくは作成する権限がありません",
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"New" : "新規作成",
+ "{used} of {quota} used" : "{used} / {quota} 使用中",
+ "{used} used" : "{used} 使用中",
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "\"/\" is not allowed inside a file name." : "\"/\" はファイル名に利用できません。",
"\"{name}\" is not an allowed filetype" : "\"{name}\" は無効なファイル形式です",
"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!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
@@ -71,6 +77,9 @@
"Favorite" : "お気に入り",
"New folder" : "新しいフォルダー",
"Upload file" : "ファイルをアップロード",
+ "Not favorited" : "お気に入りではありません",
+ "Remove from favorites" : "お気に入りから削除",
+ "Add to favorites" : "お気に入りに追加",
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
"Added to favorites" : "お気に入りに追加",
"Removed from favorites" : "お気に入りから削除",
@@ -116,6 +125,8 @@
"Settings" : "設定",
"Show hidden files" : "隠しファイルを表示",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">WebDAV 経由でファイルにアクセス</a>するにはこのアドレスを利用してください",
+ "Cancel upload" : "アップロードをキャンセル",
"No files in here" : "ファイルがありません",
"Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。",
"No entries found in this folder" : "このフォルダーにはエントリーがありません",
@@ -130,6 +141,7 @@
"Tags" : "タグ",
"Deleted files" : "ゴミ箱",
"Text file" : "テキストファイル",
- "New text file.txt" : "新規のテキストファイル作成"
+ "New text file.txt" : "新規のテキストファイル作成",
+ "Move" : "移動"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index a924c32ba25..795c63a60f0 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -1,38 +1,36 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>files_external</id>
<name>External storage support</name>
+ <summary>Adds basic external storage support</summary>
<description>
This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
</description>
- <licence>AGPL</licence>
+ <version>1.5.0</version>
+ <licence>agpl</licence>
<author>Robin Appelman</author>
<author>Michael Gapczynski</author>
<author>Vincent Petry</author>
- <documentation>
- <admin>admin-external-storage</admin>
- </documentation>
- <version>1.5.0</version>
+ <namespace>Files_External</namespace>
+
<types>
<filesystem/>
</types>
- <ocsid>166048</ocsid>
- <namespace>Files_External</namespace>
+ <documentation>
+ <admin>admin-external-storage</admin>
+ </documentation>
+ <category>files</category>
+ <category>integration</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
- <settings>
- <admin>OCA\Files_External\Settings\Admin</admin>
- <admin-section>OCA\Files_External\Settings\Section</admin-section>
- <personal>OCA\Files_External\Settings\Personal</personal>
- <personal-section>OCA\Files_External\Settings\PersonalSection</personal-section>
- </settings>
-
<commands>
<command>OCA\Files_External\Command\ListCommand</command>
<command>OCA\Files_External\Command\Config</command>
@@ -46,4 +44,11 @@ External storage can be configured using the GUI or at the command line. This se
<command>OCA\Files_External\Command\Verify</command>
<command>OCA\Files_External\Command\Notify</command>
</commands>
+
+ <settings>
+ <admin>OCA\Files_External\Settings\Admin</admin>
+ <admin-section>OCA\Files_External\Settings\Section</admin-section>
+ <personal>OCA\Files_External\Settings\Personal</personal>
+ <personal-section>OCA\Files_External\Settings\PersonalSection</personal-section>
+ </settings>
</info>
diff --git a/apps/files_external/l10n/ast.js b/apps/files_external/l10n/ast.js
index 294c3f38b53..28d44e12b6d 100644
--- a/apps/files_external/l10n/ast.js
+++ b/apps/files_external/l10n/ast.js
@@ -11,6 +11,7 @@ OC.L10N.register(
"Error generating key pair" : "Fallu xenerando'l par de claves",
"All users. Type to select user or group." : "Tolos usuarios. Escribe pa seleccionar usuariu o grupu.",
"(group)" : "(grupu)",
+ "Delete storage?" : "¿Desaniciar almacenamientu?",
"Saved" : "Guardáu",
"Saving..." : "Guardando...",
"Save" : "Guardar",
diff --git a/apps/files_external/l10n/ast.json b/apps/files_external/l10n/ast.json
index 1f30910b745..7898a38e01d 100644
--- a/apps/files_external/l10n/ast.json
+++ b/apps/files_external/l10n/ast.json
@@ -9,6 +9,7 @@
"Error generating key pair" : "Fallu xenerando'l par de claves",
"All users. Type to select user or group." : "Tolos usuarios. Escribe pa seleccionar usuariu o grupu.",
"(group)" : "(grupu)",
+ "Delete storage?" : "¿Desaniciar almacenamientu?",
"Saved" : "Guardáu",
"Saving..." : "Guardando...",
"Save" : "Guardar",
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index 4cb446d6305..fc9ceed9ca5 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -75,6 +75,7 @@ OC.L10N.register(
"Region" : "リージョン",
"Enable SSL" : "SSLを有効",
"Enable Path Style" : "パス形式を有効",
+ "Legacy (v2) authentication" : "レガシー認証(v2)",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "リモートサブフォルダー",
@@ -99,6 +100,7 @@ OC.L10N.register(
"The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPでのcURLのサポートが有効になっていないか、インストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。",
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPのFTPサポートが有効になっていないか、インストールされていません。%s のマウントは不可能です。システム管理者にインストールを依頼してください。",
"\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\"はインストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。",
+ "External storage support" : "外部ストレージのサポート",
"No external storage configured" : "外部ストレージは設定されていません",
"You can add external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。",
"Name" : "名前",
@@ -119,6 +121,14 @@ OC.L10N.register(
"Advanced settings" : "詳細設定",
"Delete" : "削除",
"Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する",
- "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する"
+ "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "リクエストトークンの取得に失敗しました。アプリのキーとパスワードが正しいことを確認してください。",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "アクセストークンの取得に失敗しました。アプリのキーとパスワードが正しいことを確認してください。",
+ "Step 1 failed. Exception: %s" : "ステップ 1 の実行に失敗しました。例外: %s",
+ "Step 2 failed. Exception: %s" : "ステップ 2 の実行に失敗しました。例外: %s",
+ "Dropbox App Configuration" : "Dropbox アプリ設定",
+ "Google Drive App Configuration" : "Google アプリ設定",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index cb5e680a8b4..ed1d339368d 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -73,6 +73,7 @@
"Region" : "リージョン",
"Enable SSL" : "SSLを有効",
"Enable Path Style" : "パス形式を有効",
+ "Legacy (v2) authentication" : "レガシー認証(v2)",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "リモートサブフォルダー",
@@ -97,6 +98,7 @@
"The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPでのcURLのサポートが有効になっていないか、インストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。",
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPのFTPサポートが有効になっていないか、インストールされていません。%s のマウントは不可能です。システム管理者にインストールを依頼してください。",
"\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\"はインストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。",
+ "External storage support" : "外部ストレージのサポート",
"No external storage configured" : "外部ストレージは設定されていません",
"You can add external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。",
"Name" : "名前",
@@ -117,6 +119,14 @@
"Advanced settings" : "詳細設定",
"Delete" : "削除",
"Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する",
- "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する"
+ "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "リクエストトークンの取得に失敗しました。アプリのキーとパスワードが正しいことを確認してください。",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "アクセストークンの取得に失敗しました。アプリのキーとパスワードが正しいことを確認してください。",
+ "Step 1 failed. Exception: %s" : "ステップ 1 の実行に失敗しました。例外: %s",
+ "Step 2 failed. Exception: %s" : "ステップ 2 の実行に失敗しました。例外: %s",
+ "Dropbox App Configuration" : "Dropbox アプリ設定",
+ "Google Drive App Configuration" : "Google アプリ設定",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 326bd49e9bc..b4c54247267 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -1,28 +1,46 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>files_sharing</id>
<name>File sharing</name>
+ <summary>File sharing</summary>
<description>
This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.
Turning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation.
</description>
- <licence>AGPL</licence>
+ <version>1.6.0</version>
+ <licence>agpl</licence>
<author>Michael Gapczynski</author>
<author>Bjoern Schiessle</author>
+ <namespace>Files_Sharing</namespace>
<default_enable/>
- <version>1.6.0</version>
<types>
<filesystem/>
</types>
+
+ <category>files</category>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
- <public>
- <files>public.php</files>
- </public>
- <namespace>Files_Sharing</namespace>
+ <background-jobs>
+ <job>OCA\Files_Sharing\DeleteOrphanedSharesJob</job>
+ <job>OCA\Files_Sharing\ExpireSharesJob</job>
+ </background-jobs>
+
+ <repair-steps>
+ <post-migration>
+ <step>OCA\Files_Sharing\Migration\OwncloudGuestShareType</step>
+ <step>OCA\Files_Sharing\Migration\SetPasswordColumn</step>
+ </post-migration>
+ </repair-steps>
+
+ <commands>
+ <command>OCA\Files_Sharing\Command\CleanupRemoteStorages</command>
+ </commands>
<activity>
<settings>
@@ -44,25 +62,13 @@ Turning the feature off removes shared files and folders on the server for all s
</providers>
</activity>
- <background-jobs>
- <job>OCA\Files_Sharing\DeleteOrphanedSharesJob</job>
- <job>OCA\Files_Sharing\ExpireSharesJob</job>
- </background-jobs>
-
- <commands>
- <command>OCA\Files_Sharing\Command\CleanupRemoteStorages</command>
- </commands>
-
- <repair-steps>
- <post-migration>
- <step>OCA\Files_Sharing\Migration\OwncloudGuestShareType</step>
- <step>OCA\Files_Sharing\Migration\SetPasswordColumn</step>
- </post-migration>
- </repair-steps>
-
<collaboration>
<plugins>
<plugin type="autocomplete-sort">OCA\Files_Sharing\Collaboration\ShareRecipientSorter</plugin>
</plugins>
</collaboration>
+
+ <public>
+ <files>public.php</files>
+ </public>
</info>
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index a9df4eb22da..e0ea814ebd7 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -88,6 +88,7 @@ OC.L10N.register(
"Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません",
"Cannot increase permissions" : "パーミッションを追加できません",
"Share API is disabled" : "共有APIが無効です。",
+ "File sharing" : "ファイル共有",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
@@ -109,6 +110,7 @@ OC.L10N.register(
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
- "Uploaded files:" : "アップロード済ファイル:"
+ "Uploaded files:" : "アップロード済ファイル:",
+ "%s is publicly shared" : "%s が公開共有されました"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index dbb7604ee6a..0ed2739e522 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -86,6 +86,7 @@
"Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません",
"Cannot increase permissions" : "パーミッションを追加できません",
"Share API is disabled" : "共有APIが無効です。",
+ "File sharing" : "ファイル共有",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
@@ -107,6 +108,7 @@
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
- "Uploaded files:" : "アップロード済ファイル:"
+ "Uploaded files:" : "アップロード済ファイル:",
+ "%s is publicly shared" : "%s が公開共有されました"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js
index f2c387e7591..a2dd0a4708a 100644
--- a/apps/files_sharing/l10n/pt_PT.js
+++ b/apps/files_sharing/l10n/pt_PT.js
@@ -86,6 +86,7 @@ OC.L10N.register(
"Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública",
"Cannot increase permissions" : "Não é possível incrementar as permissões",
"Share API is disabled" : "A partilha de API está desativada",
+ "File sharing" : "Partilha de ficheiro",
"This share is password-protected" : "Esta partilha está protegida por palavra-passe",
"The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.",
"Password" : "Palavra-passe",
diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json
index c6ce44a9f88..5c17afacf97 100644
--- a/apps/files_sharing/l10n/pt_PT.json
+++ b/apps/files_sharing/l10n/pt_PT.json
@@ -84,6 +84,7 @@
"Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública",
"Cannot increase permissions" : "Não é possível incrementar as permissões",
"Share API is disabled" : "A partilha de API está desativada",
+ "File sharing" : "Partilha de ficheiro",
"This share is password-protected" : "Esta partilha está protegida por palavra-passe",
"The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.",
"Password" : "Palavra-passe",
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
index 305906a5446..585e61fe1e8 100644
--- a/apps/files_trashbin/appinfo/info.xml
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -1,26 +1,30 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>files_trashbin</id>
<name>Deleted files</name>
+ <summary>This application enables users to restore files that were deleted from the system.</summary>
<description>
This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.
To prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation.
</description>
- <licence>AGPL</licence>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
<author>Bjoern Schiessle</author>
+ <namespace>Files_Trashbin</namespace>
<default_enable/>
- <version>1.4.0</version>
<types>
<filesystem/>
</types>
- <namespace>Files_Trashbin</namespace>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<documentation>
<user>user-trashbin</user>
</documentation>
+ <category>files</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<background-jobs>
<job>OCA\Files_Trashbin\BackgroundJob\ExpireTrash</job>
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index 511b1713cb1..8f7e4d7b716 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -1,26 +1,30 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>files_versions</id>
<name>Versions</name>
- <licence>AGPL</licence>
- <author>Frank Karlitschek</author>
- <author>Bjoern Schiessle</author>
+ <summary>This application automatically maintains older versions of files that are changed.</summary>
<description>
- This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.
-In addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.
+ This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.
+ In addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.
</description>
<version>1.7.0</version>
+ <licence>agpl</licence>
+ <author>Frank Karlitschek</author>
+ <author>Bjoern Schiessle</author>
+ <namespace>Files_Versions</namespace>
+ <default_enable/>
<types>
<filesystem/>
</types>
- <namespace>Files_Versions</namespace>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<documentation>
<user>user-versions</user>
</documentation>
- <default_enable/>
+ <category>files</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<background-jobs>
<job>OCA\Files_Versions\BackgroundJob\ExpireVersions</job>
diff --git a/apps/lookup_server_connector/appinfo/info.xml b/apps/lookup_server_connector/appinfo/info.xml
index 31fc4fe8e5f..19ffeb4de1c 100644
--- a/apps/lookup_server_connector/appinfo/info.xml
+++ b/apps/lookup_server_connector/appinfo/info.xml
@@ -1,18 +1,22 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>lookup_server_connector</id>
<name>Lookup Server Connector</name>
+ <summary>Sync public user information with the lookup server</summary>
<description>Sync public user information with the lookup server</description>
- <licence>AGPL</licence>
+ <version>1.2.0</version>
+ <licence>agpl</licence>
<author>Bjoern Schiessle</author>
<namespace>LookupServerConnector</namespace>
- <version>1.2.0</version>
- <category>other</category>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<default_enable/>
<types>
<authentication/>
</types>
+ <category>integration</category>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
</info>
diff --git a/apps/oauth2/appinfo/info.xml b/apps/oauth2/appinfo/info.xml
index 0bbad31dab3..ac18b5cdb94 100644
--- a/apps/oauth2/appinfo/info.xml
+++ b/apps/oauth2/appinfo/info.xml
@@ -1,16 +1,21 @@
<?xml version="1.0"?>
-<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>oauth2</id>
<name>OAuth 2.0</name>
+ <summary>Allows OAuth2 compatible authentication from other web applications.</summary>
<description>The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications.</description>
+ <version>1.2.0</version>
<licence>agpl</licence>
<author>Lukas Reschke</author>
<namespace>OAuth2</namespace>
- <version>1.2.0</version>
<default_enable/>
<types>
<authentication/>
</types>
+
+ <category>integration</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
diff --git a/apps/oauth2/l10n/ast.js b/apps/oauth2/l10n/ast.js
index ddb11d0b9ed..07a7510eda6 100644
--- a/apps/oauth2/l10n/ast.js
+++ b/apps/oauth2/l10n/ast.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"oauth2",
{
+ "OAuth 2.0" : "OAuth 2.0",
"OAuth 2.0 clients" : "Veceros d'OAuth 2.0",
"OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 permite a los servicios esternos solicitar accesu a %s.",
"Name" : "Nome",
diff --git a/apps/oauth2/l10n/ast.json b/apps/oauth2/l10n/ast.json
index 5e2db794420..53ac163ef17 100644
--- a/apps/oauth2/l10n/ast.json
+++ b/apps/oauth2/l10n/ast.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "OAuth 2.0" : "OAuth 2.0",
"OAuth 2.0 clients" : "Veceros d'OAuth 2.0",
"OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 permite a los servicios esternos solicitar accesu a %s.",
"Name" : "Nome",
diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml
index 849e74432f0..05e805c1170 100644
--- a/apps/provisioning_api/appinfo/info.xml
+++ b/apps/provisioning_api/appinfo/info.xml
@@ -1,7 +1,9 @@
-<?xml version="1.0"?>
-<info>
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>provisioning_api</id>
<name>Provisioning API</name>
+ <summary>This application enables a set of APIs that external systems can use to manage users, groups and apps.</summary>
<description>
This application enables a set of APIs that external systems can use to create, edit, delete and query user
attributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users
@@ -11,17 +13,19 @@
listed above. More information is available in the Provisioning API documentation, including example calls
and server responses.
</description>
- <licence>AGPL</licence>
- <author>Tom Needham</author>
- <default_enable/>
- <documentation>
- <admin>admin-provisioning-api</admin>
- </documentation>
<version>1.4.0</version>
+ <licence>agpl</licence>
+ <author>Tom Needham</author>
<namespace>Provisioning_API</namespace>
+ <default_enable/>
<types>
<prevent_group_restriction/>
</types>
+ <documentation>
+ <admin>admin-provisioning-api</admin>
+ </documentation>
+ <category>integration</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
diff --git a/apps/sharebymail/appinfo/info.xml b/apps/sharebymail/appinfo/info.xml
index f1cd70a66b3..6bec13e819b 100644
--- a/apps/sharebymail/appinfo/info.xml
+++ b/apps/sharebymail/appinfo/info.xml
@@ -1,29 +1,32 @@
<?xml version="1.0"?>
-<info>
- <id>sharebymail</id>
- <name>Share by mail</name>
- <description>Share provider which allows you to share files by mail</description>
- <licence>AGPL</licence>
- <author>Bjoern Schiessle</author>
- <version>1.4.0</version>
- <namespace>ShareByMail</namespace>
- <category>other</category>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
- <default_enable/>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>sharebymail</id>
+ <name>Share by mail</name>
+ <summary>Share provider which allows you to share files by mail</summary>
+ <description>Share provider which allows you to share files by mail</description>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
+ <author>Bjoern Schiessle</author>
+ <namespace>ShareByMail</namespace>
+ <default_enable/>
- <types>
- <filesystem/>
- </types>
+ <types>
+ <filesystem/>
+ </types>
+ <category>social</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
- <settings>
- <admin>OCA\ShareByMail\Settings\Admin</admin>
- </settings>
+ <settings>
+ <admin>OCA\ShareByMail\Settings\Admin</admin>
+ </settings>
- <activity>
- <providers>
- <provider>OCA\ShareByMail\Activity</provider>
- </providers>
- </activity>
+ <activity>
+ <providers>
+ <provider>OCA\ShareByMail\Activity</provider>
+ </providers>
+ </activity>
</info>
diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml
index e46daf4b042..6484cd450ca 100644
--- a/apps/systemtags/appinfo/info.xml
+++ b/apps/systemtags/appinfo/info.xml
@@ -1,21 +1,26 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>systemtags</id>
<name>Collaborative tags</name>
+ <summary>Collaborative tagging functionality which shares tags among users.</summary>
<description>Collaborative tagging functionality which shares tags among users. Great for teams.
(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)</description>
- <licence>AGPL</licence>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
<author>Vincent Petry</author>
<author>Joas Schilling</author>
- <default_enable/>
- <version>1.4.0</version>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
<namespace>SystemTags</namespace>
+ <default_enable/>
<types>
<logging/>
</types>
+ <category>files</category>
+ <category>organization</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<settings>
<admin>OCA\SystemTags\Settings\Admin</admin>
</settings>
diff --git a/apps/testing/appinfo/info.xml b/apps/testing/appinfo/info.xml
index d0d350a0364..81be7649d8e 100644
--- a/apps/testing/appinfo/info.xml
+++ b/apps/testing/appinfo/info.xml
@@ -1,15 +1,19 @@
-<?xml version="1.0"?>
-<info>
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>testing</id>
<name>QA testing</name>
+ <summary>This app is only for testing! It is dangerous to have it enabled in a live instance</summary>
<description>This app is only for testing! It is dangerous to have it enabled in a live instance</description>
- <licence>AGPL</licence>
- <author>Joas Schilling</author>
<version>1.4.0</version>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
+ <licence>agpl</licence>
+ <author>Joas Schilling</author>
<types>
<authentication/>
</types>
+ <category>monitoring</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
</info>
diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml
index d2eacea77b3..63ae7d196c1 100644
--- a/apps/theming/appinfo/info.xml
+++ b/apps/theming/appinfo/info.xml
@@ -1,23 +1,25 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>theming</id>
<name>Theming</name>
+ <summary>Adjust the Nextcloud theme</summary>
<description>Adjust the Nextcloud theme</description>
- <licence>AGPL</licence>
- <author>Nextcloud</author>
<version>1.5.0</version>
+ <licence>agpl</licence>
+ <author>Nextcloud</author>
<namespace>Theming</namespace>
- <category>other</category>
-
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
+ <default_enable/>
<types>
<logging/>
</types>
- <default_enable/>
+ <category>customization</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<settings>
<admin>OCA\Theming\Settings\Admin</admin>
diff --git a/apps/theming/l10n/ast.js b/apps/theming/l10n/ast.js
index 7d205db32a0..1155c63b78c 100644
--- a/apps/theming/l10n/ast.js
+++ b/apps/theming/l10n/ast.js
@@ -8,6 +8,8 @@ OC.L10N.register(
"The given web address is too long" : "La direición web dada ye perllarga",
"The given slogan is too long" : "La conseña dada ye perllarga",
"The given color is invalid" : "El color dau ye perllargu",
+ "No file was uploaded" : "Nun se xubieron fichjeros",
+ "Failed to write file to disk." : "Fallu al escribir el ficheru nel discu",
"No file uploaded" : "Nun se xubieron ficheros",
"Unsupported image type" : "Triba non sofitada d'imaxe",
"You are already using a custom theme" : "Yá tas usando un tema personalizáu",
diff --git a/apps/theming/l10n/ast.json b/apps/theming/l10n/ast.json
index e6a8a2e718a..d652ff9d5f5 100644
--- a/apps/theming/l10n/ast.json
+++ b/apps/theming/l10n/ast.json
@@ -6,6 +6,8 @@
"The given web address is too long" : "La direición web dada ye perllarga",
"The given slogan is too long" : "La conseña dada ye perllarga",
"The given color is invalid" : "El color dau ye perllargu",
+ "No file was uploaded" : "Nun se xubieron fichjeros",
+ "Failed to write file to disk." : "Fallu al escribir el ficheru nel discu",
"No file uploaded" : "Nun se xubieron ficheros",
"Unsupported image type" : "Triba non sofitada d'imaxe",
"You are already using a custom theme" : "Yá tas usando un tema personalizáu",
diff --git a/apps/twofactor_backupcodes/appinfo/info.xml b/apps/twofactor_backupcodes/appinfo/info.xml
index f2581de63e0..9fe0071a442 100644
--- a/apps/twofactor_backupcodes/appinfo/info.xml
+++ b/apps/twofactor_backupcodes/appinfo/info.xml
@@ -1,29 +1,32 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>twofactor_backupcodes</id>
<name>Two factor backup codes</name>
+ <summary>A two-factor auth backup codes provider</summary>
<description>A two-factor auth backup codes provider</description>
+ <version>1.3.0</version>
<licence>agpl</licence>
<author>Christoph Wurst</author>
- <version>1.3.0</version>
<namespace>TwoFactorBackupCodes</namespace>
- <category>other</category>
+ <category>integration</category>
+ <category>security</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <dependencies>
+ <nextcloud min-version="14" max-version="14" />
+ </dependencies>
<two-factor-providers>
<provider>OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider</provider>
</two-factor-providers>
- <dependencies>
- <nextcloud min-version="14" max-version="14" />
- </dependencies>
+ <settings>
+ <personal>OCA\TwoFactorBackupCodes\Settings\Personal</personal>
+ </settings>
<activity>
<providers>
<provider>OCA\TwoFactorBackupCodes\Activity\Provider</provider>
</providers>
</activity>
-
- <settings>
- <personal>OCA\TwoFactorBackupCodes\Settings\Personal</personal>
- </settings>
</info>
diff --git a/apps/twofactor_backupcodes/l10n/nb.js b/apps/twofactor_backupcodes/l10n/nb.js
index 82ce6520eb0..42fc5031948 100644
--- a/apps/twofactor_backupcodes/l10n/nb.js
+++ b/apps/twofactor_backupcodes/l10n/nb.js
@@ -13,6 +13,7 @@ OC.L10N.register(
"You created two-factor backup codes for your account" : "Du opprettet to-trinns bekreftelse sikkerhetskopi-koder",
"Backup code" : "Sikkerhetskopi-kode",
"Use backup code" : "Bruker sikkerhetskopi-kode",
+ "Two factor backup codes" : "Sikkerhetskopikoder for tofaktor",
"Second-factor backup codes" : "To-trinns bekreftelse sikkerhetskopi-koder"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/nb.json b/apps/twofactor_backupcodes/l10n/nb.json
index a5d95f4be41..25927e0f6e8 100644
--- a/apps/twofactor_backupcodes/l10n/nb.json
+++ b/apps/twofactor_backupcodes/l10n/nb.json
@@ -11,6 +11,7 @@
"You created two-factor backup codes for your account" : "Du opprettet to-trinns bekreftelse sikkerhetskopi-koder",
"Backup code" : "Sikkerhetskopi-kode",
"Use backup code" : "Bruker sikkerhetskopi-kode",
+ "Two factor backup codes" : "Sikkerhetskopikoder for tofaktor",
"Second-factor backup codes" : "To-trinns bekreftelse sikkerhetskopi-koder"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml
index 14ec98916ab..a227ccd6557 100644
--- a/apps/updatenotification/appinfo/info.xml
+++ b/apps/updatenotification/appinfo/info.xml
@@ -1,13 +1,17 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>updatenotification</id>
<name>Update notification</name>
+ <summary>Displays update notifications for Nextcloud and provides the SSO for the updater.</summary>
<description>Displays update notifications for Nextcloud and provides the SSO for the updater.</description>
- <licence>AGPL</licence>
- <author>Lukas Reschke</author>
<version>1.4.1</version>
+ <licence>agpl</licence>
+ <author>Lukas Reschke</author>
<namespace>UpdateNotification</namespace>
<default_enable/>
+ <category>monitoring</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index dbf9a736899..bb5ebce4fc5 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -1,43 +1,46 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>user_ldap</id>
<name>LDAP user and group backend</name>
+ <summary>This application enables administrators to connect Nextcloud to an LDAP-based user directory.</summary>
<description>This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.
A user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.
</description>
- <licence>AGPL</licence>
+ <version>1.4.0</version>
+ <licence>agpl</licence>
<author>Dominik Schmidt</author>
<author>Arthur Schiwon</author>
- <version>1.4.0</version>
+ <namespace>User_LDAP</namespace>
<types>
<authentication/>
</types>
<documentation>
<admin>admin-ldap</admin>
</documentation>
+ <category>integration</category>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<lib>ldap</lib>
<nextcloud min-version="14" max-version="14" />
</dependencies>
- <namespace>User_LDAP</namespace>
-
<background-jobs>
<job>OCA\User_LDAP\Jobs\UpdateGroups</job>
<job>OCA\User_LDAP\Jobs\CleanUp</job>
<job>OCA\User_LDAP\Jobs\Sync</job>
</background-jobs>
- <settings>
- <admin>OCA\User_LDAP\Settings\Admin</admin>
- <admin-section>OCA\User_LDAP\Settings\Section</admin-section>
- </settings>
-
<repair-steps>
<post-migration>
<step>OCA\User_LDAP\Migration\UUIDFixInsert</step>
</post-migration>
</repair-steps>
+
+ <settings>
+ <admin>OCA\User_LDAP\Settings\Admin</admin>
+ <admin-section>OCA\User_LDAP\Settings\Section</admin-section>
+ </settings>
</info>
diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml
index 5d51333f750..1c069ca5432 100644
--- a/apps/workflowengine/appinfo/info.xml
+++ b/apps/workflowengine/appinfo/info.xml
@@ -1,22 +1,24 @@
<?xml version="1.0"?>
-<info>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>workflowengine</id>
<name>Files workflow engine</name>
- <description></description>
- <licence>AGPL</licence>
- <author>Morris Jobke</author>
+ <summary>Files workflow engine</summary>
+ <description>Files workflow engine</description>
<version>1.4.0</version>
+ <licence>agpl</licence>
+ <author>Morris Jobke</author>
<namespace>WorkflowEngine</namespace>
- <category>other</category>
- <website>https://github.com/nextcloud/server</website>
- <bugs>https://github.com/nextcloud/server/issues</bugs>
- <repository type="git">https://github.com/nextcloud/server.git</repository>
-
<types>
<filesystem/>
</types>
+ <category>files</category>
+ <website>https://github.com/nextcloud/server</website>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <repository>https://github.com/nextcloud/server.git</repository>
+
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
diff --git a/apps/workflowengine/l10n/ja.js b/apps/workflowengine/l10n/ja.js
index 77f73ff7956..a6eca63cbc9 100644
--- a/apps/workflowengine/l10n/ja.js
+++ b/apps/workflowengine/l10n/ja.js
@@ -59,6 +59,7 @@ OC.L10N.register(
"Check %s is invalid" : "チェック %s は無効です",
"Check #%s does not exist" : "チェック #%s は存在しません",
"Workflow" : "ワークフロー",
+ "Files workflow engine" : "ファイルワークフローエンジン",
"Open documentation" : "ドキュメントを開く",
"Add rule group" : "ルールグループを追加する",
"Short rule description" : "ルールの簡潔な説明",
diff --git a/apps/workflowengine/l10n/ja.json b/apps/workflowengine/l10n/ja.json
index ecaf3af32f5..3f3b5673a24 100644
--- a/apps/workflowengine/l10n/ja.json
+++ b/apps/workflowengine/l10n/ja.json
@@ -57,6 +57,7 @@
"Check %s is invalid" : "チェック %s は無効です",
"Check #%s does not exist" : "チェック #%s は存在しません",
"Workflow" : "ワークフロー",
+ "Files workflow engine" : "ファイルワークフローエンジン",
"Open documentation" : "ドキュメントを開く",
"Add rule group" : "ルールグループを追加する",
"Short rule description" : "ルールの簡潔な説明",
diff --git a/core/Command/App/CheckCode.php b/core/Command/App/CheckCode.php
index 82a137e58e1..530c1d30ec0 100644
--- a/core/Command/App/CheckCode.php
+++ b/core/Command/App/CheckCode.php
@@ -44,20 +44,12 @@ use OC\App\CodeChecker\PrivateCheck;
class CheckCode extends Command implements CompletionAwareInterface {
- /** @var InfoParser */
- private $infoParser;
-
protected $checkers = [
'private' => PrivateCheck::class,
'deprecation' => DeprecationCheck::class,
'strong-comparison' => StrongComparisonCheck::class,
];
- public function __construct(InfoParser $infoParser) {
- parent::__construct();
- $this->infoParser = $infoParser;
- }
-
protected function configure() {
$this
->setName('app:check-code')
@@ -134,50 +126,11 @@ class CheckCode extends Command implements CompletionAwareInterface {
}
if(!$input->getOption('skip-validate-info')) {
- $infoChecker = new InfoChecker($this->infoParser);
-
- $infoChecker->listen('InfoChecker', 'mandatoryFieldMissing', function($key) use ($output) {
- $output->writeln("<error>Mandatory field missing: $key</error>");
- });
-
- $infoChecker->listen('InfoChecker', 'deprecatedFieldFound', function($key, $value) use ($output) {
- if($value === [] || is_null($value) || $value === '') {
- $output->writeln("<info>Deprecated field available: $key</info>");
- } else {
- $output->writeln("<info>Deprecated field available: $key => $value</info>");
- }
- });
-
- $infoChecker->listen('InfoChecker', 'missingRequirement', function($minMax) use ($output) {
- $output->writeln("<error>Nextcloud $minMax version requirement missing</error>");
- });
-
- $infoChecker->listen('InfoChecker', 'differentVersions', function($versionFile, $infoXML) use ($output) {
- $output->writeln("<error>Different versions provided (appinfo/version: $versionFile - appinfo/info.xml: $infoXML)</error>");
+ $infoChecker = new InfoChecker();
+ $infoChecker->listen('InfoChecker', 'parseError', function($error) use ($output) {
+ $output->writeln("<error>Invalid appinfo.xml file found: $error</error>");
});
- $infoChecker->listen('InfoChecker', 'sameVersions', function($path) use ($output) {
- $output->writeln("<info>Version file isn't needed anymore and can be safely removed ($path)</info>");
- });
-
- $infoChecker->listen('InfoChecker', 'migrateVersion', function($version) use ($output) {
- $output->writeln("<error>Migrate the app version to appinfo/info.xml (add <version>$version</version> to appinfo/info.xml and remove appinfo/version)</error>");
- });
-
- if(OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
- $infoChecker->listen('InfoChecker', 'mandatoryFieldFound', function($key, $value) use ($output) {
- $output->writeln("<info>Mandatory field available: $key => $value</info>");
- });
-
- $infoChecker->listen('InfoChecker', 'optionalFieldFound', function($key, $value) use ($output) {
- $output->writeln("<info>Optional field available: $key => $value</info>");
- });
-
- $infoChecker->listen('InfoChecker', 'unusedFieldFound', function($key, $value) use ($output) {
- $output->writeln("<info>Unused field available: $key => $value</info>");
- });
- }
-
$infoErrors = $infoChecker->analyse($appId);
$errors = array_merge($errors, $infoErrors);
diff --git a/core/l10n/nb.js b/core/l10n/nb.js
index 1938d375467..0f70985894e 100644
--- a/core/l10n/nb.js
+++ b/core/l10n/nb.js
@@ -316,7 +316,7 @@ OC.L10N.register(
"This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren hvis denne meldingen var uventet eller ikke forsvinner.",
"Thank you for your patience." : "Takk for din tålmodighet.",
- "%s (3rdparty)" : "%s (3dje-part)",
+ "%s (3rdparty)" : "%s (tredjepart)",
"There was an error loading your contacts" : "Feil ved innlasting av kontaktene dine",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
diff --git a/core/l10n/nb.json b/core/l10n/nb.json
index cec1884ec64..2d732a1bb4b 100644
--- a/core/l10n/nb.json
+++ b/core/l10n/nb.json
@@ -314,7 +314,7 @@
"This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren hvis denne meldingen var uventet eller ikke forsvinner.",
"Thank you for your patience." : "Takk for din tålmodighet.",
- "%s (3rdparty)" : "%s (3dje-part)",
+ "%s (3rdparty)" : "%s (tredjepart)",
"There was an error loading your contacts" : "Feil ved innlasting av kontaktene dine",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 58e7a617482..02c2423e6a4 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"Checking updates of apps" : "A procurar por atualizações das aplicações",
"Checking for update of app \"%s\" in appstore" : "A procurar por atualizações da aplicação \"%s\" na appstore",
"Update app \"%s\" from appstore" : "Atualizar app \"%s\" da appstore",
+ "Checked for update of app \"%s\" in appstore" : "Actualização pra a aplicação \"%s\" procuradas na loja.",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "A verificar se o esquema da base de dados para %s pode ser atualizado (isto pode demorar algum tempo dependendo do tamanho da base de dados)",
"Checked database schema update for apps" : "Atualização do esquema da base de dados para as aplicações verificada.",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
@@ -59,6 +60,7 @@ OC.L10N.register(
"Looking for {term} …" : "Procurando por {term} …",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Existiram alguns problemas com a verificação de integridade do código. Mais informação…</a>",
"No action available" : "Nenhuma acção disponível",
+ "Error fetching contact actions" : "Erro ao obter acções dos contactos",
"Settings" : "Configurações",
"Connection to server lost" : "Ligação perdida ao servidor",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema a carregar a página. A recarregar dentro de %n segundos","Problema ao carregar a página. A recarregar dentro de %n segundos"],
@@ -106,6 +108,12 @@ OC.L10N.register(
"So-so password" : "Senha aceitável",
"Good password" : "Senha boa",
"Strong password" : "Senha forte",
+ "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiros, porque a interface WebDAV parece estar com problemas.",
+ "Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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. Establish a connection from this server to the Internet to enjoy all features." : "Este servidor não tem ligação à Internet: Não foi possível detectar vários pontos de extremidade. Isso significa que alguns dos recursos como a montagem de armazenamento externo, notificações sobre actualizações ou instalação de aplicações de terceiros não funcionarão. Pode também não ser possível aceder a ficheiros remotamente e enviar emails de notificação. Sugerimos que active a ligação à Internet para este servidor se desejar ter todos os recursos.",
+ "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure a memcache, se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP, o que é altamente desencorajado por motivos de segurança. Pode ser encontrada mais informação na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
+ "You are currently running PHP {version}. Upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Neste momento está a executar PHP {version}. Aconselhamos actualizar a versão de PHP para tirar partido das <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">actualizações de desempenho e segurança fornecidas pelo PHP Group</a> assim que a sua distribuição as suporte.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"Shared" : "Partilhado",
"Shared with" : "Partilhado com ",
@@ -160,6 +168,7 @@ OC.L10N.register(
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Partilhar",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo, um identificador de federação ou um endereço de e-mail.",
"Share with other people by entering a user or group or a federated cloud ID." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo, um ID de cloud federada ou um endereço de e-mail.",
"Share with other people by entering a user or group or an email address." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo ou um endereço de e-mail.",
"Name or email address..." : "Nome ou endereço de email...",
@@ -219,6 +228,7 @@ OC.L10N.register(
"Trace" : "Rasto",
"Security warning" : "Aviso de Segurança",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados e os respetivos ficheiros estão provavelmente acessíveis a partir da internet pois o ficheiro .htaccess não funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
"Username" : "Nome de utilizador",
"Storage & database" : "Armazenamento e base de dados",
@@ -257,6 +267,9 @@ OC.L10N.register(
"Forgot password?" : "Senha esquecida?",
"Back to log in" : "Voltar à entrada",
"Alternative Logins" : "Contas de Acesso Alternativas",
+ "Account access" : "Acesso a conta",
+ "You are about to grant %s access to your %s account." : "Está prestes a permitir %s aceder á sua conta %s.",
+ "Grant access" : "Conceder acesso",
"Redirecting …" : "A redirecionar...",
"New password" : "Nova senha",
"New Password" : "Nova senha",
@@ -280,6 +293,12 @@ OC.L10N.register(
"This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está atualmente no modo de manutenção, o que poderá demorar algum tempo.",
"This page will refresh itself when the %s instance is available again." : "Esta página irá ser atualizada quando a instância %s ficar novamente disponível.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou apareceu inesperadamente.",
- "Thank you for your patience." : "Obrigado pela sua paciência."
+ "Thank you for your patience." : "Obrigado pela sua paciência.",
+ "This action requires you to confirm your password:" : "Esta acção requer a confirmação da senha:",
+ "Wrong password. Reset it?" : "Senha errada. Redefini-la?",
+ "You are about to grant \"%s\" access to your %s account." : "Está prestes a permitir \"%s\" aceder à sua conta %s.",
+ "You are accessing the server from an untrusted domain." : "Está a aceder ao servidor a partir de um domínio que não é de confiança.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor, contacte o seu administrador. Se é um administrador desta instância, configure a definição \"trusted_domains\" em config/config.php. É fornecido um exemplo de configuração em config/config.sample.php.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 53b19e170e8..fa289b6ed2e 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -39,6 +39,7 @@
"Checking updates of apps" : "A procurar por atualizações das aplicações",
"Checking for update of app \"%s\" in appstore" : "A procurar por atualizações da aplicação \"%s\" na appstore",
"Update app \"%s\" from appstore" : "Atualizar app \"%s\" da appstore",
+ "Checked for update of app \"%s\" in appstore" : "Actualização pra a aplicação \"%s\" procuradas na loja.",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "A verificar se o esquema da base de dados para %s pode ser atualizado (isto pode demorar algum tempo dependendo do tamanho da base de dados)",
"Checked database schema update for apps" : "Atualização do esquema da base de dados para as aplicações verificada.",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
@@ -57,6 +58,7 @@
"Looking for {term} …" : "Procurando por {term} …",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Existiram alguns problemas com a verificação de integridade do código. Mais informação…</a>",
"No action available" : "Nenhuma acção disponível",
+ "Error fetching contact actions" : "Erro ao obter acções dos contactos",
"Settings" : "Configurações",
"Connection to server lost" : "Ligação perdida ao servidor",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema a carregar a página. A recarregar dentro de %n segundos","Problema ao carregar a página. A recarregar dentro de %n segundos"],
@@ -104,6 +106,12 @@
"So-so password" : "Senha aceitável",
"Good password" : "Senha boa",
"Strong password" : "Senha forte",
+ "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiros, porque a interface WebDAV parece estar com problemas.",
+ "Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. 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. Establish a connection from this server to the Internet to enjoy all features." : "Este servidor não tem ligação à Internet: Não foi possível detectar vários pontos de extremidade. Isso significa que alguns dos recursos como a montagem de armazenamento externo, notificações sobre actualizações ou instalação de aplicações de terceiros não funcionarão. Pode também não ser possível aceder a ficheiros remotamente e enviar emails de notificação. Sugerimos que active a ligação à Internet para este servidor se desejar ter todos os recursos.",
+ "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure a memcache, se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP, o que é altamente desencorajado por motivos de segurança. Pode ser encontrada mais informação na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
+ "You are currently running PHP {version}. Upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Neste momento está a executar PHP {version}. Aconselhamos actualizar a versão de PHP para tirar partido das <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">actualizações de desempenho e segurança fornecidas pelo PHP Group</a> assim que a sua distribuição as suporte.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"Shared" : "Partilhado",
"Shared with" : "Partilhado com ",
@@ -158,6 +166,7 @@
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Partilhar",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo, um identificador de federação ou um endereço de e-mail.",
"Share with other people by entering a user or group or a federated cloud ID." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo, um ID de cloud federada ou um endereço de e-mail.",
"Share with other people by entering a user or group or an email address." : "Partilhar com terceiros introduzindo um nome de utilizador ou grupo ou um endereço de e-mail.",
"Name or email address..." : "Nome ou endereço de email...",
@@ -217,6 +226,7 @@
"Trace" : "Rasto",
"Security warning" : "Aviso de Segurança",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados e os respetivos ficheiros estão provavelmente acessíveis a partir da internet pois o ficheiro .htaccess não funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
"Username" : "Nome de utilizador",
"Storage & database" : "Armazenamento e base de dados",
@@ -255,6 +265,9 @@
"Forgot password?" : "Senha esquecida?",
"Back to log in" : "Voltar à entrada",
"Alternative Logins" : "Contas de Acesso Alternativas",
+ "Account access" : "Acesso a conta",
+ "You are about to grant %s access to your %s account." : "Está prestes a permitir %s aceder á sua conta %s.",
+ "Grant access" : "Conceder acesso",
"Redirecting …" : "A redirecionar...",
"New password" : "Nova senha",
"New Password" : "Nova senha",
@@ -278,6 +291,12 @@
"This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está atualmente no modo de manutenção, o que poderá demorar algum tempo.",
"This page will refresh itself when the %s instance is available again." : "Esta página irá ser atualizada quando a instância %s ficar novamente disponível.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou apareceu inesperadamente.",
- "Thank you for your patience." : "Obrigado pela sua paciência."
+ "Thank you for your patience." : "Obrigado pela sua paciência.",
+ "This action requires you to confirm your password:" : "Esta acção requer a confirmação da senha:",
+ "Wrong password. Reset it?" : "Senha errada. Redefini-la?",
+ "You are about to grant \"%s\" access to your %s account." : "Está prestes a permitir \"%s\" aceder à sua conta %s.",
+ "You are accessing the server from an untrusted domain." : "Está a aceder ao servidor a partir de um domínio que não é de confiança.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor, contacte o seu administrador. Se é um administrador desta instância, configure a definição \"trusted_domains\" em config/config.php. É fornecido um exemplo de configuração em config/config.sample.php.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/register_command.php b/core/register_command.php
index 372d775dc14..578b4f799b6 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -40,8 +40,7 @@
$application->add(new \Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand());
$application->add(new OC\Core\Command\Status);
$application->add(new OC\Core\Command\Check(\OC::$server->getSystemConfig()));
-$infoParser = new \OC\App\InfoParser();
-$application->add(new OC\Core\Command\App\CheckCode($infoParser));
+$application->add(new OC\Core\Command\App\CheckCode());
$application->add(new OC\Core\Command\L10n\CreateJs());
$application->add(new \OC\Core\Command\Integrity\SignApp(
\OC::$server->getIntegrityCodeChecker(),
diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js
index 73955dbdb93..3d9a5084ab9 100644
--- a/lib/l10n/ast.js
+++ b/lib/l10n/ast.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Invalid image" : "Imaxe inválida",
"Avatar image is not square" : "La imaxe del avatar nun ye cuadrada",
"today" : "güei",
+ "tomorrow" : "mañana",
"yesterday" : "ayeri",
"_%n day ago_::_%n days ago_" : ["hai %n día","hai %n díes"],
"last month" : "mes caberu",
diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json
index 3e0047ee423..a52d3721b34 100644
--- a/lib/l10n/ast.json
+++ b/lib/l10n/ast.json
@@ -23,6 +23,7 @@
"Invalid image" : "Imaxe inválida",
"Avatar image is not square" : "La imaxe del avatar nun ye cuadrada",
"today" : "güei",
+ "tomorrow" : "mañana",
"yesterday" : "ayeri",
"_%n day ago_::_%n days ago_" : ["hai %n día","hai %n díes"],
"last month" : "mes caberu",
diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js
index 223f7286a00..77d44beac2c 100644
--- a/lib/l10n/pt_PT.js
+++ b/lib/l10n/pt_PT.js
@@ -7,6 +7,10 @@ OC.L10N.register(
"This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Isto pode geralmente ser corrigido ao adicionar permissões de escrita à pasta de configuração ao servidor web. Ver %s.",
"Sample configuration detected" : "Detetado exemplo de configuração",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "%1$s and %2$s" : "%1$s e %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
"PHP %s or higher is required." : "Necessário PHP %s ou superior.",
"PHP with a version lower than %s is required." : "É necessário um PHP com uma versão inferir a %s.",
"%sbit or higher PHP required." : "Necessário PHP %sbit ou superior.",
@@ -18,13 +22,25 @@ OC.L10N.register(
"Following platforms are supported: %s" : "São suportadas as seguintes plataformas: %s",
"Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "Avatar image is not square" : "A imagem do avatar não é quadrada.",
"today" : "hoje",
"tomorrow" : "Amanhã",
"yesterday" : "ontem",
+ "_in %n day_::_in %n days_" : ["em %n dia","em %n dias"],
"_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"],
+ "next month" : "Próximo mês",
"last month" : "ultimo mês",
+ "_in %n month_::_in %n months_" : ["em %n mês","em %n meses"],
+ "_%n month ago_::_%n months ago_" : ["%n mês atrás","%n meses atrás"],
+ "next year" : "Próximo ano",
"last year" : "ano passado",
+ "_in %n year_::_in %n years_" : ["dentro de%n ano","dentro de%n anos"],
"_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"],
+ "_in %n hour_::_in %n hours_" : ["dentro de %n hora","dentro de %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["%n hora atrás","%n horas atrás"],
+ "_in %n minute_::_in %n minutes_" : ["dentro de %n minuto","dentro de %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuto atrás","%n minutos atrás"],
+ "in a few seconds" : "em breves segundos",
"seconds ago" : "Minutos atrás",
"File name is a reserved word" : "Nome de ficheiro é uma palavra reservada",
"File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido",
@@ -39,9 +55,19 @@ OC.L10N.register(
"Log out" : "Sair",
"Users" : "Utilizadores",
"Unknown user" : "Utilizador desconhecido",
+ "Basic settings" : "Definições básicas",
"Sharing" : "Partilhar",
"Security" : "Segurança",
+ "Encryption" : "Encriptação",
+ "Additional settings" : "Definições adicionais",
+ "Tips & tricks" : "Dicas e truques",
+ "Personal info" : "Informação pessoal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
"__language_name__" : "Português",
+ "Verifying" : "A verificar",
+ "Verifying …" : "A verificar...",
+ "Verify" : "Verificar",
"%s enter the database username and name." : "%s introduza o nome de utilizador da base de dados e o nome da base de dados.",
"%s enter the database username." : "%s introduza o nome de utilizador da base de dados",
"%s enter the database name." : "%s introduza o nome da base de dados",
@@ -49,6 +75,7 @@ OC.L10N.register(
"Oracle connection could not be established" : "Não foi possível estabelecer a ligação Oracle",
"Oracle username and/or password not valid" : "Nome de utilizador/password do Oracle inválida",
"PostgreSQL username and/or password not valid" : "Nome de utilizador/password do PostgreSQL inválido",
+ "You need to enter details of an existing account." : "Precisa de introduzir detalhes de uma conta existente.",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o open_basedir foi configurado no php.ini. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
@@ -82,19 +109,74 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "A partilha %s falhou, porque repartilhar não é permitido",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "A partilha %s falhou porque a partilha da interface para %s não conseguiu encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "A partilha %s falhou, devido ao ficheiro não poder ser encontrado na cache de ficheiros",
+ "Can’t increase permissions of %s" : "Não é possível aumentar as permissões de %s",
+ "Files can’t be shared with delete permissions" : "Ficheiros não podem ser partilhados com permissões de apagar",
+ "Files can’t be shared with create permissions" : "Ficheiros não podem ser partilhados com permissões de criação",
"Expiration date is in the past" : "A data de expiração está no passado",
+ "Can’t set expiration date more than %s days in the future" : "Não é possível definir data de expiração a mais de %s dias no futuro",
"%s shared »%s« with you" : "%s partilhado »%s« consigo",
+ "%s shared »%s« with you." : "%s partilhou »%s« consigo.",
+ "Click the button below to open it." : "Clicar no botão abaixo para abrir.",
+ "Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s via %s",
+ "The requested share does not exist anymore" : "A partilha requisitada já não existe",
"Could not find category \"%s\"" : "Não foi encontrado a categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Segunda-feira",
+ "Tuesday" : "Terça-feira",
+ "Wednesday" : "Quarta-feira",
+ "Thursday" : "Quinta-feira",
+ "Friday" : "Sexta-feira",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Seg.",
+ "Tue." : "Ter.",
+ "Wed." : "Qua.",
+ "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",
+ "April" : "Abril",
+ "May" : "Maio",
+ "June" : "Junho",
+ "July" : "Julho",
+ "August" : "Agosto",
+ "September" : "Setembro",
+ "October" : "Outubro",
+ "November" : "Novembro",
+ "December" : "Dezembro",
+ "Jan." : "Jan.",
+ "Feb." : "Fev.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "Mai.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Set.",
+ "Oct." : "Out.",
+ "Nov." : "Nov.",
+ "Dec." : "Dez.",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Apenas os seguintes caracteres são permitidos num nome de utilizador: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
"A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
"Username contains whitespace at the beginning or at the end" : "Nome de utilizador contém espaço em branco no início ou no fim",
+ "Username must not consist of dots only" : "O utilizador não pode consistir de apenas pontos",
"A valid password must be provided" : "Uma password válida deve ser fornecida",
"The username is already being used" : "O nome de utilizador já está a ser usado",
"Could not create user" : "Não foi possível criar o utilizador",
"User disabled" : "Utilizador desativado",
"Login canceled by app" : "Sessão cancelada pela app",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "A aplicação \"%s\" não pode ser instalada porque as seguintes dependências não podem ser realizadas: %s",
+ "a safe home for all your data" : "Um lugar seguro para todos os seus dados",
"File is currently busy, please try again later" : "O ficheiro está ocupado, por favor, tente mais tarde",
"Can't read file" : "Não é possível ler o ficheiro",
"Application is not enabled" : "A aplicação não está activada",
@@ -103,6 +185,10 @@ OC.L10N.register(
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhuma base de dados de drivers (sqlite, mysql, or postgresql) instaladas.",
"Cannot write into \"config\" directory" : "Não é possível escrever na directoria \"configurar\"",
"Cannot write into \"apps\" directory" : "Não é possivel escrever na directoria \"aplicações\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Isto pode ser normalmente resolvido dando ao servidor web direito de escrita para o directório de aplicação ou desactivando a loja de aplicações no ficheiro de configuração. Ver %s",
+ "Cannot create \"data\" directory" : "Não é possivel criar a directoria \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Isto pode geralmente ser corrigido ao adicionar permissões de escrita à pasta de raiz. Ver %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "As permissões podem geralmente ser corrigidas dando ao servidor web permissões de escrita na pasta de raiz. Ver %s.",
"Setting locale to %s failed" : "Definindo local para %s falhado",
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
@@ -124,6 +210,8 @@ OC.L10N.register(
"Storage unauthorized. %s" : "Armazenamento desautorizado. %s",
"Storage incomplete configuration. %s" : "Configuração incompleta do armazenamento. %s",
"Storage connection error. %s" : "Erro de ligação ao armazenamento. %s",
- "Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s"
+ "Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s",
+ "Personal" : "Pessoal",
+ "Admin" : "Admin"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json
index d0403a5fcce..b2f9b699f0b 100644
--- a/lib/l10n/pt_PT.json
+++ b/lib/l10n/pt_PT.json
@@ -5,6 +5,10 @@
"This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Isto pode geralmente ser corrigido ao adicionar permissões de escrita à pasta de configuração ao servidor web. Ver %s.",
"Sample configuration detected" : "Detetado exemplo de configuração",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "%1$s and %2$s" : "%1$s e %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
"PHP %s or higher is required." : "Necessário PHP %s ou superior.",
"PHP with a version lower than %s is required." : "É necessário um PHP com uma versão inferir a %s.",
"%sbit or higher PHP required." : "Necessário PHP %sbit ou superior.",
@@ -16,13 +20,25 @@
"Following platforms are supported: %s" : "São suportadas as seguintes plataformas: %s",
"Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "Avatar image is not square" : "A imagem do avatar não é quadrada.",
"today" : "hoje",
"tomorrow" : "Amanhã",
"yesterday" : "ontem",
+ "_in %n day_::_in %n days_" : ["em %n dia","em %n dias"],
"_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"],
+ "next month" : "Próximo mês",
"last month" : "ultimo mês",
+ "_in %n month_::_in %n months_" : ["em %n mês","em %n meses"],
+ "_%n month ago_::_%n months ago_" : ["%n mês atrás","%n meses atrás"],
+ "next year" : "Próximo ano",
"last year" : "ano passado",
+ "_in %n year_::_in %n years_" : ["dentro de%n ano","dentro de%n anos"],
"_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"],
+ "_in %n hour_::_in %n hours_" : ["dentro de %n hora","dentro de %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["%n hora atrás","%n horas atrás"],
+ "_in %n minute_::_in %n minutes_" : ["dentro de %n minuto","dentro de %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuto atrás","%n minutos atrás"],
+ "in a few seconds" : "em breves segundos",
"seconds ago" : "Minutos atrás",
"File name is a reserved word" : "Nome de ficheiro é uma palavra reservada",
"File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido",
@@ -37,9 +53,19 @@
"Log out" : "Sair",
"Users" : "Utilizadores",
"Unknown user" : "Utilizador desconhecido",
+ "Basic settings" : "Definições básicas",
"Sharing" : "Partilhar",
"Security" : "Segurança",
+ "Encryption" : "Encriptação",
+ "Additional settings" : "Definições adicionais",
+ "Tips & tricks" : "Dicas e truques",
+ "Personal info" : "Informação pessoal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
"__language_name__" : "Português",
+ "Verifying" : "A verificar",
+ "Verifying …" : "A verificar...",
+ "Verify" : "Verificar",
"%s enter the database username and name." : "%s introduza o nome de utilizador da base de dados e o nome da base de dados.",
"%s enter the database username." : "%s introduza o nome de utilizador da base de dados",
"%s enter the database name." : "%s introduza o nome da base de dados",
@@ -47,6 +73,7 @@
"Oracle connection could not be established" : "Não foi possível estabelecer a ligação Oracle",
"Oracle username and/or password not valid" : "Nome de utilizador/password do Oracle inválida",
"PostgreSQL username and/or password not valid" : "Nome de utilizador/password do PostgreSQL inválido",
+ "You need to enter details of an existing account." : "Precisa de introduzir detalhes de uma conta existente.",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o open_basedir foi configurado no php.ini. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
@@ -80,19 +107,74 @@
"Sharing %s failed, because resharing is not allowed" : "A partilha %s falhou, porque repartilhar não é permitido",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "A partilha %s falhou porque a partilha da interface para %s não conseguiu encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "A partilha %s falhou, devido ao ficheiro não poder ser encontrado na cache de ficheiros",
+ "Can’t increase permissions of %s" : "Não é possível aumentar as permissões de %s",
+ "Files can’t be shared with delete permissions" : "Ficheiros não podem ser partilhados com permissões de apagar",
+ "Files can’t be shared with create permissions" : "Ficheiros não podem ser partilhados com permissões de criação",
"Expiration date is in the past" : "A data de expiração está no passado",
+ "Can’t set expiration date more than %s days in the future" : "Não é possível definir data de expiração a mais de %s dias no futuro",
"%s shared »%s« with you" : "%s partilhado »%s« consigo",
+ "%s shared »%s« with you." : "%s partilhou »%s« consigo.",
+ "Click the button below to open it." : "Clicar no botão abaixo para abrir.",
+ "Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s via %s",
+ "The requested share does not exist anymore" : "A partilha requisitada já não existe",
"Could not find category \"%s\"" : "Não foi encontrado a categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Segunda-feira",
+ "Tuesday" : "Terça-feira",
+ "Wednesday" : "Quarta-feira",
+ "Thursday" : "Quinta-feira",
+ "Friday" : "Sexta-feira",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Seg.",
+ "Tue." : "Ter.",
+ "Wed." : "Qua.",
+ "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",
+ "April" : "Abril",
+ "May" : "Maio",
+ "June" : "Junho",
+ "July" : "Julho",
+ "August" : "Agosto",
+ "September" : "Setembro",
+ "October" : "Outubro",
+ "November" : "Novembro",
+ "December" : "Dezembro",
+ "Jan." : "Jan.",
+ "Feb." : "Fev.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "Mai.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Set.",
+ "Oct." : "Out.",
+ "Nov." : "Nov.",
+ "Dec." : "Dez.",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Apenas os seguintes caracteres são permitidos num nome de utilizador: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
"A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
"Username contains whitespace at the beginning or at the end" : "Nome de utilizador contém espaço em branco no início ou no fim",
+ "Username must not consist of dots only" : "O utilizador não pode consistir de apenas pontos",
"A valid password must be provided" : "Uma password válida deve ser fornecida",
"The username is already being used" : "O nome de utilizador já está a ser usado",
"Could not create user" : "Não foi possível criar o utilizador",
"User disabled" : "Utilizador desativado",
"Login canceled by app" : "Sessão cancelada pela app",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "A aplicação \"%s\" não pode ser instalada porque as seguintes dependências não podem ser realizadas: %s",
+ "a safe home for all your data" : "Um lugar seguro para todos os seus dados",
"File is currently busy, please try again later" : "O ficheiro está ocupado, por favor, tente mais tarde",
"Can't read file" : "Não é possível ler o ficheiro",
"Application is not enabled" : "A aplicação não está activada",
@@ -101,6 +183,10 @@
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhuma base de dados de drivers (sqlite, mysql, or postgresql) instaladas.",
"Cannot write into \"config\" directory" : "Não é possível escrever na directoria \"configurar\"",
"Cannot write into \"apps\" directory" : "Não é possivel escrever na directoria \"aplicações\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Isto pode ser normalmente resolvido dando ao servidor web direito de escrita para o directório de aplicação ou desactivando a loja de aplicações no ficheiro de configuração. Ver %s",
+ "Cannot create \"data\" directory" : "Não é possivel criar a directoria \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Isto pode geralmente ser corrigido ao adicionar permissões de escrita à pasta de raiz. Ver %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "As permissões podem geralmente ser corrigidas dando ao servidor web permissões de escrita na pasta de raiz. Ver %s.",
"Setting locale to %s failed" : "Definindo local para %s falhado",
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
@@ -122,6 +208,8 @@
"Storage unauthorized. %s" : "Armazenamento desautorizado. %s",
"Storage incomplete configuration. %s" : "Configuração incompleta do armazenamento. %s",
"Storage connection error. %s" : "Erro de ligação ao armazenamento. %s",
- "Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s"
+ "Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s",
+ "Personal" : "Pessoal",
+ "Admin" : "Admin"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php
index ede1e5a7fa7..690dcfe5639 100644
--- a/lib/private/App/AppManager.php
+++ b/lib/private/App/AppManager.php
@@ -411,6 +411,7 @@ class AppManager implements IAppManager {
/**
* @inheritdoc
+ * In case you change this method, also change \OC\App\CodeChecker\InfoChecker::isShipped()
*/
public function isShipped($appId) {
$this->loadShippedJson();
@@ -422,6 +423,10 @@ class AppManager implements IAppManager {
return in_array($appId, $alwaysEnabled, true);
}
+ /**
+ * In case you change this method, also change \OC\App\CodeChecker\InfoChecker::loadShippedJson()
+ * @throws \Exception
+ */
private function loadShippedJson() {
if ($this->shippedApps === null) {
$shippedJson = \OC::$SERVERROOT . '/core/shipped.json';
diff --git a/lib/private/App/CodeChecker/InfoChecker.php b/lib/private/App/CodeChecker/InfoChecker.php
index e8791bd7037..f5de6d376d8 100644
--- a/lib/private/App/CodeChecker/InfoChecker.php
+++ b/lib/private/App/CodeChecker/InfoChecker.php
@@ -23,121 +23,88 @@
namespace OC\App\CodeChecker;
-use OC\App\InfoParser;
use OC\Hooks\BasicEmitter;
+use OCP\App\AppPathNotFoundException;
+use OCP\App\IAppManager;
class InfoChecker extends BasicEmitter {
- /** @var InfoParser */
- private $infoParser;
+ /** @var string[] */
+ private $shippedApps;
- private $mandatoryFields = [
- 'author',
- 'description',
- 'dependencies',
- 'id',
- 'licence',
- 'name',
- 'version',
- ];
- private $optionalFields = [
- 'bugs',
- 'category',
- 'default_enable',
- 'documentation',
- 'namespace',
- 'ocsid',
- 'public',
- 'remote',
- 'repository',
- 'types',
- 'website',
- ];
- private $deprecatedFields = [
- 'info',
- 'require',
- 'requiremax',
- 'requiremin',
- 'shipped',
- 'standalone',
- ];
-
- public function __construct(InfoParser $infoParser) {
- $this->infoParser = $infoParser;
- }
+ /** @var string[] */
+ private $alwaysEnabled;
/**
* @param string $appId
* @return array
+ * @throws \RuntimeException
*/
- public function analyse($appId) {
+ public function analyse($appId): array {
$appPath = \OC_App::getAppPath($appId);
if ($appPath === false) {
throw new \RuntimeException("No app with given id <$appId> known.");
}
- $errors = [];
-
- $info = $this->infoParser->parse($appPath . '/appinfo/info.xml');
-
- if (!isset($info['dependencies']['nextcloud']['@attributes']['min-version'])) {
- $errors[] = [
- 'type' => 'missingRequirement',
- 'field' => 'min',
- ];
- $this->emit('InfoChecker', 'missingRequirement', ['min']);
- }
-
- if (!isset($info['dependencies']['nextcloud']['@attributes']['max-version'])) {
- $errors[] = [
- 'type' => 'missingRequirement',
- 'field' => 'max',
- ];
- $this->emit('InfoChecker', 'missingRequirement', ['max']);
- }
-
- foreach ($info as $key => $value) {
- if(is_array($value)) {
- $value = json_encode($value);
- }
- if (in_array($key, $this->mandatoryFields)) {
- $this->emit('InfoChecker', 'mandatoryFieldFound', [$key, $value]);
- continue;
- }
+ $xml = new \DOMDocument();
+ $xml->load($appPath . '/appinfo/info.xml');
- if (in_array($key, $this->optionalFields)) {
- $this->emit('InfoChecker', 'optionalFieldFound', [$key, $value]);
- continue;
+ $schema = \OC::$SERVERROOT . '/resources/app-info.xsd';
+ try {
+ if ($this->isShipped($appId)) {
+ // Shipped apps are allowed to have the public and default_enabled tags
+ $schema = \OC::$SERVERROOT . '/resources/app-info-shipped.xsd';
}
-
- if (in_array($key, $this->deprecatedFields)) {
- // skip empty arrays - empty arrays for remote and public are always added
- if($value === '[]' && in_array($key, ['public', 'remote', 'info'])) {
- continue;
- }
- $this->emit('InfoChecker', 'deprecatedFieldFound', [$key, $value]);
- continue;
- }
-
- $this->emit('InfoChecker', 'unusedFieldFound', [$key, $value]);
+ } catch (\Exception $e) {
+ // Assume it is not shipped
}
- foreach ($this->mandatoryFields as $key) {
- if(!isset($info[$key])) {
- $this->emit('InfoChecker', 'mandatoryFieldMissing', [$key]);
+ $errors = [];
+ if (!$xml->schemaValidate($schema)) {
+ foreach (libxml_get_errors() as $error) {
$errors[] = [
- 'type' => 'mandatoryFieldMissing',
- 'field' => $key,
+ 'type' => 'parseError',
+ 'field' => $error->message,
];
+ $this->emit('InfoChecker', 'parseError', [$error->message]);
}
}
- $versionFile = $appPath . '/appinfo/version';
- if (is_file($versionFile)) {
- $version = trim(file_get_contents($versionFile));
- $this->emit('InfoChecker', 'migrateVersion', [$version]);
- }
-
return $errors;
}
+
+ /**
+ * This is a copy of \OC\App\AppManager::isShipped(), keep both in sync.
+ * This method is copied, so the code checker works even when Nextcloud is
+ * not installed yet. The AppManager requires a database connection, which
+ * fails in that case.
+ *
+ * @param string $appId
+ * @return bool
+ * @throws \Exception
+ */
+ protected function isShipped(string $appId): bool {
+ $this->loadShippedJson();
+ return \in_array($appId, $this->shippedApps, true);
+ }
+
+ /**
+ * This is a copy of \OC\App\AppManager::loadShippedJson(), keep both in sync
+ * This method is copied, so the code checker works even when Nextcloud is
+ * not installed yet. The AppManager requires a database connection, which
+ * fails in that case.
+ *
+ * @throws \Exception
+ */
+ protected function loadShippedJson() {
+ if ($this->shippedApps === null) {
+ $shippedJson = \OC::$SERVERROOT . '/core/shipped.json';
+ if (!file_exists($shippedJson)) {
+ throw new \Exception("File not found: $shippedJson");
+ }
+ $content = json_decode(file_get_contents($shippedJson), true);
+ $this->shippedApps = $content['shippedApps'];
+ $this->alwaysEnabled = $content['alwaysEnabled'];
+ }
+ }
}
diff --git a/lib/private/Repair/Collation.php b/lib/private/Repair/Collation.php
index 2642985371b..f2cc9373176 100644
--- a/lib/private/Repair/Collation.php
+++ b/lib/private/Repair/Collation.php
@@ -6,6 +6,7 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Robin Müller <robin.mueller@1und1.de>
*
* @license AGPL-3.0
*
@@ -124,7 +125,7 @@ class Collation implements IRepairStep {
" FROM INFORMATION_SCHEMA . COLUMNS" .
" WHERE TABLE_SCHEMA = ?" .
" AND (COLLATION_NAME <> '" . $characterSet . "_bin' OR CHARACTER_SET_NAME <> '" . $characterSet . "')" .
- " AND TABLE_NAME LIKE \"*PREFIX*%\"",
+ " AND TABLE_NAME LIKE '*PREFIX*%'",
array($dbName)
);
$rows = $statement->fetchAll();
@@ -139,7 +140,7 @@ class Collation implements IRepairStep {
" FROM INFORMATION_SCHEMA . TABLES" .
" WHERE TABLE_SCHEMA = ?" .
" AND TABLE_COLLATION <> '" . $characterSet . "_bin'" .
- " AND TABLE_NAME LIKE \"*PREFIX*%\"",
+ " AND TABLE_NAME LIKE '*PREFIX*%'",
[$dbName]
);
$rows = $statement->fetchAll();
diff --git a/resources/app-info-shipped.xsd b/resources/app-info-shipped.xsd
new file mode 100644
index 00000000000..97221d1fb9c
--- /dev/null
+++ b/resources/app-info-shipped.xsd
@@ -0,0 +1,671 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xs:element name="info">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="id" type="id" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="name" type="l10n-string" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="summary" type="l10n-string" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="description" type="l10n-text" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="version" type="semver"
+ minOccurs="1" maxOccurs="1"/>
+ <xs:element name="licence" type="licence" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="author" type="author" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="namespace" type="limited-string"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="default_enable" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="types" type="types" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="documentation" type="documentation"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="category" type="category" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="website" type="url" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="discussion" type="url" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="bugs" type="url" minOccurs="1"
+ maxOccurs="1"/>
+ <xs:element name="repository" type="repository" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="screenshot" type="screenshot" minOccurs="0"
+ maxOccurs="10"/>
+ <xs:element name="dependencies" type="dependencies"
+ minOccurs="1" maxOccurs="1"/>
+ <xs:element name="background-jobs" type="jobs"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="repair-steps" type="repair-steps"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="two-factor-providers"
+ type="two-factor-providers"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="commands" type="commands"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="settings" type="settings" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="activity" type="activity" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="navigations" type="navigations" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="contactsmenu" type="contactsmenu" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="collaboration" type="collaboration" minOccurs="0"
+ maxOccurs="1" />
+ <xs:element name="sabre" type="sabre" minOccurs="0"
+ maxOccurs="1" />
+ <xs:element name="public" type="public" minOccurs="0"
+ maxOccurs="1" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:unique name="uniqueNameL10n">
+ <xs:selector xpath="name"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueSummaryL10n">
+ <xs:selector xpath="summary"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueDescriptionL10n">
+ <xs:selector xpath="description"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueLicense">
+ <xs:selector xpath="licence"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueTypes">
+ <xs:selector xpath="types/type"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueCategory">
+ <xs:selector xpath="category"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueDatabase">
+ <xs:selector xpath="dependencies/database"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueLib">
+ <xs:selector xpath="dependencies/lib"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueCommand">
+ <xs:selector xpath="dependencies/command"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ </xs:element>
+
+ <!-- basic types -->
+ <xs:simpleType name="empty-string">
+ <xs:restriction base="xs:string">
+ <xs:maxLength value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="non-empty-string">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="limited-string">
+ <xs:restriction base="non-empty-string">
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="l10n-text">
+ <xs:simpleContent>
+ <xs:extension base="non-empty-string">
+ <xs:attribute name="lang" type="l10n-code" default="en"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:complexType name="l10n-string">
+ <xs:simpleContent>
+ <xs:restriction base="l10n-text">
+ <xs:maxLength value="128"/>
+ </xs:restriction>
+ </xs:simpleContent>
+ </xs:complexType>
+
+
+ <xs:simpleType name="l10n-code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="af"/>
+ <xs:enumeration value="ar"/>
+ <xs:enumeration value="ast"/>
+ <xs:enumeration value="az"/>
+ <xs:enumeration value="bg"/>
+ <xs:enumeration value="be"/>
+ <xs:enumeration value="bn"/>
+ <xs:enumeration value="br"/>
+ <xs:enumeration value="bs"/>
+ <xs:enumeration value="ca"/>
+ <xs:enumeration value="cs"/>
+ <xs:enumeration value="cy"/>
+ <xs:enumeration value="da"/>
+ <xs:enumeration value="de"/>
+ <xs:enumeration value="el"/>
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="eo"/>
+ <xs:enumeration value="es"/>
+ <xs:enumeration value="es-ar"/>
+ <xs:enumeration value="es-co"/>
+ <xs:enumeration value="es-mx"/>
+ <xs:enumeration value="es-ni"/>
+ <xs:enumeration value="es-ve"/>
+ <xs:enumeration value="et"/>
+ <xs:enumeration value="eu"/>
+ <xs:enumeration value="fa"/>
+ <xs:enumeration value="fi"/>
+ <xs:enumeration value="fr"/>
+ <xs:enumeration value="fy"/>
+ <xs:enumeration value="ga"/>
+ <xs:enumeration value="gd"/>
+ <xs:enumeration value="gl"/>
+ <xs:enumeration value="he"/>
+ <xs:enumeration value="hi"/>
+ <xs:enumeration value="hr"/>
+ <xs:enumeration value="hu"/>
+ <xs:enumeration value="ia"/>
+ <xs:enumeration value="id"/>
+ <xs:enumeration value="io"/>
+ <xs:enumeration value="is"/>
+ <xs:enumeration value="it"/>
+ <xs:enumeration value="ja"/>
+ <xs:enumeration value="ka"/>
+ <xs:enumeration value="kk"/>
+ <xs:enumeration value="km"/>
+ <xs:enumeration value="kn"/>
+ <xs:enumeration value="ko"/>
+ <xs:enumeration value="lb"/>
+ <xs:enumeration value="lt"/>
+ <xs:enumeration value="lv"/>
+ <xs:enumeration value="mk"/>
+ <xs:enumeration value="ml"/>
+ <xs:enumeration value="mn"/>
+ <xs:enumeration value="mr"/>
+ <xs:enumeration value="my"/>
+ <xs:enumeration value="nb"/>
+ <xs:enumeration value="ne"/>
+ <xs:enumeration value="nl"/>
+ <xs:enumeration value="nn"/>
+ <xs:enumeration value="os"/>
+ <xs:enumeration value="pa"/>
+ <xs:enumeration value="pl"/>
+ <xs:enumeration value="pt"/>
+ <xs:enumeration value="pt-br"/>
+ <xs:enumeration value="ro"/>
+ <xs:enumeration value="ru"/>
+ <xs:enumeration value="sk"/>
+ <xs:enumeration value="sl"/>
+ <xs:enumeration value="sq"/>
+ <xs:enumeration value="sr"/>
+ <xs:enumeration value="sr-latn"/>
+ <xs:enumeration value="sv"/>
+ <xs:enumeration value="sw"/>
+ <xs:enumeration value="ta"/>
+ <xs:enumeration value="te"/>
+ <xs:enumeration value="th"/>
+ <xs:enumeration value="tr"/>
+ <xs:enumeration value="tt"/>
+ <xs:enumeration value="udm"/>
+ <xs:enumeration value="uk"/>
+ <xs:enumeration value="ur"/>
+ <xs:enumeration value="vi"/>
+ <xs:enumeration value="zh-hans"/>
+ <xs:enumeration value="zh-hant"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="semver">
+ <xs:restriction base="limited-string">
+ <xs:pattern
+ value="(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="version">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[0-9]+(\.[0-9]+){0,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="url">
+ <xs:restriction base="xs:anyURI">
+ <xs:pattern value="https?://.+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-user-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|user-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-admin-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|admin-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-developer-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|developer-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="secure-url">
+ <xs:restriction base="xs:anyURI">
+ <xs:pattern value="https://.+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="email">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[^@]+@[^\.]+\..+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- first level elements -->
+ <xs:complexType name="screenshot">
+ <xs:simpleContent>
+ <xs:extension base="secure-url">
+ <xs:attribute name="small-thumbnail" use="optional"
+ type="secure-url"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="id">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[a-z]+[a-z0-9_]*[a-z0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="author">
+ <xs:simpleContent>
+ <xs:extension base="limited-string">
+ <xs:attribute name="mail" type="email" use="optional"/>
+ <xs:attribute name="homepage" type="url" use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="repository">
+ <xs:simpleContent>
+ <xs:extension base="url">
+ <xs:attribute name="type" type="vcs" use="optional"
+ default="git"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="vcs">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="git"/>
+ <xs:enumeration value="mercurial"/>
+ <xs:enumeration value="subversion"/>
+ <xs:enumeration value="bzr"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="types">
+ <xs:sequence>
+ <xs:element name="prelogin" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="filesystem" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="authentication" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="logging" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="dav" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="prevent_group_restriction" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="category">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="security"/>
+ <xs:enumeration value="customization"/>
+ <xs:enumeration value="files"/>
+ <xs:enumeration value="integration"/>
+ <xs:enumeration value="monitoring"/>
+ <xs:enumeration value="multimedia"/>
+ <xs:enumeration value="office"/>
+ <xs:enumeration value="organization"/>
+ <xs:enumeration value="social"/>
+ <xs:enumeration value="tools"/>
+ <xs:enumeration value="games"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="licence">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="agpl"/>
+ <xs:enumeration value="mpl"/>
+ <xs:enumeration value="apache"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="databases">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="sqlite"/>
+ <xs:enumeration value="mysql"/>
+ <xs:enumeration value="pgsql"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="documentation">
+ <xs:sequence>
+ <xs:element name="user" type="doc-user-url" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="admin" type="doc-admin-url" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="developer" type="doc-developer-url" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="settings">
+ <xs:sequence>
+ <xs:element name="admin" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="admin-section" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="personal" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="personal-section" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity">
+ <xs:sequence>
+ <xs:element name="settings" type="activity-settings" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="filters" type="activity-filters" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="providers" type="activity-providers" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-settings">
+ <xs:sequence>
+ <xs:element name="setting" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-filters">
+ <xs:sequence>
+ <xs:element name="filter" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-providers">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="navigations">
+ <xs:sequence>
+ <xs:element name="navigation" type="navigation" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="navigation">
+ <xs:sequence>
+ <xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="route" type="route" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ <xs:attribute name="role" type="navigation-role" default="all" use="optional"/>
+ </xs:complexType>
+
+ <xs:simpleType name="navigation-role">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="all"/>
+ <xs:enumeration value="admin"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="navigation-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="link"/>
+ <xs:enumeration value="settings"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="route">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="contactsmenu">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration">
+ <xs:sequence>
+ <xs:element name="plugins" type="collaboration-plugins" minOccurs="0" maxOccurs="1">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration-plugins">
+ <xs:sequence>
+ <xs:element name="plugin" type="collaboration-plugins-plugin" minOccurs="1" maxOccurs="unbounded">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration-plugins-plugin">
+ <xs:simpleContent>
+ <xs:extension base="php-class">
+ <xs:attribute name="type" type="collaboration-plugin-type" use="required"/>
+ <xs:attribute name="share-type" type="share-type" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="collaboration-plugin-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="collaborator-search"/>
+ <xs:enumeration value="autocomplete-sort"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="sabre">
+ <xs:sequence>
+ <xs:element name="collections" type="sabre-collections" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="plugins" type="sabre-plugins" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="sabre-collections">
+ <xs:sequence>
+ <xs:element name="collection" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="sabre-plugins">
+ <xs:sequence>
+ <xs:element name="plugin" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="share-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SHARE_TYPE_USER"/>
+ <xs:enumeration value="SHARE_TYPE_GROUP"/>
+ <xs:enumeration value="SHARE_TYPE_LINK"/>
+ <xs:enumeration value="SHARE_TYPE_EMAIL"/>
+ <xs:enumeration value="SHARE_TYPE_CONTACT"/>
+ <xs:enumeration value="SHARE_TYPE_REMOTE"/>
+ <xs:enumeration value="SHARE_TYPE_CIRCLE"/>
+ <xs:enumeration value="SHARE_TYPE_GUEST"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+
+ <xs:complexType name="public">
+ <xs:sequence>
+ <xs:element name="webdav" type="path" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="files" type="path" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <!-- dependencies -->
+ <xs:complexType name="dependencies">
+ <xs:sequence>
+ <xs:element name="php" type="php" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="database" type="database" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="command" type="shell-command" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="lib" type="min-max-version" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="owncloud" type="owncloud" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="nextcloud" type="nextcloud" minOccurs="1"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="owncloud">
+ <xs:attribute name="min-version" type="version" use="required"/>
+ <xs:attribute name="max-version" type="version" use="optional"/>
+ </xs:complexType>
+
+ <xs:complexType name="nextcloud">
+ <xs:attribute name="min-version" type="version" use="required"/>
+ <xs:attribute name="max-version" type="version" use="required"/>
+ </xs:complexType>
+
+ <xs:simpleType name="shell-command">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[a-zA-Z\-_]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="min-max-version">
+ <xs:simpleContent>
+ <xs:extension base="limited-string">
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="database">
+ <xs:simpleContent>
+ <xs:extension base="databases">
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="php">
+ <xs:simpleContent>
+ <xs:extension base="empty-string">
+ <xs:attribute name="min-int-size" type="bits" use="optional"
+ default="32"/>
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="bits">
+ <xs:restriction base="xs:int">
+ <xs:enumeration value="32"/>
+ <xs:enumeration value="64"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="repair-steps">
+ <xs:sequence>
+ <xs:element name="pre-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="post-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="live-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="install" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="uninstall" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="jobs">
+ <xs:sequence>
+ <xs:element name="job" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="steps">
+ <xs:sequence>
+ <xs:element name="step" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="two-factor-providers">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="commands">
+ <xs:sequence>
+ <xs:element name="command" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="php-class">
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[a-zA-Z_][0-9a-zA-Z_]*(\\[a-zA-Z_][0-9a-zA-Z_]*)*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="path">
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[a-zA-Z_][0-9a-zA-Z_]*(/[a-zA-Z_][0-9a-zA-Z_]*)*\.php"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+</xs:schema>
diff --git a/resources/app-info.xsd b/resources/app-info.xsd
new file mode 100644
index 00000000000..4460b0f63b9
--- /dev/null
+++ b/resources/app-info.xsd
@@ -0,0 +1,652 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xs:element name="info">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="id" type="id" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="name" type="l10n-string" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="summary" type="l10n-string" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="description" type="l10n-text" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="version" type="semver"
+ minOccurs="1" maxOccurs="1"/>
+ <xs:element name="licence" type="licence" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="author" type="author" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="namespace" type="limited-string"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="types" type="types" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="documentation" type="documentation"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="category" type="category" minOccurs="1"
+ maxOccurs="unbounded"/>
+ <xs:element name="website" type="url" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="discussion" type="url" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="bugs" type="url" minOccurs="1"
+ maxOccurs="1"/>
+ <xs:element name="repository" type="repository" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="screenshot" type="screenshot" minOccurs="0"
+ maxOccurs="10"/>
+ <xs:element name="dependencies" type="dependencies"
+ minOccurs="1" maxOccurs="1"/>
+ <xs:element name="background-jobs" type="jobs"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="repair-steps" type="repair-steps"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="two-factor-providers"
+ type="two-factor-providers"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="commands" type="commands"
+ minOccurs="0" maxOccurs="1"/>
+ <xs:element name="settings" type="settings" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="activity" type="activity" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="navigations" type="navigations" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="contactsmenu" type="contactsmenu" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="collaboration" type="collaboration" minOccurs="0"
+ maxOccurs="1" />
+ <xs:element name="sabre" type="sabre" minOccurs="0"
+ maxOccurs="1" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:unique name="uniqueNameL10n">
+ <xs:selector xpath="name"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueSummaryL10n">
+ <xs:selector xpath="summary"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueDescriptionL10n">
+ <xs:selector xpath="description"/>
+ <xs:field xpath="@lang"/>
+ </xs:unique>
+ <xs:unique name="uniqueLicense">
+ <xs:selector xpath="licence"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueTypes">
+ <xs:selector xpath="types/type"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueCategory">
+ <xs:selector xpath="category"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueDatabase">
+ <xs:selector xpath="dependencies/database"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueLib">
+ <xs:selector xpath="dependencies/lib"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ <xs:unique name="uniqueCommand">
+ <xs:selector xpath="dependencies/command"/>
+ <xs:field xpath="."/>
+ </xs:unique>
+ </xs:element>
+
+ <!-- basic types -->
+ <xs:simpleType name="empty-string">
+ <xs:restriction base="xs:string">
+ <xs:maxLength value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="non-empty-string">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="limited-string">
+ <xs:restriction base="non-empty-string">
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="l10n-text">
+ <xs:simpleContent>
+ <xs:extension base="non-empty-string">
+ <xs:attribute name="lang" type="l10n-code" default="en"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:complexType name="l10n-string">
+ <xs:simpleContent>
+ <xs:restriction base="l10n-text">
+ <xs:maxLength value="128"/>
+ </xs:restriction>
+ </xs:simpleContent>
+ </xs:complexType>
+
+
+ <xs:simpleType name="l10n-code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="af"/>
+ <xs:enumeration value="ar"/>
+ <xs:enumeration value="ast"/>
+ <xs:enumeration value="az"/>
+ <xs:enumeration value="bg"/>
+ <xs:enumeration value="be"/>
+ <xs:enumeration value="bn"/>
+ <xs:enumeration value="br"/>
+ <xs:enumeration value="bs"/>
+ <xs:enumeration value="ca"/>
+ <xs:enumeration value="cs"/>
+ <xs:enumeration value="cy"/>
+ <xs:enumeration value="da"/>
+ <xs:enumeration value="de"/>
+ <xs:enumeration value="el"/>
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="eo"/>
+ <xs:enumeration value="es"/>
+ <xs:enumeration value="es-ar"/>
+ <xs:enumeration value="es-co"/>
+ <xs:enumeration value="es-mx"/>
+ <xs:enumeration value="es-ni"/>
+ <xs:enumeration value="es-ve"/>
+ <xs:enumeration value="et"/>
+ <xs:enumeration value="eu"/>
+ <xs:enumeration value="fa"/>
+ <xs:enumeration value="fi"/>
+ <xs:enumeration value="fr"/>
+ <xs:enumeration value="fy"/>
+ <xs:enumeration value="ga"/>
+ <xs:enumeration value="gd"/>
+ <xs:enumeration value="gl"/>
+ <xs:enumeration value="he"/>
+ <xs:enumeration value="hi"/>
+ <xs:enumeration value="hr"/>
+ <xs:enumeration value="hu"/>
+ <xs:enumeration value="ia"/>
+ <xs:enumeration value="id"/>
+ <xs:enumeration value="io"/>
+ <xs:enumeration value="is"/>
+ <xs:enumeration value="it"/>
+ <xs:enumeration value="ja"/>
+ <xs:enumeration value="ka"/>
+ <xs:enumeration value="kk"/>
+ <xs:enumeration value="km"/>
+ <xs:enumeration value="kn"/>
+ <xs:enumeration value="ko"/>
+ <xs:enumeration value="lb"/>
+ <xs:enumeration value="lt"/>
+ <xs:enumeration value="lv"/>
+ <xs:enumeration value="mk"/>
+ <xs:enumeration value="ml"/>
+ <xs:enumeration value="mn"/>
+ <xs:enumeration value="mr"/>
+ <xs:enumeration value="my"/>
+ <xs:enumeration value="nb"/>
+ <xs:enumeration value="ne"/>
+ <xs:enumeration value="nl"/>
+ <xs:enumeration value="nn"/>
+ <xs:enumeration value="os"/>
+ <xs:enumeration value="pa"/>
+ <xs:enumeration value="pl"/>
+ <xs:enumeration value="pt"/>
+ <xs:enumeration value="pt-br"/>
+ <xs:enumeration value="ro"/>
+ <xs:enumeration value="ru"/>
+ <xs:enumeration value="sk"/>
+ <xs:enumeration value="sl"/>
+ <xs:enumeration value="sq"/>
+ <xs:enumeration value="sr"/>
+ <xs:enumeration value="sr-latn"/>
+ <xs:enumeration value="sv"/>
+ <xs:enumeration value="sw"/>
+ <xs:enumeration value="ta"/>
+ <xs:enumeration value="te"/>
+ <xs:enumeration value="th"/>
+ <xs:enumeration value="tr"/>
+ <xs:enumeration value="tt"/>
+ <xs:enumeration value="udm"/>
+ <xs:enumeration value="uk"/>
+ <xs:enumeration value="ur"/>
+ <xs:enumeration value="vi"/>
+ <xs:enumeration value="zh-hans"/>
+ <xs:enumeration value="zh-hant"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="semver">
+ <xs:restriction base="limited-string">
+ <xs:pattern
+ value="(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="version">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[0-9]+(\.[0-9]+){0,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="url">
+ <xs:restriction base="xs:anyURI">
+ <xs:pattern value="https?://.+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-user-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|user-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-admin-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|admin-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="doc-developer-url">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="https://.+|developer-[a-z]+[\-a-z]*[a-z]+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="secure-url">
+ <xs:restriction base="xs:anyURI">
+ <xs:pattern value="https://.+"/>
+ <xs:maxLength value="256"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="email">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[^@]+@[^\.]+\..+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- first level elements -->
+ <xs:complexType name="screenshot">
+ <xs:simpleContent>
+ <xs:extension base="secure-url">
+ <xs:attribute name="small-thumbnail" use="optional"
+ type="secure-url"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="id">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[a-z]+[a-z0-9_]*[a-z0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="author">
+ <xs:simpleContent>
+ <xs:extension base="limited-string">
+ <xs:attribute name="mail" type="email" use="optional"/>
+ <xs:attribute name="homepage" type="url" use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="repository">
+ <xs:simpleContent>
+ <xs:extension base="url">
+ <xs:attribute name="type" type="vcs" use="optional"
+ default="git"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="vcs">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="git"/>
+ <xs:enumeration value="mercurial"/>
+ <xs:enumeration value="subversion"/>
+ <xs:enumeration value="bzr"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="types">
+ <xs:sequence>
+ <xs:element name="prelogin" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="filesystem" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="authentication" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="logging" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="dav" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="prevent_group_restriction" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="category">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="security"/>
+ <xs:enumeration value="customization"/>
+ <xs:enumeration value="files"/>
+ <xs:enumeration value="integration"/>
+ <xs:enumeration value="monitoring"/>
+ <xs:enumeration value="multimedia"/>
+ <xs:enumeration value="office"/>
+ <xs:enumeration value="organization"/>
+ <xs:enumeration value="social"/>
+ <xs:enumeration value="tools"/>
+ <xs:enumeration value="games"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="licence">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="agpl"/>
+ <xs:enumeration value="mpl"/>
+ <xs:enumeration value="apache"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="databases">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="sqlite"/>
+ <xs:enumeration value="mysql"/>
+ <xs:enumeration value="pgsql"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="documentation">
+ <xs:sequence>
+ <xs:element name="user" type="doc-user-url" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="admin" type="doc-admin-url" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="developer" type="doc-developer-url" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="settings">
+ <xs:sequence>
+ <xs:element name="admin" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="admin-section" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="personal" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="personal-section" type="php-class" minOccurs="0"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity">
+ <xs:sequence>
+ <xs:element name="settings" type="activity-settings" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="filters" type="activity-filters" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="providers" type="activity-providers" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-settings">
+ <xs:sequence>
+ <xs:element name="setting" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-filters">
+ <xs:sequence>
+ <xs:element name="filter" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="activity-providers">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="navigations">
+ <xs:sequence>
+ <xs:element name="navigation" type="navigation" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="navigation">
+ <xs:sequence>
+ <xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="route" type="route" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ <xs:attribute name="role" type="navigation-role" default="all" use="optional"/>
+ </xs:complexType>
+
+ <xs:simpleType name="navigation-role">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="all"/>
+ <xs:enumeration value="admin"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="navigation-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="link"/>
+ <xs:enumeration value="settings"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="route">
+ <xs:restriction base="non-empty-string">
+ <xs:pattern value="[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="contactsmenu">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration">
+ <xs:sequence>
+ <xs:element name="plugins" type="collaboration-plugins" minOccurs="0" maxOccurs="1">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration-plugins">
+ <xs:sequence>
+ <xs:element name="plugin" type="collaboration-plugins-plugin" minOccurs="1" maxOccurs="unbounded">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="collaboration-plugins-plugin">
+ <xs:simpleContent>
+ <xs:extension base="php-class">
+ <xs:attribute name="type" type="collaboration-plugin-type" use="required"/>
+ <xs:attribute name="share-type" type="share-type" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="collaboration-plugin-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="collaborator-search"/>
+ <xs:enumeration value="autocomplete-sort"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="sabre">
+ <xs:sequence>
+ <xs:element name="collections" type="sabre-collections" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="plugins" type="sabre-plugins" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="sabre-collections">
+ <xs:sequence>
+ <xs:element name="collection" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="sabre-plugins">
+ <xs:sequence>
+ <xs:element name="plugin" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="share-type">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SHARE_TYPE_USER"/>
+ <xs:enumeration value="SHARE_TYPE_GROUP"/>
+ <xs:enumeration value="SHARE_TYPE_LINK"/>
+ <xs:enumeration value="SHARE_TYPE_EMAIL"/>
+ <xs:enumeration value="SHARE_TYPE_CONTACT"/>
+ <xs:enumeration value="SHARE_TYPE_REMOTE"/>
+ <xs:enumeration value="SHARE_TYPE_CIRCLE"/>
+ <xs:enumeration value="SHARE_TYPE_GUEST"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- dependencies -->
+ <xs:complexType name="dependencies">
+ <xs:sequence>
+ <xs:element name="php" type="php" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="database" type="database" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="command" type="shell-command" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="lib" type="min-max-version" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element name="owncloud" type="owncloud" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="nextcloud" type="nextcloud" minOccurs="1"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="owncloud">
+ <xs:attribute name="min-version" type="version" use="required"/>
+ <xs:attribute name="max-version" type="version" use="optional"/>
+ </xs:complexType>
+
+ <xs:complexType name="nextcloud">
+ <xs:attribute name="min-version" type="version" use="required"/>
+ <xs:attribute name="max-version" type="version" use="required"/>
+ </xs:complexType>
+
+ <xs:simpleType name="shell-command">
+ <xs:restriction base="limited-string">
+ <xs:pattern value="[a-zA-Z\-_]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="min-max-version">
+ <xs:simpleContent>
+ <xs:extension base="limited-string">
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="database">
+ <xs:simpleContent>
+ <xs:extension base="databases">
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="php">
+ <xs:simpleContent>
+ <xs:extension base="empty-string">
+ <xs:attribute name="min-int-size" type="bits" use="optional"
+ default="32"/>
+ <xs:attribute name="min-version" type="version"
+ use="optional"/>
+ <xs:attribute name="max-version" type="version"
+ use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="bits">
+ <xs:restriction base="xs:int">
+ <xs:enumeration value="32"/>
+ <xs:enumeration value="64"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="repair-steps">
+ <xs:sequence>
+ <xs:element name="pre-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="post-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="live-migration" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="install" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="uninstall" type="steps" minOccurs="0"
+ maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="jobs">
+ <xs:sequence>
+ <xs:element name="job" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="steps">
+ <xs:sequence>
+ <xs:element name="step" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="two-factor-providers">
+ <xs:sequence>
+ <xs:element name="provider" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="commands">
+ <xs:sequence>
+ <xs:element name="command" type="php-class" minOccurs="1"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="php-class">
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[a-zA-Z_][0-9a-zA-Z_]*(\\[a-zA-Z_][0-9a-zA-Z_]*)*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+</xs:schema>
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 47eabf58c09..8c8dfd7545b 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"A login attempt using two-factor authentication failed (%1$s)" : "Falló un intentu d'aniciu de sesión usando l'autenticación en dos pasos (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Modificóse la to <strong>contraseña</strong> o <strong>corréu</strong>",
"Your apps" : "Les tos aplicaciones",
+ "Updates" : "Anovamientos",
"Enabled apps" : "Aplicaciones habilitaes",
"Disabled apps" : "Aplicaciones deshabilitaes",
"App bundles" : "Llotes d'aplicaciones",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index b04bb5a8053..618c05bb193 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -10,6 +10,7 @@
"A login attempt using two-factor authentication failed (%1$s)" : "Falló un intentu d'aniciu de sesión usando l'autenticación en dos pasos (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Modificóse la to <strong>contraseña</strong> o <strong>corréu</strong>",
"Your apps" : "Les tos aplicaciones",
+ "Updates" : "Anovamientos",
"Enabled apps" : "Aplicaciones habilitaes",
"Disabled apps" : "Aplicaciones deshabilitaes",
"App bundles" : "Llotes d'aplicaciones",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 6b3947395b8..88e9ac3b63a 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Welcome aboard %s" : "Willkommen an Bord %s",
"Welcome to your %s account, you can add, protect, and share your data." : "Willkommen zu Deinem %s-Konto. Du kannst Deine Daten hinzufügen, schützen und teilen.",
"Your username is: %s" : "Dein Benutzername lautet: %s",
- "Set your password" : "Vergebe Dein Passwort",
+ "Set your password" : "Setze Dein Kennwort",
"Go to %s" : "Gehe zu %s",
"Install Client" : "Installiere den Client",
"Password confirmation is required" : "Passwortbestätigung erforderlich",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 5210bfa4261..d57fc88815e 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -72,7 +72,7 @@
"Welcome aboard %s" : "Willkommen an Bord %s",
"Welcome to your %s account, you can add, protect, and share your data." : "Willkommen zu Deinem %s-Konto. Du kannst Deine Daten hinzufügen, schützen und teilen.",
"Your username is: %s" : "Dein Benutzername lautet: %s",
- "Set your password" : "Vergebe Dein Passwort",
+ "Set your password" : "Setze Dein Kennwort",
"Go to %s" : "Gehe zu %s",
"Install Client" : "Installiere den Client",
"Password confirmation is required" : "Passwortbestätigung erforderlich",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 860797a10ec..00b99873e25 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Welcome aboard %s" : "Willkommen an Bord %s",
"Welcome to your %s account, you can add, protect, and share your data." : "Willkommen zu Ihrem %s-Konto. Sie können Ihre Daten hinzufügen, schützen und teilen.",
"Your username is: %s" : "Ihr Benutzername lautet: %s",
- "Set your password" : "Vergeben Sie Ihr Passwort",
+ "Set your password" : "Setzen Sie Ihr Passwort",
"Go to %s" : "Gehe zu %s",
"Install Client" : "Installiere den Client",
"Password confirmation is required" : "Passwortbestätigung erforderlich",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 28a6d98437a..0435e13404f 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -72,7 +72,7 @@
"Welcome aboard %s" : "Willkommen an Bord %s",
"Welcome to your %s account, you can add, protect, and share your data." : "Willkommen zu Ihrem %s-Konto. Sie können Ihre Daten hinzufügen, schützen und teilen.",
"Your username is: %s" : "Ihr Benutzername lautet: %s",
- "Set your password" : "Vergeben Sie Ihr Passwort",
+ "Set your password" : "Setzen Sie Ihr Passwort",
"Go to %s" : "Gehe zu %s",
"Install Client" : "Installiere den Client",
"Password confirmation is required" : "Passwortbestätigung erforderlich",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index de56935d938..fefa8c69bce 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -66,7 +66,7 @@ OC.L10N.register(
"%1$s changed your email address on %2$s." : "%1$s cambió tu dirección de correo electrónico el %2$s.",
"Your email address on %s was changed." : "Tu dirección de correo electrónico en %s fue cambiada. ",
"Your email address on %s was changed by an administrator." : "Tu dirección de correo electrónico en %s fue cambiada por un adminsitrador. ",
- "Email address for %1$s changed on %2$s" : "La dirección de correo electrónico para %1$s fue cambiada el %2$s",
+ "Email address for %1$s changed on %2$s" : "La dirección de correo %1$s en %2$s ha cambiado",
"Email address changed for %s" : "La dirección de correo electrónico fue cambiada para %s",
"The new email address is %s" : "La nueva dirección de correo electrónico es %s",
"Your %s account was created" : "Tu cuenta %s ha sido creada",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index ab2bbbb556b..987b6ca5e71 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -64,7 +64,7 @@
"%1$s changed your email address on %2$s." : "%1$s cambió tu dirección de correo electrónico el %2$s.",
"Your email address on %s was changed." : "Tu dirección de correo electrónico en %s fue cambiada. ",
"Your email address on %s was changed by an administrator." : "Tu dirección de correo electrónico en %s fue cambiada por un adminsitrador. ",
- "Email address for %1$s changed on %2$s" : "La dirección de correo electrónico para %1$s fue cambiada el %2$s",
+ "Email address for %1$s changed on %2$s" : "La dirección de correo %1$s en %2$s ha cambiado",
"Email address changed for %s" : "La dirección de correo electrónico fue cambiada para %s",
"The new email address is %s" : "La nueva dirección de correo electrónico es %s",
"Your %s account was created" : "Tu cuenta %s ha sido creada",
diff --git a/settings/l10n/fi.js b/settings/l10n/fi.js
index ceaca538bba..a5573819556 100644
--- a/settings/l10n/fi.js
+++ b/settings/l10n/fi.js
@@ -109,6 +109,8 @@ OC.L10N.register(
"Removing …" : "Poistetaan…",
"Could not remove app" : "Sovellusta ei voitu poistaa",
"Remove" : "Poista",
+ "The app has been enabled but needs to be upgraded. You will be redirected to the upgrade page in 5 seconds." : "Sovellus on käytössä, mutta se tulee päivittää. Sinut ohjataan sovelluksen versiopäivityssivulle viiden sekunnin kuluttua.",
+ "App upgrade" : "Sovelluksen versiopäivitys",
"Approved" : "Hyväksytty",
"Experimental" : "Kokeellinen",
"No apps found for {query}" : "Haulla {query} ei löytynyt sovelluksia",
@@ -276,6 +278,7 @@ OC.L10N.register(
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)",
"This text will be shown on the public link upload page when the file list is hidden." : "Tämä teksti näytetään julkisen linkin lähetyssivulla, kun tiedostolista on piilotettu.",
"Tips & tricks" : "Vinkit",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLitea käytetään tällä hetkellä taustaosan tietokantana. Laajoja asennuksia varten on suositeltavaa käyttää jotain muuta tietokantaa.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Tämä on suositeltavaa erityisesti silloin, kun työpöytäsovellusta käytetään tiedostojen synkronointiin.",
"How to do backups" : "Kuinka tehdä varmuuskopioita",
"Performance tuning" : "Suorituskyvyn hienosäätö",
@@ -359,11 +362,25 @@ OC.L10N.register(
"set new password" : "aseta uusi salasana",
"change email address" : "vaihda sähköpostiosoite",
"Default" : "Oletus",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["%n odottava sovelluspäivitys","%n odottavaa sovelluspäivitystä"],
"Updating...." : "Päivitetään....",
+ "Error while updating app" : "Virhe sovellusta päivittäessä",
+ "Error while removing app" : "Virhe sovellusta poistaessa",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Sovellus on käytössä, mutta se tulee päivittää. Sinut ohjataan sovelluksen päivityssivulle viiden sekunnin kuluttua.",
+ "App update" : "Sovelluspäivitys",
+ "Verifying" : "Vahvistetaan",
+ "Personal info" : "Henkilökohtaiset tiedot",
+ "Sync clients" : "Synkronointiasiakkaat",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme sen ottamista käyttöön, jotta MIME-tyypit on mahdollista havaita parhain tuloksin.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaatio ↗</a>.",
+ "Get the apps to sync your files" : "Laita sovellukset synkronoimaan tiedostosi",
"Desktop client" : "Työpöytäsovellus",
"Android app" : "Android-sovellus",
"iOS app" : "iOS-sovellus",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jos haluat tukea projektia, {contributeopen}liity mukaan kehitystoimintaan{linkclose} tai {contributeopen}levitä sanaa{linkclose}!",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Verkko-, työpöytä-, mobiilisovellukset ja sovellusten yksittäiset salasanat, joilla on käyttöoikeus tiliisi.",
"App passwords" : "Sovellussalasanat",
+ "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Täällä voit luoda yksittäisiä salasanoja sovelluksille, jolloin sinun ei tarvitse antaa varsinaista salasanaa niille. Voit kumota yksittäisten sovellusten salasanoja.",
"Follow us on Google+!" : "Seuraa meitä Google+:ssa!",
"Like our facebook page!" : "Tykkää Facebook-sivustamme!",
"Follow us on Twitter!" : "Seuraa meitä Twitterissä!",
diff --git a/settings/l10n/fi.json b/settings/l10n/fi.json
index f7e2e1497fe..63d3b4ae2f8 100644
--- a/settings/l10n/fi.json
+++ b/settings/l10n/fi.json
@@ -107,6 +107,8 @@
"Removing …" : "Poistetaan…",
"Could not remove app" : "Sovellusta ei voitu poistaa",
"Remove" : "Poista",
+ "The app has been enabled but needs to be upgraded. You will be redirected to the upgrade page in 5 seconds." : "Sovellus on käytössä, mutta se tulee päivittää. Sinut ohjataan sovelluksen versiopäivityssivulle viiden sekunnin kuluttua.",
+ "App upgrade" : "Sovelluksen versiopäivitys",
"Approved" : "Hyväksytty",
"Experimental" : "Kokeellinen",
"No apps found for {query}" : "Haulla {query} ei löytynyt sovelluksia",
@@ -274,6 +276,7 @@
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)",
"This text will be shown on the public link upload page when the file list is hidden." : "Tämä teksti näytetään julkisen linkin lähetyssivulla, kun tiedostolista on piilotettu.",
"Tips & tricks" : "Vinkit",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLitea käytetään tällä hetkellä taustaosan tietokantana. Laajoja asennuksia varten on suositeltavaa käyttää jotain muuta tietokantaa.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Tämä on suositeltavaa erityisesti silloin, kun työpöytäsovellusta käytetään tiedostojen synkronointiin.",
"How to do backups" : "Kuinka tehdä varmuuskopioita",
"Performance tuning" : "Suorituskyvyn hienosäätö",
@@ -357,11 +360,25 @@
"set new password" : "aseta uusi salasana",
"change email address" : "vaihda sähköpostiosoite",
"Default" : "Oletus",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["%n odottava sovelluspäivitys","%n odottavaa sovelluspäivitystä"],
"Updating...." : "Päivitetään....",
+ "Error while updating app" : "Virhe sovellusta päivittäessä",
+ "Error while removing app" : "Virhe sovellusta poistaessa",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Sovellus on käytössä, mutta se tulee päivittää. Sinut ohjataan sovelluksen päivityssivulle viiden sekunnin kuluttua.",
+ "App update" : "Sovelluspäivitys",
+ "Verifying" : "Vahvistetaan",
+ "Personal info" : "Henkilökohtaiset tiedot",
+ "Sync clients" : "Synkronointiasiakkaat",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme sen ottamista käyttöön, jotta MIME-tyypit on mahdollista havaita parhain tuloksin.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaatio ↗</a>.",
+ "Get the apps to sync your files" : "Laita sovellukset synkronoimaan tiedostosi",
"Desktop client" : "Työpöytäsovellus",
"Android app" : "Android-sovellus",
"iOS app" : "iOS-sovellus",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jos haluat tukea projektia, {contributeopen}liity mukaan kehitystoimintaan{linkclose} tai {contributeopen}levitä sanaa{linkclose}!",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Verkko-, työpöytä-, mobiilisovellukset ja sovellusten yksittäiset salasanat, joilla on käyttöoikeus tiliisi.",
"App passwords" : "Sovellussalasanat",
+ "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Täällä voit luoda yksittäisiä salasanoja sovelluksille, jolloin sinun ei tarvitse antaa varsinaista salasanaa niille. Voit kumota yksittäisten sovellusten salasanoja.",
"Follow us on Google+!" : "Seuraa meitä Google+:ssa!",
"Like our facebook page!" : "Tykkää Facebook-sivustamme!",
"Follow us on Twitter!" : "Seuraa meitä Twitterissä!",
diff --git a/settings/l10n/nb.js b/settings/l10n/nb.js
index cc420499673..3cc20187166 100644
--- a/settings/l10n/nb.js
+++ b/settings/l10n/nb.js
@@ -396,6 +396,12 @@ OC.L10N.register(
"Sync clients" : "Synkroniser klienter",
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Det er viktig for sikkerheten og ytelsen på din installasjon at alt er satt opp rett. For å hjelpe deg er det satt i verk noen automatiske sjekker. Se \"Tips og triks\"-delen og i dokumentasjonen for mer informasjon",
"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 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php-oppsettssnotater og oppsett av PHP på tjeneren din, særlig om du bruker php-fpm.",
+ "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-blokker. Dette gjør at flere av kjerneprogrammene blir utilgjengelige.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.",
+ "This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a>.",
"Get the apps to sync your files" : "Hent programmer som synkroniserer filene dine",
"Desktop client" : "Skrivebordsklient",
"Android app" : "Android-program",
diff --git a/settings/l10n/nb.json b/settings/l10n/nb.json
index 2faeda67d36..24af47be501 100644
--- a/settings/l10n/nb.json
+++ b/settings/l10n/nb.json
@@ -394,6 +394,12 @@
"Sync clients" : "Synkroniser klienter",
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Det er viktig for sikkerheten og ytelsen på din installasjon at alt er satt opp rett. For å hjelpe deg er det satt i verk noen automatiske sjekker. Se \"Tips og triks\"-delen og i dokumentasjonen for mer informasjon",
"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 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php-oppsettssnotater og oppsett av PHP på tjeneren din, særlig om du bruker php-fpm.",
+ "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-blokker. Dette gjør at flere av kjerneprogrammene blir utilgjengelige.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.",
+ "This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a>.",
"Get the apps to sync your files" : "Hent programmer som synkroniserer filene dine",
"Desktop client" : "Skrivebordsklient",
"Android app" : "Android-program",
diff --git a/tests/acceptance/features/app-comments.feature b/tests/acceptance/features/app-comments.feature
index 81fc6f89ad1..a5bdb0aa745 100644
--- a/tests/acceptance/features/app-comments.feature
+++ b/tests/acceptance/features/app-comments.feature
@@ -5,4 +5,4 @@ Feature: app-comments
And I open the details view for "welcome.txt"
And I open the "Comments" tab in the details view
When I create a new comment with "Hello world" as message
- Then I see that a comment was added
+ Then I see a comment with "Hello world" as message
diff --git a/tests/acceptance/features/bootstrap/CommentsAppContext.php b/tests/acceptance/features/bootstrap/CommentsAppContext.php
index 64d1dc69bc4..7e804cfac23 100644
--- a/tests/acceptance/features/bootstrap/CommentsAppContext.php
+++ b/tests/acceptance/features/bootstrap/CommentsAppContext.php
@@ -26,57 +26,55 @@ use Behat\Behat\Context\Context;
class CommentsAppContext implements Context, ActorAwareInterface {
use ActorAware;
-
/**
- * @When /^I create a new comment with "([^"]*)" as message$/
+ * @return Locator
*/
- public function iCreateANewCommentWithAsMessage($commentText) {
- $this->actor->find(self::newCommentField(), 2)->setValue($commentText);
- $this->actor->find(self::submitNewCommentButton(), 2)->click();
+ public static function newCommentField() {
+ return Locator::forThe()->css("div.newCommentRow .message")->
+ descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("New comment field in current section details view in Files app");
}
/**
- * @Then /^I see that a comment was added$/
+ * @return Locator
*/
- public function iSeeThatACommentWasAdded() {
- $self = $this;
-
- $result = Utils::waitFor(function () use ($self) {
- return $self->isCommentAdded();
- }, 5, 0.5);
-
- PHPUnit_Framework_Assert::assertTrue($result);
+ public static function submitNewCommentButton() {
+ return Locator::forThe()->css("div.newCommentRow .submit")->
+ descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("Submit new comment button in current section details view in Files app");
}
- public function isCommentAdded() {
- try {
- $locator = self::commentFields();
- $comments = $this->actor->getSession()->getPage()->findAll($locator->getSelector(), $locator->getLocator());
- PHPUnit_Framework_Assert::assertSame(1, count($comments));
- } catch (PHPUnit_Framework_ExpectationFailedException $e) {
- return false;
- }
- return true;
+ /**
+ * @return Locator
+ */
+ public static function commentList() {
+ return Locator::forThe()->css("ul.comments")->
+ descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("Comment list in current section details view in Files app");
}
/**
* @return Locator
*/
- public static function newCommentField() {
- return Locator::forThe()->css("div.newCommentRow .message")->descendantOf(FilesAppContext::currentSectionDetailsView())->
- describedAs("New comment field in the details view in Files app");
+ public static function commentWithText($text) {
+ return Locator::forThe()->xpath("//div[normalize-space() = '$text']/ancestor::li")->
+ descendantOf(self::commentList())->
+ describedAs("Comment with text \"$text\" in current section details view in Files app");
}
- public static function commentFields() {
- return Locator::forThe()->css(".comments .comment .message")->descendantOf(FilesAppContext::currentSectionDetailsView())->
- describedAs("Comment fields in the details view in Files app");
+ /**
+ * @When /^I create a new comment with "([^"]*)" as message$/
+ */
+ public function iCreateANewCommentWithAsMessage($commentText) {
+ $this->actor->find(self::newCommentField(), 10)->setValue($commentText);
+ $this->actor->find(self::submitNewCommentButton())->click();
}
/**
- * @return Locator
+ * @Then /^I see a comment with "([^"]*)" as message$/
*/
- public static function submitNewCommentButton() {
- return Locator::forThe()->css("div.newCommentRow .submit")->descendantOf(FilesAppContext::currentSectionDetailsView())->
- describedAs("Submit new comment button in the details view in Files app");
+ public function iSeeACommentWithAsMessage($commentText) {
+ PHPUnit_Framework_Assert::assertTrue(
+ $this->actor->find(self::commentWithText($commentText), 10)->isVisible());
}
}
diff --git a/tests/apps/testapp-dependency-missing/appinfo/info.xml b/tests/apps/testapp-dependency-missing/appinfo/info.xml
deleted file mode 100644
index c765400a76f..00000000000
--- a/tests/apps/testapp-dependency-missing/appinfo/info.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<info>
- <id>testapp-infoxml-version</id>
- <version>1.2.3</version>
- <author>Jane</author>
- <description>A b c</description>
- <licence>Abc</licence>
- <name>Test app</name>
-</info>
diff --git a/tests/apps/testapp-infoxml/appinfo/info.xml b/tests/apps/testapp-infoxml/appinfo/info.xml
deleted file mode 100644
index d4df1c3cd3f..00000000000
--- a/tests/apps/testapp-infoxml/appinfo/info.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<info>
- <id>testapp-infoxml</id>
- <version>1.2.3</version>
- <author>Jane</author>
- <description>A b c</description>
- <licence>Abc</licence>
- <name>Test app</name>
- <dependencies>
- <nextcloud min-version="12.0" max-version="12.0"/>
- </dependencies>
-</info>
diff --git a/tests/apps/testapp-name-missing/appinfo/info.xml b/tests/apps/testapp-name-missing/appinfo/info.xml
deleted file mode 100644
index 591c4361899..00000000000
--- a/tests/apps/testapp-name-missing/appinfo/info.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<info>
- <id>testapp-version</id>
- <version>1.1.1</version>
- <author>Jane</author>
- <description>A b c</description>
- <licence>Abc</licence>
- <dependencies>
- <nextcloud min-version="12.0" max-version="12.0"/>
- </dependencies>
-</info>
diff --git a/tests/apps/testapp-version/appinfo/info.xml b/tests/apps/testapp-version/appinfo/info.xml
deleted file mode 100644
index 28e2475800f..00000000000
--- a/tests/apps/testapp-version/appinfo/info.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<info>
- <id>testapp-version</id>
- <author>Jane</author>
- <description>A b c</description>
- <licence>Abc</licence>
- <name>Test app</name>
- <dependencies>
- <nextcloud min-version="12.0" max-version="12.0"/>
- </dependencies>
-</info>
diff --git a/tests/apps/testapp-version/appinfo/version b/tests/apps/testapp-version/appinfo/version
deleted file mode 100644
index 0495c4a88ca..00000000000
--- a/tests/apps/testapp-version/appinfo/version
+++ /dev/null
@@ -1 +0,0 @@
-1.2.3
diff --git a/tests/apps/testapp_dependency_missing/appinfo/info.xml b/tests/apps/testapp_dependency_missing/appinfo/info.xml
new file mode 100644
index 00000000000..b0ca188aefc
--- /dev/null
+++ b/tests/apps/testapp_dependency_missing/appinfo/info.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>testapp_infoxml</id>
+ <name>Test app</name>
+ <summary>A b c</summary>
+ <description>A b c</description>
+ <version>1.2.3</version>
+ <licence>agpl</licence>
+ <author>Jane</author>
+ <category>games</category>
+ <bugs>https://example.org</bugs>
+</info>
diff --git a/tests/apps/testapp_infoxml/appinfo/info.xml b/tests/apps/testapp_infoxml/appinfo/info.xml
new file mode 100644
index 00000000000..b7575687fe5
--- /dev/null
+++ b/tests/apps/testapp_infoxml/appinfo/info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>testapp_infoxml</id>
+ <name>Test app</name>
+ <summary>A b c</summary>
+ <description>A b c</description>
+ <version>1.2.3</version>
+ <licence>agpl</licence>
+ <author>Jane</author>
+ <category>games</category>
+ <bugs>https://example.org</bugs>
+ <dependencies>
+ <nextcloud min-version="12.0" max-version="12.0"/>
+ </dependencies>
+</info>
diff --git a/tests/apps/testapp_name_missing/appinfo/info.xml b/tests/apps/testapp_name_missing/appinfo/info.xml
new file mode 100644
index 00000000000..872c8752c75
--- /dev/null
+++ b/tests/apps/testapp_name_missing/appinfo/info.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>testapp_name_missing</id>
+ <summary>A b c</summary>
+ <description>A b c</description>
+ <version>1.2.3</version>
+ <licence>agpl</licence>
+ <author>Jane</author>
+ <category>games</category>
+ <bugs>https://example.org</bugs>
+ <dependencies>
+ <nextcloud min-version="12.0" max-version="12.0"/>
+ </dependencies>
+</info>
diff --git a/tests/apps/testapp_version/appinfo/info.xml b/tests/apps/testapp_version/appinfo/info.xml
new file mode 100644
index 00000000000..3a48fccd45f
--- /dev/null
+++ b/tests/apps/testapp_version/appinfo/info.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>testapp_version</id>
+ <name>Test app</name>
+ <summary>A b c</summary>
+ <description>A b c</description>
+ <licence>agpl</licence>
+ <author>Jane</author>
+ <category>games</category>
+ <bugs>https://example.org</bugs>
+ <dependencies>
+ <nextcloud min-version="12.0" max-version="12.0"/>
+ </dependencies>
+</info>
diff --git a/tests/lib/App/CodeChecker/InfoCheckerTest.php b/tests/lib/App/CodeChecker/InfoCheckerTest.php
index 760d9880739..3128f902f47 100644
--- a/tests/lib/App/CodeChecker/InfoCheckerTest.php
+++ b/tests/lib/App/CodeChecker/InfoCheckerTest.php
@@ -44,19 +44,21 @@ class InfoCheckerTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->infoChecker = new InfoChecker(new InfoParser());
+ $this->infoChecker = new InfoChecker();
}
public function appInfoData() {
return [
- ['testapp-infoxml', []],
- ['testapp-version', [['type' => 'mandatoryFieldMissing', 'field' => 'version']]],
- ['testapp-dependency-missing', [
- ['type' => 'missingRequirement', 'field' => 'min'],
- ['type' => 'missingRequirement', 'field' => 'max'],
- ['type' => 'mandatoryFieldMissing', 'field' => 'dependencies'],
+ ['testapp_infoxml', []],
+ ['testapp_version', [
+ ['type' => 'parseError', 'field' => 'Element \'licence\': This element is not expected. Expected is one of ( description, version ).' . "\n"],
+ ]],
+ ['testapp_dependency_missing', [
+ ['type' => 'parseError', 'field' => 'Element \'info\': Missing child element(s). Expected is one of ( repository, screenshot, dependencies ).' . "\n"],
+ ]],
+ ['testapp_name_missing', [
+ ['type' => 'parseError', 'field' => 'Element \'summary\': This element is not expected. Expected is ( name ).' . "\n"],
]],
- ['testapp-name-missing', [['type' => 'mandatoryFieldMissing', 'field' => 'name']]],
];
}
@@ -68,6 +70,7 @@ class InfoCheckerTest extends TestCase {
*/
public function testApps($appId, $expectedErrors) {
$errors = $this->infoChecker->analyse($appId);
+ libxml_clear_errors();
$this->assertEquals($expectedErrors, $errors);
}