]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'lexical' into development
authorDan Brown <redacted>
Fri, 27 Sep 2024 11:04:01 +0000 (12:04 +0100)
committerDan Brown <redacted>
Fri, 27 Sep 2024 11:04:01 +0000 (12:04 +0100)
171 files changed:
.github/translators.txt
app/Access/Ldap.php
app/Access/LdapService.php
app/Access/Oidc/OidcUserDetails.php
app/Access/Saml2Service.php
app/Entities/Controllers/BookApiController.php
app/Entities/Repos/PageRepo.php
app/Uploads/Controllers/AttachmentApiController.php
app/Uploads/ImageRepo.php
app/Uploads/ImageResizer.php
app/Users/Controllers/RoleApiController.php
app/Users/Controllers/RoleController.php
app/Users/Controllers/UserApiController.php
app/Util/CspService.php
composer.lock
dev/api/responses/users-list.json
dev/docker/Dockerfile
dev/licensing/js-library-licenses.txt
dev/licensing/php-library-licenses.txt
docker-compose.yml
lang/ar/auth.php
lang/bg/auth.php
lang/bs/auth.php
lang/ca/activities.php
lang/ca/auth.php
lang/ca/common.php
lang/ca/components.php
lang/ca/editor.php
lang/ca/entities.php
lang/ca/errors.php
lang/ca/notifications.php
lang/ca/passwords.php
lang/ca/preferences.php
lang/ca/settings.php
lang/ca/validation.php
lang/cs/activities.php
lang/cs/auth.php
lang/cs/entities.php
lang/cs/errors.php
lang/cs/notifications.php
lang/cs/preferences.php
lang/cs/settings.php
lang/cy/activities.php
lang/cy/auth.php
lang/cy/common.php
lang/cy/editor.php
lang/cy/entities.php
lang/cy/preferences.php
lang/cy/settings.php
lang/cy/validation.php
lang/da/auth.php
lang/de/auth.php
lang/de/entities.php
lang/de/errors.php
lang/de_informal/auth.php
lang/de_informal/errors.php
lang/el/auth.php
lang/es/auth.php
lang/es/errors.php
lang/es_AR/auth.php
lang/es_AR/errors.php
lang/et/activities.php
lang/et/auth.php
lang/et/common.php
lang/et/editor.php
lang/et/entities.php
lang/et/errors.php
lang/et/settings.php
lang/eu/auth.php
lang/fa/auth.php
lang/fa/common.php
lang/fa/errors.php
lang/fa/settings.php
lang/fi/auth.php
lang/fr/auth.php
lang/fr/entities.php
lang/fr/errors.php
lang/he/activities.php
lang/he/auth.php
lang/hr/auth.php
lang/hu/activities.php
lang/hu/auth.php
lang/hu/editor.php
lang/hu/entities.php
lang/hu/errors.php
lang/id/activities.php
lang/id/auth.php
lang/it/auth.php
lang/it/errors.php
lang/ja/auth.php
lang/ja/errors.php
lang/ka/auth.php
lang/ko/activities.php
lang/ko/auth.php
lang/ko/common.php
lang/ko/editor.php
lang/ko/entities.php
lang/ko/errors.php
lang/ko/settings.php
lang/lt/auth.php
lang/lv/auth.php
lang/lv/common.php
lang/lv/editor.php
lang/lv/entities.php
lang/lv/errors.php
lang/lv/notifications.php
lang/lv/settings.php
lang/nb/auth.php
lang/nb/errors.php
lang/nl/activities.php
lang/nl/auth.php
lang/nl/errors.php
lang/nl/passwords.php
lang/nn/auth.php
lang/pl/auth.php
lang/pt/auth.php
lang/pt/common.php
lang/pt/preferences.php
lang/pt_BR/activities.php
lang/pt_BR/auth.php
lang/pt_BR/common.php
lang/pt_BR/editor.php
lang/pt_BR/errors.php
lang/pt_BR/settings.php
lang/ro/auth.php
lang/ru/auth.php
lang/ru/errors.php
lang/sk/auth.php
lang/sl/auth.php
lang/sq/auth.php
lang/sr/auth.php
lang/sr/entities.php
lang/sr/errors.php
lang/sv/activities.php
lang/sv/auth.php
lang/sv/common.php
lang/sv/components.php
lang/sv/editor.php
lang/sv/entities.php
lang/sv/preferences.php
lang/sv/settings.php
lang/tr/auth.php
lang/uk/auth.php
lang/uz/auth.php
lang/vi/auth.php
lang/zh_CN/auth.php
lang/zh_CN/errors.php
lang/zh_TW/auth.php
lang/zh_TW/components.php
lang/zh_TW/editor.php
lang/zh_TW/entities.php
lang/zh_TW/errors.php
lang/zh_TW/notifications.php
lang/zh_TW/settings.php
package-lock.json
package.json
phpunit.xml
readme.md
resources/js/code/languages.js
resources/sass/_content.scss
resources/sass/_text.scss
resources/sass/_tinymce.scss
resources/views/help/wysiwyg.blade.php
tests/Api/BooksApiTest.php
tests/Auth/LdapTest.php
tests/Auth/OidcTest.php
tests/Entity/PageTest.php
tests/SecurityHeaderTest.php
tests/Uploads/ImageTest.php
tests/User/RoleManagementTest.php
tests/test-data/animated.gif [new file with mode: 0644]

index 8667e5f0bdbcd737bcd0aa702e7a35ded0c08a6e..46e2edfd4c5486385ac88f0901d3902ed9855fa3 100644 (file)
@@ -425,3 +425,9 @@ Timo B (lommes) :: German Informal
 Erik Lundstedt (Erik.Lundstedt) :: Swedish
 yngams (younessmouhid) :: Arabic
 Ohadp :: Hebrew
+cbridi :: Portuguese, Brazilian
+nanangsb :: Indonesian
+Michal Melich (michalmelich) :: Czech
+David (david-prv) :: German; German Informal
+Larry (lahoje) :: Swedish
+Marcia dos Santos (marciab80) :: Portuguese
index 12a3d1e7122abd2252c044f7cedf41f7636d2ab4..702d629cef0f89381254968461b9367f067be444 100644 (file)
@@ -52,13 +52,25 @@ class Ldap
      *
      * @param resource|\LDAP\Connection   $ldapConnection
      *
-     * @return resource|\LDAP\Result
+     * @return \LDAP\Result|array|false
      */
     public function search($ldapConnection, string $baseDn, string $filter, array $attributes = null)
     {
         return ldap_search($ldapConnection, $baseDn, $filter, $attributes);
     }
 
+    /**
+     * Read an entry from the LDAP tree.
+     *
+     * @param resource|\Ldap\Connection $ldapConnection
+     *
+     * @return \LDAP\Result|array|false
+     */
+    public function read($ldapConnection, string $baseDn, string $filter, array $attributes = null)
+    {
+        return ldap_read($ldapConnection, $baseDn, $filter, $attributes);
+    }
+
     /**
      * Get entries from an LDAP search result.
      *
index e822b09a67cc6cc13d58ce9f754a88b48f13ef92..365cb1db0151b9a109bb5802dc4f57a1f8eaabcf 100644 (file)
@@ -321,94 +321,105 @@ class LdapService
             return [];
         }
 
-        $userGroups = $this->groupFilter($user);
+        $userGroups = $this->extractGroupsFromSearchResponseEntry($user);
         $allGroups = $this->getGroupsRecursive($userGroups, []);
+        $formattedGroups = $this->extractGroupNamesFromLdapGroupDns($allGroups);
 
         if ($this->config['dump_user_groups']) {
             throw new JsonDebugException([
-                'details_from_ldap'             => $user,
-                'parsed_direct_user_groups'     => $userGroups,
-                'parsed_recursive_user_groups'  => $allGroups,
+                'details_from_ldap'            => $user,
+                'parsed_direct_user_groups'    => $userGroups,
+                'parsed_recursive_user_groups' => $allGroups,
+                'parsed_resulting_group_names' => $formattedGroups,
             ]);
         }
 
-        return $allGroups;
+        return $formattedGroups;
+    }
+
+    protected function extractGroupNamesFromLdapGroupDns(array $groupDNs): array
+    {
+        $names = [];
+
+        foreach ($groupDNs as $groupDN) {
+            $exploded = $this->ldap->explodeDn($groupDN, 1);
+            if ($exploded !== false && count($exploded) > 0) {
+                $names[] = $exploded[0];
+            }
+        }
+
+        return array_unique($names);
     }
 
     /**
-     * Get the parent groups of an array of groups.
+     * Build an array of all relevant groups DNs after recursively scanning
+     * across parents of the groups given.
      *
      * @throws LdapException
      */
-    private function getGroupsRecursive(array $groupsArray, array $checked): array
+    protected function getGroupsRecursive(array $groupDNs, array $checked): array
     {
         $groupsToAdd = [];
-        foreach ($groupsArray as $groupName) {
-            if (in_array($groupName, $checked)) {
+        foreach ($groupDNs as $groupDN) {
+            if (in_array($groupDN, $checked)) {
                 continue;
             }
 
-            $parentGroups = $this->getGroupGroups($groupName);
+            $parentGroups = $this->getParentsOfGroup($groupDN);
             $groupsToAdd = array_merge($groupsToAdd, $parentGroups);
-            $checked[] = $groupName;
+            $checked[] = $groupDN;
         }
 
-        $groupsArray = array_unique(array_merge($groupsArray, $groupsToAdd), SORT_REGULAR);
+        $uniqueDNs = array_unique(array_merge($groupDNs, $groupsToAdd), SORT_REGULAR);
 
         if (empty($groupsToAdd)) {
-            return $groupsArray;
+            return $uniqueDNs;
         }
 
-        return $this->getGroupsRecursive($groupsArray, $checked);
+        return $this->getGroupsRecursive($uniqueDNs, $checked);
     }
 
     /**
-     * Get the parent groups of a single group.
-     *
      * @throws LdapException
      */
-    private function getGroupGroups(string $groupName): array
+    protected function getParentsOfGroup(string $groupDN): array
     {
+        $groupsAttr = strtolower($this->config['group_attribute']);
         $ldapConnection = $this->getConnection();
         $this->bindSystemUser($ldapConnection);
 
         $followReferrals = $this->config['follow_referrals'] ? 1 : 0;
         $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals);
-
-        $baseDn = $this->config['base_dn'];
-        $groupsAttr = strtolower($this->config['group_attribute']);
-
-        $groupFilter = 'CN=' . $this->ldap->escape($groupName);
-        $groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $groupFilter, [$groupsAttr]);
-        if ($groups['count'] === 0) {
+        $read = $this->ldap->read($ldapConnection, $groupDN, '(objectClass=*)', [$groupsAttr]);
+        $results = $this->ldap->getEntries($ldapConnection, $read);
+        if ($results['count'] === 0) {
             return [];
         }
 
-        return $this->groupFilter($groups[0]);
+        return $this->extractGroupsFromSearchResponseEntry($results[0]);
     }
 
     /**
-     * Filter out LDAP CN and DN language in a ldap search return.
-     * Gets the base CN (common name) of the string.
+     * Extract an array of group DN values from the given LDAP search response entry
      */
-    protected function groupFilter(array $userGroupSearchResponse): array
+    protected function extractGroupsFromSearchResponseEntry(array $ldapEntry): array
     {
         $groupsAttr = strtolower($this->config['group_attribute']);
-        $ldapGroups = [];
+        $groupDNs = [];
         $count = 0;
 
-        if (isset($userGroupSearchResponse[$groupsAttr]['count'])) {
-            $count = (int) $userGroupSearchResponse[$groupsAttr]['count'];
+        if (isset($ldapEntry[$groupsAttr]['count'])) {
+            $count = (int) $ldapEntry[$groupsAttr]['count'];
         }
 
         for ($i = 0; $i < $count; $i++) {
-            $dnComponents = $this->ldap->explodeDn($userGroupSearchResponse[$groupsAttr][$i], 1);
-            if (!in_array($dnComponents[0], $ldapGroups)) {
-                $ldapGroups[] = $dnComponents[0];
+            $dn = $ldapEntry[$groupsAttr][$i];
+            if (!in_array($dn, $groupDNs)) {
+                $groupDNs[] = $dn;
             }
         }
 
-        return $ldapGroups;
+        return $groupDNs;
     }
 
     /**
index bccc49ee4d86d0be73a795ca8eaea6394a916907..fae20de0b6224cb011807017aa6442c56179e4e8 100644 (file)
@@ -22,7 +22,7 @@ class OidcUserDetails
         $hasEmpty = empty($this->externalId)
             || empty($this->email)
             || empty($this->name)
-            || ($groupSyncActive && empty($this->groups));
+            || ($groupSyncActive && $this->groups === null);
 
         return !$hasEmpty;
     }
@@ -57,15 +57,15 @@ class OidcUserDetails
         return implode(' ', $displayName);
     }
 
-    protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): array
+    protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): ?array
     {
         if (empty($groupsClaim)) {
-            return [];
+            return null;
         }
 
         $groupsList = Arr::get($token->getAllClaims(), $groupsClaim);
         if (!is_array($groupsList)) {
-            return [];
+            return null;
         }
 
         return array_values(array_filter($groupsList, function ($val) {
index 664b77aba4510289e3eccc98b59ced6c77205a9d..bb7e9b572e2eaa1303a6f1761eb2e7c0b4798fda 100644 (file)
@@ -133,6 +133,7 @@ class Saml2Service
         // value so that the exact encoding format is matched when checking the signature.
         // This is primarily due to ADFS encoding query params with lowercase percent encoding while
         // PHP (And most other sensible providers) standardise on uppercase.
+        /** @var ?string $samlRedirect */
         $samlRedirect = $toolkit->processSLO(true, $requestId, true, null, true);
         $errors = $toolkit->getErrors();
 
index 15e67a0f7231256869f05248e090b33973e1cb74..c1e38e72fe7c2cb5c1402870bce4dda7d90c9b1d 100644 (file)
@@ -7,6 +7,7 @@ use BookStack\Entities\Models\Book;
 use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Entity;
 use BookStack\Entities\Queries\BookQueries;
+use BookStack\Entities\Queries\PageQueries;
 use BookStack\Entities\Repos\BookRepo;
 use BookStack\Entities\Tools\BookContents;
 use BookStack\Http\ApiController;
@@ -18,6 +19,7 @@ class BookApiController extends ApiController
     public function __construct(
         protected BookRepo $bookRepo,
         protected BookQueries $queries,
+        protected PageQueries $pageQueries,
     ) {
     }
 
@@ -69,7 +71,8 @@ class BookApiController extends ApiController
             ->withType()
             ->withField('pages', function (Entity $entity) {
                 if ($entity instanceof Chapter) {
-                    return (new ApiEntityListFormatter($entity->pages->all()))->format();
+                    $pages = $this->pageQueries->visibleForChapterList($entity->id)->get()->all();
+                    return (new ApiEntityListFormatter($pages))->format();
                 }
                 return null;
             })->format();
index 0d9541c52e57e7a71dba4865cf62f68ffdcedd6e..ce7e34ae1ec90f7e35600aa7fb8ca2b8aecb93bf 100644 (file)
@@ -78,7 +78,8 @@ class PageRepo
         $this->updateTemplateStatusAndContentFromInput($draft, $input);
         $this->baseRepo->update($draft, $input);
 
-        $this->revisionRepo->storeNewForPage($draft, trans('entities.pages_initial_revision'));
+        $summary = trim($input['summary'] ?? '') ?: trans('entities.pages_initial_revision');
+        $this->revisionRepo->storeNewForPage($draft, $summary);
         $draft->refresh();
 
         Activity::add(ActivityType::PAGE_CREATE, $draft);
index 9040ba6d3a98003b550301f248632c62327d6a92..87e00257cb4b95ec4747464059ab5260322719ea 100644 (file)
@@ -171,16 +171,16 @@ class AttachmentApiController extends ApiController
     {
         return [
             'create' => [
-                'name'        => ['required', 'min:1', 'max:255', 'string'],
+                'name'        => ['required', 'string', 'min:1', 'max:255'],
                 'uploaded_to' => ['required', 'integer', 'exists:pages,id'],
                 'file'        => array_merge(['required_without:link'], $this->attachmentService->getFileValidationRules()),
-                'link'        => ['required_without:file', 'min:1', 'max:2000', 'safe_url'],
+                'link'        => ['required_without:file', 'string', 'min:1', 'max:2000', 'safe_url'],
             ],
             'update' => [
-                'name'        => ['min:1', 'max:255', 'string'],
+                'name'        => ['string', 'min:1', 'max:255'],
                 'uploaded_to' => ['integer', 'exists:pages,id'],
                 'file'        => $this->attachmentService->getFileValidationRules(),
-                'link'        => ['min:1', 'max:2000', 'safe_url'],
+                'link'        => ['string', 'min:1', 'max:2000', 'safe_url'],
             ],
         ];
     }
index 1e58816a4f3fc0b2da387896f78e558d1be87fde..845067fdc29987e318633a079c11f98ef3d6deef 100644 (file)
@@ -166,7 +166,7 @@ class ImageRepo
      */
     public function updateImageFile(Image $image, UploadedFile $file): void
     {
-        if ($file->getClientOriginalExtension() !== pathinfo($image->path, PATHINFO_EXTENSION)) {
+        if (strtolower($file->getClientOriginalExtension()) !== strtolower(pathinfo($image->path, PATHINFO_EXTENSION))) {
             throw new ImageUploadException(trans('errors.image_upload_replace_type'));
         }
 
index d09177fff5c71966bbaab354ae5dce1e7505fe99..fa6b1cac2d447651af07f599e4618d422e85b3c2 100644 (file)
@@ -7,11 +7,13 @@ use Exception;
 use GuzzleHttp\Psr7\Utils;
 use Illuminate\Support\Facades\Cache;
 use Intervention\Image\Decoders\BinaryImageDecoder;
+use Intervention\Image\Drivers\Gd\Decoders\NativeObjectDecoder;
 use Intervention\Image\Drivers\Gd\Driver;
 use Intervention\Image\Encoders\AutoEncoder;
 use Intervention\Image\Encoders\PngEncoder;
 use Intervention\Image\Interfaces\ImageInterface as InterventionImage;
 use Intervention\Image\ImageManager;
+use Intervention\Image\Origin;
 
 class ImageResizer
 {
@@ -99,7 +101,7 @@ class ImageResizer
         }
 
         // If not in cache and thumbnail does not exist, generate thumb and cache path
-        $thumbData = $this->resizeImageData($imageData, $width, $height, $keepRatio);
+        $thumbData = $this->resizeImageData($imageData, $width, $height, $keepRatio, $this->getExtension($image));
         $disk->put($thumbFilePath, $thumbData, true);
         Cache::put($thumbCacheKey, $thumbFilePath, static::THUMBNAIL_CACHE_TIME);
 
@@ -120,7 +122,7 @@ class ImageResizer
         ?string $format = null,
     ): string {
         try {
-            $thumb = $this->interventionFromImageData($imageData);
+            $thumb = $this->interventionFromImageData($imageData, $format);
         } catch (Exception $e) {
             throw new ImageUploadException(trans('errors.cannot_create_thumbs'));
         }
@@ -154,11 +156,23 @@ class ImageResizer
      * Performs some manual library usage to ensure image is specifically loaded
      * from given binary data instead of data being misinterpreted.
      */
-    protected function interventionFromImageData(string $imageData): InterventionImage
+    protected function interventionFromImageData(string $imageData, ?string $fileType): InterventionImage
     {
         $manager = new ImageManager(new Driver());
 
-        return $manager->read($imageData, BinaryImageDecoder::class);
+        // Ensure gif images are decoded natively instead of deferring to intervention GIF
+        // handling since we don't need the added animation support.
+        $isGif = $fileType === 'gif';
+        $decoder = $isGif ? NativeObjectDecoder::class : BinaryImageDecoder::class;
+        $input = $isGif ? @imagecreatefromstring($imageData) : $imageData;
+
+        $image = $manager->read($input, $decoder);
+
+        if ($isGif) {
+            $image->setOrigin(new Origin('image/gif'));
+        }
+
+        return $image;
     }
 
     /**
@@ -209,7 +223,15 @@ class ImageResizer
      */
     protected function isGif(Image $image): bool
     {
-        return strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'gif';
+        return $this->getExtension($image) === 'gif';
+    }
+
+    /**
+     * Get the extension for the given image, normalised to lower-case.
+     */
+    protected function getExtension(Image $image): string
+    {
+        return strtolower(pathinfo($image->path, PATHINFO_EXTENSION));
     }
 
     /**
index 5f4f2999b79decf2d8825508dabaf4429618a019..2e96602faae181c7d9b95ac4c5ecdb70fb3686ce 100644 (file)
@@ -21,7 +21,7 @@ class RoleApiController extends ApiController
             'display_name'  => ['required', 'string', 'min:3', 'max:180'],
             'description'   => ['string', 'max:180'],
             'mfa_enforced'  => ['boolean'],
-            'external_auth_id' => ['string'],
+            'external_auth_id' => ['string', 'max:180'],
             'permissions'   => ['array'],
             'permissions.*' => ['string'],
         ],
@@ -29,7 +29,7 @@ class RoleApiController extends ApiController
             'display_name'  => ['string', 'min:3', 'max:180'],
             'description'   => ['string', 'max:180'],
             'mfa_enforced'  => ['boolean'],
-            'external_auth_id' => ['string'],
+            'external_auth_id' => ['string', 'max:180'],
             'permissions'   => ['array'],
             'permissions.*' => ['string'],
         ]
index a874ce4d60fc6e207579148be1fdd1104ca605c0..0a7fdcc9ba87b28903b9328290c2002194ad9847 100644 (file)
@@ -75,7 +75,7 @@ class RoleController extends Controller
         $data = $this->validate($request, [
             'display_name' => ['required', 'min:3', 'max:180'],
             'description'  => ['max:180'],
-            'external_auth_id' => ['string'],
+            'external_auth_id' => ['string', 'max:180'],
             'permissions'  => ['array'],
             'mfa_enforced' => ['string'],
         ]);
@@ -109,7 +109,7 @@ class RoleController extends Controller
         $data = $this->validate($request, [
             'display_name' => ['required', 'min:3', 'max:180'],
             'description'  => ['max:180'],
-            'external_auth_id' => ['string'],
+            'external_auth_id' => ['string', 'max:180'],
             'permissions'  => ['array'],
             'mfa_enforced' => ['string'],
         ]);
index 1ccfecd7335e12417c80a5e5cdca74a20f09843e..6ee8f16d15ed317de5dcdaa4748e07610b1da4b7 100644 (file)
@@ -37,27 +37,28 @@ class UserApiController extends ApiController
     {
         return [
             'create' => [
-                'name'  => ['required', 'min:2', 'max:100'],
+                'name'  => ['required', 'string', 'min:2', 'max:100'],
                 'email' => [
-                    'required', 'min:2', 'email', new Unique('users', 'email'),
+                    'required', 'string', 'email', 'min:2', new Unique('users', 'email'),
                 ],
                 'external_auth_id' => ['string'],
                 'language'         => ['string', 'max:15', 'alpha_dash'],
-                'password'         => [Password::default()],
+                'password'         => ['string', Password::default()],
                 'roles'            => ['array'],
                 'roles.*'          => ['integer'],
                 'send_invite'      => ['boolean'],
             ],
             'update' => [
-                'name'  => ['min:2', 'max:100'],
+                'name'  => ['string', 'min:2', 'max:100'],
                 'email' => [
-                    'min:2',
+                    'string',
                     'email',
+                    'min:2',
                     (new Unique('users', 'email'))->ignore($userId ?? null),
                 ],
                 'external_auth_id' => ['string'],
                 'language'         => ['string', 'max:15', 'alpha_dash'],
-                'password'         => [Password::default()],
+                'password'         => ['string', Password::default()],
                 'roles'            => ['array'],
                 'roles.*'          => ['integer'],
             ],
index 227ec8e0b3db683d0b17d98c3139feac406bc371..4262b5c98f8071828eacc073d92d9522b7beabbe 100644 (file)
@@ -133,18 +133,30 @@ class CspService
 
     protected function getAllowedIframeSources(): array
     {
-        $sources = config('app.iframe_sources', '');
-        $hosts = array_filter(explode(' ', $sources));
+        $sources = explode(' ', config('app.iframe_sources', ''));
+        $sources[] = $this->getDrawioHost();
 
-        // Extract drawing service url to allow embedding if active
+        return array_filter($sources);
+    }
+
+    /**
+     * Extract the host name of the configured drawio URL for use in CSP.
+     * Returns empty string if not in use.
+     */
+    protected function getDrawioHost(): string
+    {
         $drawioConfigValue = config('services.drawio');
-        if ($drawioConfigValue) {
-            $drawioSource = is_string($drawioConfigValue) ? $drawioConfigValue : 'https://embed.diagrams.net/';
-            $drawioSourceParsed = parse_url($drawioSource);
-            $drawioHost = $drawioSourceParsed['scheme'] . '://' . $drawioSourceParsed['host'];
-            $hosts[] = $drawioHost;
+        if (!$drawioConfigValue) {
+            return '';
+        }
+
+        $drawioSource = is_string($drawioConfigValue) ? $drawioConfigValue : 'https://embed.diagrams.net/';
+        $drawioSourceParsed = parse_url($drawioSource);
+        $drawioHost = $drawioSourceParsed['scheme'] . '://' . $drawioSourceParsed['host'];
+        if (isset($drawioSourceParsed['port'])) {
+            $drawioHost .= ':' . $drawioSourceParsed['port'];
         }
 
-        return $hosts;
+        return $drawioHost;
     }
 }
index 4814759955877840660deb758338a3af4b798c69..c5649d7c8d76fa92a4de38a9c674da82af01660e 100644 (file)
@@ -8,16 +8,16 @@
     "packages": [
         {
             "name": "aws/aws-crt-php",
-            "version": "v1.2.5",
+            "version": "v1.2.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/awslabs/aws-crt-php.git",
-                "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b"
+                "reference": "a63485b65b6b3367039306496d49737cf1995408"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b",
-                "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b",
+                "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408",
+                "reference": "a63485b65b6b3367039306496d49737cf1995408",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/awslabs/aws-crt-php/issues",
-                "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5"
+                "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6"
             },
-            "time": "2024-04-19T21:30:56+00:00"
+            "time": "2024-06-13T17:21:28+00:00"
         },
         {
             "name": "aws/aws-sdk-php",
-            "version": "3.307.1",
+            "version": "3.320.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "cc79f16e1a1bd3feee421401ba2f21915abfdf91"
+                "reference": "702b9955160d2dacdf2cdf4d4476fcf95eae1aaf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/cc79f16e1a1bd3feee421401ba2f21915abfdf91",
-                "reference": "cc79f16e1a1bd3feee421401ba2f21915abfdf91",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/702b9955160d2dacdf2cdf4d4476fcf95eae1aaf",
+                "reference": "702b9955160d2dacdf2cdf4d4476fcf95eae1aaf",
                 "shasum": ""
             },
             "require": {
                 ],
                 "psr-4": {
                     "Aws\\": "src/"
-                }
+                },
+                "exclude-from-classmap": [
+                    "src/data/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             "support": {
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.307.1"
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.320.7"
             },
-            "time": "2024-05-17T18:07:44+00:00"
+            "time": "2024-08-23T18:13:50+00:00"
         },
         {
             "name": "bacon/bacon-qr-code",
         },
         {
             "name": "dasprid/enum",
-            "version": "1.0.5",
+            "version": "1.0.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/DASPRiD/Enum.git",
-                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016"
+                "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016",
-                "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016",
+                "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90",
+                "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1 <9.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^7 | ^8 | ^9",
+                "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
                 "squizlabs/php_codesniffer": "*"
             },
             "type": "library",
             ],
             "support": {
                 "issues": "https://github.com/DASPRiD/Enum/issues",
-                "source": "https://github.com/DASPRiD/Enum/tree/1.0.5"
+                "source": "https://github.com/DASPRiD/Enum/tree/1.0.6"
             },
-            "time": "2023-08-25T16:18:39+00:00"
+            "time": "2024-08-09T14:30:48+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
-            "version": "v3.0.2",
+            "version": "v3.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
-                "reference": "f41715465d65213d644d3141a6a93081be5d3549"
+                "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
-                "reference": "f41715465d65213d644d3141a6a93081be5d3549",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+                "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
-                "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
+                "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
             },
-            "time": "2022-10-27T11:44:00+00:00"
+            "time": "2024-07-08T12:26:09+00:00"
         },
         {
             "name": "doctrine/cache",
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.8.4",
+            "version": "3.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd"
+                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd",
-                "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6",
+                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6",
                 "shasum": ""
             },
             "require": {
                 "doctrine/coding-standard": "12.0.0",
                 "fig/log-test": "^1",
                 "jetbrains/phpstorm-stubs": "2023.1",
-                "phpstan/phpstan": "1.10.58",
-                "phpstan/phpstan-strict-rules": "^1.5",
-                "phpunit/phpunit": "9.6.16",
+                "phpstan/phpstan": "1.11.7",
+                "phpstan/phpstan-strict-rules": "^1.6",
+                "phpunit/phpunit": "9.6.20",
                 "psalm/plugin-phpunit": "0.18.4",
                 "slevomat/coding-standard": "8.13.1",
-                "squizlabs/php_codesniffer": "3.9.0",
+                "squizlabs/php_codesniffer": "3.10.2",
                 "symfony/cache": "^5.4|^6.0|^7.0",
                 "symfony/console": "^4.4|^5.4|^6.0|^7.0",
                 "vimeo/psalm": "4.30.0"
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.8.4"
+                "source": "https://github.com/doctrine/dbal/tree/3.9.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-25T07:04:44+00:00"
+            "time": "2024-08-15T07:34:42+00:00"
         },
         {
             "name": "doctrine/deprecations",
         },
         {
             "name": "doctrine/event-manager",
-            "version": "2.0.0",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/event-manager.git",
-                "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32"
+                "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32",
-                "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32",
+                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e",
+                "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e",
                 "shasum": ""
             },
             "require": {
                 "doctrine/common": "<2.9"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^10",
+                "doctrine/coding-standard": "^12",
                 "phpstan/phpstan": "^1.8.8",
-                "phpunit/phpunit": "^9.5",
-                "vimeo/psalm": "^4.28"
+                "phpunit/phpunit": "^10.5",
+                "vimeo/psalm": "^5.24"
             },
             "type": "library",
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/doctrine/event-manager/issues",
-                "source": "https://github.com/doctrine/event-manager/tree/2.0.0"
+                "source": "https://github.com/doctrine/event-manager/tree/2.0.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-10-12T20:59:15+00:00"
+            "time": "2024-05-22T20:47:39+00:00"
         },
         {
             "name": "doctrine/inflector",
         },
         {
             "name": "graham-campbell/result-type",
-            "version": "v1.1.2",
+            "version": "v1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/GrahamCampbell/Result-Type.git",
-                "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862"
+                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862",
-                "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945",
+                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2.5 || ^8.0",
-                "phpoption/phpoption": "^1.9.2"
+                "phpoption/phpoption": "^1.9.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
             },
             "type": "library",
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
-                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2"
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-11-12T22:16:48+00:00"
+            "time": "2024-07-20T21:45:45+00:00"
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.8.1",
+            "version": "7.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
-                "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
-                "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+                "guzzlehttp/psr7": "^2.7.0",
                 "php": "^7.2.5 || ^8.0",
                 "psr/http-client": "^1.0",
                 "symfony/deprecation-contracts": "^2.2 || ^3.0"
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
                 "ext-curl": "*",
-                "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+                "guzzle/client-integration-tests": "3.0.2",
                 "php-http/message-factory": "^1.1",
-                "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20",
                 "psr/log": "^1.1 || ^2.0 || ^3.0"
             },
             "suggest": {
             ],
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.8.1"
+                "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-03T20:35:24+00:00"
+            "time": "2024-07-24T11:22:20+00:00"
         },
         {
             "name": "guzzlehttp/promises",
-            "version": "2.0.2",
+            "version": "2.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/promises.git",
-                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
+                "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
-                "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
+                "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
                 "shasum": ""
             },
             "require": {
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
             },
             "type": "library",
             "extra": {
             ],
             "support": {
                 "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/2.0.2"
+                "source": "https://github.com/guzzle/promises/tree/2.0.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-03T20:19:20+00:00"
+            "time": "2024-07-18T10:29:17+00:00"
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "2.6.2",
+            "version": "2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
-                "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
                 "shasum": ""
             },
             "require": {
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "http-interop/http-factory-tests": "^0.9",
-                "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+                "http-interop/http-factory-tests": "0.9.0",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
             },
             "suggest": {
                 "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
             ],
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.6.2"
+                "source": "https://github.com/guzzle/psr7/tree/2.7.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-03T20:05:35+00:00"
+            "time": "2024-07-18T11:15:46+00:00"
         },
         {
             "name": "guzzlehttp/uri-template",
         },
         {
             "name": "intervention/image",
-            "version": "3.6.4",
+            "version": "3.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Intervention/image.git",
-                "reference": "193324ec88bc5ad4039e57ce9b926ae28dfde813"
+                "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Intervention/image/zipball/193324ec88bc5ad4039e57ce9b926ae28dfde813",
-                "reference": "193324ec88bc5ad4039e57ce9b926ae28dfde813",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/1786ad5e1789050939d73cd195de4b8eaeeb34ed",
+                "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/Intervention/image/issues",
-                "source": "https://github.com/Intervention/image/tree/3.6.4"
+                "source": "https://github.com/Intervention/image/tree/3.8.0"
             },
             "funding": [
                 {
                 {
                     "url": "https://github.com/Intervention",
                     "type": "github"
+                },
+                {
+                    "url": "https://ko-fi.com/interventionphp",
+                    "type": "ko_fi"
                 }
             ],
-            "time": "2024-05-08T13:53:15+00:00"
+            "time": "2024-08-16T14:57:26+00:00"
         },
         {
             "name": "knplabs/knp-snappy",
         },
         {
             "name": "laravel/framework",
-            "version": "v10.48.10",
+            "version": "v10.48.20",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "91e2b9e218afa4e5c377510faa11957042831ba3"
+                "reference": "be2be342d4c74db6a8d2bd18469cd6d488ab9c98"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/91e2b9e218afa4e5c377510faa11957042831ba3",
-                "reference": "91e2b9e218afa4e5c377510faa11957042831ba3",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/be2be342d4c74db6a8d2bd18469cd6d488ab9c98",
+                "reference": "be2be342d4c74db6a8d2bd18469cd6d488ab9c98",
                 "shasum": ""
             },
             "require": {
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2024-04-30T12:52:59+00:00"
+            "time": "2024-08-09T07:55:45+00:00"
         },
         {
             "name": "laravel/prompts",
-            "version": "v0.1.21",
+            "version": "v0.1.25",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/prompts.git",
-                "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920"
+                "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/prompts/zipball/23ea808e8a145653e0ab29e30d4385e49f40a920",
-                "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920",
+                "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95",
+                "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95",
                 "shasum": ""
             },
             "require": {
             "description": "Add beautiful and user-friendly forms to your command-line applications.",
             "support": {
                 "issues": "https://github.com/laravel/prompts/issues",
-                "source": "https://github.com/laravel/prompts/tree/v0.1.21"
+                "source": "https://github.com/laravel/prompts/tree/v0.1.25"
             },
-            "time": "2024-04-30T12:46:16+00:00"
+            "time": "2024-08-12T22:06:33+00:00"
         },
         {
             "name": "laravel/serializable-closure",
-            "version": "v1.3.3",
+            "version": "v1.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/serializable-closure.git",
-                "reference": "3dbf8a8e914634c48d389c1234552666b3d43754"
+                "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754",
-                "reference": "3dbf8a8e914634c48d389c1234552666b3d43754",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81",
+                "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.3|^8.0"
             },
             "require-dev": {
-                "nesbot/carbon": "^2.61",
+                "illuminate/support": "^8.0|^9.0|^10.0|^11.0",
+                "nesbot/carbon": "^2.61|^3.0",
                 "pestphp/pest": "^1.21.3",
                 "phpstan/phpstan": "^1.8.2",
-                "symfony/var-dumper": "^5.4.11"
+                "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0"
             },
             "type": "library",
             "extra": {
                 "issues": "https://github.com/laravel/serializable-closure/issues",
                 "source": "https://github.com/laravel/serializable-closure"
             },
-            "time": "2023-11-08T14:08:06+00:00"
+            "time": "2024-08-02T07:48:17+00:00"
         },
         {
             "name": "laravel/socialite",
-            "version": "v5.14.0",
+            "version": "v5.15.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/socialite.git",
-                "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a"
+                "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/socialite/zipball/c7b0193a3753a29aff8ce80aa2f511917e6ed68a",
-                "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a",
+                "url": "https://api.github.com/repos/laravel/socialite/zipball/cc02625f0bd1f95dc3688eb041cce0f1e709d029",
+                "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029",
                 "shasum": ""
             },
             "require": {
                 "issues": "https://github.com/laravel/socialite/issues",
                 "source": "https://github.com/laravel/socialite"
             },
-            "time": "2024-05-03T20:31:38+00:00"
+            "time": "2024-06-28T20:09:34+00:00"
         },
         {
             "name": "laravel/tinker",
         },
         {
             "name": "league/commonmark",
-            "version": "2.4.2",
+            "version": "2.5.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf"
+                "reference": "b650144166dfa7703e62a22e493b853b58d874b0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf",
-                "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0",
+                "reference": "b650144166dfa7703e62a22e493b853b58d874b0",
                 "shasum": ""
             },
             "require": {
             },
             "require-dev": {
                 "cebe/markdown": "^1.0",
-                "commonmark/cmark": "0.30.3",
-                "commonmark/commonmark.js": "0.30.0",
+                "commonmark/cmark": "0.31.1",
+                "commonmark/commonmark.js": "0.31.1",
                 "composer/package-versions-deprecated": "^1.8",
                 "embed/embed": "^4.4",
                 "erusev/parsedown": "^1.0",
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.5-dev"
+                    "dev-main": "2.6-dev"
                 }
             },
             "autoload": {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-02T11:59:32+00:00"
+            "time": "2024-08-16T11:46:16+00:00"
         },
         {
             "name": "league/config",
         },
         {
             "name": "league/flysystem",
-            "version": "3.27.0",
+            "version": "3.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "4729745b1ab737908c7d055148c9a6b3e959832f"
+                "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4729745b1ab737908c7d055148c9a6b3e959832f",
-                "reference": "4729745b1ab737908c7d055148c9a6b3e959832f",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c",
+                "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c",
                 "shasum": ""
             },
             "require": {
                 "composer/semver": "^3.0",
                 "ext-fileinfo": "*",
                 "ext-ftp": "*",
+                "ext-mongodb": "^1.3",
                 "ext-zip": "*",
                 "friendsofphp/php-cs-fixer": "^3.5",
                 "google/cloud-storage": "^1.23",
+                "guzzlehttp/psr7": "^2.6",
                 "microsoft/azure-storage-blob": "^1.1",
+                "mongodb/mongodb": "^1.2",
                 "phpseclib/phpseclib": "^3.0.36",
                 "phpstan/phpstan": "^1.10",
                 "phpunit/phpunit": "^9.5.11|^10.0",
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/3.27.0"
+                "source": "https://github.com/thephpleague/flysystem/tree/3.28.0"
             },
-            "funding": [
-                {
-                    "url": "https://ecologi.com/frankdejonge",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/frankdejonge",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-04-07T19:17:50+00:00"
+            "time": "2024-05-22T10:09:12+00:00"
         },
         {
             "name": "league/flysystem-aws-s3-v3",
-            "version": "3.27.0",
+            "version": "3.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
-                "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837"
+                "reference": "22071ef1604bc776f5ff2468ac27a752514665c8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/3e6ce2f972f1470db779f04d29c289dcd2c32837",
-                "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8",
+                "reference": "22071ef1604bc776f5ff2468ac27a752514665c8",
                 "shasum": ""
             },
             "require": {
                 "storage"
             ],
             "support": {
-                "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.27.0"
+                "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0"
             },
-            "funding": [
-                {
-                    "url": "https://ecologi.com/frankdejonge",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/frankdejonge",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-04-07T19:16:54+00:00"
+            "time": "2024-05-06T20:05:52+00:00"
         },
         {
             "name": "league/flysystem-local",
-            "version": "3.25.1",
+            "version": "3.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-local.git",
-                "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92"
+                "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92",
-                "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40",
+                "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40",
                 "shasum": ""
             },
             "require": {
                 "local"
             ],
             "support": {
-                "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1"
+                "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0"
             },
-            "funding": [
-                {
-                    "url": "https://ecologi.com/frankdejonge",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/frankdejonge",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-15T19:58:44+00:00"
+            "time": "2024-05-06T20:05:52+00:00"
         },
         {
             "name": "league/html-to-markdown",
         },
         {
             "name": "monolog/monolog",
-            "version": "3.6.0",
+            "version": "3.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654"
+                "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654",
-                "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8",
+                "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/3.6.0"
+                "source": "https://github.com/Seldaek/monolog/tree/3.7.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-12T21:02:21+00:00"
+            "time": "2024-06-28T09:40:51+00:00"
         },
         {
             "name": "mtdowling/jmespath.php",
         },
         {
             "name": "nesbot/carbon",
-            "version": "2.72.3",
+            "version": "2.72.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83"
+                "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83",
-                "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed",
+                "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed",
                 "shasum": ""
             },
             "require": {
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-3.x": "3.x-dev",
-                    "dev-master": "2.x-dev"
+                    "dev-master": "3.x-dev",
+                    "dev-2.x": "2.x-dev"
                 },
                 "laravel": {
                     "providers": [
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-25T10:35:09+00:00"
+            "time": "2024-06-03T19:18:41+00:00"
         },
         {
             "name": "nette/schema",
         },
         {
             "name": "nette/utils",
-            "version": "v4.0.4",
+            "version": "v4.0.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/utils.git",
-                "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218"
+                "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
-                "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
+                "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
+                "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0 <8.4"
+                "php": "8.0 - 8.4"
             },
             "conflict": {
                 "nette/finder": "<3",
             ],
             "support": {
                 "issues": "https://github.com/nette/utils/issues",
-                "source": "https://github.com/nette/utils/tree/v4.0.4"
+                "source": "https://github.com/nette/utils/tree/v4.0.5"
             },
-            "time": "2024-01-17T16:50:36+00:00"
+            "time": "2024-08-07T15:39:19+00:00"
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.0.2",
+            "version": "v5.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
-                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1",
+                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1",
                 "shasum": ""
             },
             "require": {
             },
             "require-dev": {
                 "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^9.0"
             },
             "bin": [
                 "bin/php-parse"
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0"
             },
-            "time": "2024-03-05T20:51:40+00:00"
+            "time": "2024-07-01T20:03:41+00:00"
         },
         {
             "name": "nunomaduro/termwind",
         },
         {
             "name": "onelogin/php-saml",
-            "version": "4.1.0",
+            "version": "4.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/onelogin/php-saml.git",
-                "reference": "b22a57ebd13e838b90df5d3346090bc37056409d"
+                "url": "https://github.com/SAML-Toolkits/php-saml.git",
+                "reference": "d3b5172f137db2f412239432d77253ceaaa1e939"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/onelogin/php-saml/zipball/b22a57ebd13e838b90df5d3346090bc37056409d",
-                "reference": "b22a57ebd13e838b90df5d3346090bc37056409d",
+                "url": "https://api.github.com/repos/SAML-Toolkits/php-saml/zipball/d3b5172f137db2f412239432d77253ceaaa1e939",
+                "reference": "d3b5172f137db2f412239432d77253ceaaa1e939",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.3",
-                "robrichards/xmlseclibs": ">=3.1.1"
+                "robrichards/xmlseclibs": "^3.1"
             },
             "require-dev": {
                 "pdepend/pdepend": "^2.8.0",
             "license": [
                 "MIT"
             ],
-            "description": "OneLogin PHP SAML Toolkit",
-            "homepage": "https://developers.onelogin.com/saml/php",
+            "description": "PHP SAML Toolkit",
+            "homepage": "https://github.com/SAML-Toolkits/php-saml",
             "keywords": [
+                "Federation",
                 "SAML2",
-                "onelogin",
+                "SSO",
+                "identity",
                 "saml"
             ],
             "support": {
-                "email": "sixto.garcia@onelogin.com",
-                "issues": "https://github.com/onelogin/php-saml/issues",
-                "source": "https://github.com/onelogin/php-saml/"
+                "email": "sixto.martin.garcia@gmail.com",
+                "issues": "https://github.com/onelogin/SAML-Toolkits/issues",
+                "source": "https://github.com/onelogin/SAML-Toolkits/"
             },
-            "time": "2022-07-15T20:44:36+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/SAML-Toolkits",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-05-30T15:10:40+00:00"
         },
         {
             "name": "paragonie/constant_time_encoding",
         },
         {
             "name": "phpoption/phpoption",
-            "version": "1.9.2",
+            "version": "1.9.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/schmittjoh/php-option.git",
-                "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820"
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820",
-                "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
                 "shasum": ""
             },
             "require": {
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
             },
             "type": "library",
             "extra": {
                 "bamarni-bin": {
                     "bin-links": true,
-                    "forward-command": true
+                    "forward-command": false
                 },
                 "branch-alias": {
                     "dev-master": "1.9-dev"
             ],
             "support": {
                 "issues": "https://github.com/schmittjoh/php-option/issues",
-                "source": "https://github.com/schmittjoh/php-option/tree/1.9.2"
+                "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-11-12T21:59:55+00:00"
+            "time": "2024-07-20T21:41:07+00:00"
         },
         {
             "name": "phpseclib/phpseclib",
-            "version": "3.0.37",
+            "version": "3.0.41",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpseclib/phpseclib.git",
-                "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8"
+                "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
-                "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/621c73f7dcb310b61de34d1da4c4204e8ace6ceb",
+                "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb",
                 "shasum": ""
             },
             "require": {
-                "paragonie/constant_time_encoding": "^1|^2",
+                "paragonie/constant_time_encoding": "^1|^2|^3",
                 "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
                 "php": ">=5.6.1"
             },
             ],
             "support": {
                 "issues": "https://github.com/phpseclib/phpseclib/issues",
-                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37"
+                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.41"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-03-03T02:14:58+00:00"
+            "time": "2024-08-12T00:13:54+00:00"
         },
         {
             "name": "pragmarx/google2fa",
         },
         {
             "name": "psr/log",
-            "version": "3.0.0",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+                "reference": "79dff0b268932c640297f5208d6298f71855c03e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
-                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
+                "reference": "79dff0b268932c640297f5208d6298f71855c03e",
                 "shasum": ""
             },
             "require": {
                 "psr-3"
             ],
             "support": {
-                "source": "https://github.com/php-fig/log/tree/3.0.0"
+                "source": "https://github.com/php-fig/log/tree/3.0.1"
             },
-            "time": "2021-07-14T16:46:02+00:00"
+            "time": "2024-08-21T13:31:24+00:00"
         },
         {
             "name": "psr/simple-cache",
         },
         {
             "name": "psy/psysh",
-            "version": "v0.12.3",
+            "version": "v0.12.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73"
+                "reference": "2fd717afa05341b4f8152547f142cd2f130f6818"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73",
-                "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818",
+                "reference": "2fd717afa05341b4f8152547f142cd2f130f6818",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.12.3"
+                "source": "https://github.com/bobthecow/psysh/tree/v0.12.4"
             },
-            "time": "2024-04-02T15:57:53+00:00"
+            "time": "2024-06-10T01:18:23+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
         },
         {
             "name": "sabberworm/php-css-parser",
-            "version": "v8.5.1",
+            "version": "v8.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
-                "reference": "4a3d572b0f8b28bb6fd016ae8bbfc445facef152"
+                "reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/4a3d572b0f8b28bb6fd016ae8bbfc445facef152",
-                "reference": "4a3d572b0f8b28bb6fd016ae8bbfc445facef152",
+                "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
+                "reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
-                "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.5.1"
+                "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.6.0"
             },
-            "time": "2024-02-15T16:41:13+00:00"
+            "time": "2024-07-01T07:33:21+00:00"
         },
         {
             "name": "socialiteproviders/discord",
         },
         {
             "name": "symfony/console",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f"
+                "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
-                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
+                "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc",
+                "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc",
                 "shasum": ""
             },
             "require": {
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v6.4.7"
+                "source": "https://github.com/symfony/console/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-26T12:30:32+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v6.4.7",
+            "version": "v6.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b"
+                "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c5d5c2103c3762aff27a27e1e2409e30a79083b",
-                "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08",
+                "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08",
                 "shasum": ""
             },
             "require": {
             "description": "Converts CSS selectors to XPath expressions",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/css-selector/tree/v6.4.7"
+                "source": "https://github.com/symfony/css-selector/tree/v6.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-05-31T14:49:08+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
         },
         {
             "name": "symfony/error-handler",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "667a072466c6a53827ed7b119af93806b884cbb3"
+                "reference": "231f1b2ee80f72daa1972f7340297d67439224f0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/667a072466c6a53827ed7b119af93806b884cbb3",
-                "reference": "667a072466c6a53827ed7b119af93806b884cbb3",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0",
+                "reference": "231f1b2ee80f72daa1972f7340297d67439224f0",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v6.4.7"
+                "source": "https://github.com/symfony/error-handler/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-26T12:30:32+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v6.4.7",
+            "version": "v6.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f"
+                "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d84384f3f67de3cb650db64d685d70395dacfc3f",
-                "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b",
+                "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.7"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-05-31T14:49:08+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
         },
         {
             "name": "symfony/finder",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "511c48990be17358c23bf45c5d71ab85d40fb764"
+                "reference": "af29198d87112bebdd397bd7735fbd115997824c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/511c48990be17358c23bf45c5d71ab85d40fb764",
-                "reference": "511c48990be17358c23bf45c5d71ab85d40fb764",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c",
+                "reference": "af29198d87112bebdd397bd7735fbd115997824c",
                 "shasum": ""
             },
             "require": {
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v6.4.7"
+                "source": "https://github.com/symfony/finder/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-23T10:36:43+00:00"
+            "time": "2024-07-24T07:06:38+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759"
+                "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b4db6b833035477cb70e18d0ae33cb7c2b521759",
-                "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b",
+                "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b",
                 "shasum": ""
             },
             "require": {
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v6.4.7"
+                "source": "https://github.com/symfony/http-foundation/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-26T12:36:27+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98"
+                "reference": "147e0daf618d7575b5007055340d09aece5cf068"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b7b5e6cdef670a0c82d015a966ffc7e855861a98",
-                "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/147e0daf618d7575b5007055340d09aece5cf068",
+                "reference": "147e0daf618d7575b5007055340d09aece5cf068",
                 "shasum": ""
             },
             "require": {
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v6.4.7"
+                "source": "https://github.com/symfony/http-kernel/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-29T11:24:44+00:00"
+            "time": "2024-07-26T14:52:04+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v6.4.7",
+            "version": "v6.4.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "decadcf3865918ecfcbfa90968553994ce935a5e"
+                "reference": "7d048964877324debdcb4e0549becfa064a20d43"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/decadcf3865918ecfcbfa90968553994ce935a5e",
-                "reference": "decadcf3865918ecfcbfa90968553994ce935a5e",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/7d048964877324debdcb4e0549becfa064a20d43",
+                "reference": "7d048964877324debdcb4e0549becfa064a20d43",
                 "shasum": ""
             },
             "require": {
                 "phpdocumentor/reflection-docblock": "<3.2.2",
                 "phpdocumentor/type-resolver": "<1.4.0",
                 "symfony/mailer": "<5.4",
-                "symfony/serializer": "<6.3.2"
+                "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
             },
             "require-dev": {
                 "egulias/email-validator": "^2.1.10|^3.1|^4",
                 "symfony/process": "^5.4|^6.4|^7.0",
                 "symfony/property-access": "^5.4|^6.0|^7.0",
                 "symfony/property-info": "^5.4|^6.0|^7.0",
-                "symfony/serializer": "^6.3.2|^7.0"
+                "symfony/serializer": "^6.4.3|^7.0.3"
             },
             "type": "library",
             "autoload": {
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v6.4.7"
+                "source": "https://github.com/symfony/mime/tree/v6.4.9"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-06-28T09:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
-                "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
                 "shasum": ""
             },
             "require": {
                 "portable"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
+                "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
-                "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
+                "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "a287ed7475f85bf6f61890146edbc932c0fff919"
+                "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919",
-                "reference": "a287ed7475f85bf6f61890146edbc932c0fff919",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
+                "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
+                "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
-                "reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
+                "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
-                "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-06-19T12:30:46+00:00"
         },
         {
             "name": "symfony/polyfill-php72",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25"
+                "reference": "10112722600777e02d2745716b70c5db4ca70442"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25",
-                "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442",
+                "reference": "10112722600777e02d2745716b70c5db4ca70442",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-06-19T12:30:46+00:00"
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
+                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
-                "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
+                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
                 "shasum": ""
             },
             "require": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/polyfill-php83",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "86fcae159633351e5fd145d1c47de6c528f8caff"
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff",
-                "reference": "86fcae159633351e5fd145d1c47de6c528f8caff",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1",
-                "symfony/polyfill-php80": "^1.14"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-06-19T12:35:24+00:00"
         },
         {
             "name": "symfony/polyfill-uuid",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-uuid.git",
-                "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853"
+                "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853",
-                "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853",
+                "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9",
+                "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9",
                 "shasum": ""
             },
             "require": {
                 "uuid"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v6.4.7",
+            "version": "v6.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381"
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381",
-                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381",
+                "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
                 "shasum": ""
             },
             "require": {
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v6.4.7"
+                "source": "https://github.com/symfony/process/tree/v6.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-05-31T14:49:08+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "276e06398f71fa2a973264d94f28150f93cfb907"
+                "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/276e06398f71fa2a973264d94f28150f93cfb907",
-                "reference": "276e06398f71fa2a973264d94f28150f93cfb907",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/aad19fe10753ba842f0d653a8db819c4b3affa87",
+                "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87",
                 "shasum": ""
             },
             "require": {
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v6.4.7"
+                "source": "https://github.com/symfony/routing/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-15T09:26:24+00:00"
         },
         {
             "name": "symfony/service-contracts",
         },
         {
             "name": "symfony/string",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69"
+                "reference": "ccf9b30251719567bfd46494138327522b9a9446"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69",
-                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69",
+                "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446",
+                "reference": "ccf9b30251719567bfd46494138327522b9a9446",
                 "shasum": ""
             },
             "require": {
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v6.4.7"
+                "source": "https://github.com/symfony/string/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-22T10:21:14+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "7495687c58bfd88b7883823747b0656d90679123"
+                "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/7495687c58bfd88b7883823747b0656d90679123",
-                "reference": "7495687c58bfd88b7883823747b0656d90679123",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9",
+                "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v6.4.7"
+                "source": "https://github.com/symfony/translation/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-26T12:30:32+00:00"
         },
         {
             "name": "symfony/translation-contracts",
         },
         {
             "name": "symfony/uid",
-            "version": "v6.4.7",
+            "version": "v6.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/uid.git",
-                "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355"
+                "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/uid/zipball/a66efcb71d8bc3a207d9d78e0bd67f3321510355",
-                "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355",
+                "url": "https://api.github.com/repos/symfony/uid/zipball/35904eca37a84bb764c560cbfcac9f0ac2bcdbdf",
+                "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf",
                 "shasum": ""
             },
             "require": {
                 "uuid"
             ],
             "support": {
-                "source": "https://github.com/symfony/uid/tree/v6.4.7"
+                "source": "https://github.com/symfony/uid/tree/v6.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-05-31T14:49:08+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v6.4.7",
+            "version": "v6.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7"
+                "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7a9cd977cd1c5fed3694bee52990866432af07d7",
-                "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a71cc3374f5fb9759da1961d28c452373b343dd4",
+                "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4",
                 "shasum": ""
             },
             "require": {
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v6.4.7"
+                "source": "https://github.com/symfony/var-dumper/tree/v6.4.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-07-26T12:30:32+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
         },
         {
             "name": "vlucas/phpdotenv",
-            "version": "v5.6.0",
+            "version": "v5.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
-                "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2",
                 "shasum": ""
             },
             "require": {
                 "ext-pcre": "*",
-                "graham-campbell/result-type": "^1.1.2",
+                "graham-campbell/result-type": "^1.1.3",
                 "php": "^7.2.5 || ^8.0",
-                "phpoption/phpoption": "^1.9.2",
+                "phpoption/phpoption": "^1.9.3",
                 "symfony/polyfill-ctype": "^1.24",
                 "symfony/polyfill-mbstring": "^1.24",
                 "symfony/polyfill-php80": "^1.24"
             "extra": {
                 "bamarni-bin": {
                     "bin-links": true,
-                    "forward-command": true
+                    "forward-command": false
                 },
                 "branch-alias": {
                     "dev-master": "5.6-dev"
             ],
             "support": {
                 "issues": "https://github.com/vlucas/phpdotenv/issues",
-                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-11-12T22:43:29+00:00"
+            "time": "2024-07-20T21:52:34+00:00"
         },
         {
             "name": "voku/portable-ascii",
         },
         {
             "name": "larastan/larastan",
-            "version": "v2.9.6",
+            "version": "v2.9.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/larastan/larastan.git",
-                "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f"
+                "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/larastan/larastan/zipball/93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f",
-                "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f",
+                "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7",
+                "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7",
                 "shasum": ""
             },
             "require": {
                 "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
                 "php": "^8.0.2",
                 "phpmyadmin/sql-parser": "^5.9.0",
-                "phpstan/phpstan": "^1.10.66"
+                "phpstan/phpstan": "^1.11.2"
             },
             "require-dev": {
                 "doctrine/coding-standard": "^12.0",
             ],
             "support": {
                 "issues": "https://github.com/larastan/larastan/issues",
-                "source": "https://github.com/larastan/larastan/tree/v2.9.6"
+                "source": "https://github.com/larastan/larastan/tree/v2.9.8"
             },
             "funding": [
                 {
                     "type": "patreon"
                 }
             ],
-            "time": "2024-05-09T11:53:26+00:00"
+            "time": "2024-07-06T17:46:02+00:00"
         },
         {
             "name": "mockery/mockery",
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.11.1",
+            "version": "1.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
-                "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
                 "shasum": ""
             },
             "require": {
             },
             "conflict": {
                 "doctrine/collections": "<1.6.8",
-                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
             },
             "require-dev": {
                 "doctrine/collections": "^1.6.8",
                 "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpspec/prophecy": "^1.10",
                 "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
             },
             "type": "library",
             ],
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-03-08T13:26:56+00:00"
+            "time": "2024-06-12T14:39:25+00:00"
         },
         {
             "name": "nunomaduro/collision",
         },
         {
             "name": "phpmyadmin/sql-parser",
-            "version": "5.9.0",
+            "version": "5.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpmyadmin/sql-parser.git",
-                "reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
+                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
-                "reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
+                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/169a9f11f1957ea36607c9b29eac1b48679f1ecc",
+                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc",
                 "shasum": ""
             },
             "require": {
                 "phpstan/extension-installer": "^1.1",
                 "phpstan/phpstan": "^1.9.12",
                 "phpstan/phpstan-phpunit": "^1.3.3",
-                "phpunit/php-code-coverage": "*",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "phpunit/phpunit": "^8.5 || ^9.6",
                 "psalm/plugin-phpunit": "^0.16.1",
                 "vimeo/psalm": "^4.11",
                 "zumba/json-serializer": "~3.0.2"
                     "type": "other"
                 }
             ],
-            "time": "2024-01-20T20:34:02+00:00"
+            "time": "2024-08-13T19:01:01+00:00"
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.1",
+            "version": "1.11.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b"
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e524358f930e41a2b4cca1320e3b04fc26b39e0b",
-                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
                 "shasum": ""
             },
             "require": {
                     "type": "github"
                 }
             ],
-            "time": "2024-05-15T08:00:59+00:00"
+            "time": "2024-08-19T14:37:29+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "10.1.14",
+            "version": "10.1.16",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
-                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.18 || ^5.0",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
                 "php": ">=8.1",
-                "phpunit/php-file-iterator": "^4.0",
-                "phpunit/php-text-template": "^3.0",
-                "sebastian/code-unit-reverse-lookup": "^3.0",
-                "sebastian/complexity": "^3.0",
-                "sebastian/environment": "^6.0",
-                "sebastian/lines-of-code": "^2.0",
-                "sebastian/version": "^4.0",
-                "theseer/tokenizer": "^1.2.0"
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "sebastian/code-unit-reverse-lookup": "^3.0.0",
+                "sebastian/complexity": "^3.2.0",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/lines-of-code": "^2.0.2",
+                "sebastian/version": "^4.0.1",
+                "theseer/tokenizer": "^1.2.3"
             },
             "require-dev": {
                 "phpunit/phpunit": "^10.1"
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "10.1-dev"
+                    "dev-main": "10.1.x-dev"
                 }
             },
             "autoload": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2024-03-12T15:33:41+00:00"
+            "time": "2024-08-22T04:31:57+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.20",
+            "version": "10.5.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
-                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897",
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897",
                 "shasum": ""
             },
             "require": {
                 "ext-mbstring": "*",
                 "ext-xml": "*",
                 "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.10.1",
-                "phar-io/manifest": "^2.0.3",
-                "phar-io/version": "^3.0.2",
+                "myclabs/deep-copy": "^1.12.0",
+                "phar-io/manifest": "^2.0.4",
+                "phar-io/version": "^3.2.1",
                 "php": ">=8.1",
-                "phpunit/php-code-coverage": "^10.1.5",
-                "phpunit/php-file-iterator": "^4.0",
-                "phpunit/php-invoker": "^4.0",
-                "phpunit/php-text-template": "^3.0",
-                "phpunit/php-timer": "^6.0",
-                "sebastian/cli-parser": "^2.0",
-                "sebastian/code-unit": "^2.0",
-                "sebastian/comparator": "^5.0",
-                "sebastian/diff": "^5.0",
-                "sebastian/environment": "^6.0",
-                "sebastian/exporter": "^5.1",
-                "sebastian/global-state": "^6.0.1",
-                "sebastian/object-enumerator": "^5.0",
-                "sebastian/recursion-context": "^5.0",
-                "sebastian/type": "^4.0",
-                "sebastian/version": "^4.0"
+                "phpunit/php-code-coverage": "^10.1.15",
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-invoker": "^4.0.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "phpunit/php-timer": "^6.0.0",
+                "sebastian/cli-parser": "^2.0.1",
+                "sebastian/code-unit": "^2.0.0",
+                "sebastian/comparator": "^5.0.2",
+                "sebastian/diff": "^5.1.1",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/exporter": "^5.1.2",
+                "sebastian/global-state": "^6.0.2",
+                "sebastian/object-enumerator": "^5.0.0",
+                "sebastian/recursion-context": "^5.0.0",
+                "sebastian/type": "^4.0.0",
+                "sebastian/version": "^4.0.1"
             },
             "suggest": {
                 "ext-soap": "To be able to generate mocks based on WSDL files"
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-24T06:32:35+00:00"
+            "time": "2024-08-13T06:09:37+00:00"
         },
         {
             "name": "sebastian/cli-parser",
         },
         {
             "name": "sebastian/comparator",
-            "version": "5.0.1",
+            "version": "5.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+                "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
+                "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
                 "shasum": ""
             },
             "require": {
                 "sebastian/exporter": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^10.3"
+                "phpunit/phpunit": "^10.4"
             },
             "type": "library",
             "extra": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
                 "security": "https://github.com/sebastianbergmann/comparator/security/policy",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-08-14T13:18:12+00:00"
+            "time": "2024-08-12T06:03:08+00:00"
         },
         {
             "name": "sebastian/complexity",
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.10.0",
+            "version": "3.10.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2"
+                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
-                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017",
                 "shasum": ""
             },
             "require": {
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-05-20T08:11:32+00:00"
+            "time": "2024-07-21T23:26:44+00:00"
         },
         {
             "name": "ssddanbrown/asserthtml",
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v6.4.7",
+            "version": "v6.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "2088c5da700b1e7a8689fffc10dda6c1f643deea"
+                "reference": "105b56a0305d219349edeb60a800082eca864e4b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2088c5da700b1e7a8689fffc10dda6c1f643deea",
-                "reference": "2088c5da700b1e7a8689fffc10dda6c1f643deea",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/105b56a0305d219349edeb60a800082eca864e4b",
+                "reference": "105b56a0305d219349edeb60a800082eca864e4b",
                 "shasum": ""
             },
             "require": {
             "description": "Eases DOM navigation for HTML and XML documents",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dom-crawler/tree/v6.4.7"
+                "source": "https://github.com/symfony/dom-crawler/tree/v6.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-05-31T14:49:08+00:00"
         },
         {
             "name": "theseer/tokenizer",
index cbc7fb1043ed3f2efc47e1fe96142c9b613a8991..9cc2517b7ff62802b6585e32b942660a2e0c5137 100644 (file)
@@ -8,7 +8,6 @@
       "updated_at": "2022-02-03T16:27:55.000000Z",
       "external_auth_id": "abc123456",
       "slug": "dan-brown",
-      "user_id": 1,
       "last_activity_at": "2022-02-03T16:27:55.000000Z",
       "profile_url": "https://docs.example.com/user/dan-brown",
       "edit_url": "https://docs.example.com/settings/users/1",
@@ -22,7 +21,6 @@
       "updated_at": "2021-11-18T17:10:58.000000Z",
       "external_auth_id": "",
       "slug": "benny",
-      "user_id": 2,
       "last_activity_at": "2022-01-31T20:39:24.000000Z",
       "profile_url": "https://docs.example.com/user/benny",
       "edit_url": "https://docs.example.com/settings/users/2",
index fe497e9e63e7050b5fb920cfa0d6249da87e9727..50d528fafb8d1104135100629fa37826805e378e 100644 (file)
@@ -1,4 +1,4 @@
-FROM php:8.1-apache
+FROM php:8.3-apache
 
 ENV APACHE_DOCUMENT_ROOT /app/public
 WORKDIR /app
index 8211a4a44e1cbd3d0d38c3b72a11131c7deaa39e..0383c2fad35a5e62eddaae1dab9c2bde9a441023 100644 (file)
@@ -9,7 +9,7 @@ acorn
 License: MIT
 License File: node_modules/acorn/LICENSE
 Copyright: Copyright (C) 2012-2022 by various contributors (see AUTHORS)
-Source: https://github.com/acornjs/acorn.git
+Source: git+https://github.com/acornjs/acorn.git
 Link: https://github.com/acornjs/acorn
 -----------
 ajv
@@ -120,7 +120,7 @@ Link: https://github.com/juliangruber/brace-expansion
 braces
 License: MIT
 License File: node_modules/braces/LICENSE
-Copyright: Copyright (c) 2014-2018, Jon Schlinkert.
+Copyright: Copyright (c) 2014-present, Jon Schlinkert.
 Source: micromatch/braces
 Link: https://github.com/micromatch/braces
 -----------
@@ -1665,6 +1665,13 @@ Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
 Source: git://github.com/isaacs/node-which.git
 Link: git://github.com/isaacs/node-which.git
 -----------
+word-wrap
+License: MIT
+License File: node_modules/word-wrap/LICENSE
+Copyright: Copyright (c) 2014-2016, Jon Schlinkert
+Source: jonschlinkert/word-wrap
+Link: https://github.com/jonschlinkert/word-wrap
+-----------
 wrap-ansi
 License: MIT
 License File: node_modules/wrap-ansi/license
@@ -1715,13 +1722,6 @@ Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindres
 Source: sindresorhus/yocto-queue
 Link: sindresorhus/yocto-queue
 -----------
-@aashutoshrathi/word-wrap
-License: MIT
-License File: node_modules/@aashutoshrathi/word-wrap/LICENSE
-Copyright: Copyright (c) 2014-2016, Jon Schlinkert
-Source: git+https://github.com/aashutoshrathi/word-wrap.git
-Link: https://github.com/aashutoshrathi/word-wrap
------------
 @codemirror/autocomplete
 License: MIT
 License File: node_modules/@codemirror/autocomplete/LICENSE
index 045d64670f538ef2b375149dee3aee30e4c8450d..a2d172e12c54c7d876b7106d6f418dc6313f30b3 100644 (file)
@@ -357,9 +357,9 @@ Link: https://github.com/nunomaduro/termwind.git
 onelogin/php-saml
 License: MIT
 License File: vendor/onelogin/php-saml/LICENSE
-Copyright: Copyright (c) 2010-2016 OneLogin, Inc.
-Source: https://github.com/onelogin/php-saml.git
-Link: https://developers.onelogin.com/saml/php
+Copyright: Copyright (c) 2010-2022 OneLogin, Inc.
+Source: https://github.com/SAML-Toolkits/php-saml.git
+Link: https://github.com/SAML-Toolkits/php-saml
 -----------
 paragonie/constant_time_encoding
 License: MIT
index 13648c12176463301a7835c70ec35205741c335e..f4c3a64c66459ecd531efdfc7b1729c89308e3b8 100644 (file)
@@ -1,20 +1,17 @@
 # This is a Docker Compose configuration
 # intended for development purposes only
 
-version: '3'
-
 volumes:
   db: {}
 
 services:
   db:
-    image: mysql:8
+    image: mysql:8.4
     environment:
       MYSQL_DATABASE: bookstack-dev
       MYSQL_USER: bookstack-test
       MYSQL_PASSWORD: bookstack-test
       MYSQL_RANDOM_ROOT_PASSWORD: 'true'
-    command: --default-authentication-plugin=mysql_native_password
     volumes:
       - ./dev/docker/init.db:/docker-entrypoint-initdb.d
       - db:/var/lib/mysql
@@ -43,7 +40,7 @@ services:
     extra_hosts:
     - "host.docker.internal:host-gateway"
   node:
-    image: node:alpine
+    image: node:22-alpine
     working_dir: /app
     user: node
     volumes:
index 7d64babc44948a235e45e658bd6f09011f603bea..fb434699e2da9eb97ecc3be5425f71ff174706ea 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'تطبيق الجوال',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index ec3e753513d9d475764585191358bc1eb0d2a711..71cd2a712958e4cf2dd2004dbadb0bae06650781 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Мобилно приложение',
     'mfa_option_totp_desc' => 'За да използваш многофакторно удостоверяване, ще ти трябва мобилно приложение, което поддържа временни еднократни пароли (TOTP), като например Google Authenticator, Authy или Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Резервни кодове',
-    'mfa_option_backup_codes_desc' => 'Запази на сигурно място набор от еднократни резервни кодове, с които можеш да устовериш идентичността си.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Потвърди и включи',
     'mfa_gen_backup_codes_title' => 'Настройка на резервни кодове',
     'mfa_gen_backup_codes_desc' => 'Запази този лист с кодове на сигурно място. Когато достъпваш системата, ще можеш да използваш един от тези кодове като вторичен механизъм за удостоверяване.',
index 96ab0efea1932c8bf2c5043e621934190153eb24..a8d0da78eb9481bd90b25576a058b95d60168743 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index a3116ef0d634b71eaa34494a38df629633680c24..c288384826ce1c34ca6bf849b9bee334a5181e5f 100644 (file)
@@ -7,116 +7,116 @@ return [
 
     // Pages
     'page_create'                 => 'ha creat la pàgina',
-    'page_create_notification'    => 'Pàgina creada correctament',
+    'page_create_notification'    => 'S’ha creat la pàgina',
     'page_update'                 => 'ha actualitzat la pàgina',
-    'page_update_notification'    => 'Pàgina actualitzada correctament',
-    'page_delete'                 => 'ha suprimit una pàgina',
-    'page_delete_notification'    => 'Pàgina suprimida correctament',
+    'page_update_notification'    => 'S’ha actualitzat la pàgina',
+    'page_delete'                 => 'ha suprimit la pàgina',
+    'page_delete_notification'    => 'S’ha suprimit la pàgina',
     'page_restore'                => 'ha restaurat la pàgina',
-    'page_restore_notification'   => 'Pàgina restaurada correctament',
+    'page_restore_notification'   => 'S’ha restaurat la pàgina',
     'page_move'                   => 'ha mogut la pàgina',
-    'page_move_notification'      => 'Pàgina moguda correctament',
+    'page_move_notification'      => 'S’ha mogut la pàgina',
 
     // Chapters
     'chapter_create'              => 'ha creat el capítol',
-    'chapter_create_notification' => 'Capítol creat correctament',
+    'chapter_create_notification' => 'S’ha creat el capítol',
     'chapter_update'              => 'ha actualitzat el capítol',
-    'chapter_update_notification' => 'Capítol actualitzat correctament',
-    'chapter_delete'              => 'ha suprimit un capítol',
-    'chapter_delete_notification' => 'Capítol suprimit correctament',
+    'chapter_update_notification' => 'S’ha actualitzat el capítol',
+    'chapter_delete'              => 'ha suprimit el capítol',
+    'chapter_delete_notification' => 'S’ha suprimit el capítol',
     'chapter_move'                => 'ha mogut el capítol',
-    'chapter_move_notification' => 'Capítol mogut correctament',
+    'chapter_move_notification' => 'S’ha mogut el capítol',
 
     // Books
     'book_create'                 => 'ha creat el llibre',
-    'book_create_notification'    => 'Llibre creat correctament',
-    'book_create_from_chapter'              => 'ha convertit un capítol en el llibre',
-    'book_create_from_chapter_notification' => 'Capítol convertit en llibre correctament',
+    'book_create_notification'    => 'S’ha creat el llibre',
+    'book_create_from_chapter'              => 'ha convertit el capítol a llibre',
+    'book_create_from_chapter_notification' => 'S’ha convertit el capítol a llibre',
     'book_update'                 => 'ha actualitzat el llibre',
-    'book_update_notification'    => 'Llibre actualitzat correctament',
-    'book_delete'                 => 'ha suprimit un llibre',
-    'book_delete_notification'    => 'Llibre suprimit correctament',
+    'book_update_notification'    => 'S’ha actualitzat el llibre',
+    'book_delete'                 => 'ha suprimit el llibre',
+    'book_delete_notification'    => 'S’ha suprimit el llibre',
     'book_sort'                   => 'ha ordenat el llibre',
-    'book_sort_notification'      => 'Llibre reordenat correctament',
+    'book_sort_notification'      => 'S’ha tornat a ordenar el llibre',
 
     // Bookshelves
     'bookshelf_create'            => 'ha creat el prestatge',
-    'bookshelf_create_notification'    => 'Prestatge creat correctament',
-    'bookshelf_create_from_book'    => 'ha convertit un llibre en el prestatge',
-    'bookshelf_create_from_book_notification'    => 'Llibre convertit en prestatge correctament',
+    'bookshelf_create_notification'    => 'S’ha creat el prestatge',
+    'bookshelf_create_from_book'    => 'ha convertit el llibre a prestatge',
+    'bookshelf_create_from_book_notification'    => 'S’ha convertit el llibre a prestatge',
     'bookshelf_update'                 => 'ha actualitzat el prestatge',
-    'bookshelf_update_notification'    => 'Prestatge actualitzat correctament',
-    'bookshelf_delete'                 => 'ha suprimit un prestatge',
-    'bookshelf_delete_notification'    => 'Prestatge suprimit correctament',
+    'bookshelf_update_notification'    => 'S’ha actualitzat el prestatge',
+    'bookshelf_delete'                 => 'ha suprimit el prestatge',
+    'bookshelf_delete_notification'    => 'S’ha suprimit el prestatge',
 
     // Revisions
     'revision_restore' => 'ha restaurat la revisió',
-    'revision_delete' => 'ha suprimit una revisió',
-    'revision_delete_notification' => 'Revisió suprimida correctament',
+    'revision_delete' => 'ha suprimit la revisió',
+    'revision_delete_notification' => 'S’ha suprimit la revisió',
 
     // Favourites
-    'favourite_add_notification' => 'S’ha afegit «:name» als vostres preferits',
-    'favourite_remove_notification' => 'S’ha suprimit «:name» dels vostres preferits',
+    'favourite_add_notification' => 'S’ha afegit &laquo;:name&raquo; als favorits.',
+    'favourite_remove_notification' => 'S’ha eliminat &laquo;:name&raquo; dels favorits.',
 
     // Watching
-    'watch_update_level_notification' => 'Preferències de seguiment actualitzades correctament',
+    'watch_update_level_notification' => 'S’han actualitzat les preferències de seguiment',
 
     // Auth
-    'auth_login' => 'ha iniciat la sessió',
+    'auth_login' => 'ha iniciat sessió',
     'auth_register' => 's’ha registrat com a usuari nou',
-    'auth_password_reset_request' => 'ha sol·licitat un restabliment de la contrasenya',
-    'auth_password_reset_update' => 'ha restablert la contrasenya de l’usuari',
-    'mfa_setup_method' => 'ha configurat un mètode d’autenticació de múltiple factor',
-    'mfa_setup_method_notification' => 'Mètode d’autenticació de múltiple factor configurat correctament',
-    'mfa_remove_method' => 'ha suprimit un mètode d’autenticació de múltiple factor',
-    'mfa_remove_method_notification' => 'Mètode d’autenticació de múltiple factor suprimit correctament',
+    'auth_password_reset_request' => 'ha sol·licitat la reinicialització de la contrasenya',
+    'auth_password_reset_update' => 'ha reinicialitzat la contrasenya',
+    'mfa_setup_method' => 'ha configurat un mètode d’autenticació multifactorial',
+    'mfa_setup_method_notification' => 'S’ha configurat un mètode d’autenticació multifactorial',
+    'mfa_remove_method' => 'ha eliminat un mètode d’autenticació multifactorial',
+    'mfa_remove_method_notification' => 'S’ha eliminat un mètode d’autenticació multifactorial',
 
     // Settings
     'settings_update' => 'ha actualitzat la configuració',
-    'settings_update_notification' => 'Configuració actualitzada correctament',
+    'settings_update_notification' => 'S’ha actualitzat la configuració',
     'maintenance_action_run' => 'ha executat una acció de manteniment',
 
     // Webhooks
     'webhook_create' => 'ha creat un webhook',
-    'webhook_create_notification' => 'Webhook creat correctament',
-    'webhook_update' => 'ha actualitzat un webhook',
-    'webhook_update_notification' => 'Webhook actualitzat correctament',
-    'webhook_delete' => 'ha suprimit un webhook',
-    'webhook_delete_notification' => 'Webhook suprimit correctament',
+    'webhook_create_notification' => 'S’ha creat el webhook',
+    'webhook_update' => 'ha actualitzat el webhook',
+    'webhook_update_notification' => 'S’ha actualitzat el webhook',
+    'webhook_delete' => 'ha suprimit el webhook',
+    'webhook_delete_notification' => 'S’ha suprimit el webhook',
 
     // Users
     'user_create' => 'ha creat l’usuari',
-    'user_create_notification' => 'Usuari creat correctament',
+    'user_create_notification' => 'S’ha creat l’usuari',
     'user_update' => 'ha actualitzat l’usuari',
-    'user_update_notification' => 'Usuari actualitzat correctament',
-    'user_delete' => 'ha suprimit un usuari',
-    'user_delete_notification' => 'Usuari suprimit correctament',
+    'user_update_notification' => 'S’ha actualitzat l’usuari',
+    'user_delete' => 'ha suprimit l’usuari',
+    'user_delete_notification' => 'S’ha suprimit l’usuari',
 
     // API Tokens
-    'api_token_create' => 'created API token',
-    'api_token_create_notification' => 'Testimoni d’API creat correctament',
-    'api_token_update' => 'updated API token',
-    'api_token_update_notification' => 'Testimoni d’API actualitzat correctament',
-    'api_token_delete' => 'deleted API token',
-    'api_token_delete_notification' => 'Testimoni d’API suprimit correctament',
+    'api_token_create' => 'ha creat el testimoni API',
+    'api_token_create_notification' => 'S’ha creat el testimoni API',
+    'api_token_update' => 'ha actualitzat el testimoni API',
+    'api_token_update_notification' => 'S’ha actualitzat el testimoni API',
+    'api_token_delete' => 'ha suprimit el testimoni API',
+    'api_token_delete_notification' => 'S’ha suprimit el testimoni API',
 
     // Roles
     'role_create' => 'ha creat el rol',
-    'role_create_notification' => 'Rol creat correctament',
+    'role_create_notification' => 'S’ha creat el rol',
     'role_update' => 'ha actualitzat el rol',
-    'role_update_notification' => 'Rol actualitzat correctament',
-    'role_delete' => 'ha suprimit un rol',
-    'role_delete_notification' => 'Rol suprimit correctament',
+    'role_update_notification' => 'S’ha actualitzat el rol',
+    'role_delete' => 'ha suprimit el rol',
+    'role_delete_notification' => 'S’ha suprimit el rol',
 
     // Recycle Bin
-    'recycle_bin_empty' => 'ha buidat la paperera de reciclatge',
-    'recycle_bin_restore' => 'ha restaurat de la paperera de reciclatge',
-    'recycle_bin_destroy' => 'ha suprimit de la paperera de reciclatge',
+    'recycle_bin_empty' => 'ha buidat la paperera',
+    'recycle_bin_restore' => 'ha restaurat de la paperera',
+    'recycle_bin_destroy' => 'ha eliminat de la paperera',
 
     // Comments
     'commented_on'                => 'ha comentat a',
-    'comment_create'              => 'ha afegit el comentari',
-    'comment_update'              => 'ha actualitzat el comentari',
+    'comment_create'              => 'ha afegit un comentari',
+    'comment_update'              => 'ha actualitzat un comentari',
     'comment_delete'              => 'ha suprimit un comentari',
 
     // Other
index 714c095b6c618465d9d9d15157ebf56c864f99f5..ba6ede42f0cea103d371db7ed3da852009d91c6c 100644 (file)
  */
 return [
 
-    'failed' => 'Les credencials no coincideixen amb les que hi ha emmagatzemades.',
-    'throttle' => 'Massa intents d’inici de sessió. Torneu-ho a provar d’aquí :seconds segons.',
+    'failed' => 'Aquestes credencials no existeixen al nostre registre.',
+    'throttle' => 'Massa intents d’inici de sessió. Torneu-ho a provar d’aquí :seconds segons.',
 
     // Login & Register
-    'sign_up' => 'Registra-m’hi',
-    'log_in' => 'Inicia la sessió',
-    'log_in_with' => 'Inicia la sessió amb :socialDriver',
-    'sign_up_with' => 'Registra-m’hi amb :socialDriver',
+    'sign_up' => 'Registreu-vos',
+    'log_in' => 'Inicia sessió',
+    'log_in_with' => 'Inicia sessió amb :socialDriver',
+    'sign_up_with' => 'Registreu-vos amb :socialDriver',
     'logout' => 'Tanca la sessió',
 
     'name' => 'Nom',
     'username' => 'Nom d’usuari',
-    'email' => 'Adreça electrònica',
+    'email' => 'Correu electrònic',
     'password' => 'Contrasenya',
     'password_confirm' => 'Confirmeu la contrasenya',
-    'password_hint' => 'Cal que tingui un mínim de 8 caràcters',
+    'password_hint' => 'Ha de tenir almenys 8 caràcters',
     'forgot_password' => 'Heu oblidat la contrasenya?',
     'remember_me' => 'Recorda’m',
-    'ldap_email_hint' => 'Introduïu una adreça electrònica per a aquest compte.',
-    'create_account' => 'Crea el compte',
+    'ldap_email_hint' => 'Introduïu un correu electrònic per al compte.',
+    'create_account' => 'Creeu un compte',
     'already_have_account' => 'Ja teniu un compte?',
     'dont_have_account' => 'No teniu cap compte?',
-    'social_login' => 'Inici de sessió amb xarxes socials',
-    'social_registration' => 'Registre amb xarxes socials',
-    'social_registration_text' => 'Registreu-vos i inicieu la sessió fent servir un altre servei.',
+    'social_login' => 'Inici de sessió amb una xarxa social',
+    'social_registration' => 'Registre amb una xarxa social',
+    'social_registration_text' => 'Registreu-vos i inicieu sessió amb un altre servei.',
 
-    'register_thanks' => 'Gràcies per registrar-vos!',
-    'register_confirm' => 'Reviseu el vostre correu electrònic i feu clic al botó de confirmació per a accedir a :appName.',
-    'registrations_disabled' => 'Actualment, els registres estan desactivats',
-    'registration_email_domain_invalid' => 'Aquest domini de correu electrònic no té accés a aquesta aplicació',
-    'register_success' => 'Gràcies per registrar-vos! Ja us hi heu registrat i heu iniciat la sessió.',
+    'register_thanks' => 'Gràcies per registrar-vos.',
+    'register_confirm' => 'Comproveu el correu electrònic i cliqueu el botó de confirmació per a accedir a :appName.',
+    'registrations_disabled' => 'Els registres estan desactivats',
+    'registration_email_domain_invalid' => 'Aquest domini de correu electrònic no té accés a l’aplicació.',
+    'register_success' => 'Gràcies per registrar-vos Us heu registrat i heu iniciat sessió.',
 
     // Login auto-initiation
-    'auto_init_starting' => 'S’està provant d’iniciar la sessió',
-    'auto_init_starting_desc' => 'Estem contactant amb el vostre sistema d’autenticació per a començar el procés d’inici de sessió. Si no hi ha cap progrés d’aquí a 5 segons, proveu de fer clic a l’enllaç de sota.',
-    'auto_init_start_link' => 'Continua amb l’autenticació',
+    'auto_init_starting' => 'S’està provant d’iniciar sessió',
+    'auto_init_starting_desc' => 'Estem contactant amb el vostre sistema d’autenticació per a començar el procés d’inici sessió. Si d’aquí 5 segons no hi ha hagut cap progrés proveu de clicar l’enllaç.',
+    'auto_init_start_link' => 'Continua amb la l’autenticació',
 
     // Password Reset
-    'reset_password' => 'Restableix la contrasenya',
-    'reset_password_send_instructions' => 'Introduïu la vostra adreça electrònica a continuació i us enviarem un correu electrònic amb un enllaç per a restablir la contrasenya.',
-    'reset_password_send_button' => 'Envia l’enllaç de restabliment',
-    'reset_password_sent' => 'S’enviarà un enllaç per a restablir la contrasenya a :email, si es troba aquesta adreça al sistema.',
-    'reset_password_success' => 'La contrasenya s’ha restablert correctament.',
-    'email_reset_subject' => 'Restabliu la contrasenya a :appName',
-    'email_reset_text' => 'Rebeu aquest correu electrònic perquè s’ha fet una petició de restabliment de contrasenya per al vostre compte.',
-    'email_reset_not_requested' => 'Si no heu demanat restablir la contrasenya, no cal que emprengueu cap acció.',
+    'reset_password' => 'Reinicialitza la contrasenya',
+    'reset_password_send_instructions' => 'Introduïu la vostra adreça electrònica i us enviarem un correu electrònic amb un enllaç de reinicialització de la contrasenya.',
+    'reset_password_send_button' => 'Envia’m un enllaç de reinicialització',
+    'reset_password_sent' => 'Si l’adreça electrònica :email existeix al sistema, us hi enviarem un enllaç de reinicialització de contrasenya.',
+    'reset_password_success' => 'S’ha reinicialitzat la contrasenya.',
+    'email_reset_subject' => 'Reinicialització de la contrasenya de :appName',
+    'email_reset_text' => 'Heu rebut aquest correu electrònic perquè hem rebut una sol·licitud de reinicialització de contrasenya per al vostre compte.',
+    'email_reset_not_requested' => 'Si no heu sol·licitat la reinicialització de la contrasenya, no cal que feu res més.',
 
     // Email Confirmation
-    'email_confirm_subject' => 'Confirmeu la vostra adreça electrònica a :appName',
-    'email_confirm_greeting' => 'Gràcies per unir-vos a :appName!',
-    'email_confirm_text' => 'Confirmeu la vostra adreça electrònica fent clic al botó a continuació:',
-    'email_confirm_action' => 'Confirma el correu',
-    'email_confirm_send_error' => 'Cal confirmar l’adreça electrònica, però el sistema no ha pogut enviar el correu electrònic. Poseu-vos en contacte amb l’administrador perquè s’asseguri que el correu electrònic està ben configurat.',
-    'email_confirm_success' => 'Heu confirmat el vostre correu electrònic! Ara hauríeu de poder iniciar la sessió fent servir aquesta adreça electrònica.',
-    'email_confirm_resent' => 'S’ha tornat a enviar el correu electrònic de confirmació. Reviseu la vostra safata d’entrada.',
-    'email_confirm_thanks' => 'Gràcies per la confirmació!',
-    'email_confirm_thanks_desc' => 'Espereu uns instants mentre gestionem la confirmació. Si no se us redirigeix d’aquí a 3 segons, premeu l’enllaç «Continua» de sota per a continuar.',
+    'email_confirm_subject' => 'Confirmeu l’adreça electrònica de :appName',
+    'email_confirm_greeting' => 'Gràcies per registrar-vos a :appName!',
+    'email_confirm_text' => 'Cliqueu el botó per a confirmar l’adreça electrònica:',
+    'email_confirm_action' => 'Confirmeu d’adreça electrònica',
+    'email_confirm_send_error' => 'S’ha de confirmar de l’adreça electrònica però no s’ha pogut enviar el correu de confirmació. Contacteu l’administrador per a assegurar-vos que el correu està ben configurat.',
+    'email_confirm_success' => 'S’ha confirmat el correu electrònic. Ara hauríeu de poder iniciar sessió amb aquesta adreça electrònica.',
+    'email_confirm_resent' => 'S’ha enviat el correu de confirmació. Comproveu la safata d’entrada.',
+    'email_confirm_thanks' => 'Gràcies per la confirmació.',
+    'email_confirm_thanks_desc' => 'Espereu-vos un moment mentre es gestiona la confirmació. Si d’aquí 3 segons no se us ha redirigit, cliqueu l’enllaç &laquo;Continua&raquo; per a continuar.',
 
-    'email_not_confirmed' => 'Adreça electrònica no confirmada',
-    'email_not_confirmed_text' => 'La vostra adreça electrònica encara no està confirmada.',
-    'email_not_confirmed_click_link' => 'Feu clic a l’enllaç del correu electrònic que us vam enviar poc després que us registréssiu.',
-    'email_not_confirmed_resend' => 'Si no el trobeu, podeu tornar a enviar el correu electrònic de confirmació enviant el formulari a continuació.',
+    'email_not_confirmed' => 'No s’ha confirmat l’adreça de correu electrònic',
+    'email_not_confirmed_text' => 'Encara no heu confirmat l’adreça electrònica.',
+    'email_not_confirmed_click_link' => 'Cliqueu l’enllaç que hi ha al correu electrònic que se us va enviar en registrar-vos.',
+    'email_not_confirmed_resend' => 'Si no trobeu el correu electrònic ompliu el formulari a continuació i us n’enviarem un altre.',
     'email_not_confirmed_resend_button' => 'Torna a enviar el correu de confirmació',
 
     // User Invite
-    'user_invite_email_subject' => 'Us han convidat a unir-vos a :appName!',
-    'user_invite_email_greeting' => 'S’ha creat un compte en el vostre nom a :appName.',
-    'user_invite_email_text' => 'Feu clic al botó a continuació per a definir una contrasenya per al compte i obtenir-hi accés:',
-    'user_invite_email_action' => 'Defineix una contrasenya per al compte',
+    'user_invite_email_subject' => 'Us han convidat a utilitzar :appName!',
+    'user_invite_email_greeting' => 'Us han creat un compte a :appName.',
+    'user_invite_email_text' => 'Cliqueu el botó per a configurar una contrasenya pel compte i poder-hi accedir:',
+    'user_invite_email_action' => 'Configura la contrasenya del compte',
     'user_invite_page_welcome' => 'Us donem la benvinguda a :appName!',
-    'user_invite_page_text' => 'Per a enllestir el vostre compte i obtenir-hi accés, cal que definiu una contrasenya, que es farà servir per a iniciar la sessió a :appName en futures visites.',
+    'user_invite_page_text' => 'Per a poder accedir al compte heu de configurar una contrasenya que s’utilitzarà per a iniciar sessió a :appName d’ara endavant.',
     'user_invite_page_confirm_button' => 'Confirma la contrasenya',
-    'user_invite_success_login' => 'S’ha definit la contrasenya. Ara hauríeu de poder iniciar la sessió fent servir la contrasenya que heu definit per a accedir a :appName!',
+    'user_invite_success_login' => 'S’ha configurat la contrasenya. Ara hauríeu de poder iniciar sessió a :appName amb la contrasenya configurada.',
 
     // Multi-factor Authentication
-    'mfa_setup' => 'Configura l’autenticació de múltiple factor',
-    'mfa_setup_desc' => 'Configureu l’autenticació de múltiple factor com a capa extra de seguretat en el vostre compte d’usuari.',
-    'mfa_setup_configured' => 'Ja està configurada',
+    'mfa_setup' => 'Configuració de l’autenticació multifactorial',
+    'mfa_setup_desc' => 'Configureu l’autenticació multifactorial per a afegir una capa de seguretat extra al vostre compte d’usuari.',
+    'mfa_setup_configured' => 'Ja està configurat',
     'mfa_setup_reconfigure' => 'Torna-la a configurar',
-    'mfa_setup_remove_confirmation' => 'Segur que voleu suprimir aquest mètode d’autenticació de múltiple factor?',
+    'mfa_setup_remove_confirmation' => 'Esteu segur que voleu eliminar aquest mètode d’autenticació multifactorial?',
     'mfa_setup_action' => 'Configura',
-    'mfa_backup_codes_usage_limit_warning' => 'Teniu menys de 5 codis de seguretat restants. Genereu-ne i emmagatzemeu-ne un nou conjunt abans que se us acabin perquè no perdeu l’accés al vostre compte.',
+    'mfa_backup_codes_usage_limit_warning' => 'Us queden menys de 5 codis de suport. Genereu-ne de nous i deseu-los abans de quedar-vos-en sense per a evitar perdre l’accés al  compte.',
     'mfa_option_totp_title' => 'Aplicació mòbil',
-    'mfa_option_totp_desc' => 'Per a fer servir l’autenticació de múltiple factor us caldrà una aplicació mòbil que suporti TOTP, com ara Google Authenticador, Authy o Microsoft Authenticator.',
-    'mfa_option_backup_codes_title' => 'Codis de seguretat',
-    'mfa_option_backup_codes_desc' => 'Deseu de manera segura codis de seguretat d’un sol ús que podeu introduir per a verificar la vostra identitat.',
+    'mfa_option_totp_desc' => 'Per a utilitzar l’autenticació multifactorial heu de tenir una aplicació que sigui compatible amb TOPT (contrasenyes d’un sol ús basades en el temps) com ara Google Authenticator, Authy, o Microsoft Authenticator.',
+    'mfa_option_backup_codes_title' => 'Codis de suport',
+    'mfa_option_backup_codes_desc' => 'Genereu un joc de codis de suport d’un sol ús que haureu d’introduir per a verificar la vostra identitat. Assegureu-vos de desar-los en un lloc segur.',
     'mfa_gen_confirm_and_enable' => 'Confirma i activa',
-    'mfa_gen_backup_codes_title' => 'Configuració de codis de seguretat',
-    'mfa_gen_backup_codes_desc' => 'Deseu la següent llista de codis en un lloc segur. Quan accediu al sistema, podeu fer servir un dels codis com a segon mètode d’autenticació.',
+    'mfa_gen_backup_codes_title' => 'Configuració dels codis de suport',
+    'mfa_gen_backup_codes_desc' => 'Deseu els codis en un lloc segur. Podreu utilitzar un dels codis com a un altre mètode d’autenticació per a iniciar sessió.',
     'mfa_gen_backup_codes_download' => 'Baixa els codis',
-    'mfa_gen_backup_codes_usage_warning' => 'Cada codi es pot fer servir només una vegada',
+    'mfa_gen_backup_codes_usage_warning' => 'Només podeu utilitzar cada codi un sol cop.',
     'mfa_gen_totp_title' => 'Configuració de l’aplicació mòbil',
-    'mfa_gen_totp_desc' => 'Per a fer servir l’autenticació de múltiple factor us caldrà una aplicació mòbil que suporti TOTP, com ara Google Authenticador, Authy o Microsoft Authenticator.',
-    'mfa_gen_totp_scan' => 'Per a començar, escanegeu el codi QR següent fent servir la vostre aplicació d’autenticació preferida.',
-    'mfa_gen_totp_verify_setup' => 'Verifica la configuració',
-    'mfa_gen_totp_verify_setup_desc' => 'Verifiqueu que tot funciona introduint un codi, generat amb l’aplicació d’autenticació, a la capsa de text següent:',
-    'mfa_gen_totp_provide_code_here' => 'Proporcioneu aquí el codi generat per l’aplicació',
+    'mfa_gen_totp_desc' => 'Per a utilitzar l’autenticació multifactorial heu de tenir una aplicació que sigui compatible amb TOPT (contrasenyes d’un sol ús basades en el temps) com ara Google Authenticator, Authy, o Microsoft Authenticator.',
+    'mfa_gen_totp_scan' => 'Escanegeu el codi QR amb l’aplicació d’autenticació que preferiu per a començar.',
+    'mfa_gen_totp_verify_setup' => 'Verificació de la configuració',
+    'mfa_gen_totp_verify_setup_desc' => 'Introduïu un dels codis generats per l’aplicació d’autenticació per a verificar que tot funciona:',
+    'mfa_gen_totp_provide_code_here' => 'Codi',
     'mfa_verify_access' => 'Verifica l’accés',
-    'mfa_verify_access_desc' => 'El vostre compte d’usuari requereix que confirmeu la vostra identitat amb un nivell addicional de verificació abans que pugueu obtenir-hi accés. Verifiqueu-la fent servir un dels vostres mètodes configurats per a continuar.',
+    'mfa_verify_access_desc' => 'Heu de verificar la vostra identitat amb un nivell de verificació addicional per a iniciar sessió. Verifiqueu-la amb un dels mètodes que heu configurat per a continuar.',
     'mfa_verify_no_methods' => 'No hi ha cap mètode configurat',
-    'mfa_verify_no_methods_desc' => 'No s’ha trobat cap mètode d’autenticació de múltiple factor al vostre compte. Cal que configureu almenys un mètode abans d’obtenir-hi accés.',
-    'mfa_verify_use_totp' => 'Verifica fent servir una aplicació mòbil',
-    'mfa_verify_use_backup_codes' => 'Verifica fent servir un codi de seguretat',
-    'mfa_verify_backup_code' => 'Codi de seguretat',
-    'mfa_verify_backup_code_desc' => 'Introduïu un dels vostres codis de seguretat restants a continuació:',
-    'mfa_verify_backup_code_enter_here' => 'Introduïu aquí el codi de seguretat',
-    'mfa_verify_totp_desc' => 'Introduïu el codi generat amb la vostra aplicació mòbil a continuació:',
-    'mfa_setup_login_notification' => 'S’ha configurat el mètode d’autenticació de múltiple factor. Torneu a iniciar la sessió fent servir el mètode que heu configurat.',
+    'mfa_verify_no_methods_desc' => 'No hi ha cap mètode d’autenticació multifactorial configurat al vostre compte. Heu de configurar com a mínim un mètode per a iniciar sessió.',
+    'mfa_verify_use_totp' => 'Verificació amb una aplicació mòbil',
+    'mfa_verify_use_backup_codes' => 'Verificació amb un codi de suport',
+    'mfa_verify_backup_code' => 'Codi de suport',
+    'mfa_verify_backup_code_desc' => 'Introduïu un dels codis de suport que us quedin:',
+    'mfa_verify_backup_code_enter_here' => 'Codi:',
+    'mfa_verify_totp_desc' => 'Introduïu el codi generat per l’aplicació mòbil:',
+    'mfa_setup_login_notification' => 'S’ha configurat el mètode multifactorial. Torneu a iniciar sessió amb el mètode configurat.',
 ];
index f6a825b69fea4b18f2e62a2b8276071622bf0559..34203e600f9eec0f5d2dcd17a269093c05d755c4 100644 (file)
@@ -7,8 +7,8 @@ return [
     // Buttons
     'cancel' => 'Cancel·la',
     'close' => 'Tanca',
-    'confirm' => 'D’acord',
-    'back' => 'Enrere',
+    'confirm' => 'Confirma',
+    'back' => 'Torna',
     'save' => 'Desa',
     'continue' => 'Continua',
     'select' => 'Selecciona',
@@ -18,14 +18,14 @@ return [
     // Form Labels
     'name' => 'Nom',
     'description' => 'Descripció',
-    'role' => 'Rol',
-    'cover_image' => 'Imatge de portada',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'role' => 'Funció',
+    'cover_image' => 'Imatge de coberta',
+    'cover_image_description' => 'La imatge ha de ser d’uns 440×250px, però quan calgui se n’ajustarà la mida o s’escapçarà per a adaptar-la a la interfície d’usuari i les mides amb què es mostrarà canviaran.',
 
     // Actions
     'actions' => 'Accions',
-    'view' => 'Visualitza',
-    'view_all' => 'Visualitza-ho tot',
+    'view' => 'Mostra',
+    'view_all' => 'Mostra-ho tot',
     'new' => 'Nou',
     'create' => 'Crea',
     'update' => 'Actualitza',
@@ -44,10 +44,10 @@ return [
     'configure' => 'Configura',
     'manage' => 'Gestiona',
     'fullscreen' => 'Pantalla completa',
-    'favourite' => 'Afegeix a preferits',
-    'unfavourite' => 'Suprimeix de preferits',
-    'next' => 'Següent',
-    'previous' => 'Anterior',
+    'favourite' => 'Afegeix als favorits',
+    'unfavourite' => 'Suprimeix dels favorits',
+    'next' => 'Endavant',
+    'previous' => 'Endarrere',
     'filter_active' => 'Filtre actiu:',
     'filter_clear' => 'Esborra el filtre',
     'download' => 'Baixa',
@@ -56,26 +56,26 @@ return [
 
     // Sort Options
     'sort_options' => 'Opcions d’ordenació',
-    'sort_direction_toggle' => 'Commuta la direcció de l’ordenació',
-    'sort_ascending' => 'Ordre ascendent',
-    'sort_descending' => 'Ordre descendent',
+    'sort_direction_toggle' => 'Inverteix l’ordre',
+    'sort_ascending' => 'Ordenació ascendent',
+    'sort_descending' => 'Ordenació descendent',
     'sort_name' => 'Nom',
-    'sort_default' => 'Per defecte',
+    'sort_default' => 'Predeterminat',
     'sort_created_at' => 'Data de creació',
     'sort_updated_at' => 'Data d’actualització',
 
     // Misc
     'deleted_user' => 'Usuari suprimit',
-    'no_activity' => 'No hi ha activitat',
-    'no_items' => 'No hi ha cap element',
-    'back_to_top' => 'Torna a dalt',
-    'skip_to_main_content' => 'Vés al contingut',
+    'no_activity' => 'No hi ha cap activitat per mostrar',
+    'no_items' => 'No hi ha cap element disponible',
+    'back_to_top' => 'Amunt',
+    'skip_to_main_content' => 'Ves al contingut principal',
     'toggle_details' => 'Commuta els detalls',
     'toggle_thumbnails' => 'Commuta les miniatures',
     'details' => 'Detalls',
     'grid_view' => 'Visualització en graella',
     'list_view' => 'Visualització en llista',
-    'default' => 'Per defecte',
+    'default' => 'Predeterminat',
     'breadcrumb' => 'Ruta de navegació',
     'status' => 'Estat',
     'status_active' => 'Actiu',
@@ -84,8 +84,8 @@ return [
     'none' => 'Cap',
 
     // Header
-    'homepage' => 'Pàgina principal',
-    'header_menu_expand' => 'Expandeix el menú de la capçalera',
+    'homepage' => 'Pàgina d’inici',
+    'header_menu_expand' => 'Desplega el menú de la capçalera',
     'profile_menu' => 'Menú del perfil',
     'view_profile' => 'Mostra el perfil',
     'edit_profile' => 'Edita el perfil',
@@ -100,7 +100,7 @@ return [
     'tab_content_label' => 'Pestanya: Mostra el contingut principal',
 
     // Email Content
-    'email_action_help' => 'Si teniu problemes per a fer clic al botó «:actionText», copieu i enganxeu l’URL següent al vostre navegador web:',
+    'email_action_help' => 'Si el botó &laquo;:actionText&raquo; no funciona, copieu i enganxeu l’URL següent al vostre navegador:',
     'email_rights' => 'Tots els drets reservats',
 
     // Footer Link Options
index 9c34850213dc899fe311803448efe42913ed93e4..c1494ec53a92c0221698ab1ec5346dbbac14bd75 100644 (file)
@@ -9,37 +9,37 @@ return [
     'image_list' => 'Llista d’imatges',
     'image_details' => 'Detalls de la imatge',
     'image_upload' => 'Puja una imatge',
-    'image_intro' => 'Aquí podeu seleccionar i gestionar imatges que s’hagin pujat anteriorment al sistema.',
-    'image_intro_upload' => 'Pugeu una imatge nova arrossegant un fitxer d’imatge a aquesta finestra o fent servir el botó de «Puja una imatge».',
+    'image_intro' => 'Seleccioneu i gestioneu les imatges que s’han pujat al sistema amb anterioritat.',
+    'image_intro_upload' => 'Pugeu una imatge arrossegant-la i deixant-la anar en aquesta finestra o amb el botó &laquo;Puja una imatge&raquo;.',
     'image_all' => 'Totes',
     'image_all_title' => 'Mostra totes les imatges',
-    'image_book_title' => 'Mostra les imatges pujades a aquest llibre',
-    'image_page_title' => 'Mostra les imatges pujades a aquesta pàgina',
-    'image_search_hint' => 'Cerca per nom d’imatge',
-    'image_uploaded' => 'Pujada :uploadedDate',
+    'image_book_title' => 'Mostra les imatges pujades en aquest llibre',
+    'image_page_title' => 'Mostra les imatges pujades en aquesta pàgina',
+    'image_search_hint' => 'Cerca pel nom de la imatge',
+    'image_uploaded' => 'Pujada el :uploadedDate',
     'image_uploaded_by' => 'Pujada per :userName',
     'image_uploaded_to' => 'Pujada a :pageLink',
-    'image_updated' => 'Actualitzada :updateDate',
+    'image_updated' => 'Actualitzada el :updateDate',
     'image_load_more' => 'Carrega’n més',
     'image_image_name' => 'Nom de la imatge',
-    'image_delete_used' => 'Aquesta imatge s’utilitza a les pàgines següents.',
-    'image_delete_confirm_text' => 'Segur que voleu suprimir aquesta imatge?',
-    'image_select_image' => 'Selecciona una imatge',
-    'image_dropzone' => 'Arrossegueu imatges o feu clic aquí per a pujar-les',
-    'image_dropzone_drop' => 'Arrossegueu imatges aquí per a pujar-les',
+    'image_delete_used' => 'Aquesta imatge s’utilitza en les pàgines següents.',
+    'image_delete_confirm_text' => 'Esteu segur que voleu suprimir aquesta imatge?',
+    'image_select_image' => 'Selecció d’imatges',
+    'image_dropzone' => 'Deixeu-hi anar les imatges o cliqueu aquí per a pujar-ne',
+    'image_dropzone_drop' => 'Deixeu-hi anar les imatges per a pujar-les',
     'images_deleted' => 'Imatges suprimides',
     'image_preview' => 'Previsualització de la imatge',
-    'image_upload_success' => 'Imatge pujada correctament',
-    'image_update_success' => 'Detalls de la imatge actualitzats correctament',
-    'image_delete_success' => 'Imatge suprimida correctament',
+    'image_upload_success' => 'S’ha pujat la imatge',
+    'image_update_success' => 'S’han actualitzat els detalls de la imatge',
+    'image_delete_success' => 'S’ha suprimit la imatge',
     'image_replace' => 'Substitueix la imatge',
-    'image_replace_success' => 'Fitxer de la imatge actualitzat correctament',
+    'image_replace_success' => 'S’ha substituït la imatge',
     'image_rebuild_thumbs' => 'Regenera les variacions de mida',
-    'image_rebuild_thumbs_success' => 'Variacions de mida de la imatge regenerades correctament!',
+    'image_rebuild_thumbs_success' => 'S’han regenerat les variacions de mida',
 
     // Code Editor
     'code_editor' => 'Edita el codi',
-    'code_language' => 'Llenguatge del codi',
+    'code_language' => 'Llenguatge de codificació',
     'code_content' => 'Contingut del codi',
     'code_session_history' => 'Historial de la sessió',
     'code_save' => 'Desa el codi',
index abfa771a80fbaa89289cf6a93b1da6e794c3edfe..7a09986a2f2aa3921a97d307582a0639f4cebf00 100644 (file)
@@ -18,27 +18,27 @@ return [
     'left' => 'Esquerra',
     'center' => 'Centre',
     'right' => 'Dreta',
-    'top' => 'Superior',
-    'middle' => 'Centre',
-    'bottom' => 'Inferior',
+    'top' => 'Dalt',
+    'middle' => 'Mig',
+    'bottom' => 'Baix',
     'width' => 'Amplada',
-    'height' => 'Alçada',
+    'height' => 'Altura',
     'More' => 'Més',
-    'select' => 'Selecciona...',
+    'select' => 'Selecciona',
 
     // Toolbar
     'formats' => 'Formats',
-    'header_large' => 'Capçalera grossa',
-    'header_medium' => 'Capçalera mitjana',
-    'header_small' => 'Capçalera petita',
-    'header_tiny' => 'Capçalera minúscula',
+    'header_large' => 'Títol gros',
+    'header_medium' => 'Títol mitjà',
+    'header_small' => 'Títol petit',
+    'header_tiny' => 'Títol minúscul',
     'paragraph' => 'Paràgraf',
-    'blockquote' => 'Citació',
-    'inline_code' => 'Codi en línia',
-    'callouts' => 'Llegendes',
+    'blockquote' => 'Bloc de cita',
+    'inline_code' => 'Línia de codi',
+    'callouts' => 'Crides',
     'callout_information' => 'Informació',
     'callout_success' => 'Èxit',
-    'callout_warning' => 'Advertència',
+    'callout_warning' => 'Advertiment',
     'callout_danger' => 'Perill',
     'bold' => 'Negreta',
     'italic' => 'Cursiva',
@@ -48,30 +48,30 @@ return [
     'subscript' => 'Subíndex',
     'text_color' => 'Color del text',
     'custom_color' => 'Color personalitzat',
-    'remove_color' => 'Suprimeix el color',
+    'remove_color' => 'Elimina el color',
     'background_color' => 'Color de fons',
     'align_left' => 'Alinea a l’esquerra',
     'align_center' => 'Alinea al centre',
     'align_right' => 'Alinea a la dreta',
     'align_justify' => 'Justifica',
-    'list_bullet' => 'Llista amb pics',
+    'list_bullet' => 'Llista de pics',
     'list_numbered' => 'Llista numerada',
-    'list_task' => 'Llista de tasques',
-    'indent_increase' => 'Augmenta el sagnat',
-    'indent_decrease' => 'Redueix el sagnat',
+    'list_task' => 'Llista de caselles',
+    'indent_increase' => 'Augmenta la sagnia',
+    'indent_decrease' => 'Redueix la sagnia',
     'table' => 'Taula',
     'insert_image' => 'Insereix una imatge',
-    'insert_image_title' => 'Insereix/edita una imatge',
-    'insert_link' => 'Insereix/edita un enllaç',
-    'insert_link_title' => 'Insereix/edita un enllaç',
+    'insert_image_title' => 'Insereix o edita una imatge',
+    'insert_link' => 'Insereix un enllaç',
+    'insert_link_title' => 'Insereix o edita un enllaç',
     'insert_horizontal_line' => 'Insereix una línia horitzontal',
     'insert_code_block' => 'Insereix un bloc de codi',
-    'edit_code_block' => 'Edita un bloc de codi',
-    'insert_drawing' => 'Insereix/edita un dibuix',
-    'drawing_manager' => 'Gestor de dibuixos',
-    'insert_media' => 'Insereix/edita un mitjà',
-    'insert_media_title' => 'Insereix/edita un mitjà',
-    'clear_formatting' => 'Neteja el format',
+    'edit_code_block' => 'Edita el bloc de codi',
+    'insert_drawing' => 'Insereix o edita un diagrama',
+    'drawing_manager' => 'Gestor de diagrames',
+    'insert_media' => 'Insereix o edita un contingut multimèdia',
+    'insert_media_title' => 'Insereix o edita un contingut multimèdia',
+    'clear_formatting' => 'Lleva el format',
     'source_code' => 'Codi font',
     'source_code_title' => 'Codi font',
     'fullscreen' => 'Pantalla completa',
@@ -81,9 +81,9 @@ return [
     'table_properties' => 'Propietats de la taula',
     'table_properties_title' => 'Propietats de la taula',
     'delete_table' => 'Suprimeix la taula',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => 'Lleva el format de la taula',
+    'resize_to_contents' => 'Ajusta al contingut',
+    'row_header' => 'Capçalera de la fila',
     'insert_row_before' => 'Insereix una fila abans',
     'insert_row_after' => 'Insereix una fila després',
     'delete_row' => 'Suprimeix la fila',
@@ -97,10 +97,10 @@ return [
     'cell_properties_title' => 'Propietats de la cel·la',
     'cell_type' => 'Tipus de cel·la',
     'cell_type_cell' => 'Cel·la',
-    'cell_scope' => 'Àmbit',
+    'cell_scope' => 'Àmbit de la cel·la',
     'cell_type_header' => 'Cel·la de capçalera',
-    'merge_cells' => 'Fusiona les cel·les',
-    'split_cell' => 'Divideix les cel·les',
+    'merge_cells' => 'Combina les cel·les',
+    'split_cell' => 'Divideix la cel·la',
     'table_row_group' => 'Grup de files',
     'table_column_group' => 'Grup de columnes',
     'horizontal_align' => 'Alineació horitzontal',
@@ -117,61 +117,61 @@ return [
     'row_type' => 'Tipus de fila',
     'row_type_header' => 'Capçalera',
     'row_type_body' => 'Cos',
-    'row_type_footer' => 'Peu de pàgina',
+    'row_type_footer' => 'Peu',
     'alignment' => 'Alineació',
     'cut_column' => 'Retalla la columna',
     'copy_column' => 'Copia la columna',
     'paste_column_before' => 'Enganxa la columna abans',
     'paste_column_after' => 'Enganxa la columna després',
-    'cell_padding' => 'Separació de la cel·la',
-    'cell_spacing' => 'Espaiat de la cel·la',
-    'caption' => 'Títol',
-    'show_caption' => 'Mostra el títol',
+    'cell_padding' => 'Separació de cel·la',
+    'cell_spacing' => 'Espaiat de cel·la',
+    'caption' => 'Llegenda',
+    'show_caption' => 'Mostra la llegenda',
     'constrain' => 'Mantén les proporcions',
     'cell_border_solid' => 'Sòlida',
-    'cell_border_dotted' => 'Puntejada',
-    'cell_border_dashed' => 'Discontínua',
+    'cell_border_dotted' => 'De punts',
+    'cell_border_dashed' => 'De guions',
     'cell_border_double' => 'Doble',
-    'cell_border_groove' => 'Bisellada',
-    'cell_border_ridge' => 'Emmarcada',
-    'cell_border_inset' => 'Enfonsada',
-    'cell_border_outset' => 'Ressaltada',
-    'cell_border_none' => 'Cap',
-    'cell_border_hidden' => 'Oculta',
+    'cell_border_groove' => 'Vora enfonsada',
+    'cell_border_ridge' => 'Vora ressaltada',
+    'cell_border_inset' => 'Fons enfonsat',
+    'cell_border_outset' => 'Fons ressaltat',
+    'cell_border_none' => 'Sense vora',
+    'cell_border_hidden' => 'Amagada',
 
     // Images, links, details/summary & embed
-    'source' => 'Origen',
+    'source' => 'Font',
     'alt_desc' => 'Descripció alternativa',
-    'embed' => 'Incrustació',
-    'paste_embed' => 'Enganxeu el codi d’incrustació a continuació:',
+    'embed' => 'Incrusta',
+    'paste_embed' => 'Enganxa el codi per a incrustar a sota:',
     'url' => 'URL',
-    'text_to_display' => 'Text a mostrar',
+    'text_to_display' => 'Text per a mostrar',
     'title' => 'Títol',
     'open_link' => 'Obre l’enllaç',
-    'open_link_in' => 'Obre l’enllaç a...',
-    'open_link_current' => 'Finestra actual',
-    'open_link_new' => 'Finestra nova',
-    'remove_link' => 'Suprimeix l’enllaç',
-    'insert_collapsible' => 'Insereix un bloc contraïble',
-    'collapsible_unwrap' => 'Deixa de contraure',
+    'open_link_in' => 'Obre l’enllaç',
+    'open_link_current' => 'A la finestra actual',
+    'open_link_new' => 'En una finestra nova',
+    'remove_link' => 'Lleva l’enllaç',
+    'insert_collapsible' => 'Insereix un bloc desplegable',
+    'collapsible_unwrap' => 'Lleva el bloc desplegable',
     'edit_label' => 'Edita l’etiqueta',
-    'toggle_open_closed' => 'Obre/tanca',
-    'collapsible_edit' => 'Edita el bloc contraïble',
+    'toggle_open_closed' => 'Obre o tanca',
+    'collapsible_edit' => 'Edita el bloc desplegable',
     'toggle_label' => 'Commuta l’etiqueta',
 
     // About view
-    'about' => 'Quant a l’editor',
-    'about_title' => 'Quant a l’editor WYSIWYG',
-    'editor_license' => 'Llicència i copyright de l’editor',
-    'editor_tiny_license' => 'Aquest editor s’ha construït amb :tinyLink, que es proporciona sota la llicència MIT.',
-    'editor_tiny_license_link' => 'Podeu trobar els detalls de la llicència i el copyright del TinyMCE aquí.',
+    'about' => 'Quant a l’Editor',
+    'about_title' => 'Quant a l’Editor WYSIWYG',
+    'editor_license' => 'Llicència i copyright de l’Editor',
+    'editor_tiny_license' => 'Aquest editor s’ha creat amb :tinyLink que es proporciona amb la llicència MIT.',
+    'editor_tiny_license_link' => 'Detalls de la llicència i el copyright de TinyMCE.',
     'save_continue' => 'Desa la pàgina i continua',
-    'callouts_cycle' => '(Continueu prement per a commutar els diferents tipus)',
-    'link_selector' => 'Enllaç al contingut',
-    'shortcuts' => 'Dreceres',
+    'callouts_cycle' => '(Continueu prement per a canviar entre tipus)',
+    'link_selector' => 'Enllaç a contingut',
+    'shortcuts' => 'Dreceres de teclat',
     'shortcut' => 'Drecera',
-    'shortcuts_intro' => 'Hi ha les següents dreceres disponibles a l’editor:',
-    'windows_linux' => '(Windows/Linux)',
+    'shortcuts_intro' => 'A l’editor, hi ha disponibles les dreceres de teclat següents:',
+    'windows_linux' => '(Windows o Linux)',
     'mac' => '(Mac)',
     'description' => 'Descripció',
 ];
index ba8f574edd129b06ca55ae7f380c85a331c29301..b6e104fa4f799195c6cb42e66b7885039ff52b11 100644 (file)
@@ -6,34 +6,34 @@
 return [
 
     // Shared
-    'recently_created' => 'Creat fa poc',
-    'recently_created_pages' => 'Pàgines creades fa poc',
-    'recently_updated_pages' => 'Pàgines actualitzades fa poc',
-    'recently_created_chapters' => 'Capítols creats fa poc',
-    'recently_created_books' => 'Llibres creats fa poc',
-    'recently_created_shelves' => 'Prestatges creats fa poc',
-    'recently_update' => 'Actualitzat fa poc',
-    'recently_viewed' => 'Vist fa poc',
+    'recently_created' => 'Elements creats recentment',
+    'recently_created_pages' => 'Pàgines creades recentment',
+    'recently_updated_pages' => 'Pàgines actualitzades recentment',
+    'recently_created_chapters' => 'Capítols creats recentment',
+    'recently_created_books' => 'Llibres creats recentment',
+    'recently_created_shelves' => 'Prestatges creats recentment',
+    'recently_update' => 'Elements actualitzats recentment',
+    'recently_viewed' => 'Elements vistos recentment',
     'recent_activity' => 'Activitat recent',
-    'create_now' => 'Crea’n ara',
+    'create_now' => 'Crea un element',
     'revisions' => 'Revisions',
     'meta_revision' => 'Revisió núm. :revisionCount',
-    'meta_created' => 'Creat :timeLength',
-    'meta_created_name' => 'Creat :timeLength per :user',
-    'meta_updated' => 'Actualitzat :timeLength',
-    'meta_updated_name' => 'Actualitzat :timeLength per :user',
+    'meta_created' => 'S’ha creat :timeLength',
+    'meta_created_name' => ':user l’ha creat :timeLength',
+    'meta_updated' => 'S’ha actualitzat :timeLength',
+    'meta_updated_name' => ':user l’ha actualitzat :timeLength',
     'meta_owned_name' => 'Propietat de :user',
-    'meta_reference_count' => 'Hi fa referència :count element|Hi fan referència :count elements',
-    'entity_select' => 'Selecciona una entitat',
+    'meta_reference_count' => 'S’hi fa referència en :count element|S’hi fa referència en :count elements',
+    'entity_select' => 'Selecció de l’entitat',
     'entity_select_lack_permission' => 'No teniu els permisos necessaris per a seleccionar aquest element',
     'images' => 'Imatges',
-    'my_recent_drafts' => 'Els vostres esborranys recents',
-    'my_recently_viewed' => 'Les vostres visualitzacions recents',
-    'my_most_viewed_favourites' => 'Els vostres preferits més vistos',
-    'my_favourites' => 'Els vostres preferits',
+    'my_recent_drafts' => 'Els meus esborranys recents',
+    'my_recently_viewed' => 'Els meus vistos recentment',
+    'my_most_viewed_favourites' => 'Els meus favorits més vistos',
+    'my_favourites' => 'Els meus favorits',
     'no_pages_viewed' => 'No heu vist cap pàgina',
-    'no_pages_recently_created' => 'No s’ha creat cap pàgina fa poc',
-    'no_pages_recently_updated' => 'No s’ha actualitzat cap pàgina fa poc',
+    'no_pages_recently_created' => 'No s’ha creat cap pàgina recentment',
+    'no_pages_recently_updated' => 'No s’ha actualitzat cap pàgina recentment',
     'export' => 'Exporta',
     'export_html' => 'Fitxer web independent',
     'export_pdf' => 'Fitxer PDF',
@@ -45,40 +45,40 @@ return [
 
     // Permissions and restrictions
     'permissions' => 'Permisos',
-    'permissions_desc' => 'Definiu aquí permisos que tindran preferència sobre les permisos per defecte proporcionats pels rols d’usuari.',
-    'permissions_book_cascade' => 'Els permisos definits en llibres s’hereten automàticament en pàgines i capítols inferiors, llevat que tinguin permisos propis definits.',
-    'permissions_chapter_cascade' => 'Els permisos definits en capítols s’hereten automàticament en pàgines inferiors, llevat que tinguin permisos propis definits.',
+    'permissions_desc' => 'Configureu aquí els permisos per a sobreescriure els permisos per defecte proporcionats pels rols d’usuari.',
+    'permissions_book_cascade' => 'Els permisos dels llibres s’aplicaran també als capítols i les pàgines que continguin llevat que tinguin els seus propis permisos.',
+    'permissions_chapter_cascade' => 'Els permisos dels capítols s’aplicaran també a les pàgines que continguin llevat que tinguin els seus propis permisos.',
     'permissions_save' => 'Desa els permisos',
     'permissions_owner' => 'Propietari',
-    'permissions_role_everyone_else' => 'Tota la resta',
-    'permissions_role_everyone_else_desc' => 'Definiu permisos per a tots els rols no definits específicament.',
-    'permissions_role_override' => 'Força els permisos per al rol',
-    'permissions_inherit_defaults' => 'Hereta els permisos per defecte',
+    'permissions_role_everyone_else' => 'La resta dels usuaris',
+    'permissions_role_everyone_else_desc' => 'Configureu permisos per a tots els rols que no s’hagin sobreescrit específicament.',
+    'permissions_role_override' => 'Sobreescriu els permisos per al rol',
+    'permissions_inherit_defaults' => 'Hereta la configuració per defecte',
 
     // Search
     'search_results' => 'Resultats de la cerca',
-    'search_total_results_found' => 'S’ha trobat :count resultat|S’han trobat :count resultats en total',
+    'search_total_results_found' => 'S’ha trobat :count coincidència|S’han trobat :count coincidències',
     'search_clear' => 'Esborra la cerca',
-    'search_no_pages' => 'La cerca no coincideix amb cap pàgina',
+    'search_no_pages' => 'No s’ha trobat cap pàgina que coincideixi amb la cerca',
     'search_for_term' => 'Cerca :term',
     'search_more' => 'Més resultats',
     'search_advanced' => 'Cerca avançada',
-    'search_terms' => 'Termes de la cerca',
+    'search_terms' => 'Termes de cerca',
     'search_content_type' => 'Tipus de contingut',
     'search_exact_matches' => 'Coincidències exactes',
     'search_tags' => 'Cerca d’etiquetes',
     'search_options' => 'Opcions',
-    'search_viewed_by_me' => 'Visualitzat per mi',
-    'search_not_viewed_by_me' => 'No visualitzat per mi',
-    'search_permissions_set' => 'Amb permisos definits',
-    'search_created_by_me' => 'Creat per mi',
-    'search_updated_by_me' => 'Actualitzat per mi',
-    'search_owned_by_me' => 'En sóc propietari',
-    'search_date_options' => 'Opcions de dates',
-    'search_updated_before' => 'Actualitzat abans de',
-    'search_updated_after' => 'Actualitzat després de',
-    'search_created_before' => 'Creat abans de',
-    'search_created_after' => 'Creat després de',
+    'search_viewed_by_me' => 'Vistos per mi',
+    'search_not_viewed_by_me' => 'No vistos per mi',
+    'search_permissions_set' => 'Amb permisos',
+    'search_created_by_me' => 'Creats per mi',
+    'search_updated_by_me' => 'Actualitzats per mi',
+    'search_owned_by_me' => 'En soc propietari',
+    'search_date_options' => 'Opcions de data',
+    'search_updated_before' => 'Actualitzats abans de',
+    'search_updated_after' => 'Actualitzats després de',
+    'search_created_before' => 'Creats abans de',
+    'search_created_after' => 'Creats després de',
     'search_set_date' => 'Defineix una data',
     'search_update' => 'Actualitza la cerca',
 
@@ -86,87 +86,87 @@ return [
     'shelf' => 'Prestatge',
     'shelves' => 'Prestatges',
     'x_shelves' => ':count prestatge|:count prestatges',
-    'shelves_empty' => 'No hi ha cap prestatge creat',
-    'shelves_create' => 'Crea un prestatge nou',
+    'shelves_empty' => 'No hi ha cap prestatge',
+    'shelves_create' => 'Crea un prestatge',
     'shelves_popular' => 'Prestatges populars',
     'shelves_new' => 'Prestatges nous',
     'shelves_new_action' => 'Prestatge nou',
     'shelves_popular_empty' => 'Aquí apareixeran els prestatges més populars.',
-    'shelves_new_empty' => 'Aquí apareixeran els prestatges creats fa poc.',
+    'shelves_new_empty' => 'Aquí apareixeran els prestatges més recents.',
     'shelves_save' => 'Desa el prestatge',
     'shelves_books' => 'Llibres en aquest prestatge',
-    'shelves_add_books' => 'Afegeix llibres a aquest prestatge',
-    'shelves_drag_books' => 'Arrossegueu llibres a sota per a afegir-los a aquest prestatge',
-    'shelves_empty_contents' => 'Aquest prestatge no té cap llibre assignat',
-    'shelves_edit_and_assign' => 'Editeu el prestatge per a assignar-hi llibres',
-    'shelves_edit_named' => 'Edita el prestatge :name',
+    'shelves_add_books' => 'Afegiu llibres en aquest prestatge',
+    'shelves_drag_books' => 'Arrossegueu i deixeu anar llibres a sota per a afegir-los en aquest prestatge',
+    'shelves_empty_contents' => 'Aquest prestatge no té cap llibre',
+    'shelves_edit_and_assign' => 'Editeu el prestatge per a afegir-hi llibres',
+    'shelves_edit_named' => 'Edita el prestatge &laquo;:name&raquo;',
     'shelves_edit' => 'Edita el prestatge',
     'shelves_delete' => 'Suprimeix el prestatge',
-    'shelves_delete_named' => 'Suprimeix el prestatge :name',
-    'shelves_delete_explain' => "Se suprimirà el prestatge amb el nom «:name». Els llibres que contingui no se suprimiran.",
-    'shelves_delete_confirmation' => 'Segur que voleu suprimir aquest prestatge?',
+    'shelves_delete_named' => 'Suprimeix del prestatge &laquo;:name&raquo;',
+    'shelves_delete_explain' => "Se suprimirà el prestatge &laquo;:name&raquo;. No se suprimiran els llibres que contingui.",
+    'shelves_delete_confirmation' => 'Esteu segur que voleu suprimir aquest prestatge?',
     'shelves_permissions' => 'Permisos del prestatge',
     'shelves_permissions_updated' => 'S’han actualitzat els permisos del prestatge',
-    'shelves_permissions_active' => 'Permisos del prestatge actius',
-    'shelves_permissions_cascade_warning' => 'Els permisos dels prestatges no s’hereten automàticament en els llibres que contenen. És així perquè un llibre pot estar en múltiples prestatges. Es poden copiar, però, els permisos als llibres continguts fent servir l’opció a continuació.',
-    'shelves_permissions_create' => 'Els permisos de crear prestatges només es fan servir per a copiar permisos a llibres continguts fent servir l’acció següent. No controlen la capacitat de crear llibres.',
+    'shelves_permissions_active' => 'El prestatge té permisos',
+    'shelves_permissions_cascade_warning' => 'Els permisos dels prestatges no s’aplicaran als llibres que contingui. Això és perquè els llibres poden estar en més d’un prestatge a la vegada. Això no obstant, els permisos es poden copiar als llibres que contingui amb l’opció de sota.',
+    'shelves_permissions_create' => 'Els permisos per a crear prestatges només s’utilitzen per a copiar permisos als llibres que contenen amb l’acció de sota. No controlen els permisos per a crear llibres.',
     'shelves_copy_permissions_to_books' => 'Copia els permisos als llibres',
     'shelves_copy_permissions' => 'Copia els permisos',
-    'shelves_copy_permissions_explain' => 'S’aplicarà la configuració de permisos actual a tots els llibres continguts. Abans d’activar-la, assegureu-vos que hàgiu desat qualsevol canvi en els permisos d’aquest prestatge.',
+    'shelves_copy_permissions_explain' => 'S’aplicaran els permisos del prestatge a tots els llibres que contingui. Abans de continuar assegureu-vos que heu desat els canvis que hàgiu fet als permisos del prestatge.',
     'shelves_copy_permission_success' => 'S’han copiat els permisos del prestatge a :count llibres',
 
     // Books
     'book' => 'Llibre',
     'books' => 'Llibres',
     'x_books' => ':count llibre|:count llibres',
-    'books_empty' => 'No hi ha cap llibre creat',
+    'books_empty' => 'No hi ha cap llibre',
     'books_popular' => 'Llibres populars',
     'books_recent' => 'Llibres recents',
     'books_new' => 'Llibres nous',
     'books_new_action' => 'Llibre nou',
     'books_popular_empty' => 'Aquí apareixeran els llibres més populars.',
-    'books_new_empty' => 'Aquí apareixeran els llibres creats fa poc.',
-    'books_create' => 'Crea un llibre nou',
+    'books_new_empty' => 'Aquí apareixeran els llibres més recents.',
+    'books_create' => 'Crea un llibre',
     'books_delete' => 'Suprimeix el llibre',
-    'books_delete_named' => 'Suprimeix el llibre :bookName',
-    'books_delete_explain' => 'Se suprimirà el llibre amb el nom «:bookName». Se’n suprimiran totes les pàgines i tots els capítols.',
-    'books_delete_confirmation' => 'Segur que voleu suprimir aquest llibre?',
+    'books_delete_named' => 'Suprimeix el llibre &laquo;:bookName&raquo;',
+    'books_delete_explain' => 'Se suprimirà el llibre &laquo;:bookName&raquo;. Se suprimiran totes les pàgines i capítols.',
+    'books_delete_confirmation' => 'Esteu segur que voleu suprimir aquest llibre?',
     'books_edit' => 'Edita el llibre',
-    'books_edit_named' => 'Edita el llibre :bookName',
-    'books_form_book_name' => 'Nom del llibre',
+    'books_edit_named' => 'Edita el llibre &laquo;:bookName&raquo;',
+    'books_form_book_name' => 'Títol del llibre',
     'books_save' => 'Desa el llibre',
     'books_permissions' => 'Permisos del llibre',
-    'books_permissions_updated' => 'S’han actualitzat els permisos del llibre',
-    'books_empty_contents' => 'No hi ha cap pàgina ni cap capítol creat en aquest llibre.',
-    'books_empty_create_page' => 'Crea una pàgina nova',
-    'books_empty_sort_current_book' => 'Ordena el llibre actual',
+    'books_permissions_updated' => 'S’han actualitzat els permisos',
+    'books_empty_contents' => 'No hi ha cap capítol ni cap pàgina en aquest llibre.',
+    'books_empty_create_page' => 'Crea una pàgina',
+    'books_empty_sort_current_book' => 'Ordena el llibre',
     'books_empty_add_chapter' => 'Afegeix un capítol',
-    'books_permissions_active' => 'S’han activat els permisos del llibre',
+    'books_permissions_active' => 'El llibre té permisos',
     'books_search_this' => 'Cerca en aquest llibre',
-    'books_navigation' => 'Navegació pel llibre',
-    'books_sort' => 'Ordena el contingut del llibre',
-    'books_sort_desc' => 'Moveu capítols i pàgines dins d’un llibre per a reorganitzar-ne el contingut. Podeu afegir altres llibres, la qual cosa permet moure fàcilment capítols i pàgines entre llibres.',
-    'books_sort_named' => 'Ordena el llibre :bookName',
-    'books_sort_name' => 'Ordena per nom',
-    'books_sort_created' => 'Ordena per data de creació',
-    'books_sort_updated' => 'Ordena per data d’actualització',
-    'books_sort_chapters_first' => 'Els capítols al principi',
-    'books_sort_chapters_last' => 'Els capítols al final',
+    'books_navigation' => 'Navegació del llibre',
+    'books_sort' => 'Ordena el contingut d’un llibre',
+    'books_sort_desc' => 'Moveu els capítols i les pàgines d’un llibre per a reorganitzar-ne el contingut. Podeu afegir altres llibres perquè sigui més fàcil moure capítols i pàgines d’un llibre a un altre.',
+    'books_sort_named' => 'Ordena el llibre &laquo;:bookName&raquo;',
+    'books_sort_name' => 'Ordena pel nom',
+    'books_sort_created' => 'Ordena per la data de creació',
+    'books_sort_updated' => 'Ordena per la data d’actualització',
+    'books_sort_chapters_first' => 'Capítols al principi',
+    'books_sort_chapters_last' => 'Capítols al final',
     'books_sort_show_other' => 'Mostra altres llibres',
     'books_sort_save' => 'Desa l’ordre nou',
-    'books_sort_show_other_desc' => 'Afegiu aquí altres llibres per a incloure’ls a l’operació d’ordenació i permetre la reorganització entre llibres de manera fàcil.',
-    'books_sort_move_up' => 'Mou amunt',
-    'books_sort_move_down' => 'Mou avall',
-    'books_sort_move_prev_book' => 'Mou al llibre anterior',
-    'books_sort_move_next_book' => 'Mou al llibre següent',
-    'books_sort_move_prev_chapter' => 'Mou al capítol anterior',
-    'books_sort_move_next_chapter' => 'Mou al capítol següent',
-    'books_sort_move_book_start' => 'Mou a l’inici del llibre',
-    'books_sort_move_book_end' => 'Mou al final del llibre',
-    'books_sort_move_before_chapter' => 'Mou al capítol anterior',
-    'books_sort_move_after_chapter' => 'Mou al capítol següent',
+    'books_sort_show_other_desc' => 'Afegiu llibres per a incloure’ls en l’ordenació i permetre una reorganització entre llibres més senzilla.',
+    'books_sort_move_up' => 'Mou-ho cap amunt',
+    'books_sort_move_down' => 'Mou-ho cap avall',
+    'books_sort_move_prev_book' => 'Mou-ho al llibre anterior',
+    'books_sort_move_next_book' => 'Mou-ho al llibre següent',
+    'books_sort_move_prev_chapter' => 'Mou-ho al capítol anterior',
+    'books_sort_move_next_chapter' => 'Mou-ho al capítol següent',
+    'books_sort_move_book_start' => 'Mou-ho al principi del llibre',
+    'books_sort_move_book_end' => 'Mou-ho al final del llibre',
+    'books_sort_move_before_chapter' => 'Mou-ho a abans del capítol',
+    'books_sort_move_after_chapter' => 'Mou-ho a després del capítol',
     'books_copy' => 'Copia el llibre',
-    'books_copy_success' => 'Llibre copiat correctament',
+    'books_copy_success' => 'S’ha copiat el llibre',
 
     // Chapters
     'chapter' => 'Capítol',
@@ -174,21 +174,21 @@ return [
     'x_chapters' => ':count capítol|:count capítols',
     'chapters_popular' => 'Capítols populars',
     'chapters_new' => 'Capítol nou',
-    'chapters_create' => 'Crea un capítol nou',
-    'chapters_delete' => 'Suprimeix el capítol',
-    'chapters_delete_named' => 'Suprimeix el capítol :chapterName',
-    'chapters_delete_explain' => 'Se suprimirà el capítol amb el nom «:chapterName». Totes les pàgines que contingui també se suprimiran.',
-    'chapters_delete_confirm' => 'Segur que voleu suprimir aquest capítol?',
+    'chapters_create' => 'Crea un capítol',
+    'chapters_delete' => 'Suprimeix un capítol',
+    'chapters_delete_named' => 'Suprimeix el capítol &laquo;:chapterName&raquo;',
+    'chapters_delete_explain' => 'Se suprimirà el capítol &laquo;:chapterName&raquo;. Se suprimiran totes les pàgines que hi ha al capítol.',
+    'chapters_delete_confirm' => 'Esteu segur que voleu suprimir aquest capítol?',
     'chapters_edit' => 'Edita el capítol',
-    'chapters_edit_named' => 'Edita el capítol :chapterName',
+    'chapters_edit_named' => 'Edita el capítol &laquo;:chapterName&raquo;',
     'chapters_save' => 'Desa el capítol',
     'chapters_move' => 'Mou el capítol',
-    'chapters_move_named' => 'Mou el capítol :chapterName',
+    'chapters_move_named' => 'Mou el capítol &laquo;:chapterName&raquo;',
     'chapters_copy' => 'Copia el capítol',
-    'chapters_copy_success' => 'Capítol copiat correctament',
+    'chapters_copy_success' => 'S’ha copiat el capítol',
     'chapters_permissions' => 'Permisos del capítol',
-    'chapters_empty' => 'De moment, aquest capítol no conté cap pàgina.',
-    'chapters_permissions_active' => 'S’han activat els permisos del capítol',
+    'chapters_empty' => 'No hi ha cap pàgina en aquest capítol.',
+    'chapters_permissions_active' => 'El capítol té permisos',
     'chapters_permissions_success' => 'S’han actualitzat els permisos del capítol',
     'chapters_search_this' => 'Cerca en aquest capítol',
     'chapter_sort_book' => 'Ordena el llibre',
@@ -198,105 +198,105 @@ return [
     'pages' => 'Pàgines',
     'x_pages' => ':count pàgina|:count pàgines',
     'pages_popular' => 'Pàgines populars',
-    'pages_new' => 'Pàgina nova',
-    'pages_attachments' => 'Adjuncions',
-    'pages_navigation' => 'Navegació per la pàgina',
+    'pages_new' => 'Crea una pàgina',
+    'pages_attachments' => 'Fitxers adjunts',
+    'pages_navigation' => 'Navegació de la pàgina',
     'pages_delete' => 'Suprimeix la pàgina',
-    'pages_delete_named' => 'Suprimeix la pàgina :pageName',
-    'pages_delete_draft_named' => 'Suprimeix l’esborrany de pàgina :pageName',
+    'pages_delete_named' => 'Suprimeix la pàgina &laquo;:pageName&raquo;',
+    'pages_delete_draft_named' => 'Suprimeix l’esborrany de pàgina &laquo;:pageName&raquo;',
     'pages_delete_draft' => 'Suprimeix l’esborrany de pàgina',
     'pages_delete_success' => 'S’ha suprimit la pàgina',
     'pages_delete_draft_success' => 'S’ha suprimit l’esborrany de pàgina',
     'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.',
-    'pages_delete_confirm' => 'Segur que voleu suprimir aquesta pàgina?',
-    'pages_delete_draft_confirm' => 'Segur que voleu suprimir aquest esborrany de pàgina?',
-    'pages_editing_named' => 'Esteu editant :pageName',
+    'pages_delete_confirm' => 'Esteu segur que voleu suprimir aquesta pàgina?',
+    'pages_delete_draft_confirm' => 'Esteu segur que voleu suprimir aquest esborrany de pàgina?',
+    'pages_editing_named' => 'Edició de la pàgina &laquo;:pageName&raquo;',
     'pages_edit_draft_options' => 'Opcions d’esborrany',
     'pages_edit_save_draft' => 'Desa l’esborrany',
     'pages_edit_draft' => 'Edita l’esborrany de pàgina',
-    'pages_editing_draft' => 'Esteu editant l’esborrany',
-    'pages_editing_page' => 'Esteu editant la pàgina',
-    'pages_edit_draft_save_at' => 'Esborrany desat ',
+    'pages_editing_draft' => 'Estàs editant l’esborrany',
+    'pages_editing_page' => 'Edita la pàgina',
+    'pages_edit_draft_save_at' => 'S’ha desat l’esborrany a les ',
     'pages_edit_delete_draft' => 'Suprimeix l’esborrany',
-    'pages_edit_delete_draft_confirm' => 'Segur que voleu suprimir els canvis a l’esborrany de pàgina? Es perdran tots els vostres canvis d’ençà de la darrera vegada que heu desat i s’actualitzarà l’editor amb l’estat de la darrera pàgina desada sense ser un esborrany.',
+    'pages_edit_delete_draft_confirm' => 'Esteu segur que voleu suprimir els canvis de l’esborrany de pàgina? Es perdran tots els canvis que hàgiu fet després de la darrera vegada que vau desar la pàgina i l’editor s’actualitzarà amb l’estat de la darrera vegada que es va desar la pàgina que no era esborrany.',
     'pages_edit_discard_draft' => 'Descarta l’esborrany',
-    'pages_edit_switch_to_markdown' => 'Canvia a l’editor Markdown',
+    'pages_edit_switch_to_markdown' => 'Canvia a l’editor de Markdown',
     'pages_edit_switch_to_markdown_clean' => '(Contingut net)',
     'pages_edit_switch_to_markdown_stable' => '(Contingut estable)',
     'pages_edit_switch_to_wysiwyg' => 'Canvia a l’editor WYSIWYG',
-    'pages_edit_set_changelog' => 'Defineix el registre de canvis',
-    'pages_edit_enter_changelog_desc' => 'Introduïu una breu descripció dels canvis que heu fet',
-    'pages_edit_enter_changelog' => 'Introduïu un registre de canvis',
-    'pages_editor_switch_title' => 'Canvia d’editor',
-    'pages_editor_switch_are_you_sure' => 'Segur que voleu canviar l’editor d’aquesta pàgina?',
-    'pages_editor_switch_consider_following' => 'Considereu el següent en canviar d’editor:',
-    'pages_editor_switch_consideration_a' => 'Quan hàgiu desat, l’opció del nou editor serà la que utilitzaran tots els futurs editors, incloent-hi els que no poden canviar de tipus d’editor amb el seu usuari.',
-    'pages_editor_switch_consideration_b' => 'En algunes circumstàncies, això pot comportar una pèrdua de detalls i de sintaxi.',
-    'pages_editor_switch_consideration_c' => 'Els canvis al registre de canvis o a les etiquetes fets d’ençà de la darrera vegada que s’ha desat no es mantindran en aquest canvi.',
+    'pages_edit_set_changelog' => 'Registre de canvis',
+    'pages_edit_enter_changelog_desc' => 'Introduïu una descripció breu dels canvis que heu fet',
+    'pages_edit_enter_changelog' => 'Registra un canvi',
+    'pages_editor_switch_title' => 'Canvia l’editor',
+    'pages_editor_switch_are_you_sure' => 'Esteu segur que voleu canviar l’editor d’aquesta pàgina?',
+    'pages_editor_switch_consider_following' => 'Quan canvieu l’editor tingueu en compte que:',
+    'pages_editor_switch_consideration_a' => 'Un cop s’hagi desat, l’editor nou serà el que hagin d’utilitzar tots els editor futurs, incloent-hi aquells que no puguin canviar el tipus d’editor.',
+    'pages_editor_switch_consideration_b' => 'És possible que hi hagi pèrdues en el detall i la sintaxi.',
+    'pages_editor_switch_consideration_c' => 'Els canvis en les etiquetes i el registre de canvis que s’hagin fet després de la darrera vegada que es va desar no es conservaran.',
     'pages_save' => 'Desa la pàgina',
     'pages_title' => 'Títol de la pàgina',
     'pages_name' => 'Nom de la pàgina',
     'pages_md_editor' => 'Editor',
-    'pages_md_preview' => 'Previsualització',
+    'pages_md_preview' => 'Visualització prèvia',
     'pages_md_insert_image' => 'Insereix una imatge',
-    'pages_md_insert_link' => 'Insereix un enllaç a una entitat',
-    'pages_md_insert_drawing' => 'Insereix un diagrama',
-    'pages_md_show_preview' => 'Mostra la previsualització',
-    'pages_md_sync_scroll' => 'Sincronitza el desplaçament de la previsualització',
-    'pages_drawing_unsaved' => 'S’ha trobat un diagrama no desat',
-    'pages_drawing_unsaved_confirm' => 'S’han trobat dades d’un diagrama d’un intent de desat fallit anterior. Voleu restaurar-les i continuar editant aquest diagrama no desat?',
-    'pages_not_in_chapter' => 'La pàgina no pertany a cap capítol',
+    'pages_md_insert_link' => 'Insereix un enllaç d’entitat',
+    'pages_md_insert_drawing' => 'Insereix un dibuix',
+    'pages_md_show_preview' => 'Mostra la visualització prèvia',
+    'pages_md_sync_scroll' => 'Sincronitza el desplaçament de la visualització prèvia',
+    'pages_drawing_unsaved' => 'S’ha trobat un dibuix sense desar',
+    'pages_drawing_unsaved_confirm' => 'S’han trobat dades d’un dibuix d’un intent anterior de desar un dibuix. Voleu restaurar aquest dibuix no desat per a reprendre’n l’edició?',
+    'pages_not_in_chapter' => 'La pàgina no és un capítol',
     'pages_move' => 'Mou la pàgina',
     'pages_copy' => 'Copia la pàgina',
-    'pages_copy_desination' => 'Destinació de la còpia',
-    'pages_copy_success' => 'Pàgina copiada correctament',
+    'pages_copy_desination' => 'Copia la destinació',
+    'pages_copy_success' => 'S’ha copiat la pàgina',
     'pages_permissions' => 'Permisos de la pàgina',
     'pages_permissions_success' => 'S’han actualitzat els permisos de la pàgina',
     'pages_revision' => 'Revisió',
     'pages_revisions' => 'Revisions de la pàgina',
-    'pages_revisions_desc' => 'A continuació hi ha les revisions anteriors de la pàgina. Podeu mirar-les, comparar-les i restaurar-ne versions antigues si us ho permeten els permisos. És possible que l’historial complet de la pàgina no s’hi vegi reflectit perquè, depenent de la configuració del sistema, es poden haver esborrat automàticament revisions antigues.',
-    'pages_revisions_named' => 'Revisions de la pàgina :pageName',
-    'pages_revision_named' => 'Revisió de la pàgina :pageName',
-    'pages_revision_restored_from' => 'Restaurada de núm. :id; :summary',
-    'pages_revisions_created_by' => 'Creada per',
+    'pages_revisions_desc' => 'A continuació hi ha la llista de totes les revisions d’aquesta pàgina. Si hi teniu permís, podeu mirar, comparar i restaurar versions antigues de la pàgina. És possible que no hi aparegui tot l’historial de la pàgina ja que, segons la configuració del sistema, és possible que s’hagin suprimit les revisions antigues automàticament.',
+    'pages_revisions_named' => 'Revisions de la pàgina &laquo;:pageName&raquo;',
+    'pages_revision_named' => 'Revisió de la pàgina &laquo;:pageName&raquo;',
+    'pages_revision_restored_from' => 'S’ha restaurat de núm. :id: :summary',
+    'pages_revisions_created_by' => 'Revisor:',
     'pages_revisions_date' => 'Data de la revisió',
-    'pages_revisions_number' => 'Núm. ',
-    'pages_revisions_sort_number' => 'Número de revisió',
+    'pages_revisions_number' => '#',
+    'pages_revisions_sort_number' => 'Número de la revisió',
     'pages_revisions_numbered' => 'Revisió núm. :id',
     'pages_revisions_numbered_changes' => 'Canvis de la revisió núm. :id',
     'pages_revisions_editor' => 'Tipus d’editor',
     'pages_revisions_changelog' => 'Registre de canvis',
     'pages_revisions_changes' => 'Canvis',
     'pages_revisions_current' => 'Versió actual',
-    'pages_revisions_preview' => 'Previsualitza',
+    'pages_revisions_preview' => 'Visualització prèvia',
     'pages_revisions_restore' => 'Restaura',
     'pages_revisions_none' => 'Aquesta pàgina no té cap revisió',
     'pages_copy_link' => 'Copia l’enllaç',
-    'pages_edit_content_link' => 'Vés a la secció a l’editor',
-    'pages_pointer_enter_mode' => 'Activa el mode de selecció de secció',
-    'pages_pointer_label' => 'Opcions de la secció de la pàgina',
-    'pages_pointer_permalink' => 'Enllaç permanent de la secció de la pàgina',
-    'pages_pointer_include_tag' => 'Etiqueta d’inclusió de la secció de la pàgina',
-    'pages_pointer_toggle_link' => 'Mode d’enllaç permanent, premeu per a mostrar l’etiqueta d‘inclusió',
-    'pages_pointer_toggle_include' => 'Mode d’etiqueta d’inclusió, premeu per a mostrar l’enllaç permanent',
-    'pages_permissions_active' => 'S’han activat els permisos de la pàgina',
+    'pages_edit_content_link' => 'Ves a la secció a l’editor',
+    'pages_pointer_enter_mode' => 'Entra al mode de selecció de secció',
+    'pages_pointer_label' => 'Opcions de la secció de pàgina',
+    'pages_pointer_permalink' => 'Enllaç permanent de la secció de pàgina',
+    'pages_pointer_include_tag' => 'Etiqueta inclou de la secció de pàgina',
+    'pages_pointer_toggle_link' => 'Enllaç permanent. Cliqueu per a mostrar l’etiqueta d’inclusió',
+    'pages_pointer_toggle_include' => 'Etiqueta d’inclusió. Cliqueu per a mostrar l’enllaç permanent',
+    'pages_permissions_active' => 'La pàgina té permisos',
     'pages_initial_revision' => 'Publicació inicial',
-    'pages_references_update_revision' => 'Actualització automàtica dels enllaços interns del sistema',
+    'pages_references_update_revision' => 'Actualització automàtica dels enllaços interns',
     'pages_initial_name' => 'Pàgina nova',
-    'pages_editing_draft_notification' => 'Esteu editant un esborrany que es va desar per darrer cop :timeDiff.',
-    'pages_draft_edited_notification' => 'Aquesta pàgina s’ha actualitzat d’ençà d’aleshores. Us recomanem que descarteu aquest esborrany.',
-    'pages_draft_page_changed_since_creation' => 'Aquesta pàgina s’ha actualitzat d‘ençà que es va crear l’esborrany. Us recomanem que descarteu aquest esborrany i que aneu amb compte de no sobreescriure els canvis de la pàgina.',
+    'pages_editing_draft_notification' => 'Esteu editant un esborrany que es va desar :timeDiff.',
+    'pages_draft_edited_notification' => 'Des de llavors, s’ha actualitzat la pàgina. Us recomanem que descarteu aquest esborrany.',
+    'pages_draft_page_changed_since_creation' => 'Des que es va crear l’esborrany, la pàgina s’ha actualitzat. Us recomanem que descarteu aquest esborrany o que aneu amb compte de no sobreescriure cap canvi.',
     'pages_draft_edit_active' => [
         'start_a' => ':count usuaris han començat a editar aquesta pàgina',
         'start_b' => ':userName ha començat a editar aquesta pàgina',
-        'time_a' => 'd’ençà que la pàgina es va actualitzar per darrer cop',
+        'time_a' => 'des que es va actualitzar aquesta pàgina',
         'time_b' => 'en els darrers :minCount minuts',
-        'message' => ':start :time. Aneu amb compte de no trepitjar-vos les actualitzacions entre vosaltres!',
+        'message' => ':start :time. Aneu amb compte de no sobreescriure-us els canvis.',
     ],
-    'pages_draft_discarded' => 'S’ha descartat l’esborrany! S’ha actualitzat l’editor amb el contingut actual de la pàgina',
-    'pages_draft_deleted' => 'S’ha suprimit l’esborrany! S’ha actualitzat l’editor amb el contingut actual de la pàgina',
-    'pages_specific' => 'Una pàgina específica',
-    'pages_is_template' => 'Plantilla de pàgina',
+    'pages_draft_discarded' => 'S’ha descartat l’esborrany. L’editor s’ha actualitzat amb el contingut actual de la pàgina',
+    'pages_draft_deleted' => 'S’ha suprimit l’esborrany! L’editor s’ha actualitzat amb el contingut actual de la pàgina',
+    'pages_specific' => 'Pàgina específica',
+    'pages_is_template' => 'Plantilla de la pàgina',
 
     // Editor Sidebar
     'toggle_sidebar' => 'Commuta la barra lateral',
@@ -306,57 +306,57 @@ return [
     'shelf_tags' => 'Etiquetes del prestatge',
     'tag' => 'Etiqueta',
     'tags' =>  'Etiquetes',
-    'tags_index_desc' => 'Es poden aplicar etiquetes al contingut dins del sistema per a aplicar un mode de categorització flexible. Les etiquetes poden tenir una clau i un valor, però el valor és opcional. Quan s’han aplican, el contingut es pot cercar fent servir el nom o el valor de l’etiqueta.',
+    'tags_index_desc' => 'Es poden posar etiquetes al contingut per a aconseguir una categorització flexible. Les etiquetes han de tenir una clau i poden o no tenir un valor. Un cop s’hi han posat, es pot cercar el contingut utilitzant el nom o el valor de les etiquetes.',
     'tag_name' =>  'Nom de l’etiqueta',
     'tag_value' => 'Valor de l’etiqueta (opcional)',
-    'tags_explain' => "Afegiu etiquetes per a categoritzar millor el contingut. \n Podeu assignar un valor a cada etiqueta per a una organització més detallada.",
-    'tags_add' => 'Afegeix una altra etiqueta',
-    'tags_remove' => 'Elimina aquesta etiqueta',
-    'tags_usages' => 'Usos totals de l’etiqueta',
-    'tags_assigned_pages' => 'Assignada a pàgines',
-    'tags_assigned_chapters' => 'Assignada a capítols',
-    'tags_assigned_books' => 'Assignada a llibres',
-    'tags_assigned_shelves' => 'Assignada a prestatges',
+    'tags_explain' => "Poseu alguna etiqueta per a categoritzar millor el contingut. \n Podeu assignar un valor a l’etiqueta per a aconseguir una organització més detallada.",
+    'tags_add' => 'Posa-hi una altra etiqueta',
+    'tags_remove' => 'Lleva aquesta etiqueta',
+    'tags_usages' => 'Ús total de les etiquetes',
+    'tags_assigned_pages' => 'Assignades a pàgines',
+    'tags_assigned_chapters' => 'Assignades a capítols',
+    'tags_assigned_books' => 'Assignades a llibres',
+    'tags_assigned_shelves' => 'Assignades a prestatges',
     'tags_x_unique_values' => ':count valors únics',
     'tags_all_values' => 'Tots els valors',
     'tags_view_tags' => 'Mostra les etiquetes',
     'tags_view_existing_tags' => 'Mostra les etiquetes existents',
-    'tags_list_empty_hint' => 'Es poden assignar etiquetes mitjançant la barra lateral de l’editor de la pàgina o quan s’editen els detalls d’un llibre, capítol o prestatge.',
-    'attachments' => 'Adjuncions',
-    'attachments_explain' => 'Pugeu fitxers o adjunteu enllaços per a mostrar-los a la pàgina. Són visibles a la barra lateral de la pàgina.',
-    'attachments_explain_instant_save' => 'Els canvis fets aquí es desen instantàniament.',
+    'tags_list_empty_hint' => 'Podeu posar etiquetes a la barra lateral de l’editor o quan canvieu la informació d’un capítol o d’un prestatge.',
+    'attachments' => 'Fitxers adjunts',
+    'attachments_explain' => 'Pugeu fitxers o afegiu enllaços per a mostrar a la pàgina. Els podreu veure a la barra lateral de la pàgina.',
+    'attachments_explain_instant_save' => 'Els canvis dels fitxers adjunts es desen a l’instant.',
     'attachments_upload' => 'Puja un fitxer',
-    'attachments_link' => 'Adjunta un enllaç',
-    'attachments_upload_drop' => 'De manera alternativa, podeu arrossegar i deixar anar un fitxer aquí per a pujar-lo com a adjunció.',
-    'attachments_set_link' => 'Defineix l’enllaç',
-    'attachments_delete' => 'Segur que voleu suprimir aquesta adjunció?',
-    'attachments_dropzone' => 'Deixeu anar fitxers aquí per a pujar-los',
+    'attachments_link' => 'Afegeix un enllaç',
+    'attachments_upload_drop' => 'També podeu arrossegar i deixar anar un fitxer aquí per a adjuntar-lo.',
+    'attachments_set_link' => 'Configura l’enllaç',
+    'attachments_delete' => 'Esteu segur que voleu suprimir aquest fitxer adjunt?',
+    'attachments_dropzone' => 'Deixeu-hi anar fitxers per a pujar-los',
     'attachments_no_files' => 'No s’ha pujat cap fitxer',
-    'attachments_explain_link' => 'Podeu adjuntar un enllaç si preferiu no pujar un fitxer. Pot ser un enllaç a una altra pàgina o un enllaç a un fitxer al núvol.',
+    'attachments_explain_link' => 'Si us estimeu més no pujar un fitxer, podeu afegir un enllaç. Pot ser un enllaç en una altra pàgina o a un fitxer al núvol.',
     'attachments_link_name' => 'Nom de l’enllaç',
-    'attachment_link' => 'Enllaç de l’adjunció',
+    'attachment_link' => 'Enllaç del fitxer adjunt',
     'attachments_link_url' => 'Enllaç al fitxer',
-    'attachments_link_url_hint' => 'URL del lloc o fitxer',
+    'attachments_link_url_hint' => 'URL del lloc o del fitxer.',
     'attach' => 'Adjunta',
-    'attachments_insert_link' => 'Afegeix un enllaç de l’adjunció a la pàgina',
+    'attachments_insert_link' => 'Afegeix un enllaç de fitxer adjunt a la pàgina',
     'attachments_edit_file' => 'Edita el fitxer',
     'attachments_edit_file_name' => 'Nom del fitxer',
-    'attachments_edit_drop_upload' => 'Arrossegueu fitxers o feu clic aquí per a pujar-los i sobreescriure’ls',
-    'attachments_order_updated' => 'S’ha actualitzat l’ordre de les adjuncions',
-    'attachments_updated_success' => 'S’han actualitzat els detalls de les adjuncions',
-    'attachments_deleted' => 'S’ha suprimit l’adjunció',
-    'attachments_file_uploaded' => 'Fitxer pujat correctament',
-    'attachments_file_updated' => 'Fitxer actualitzat correctament',
-    'attachments_link_attached' => 'Enllaç adjuntat a la pàgina correctament',
+    'attachments_edit_drop_upload' => 'Deixeu-hi anar fitxers o cliqueu aquí per a pujar-ne i sobreescriure’ls.',
+    'attachments_order_updated' => 'S’ha actualitzat l’ordre del fitxer adjunt',
+    'attachments_updated_success' => 'S’han actualitzat els detalls dels fitxer adjunt',
+    'attachments_deleted' => 'S’ha suprimit el fitxer adjunt',
+    'attachments_file_uploaded' => 'S’ha pujat el fitxer',
+    'attachments_file_updated' => 'S’ha actualitzat el fitxer',
+    'attachments_link_attached' => 'S’ha adjuntat l’enllaç a la pàgina',
     'templates' => 'Plantilles',
     'templates_set_as_template' => 'La pàgina és una plantilla',
-    'templates_explain_set_as_template' => 'Podeu definir aquesta pàgina com a plantilla perquè el seu contingut es pugui fer servir en crear altres pàgines. Els altres usuaris podran fer servir la plantilla si tenen permís per a veure aquesta pàgina.',
+    'templates_explain_set_as_template' => 'Podeu configurar aquesta pàgina com a plantilla perquè s’utilitzi en la creació d’altres pàgines. Els altres usuaris podran utilitzar aquesta plantilla si tenen permisos de visualització d’aquesta pàgina.',
     'templates_replace_content' => 'Substitueix el contingut de la pàgina',
-    'templates_append_content' => 'Afegeix al final del contingut de la pàgina',
-    'templates_prepend_content' => 'Afegeix al principi del contingut de la pàgina',
+    'templates_append_content' => 'Afegeix-ho després del contingut la pàgina',
+    'templates_prepend_content' => 'Afegeix-ho abans del contingut la pàgina',
 
     // Profile View
-    'profile_user_for_x' => 'Usuari fa :time',
+    'profile_user_for_x' => 'Usuari des de fa :time',
     'profile_created_content' => 'Contingut creat',
     'profile_not_created_pages' => ':userName no ha creat cap pàgina',
     'profile_not_created_chapters' => ':userName no ha creat cap capítol',
@@ -367,71 +367,71 @@ return [
     'comment' => 'Comentari',
     'comments' => 'Comentaris',
     'comment_add' => 'Afegeix un comentari',
-    'comment_placeholder' => 'Deixeu un comentari aquí',
-    'comment_count' => '{0} Sense comentaris|{1} 1 comentari|[2,*] :count comentaris',
+    'comment_placeholder' => 'Deixa un comentari aquí',
+    'comment_count' => '{0} No hi ha cap comentari|{1} Hi ha 1 comentari|[2,*] Hi ha :count comentaris',
     'comment_save' => 'Desa el comentari',
-    'comment_new' => 'Comentari nou',
+    'comment_new' => 'Crea un comentari',
     'comment_created' => 'ha comentat :createDiff',
-    'comment_updated' => 'Actualitzat :updateDiff per :username',
+    'comment_updated' => ':username l’ha actualitzat :updateDiff',
     'comment_updated_indicator' => 'Actualitzat',
-    'comment_deleted_success' => 'Comentari suprimit',
-    'comment_created_success' => 'Comentari afegit',
-    'comment_updated_success' => 'Comentari actualitzat',
-    'comment_delete_confirm' => 'Segur que voleu suprimir aquest comentari?',
+    'comment_deleted_success' => 'S’ha suprimit el comentari',
+    'comment_created_success' => 'S’ha afegit un comentari',
+    'comment_updated_success' => 'S’ha actualitzat un comentari',
+    'comment_delete_confirm' => 'Esteu segur que voleu suprimir aquest comentari?',
     'comment_in_reply_to' => 'En resposta a :commentId',
-    'comment_editor_explain' => 'Aquí hi ha els comentaris que s’han deixat en aquesta pàgina. Els comentaris es poden afegir i gestionar en veure una pàgina desada.',
+    'comment_editor_explain' => 'Vet aquí els comentaris que s’han fet en aquesta pàgina. Els comentaris es poden fer i gestionar quan es visualitza la pàgina desada.',
 
     // Revision
-    'revision_delete_confirm' => 'Segur que voleu suprimir aquesta revisió?',
-    'revision_restore_confirm' => 'Segur que voleu restaurar aquesta revisió? Se substituirà el contingut de la pàgina actual.',
+    'revision_delete_confirm' => 'Esteu segur que voleu suprimir aquesta revisió?',
+    'revision_restore_confirm' => 'Esteu segur que voleu restaurar aquesta revisió? Se substituirà el contingut actual de la pàgina.',
     'revision_cannot_delete_latest' => 'No es pot suprimir la darrera revisió.',
 
     // Copy view
-    'copy_consider' => 'Tingueu en compte el següent quan copieu contingut.',
+    'copy_consider' => 'Quan copieu contingut, tingueu en compte el següent:',
     'copy_consider_permissions' => 'No es copiarà la configuració personalitzada de permisos.',
-    'copy_consider_owner' => 'Esdevindreu el nou propietari de qualsevol contingut copiat.',
-    'copy_consider_images' => 'Els fitxers d’imatge de les pàgines no es duplicaran i les imatges originals mantindran la relació amb la pàgina a la qual es van pujar originalment.',
-    'copy_consider_attachments' => 'No es copiaran les adjuncions de la pàgina.',
-    'copy_consider_access' => 'Un canvi d’ubicació, propietari o permisos pot provocar que aquest contingut esdevingui accessible a públic que abans no n’hi tenia.',
+    'copy_consider_owner' => 'Sereu el propietari de tot el contingut copiat.',
+    'copy_consider_images' => 'Els fitxers d’imatge de la pàgina no es duplicaran i les imatges originals conservaran la relació amb la pàgina a què es van pujar originalment.',
+    'copy_consider_attachments' => 'No es copiaran els fitxers adjunts de la pàgina.',
+    'copy_consider_access' => 'És possible que, en canviar la ubicació, el propietari o els permisos, el contingut esdevingui accessible a usuaris que no hi tenien accés.',
 
     // Conversions
     'convert_to_shelf' => 'Converteix en prestatge',
-    'convert_to_shelf_contents_desc' => 'Podeu convertir aquest llibre en un prestatge nou amb el mateix contingut. Els capítols continguts en aquest llibre es convertiran en nous lliures. Si aquest llibre conté pàgines que no pertanyin a cap capítol, aquest llibre canviarà de nom i les contindrà, i aquest llibre esdevindrà part del nou prestatge.',
-    'convert_to_shelf_permissions_desc' => 'Qualsevol permís definit en aquest llibre es copiarà al nou prestatge i a tots els nous llibres fills que no tinguin permisos explícits. Tingueu en compte que els permisos dels prestatges no s’hereten automàticament al contingut que continguin de la mateixa manera que passa amb els llibres.',
+    'convert_to_shelf_contents_desc' => 'Pots convertir aquest llibre en un prestatge nou amb els mateixos continguts. Els capítols d’aquest llibre es convertiran en llibres. Si aquest llibre conté cap pàgina que no sigui en un capítol, es canviarà el nom del llibre que contindrà aquestes pàgines i el llibre formarà part del prestatge nou.',
+    'convert_to_shelf_permissions_desc' => 'Es copiaran els permisos d’aquest llibre al prestatge nou i a tots els llibres que contingui que no tinguin els seus propis permisos. Tingueu en compte que els permisos dels prestatges no es propaguen als seus continguts com sí que ho fan els dels llibres.',
     'convert_book' => 'Converteix el llibre',
-    'convert_book_confirm' => 'Segur que voleu convertir aquest llibre?',
-    'convert_undo_warning' => 'No es podrà desfer de manera fàcil.',
+    'convert_book_confirm' => 'Esteu segur que voleu convertir aquest llibre?',
+    'convert_undo_warning' => 'Això no es pot desfer fàcilment.',
     'convert_to_book' => 'Converteix en llibre',
-    'convert_to_book_desc' => 'Podeu convertir aquest capítol en un llibre nou amb el mateix contingut. Qualsevol permís definit en aquest capítol es copiarà al nou llibre, però qualsevol permís heretat del llibre pare no es copiarà, la qual cosa podria implicar canvis en el control d’accés.',
+    'convert_to_book_desc' => 'Podeu convertir aquest capítol en un llibre nou amb els mateixos continguts. Es copiaran els permisos d’aquest capítol al llibre nou, però no es copiaran els permisos heretats del llibre a què pertany cosa que podria canviar-ne el control d’accés.',
     'convert_chapter' => 'Converteix el capítol',
-    'convert_chapter_confirm' => 'Segur que voleu convertir aquest capítol?',
+    'convert_chapter_confirm' => 'Esteu segur que voleu convertir aquest capítol?',
 
     // References
     'references' => 'Referències',
-    'references_none' => 'Ni hi ha cap referència detectada a aquest element.',
-    'references_to_desc' => 'A continuació es llisten tots els continguts coneguts del sistema que enllacen a aquest element.',
+    'references_none' => 'No hi ha cap referència cap a aquest element.',
+    'references_to_desc' => 'A la llista que hi ha a continuació, hi trobareu tot el contingut que enllaça cap aquest element.',
 
     // Watch Options
     'watch' => 'Segueix',
-    'watch_title_default' => 'Preferències per defecte',
-    'watch_desc_default' => 'Restableix el seguiment a només les preferències de notificació per defecte.',
+    'watch_title_default' => 'Preferències predeterminades',
+    'watch_desc_default' => 'Reverteix el seguiment a les preferències de notificació per defecte.',
     'watch_title_ignore' => 'Ignora',
-    'watch_desc_ignore' => 'Ignora totes les notificacions, incloent-hi les preferències a nivell d’usuari.',
+    'watch_desc_ignore' => 'Ignora totes les notificacions, incloent-hi les de les preferències de nivell usuari.',
     'watch_title_new' => 'Pàgines noves',
-    'watch_desc_new' => 'Notifica’m quan es creï qualsevol pàgina nova dins d’aquest element.',
-    'watch_title_updates' => 'Totes les actualitzacions de pàgines',
-    'watch_desc_updates' => 'Notifica’m totes les pàgines noves i qualsevol canvi de pàgina.',
-    'watch_desc_updates_page' => 'Notifica’m tots els canvis de pàgina.',
-    'watch_title_comments' => 'Totes les actualitzacions de pàgines i comentaris',
-    'watch_desc_comments' => 'Notifica’m totes les pàgines noves, qualsevol canvi de pàgina i comentaris nous.',
-    'watch_desc_comments_page' => 'Notifica’m qualsevol canvi de pàgina i comentaris nous.',
-    'watch_change_default' => 'Canvieu les preferències de notificació per deecte',
-    'watch_detail_ignore' => 'S’ignoren les notificacions',
-    'watch_detail_new' => 'Se segueixen pàgines noves',
-    'watch_detail_updates' => 'Se segueixen pàgines noves i actualitzacions',
-    'watch_detail_comments' => 'Se segueixen pàgines noves, actualitzacions i comentaris',
-    'watch_detail_parent_book' => 'Se segueix mitjançant el llibre pare',
-    'watch_detail_parent_book_ignore' => 'S’ignora mitjançant el llibre pare',
-    'watch_detail_parent_chapter' => 'Se segueix mitjançant el capítol pare',
-    'watch_detail_parent_chapter_ignore' => 'S’ignora mitjançant el capítol pare',
+    'watch_desc_new' => 'Notifica’m la creació d’una pàgina nova dins d’aquest element.',
+    'watch_title_updates' => 'Actualitzacions de la pàgina',
+    'watch_desc_updates' => 'Notifica’m totes les pàgines noves i totes les actualitzacions de les pàgines.',
+    'watch_desc_updates_page' => 'Notifica’m totes les actualitzacions de les pàgines.',
+    'watch_title_comments' => 'Actualitzacions i comentaris de la pàgina',
+    'watch_desc_comments' => 'Notifica’m totes les pàgines noves, totes les actualitzacions de les pàgines i tots els comentaris nous.',
+    'watch_desc_comments_page' => 'Notifica’m tots les actualitzacions de pàgines i tots els comentaris nous.',
+    'watch_change_default' => 'Canvia les preferències de notificació per defecte',
+    'watch_detail_ignore' => 'S’estan ignorant les notificacions',
+    'watch_detail_new' => 'S’està fent el seguiment de pàgines noves',
+    'watch_detail_updates' => 'S’està fent el seguiment de pàgines noves i les actualitzacions de les pàgines',
+    'watch_detail_comments' => 'S’està fent el seguiment de pàgines noves i les actualitzacions de les pàgines i els comentaris',
+    'watch_detail_parent_book' => 'S’està fent el seguiment a través del llibre de què és part',
+    'watch_detail_parent_book_ignore' => 'S’està ignorant a través del llibre de què és part',
+    'watch_detail_parent_chapter' => 'S’està fent el seguiment a través del capítol de què és part',
+    'watch_detail_parent_chapter_ignore' => 'S’està ignorant a través del capítol de què és part',
 ];
index 5655276961fdc3937440f997487b8d26d10bbe79..e30ef3d9725b60b1b169ab4fe39c41529a12c49a 100644 (file)
@@ -6,115 +6,115 @@ return [
 
     // Permissions
     'permission' => 'No teniu permís per a accedir a la pàgina sol·licitada.',
-    'permissionJson' => 'No teniu permís per a executar l’acció sol·licitada.',
+    'permissionJson' => 'No teniu permís per a fer l’acció sol·licitada.',
 
     // Auth
-    'error_user_exists_different_creds' => 'Ja hi ha un usuari amb l’adreça electrònica :email però amb credencials diferents.',
+    'error_user_exists_different_creds' => 'Ja existeix un usuari amb el correu electrònic :email però amb unes credencials diferents.',
     'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
-    'email_already_confirmed' => 'L’adreça electrònica ja està confirmada. Proveu d’iniciar la sessió.',
+    'email_already_confirmed' => 'Ja s’ha confirmat el correu electrònic. Proveu d’iniciar sessió.',
     'email_confirmation_invalid' => 'Aquest testimoni de confirmació no és vàlid o ja s’ha utilitzat. Proveu de tornar-vos a registrar.',
-    'email_confirmation_expired' => 'El testimoni de confirmació ha caducat. S’ha enviat un nou correu electrònic de confirmació.',
-    'email_confirmation_awaiting' => 'Cal confirmar l’adreça electrònica del compte que utilitzeu',
-    'ldap_fail_anonymous' => 'L’accés a l’LDAP ha fallat fent servir un lligam anònim',
-    'ldap_fail_authed' => 'L’accés a l’LDAP ha fallat fent servir els detalls de DN i contrasenya proporcionats',
-    'ldap_extension_not_installed' => 'L’extensió de l’LDAP del PHP no està instal·lada',
-    'ldap_cannot_connect' => 'No s’ha pogut connectar amb el servidor de l’LDAP, la connexió inicial ha fallat',
-    'saml_already_logged_in' => 'Ja heu iniciat la sessió',
-    'saml_no_email_address' => 'No s’ha pogut trobar cap adreça electrònica per a aquest usuari en les dades proporcionades pel sistema d’autenticació extern',
-    'saml_invalid_response_id' => 'La petició del sistema d’autenticació extern no és reconeguda per un procés iniciat per aquesta aplicació. Aquest problema podria ser causat per navegar endarrere després d’iniciar la sessió.',
-    'saml_fail_authed' => 'L’inici de sessió fent servir :system ha fallat, el sistema no ha proporcionat una autorització satisfactòria',
-    'oidc_already_logged_in' => 'Ja teniu una sessió iniciada',
-    'oidc_no_email_address' => 'No s’ha pogut trobar cap adreça electrònica per a aquest usuari en les dades proporcionades pel sistema d’autenticació extern',
-    'oidc_fail_authed' => 'L’inici de sessió fent servir :system ha fallat, el sistema no ha proporcionat una autorització satisfactòria',
-    'social_no_action_defined' => 'No hi ha cap acció definida',
-    'social_login_bad_response' => "S’ha rebut un error mentre s’iniciava la sessió amb :socialAccount: \n:error",
-    'social_account_in_use' => 'Aquest compte de :socialAccount ja està en ús, proveu d’iniciar la sessió mitjançant l’opció de :socialAccount.',
-    'social_account_email_in_use' => 'L’adreça electrònica :email ja està en ús. Si ja teniu un compte, podeu connectar-hi el vostre compte de :socialAccount a la configuració del vostre perfil.',
+    'email_confirmation_expired' => 'Aquest testimoni de confirmació ha caducat. S’ha enviat un altre correu electrònic de confirmació.',
+    'email_confirmation_awaiting' => 'Cal confirmar l’adreça electrònica del compte que utilitzeu.',
+    'ldap_fail_anonymous' => 'L’accés LDAP anònim ha fallat',
+    'ldap_fail_authed' => 'L’accés LDAP amb el nom distintiu i la contrasenya proporcionades',
+    'ldap_extension_not_installed' => 'L’extensió PHP de l’LDAP no està instal·lada',
+    'ldap_cannot_connect' => 'No s’ha pogut connectar amb el servidor LDAP perquè la connexió inicial ha fallat',
+    'saml_already_logged_in' => 'Ja heu iniciat sessió',
+    'saml_no_email_address' => 'No s’ha pogut trobar una adreça electrònica per a aquest usuari a les dades proporcionades pel sistema d’autenticació extern',
+    'saml_invalid_response_id' => 'Un procés iniciat per aquesta aplicació no reconeix la sol·licitud del sistema d’autenticació extern. Haver navegat enrere després d’iniciar sessió en podria ser la causa.',
+    'saml_fail_authed' => 'No s’ha pogut iniciar sessió amb :system perquè el sistema no ha proporcionat una autorització satisfactòria',
+    'oidc_already_logged_in' => 'Ja heu iniciat sessió',
+    'oidc_no_email_address' => 'No s’ha pogut trobar una adreça electrònica per a aquest usuari a les dades proporcionades pel sistema d’autenticació extern',
+    'oidc_fail_authed' => 'No s’ha pogut iniciar sessió amb :system perquè el sistema no ha proporcionat una autorització satisfactòria',
+    'social_no_action_defined' => 'No s’ha definit cap acció',
+    'social_login_bad_response' => "S’ha produït un error en l’inici de sessió amb :socialAccount: \n:error",
+    'social_account_in_use' => 'Aquest compte de :socialAccount ja s’està utilitzant. Proveu d’iniciar sessió amb :socialAccount.',
+    'social_account_email_in_use' => 'L’adreça electrònica :email ja s’està utilitzant. Si ja teniu uns compte podeu connectar-hi el vostre compte de :socialAccount des de la configuració del vostre perfil.',
     'social_account_existing' => 'Aquest compte de :socialAccount ja està associat al vostre perfil.',
-    'social_account_already_used_existing' => 'Aquest compte de :socialAccount ja el fa servir un altre usuari.',
+    'social_account_already_used_existing' => 'Aquest compte de :socialAccount ja està associat a un altre usuari.',
     'social_account_not_used' => 'Aquest compte de :socialAccount no està associat a cap usuari. Associeu-lo a la configuració del vostre perfil. ',
-    'social_account_register_instructions' => 'Si encara no teniu cap compte, podeu registrar-vos fent servir l’opció de :socialAccount.',
+    'social_account_register_instructions' => 'Si encara no teniu un compte, podeu registrar-vos amb l’opció :socialAccount.',
     'social_driver_not_found' => 'No s’ha trobat el controlador social',
-    'social_driver_not_configured' => 'La configuració social de :socialAccount no és correcta.',
-    'invite_token_expired' => 'Aquest enllaç d’invitació ha caducat. Podeu provar de restablir la contrasenya del vostre compte.',
+    'social_driver_not_configured' => 'La configuració de :socialAccount no és correcta.',
+    'invite_token_expired' => 'Aquest enllaç d’invitació ha caducat. Proveu de reinicialitzar la contrasenya.',
     'login_user_not_found' => 'A user for this action could not be found.',
 
     // System
-    'path_not_writable' => 'No s’ha pogut pujar al camí del fitxer :filePath. Assegureu-vos que el servidor hi té permisos d’escriptura.',
-    'cannot_get_image_from_url' => 'No s’ha pogut obtenir la imatge de :url',
-    'cannot_create_thumbs' => 'El servidor no pot crear miniatures. Reviseu que tingueu instal·lada l’extensió GD del PHP.',
-    'server_upload_limit' => 'El servidor no permet pujades d’aquesta mida. Proveu-ho amb una mida de fitxer més petita.',
-    'server_post_limit' => 'El servidor no pot rebre la quantitat de dades que heu proporcionat. Torneu-ho a provar amb menys dades o un fitxer més petit.',
-    'uploaded'  => 'El servidor no permet pujades d’aquesta mida. Proveu-ho amb una mida de fitxer més petita.',
+    'path_not_writable' => 'No s’ha pogut pujar a :filePath. Assegureu-vos que teniu permisos d’escriptura al servidor.',
+    'cannot_get_image_from_url' => 'No s’ha pogut obtenir la imatge des de :url',
+    'cannot_create_thumbs' => 'El servidor no pot crear miniatures. Assegureu-vos que s’ha instal·lat l’extensió de GD PHP.',
+    'server_upload_limit' => 'El servidor no permet pujades d’aquesta mida. Proveu-ho amb una mida més petita.',
+    'server_post_limit' => 'El servidor no pot rebre la quantitat de dades proporcionades. Proveu-ho amb menys dades o amb un fitxer més petit.',
+    'uploaded'  => 'El servidor no permet pujades d’aquesta mida. Proveu-ho amb un fitxer més petit.',
 
     // Drawing & Images
-    'image_upload_error' => 'S’ha produït un error en pujar la imatge',
-    'image_upload_type_error' => 'El tipus d’imatge que heu pujat no és vàlid',
-    'image_upload_replace_type' => 'Les substitucions de fitxers d’imatge han de ser el mateix tipus',
-    'image_upload_memory_limit' => 'No s’ha pogut gestionar la pujada de la imatge i/o crear-ne miniatures a causa dels límits dels recursos del sistema.',
-    'image_thumbnail_memory_limit' => 'No s’ha pogut crear les variacions de mida de la imatge a causa dels límits dels recursos del sistema.',
+    'image_upload_error' => 'S’ha produït un error en pujar la imatge.',
+    'image_upload_type_error' => 'El tipus d’imatge no és vàlid.',
+    'image_upload_replace_type' => 'Els fitxers d’imatge s’han de substituir per un del mateix tipus',
+    'image_upload_memory_limit' => 'No s’ha pogut pujar la imatge o crear-ne les miniatures a causa dels límits dels recursos del sistema.',
+    'image_thumbnail_memory_limit' => 'No s’han pogut crear mides d’imatge diferents a causa dels límits dels recursos del sistema.',
     'image_gallery_thumbnail_memory_limit' => 'No s’han pogut crear les miniatures de la galeria a causa dels límits dels recursos del sistema.',
-    'drawing_data_not_found' => 'No s’han pogut carregar les dades de dibuix. És possible que el fitxer de dibuix ja no existeixi o que no tingueu permisos per a accedir-hi.',
+    'drawing_data_not_found' => 'No s’han pogut pujar les dades del dibuix. És possible que el fitxer del dibuix ja no existeixi o que no tingueu permís per a accedir-hi.',
 
     // Attachments
-    'attachment_not_found' => 'No s’ha trobat l’adjunció',
-    'attachment_upload_error' => 'S’ha produït un error en pujar el fitxer de l’adjunció',
+    'attachment_not_found' => 'No s’ha trobat el fitxer adjunt',
+    'attachment_upload_error' => 'S’ha produït un error en pujar el fitxer adjunt',
 
     // Pages
-    'page_draft_autosave_fail' => 'No s’ha pogut desar l’esborrany. Assegureu-vos que teniu connexió a Internet abans de desar la pàgina',
-    'page_draft_delete_fail' => 'No s’ha pogut suprimir l’esborrany de la pàgina i obtenir el contingut desat actual de la pàgina',
-    'page_custom_home_deletion' => 'No es pot suprimir una pàgina mentre estigui definida com a pàgina d’inici',
+    'page_draft_autosave_fail' => 'No s’ha pogut desar l’esborrany. Assegureu-vos que esteu connectat a internet per a desar la pàgina.',
+    'page_draft_delete_fail' => 'No s’ha pogut suprimir l’esborrany de la pàgina i obtenir el contingut de la pàgina desada actual.',
+    'page_custom_home_deletion' => 'No es pot suprimir una pàgina que està definida com a pàgina d’inici.',
 
     // Entities
-    'entity_not_found' => 'No s’ha trobat l’entitat',
-    'bookshelf_not_found' => 'No s’ha trobat el prestatge',
-    'book_not_found' => 'No s’ha trobat el llibre',
-    'page_not_found' => 'No s’ha trobat la pàgina',
-    'chapter_not_found' => 'No s’ha trobat el capítol',
-    'selected_book_not_found' => 'No s’ha trobat el llibre seleccionat',
-    'selected_book_chapter_not_found' => 'No s’ha trobat el llibre o el capítol seleccionat',
-    'guests_cannot_save_drafts' => 'Els convidats no poden desar esborranys',
+    'entity_not_found' => 'No s’ha trobat l’entitat.',
+    'bookshelf_not_found' => 'No s’ha trobat el prestatge.',
+    'book_not_found' => 'No s’ha trobat el llibre.',
+    'page_not_found' => 'No s’ha trobat la pàgina.',
+    'chapter_not_found' => 'No s’ha trobat el capítol.',
+    'selected_book_not_found' => 'No s’ha trobat el llibre seleccionat.',
+    'selected_book_chapter_not_found' => 'No s’ha trobat el llibre o el capítol seleccionat.',
+    'guests_cannot_save_drafts' => 'Els convidats no poden desar esborranys.',
 
     // Users
-    'users_cannot_delete_only_admin' => 'No podeu suprimir l’únic administrador',
-    'users_cannot_delete_guest' => 'No podeu suprimir l’usuari convidat',
+    'users_cannot_delete_only_admin' => 'No podeu suprimir l’administrador únic.',
+    'users_cannot_delete_guest' => 'No podeu suprimir l’usuari convidat.',
 
     // Roles
-    'role_cannot_be_edited' => 'Aquest rol no es pot editar',
-    'role_system_cannot_be_deleted' => 'Aquest rol és un rol del sistema i no es pot suprimir',
-    'role_registration_default_cannot_delete' => 'No es pot suprimir aquest rol mentre estigui definit com a rol per defecte dels registres',
-    'role_cannot_remove_only_admin' => 'Aquest usuari és l’únic usuari assignat al rol d’administrador. Assigneu el rol d’administrador a un altre usuari abans de provar de suprimir aquest.',
+    'role_cannot_be_edited' => 'No es pot editar aquest rol.',
+    'role_system_cannot_be_deleted' => 'No es pot suprimir aquest rol perquè és un rol del sistema.',
+    'role_registration_default_cannot_delete' => 'No es pot suprimir aquest rol mentre estigui configurat com a rol de registre per defecte.',
+    'role_cannot_remove_only_admin' => 'Aquest és l’únic usuari assignat al rol d’administrador. Assigneu el rol d’administrador a un altre usuari abans de provar de suprimir-lo.',
 
     // Comments
     'comment_list' => 'S’ha produït un error en obtenir els comentaris.',
-    'cannot_add_comment_to_draft' => 'No podeu afegir comentaris a un esborrany.',
+    'cannot_add_comment_to_draft' => 'No es poden afegir comentaris en un esborrany.',
     'comment_add' => 'S’ha produït un error en afegir o actualitzar el comentari.',
     'comment_delete' => 'S’ha produït un error en suprimir el comentari.',
-    'empty_comment' => 'No podeu afegir un comentari buit.',
+    'empty_comment' => 'No es pot afegir un comentari buit.',
 
     // Error pages
     '404_page_not_found' => 'No s’ha trobat la pàgina',
-    'sorry_page_not_found' => 'No hem pogut trobar la pàgina que cerqueu.',
-    'sorry_page_not_found_permission_warning' => 'Si esperàveu que existís, és possible que no tingueu permisos per a veure-la.',
+    'sorry_page_not_found' => 'No s’ha trobat la pàgina que heu cercat.',
+    'sorry_page_not_found_permission_warning' => 'Si la pàgina existeix, és possible que no tingueu permís per a accedir-hi.',
     'image_not_found' => 'No s’ha trobat la imatge',
-    'image_not_found_subtitle' => 'No ha estat possible trobar el fitxer de la imatge que cerqueu.',
-    'image_not_found_details' => 'Si esperàveu que existís, és possible que s’hagi suprimit.',
-    'return_home' => 'Torna a l’inici',
-    'error_occurred' => 'S’ha produït un error',
-    'app_down' => ':appName està fora de servei en aquests moments',
-    'back_soon' => 'Tornarà a estar disponible aviat.',
+    'image_not_found_subtitle' => 'No s’ha trobat la imatge que heu cercat.',
+    'image_not_found_details' => 'És possible que s’hagi suprimit.',
+    'return_home' => 'Torna a la pàgina d’inici',
+    'error_occurred' => 'S’ha produït un error.',
+    'app_down' => ':appName està fora de servei.',
+    'back_soon' => 'Aviat ho arreglarem.',
 
     // API errors
-    'api_no_authorization_found' => 'No s’ha trobat cap testimoni d’autorització a la petició',
-    'api_bad_authorization_format' => 'S’ha trobat un testimoni d’autorització a la petició, però el format sembla erroni',
-    'api_user_token_not_found' => 'No s’ha trobat cap testimoni de l’API per al testimoni d’autorització proporcionat',
-    'api_incorrect_token_secret' => 'El secret proporcionat per al testimoni de l’API proporcionat és incorrecte',
-    'api_user_no_api_permission' => 'El propietari del testimoni de l’API utilitzat no té permís per a fer crides a l’API',
-    'api_user_token_expired' => 'El testimoni d’autorització utilitzat ha caducat',
+    'api_no_authorization_found' => 'No s’ha trobat cap testimoni d’autorització en aquesta sol·licitud.',
+    'api_bad_authorization_format' => 'S’ha trobat un testimoni d’autorització en aquesta sol·licitud però no tenia el format correcte.',
+    'api_user_token_not_found' => 'No s’ha trobat cap testimoni d’API per al testimoni d’autorització proporcionat.',
+    'api_incorrect_token_secret' => 'El secret proporcionat per al testimoni d’API utilitzat no és correcte.',
+    'api_user_no_api_permission' => 'El propietari del testimoni API utilitzat no té permís per a fer crides a l’API.',
+    'api_user_token_expired' => 'El testimoni d’autorització utilitzat ha caducat.',
 
     // Settings & Maintenance
-    'maintenance_test_email_failure' => 'S’ha produït un error en enviar un correu electrònic de prova:',
+    'maintenance_test_email_failure' => 'S’ha produït un error en enviar el correu electrònic de prova:',
 
     // HTTP errors
-    'http_ssr_url_no_match' => 'L’URL no coincideix amb els amfitrions SSR permesos segons la configuració',
+    'http_ssr_url_no_match' => 'L’URL no coincideix amb els amfitrions SSR configurats permesos.',
 ];
index 8f86b85ad526ea37813851cebe4e90d338f6ad8d..fdea33436de824b6f152ddadc57182d3cbbd2c14 100644 (file)
@@ -4,24 +4,24 @@
  */
 return [
 
-    'new_comment_subject' => 'Comentari nou a la pàgina :pageName',
-    'new_comment_intro' => 'Un usuari ha comentat en una pàgina de :appName:',
-    'new_page_subject' => 'Pàgina nova: :pageName',
-    'new_page_intro' => 'S’ha creat una pàgina nova a :appName:',
-    'updated_page_subject' => 'Pàgina actualitzada: :pageName',
-    'updated_page_intro' => 'S’ha actualitzat una pàgina a :appName:',
-    'updated_page_debounce' => 'Per a evitar les notificacions massives, no us enviarem notificacions si hi ha més edicions en aquesta pàgina fetes pel mateix editor.',
+    'new_comment_subject' => 'S’ha fet un comentari a la pàgina :pageName.',
+    'new_comment_intro' => 'S’ha fet un comentari nou en una pàgina a :appName.',
+    'new_page_subject' => 'S’ha creat la pàgina :pageName',
+    'new_page_intro' => 'S’ha creat una pàgina nova a :appName.',
+    'updated_page_subject' => 'S’ha actualitzat la pàgina :pageName',
+    'updated_page_intro' => 'S’ha actualitzat una pàgina a :appName.',
+    'updated_page_debounce' => 'Per a evitar que s’acumulin les notificacions, durant un temps no se us notificarà cap canvi fet en aquesta pàgina pel mateix usuari.',
 
     'detail_page_name' => 'Nom de la pàgina:',
     'detail_page_path' => 'Camí de la pàgina:',
     'detail_commenter' => 'Autor del comentari:',
     'detail_comment' => 'Comentari:',
-    'detail_created_by' => 'Creat per:',
-    'detail_updated_by' => 'Actualitzat per:',
+    'detail_created_by' => 'Creada per:',
+    'detail_updated_by' => 'Actualitzada per:',
 
     'action_view_comment' => 'Mostra el comentari',
     'action_view_page' => 'Mostra la pàgina',
 
-    'footer_reason' => 'Rebeu aquesta notificació perquè :link cobreixen aquest tipus d’activitat en aquest element.',
-    'footer_reason_link' => 'les vostres preferències de notificacions',
+    'footer_reason' => 'Heu rebut aquesta notificació perquè :link inclouen aquest tipus d’activitat per a aquest element.',
+    'footer_reason_link' => 'les vostres preferències de notificació',
 ];
index 60789c8a248935e5769da6a9808d9ac05f986e01..aa727ad4b61e7ff6324702e5ca51e9badbeb73b3 100644 (file)
@@ -6,10 +6,10 @@
  */
 return [
 
-    'password' => 'Les contrasenyes han de tenir almenys vuit caràcters i coincidir amb la confirmació.',
-    'user' => "No s’ha trobat cap usuari amb aquesta adreça electrònica.",
+    'password' => 'Les contrasenyes han de tenir almenys 8 caràcters i han de coincidir amb la confirmació de contrasenya.',
+    'user' => "No es pot trobar un usuari amb aquesta adreça electrònica.",
     'token' => 'El testimoni de restabliment de la contrasenya no és vàlid per a aquesta adreça electrònica.',
     'sent' => 'Us hem enviat un enllaç per a restablir la contrasenya!',
-    'reset' => 'S’ha restablert la contrasenya!',
+    'reset' => 'S’ha reinicialitzat la contrasenya.',
 
 ];
index 9d9ed8aa10dc8a8b8aa246ff0769310686b69a35..25206726ecd53f36f015f54b7645940fe968a1ba 100644 (file)
@@ -7,45 +7,45 @@
 return [
     'my_account' => 'El meu compte',
 
-    'shortcuts' => 'Dreceres',
-    'shortcuts_interface' => 'Preferències de les dreceres de la interfície d’usuari',
-    'shortcuts_toggle_desc' => 'Aquí podeu activar o desactivar les dreceres de teclat de la interfície del sistema, que s’utilitzen per a la navegació i les accions.',
-    'shortcuts_customize_desc' => 'Podeu personalitzar cadascuna de les dreceres següents. Premeu la combinació de tecles desitjada després de seleccionar la casella d’una drecera.',
-    'shortcuts_toggle_label' => 'Dreceres de teclat activades',
+    'shortcuts' => 'Dreceres de teclat',
+    'shortcuts_interface' => 'Preferències de dreceres de teclat de la interfície d’usuari',
+    'shortcuts_toggle_desc' => 'Configureu les dreceres de teclat de la interfície d’usuari del sistema utilitzades per a la navegació i les accions.',
+    'shortcuts_customize_desc' => 'Podeu personalitzar cadascuna de les dreceres a continuació. seleccionant el camp d’entrada de cada drecera i prement la combinació de tecles que vulgueu.',
+    'shortcuts_toggle_label' => 'Activa les dreceres de teclat',
     'shortcuts_section_navigation' => 'Navegació',
     'shortcuts_section_actions' => 'Accions habituals',
     'shortcuts_save' => 'Desa les dreceres',
-    'shortcuts_overlay_desc' => 'Nota: Quan s’activen les dreceres, hi ha una interfície d’ajuda disponible en prémer «?» que destaca les dreceres disponibles per a accions visibles actualment a la pantalla.',
-    'shortcuts_update_success' => 'S’han actualitzat les preferències de les dreceres!',
-    'shortcuts_overview_desc' => 'Gestioneu les dreceres de teclat que podeu utilitzar per a navegar per la interfície d’usuari del sistema.',
+    'shortcuts_overlay_desc' => 'Nota: Quan les dreces estan activades hi haurà disponible una ajuda que es pot obtenir prement &laquo;?&raquo; que ressaltarà les dreceres disponibles a la pantalla que s’estigui visualitzant.',
+    'shortcuts_update_success' => 'S’han actualitzat les preferències de drecera.',
+    'shortcuts_overview_desc' => 'Gestioneu les dreceres que s’utilitzen per a navegar per la interfície d’usuari.',
 
-    'notifications' => 'Preferències de notificació',
-    'notifications_desc' => 'Controleu les notificacions per correu electrònic que rebeu quan es fan certes activitats dins del sistema.',
-    'notifications_opt_own_page_changes' => 'Notifica’m quan hi hagi canvis a pàgines de les quals sóc propietari',
-    'notifications_opt_own_page_comments' => 'Notifica’m quan hi hagi comentaris a pàgines de les quals sóc propietari',
-    'notifications_opt_comment_replies' => 'Notifica’m quan hi hagi respostes als meus comentaris',
+    'notifications' => 'Preferències de les notificacions',
+    'notifications_desc' => 'Gestioneu les notificacions de correu electrònic que rebreu quan es facin certes activitats.',
+    'notifications_opt_own_page_changes' => 'Notifica’m els canvis a les meves pàgines.',
+    'notifications_opt_own_page_comments' => 'Notifica’m la creació de comentaris a les meves pàgines.',
+    'notifications_opt_comment_replies' => 'Notifica’m les respostes als meus comentaris.',
     'notifications_save' => 'Desa les preferències',
-    'notifications_update_success' => 'S’han actualitzat les preferències de notificacions!',
+    'notifications_update_success' => 'S’han actualitzat les preferències de notificació',
     'notifications_watched' => 'Elements seguits i ignorats',
-    'notifications_watched_desc' => 'A continuació hi ha els elements que tenen aplicades preferències de seguiment personalitzades. Per a actualitzar-ne les preferències, consulteu l’element i seleccioneu les opcions de seguiment a la barra lateral.',
+    'notifications_watched_desc' => 'A continuació hi ha els elements que tenen preferències de seguiment personalitzades. Per a actualitzar-les, accediu a l’element i configureu-les a la barra lateral.',
 
     'auth' => 'Accés i seguretat',
     'auth_change_password' => 'Canvia la contrasenya',
-    'auth_change_password_desc' => 'Canvieu la contrasenya que feu servir per a iniciar la sessió a l’aplicació. Cal que tingui un mínim de 8 caràcters.',
-    'auth_change_password_success' => 'S’ha actualitzat la contrasenya!',
+    'auth_change_password_desc' => 'Canvieu la contrasenya que s’utilitzarà per a iniciar sessió a l’aplicació. Ha de tenir com a mínim 8 caràcters.',
+    'auth_change_password_success' => 'S’ha actualitzat la contrasenya.',
 
-    'profile' => 'Detalls del perfil',
-    'profile_desc' => 'Gestioneu els detalls del vostre compte, que us representa davant d’altres usuaris, i també els detalls que s’utilitzen per a la comunicació i la personalització del sistema.',
-    'profile_view_public' => 'Mostra el perfil públic',
-    'profile_name_desc' => 'Configureu el vostre nom públic, que és visible als altres usuaris del sistema a través de les activitats que realitzeu i del contingut del qual sou propietari.',
-    'profile_email_desc' => 'Aquest correu s’utilitza per a notificacions i, depenent de l’autenticació activa del sistema, per a l’accés al sistema.',
-    'profile_email_no_permission' => 'Malauradament, no teniu permisos per a canviar l’adreça electrònica. Si voleu canviar-la, caldrà que demaneu a un administrador que us faci el canvi.',
-    'profile_avatar_desc' => 'Seleccioneu una imatge que us representarà davant d’altres usuaris del sistema. Idealment, aquesta imatge hauria de ser un quadrat de 256 px d’alçada i d’amplada.',
-    'profile_admin_options' => 'Opcions d’administració',
-    'profile_admin_options_desc' => 'Podeu trobar opcions de nivell d’administració addicionals del vostre compte, com ara les que permeten gestionar les assignacions de rols, a l’àrea de l’aplicació «Configuració > Usuaris».',
+    'profile' => 'Informació del perfil',
+    'profile_desc' => 'Gestioneu la informació del vostre compte que representa com us veuran els altres usuaris a més de la informació que s’utilitza per a la comunicació i la personalització del sistema.',
+    'profile_view_public' => 'Mostra’m el perfil públic',
+    'profile_name_desc' => 'Configureu el nom públic que veuran els altres usuaris a les activitats que feu i al vostre contingut.',
+    'profile_email_desc' => 'Aquesta serà l’adreça electrònica on s’enviaran les notificacions i que, segons l’autenticació del sistema activada, s’utilitzarà per a iniciar sessió.',
+    'profile_email_no_permission' => 'No teniu permís per a canviar la vostra adreça electrònica. Si voleu canviar-la, demaneu-ho a un administrador.',
+    'profile_avatar_desc' => 'Seleccioneu una imatge que us representi davant dels altres usuaris. És millor que sigui una imatge quadrada de 256px de costat.',
+    'profile_admin_options' => 'Preferències d’administrador',
+    'profile_admin_options_desc' => 'Podeu trobar preferències addicionals d’administrador pel vostre compte, com ara les que gestionen els rols d’usuari, a &laquo;Preferències &rsaquo; Usuaris&raquo;.',
 
     'delete_account' => 'Suprimeix el compte',
     'delete_my_account' => 'Suprimeix el meu compte',
-    'delete_my_account_desc' => 'Se suprimirà completament el vostre compte d’usuari del sistema. No podreu recuperar aquest compte ni revertir aquesta acció. El contingut que hàgiu creat, com ara les pàgines creades o les imatges pujades, es mantindrà.',
-    'delete_my_account_warning' => 'Segur que voleu suprimir el vostre compte?',
+    'delete_my_account_desc' => 'Se suprimirà completament del sistema el vostre compte d’usuari. No podreu recuperar el compte ni revertir-ne la supressió. Es conservarà el contingut que hàgiu creat, com ara les pàgines o les imatges que hàgiu pujat.',
+    'delete_my_account_warning' => 'Esteu segur que voleu suprimir el vostre compte?',
 ];
index 5fe9d3bffe7db0e8f3563cf9a0e49f26a42368ff..6bb1e8b698991d10247fd10f7a53e93afd6e714e 100644 (file)
@@ -8,119 +8,119 @@ return [
 
     // Common Messages
     'settings' => 'Configuració',
-    'settings_save' => 'Desa la configuració',
-    'system_version' => 'Versió del sistema',
+    'settings_save' => 'Configuració de desat',
+    'system_version' => 'Versió de sistema',
     'categories' => 'Categories',
 
     // App Settings
     'app_customization' => 'Personalització',
-    'app_features_security' => 'Funcionalitats i seguretat',
+    'app_features_security' => 'Funcions i seguretat',
     'app_name' => 'Nom de l’aplicació',
-    'app_name_desc' => 'Aquest nom es mostra a la capçalera i en tots els correus electrònics enviats pel sistema.',
+    'app_name_desc' => 'El nom es mostra a la capçalera i als correus electrònics enviats pel sistema.',
     'app_name_header' => 'Mostra el nom a la capçalera',
     'app_public_access' => 'Accés públic',
-    'app_public_access_desc' => 'Si activeu aquesta opció, es permetrà que els visitants que no hagin iniciat la sessió accedeixin al contingut de la vostra instància del BookStack.',
-    'app_public_access_desc_guest' => 'Podeu controlar l’accés dels visitants públics amb l’usuari «Convidat».',
+    'app_public_access_desc' => 'Si activeu aquesta opció les visitants podran accedir a la vostra instància del BookStack sense iniciar sessió.',
+    'app_public_access_desc_guest' => 'L’accés per als visitants públics es pot gestionar amb l’usuari &laquo;Convidat&raquo;.',
     'app_public_access_toggle' => 'Permet l’accés públic',
-    'app_public_viewing' => 'Voleu permetre la visualització pública?',
-    'app_secure_images' => 'Pujades d’imatges amb més seguretat',
-    'app_secure_images_toggle' => 'Activa les pujades d’imatges amb més seguretat',
-    'app_secure_images_desc' => 'Per motius de rendiment, totes les imatges són públiques. Aquesta opció afegeix una cadena aleatòria i difícil d’endevinar al davant dels URL d’imatges. Assegureu-vos que els índexs de directoris no estiguin activats per a evitar-hi l’accés de manera fàcil.',
+    'app_public_viewing' => 'Esteu segur que voleu permetre l’accés públic?',
+    'app_secure_images' => 'Pujada d’imatges amb més seguretat',
+    'app_secure_images_toggle' => 'Habilita la pujada d’imatges amb més seguretat',
+    'app_secure_images_desc' => 'Per raons de rendiment, totes les imatges són públiques. Aquesta opció afegeix una cadena aleatòria que és difícil d’endevinar al davant de l’URL de les imatges. Assegureu-vos que els índex de carpetes estan desactivats perquè no s’hi pugui accedir fàcilment.',
     'app_default_editor' => 'Editor de pàgines per defecte',
-    'app_default_editor_desc' => 'Seleccioneu quin editor es farà servir per defecte en editar pàgines noves. Es pot canviar a nivell de pàgina si els permisos ho permeten.',
+    'app_default_editor_desc' => 'Seleccioneu quin editor s’utilitzarà per defecte quan s’editin pàgines noves. Això es pot sobreescriure a nivell de pàgina si els permisos ho permeten.',
     'app_custom_html' => 'Contingut personalitzat a la capçalera HTML',
-    'app_custom_html_desc' => 'Aquí podeu afegir contingut que s’inserirà a la part final de la secció <head> de cada pàgina. És útil per a sobreescriure estils o afegir-hi codi d’analítiques.',
-    'app_custom_html_disabled_notice' => 'El contingut personalitzat a la capçalera HTML es desactiva en aquesta pàgina de la configuració per a assegurar que qualsevol canvi que trenqui el web es pugui desfer.',
-    'app_logo' => 'Logo de l’aplicació',
-    'app_logo_desc' => 'Es fa servir a la barra de la capçalera de l’aplicació, a banda d’altres zones. Aquesta imatge ha de fer 86 px d’alçada. Les imatges massa grosses es reduiran.',
+    'app_custom_html_desc' => 'El contingut que s’afegeixi aquí s’inserirà al final de la secció <head> de cada pàgina. Això permet sobreescriure els estils o afegir codi d’analítiques web.',
+    'app_custom_html_disabled_notice' => 'El contingut personalitzat a la capçalera HTML està desactivat en aquesta pàgina perquè es puguin revertir els canvis que trenquin el lloc web.',
+    'app_logo' => 'Logotip de l’aplicació',
+    'app_logo_desc' => 'El logotip s’utilitzarà a la barra de la capçalera de l’aplicació, entre d’altres llocs. La imatge ha de tenir 86px d’alçada. Les imatges més grans es reduiran.',
     'app_icon' => 'Icona de l’aplicació',
-    'app_icon_desc' => 'Aquesta icona es fa servir a la pestanya del navegador i a les icones de les dreceres. Hauria de ser una imatge PNG quadrada de 256 px.',
+    'app_icon_desc' => 'La icona s’utilitzarà a les pestanyes del navegador i a les icones de les adreces. La imatge ha de ser un PNG quadrat de 256px de costat.',
     'app_homepage' => 'Pàgina d’inici de l’aplicació',
-    'app_homepage_desc' => 'Seleccioneu la visualització que es mostrarà a la pàgina d’inici en lloc de la visualització per defecte. Els permisos de pàgines s’ignoraran per a les pàgines seleccionades.',
-    'app_homepage_select' => 'Selecciona una pàgina',
-    'app_footer_links' => 'Enllaços al peu de pàgina',
-    'app_footer_links_desc' => 'Afegiu enllaços que es mostraran al peu de pàgina del lloc. Es mostraran a la part inferior de la majoria de pàgines, incloent-hi les que no requereixen iniciar la sessió. Podeu utilitzar l’etiqueta «trans::<clau>» per a fer servir traduccions definides pel sistema. Per exemple, si feu servir «trans::common.privacy_policy», es mostrarà el text traduït «Política de privadesa», i amb «trans::common.terms_of_service» es mostrarà el text traduït «Condicions del servei».',
-    'app_footer_links_label' => 'Etiqueta de l’enllaç',
+    'app_homepage_desc' => 'Seleccioneu una vista per a mostrar a la pàgina d’inici en comptes de la vista per defecte. Els permisos de pàgina s’ignoren a les pàgines seleccionades.',
+    'app_homepage_select' => 'Seleccioneu una pàgina',
+    'app_footer_links' => 'Enllaços del peu de pàgina',
+    'app_footer_links_desc' => 'Afegiu enllaços per a mostrar al peu de pàgina. Els enllaços es mostraran al final de la majoria de les pàgines, incloent-hi les pàgines per a les que no es requereix iniciar sessió. Podeu utilitzar una etiqueta &laquo;trans::<key>&raquo; per a utilitzar traduccions definides pel sistema. Per exemple: Si utilitzeu &laquo;trans::common.privacy_policy&raquo; es mostrarà la traducció de &laquo;Privacy Policy&raquo; i si utilitzeu &laquo;trans::common.terms_of_service&raquo; es mostrarà la traducció de &laquo;Terms of Service&raquo;.',
+    'app_footer_links_label' => 'Text de l’enllaç',
     'app_footer_links_url' => 'URL de l’enllaç',
-    'app_footer_links_add' => 'Afegeix un enllaç al peu de pàgina',
+    'app_footer_links_add' => 'Afegeix l’enllaç en el peu de pàgina',
     'app_disable_comments' => 'Desactiva els comentaris',
     'app_disable_comments_toggle' => 'Desactiva els comentaris',
-    'app_disable_comments_desc' => 'Desactiva els comentaris a totes les pàgines de l’aplicació. <br> Els comentaris existents no es mostraran.',
+    'app_disable_comments_desc' => 'Desactiva els comentaris a totes les pàgines de l’aplicació. <br> Els comentaris existents no es mostraran.',
 
     // Color settings
     'color_scheme' => 'Esquema de colors de l’aplicació',
-    'color_scheme_desc' => 'Definiu els colors que s’utilitzaran a la interfície d’usuari de l’aplicació. Els colors es poden configurar de manera separada per als modes fosc i clar perquè encaixin millor amb el tema i n’assegurin la llegibilitat.',
-    'ui_colors_desc' => 'Definiu el color primari de l’aplicació i el color per defecte dels enllaços. El color primari es fa servir sobretot per a la capçalera, els botons i la decoració de la interfície. El color per defecte dels enllaços s’utilitza per als enllaços de text i les  accions, tant al contingut escrit com a la interfície de l’aplicació.',
-    'app_color' => 'Color primari',
+    'color_scheme_desc' => 'Configureu els colors que s’utilitzaran a la interfície d’usuari de l’aplicació. Podeu configurar els colors pel mode clar o el mode fosc per separat perquè escaigui millor al tema i assegurar la llegibilitat.',
+    'ui_colors_desc' => 'Configureu el color principal de l’aplicació i el color per defecte dels enllaços. El color principal s’utilitza al bàner de la capçalera, els botons i les decoracions de la interfície. El color per defecte dels enllaços s’utilitza a les accions i els enllaços de text, tant al contingut escrit com a la interfície de l’aplicació.',
+    'app_color' => 'Color principal',
     'link_color' => 'Color per defecte dels enllaços',
-    'content_colors_desc' => 'Definiu els colors per a tots els elements de la jerarquia d’organització de pàgines. És recomanable triar colors amb una brillantor similar a la dels colors per defecte per a millorar la llegibilitat.',
+    'content_colors_desc' => 'Configureu els colors per a tots els elements en la jerarquia de l’organització de la pàgina. És recomanable que trieu uns colors amb una brillantor similar a la dels colors per defecte per assegurar la llegibilitat.',
     'bookshelf_color' => 'Color dels prestatges',
     'book_color' => 'Color dels llibres',
     'chapter_color' => 'Color dels capítols',
     'page_color' => 'Color de les pàgines',
-    'page_draft_color' => 'Color dels esborranys de pàgines',
+    'page_draft_color' => 'Color de les pàgines d’esborrany',
 
     // Registration Settings
     'reg_settings' => 'Registre',
     'reg_enable' => 'Activa el registre d’usuaris',
     'reg_enable_toggle' => 'Activa el registre d’usuaris',
-    'reg_enable_desc' => 'Si els registres estan activats, els usuaris podran registrar-se ells mateixos com a usuaris de l’aplicació. Un cop registrats, se’ls assigna un únic rol d’usuari per defecte.',
-    'reg_default_role' => 'Rol d’usuari per defecte en registrar-se',
-    'reg_enable_external_warning' => 'L’opció anterior s’ignora quan hi ha activada l’autenticació SAML o LDAP externa. Els comptes d’usuari de membres inexistents es crearan automàticament si l’autenticació contra el sistema extern és satisfactòria.',
-    'reg_email_confirmation' => 'Confirmació de correu electrònic',
-    'reg_email_confirmation_toggle' => 'Requereix la confirmació per correu electrònic',
-    'reg_confirm_email_desc' => 'Si s’utilitza la restricció de dominis, serà obligatòria la confirmació per correu electrònic, i s’ignorarà aquesta opció.',
+    'reg_enable_desc' => 'Quan el registre està activat, els usuaris es podran registrar com a usuari de l’aplicació. Un cop registrat, se’ls assignarà un rol d’usuari per defecte únic.',
+    'reg_default_role' => 'Rol d’usuari per defecte després del registre.',
+    'reg_enable_external_warning' => 'S’ignorarà l’opció de sobre quan l’autenticació LDAP or SAML estigui activada. Es crearan automàticament comptes d’usuari per als membres que encara no ho siguin si no és possible l’autenticació amb els sistema d’autenticació extern.',
+    'reg_email_confirmation' => 'Correu electrònic de confirmació',
+    'reg_email_confirmation_toggle' => 'Requereix un correu electrònic de confirmació',
+    'reg_confirm_email_desc' => 'Si s’utilitza la restricció de dominis es requerirà un correu electrònic de confirmació i s’ignorarà aquesta opció.',
     'reg_confirm_restrict_domain' => 'Restricció de dominis',
-    'reg_confirm_restrict_domain_desc' => 'Introduïu una llista separada per comes de dominis de correu electrònic als quals voleu restringir els registres. S’enviarà un correu electrònic als usuaris perquè confirmin la seva adreça abans de permetre’ls interactuar amb l’aplicació. <br> Tingueu en compte que els usuaris podran canviar les seves adreces electròniques després de registrar-se correctament.',
+    'reg_confirm_restrict_domain_desc' => 'Introduïu una llista separada per comes dels dominis a què voleu restringir el registre. S’enviarà un correu electrònic als usuaris perquè confirmin la seva adreça electrònica abans que puguin interactuar amb l’aplicació. <br> Tingueu en compte que els usuaris podran canviar l’adreça electrònica un cop s’hagin registrat.',
     'reg_confirm_restrict_domain_placeholder' => 'No hi ha cap restricció',
 
     // Maintenance settings
     'maint' => 'Manteniment',
-    'maint_image_cleanup' => 'Neteja les imatges',
-    'maint_image_cleanup_desc' => 'Escaneja el contingut de les pàgines i les revisions per a comprovar quines imatges i diagrames estan en ús actualment i quines imatges són redundants. Assegureu-vos de crear una còpia de seguretat completa de la base de dades i de les imatges abans d’executar això.',
-    'maint_delete_images_only_in_revisions' => 'Suprimeix també les imatges que només existeixin en revisions antigues de pàgines',
+    'maint_image_cleanup' => 'Neteja d’imatges',
+    'maint_image_cleanup_desc' => 'Escanegeu les pàgines i les revisions per a comprovar quines imatges o dibuixos s’utilitzen i quins no. Assegureu-vos de crear una còpia de seguretat completa de la base de dades i de les imatges abans d’executar-la.',
+    'maint_delete_images_only_in_revisions' => 'Suprimiu també les imatges que només existeixen en revisions de pàgina antigues.',
     'maint_image_cleanup_run' => 'Executa la neteja',
-    'maint_image_cleanup_warning' => 'S’han trobat :count imatges potencialment no utilitzades. Segur que voleu suprimir aquestes imatges?',
-    'maint_image_cleanup_success' => 'S’han trobat i suprimit :count imatges potencialment no utilitzades!',
-    'maint_image_cleanup_nothing_found' => 'No s’ha trobat cap imatge no utilitzada, així que no s’ha suprimit res!',
-    'maint_send_test_email' => 'Envia un correu electrònic de prova',
-    'maint_send_test_email_desc' => 'Envia un correu electrònic de prova a l’adreça electrònica que hàgiu especificat al perfil.',
+    'maint_image_cleanup_warning' => 'Imatges que potencialment no s’utilitzen: :count. Esteu segur que voleu suprimir aquestes imatges?',
+    'maint_image_cleanup_success' => 'Imatges que potencialment no s’utilitzen que s’han suprimit: :count.',
+    'maint_image_cleanup_nothing_found' => 'No s’ha trobat cap imatge que no s’utilitzi. No s’ha suprimit res.',
+    'maint_send_test_email' => 'Envia un correu electrònic de prova.',
+    'maint_send_test_email_desc' => 'S’enviarà un correu electrònic de prova a l’adreça electrònica que figura al vostre perfil.',
     'maint_send_test_email_run' => 'Envia el correu electrònic de prova',
-    'maint_send_test_email_success' => 'S’ha enviat el correu electrònic a :address',
+    'maint_send_test_email_success' => 'S’ha enviat un correu electrònic a :address',
     'maint_send_test_email_mail_subject' => 'Correu electrònic de prova',
-    'maint_send_test_email_mail_greeting' => 'El lliurament de correus electrònics sembla que funciona!',
-    'maint_send_test_email_mail_text' => 'Enhorabona! Com que heu rebut aquesta notificació per correu electrònic, la vostra configuració del correu electrònic sembla que està ben configurada.',
-    'maint_recycle_bin_desc' => 'Els prestatges, llibres, capítols i pàgines suprimits s’envien a la paperera de reciclatge perquè es puguin restaurar o suprimir de manera permanent. Pot ser que els elements més antics de la paperera de reciclatge se suprimeixin automàticament després d’un temps, depenent de la configuració del sistema.',
-    'maint_recycle_bin_open' => 'Obre la paperera de reciclatge',
+    'maint_send_test_email_mail_greeting' => 'Sembla que l’enviament de correus electrònics funciona.',
+    'maint_send_test_email_mail_text' => 'Enhorabona! Que hagis rebut aquesta notificació de correu electrònic vol dir que la vostra configuració de correu electrònic és correcta.',
+    'maint_recycle_bin_desc' => 'Els prestatges, els llibres, els capítols i les pàgines suprimides s’envien a la paperera perquè es puguin restaurar o suprimir permanentment. És possible que els elements que fa més temps que són a la paperera s’eliminin automàticament al cap d’un temps segons la configuració del sistema.',
+    'maint_recycle_bin_open' => 'Obre la paperera',
     'maint_regen_references' => 'Regenera les referències',
-    'maint_regen_references_desc' => 'Aquesta acció reconstruirà l’índex de referències entre elements de la base de dades. Normalment es gestiona automàticament, però aquesta acció pot ser útil per a indexar contingut antic o contingut afegit mitjançant mètodes no oficials.',
-    'maint_regen_references_success' => 'L’índex de referències s’ha regenerat!',
-    'maint_timeout_command_note' => 'Nota: Aquesta acció pot trigar estona a executar-se, la qual cosa pot provocar errors de temps d’expera excedits en alguns entorns web. Com a alternativa, podeu executar aquesta acció en una ordre al terminal.',
+    'maint_regen_references_desc' => 'Aquesta acció reconstruirà l’índex de referències creuades entre elements a la base de dades. Normalment es fa automàticament però aquesta acció és útil per a indexar contingut antic o contingut afegit a través de mètodes no oficials.',
+    'maint_regen_references_success' => 'S’ha regenerat l’índex de referències.',
+    'maint_timeout_command_note' => 'Nota: És possible que aquesta acció trigui a executar-se cosa que pot provocar que s’excedeixi el temps d’espera en alguns entorns web. Com a alternativa, podeu executar aquesta acció amb una ordre del terminal.',
 
     // Recycle Bin
-    'recycle_bin' => 'Paperera de reciclatge',
-    'recycle_bin_desc' => 'Aquí podeu restaurar els elements que hàgiu suprimit o triar suprimir-los del sistema de manera permanent. Aquesta llista no té cap filtre, al contrari que altres llistes d’activitat similars en què es tenen en compte els filtres de permisos.',
+    'recycle_bin' => 'Paperera',
+    'recycle_bin_desc' => 'Aquí podeu restaurar els elements que s’han suprimit o suprimir-los permanentment del sistema. Aquesta llista no està filtrada, a diferència de llistes d’activitat similars on s’apliquen filtres de permisos.',
     'recycle_bin_deleted_item' => 'Element suprimit',
     'recycle_bin_deleted_parent' => 'Pare',
     'recycle_bin_deleted_by' => 'Suprimit per',
-    'recycle_bin_deleted_at' => 'Moment de la supressió',
-    'recycle_bin_permanently_delete' => 'Suprimeix permanentment',
+    'recycle_bin_deleted_at' => 'Hora de supressió',
+    'recycle_bin_permanently_delete' => 'Suprimit permanentment',
     'recycle_bin_restore' => 'Restaura',
-    'recycle_bin_contents_empty' => 'La paperera de reciclatge és buida',
-    'recycle_bin_empty' => 'Buida la paperera de reciclatge',
-    'recycle_bin_empty_confirm' => 'Se suprimiran de manera permanent tots els elements de la paperera de reciclatge, incloent-hi el contingut dins de cada element. Segur que voleu buidar la paperera de reciclatge?',
+    'recycle_bin_contents_empty' => 'La paperera és buida',
+    'recycle_bin_empty' => 'Buida la paperera',
+    'recycle_bin_empty_confirm' => 'Se suprimiran permanentment tots els elements que hi ha a la paperera incloent-hi el contingut que hi hagi a cada element. Esteu segur que voleu buidar la paperera?',
     'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
-    'recycle_bin_destroy_list' => 'Elements que es destruiran',
-    'recycle_bin_restore_list' => 'Elements que es restauraran',
-    'recycle_bin_restore_confirm' => 'Aquesta acció restaurarà l’element suprimit, incloent-hi tots els elements fills, a la seva ubicació original. Si la ubicació original ha estat suprimida, i ara és a la paperera de reciclatge, caldrà que també en restaureu l’element pare.',
-    'recycle_bin_restore_deleted_parent' => 'El pare d’aquest element també ha estat suprimit. L’element es mantindrà suprimit fins que el pare també es restauri.',
-    'recycle_bin_restore_parent' => 'Restaura’n el pare',
-    'recycle_bin_destroy_notification' => 'S’han suprimit :count elements en total de la paperera de reciclatge.',
-    'recycle_bin_restore_notification' => 'S’han restaurat :count elements en total de la paperera de reciclatge.',
+    'recycle_bin_destroy_list' => 'Elements per destruir',
+    'recycle_bin_restore_list' => 'Elements per restaurar',
+    'recycle_bin_restore_confirm' => 'Aquesta acció restaurarà l’element suprimit, incloent-hi els elements fills, a la seva ubicació original. Si la ubicació original s’ha suprimit i és a la paperera, l’element pare també s’haurà de restaurar.',
+    'recycle_bin_restore_deleted_parent' => 'El pare d’aquest element també s’ha suprimit. L’element continuarà suprimit fins que no se’n restauri també el pare.',
+    'recycle_bin_restore_parent' => 'Restaura el pare',
+    'recycle_bin_destroy_notification' => 'Elements suprimits de la paperera: :count.',
+    'recycle_bin_restore_notification' => 'Elements restaurats de la paperera: :count.',
 
     // Audit Log
     'audit' => 'Registre d’auditoria',
-    'audit_desc' => 'Aquest registre d’auditoria mostra una llista d’activitats registrades al sistema. Aquesta llista no té cap filtre, al contrari que altres llistes d’activitat similars en què es tenen en compte els filtres de permisos.',
+    'audit_desc' => 'El registre d\'auditoria mostra una llista de les activitats de què es fa un seguiment. Aquesta llista no està filtrada, a diferència de llistes d’activitat similars on s’apliquen filtres de permisos.',
     'audit_event_filter' => 'Filtre d’esdeveniments',
     'audit_event_filter_no_filter' => 'Sense filtre',
     'audit_deleted_item' => 'Element suprimit',
@@ -130,150 +130,150 @@ return [
     'audit_table_related' => 'Element relacionat o detall',
     'audit_table_ip' => 'Adreça IP',
     'audit_table_date' => 'Data de l’activitat',
-    'audit_date_from' => 'Rang de dates a partir de',
-    'audit_date_to' => 'Rang de rates fins a',
+    'audit_date_from' => 'Des de',
+    'audit_date_to' => 'Fins a',
 
     // Role Settings
     'roles' => 'Rols',
     'role_user_roles' => 'Rols d’usuari',
-    'roles_index_desc' => 'Els rols s’utilitzen per a agrupar usuaris i proporcionar permisos del sistema a llurs membres. Quan un usuari és membre de múltiples rols, els privilegis que li concedeixin s’acumularan i l’usuari heretarà totes les habilitats.',
+    'roles_index_desc' => 'Els rols d’usuari s’utilitzen per a agrupar usuaris i donar-los permisos conjuntament. Un usuari que tingui més d’un rol acumularà els privilegis que s’atorguin a tots els rols i n’heretarà els permisos.',
     'roles_x_users_assigned' => ':count usuari assignat|:count usuaris assignats',
     'roles_x_permissions_provided' => ':count permís|:count permisos',
     'roles_assigned_users' => 'Usuaris assignats',
-    'roles_permissions_provided' => 'Permisos proporcionats',
-    'role_create' => 'Crea un rol nou',
-    'role_delete' => 'Suprimeix el rol',
-    'role_delete_confirm' => 'Se suprimirà el rol amb el nom «:roleName».',
-    'role_delete_users_assigned' => 'Aquest rol té :userCount usuaris assignats. Si voleu migrar els usuaris d’aquest rol, seleccioneu un rol nou a continuació.',
+    'roles_permissions_provided' => 'Permisos atorgats',
+    'role_create' => 'Crea un rol',
+    'role_delete' => 'Suprimeix un rol',
+    'role_delete_confirm' => 'Se suprimirà el rol &laquo;:roleName&raquo;.',
+    'role_delete_users_assigned' => 'Usuaris assignats en aquest rol: :userCount. Si voleu migrar aquests usuaris a un altre rol, seleccioneu-ne un dels de sota.',
     'role_delete_no_migration' => "No migris els usuaris",
-    'role_delete_sure' => 'Segur que voleu suprimir aquest rol?',
+    'role_delete_sure' => 'Esteu segur que voleu suprimir aquest rol?',
     'role_edit' => 'Edita el rol',
     'role_details' => 'Detalls del rol',
     'role_name' => 'Nom del rol',
-    'role_desc' => 'Descripció curta del rol',
-    'role_mfa_enforced' => 'Requereix autenticació de múltiple factor',
+    'role_desc' => 'Descripció del rol',
+    'role_mfa_enforced' => 'Autenticació multifactorial requerida',
     'role_external_auth_id' => 'Identificadors d’autenticació externa',
     'role_system' => 'Permisos del sistema',
-    'role_manage_users' => 'Gestiona usuaris',
-    'role_manage_roles' => 'Gestiona rols i permisos de rols',
-    'role_manage_entity_permissions' => 'Gestiona els permisos de tots els llibres, capítols i pàgines',
-    'role_manage_own_entity_permissions' => 'Gestiona els permisos dels llibres, capítols i pàgines propis',
-    'role_manage_page_templates' => 'Gestiona les plantilles de pàgines',
-    'role_access_api' => 'Accedeix a l’API del sistema',
-    'role_manage_settings' => 'Gestiona la configuració de l’aplicació',
-    'role_export_content' => 'Exporta el contingut',
-    'role_editor_change' => 'Canvia l’editor de pàgines',
-    'role_notifications' => 'Rep i gestiona les notificacions',
+    'role_manage_users' => 'Gestió dels usuaris',
+    'role_manage_roles' => 'Gestió dels rols i els seus permisos',
+    'role_manage_entity_permissions' => 'Gestió de tots els permisos de llibres, capítols i pàgines',
+    'role_manage_own_entity_permissions' => 'Gestió dels permisos als seus llibres, capítols i pàgines',
+    'role_manage_page_templates' => 'Gestió de les plantilles de pàgina',
+    'role_access_api' => 'Accés a l’API del sistema',
+    'role_manage_settings' => 'Gestió de la configuració de l’aplicació',
+    'role_export_content' => 'Exportació de contingut',
+    'role_editor_change' => 'Canvi de l’editor de pàgina',
+    'role_notifications' => 'Recepció i gestió de notificacions',
     'role_asset' => 'Permisos de recursos',
-    'roles_system_warning' => 'Tingueu en compte que l’accés a qualsevol dels tres permisos de dalt pot permetre que un usuari alteri els seus propis permisos o els privilegis d’altres usuaris del sistema. Assigneu rols amb aquests permisos només a usuaris de confiança.',
-    'role_asset_desc' => 'Aquests permisos controlen l’accés per defecte als recursos del sistema. Els permisos de llibres, capítols i pàgines tindran més importància que aquests permisos.',
-    'role_asset_admins' => 'Els administradors tenen accés automàticament a tot el contingut, però aquestes opcions poden mostrar o amagar opcions de la interfície d’usuari.',
-    'role_asset_image_view_note' => 'Això és relatiu a la visibilitat dins del gestor d’imatges. L’accés real als fitxers d’imatge pujats dependrà de l’opció d’emmagatzematge d’imatges del sistema.',
+    'roles_system_warning' => 'Tingueu en compte que l’accés a qualsevol dels tres permisos de dalt permeten que l’usuari canviï els seus privilegis i els privilegis d’altres usuaris. Assigneu rols d’usuari amb aquests permisos només a usuaris de confiança.',
+    'role_asset_desc' => 'Aquests permisos controlen l’accés per defecte als recursos del sistema. El permisos dels llibres, capítols i pàgines sobreescriuran aquests permisos.',
+    'role_asset_admins' => 'Als administradors se’ls dona accés automàticament a tot el contingut però aquestes opcions mostren o amaguen opcions de la interfície d’usuari.',
+    'role_asset_image_view_note' => 'Això té relació amb la visibilitat al gestor d’imatges. L’accés a les imatges pujades dependrà de l’opció d’emmagatzematge d’imatges dels sistema.',
     'role_all' => 'Tot',
     'role_own' => 'Propi',
-    'role_controlled_by_asset' => 'Controlat pel recurs en què es pugen',
+    'role_controlled_by_asset' => 'Controlat pel recurs a què estan pujats',
     'role_save' => 'Desa el rol',
-    'role_users' => 'Usuaris amb aquest rol',
-    'role_users_none' => 'Ara mateix no hi ha cap usuari assignat a aquest rol',
+    'role_users' => 'Usuaris assignats en aquest rol',
+    'role_users_none' => 'No hi ha cap usuari assignat en aquest rol',
 
     // Users
     'users' => 'Usuaris',
-    'users_index_desc' => 'Creeu i gestioneu comptes d’usuari individuals dins del sistema. Els comptes d’usuari s’utilitzen per a iniciar la sessió i atribuir el contingut i les activitats. Els permisos d’accés són principalment basats en rols, però si un usuari és propietari o no d’un contingut, entre altres factors, també pot afectar-ne els permisos i l’accés.',
-    'user_profile' => 'Perfil de l’usuari',
+    'users_index_desc' => 'Creeu i gestioneu comptes d’usuari individuals. Els comptes d’usuari s’utilitzen per als inicis de sessió i les atribucions de contingut i activitat. Els permisos d’accés es basen fonamentalment en el rol d’usuari però la propietat del contingut, entre d’altres, també afecta els permisos i l’accés.',
+    'user_profile' => 'Perfil d’usuari',
     'users_add_new' => 'Afegeix un usuari nou',
     'users_search' => 'Cerca usuaris',
-    'users_latest_activity' => 'Darrera activitat',
+    'users_latest_activity' => 'Activitat més recent',
     'users_details' => 'Detalls de l’usuari',
-    'users_details_desc' => 'Definiu un nom públic i una adreça electrònica per a aquest usuari. L’adreça electrònica es farà servir per a iniciar la sessió a l’aplicació.',
-    'users_details_desc_no_email' => 'Definiu un nom públic per a aquest usuari perquè els altres el puguin reconèixer.',
-    'users_role' => 'Rols de l’usuari',
-    'users_role_desc' => 'Seleccioneu a quins rols s’assignarà l’usuari. Si un usuari s’assigna a múltiples rols, els permisos dels rols s’acumularan i l’usuari rebrà totes les habilitats dels rols assignats.',
-    'users_password' => 'Contrasenya de l’usuari',
-    'users_password_desc' => 'Definiu una contrasenya que s’utilitzarà per a iniciar la sessió a l’aplicació. Cal que tingui un mínim de 8 caràcters.',
-    'users_send_invite_text' => 'Podeu elegir enviar un correu d’invitació a aquest usuari, la qual cosa li permetrà definir la seva contrasenya, o podeu definir-li una contrasenya vós.',
-    'users_send_invite_option' => 'Envia un correu d’invitació a l’usuari',
+    'users_details_desc' => 'Configureu un nom i una adreça electrònica per a aquest usuari. L’adreça electrònica s’usarà per a iniciar sessió a l’aplicació.',
+    'users_details_desc_no_email' => 'Configureu un nom per a aquest usuari perquè se’l pugui reconèixer.',
+    'users_role' => 'Rols d’usuari',
+    'users_role_desc' => 'Seleccioneu quins rols s’assignaran en aquest usuari. Si a un usuari se li assignen més d’un rol acumularà els privilegis que s’atorguin a tots els rols i n’heretarà les els permisos.',
+    'users_password' => 'Contrasenya d’usuari',
+    'users_password_desc' => 'Configureu la contrasenya que s’utilitzarà per a iniciar sessió a l’aplicació. Ha de tenir com a mínim 8 caràcters.',
+    'users_send_invite_text' => 'Podeu configurar la contrasenya o enviar un correu electrònic que convidi a l’usuari a configurar-la.',
+    'users_send_invite_option' => 'Envia el correu electrònic',
     'users_external_auth_id' => 'Identificador d’autenticació extern',
-    'users_external_auth_id_desc' => 'Quan es fa servir un sistema d’autenticació extern (com ara SAML2, OIDC o LDAP), aquest és l’identificador que enllaça aquest usuari del BookStack amb el compte del sistema d’autenticació. Podeu ignorar aquest camp si feu servir l’autenticació basada en correu electrònic per defecte.',
-    'users_password_warning' => 'Ompliu-ho només si voleu canviar la contrasenya d’aquest usuari.',
-    'users_system_public' => 'Aquest usuari representa qualsevol usuari convidat que visita la vostra instància. No es pot fer servir per a iniciar la sessió, però s’assigna automàticament.',
+    'users_external_auth_id_desc' => 'Quan s’utilitza un sistema d’autenticació extern (com ara SAML2, OIDC or LDAP) l’identificador enllaça l’usuari amb el compte dels sistema d’autenticació. Podeu ignorar aquest camp si utilitzeu l’autenticació amb correu electrònic per defecte.',
+    'users_password_warning' => 'Ompliu els camps de sota només si voleu canviar la contrasenya d’aquest usuari.',
+    'users_system_public' => 'Aquest usuari representa qualsevol usuari convidat que visiti la instància. No es pot utilitzar per a iniciar sessió sinó que s’assigna automàticament.',
     'users_delete' => 'Suprimeix l’usuari',
     'users_delete_named' => 'Suprimeix l’usuari :userName',
-    'users_delete_warning' => 'Se suprimirà completament del sistema l’usuari amb el nom «:userName».',
-    'users_delete_confirm' => 'Segur que voleu suprimir aquest usuari?',
-    'users_migrate_ownership' => 'Migra l’autoria',
-    'users_migrate_ownership_desc' => 'Seleccioneu un usuari si voleu que un altre usuari esdevingui el propietari de tots els elements que ara són propietat d’aquest usuari.',
-    'users_none_selected' => 'No hi ha cap usuari seleccionat',
+    'users_delete_warning' => 'Se suprimirà l’usuari &laquo;:userName&raquo; del sistema.',
+    'users_delete_confirm' => 'Esteu segur que voleu suprimir aquest usuari?',
+    'users_migrate_ownership' => 'Migració de la propietat',
+    'users_migrate_ownership_desc' => 'Si voleu que un altre usuari esdevingui el propietari de tots els elements d’aquest usuari, seleccioneu-ne un.',
+    'users_none_selected' => 'No s’ha seleccionat cap usuari',
     'users_edit' => 'Edita l’usuari',
     'users_edit_profile' => 'Edita el perfil',
-    'users_avatar' => 'Avatar de l’usuari',
-    'users_avatar_desc' => 'Seleccioneu una imatge que representi aquest usuari. Hauria de ser un quadrat d’aproximadament 256 px.',
-    'users_preferred_language' => 'Llengua preferida',
-    'users_preferred_language_desc' => 'Aquesta opció canviarà la llengua utilitzada a la interfície d’usuari de l’aplicació. No afectarà el contingut creat pels usuaris.',
-    'users_social_accounts' => 'Comptes socials',
-    'users_social_accounts_desc' => 'Vegeu l’estat dels comptes socials connectats d’aquest usuari. Els comptes socials es poden fer servir per a accedir al sistema de manera addicional al sistema d’autenticació principal.',
-    'users_social_accounts_info' => 'Aquí podeu connectar altres comptes per a un inici de sessió més ràpid i còmode. Si desconnecteu un compte aquí, no en revoqueu l’accés d’autorització donat amb anterioritat. Revoqueu-hi l’accés a la configuració del perfil del compte social que hàgiu connectat.',
-    'users_social_connect' => 'Connecta un compte',
+    'users_avatar' => 'Avatar',
+    'users_avatar_desc' => 'Seleccioneu una imatge per a representar aquest usuari. Ha de ser una imatge quadrada de 256px de costat, aproximadament.',
+    'users_preferred_language' => 'Llengua',
+    'users_preferred_language_desc' => 'Canvia la llengua en què es mostra la interfície d’usuari de l’aplicació. No afectarà el contingut creat pels usuaris.',
+    'users_social_accounts' => 'Comptes a les xarxes socials',
+    'users_social_accounts_desc' => 'Mireu l’estat dels comptes socials connectats d’aquest usuari. També es poden utilitzar els comptes socials per a iniciar sessió a banda del sistema d’autenticació principal.',
+    'users_social_accounts_info' => 'Connecteu els vostres comptes socials per a iniciar sessió més ràpidament. La desconnexió d’un compte no revoca l’autorització d’accés atorgada prèviament. Revoqueu l’accés des de la configuració de perfil del compte social connectat.',
+    'users_social_connect' => 'Connecta el compte',
     'users_social_disconnect' => 'Desconnecta el compte',
     'users_social_status_connected' => 'Connectat',
     'users_social_status_disconnected' => 'Desconnectat',
-    'users_social_connected' => 'El compte de :socialAccount s’ha associat correctament al vostre perfil.',
-    'users_social_disconnected' => 'El compte de :socialAccount ’ha desassociat correctament del vostre perfil.',
-    'users_api_tokens' => 'Testimonis de l’API',
-    'users_api_tokens_desc' => 'Creeu i gestioneu els testimonis d’accés que s’utilitzen per a autenticar-vos a l’API REST del BookStack. Els permisos de l’API es gestionen fent servir l’usuari al qual pertany el testimoni.',
-    'users_api_tokens_none' => 'No s’ha creat cap testimoni de l’API per a aquest usuari',
+    'users_social_connected' => 'S’ha connectat el compte :socialAccount al vostre perfil.',
+    'users_social_disconnected' => 'S’ha desconnectat el compte :socialAccount del vostre perfil.',
+    'users_api_tokens' => 'Testimonis API',
+    'users_api_tokens_desc' => 'Creeu i gestioneu els testimonis d’accés que s’utilitzen per autenticar els usuaris amb la l’API REST del BookStack. Els permisos de l’API es gestionen a través de l’usuari a qui pertany el testimoni.',
+    'users_api_tokens_none' => 'No s’ha creat cap testimoni API per a aquest usuari',
     'users_api_tokens_create' => 'Crea un testimoni',
     'users_api_tokens_expires' => 'Caducitat',
     'users_api_tokens_docs' => 'Documentació de l’API',
-    'users_mfa' => 'Autenticació de múltiple factor',
-    'users_mfa_desc' => 'Configureu l’autenticació de múltiple factor com a capa extra de seguretat en el vostre compte d’usuari.',
-    'users_mfa_x_methods' => ':count mètode configurat|:count mètodes configurats',
-    'users_mfa_configure' => 'Configura els mètodes',
+    'users_mfa' => 'Autenticació multifactorial',
+    'users_mfa_desc' => 'Configureu l’autenticació multifactorial per a afegir una capa de seguretat extra al vostre compte d’usuari.',
+    'users_mfa_x_methods' => 'Hi ha :count mètode configurat|Hi ha :count mètodes configurats',
+    'users_mfa_configure' => 'Configura un mètode',
 
     // API Tokens
-    'user_api_token_create' => 'Crea un testimoni de l’API',
+    'user_api_token_create' => 'Crea un testimoni API',
     'user_api_token_name' => 'Nom',
-    'user_api_token_name_desc' => 'Poseu un nom llegible al vostre testimoni com a recordatori futur del propòsit al qual el voleu destinar.',
+    'user_api_token_name_desc' => 'Anomeneu el testimoni amb un nom entenedor que permeti saber-ne el propòsit.',
     'user_api_token_expiry' => 'Data de caducitat',
-    'user_api_token_expiry_desc' => 'Definiu una data en què aquest testimoni caducarà. Després d’aquesta data, les peticions fetes amb aquest testimoni deixaran de funcionar. Si deixeu aquest camp en blanc, es definirà una caducitat d’aquí a 100 anys.',
-    'user_api_token_create_secret_message' => 'Just després de crear aquest testimoni, es generaran i es mostraran un «Identificador del testimoni» i un «Secret del testimoni». El secret només es mostrarà una única vegada: assegureu-vos de copiar-lo a un lloc segur abans de continuar.',
-    'user_api_token' => 'Testimoni de l’API',
-    'user_api_token_id' => 'Identificador del testimoni',
-    'user_api_token_id_desc' => 'Aquest identificador és generat pel sistema per a aquest testimoni i no és editable i caldrà que el proporcioneu a les peticions a l’API.',
-    'user_api_token_secret' => 'Secret del testimoni',
-    'user_api_token_secret_desc' => 'Aquest secret és generat pel sistema per a aquest testimoni i caldrà que el proporcioneu a les peticions a l’API. Només es mostrarà aquesta única vegada, assegureu-vos de copiar-lo a un lloc segur.',
+    'user_api_token_expiry_desc' => 'Configureu la data de caducitat del testimoni. Un cop passada aquesta data, les sol·licituds fetes amb aquest testimoni no funcionaran. Si deixeu aquest camp en blanc, el testimoni caducarà d’aquí 100 anys.',
+    'user_api_token_create_secret_message' => 'Es crearà i es mostrarà un &laquo;identificador de testimoni&raquo; i un &laquo;secret de testimoni&raquo; immediatament després de crear aquest testimoni. El secret es mostrarà només un sol cop. Assegureu-vos d’anotar-lo i de desar-lo en un lloc segur abans de continuar.',
+    'user_api_token' => 'Testimoni API',
+    'user_api_token_id' => 'Identificador de testimoni',
+    'user_api_token_id_desc' => 'És un identificador no editable generat pel sistema per a aquest testimoni i que s’haurà de proporcionar en les sol·licituds API.',
+    'user_api_token_secret' => 'Secret de testimoni',
+    'user_api_token_secret_desc' => 'És un secret generat pel sistema per a aquest testimoni i que s’haurà de proporcionar en les sol·licituds API. Es mostrarà només un sol cop. Assegureu-vos d’anotar-lo i de desar-lo en un lloc segur abans de continuar.',
     'user_api_token_created' => 'Testimoni creat :timeAgo',
     'user_api_token_updated' => 'Testimoni actualitzat :timeAgo',
     'user_api_token_delete' => 'Suprimeix el testimoni',
-    'user_api_token_delete_warning' => 'Se suprimirà completament del sistema aquest testimoni de l’API amb el nom «:tokenName».',
-    'user_api_token_delete_confirm' => 'Segur que voleu suprimir aquest testimoni de l’API?',
+    'user_api_token_delete_warning' => 'Se suprimirà el testimoni API &laquo;:tokenName&raquo; del sistema.',
+    'user_api_token_delete_confirm' => 'Esteu segur que voleu suprimir aquest testimoni API?',
 
     // Webhooks
     'webhooks' => 'Webhooks',
-    'webhooks_index_desc' => 'Els webhooks són una manera d’enviar dades a URL externs quan es produeixen certes accions i esdeveniments al sistema, la qual cosa permet una integració basada en esdeveniments amb plataformes externs, com ara sistemes de missatgeria o de notificacions.',
-    'webhooks_x_trigger_events' => ':count esdeveniment disparador|:count elements disparadors',
-    'webhooks_create' => 'Crea un webhook nou',
-    'webhooks_none_created' => 'Encara no s’ha creat cap webhook.',
+    'webhooks_index_desc' => 'Els webhooks permeten enviar dades a URLs externs quan ocorren unes accions o esdeveniments determinats. Això permet la integració basada en esdeveniments amb plataformes externes com ara sistemes de missatgeria o notificació.',
+    'webhooks_x_trigger_events' => 'Hi ha :count esdeveniment disparador|Hi ha :count esdeveniments disparadors',
+    'webhooks_create' => 'Crea un webhook',
+    'webhooks_none_created' => 'No hi ha cap webhook',
     'webhooks_edit' => 'Edita el webhook',
     'webhooks_save' => 'Desa el webhook',
     'webhooks_details' => 'Detalls del webhook',
-    'webhooks_details_desc' => 'Proporcioneu un nom amigable i un endpoint POST com a ubicació on s’enviaran les dades del webhook.',
-    'webhooks_events' => 'Esdeveniments del webhook',
-    'webhooks_events_desc' => 'Seleccioneu tots els esdeveniments que haurien de fer que es cridés aquest webhook.',
-    'webhooks_events_warning' => 'Tingueu en compte que aquests esdeveniments es produiran per a tots els esdeveniments seleccionats, fins i tot si s’hi apliquen permisos personalitzats. Assegureu-vos que aquest webhook no exposarà contingut confidencial.',
+    'webhooks_details_desc' => 'Anomeneu el webhook amb un nom entenedor i proporcioneu un extrem POST com a ubicació on enviar les dades per al webhook.',
+    'webhooks_events' => 'Esdeveniments webhook',
+    'webhooks_events_desc' => 'Seleccioneu els esdeveniment que voleu que disparin la crida d’aquest webhook.',
+    'webhooks_events_warning' => 'Tingueu en compte que aquestes crides es dispararan a tots els esdeveniments seleccionats, inclús si s’apliquen permisos personalitzats. Assegureu-vos que l’ús d’aquest webhook no exposarà contingut confidencial.',
     'webhooks_events_all' => 'Tots els esdeveniments del sistema',
     'webhooks_name' => 'Nom del webhook',
-    'webhooks_timeout' => 'Temps d’espera de les peticions al webhook (en segons)',
-    'webhooks_endpoint' => 'Endpoint del webhook',
+    'webhooks_timeout' => 'Temps d’espera del webhook (en segons)',
+    'webhooks_endpoint' => 'Extrem del webhook',
     'webhooks_active' => 'Webhook actiu',
     'webhook_events_table_header' => 'Esdeveniments',
     'webhooks_delete' => 'Suprimeix el webhook',
-    'webhooks_delete_warning' => 'Se suprimirà completament del sistema el webhook amb el nom «:webhookName».',
-    'webhooks_delete_confirm' => 'Segur que voleu suprimir aquest webhook?',
-    'webhooks_format_example' => 'Exemple del format del webhook',
-    'webhooks_format_example_desc' => 'Les dades del webhook s’envien com una petició POST a l’endpoint configurat amb un JSON que segueix el següent format. Les propietats «related_item» i «url» són opcionals i dependran del tipus d’esdeveniment produït.',
+    'webhooks_delete_warning' => 'Se suprimirà el webhook &laquo;:webhookName&raquo; del sistema.',
+    'webhooks_delete_confirm' => 'Esteu segur que voleu suprimir aquest webhook?',
+    'webhooks_format_example' => 'Exemple de format de webhook',
+    'webhooks_format_example_desc' => 'Les dades d’un webhook s’envien com una sol·licitud POST a l’extrem configurat com a JSON amb el format següent. Les propietats &laquo;related_item&raquo; i &laquo;url&raquo; són opcionals i dependran del tipus d’esdeveniment que es dispari.',
     'webhooks_status' => 'Estat del webhook',
-    'webhooks_last_called' => 'Cridat per darrera vegada:',
-    'webhooks_last_errored' => 'Error per darrera vegada:',
+    'webhooks_last_called' => 'Darrera crida:',
+    'webhooks_last_errored' => 'Darrer error:',
     'webhooks_last_error_message' => 'Darrer missatge d’error:',
 
     // Licensing
index b73a66c5c6c3a986bae53f3d3cc5cdb6644e9a1d..dc9b02d5024036a865f8185312d509efa1f53231 100644 (file)
@@ -12,13 +12,13 @@ return [
     'active_url'           => 'El camp :attribute no és un URL vàlid.',
     'after'                => 'El camp :attribute ha de ser una data posterior a :date.',
     'alpha'                => 'El camp :attribute només pot contenir lletres.',
-    'alpha_dash'           => 'El camp :attribute només pot contenir lletres, números, guions i guions baixos.',
-    'alpha_num'            => 'El camp :attribute només pot contenir lletres i números.',
-    'array'                => 'El camp :attribute ha de ser un vector.',
-    'backup_codes'         => 'El codi que heu proporcionat no és vàlid o ja s’ha fet servir.',
-    'before'               => 'El camp :attribute ha de ser una data anterior a :date.',
+    'alpha_dash'           => 'El camp :attribute només pot contenir lletres, xifres, guionets i guions baixos.',
+    'alpha_num'            => 'El camp :attribute només pot contenir lletres, xifres.',
+    'array'                => 'El camp :attribute ha de ser una matriu.',
+    'backup_codes'         => 'El codi que heu proporcionat no és vàlid o ja s’ha utilitzat.',
+    'before'               => 'El camp :attribute ha de ser una data posterior a :date.',
     'between'              => [
-        'numeric' => 'El camp :attribute ha d’estar entre :min i :max.',
+        'numeric' => 'El camp :attribute ha de ser un nombre entre :min i :max.',
         'file'    => 'El camp :attribute ha de tenir entre :min i :max kilobytes.',
         'string'  => 'El camp :attribute ha de tenir entre :min i :max caràcters.',
         'array'   => 'El camp :attribute ha de tenir entre :min i :max elements.',
@@ -27,11 +27,11 @@ return [
     'confirmed'            => 'La confirmació del camp :attribute no coincideix.',
     'date'                 => 'El camp :attribute no és una data vàlida.',
     'date_format'          => 'El camp :attribute no coincideix amb el format :format.',
-    'different'            => 'Els camps :attribute i :other han de ser diferents.',
-    'digits'               => 'El camp :attribute ha de tenir :digits dígits.',
-    'digits_between'       => 'El camp :attribute ha de tenir entre :min i :max dígits.',
-    'email'                => 'El camp :attribute ha de ser una adreça electrònica vàlida.',
-    'ends_with' => 'El camp :attribute ha d’acabar amb un dels següents valors: :values',
+    'different'            => 'El camp :attribute i :other han de ser diferents.',
+    'digits'               => 'El camp :attribute ha de tenir :digits xifres.',
+    'digits_between'       => 'El camp :attribute ha de tenir entre :min i :max xifres.',
+    'email'                => 'El camp :attribute ha de ser un adreça electrònica vàlida.',
+    'ends_with' => 'El camp :attribute ha d’acabar amb un dels signes següents: :values',
     'file'                 => 'El camp :attribute ha de ser un fitxer vàlid.',
     'filled'               => 'El camp :attribute és obligatori.',
     'gt'                   => [
@@ -41,74 +41,74 @@ return [
         'array'   => 'El camp :attribute ha de tenir més de :value elements.',
     ],
     'gte'                  => [
-        'numeric' => 'El camp :attribute ha de ser més gran o igual que :value.',
-        'file'    => 'El camp :attribute ha de tenir :value kilobytes o més.',
-        'string'  => 'El camp :attribute ha de tenir :value caràcters o més.',
-        'array'   => 'El camp :attribute ha de tenir :value elements o més.',
+        'numeric' => 'El camp :attribute ha de ser com a mínim :value.',
+        'file'    => 'El camp :attribute ha de tenir com a mínim :value kilobytes.',
+        'string'  => 'El camp :attribute ha de tenir com a mínim :value caràcters.',
+        'array'   => 'El camp :attribute ha de tenir com a mínim :value elements.',
     ],
     'exists'               => 'El camp :attribute seleccionat no és vàlid.',
     'image'                => 'El camp :attribute ha de ser una imatge.',
-    'image_extension'      => 'El camp :attribute ha de tenir una extensió d’imatge vàlida i suportada.',
-    'in'                   => 'El camp :attribute seleccionat no és vàlid.',
-    'integer'              => 'El camp :attribute ha de ser un enter.',
-    'ip'                   => 'El camp :attribute ha de ser una adreça IP vàlida.',
-    'ipv4'                 => 'El camp :attribute ha de ser una adreça IPv4 vàlida.',
-    'ipv6'                 => 'El camp :attribute ha de ser una adreça IPv6 vàlida.',
+    'image_extension'      => 'El camp :attribute ha de tenir una extensió d’imatge compatible.',
+    'in'                   => 'El camp :attribute no és vàlid.',
+    'integer'              => 'El camp :attribute ha de ser un nombre enter.',
+    'ip'                   => 'El camp :attribute ha de ser un adreça IP vàlida.',
+    'ipv4'                 => 'El camp :attribute ha de ser un adreça IPv4 vàlida.',
+    'ipv6'                 => 'El camp :attribute ha de ser un adreça IPv6 vàlida.',
     'json'                 => 'El camp :attribute ha de ser una cadena JSON vàlida.',
     'lt'                   => [
-        'numeric' => 'El camp :attribute ha de ser menor que :value.',
+        'numeric' => 'El camp :attribute ha de ser més petit que :value.',
         'file'    => 'El camp :attribute ha de tenir menys de :value kilobytes.',
         'string'  => 'El camp :attribute ha de tenir menys de :value caràcters.',
         'array'   => 'El camp :attribute ha de tenir menys de :value elements.',
     ],
     'lte'                  => [
-        'numeric' => 'El camp :attribute ha de ser més petit o igual que :value.',
-        'file'    => 'El camp :attribute ha de tenir :value kilobytes o menys.',
-        'string'  => 'El camp :attribute ha de tenir :value caràcters o menys.',
-        'array'   => 'El camp :attribute ha de tenir :value elements o menys.',
+        'numeric' => 'El camp :attribute ha de ser com a màxim :value.',
+        'file'    => 'El camp :attribute ha de tenir com a màxim :value kilobytes.',
+        'string'  => 'El camp :attribute ha de tenir com a màxim :value caràcters.',
+        'array'   => 'El camp :attribute ha de tenir com a màxim :value elements.',
     ],
     'max'                  => [
-        'numeric' => 'El camp :attribute no pot ser més gran que :max.',
-        'file'    => 'El camp :attribute no pot tenir més de :max kilobytes.',
-        'string'  => 'El camp :attribute no pot tenir més de :max caràcters.',
-        'array'   => 'El camp :attribute no pot tenir més de :max elements.',
+        'numeric' => 'El camp :attribute ha de ser com a màxim :max.',
+        'file'    => 'El camp :attribute ha de tenir com a màxim :max kilobytes.',
+        'string'  => 'El camp :attribute ha de tenir com a màxim :max caràcters.',
+        'array'   => 'El camp :attribute ha de tenir com a màxim :max elements.',
     ],
     'mimes'                => 'El camp :attribute ha de ser un fitxer del tipus: :values.',
     'min'                  => [
-        'numeric' => 'El camp :attribute no pot ser més petit que :min.',
-        'file'    => 'El camp :attribute no pot tenir menys de :min kilobytes.',
-        'string'  => 'El camp :attribute no pot tenir menys de :min caràcters.',
-        'array'   => 'El camp :attribute no pot tenir menys de :min elements.',
+        'numeric' => 'El camp :attribute ha de ser com a mínim :min.',
+        'file'    => 'El camp :attribute ha de tenir com a mínim :min kilobytes.',
+        'string'  => 'El camp :attribute ha de tenir com a mínim :min caràcters.',
+        'array'   => 'El camp :attribute ha de tenir com a mínim :min elements.',
     ],
-    'not_in'               => 'El camp :attribute seleccionat no és vàlid.',
-    'not_regex'            => 'El format del camp :attribute no és vàlid.',
-    'numeric'              => 'El camp :attribute ha de ser un número.',
-    'regex'                => 'El format del camp :attribute no és vàlid.',
+    'not_in'               => 'El camp :attribute no és vàlid.',
+    'not_regex'            => 'El format :attribute no és vàlid.',
+    'numeric'              => 'El camp :attribute ha de ser un nombre.',
+    'regex'                => 'El format :attribute no és vàlid.',
     'required'             => 'El camp :attribute és obligatori.',
     'required_if'          => 'El camp :attribute és obligatori quan :other és :value.',
-    'required_with'        => 'El camp :attribute és obligatori quan hi ha aquest valor: :values.',
-    'required_with_all'    => 'El camp :attribute és obligatori quan hi ha algun d’aquests valors: :values.',
-    'required_without'     => 'El camp :attribute és obligatori quan no hi ha aquest valor: :values.',
+    'required_with'        => 'El camp :attribute és obligatori quan hi ha :values.',
+    'required_with_all'    => 'El camp :attribute és obligatori quan hi ha tots aquests valors: :values.',
+    'required_without'     => 'El camp :attribute és obligatori quan no hi ha :values.',
     'required_without_all' => 'El camp :attribute és obligatori quan no hi ha cap d’aquests valors: :values.',
-    'same'                 => 'Els camps :attribute i :other han de coincidir.',
-    'safe_url'             => 'L’enllaç proporcionat podria no ser segur.',
+    'same'                 => 'El camp :attribute i :other han de coincidir.',
+    'safe_url'             => 'És possible que l’enllaç proporcionat no sigui segur.',
     'size'                 => [
         'numeric' => 'El camp :attribute ha de ser :size.',
         'file'    => 'El camp :attribute ha de tenir :size kilobytes.',
-        'string'  => 'El camp :attribute ha de tenir :size caràcters.',
-        'array'   => 'El camp :attribute ha de contenir :size elements.',
+        'string'  => 'El camp :attribute ha de tenir :size caràcters',
+        'array'   => 'El camp :attribute ha de tenir :size elements.',
     ],
-    'string'               => 'El camp :attribute ha de ser una cadena.',
-    'timezone'             => 'El camp :attribute ha de ser una zona vàlida.',
-    'totp'                 => 'El codi que heu proporcionat no és vàlid o ha caducat.',
-    'unique'               => 'El camp :attribute ja es fa servir.',
-    'url'                  => 'El format del camp :attribute no és vàlid.',
-    'uploaded'             => 'No s’ha pogut pujar el fitxer. És possible que el servidor no accepti fitxers d’aquesta mida.',
+    'string'               => 'El camp :attribute ha de ser una cadena de text.',
+    'timezone'             => 'El camp :attribute ha de ser un fus horari vàlid.',
+    'totp'                 => 'El codi proporcionat no és vàlid o ha caducat.',
+    'unique'               => 'El camp :attribute ja s’ha utilitzat.',
+    'url'                  => 'El format :attribute no és vàlid.',
+    'uploaded'             => 'No s’ha pogut pujar el fitxer. És possible que el servidor no admeti fitxers d’aquesta mida.',
 
     // Custom validation lines
     'custom' => [
         'password-confirm' => [
-            'required_with' => 'Cal la confirmació de la contrasenya',
+            'required_with' => 'Heu de confirmar la contrasenya.',
         ],
     ],
 
index 4fcc9dacef2d4000c7c8bb5009f81c3979bb2dbc..d0bf9cf4577ca2c96804bcf010c18975f515eaf9 100644 (file)
@@ -40,14 +40,14 @@ return [
     'book_sort_notification'      => 'Kniha byla úspěšně seřazena',
 
     // Bookshelves
-    'bookshelf_create'            => 'vytvořit knihovnu',
-    'bookshelf_create_notification'    => 'Knihovna byla úspěšně vytvořena',
-    'bookshelf_create_from_book'    => 'převést knihu na knihovnu',
-    'bookshelf_create_from_book_notification'    => 'Kniha byla úspěšně převedena na knihovnu',
-    'bookshelf_update'                 => 'aktualizovat knihovnu',
-    'bookshelf_update_notification'    => 'Knihovna byla úspěšně aktualizována',
+    'bookshelf_create'            => 'vytvořil polici',
+    'bookshelf_create_notification'    => 'Police byla úspěšně vytvořena',
+    'bookshelf_create_from_book'    => 'převést knihu na polici',
+    'bookshelf_create_from_book_notification'    => 'Kniha byla úspěšně převedena na polici',
+    'bookshelf_update'                 => 'aktualizovat polici',
+    'bookshelf_update_notification'    => 'Police byla úspěšně aktualizována',
     'bookshelf_delete'                 => 'odstranit knihovnu',
-    'bookshelf_delete_notification'    => 'Knihovna byla úspěšně smazána',
+    'bookshelf_delete_notification'    => 'Police byla úspěšně odstraněna',
 
     // Revisions
     'revision_restore' => 'obnovil revizi',
index 585315ee000337f31960cb89d7c60b2fe2d02443..ad225a2fee2756bb4cd97881b0fea51ef7af123b 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilní aplikace',
     'mfa_option_totp_desc' => 'Pro použití vícefaktorového ověření budete potřebovat mobilní aplikaci, která podporuje TOTP jako např. Google Authenticator, Authy nebo Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Záložní kódy',
-    'mfa_option_backup_codes_desc' => 'Bezpečně si uložte sadu jednorázových záložních kódů, které můžete použít pro ověření vaší identity.',
+    'mfa_option_backup_codes_desc' => 'Vygeneruje sadu jednorázových záložních kódů, které zadáte při přihlášení k ověření své identity. Ujistěte se, že jsou uloženy na bezpečném místě.',
     'mfa_gen_confirm_and_enable' => 'Potvrdit a povolit',
     'mfa_gen_backup_codes_title' => 'Nastavení záložních kódů',
     'mfa_gen_backup_codes_desc' => 'Uložte níže uvedený seznam kódů na bezpečné místo. Při přístupu k systému budete moci použít jeden z kódů jako druhou metodu ověření.',
index 3d402081063549bda9febf09b051fd7f6ce168fe..89ff7f2d59ef4e2fa7759439c27a57fe21313573 100644 (file)
@@ -85,35 +85,35 @@ return [
     // Shelves
     'shelf' => 'Knihovna',
     'shelves' => 'Knihovny',
-    'x_shelves' => '{0}:count knihoven|{1}:count knihovna|[2,4]:count knihovny|[5,*]:count knihoven',
-    'shelves_empty' => 'Nebyly vytvořeny žádné knihovny',
-    'shelves_create' => 'Vytvořit novou knihovnu',
-    'shelves_popular' => 'Populární knihovny',
-    'shelves_new' => 'Nové knihovny',
-    'shelves_new_action' => 'Nová Knihovna',
-    'shelves_popular_empty' => 'Nejpopulárnější knihovny se objeví zde.',
-    'shelves_new_empty' => 'Zde se zobrazí nejnověji vytvořené knihovny.',
-    'shelves_save' => 'Uložit knihovnu',
-    'shelves_books' => 'Knihy v této knihovně',
-    'shelves_add_books' => 'Přidat knihy do knihovny',
-    'shelves_drag_books' => 'Přetáhněte knihy níže a přidejte je do této knihovny',
-    'shelves_empty_contents' => 'Tato knihovna neobsahuje žádné knihy',
-    'shelves_edit_and_assign' => 'Upravit knihovnu a přiřadit knihy',
-    'shelves_edit_named' => 'Upravit knihovnu :name',
-    'shelves_edit' => 'Upravit knihovnu',
-    'shelves_delete' => 'Odstranit knihovnu',
-    'shelves_delete_named' => 'Odstranit knihovnu :name',
-    'shelves_delete_explain' => "Chystáte se smazat knihovnu ':name'. Knihy v ní obsažené zůstanou zachovány.",
-    'shelves_delete_confirmation' => 'Opravdu chcete odstranit tuto knihovnu?',
-    'shelves_permissions' => 'Oprávnění knihovny',
-    'shelves_permissions_updated' => 'Oprávnění knihovny byla aktualizována',
-    'shelves_permissions_active' => 'Oprávnění knihovny byla aktivována',
-    'shelves_permissions_cascade_warning' => 'Oprávnění v Knihovnách nejsou automaticky kaskádována do obsažených knih. To proto, že kniha může existovat ve více Knihovnách. Oprávnění však lze zkopírovat do podřízených knih pomocí níže uvedené možnosti.',
+    'x_shelves' => '{0}:count polic|{1}:count police|[2,4]:count police|[5,*]:count polic',
+    'shelves_empty' => 'Nebyly vytvořeny žádné police',
+    'shelves_create' => 'Vytvořit novou polici',
+    'shelves_popular' => 'Populární police',
+    'shelves_new' => 'Nové police',
+    'shelves_new_action' => 'Nová Police',
+    'shelves_popular_empty' => 'Nejpopulárnější police se objeví zde.',
+    'shelves_new_empty' => 'Zde se zobrazí nejnovější police.',
+    'shelves_save' => 'Uložit polici',
+    'shelves_books' => 'Knihy na této polici',
+    'shelves_add_books' => 'Přidat knihy do této police',
+    'shelves_drag_books' => 'Přetáhněte knihy níže a přidejte je do této police',
+    'shelves_empty_contents' => 'Tato police neobsahuje žádné knihy',
+    'shelves_edit_and_assign' => 'Upravit polici a přiřadit knihy',
+    'shelves_edit_named' => 'Upravit polici :name',
+    'shelves_edit' => 'Upravit polici',
+    'shelves_delete' => 'Odstranit polici',
+    'shelves_delete_named' => 'Odstranit polici :name',
+    'shelves_delete_explain' => "Chystáte se smazat polici ':name'. Knihy v ní obsažené zůstanou zachovány.",
+    'shelves_delete_confirmation' => 'Opravdu chcete odstranit tuto polici?',
+    'shelves_permissions' => 'Oprávnění police',
+    'shelves_permissions_updated' => 'Oprávnění police byla aktualizována',
+    'shelves_permissions_active' => 'Oprávnění police byla aktivována',
+    'shelves_permissions_cascade_warning' => 'Oprávnění v policiích nejsou automaticky kaskádována do obsažených knih. To proto, že kniha může existovat ve více policích. Oprávnění však lze zkopírovat do podřízených knih pomocí níže uvedené možnosti.',
     'shelves_permissions_create' => 'Oprávnění k vytváření Shelf se používají pouze ke kopírování oprávnění do dětských knih pomocí níže uvedené akce. Nekontrolují schopnost vytvářet knihy.',
     'shelves_copy_permissions_to_books' => 'Kopírovat oprávnění na knihy',
     'shelves_copy_permissions' => 'Kopírovat oprávnění',
-    'shelves_copy_permissions_explain' => 'Toto použije aktuální nastavení oprávnění knihovny na všechny knihy v ní obsažené. Před aktivací se ujistěte, že byly uloženy všechny změny oprávnění této knihovny.',
-    'shelves_copy_permission_success' => 'Oprávnění knihovny byla zkopírována na :count knih',
+    'shelves_copy_permissions_explain' => 'Tímto se použije aktuální nastavení oprávnění police na všechny knihy v ní obsažené. Před aktivací se ujistěte, že byly uloženy všechny změny oprávnění této police.',
+    'shelves_copy_permission_success' => 'Oprávnění police byla zkopírována na :count knih',
 
     // Books
     'book' => 'Kniha',
@@ -303,7 +303,7 @@ return [
     'page_tags' => 'Štítky stránky',
     'chapter_tags' => 'Štítky kapitoly',
     'book_tags' => 'Štítky knihy',
-    'shelf_tags' => 'Štítky knihovny',
+    'shelf_tags' => 'Štítky police',
     'tag' => 'Štítek',
     'tags' =>  'Štítky',
     'tags_index_desc' => 'Tagy mohou být použity pro obsah v rámci systému pro pružnou formu kategorizace. Tagy mohou mít klíč i hodnotu, přičemž hodnota je nepovinná. Po aplikaci může být obsah dotazován pomocí názvu a hodnoty štítku.',
@@ -316,12 +316,12 @@ return [
     'tags_assigned_pages' => 'Přiřazeno ke stránkám',
     'tags_assigned_chapters' => 'Přiřazeno ke kapitolám',
     'tags_assigned_books' => 'Přiřazeno ke knihám',
-    'tags_assigned_shelves' => 'Přiřazeno ke knihovnám',
+    'tags_assigned_shelves' => 'Přiřazeno k policím',
     'tags_x_unique_values' => ':count jedinečných hodnot',
     'tags_all_values' => 'Všechny hodnoty',
     'tags_view_tags' => 'Zobrazit štítky',
     'tags_view_existing_tags' => 'Zobrazit existující štítky',
-    'tags_list_empty_hint' => 'Štítky mohou být přiřazeny pomocí postranního panelu editoru stránky nebo při úpravách podrobností knihy, kapitoly nebo knihovny.',
+    'tags_list_empty_hint' => 'Štítky mohou být přiřazeny pomocí postranního panelu editoru stránky nebo při úpravách podrobností knihy, kapitoly nebo police.',
     'attachments' => 'Přílohy',
     'attachments_explain' => 'Nahrajte soubory nebo připojte odkazy, které se zobrazí na stránce. Budou k nalezení v postranní liště.',
     'attachments_explain_instant_save' => 'Změny zde provedené se okamžitě ukládají.',
@@ -395,9 +395,9 @@ return [
     'copy_consider_access' => 'Po změně umístění, vlastníka nebo oprávnění může dojít k tomu, že obsah může být přístupný těm, kteří přístup dříve něměli.',
 
     // Conversions
-    'convert_to_shelf' => 'Převést na knihovnu',
-    'convert_to_shelf_contents_desc' => 'Tuto knihu můžete převést na novou knihovnu se stejným obsahem. Kapitoly obsažené v této knize budou převedeny na nové knihy. Pokud tato kniha obsahuje jakékoli stránky, které nejsou uvedeny v kapitole, Tato kniha bude přejmenována a bude obsahovat tyto stránky a tato kniha se stane součástí nové knihovny.',
-    'convert_to_shelf_permissions_desc' => 'Veškerá oprávnění nastavená v této knize budou zkopírována do nové knihovny a do všech nových podřazených knih, které nemají vlastní oprávnění. Všimněte si, že oprávnění na regálech neobsahují automatickou kaskádu na obsah, jak to dělají pro knihy.',
+    'convert_to_shelf' => 'Převést na polici',
+    'convert_to_shelf_contents_desc' => 'Tuto knihu můžete převést na novou polici se stejným obsahem. Kapitoly obsažené v této knize budou převedeny na nové knihy. Pokud tato kniha obsahuje jakékoli stránky, které nejsou uvedeny v kapitole, bude tato kniha přejmenována a bude obsahovat tyto stránky a stane se součástí nové police.',
+    'convert_to_shelf_permissions_desc' => 'Veškerá oprávnění nastavená v této knize budou zkopírována do nové police a do všech nových podřazených knih, které nemají vlastní oprávnění. Všimněte si, že oprávnění na policích neobsahují automatickou kaskádu na obsah, jako je tomu u knih.',
     'convert_book' => 'Převést knihu',
     'convert_book_confirm' => 'Opravdu chcete převést tuto knihu?',
     'convert_undo_warning' => 'To nelze tak snadno vrátit zpět.',
index 37b9348a2360556d3095288335e5a27048685ca3..e82be17d3fa8cd5a242244883770a8498912be97 100644 (file)
@@ -9,7 +9,7 @@ return [
     'permissionJson' => 'Nemáte povolení k provedení požadované akce.',
 
     // Auth
-    'error_user_exists_different_creds' => 'Uživatel s emailem :email již existuje ale s jinými přihlašovacími údaji.',
+    'error_user_exists_different_creds' => 'Uživatel s emailem :email již existuje, ale s jinými přihlašovacími údaji.',
     'auth_pre_register_theme_prevention' => 'Zadané údaje nedovolují zaregistrovat uživatelský účet',
     'email_already_confirmed' => 'Emailová adresa již byla potvrzena. Zkuste se přihlásit.',
     'email_confirmation_invalid' => 'Tento potvrzovací odkaz již neplatí nebo už byl použit. Zkuste prosím registraci znovu.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Doplněk pro tohoto správce identity nebyl nalezen.',
     'social_driver_not_configured' => 'Nastavení vašeho účtu na :socialAccount není správné. :socialAccount musí mít vaše svolení pro naší aplikaci vás přihlásit.',
     'invite_token_expired' => 'Odkaz v pozvánce již bohužel vypršel. Namísto toho ale můžete zkusit resetovat heslo do Vašeho účtu.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Uživatele pro tuto akci se nepodařilo najít.',
 
     // System
     'path_not_writable' => 'Nelze zapisovat na cestu k souboru :filePath. Zajistěte aby se dalo nahrávat na server.',
@@ -67,7 +67,7 @@ return [
 
     // Entities
     'entity_not_found' => 'Prvek nenalezen',
-    'bookshelf_not_found' => 'Knihovna nenalezena',
+    'bookshelf_not_found' => 'Police nenalezena',
     'book_not_found' => 'Kniha nenalezena',
     'page_not_found' => 'Stránka nenalezena',
     'chapter_not_found' => 'Kapitola nenalezena',
index 8314a0d8f3853e4e71c56131728d747919c2ed1c..caf75f179510ec943b39e1cecd9294b283a313a8 100644 (file)
@@ -5,23 +5,23 @@
 return [
 
     'new_comment_subject' => 'Nový komentář na stránce: :pageName',
-    'new_comment_intro' => 'Uživatel(ka) okomentoval(a) stránku v :appName:',
-    'new_page_subject' => 'New page: :pageName',
-    'new_page_intro' => 'Nová stránka byla vytvořena v :appName:',
+    'new_comment_intro' => 'Uživatel/ka okomentoval/a stránku v :appName:',
+    'new_page_subject' => 'Nová stránka: :pageName',
+    'new_page_intro' => 'V :appName byla vytvořena nová stránka:',
     'updated_page_subject' => 'Aktualizovaná stránka: :pageName',
-    'updated_page_intro' => 'Stránka byla aktualizována v :appName:',
-    'updated_page_debounce' => 'Po nějakou dobu neobdržíte další oznámení o aktualizaci této stránky stejným editorem, aby se omezil počet stejných zaslaných upozornění.',
+    'updated_page_intro' => 'V :appName byla aktualizována stránka:',
+    'updated_page_debounce' => 'Po nějakou dobu neobdržíte další oznámení o aktualizaci této stránky stejným editorem, aby se omezil počet stejných zpráv.',
 
     'detail_page_name' => 'Název stránky:',
-    'detail_page_path' => 'UmístÄ\9b½ v:',
-    'detail_commenter' => 'Komentoval(a):',
+    'detail_page_path' => 'UmístÄ\9b­:',
+    'detail_commenter' => 'Komentoval/a:',
     'detail_comment' => 'Komentář:',
-    'detail_created_by' => 'Vytvořil(a):',
-    'detail_updated_by' => 'Aktualizoval(a):',
+    'detail_created_by' => 'Vytvořil/a:',
+    'detail_updated_by' => 'Aktualizoval/a:',
 
     'action_view_comment' => 'Zobrazit komentář',
     'action_view_page' => 'Zobrazit stránku',
 
-    'footer_reason' => 'Dle :link Vám bylo pro tento typ aktivity zasláno toto upozornění.',
+    'footer_reason' => 'Tato zpráva Vám byla doručena na základě Vašeho :link.',
     'footer_reason_link' => 'nastavení upozornění',
 ];
index 9a127601e2c26126a46dc1f28a33857543a8666e..ec7afaf276befa29342aebe777e07316f361490a 100644 (file)
@@ -20,14 +20,14 @@ return [
     'shortcuts_overview_desc' => 'Správa klávesových zkratek, které můžete použít k navigaci systémového uživatelského rozhraní.',
 
     'notifications' => 'Nastavení upozornění',
-    'notifications_desc' => 'Ovládat e-mailová oznámení, která dostáváte při provádění určité aktivity v systému.',
+    'notifications_desc' => 'Nastavte si e-mailová oznámení, která dostanete při provedení určitých akcí v systému.',
     'notifications_opt_own_page_changes' => 'Upozornit na změny stránek u kterých jsem vlastníkem',
     'notifications_opt_own_page_comments' => 'Upozornit na komentáře na stránkách, které vlastním',
     'notifications_opt_comment_replies' => 'Upozornit na odpovědi na mé komentáře',
-    'notifications_save' => 'Uložit preference',
+    'notifications_save' => 'Uložit nastavení',
     'notifications_update_success' => 'Nastavení oznámení byla aktualizována!',
     'notifications_watched' => 'Sledované a ignorované položky',
-    'notifications_watched_desc' => 'Níže jsou položky, které mají vlastní nastavení hodinek. Chcete-li aktualizovat vaše předvolby, podívejte se na položku a pak najděte možnosti hodinek v postranním panelu.',
+    'notifications_watched_desc' => 'Níže jsou položky, které mají vlastní nastavení sledování. Chcete-li aktualizovat vaše předvolby, zobrazte položku a pak upravte možnosti sledování v postranním panelu.',
 
     'auth' => 'Přístup a zabezpečení',
     'auth_change_password' => 'Změnit heslo',
index 23820fe873bed68cb7a6f1fb56a7d34a28a74774..a74822658a0ecd4021c94573964773b7766fcd2e 100644 (file)
@@ -54,7 +54,7 @@ return [
     'app_color' => 'Hlavní barva',
     'link_color' => 'Výchozí barva odkazu',
     'content_colors_desc' => 'Nastaví barvy pro všechny prvky v organizační struktuře stránky. Pro lepší čitelnost doporučujeme zvolit barvy s podobným jasem, jakou mají výchozí barvy.',
-    'bookshelf_color' => 'Barva knihovny',
+    'bookshelf_color' => 'Barva police',
     'book_color' => 'Barva knihy',
     'chapter_color' => 'Barva kapitoly',
     'page_color' => 'Barva stránky',
@@ -90,7 +90,7 @@ return [
     'maint_send_test_email_mail_subject' => 'Testovací e-mail',
     'maint_send_test_email_mail_greeting' => 'Zdá se, že posílání e-mailů funguje!',
     'maint_send_test_email_mail_text' => 'Gratulujeme! Protože jste dostali tento e-mail, zdá se, že nastavení e-mailů je v pořádku.',
-    'maint_recycle_bin_desc' => 'Odstraněné knihovny, knihy, kapitoly a stránky se přesouvají do Koše, aby je bylo možné obnovit nebo trvale smazat. Starší položky v koši mohou být po čase automaticky odstraněny v závislosti na konfiguraci systému.',
+    'maint_recycle_bin_desc' => 'Odstraněné police, knihy, kapitoly a stránky se přesouvají do Koše, aby je bylo možné obnovit nebo trvale smazat. Starší položky v koši mohou být po čase automaticky odstraněny v závislosti na konfiguraci systému.',
     'maint_recycle_bin_open' => 'Otevřít Koš',
     'maint_regen_references' => 'Přegenerovat odkazy',
     'maint_regen_references_desc' => 'Tato akce obnoví referenční index křížových položek v rámci databáze. Toto je obvykle zpracováno automaticky, ale tato akce může být užitečná pro indexování starého obsahu nebo obsahu přidaného neoficiálními metodami.',
index b757707d13b4ace37533b7e7e8a3c4e715992c20..84c4af9f70db250681da8966e86516f26c72b055 100644 (file)
@@ -30,8 +30,8 @@ return [
     // Books
     'book_create'                 => 'llyfr wedi creu',
     'book_create_notification'    => 'Llyfr wedi\'i creu\'n llwyddiannus',
-    'book_create_from_chapter'              => 'converted chapter to book',
-    'book_create_from_chapter_notification' => 'Chapter successfully converted to a book',
+    'book_create_from_chapter'              => 'trosodd bennod i lyfr',
+    'book_create_from_chapter_notification' => 'Pennod wedi\'i trosi\'n llwyddiannus i lyfr',
     'book_update'                 => 'llyfr wedi diweddaru',
     'book_update_notification'    => 'Llyfr wedi\'i diweddaru\'n llwyddiannus',
     'book_delete'                 => 'llyfr wedi\'i dileu',
@@ -42,17 +42,17 @@ return [
     // Bookshelves
     'bookshelf_create'            => 'creodd silff',
     'bookshelf_create_notification'    => 'Silff wedi\'i chreu\'n llwyddiannus',
-    'bookshelf_create_from_book'    => 'converted book to shelf',
-    'bookshelf_create_from_book_notification'    => 'Book successfully converted to a shelf',
+    'bookshelf_create_from_book'    => 'trosodd lyfr i silff',
+    'bookshelf_create_from_book_notification'    => 'Llyfr wedi\'i trosi\'n llwyddiannus i silff',
     'bookshelf_update'                 => 'diweddarodd silff',
     'bookshelf_update_notification'    => 'Silff wedi\'i diweddaru\'n llwyddiannus',
     'bookshelf_delete'                 => 'dileodd silff',
     'bookshelf_delete_notification'    => 'Silff wedi\'i dileu\'n llwyddiannus',
 
     // Revisions
-    'revision_restore' => 'restored revision',
-    'revision_delete' => 'deleted revision',
-    'revision_delete_notification' => 'Revision successfully deleted',
+    'revision_restore' => 'adferodd y diwygiad',
+    'revision_delete' => 'dileuodd y diwygiad',
+    'revision_delete_notification' => 'Diwygiad wedi\'i dileu\'n llwyddiannus',
 
     // Favourites
     'favourite_add_notification' => 'Mae ":name" wedi\'i ychwanegu at eich ffefrynnau',
@@ -63,17 +63,17 @@ return [
 
     // Auth
     'auth_login' => 'wedi\'u mewngofnodi',
-    'auth_register' => 'registered as new user',
-    'auth_password_reset_request' => 'requested user password reset',
-    'auth_password_reset_update' => 'reset user password',
+    'auth_register' => 'wedi\'i cofrestru\'n ddefnyddiwr newydd',
+    'auth_password_reset_request' => 'wedi ceisio ailosod gair pass defnyddiwr',
+    'auth_password_reset_update' => 'ailosododd air pass defnyddiwr',
     'mfa_setup_method' => 'configured MFA method',
     'mfa_setup_method_notification' => 'Dull aml-ffactor wedi\'i ffurfweddu\'n llwyddiannus',
     'mfa_remove_method' => 'removed MFA method',
     'mfa_remove_method_notification' => 'Llwyddwyd i ddileu dull aml-ffactor',
 
     // Settings
-    'settings_update' => 'updated settings',
-    'settings_update_notification' => 'Settings successfully updated',
+    'settings_update' => 'diweddarodd osodiadau',
+    'settings_update_notification' => 'Gosodiadau wedi\'i diweddaru\'n llwyddiannus',
     'maintenance_action_run' => 'ran maintenance action',
 
     // Webhooks
@@ -93,24 +93,24 @@ return [
     'user_delete_notification' => 'Tynnwyd y defnyddiwr yn llwyddiannus',
 
     // API Tokens
-    'api_token_create' => 'created API token',
+    'api_token_create' => 'creodd docyn API',
     'api_token_create_notification' => 'Tocyn API wedi\'i greu\'n llwyddiannus',
-    'api_token_update' => 'updated API token',
+    'api_token_update' => 'diweddarodd docyn API',
     'api_token_update_notification' => 'Tocyn API wedi\'i ddiweddaru\'n llwyddiannus',
-    'api_token_delete' => 'deleted API token',
+    'api_token_delete' => 'dileodd docyn API',
     'api_token_delete_notification' => 'Tocyn API wedi\'i ddileu\'n llwyddiannus',
 
     // Roles
-    'role_create' => 'created role',
-    'role_create_notification' => 'Role successfully created',
-    'role_update' => 'updated role',
-    'role_update_notification' => 'Role successfully updated',
-    'role_delete' => 'deleted role',
-    'role_delete_notification' => 'Role successfully deleted',
+    'role_create' => 'creodd rôl',
+    'role_create_notification' => 'Rôl wedi\'i creu\'n llwyddiannus',
+    'role_update' => 'diweddarodd rôl',
+    'role_update_notification' => 'Rôl wedi\'i diweddaru\'n llwyddiannus',
+    'role_delete' => 'dileodd rôl',
+    'role_delete_notification' => 'Rôl wedi\'i dileu\'n llwyddiannus',
 
     // Recycle Bin
     'recycle_bin_empty' => 'gwagodd fin ailgylchu',
-    'recycle_bin_restore' => 'restored from recycle bin',
+    'recycle_bin_restore' => 'wedi\'i adfer o\'r bin ailgylchu',
     'recycle_bin_destroy' => 'removed from recycle bin',
 
     // Comments
index 94fc0b6b54bb978f153e2c3128330a4f033c2224..8cdb679c8c7b7c38ac7e588c6a4f18d7d2d3749a 100644 (file)
@@ -39,9 +39,9 @@ return [
     'register_success' => 'Diolch am arwyddo! Rydych bellach wedi cofrestru ac wedi mewngofnodi.',
 
     // Login auto-initiation
-    'auto_init_starting' => 'Attempting Login',
+    'auto_init_starting' => 'Wrthi\'n ceisio mewngofnodi',
     'auto_init_starting_desc' => 'We\'re contacting your authentication system to start the login process. If there\'s no progress after 5 seconds you can try clicking the link below.',
-    'auto_init_start_link' => 'Proceed with authentication',
+    'auto_init_start_link' => 'Parhau gyda dilysu',
 
     // Password Reset
     'reset_password' => 'Ailosod cyfrinair',
@@ -49,9 +49,9 @@ return [
     'reset_password_send_button' => 'Anfon Dolen Ailosod',
     'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.',
     'reset_password_success' => 'Your password has been successfully reset.',
-    'email_reset_subject' => 'Reset your :appName password',
+    'email_reset_subject' => 'Ailosod eich gair pass :appName',
     'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
-    'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
+    'email_reset_not_requested' => 'Os nad oeddwch chi\'n ceisio ailosod eich gair pass, does dim byd arall i wneud.',
 
     // Email Confirmation
     'email_confirm_subject' => 'Cadarnhewch eich e-bost chi a :appName',
@@ -83,19 +83,19 @@ return [
     // Multi-factor Authentication
     'mfa_setup' => 'Setup Multi-Factor Authentication',
     'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.',
-    'mfa_setup_configured' => 'Already configured',
-    'mfa_setup_reconfigure' => 'Reconfigure',
+    'mfa_setup_configured' => 'Wedi\'i ail-ffurfweddu\'n barod',
+    'mfa_setup_reconfigure' => 'Ail-ffurfweddu',
     'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?',
-    'mfa_setup_action' => 'Setup',
+    'mfa_setup_action' => 'Gosodiad',
     'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.',
     'mfa_option_totp_title' => 'Ap Ffôn Symudol',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
-    'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_title' => 'Codau wrth Gefn',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
-    'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
+    'mfa_gen_backup_codes_title' => 'Gosodiad Codau wrth Gefn',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
-    'mfa_gen_backup_codes_download' => 'Download Codes',
+    'mfa_gen_backup_codes_download' => 'Llwytho Codau i Lawr',
     'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once',
     'mfa_gen_totp_title' => 'Mobile App Setup',
     'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
@@ -103,15 +103,15 @@ return [
     'mfa_gen_totp_verify_setup' => 'Verify Setup',
     'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:',
     'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here',
-    'mfa_verify_access' => 'Verify Access',
+    'mfa_verify_access' => 'Gwirio Mynediad',
     'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.',
     'mfa_verify_no_methods' => 'No Methods Configured',
     'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.',
-    'mfa_verify_use_totp' => 'Verify using a mobile app',
-    'mfa_verify_use_backup_codes' => 'Verify using a backup code',
-    'mfa_verify_backup_code' => 'Backup Code',
+    'mfa_verify_use_totp' => 'Gwirio gan ap ffôn',
+    'mfa_verify_use_backup_codes' => 'Gwirio gan god wrth gefn',
+    'mfa_verify_backup_code' => 'Cod wrth Gefn',
     'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:',
-    'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
+    'mfa_verify_backup_code_enter_here' => 'Cofnodi cod wrth gefn yma',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
 ];
index 7297e78db536bd3e09ce47cfeefe5039564b9ac2..ce1e188da68b0431194fe4c9e51f6024c007272f 100644 (file)
@@ -12,13 +12,13 @@ return [
     'save' => 'Cadw',
     'continue' => 'Parhau',
     'select' => 'Dewis',
-    'toggle_all' => 'Toggle All',
+    'toggle_all' => 'Toglo Popeth',
     'more' => 'Mwy',
 
     // Form Labels
     'name' => 'Enw',
     'description' => 'Disgrifiad',
-    'role' => 'Role',
+    'role' => 'Rôl',
     'cover_image' => 'Cover image',
     'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
 
@@ -43,9 +43,9 @@ return [
     'add' => 'Ychwanegu',
     'configure' => 'Ffurfweddu',
     'manage' => 'Rheoli',
-    'fullscreen' => 'Fullscreen',
-    'favourite' => 'Favourite',
-    'unfavourite' => 'Unfavourite',
+    'fullscreen' => 'Sgrin Llawn',
+    'favourite' => 'Gwneud Ffefryn',
+    'unfavourite' => 'Dadwneud Ffefryn',
     'next' => 'Nesa',
     'previous' => 'Cynt',
     'filter_active' => 'Hidl weithredol:',
@@ -60,37 +60,37 @@ return [
     'sort_ascending' => 'Trefnu\'n esgynnol',
     'sort_descending' => 'Trefnu\'n ddisgynnol',
     'sort_name' => 'Enw',
-    'sort_default' => 'Default',
-    'sort_created_at' => 'Created Date',
-    'sort_updated_at' => 'Updated Date',
+    'sort_default' => 'Diofyn',
+    'sort_created_at' => 'Dyddiad Creu',
+    'sort_updated_at' => 'Dyddiad Diweddaru',
 
     // Misc
-    'deleted_user' => 'Deleted User',
-    'no_activity' => 'No activity to show',
+    'deleted_user' => 'Defnyddiwr wedi\'i Dileu',
+    'no_activity' => 'Dim actifedd i arddangos',
     'no_items' => 'Dim eitemau ar gael',
     'back_to_top' => 'Yn ôl i\'r brig',
-    'skip_to_main_content' => 'Skip to main content',
-    'toggle_details' => 'Toggle Details',
-    'toggle_thumbnails' => 'Toggle Thumbnails',
-    'details' => 'Details',
-    'grid_view' => 'Grid View',
-    'list_view' => 'List View',
-    'default' => 'Default',
+    'skip_to_main_content' => 'Neidio i\'r prif gynnwys',
+    'toggle_details' => 'Toglo Manylion',
+    'toggle_thumbnails' => 'Toglo Mân-Luniau',
+    'details' => 'Manylion',
+    'grid_view' => 'Golwg Grid',
+    'list_view' => 'Golwg Rhestr',
+    'default' => 'Diofyn',
     'breadcrumb' => 'Breadcrumb',
-    'status' => 'Status',
+    'status' => 'Statws',
     'status_active' => 'Gweithredol',
     'status_inactive' => 'Anweithredol',
     'never' => 'Byth',
     'none' => 'Dim un',
 
     // Header
-    'homepage' => 'Homepage',
+    'homepage' => 'Tudalen cartref',
     'header_menu_expand' => 'Expand Header Menu',
-    'profile_menu' => 'Profile Menu',
-    'view_profile' => 'View Profile',
-    'edit_profile' => 'Edit Profile',
-    'dark_mode' => 'Dark Mode',
-    'light_mode' => 'Light Mode',
+    'profile_menu' => 'Dewislen Proffil',
+    'view_profile' => 'Gweld proffil',
+    'edit_profile' => 'Golygu Proffil',
+    'dark_mode' => 'Modd Tywyll',
+    'light_mode' => 'Modd Golau',
     'global_search' => 'Global Search',
 
     // Layout tabs
@@ -105,6 +105,6 @@ return [
 
     // Footer Link Options
     // Not directly used but available for convenience to users.
-    'privacy_policy' => 'Privacy Policy',
+    'privacy_policy' => 'Polisi Preifatrwydd',
     'terms_of_service' => 'Terms of Service',
 ];
index 473759feb2d87747e59628e6092ea4a972ecd6b5..ed8119b0538af57cf989c415e732cf95ae81406b 100644 (file)
@@ -7,7 +7,7 @@
  */
 return [
     // General editor terms
-    'general' => 'General',
+    'general' => 'Cyffredin',
     'advanced' => 'Advanced',
     'none' => 'Dim un',
     'cancel' => 'Canslo',
@@ -59,7 +59,7 @@ return [
     'list_task' => 'Task list',
     'indent_increase' => 'Increase indent',
     'indent_decrease' => 'Decrease indent',
-    'table' => 'Table',
+    'table' => 'Bwrdd',
     'insert_image' => 'Insert image',
     'insert_image_title' => 'Insert/Edit Image',
     'insert_link' => 'Insert/edit link',
@@ -136,7 +136,7 @@ return [
     'cell_border_ridge' => 'Ridge',
     'cell_border_inset' => 'Inset',
     'cell_border_outset' => 'Outset',
-    'cell_border_none' => 'None',
+    'cell_border_none' => 'Dim un',
     'cell_border_hidden' => 'Hidden',
 
     // Images, links, details/summary & embed
index 9e620b24ed1dfcde5d5283b659d78b3fc63e5c10..6f2e399f62a3d58f79540c0f413e83c1ad353b0e 100644 (file)
@@ -17,7 +17,7 @@ return [
     'recent_activity' => 'Recent Activity',
     'create_now' => 'Create one now',
     'revisions' => 'Revisions',
-    'meta_revision' => 'Revision #:revisionCount',
+    'meta_revision' => 'Diwygiad #:revisionCount',
     'meta_created' => 'Created :timeLength',
     'meta_created_name' => 'Created :timeLength by :user',
     'meta_updated' => 'Updated :timeLength',
@@ -26,7 +26,7 @@ return [
     'meta_reference_count' => 'Referenced by :count item|Referenced by :count items',
     'entity_select' => 'Entity Select',
     'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item',
-    'images' => 'Images',
+    'images' => 'Delweddau',
     'my_recent_drafts' => 'My Recent Drafts',
     'my_recently_viewed' => 'My Recently Viewed',
     'my_most_viewed_favourites' => 'My Most Viewed Favourites',
@@ -36,7 +36,7 @@ return [
     'no_pages_recently_updated' => 'No pages have been recently updated',
     'export' => 'Export',
     'export_html' => 'Contained Web File',
-    'export_pdf' => 'PDF File',
+    'export_pdf' => 'Ffeil PDF',
     'export_text' => 'Plain Text File',
     'export_md' => 'Markdown File',
     'default_template' => 'Default Page Template',
@@ -58,7 +58,7 @@ return [
     // Search
     'search_results' => 'Search Results',
     'search_total_results_found' => ':count result found|:count total results found',
-    'search_clear' => 'Clear Search',
+    'search_clear' => 'Clirio\'r Chwiliad',
     'search_no_pages' => 'No pages matched this search',
     'search_for_term' => 'Search for :term',
     'search_more' => 'More Results',
@@ -67,7 +67,7 @@ return [
     'search_content_type' => 'Content Type',
     'search_exact_matches' => 'Exact Matches',
     'search_tags' => 'Tag Searches',
-    'search_options' => 'Options',
+    'search_options' => 'Opsiynau',
     'search_viewed_by_me' => 'Viewed by me',
     'search_not_viewed_by_me' => 'Not viewed by me',
     'search_permissions_set' => 'Permissions set',
@@ -83,14 +83,14 @@ return [
     'search_update' => 'Update Search',
 
     // Shelves
-    'shelf' => 'Shelf',
-    'shelves' => 'Shelves',
-    'x_shelves' => ':count Shelf|:count Shelves',
+    'shelf' => 'Silff',
+    'shelves' => 'Silffau',
+    'x_shelves' => ':count Silff|:count Shelves',
     'shelves_empty' => 'No shelves have been created',
     'shelves_create' => 'Create New Shelf',
     'shelves_popular' => 'Popular Shelves',
-    'shelves_new' => 'New Shelves',
-    'shelves_new_action' => 'New Shelf',
+    'shelves_new' => 'Silffau Newydd',
+    'shelves_new_action' => 'Silff Newydd',
     'shelves_popular_empty' => 'The most popular shelves will appear here.',
     'shelves_new_empty' => 'The most recently created shelves will appear here.',
     'shelves_save' => 'Save Shelf',
@@ -116,8 +116,8 @@ return [
     'shelves_copy_permission_success' => 'Shelf permissions copied to :count books',
 
     // Books
-    'book' => 'Book',
-    'books' => 'Books',
+    'book' => 'Llyfr',
+    'books' => 'Llyfrau',
     'x_books' => ':count Book|:count Books',
     'books_empty' => 'No books have been created',
     'books_popular' => 'Popular Books',
@@ -126,19 +126,19 @@ return [
     'books_new_action' => 'New Book',
     'books_popular_empty' => 'The most popular books will appear here.',
     'books_new_empty' => 'The most recently created books will appear here.',
-    'books_create' => 'Create New Book',
-    'books_delete' => 'Delete Book',
-    'books_delete_named' => 'Delete Book :bookName',
+    'books_create' => 'Creu Llyfr Newydd',
+    'books_delete' => 'Dileu Llyfr',
+    'books_delete_named' => 'Dileu :bookName Llyfr',
     'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.',
     'books_delete_confirmation' => 'Are you sure you want to delete this book?',
-    'books_edit' => 'Edit Book',
-    'books_edit_named' => 'Edit Book :bookName',
-    'books_form_book_name' => 'Book Name',
+    'books_edit' => 'Golygu\'r Llyfr',
+    'books_edit_named' => 'Golygu :bookName Llyfr',
+    'books_form_book_name' => 'Enw\'r Llyfr',
     'books_save' => 'Save Book',
     'books_permissions' => 'Book Permissions',
     'books_permissions_updated' => 'Book Permissions Updated',
     'books_empty_contents' => 'No pages or chapters have been created for this book.',
-    'books_empty_create_page' => 'Create a new page',
+    'books_empty_create_page' => 'Creu tudalen newydd',
     'books_empty_sort_current_book' => 'Sort the current book',
     'books_empty_add_chapter' => 'Add a chapter',
     'books_permissions_active' => 'Book Permissions Active',
@@ -165,18 +165,18 @@ return [
     'books_sort_move_book_end' => 'Move to End of Book',
     'books_sort_move_before_chapter' => 'Move to Before Chapter',
     'books_sort_move_after_chapter' => 'Move to After Chapter',
-    'books_copy' => 'Copy Book',
-    'books_copy_success' => 'Book successfully copied',
+    'books_copy' => 'Copio Llyfr',
+    'books_copy_success' => 'Llyfr wedi\'i copio\'n llwyddiannus',
 
     // Chapters
-    'chapter' => 'Chapter',
-    'chapters' => 'Chapters',
-    'x_chapters' => ':count Chapter|:count Chapters',
+    'chapter' => 'Pennod',
+    'chapters' => 'Penodau',
+    'x_chapters' => ':count Pennod|:count Penodau',
     'chapters_popular' => 'Popular Chapters',
-    'chapters_new' => 'New Chapter',
-    'chapters_create' => 'Create New Chapter',
-    'chapters_delete' => 'Delete Chapter',
-    'chapters_delete_named' => 'Delete Chapter :chapterName',
+    'chapters_new' => 'Pennod Newydd',
+    'chapters_create' => 'Creu Pennod Newydd',
+    'chapters_delete' => 'Dileu Pennod',
+    'chapters_delete_named' => 'Dileu :chapterName Pennod',
     'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.',
     'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?',
     'chapters_edit' => 'Edit Chapter',
@@ -196,13 +196,13 @@ return [
     // Pages
     'page' => 'Page',
     'pages' => 'Pages',
-    'x_pages' => ':count Page|:count Pages',
+    'x_pages' => ':count Tudalen|:count Tudalennau',
     'pages_popular' => 'Popular Pages',
-    'pages_new' => 'New Page',
+    'pages_new' => 'Tudalen Newydd',
     'pages_attachments' => 'Attachments',
     'pages_navigation' => 'Page Navigation',
-    'pages_delete' => 'Delete Page',
-    'pages_delete_named' => 'Delete Page :pageName',
+    'pages_delete' => 'Dileu Tudalen',
+    'pages_delete_named' => 'Dileu :pageName Tudalen',
     'pages_delete_draft_named' => 'Delete Draft Page :pageName',
     'pages_delete_draft' => 'Delete Draft Page',
     'pages_delete_success' => 'Page deleted',
@@ -234,9 +234,9 @@ return [
     'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
     'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
     'pages_save' => 'Save Page',
-    'pages_title' => 'Page Title',
-    'pages_name' => 'Page Name',
-    'pages_md_editor' => 'Editor',
+    'pages_title' => 'Teitl y Dudalen',
+    'pages_name' => 'Enw\'r Dudalen',
+    'pages_md_editor' => 'Golygydd',
     'pages_md_preview' => 'Preview',
     'pages_md_insert_image' => 'Insert Image',
     'pages_md_insert_link' => 'Insert Entity Link',
@@ -282,7 +282,7 @@ return [
     'pages_permissions_active' => 'Page Permissions Active',
     'pages_initial_revision' => 'Initial publish',
     'pages_references_update_revision' => 'System auto-update of internal links',
-    'pages_initial_name' => 'New Page',
+    'pages_initial_name' => 'Tudalen Newydd',
     'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.',
     'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.',
     'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.',
@@ -340,7 +340,7 @@ return [
     'attach' => 'Attach',
     'attachments_insert_link' => 'Add Attachment Link to Page',
     'attachments_edit_file' => 'Edit File',
-    'attachments_edit_file_name' => 'File Name',
+    'attachments_edit_file_name' => 'Enw\'r Ffeil',
     'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite',
     'attachments_order_updated' => 'Attachment order updated',
     'attachments_updated_success' => 'Attachment details updated',
@@ -412,12 +412,12 @@ return [
     'references_to_desc' => 'Listed below is all the known content in the system that links to this item.',
 
     // Watch Options
-    'watch' => 'Watch',
+    'watch' => 'Gwylio',
     'watch_title_default' => 'Default Preferences',
     'watch_desc_default' => 'Revert watching to just your default notification preferences.',
     'watch_title_ignore' => 'Ignore',
     'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.',
-    'watch_title_new' => 'New Pages',
+    'watch_title_new' => 'Tudalennau Newydd',
     'watch_desc_new' => 'Notify when any new page is created within this item.',
     'watch_title_updates' => 'All Page Updates',
     'watch_desc_updates' => 'Notify upon all new pages and page changes.',
index 2872f5f3c65fbf6a5d7ff3a0409c7c61073297ed..89087c9deff98ee16042f98075fe9d75452b65db 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 return [
-    'my_account' => 'My Account',
+    'my_account' => 'Fy Nghyfrif',
 
     'shortcuts' => 'Shortcuts',
     'shortcuts_interface' => 'UI Shortcut Preferences',
index f4c84092c6f71a8a580721269fdaa1899abe864d..52e03ff15d93a87baadaa011597f4f0ff2a0cbf9 100644 (file)
@@ -7,63 +7,63 @@
 return [
 
     // Common Messages
-    'settings' => 'Settings',
-    'settings_save' => 'Save Settings',
-    'system_version' => 'System Version',
-    'categories' => 'Categories',
+    'settings' => 'Gosodiadau',
+    'settings_save' => 'Cadw Gosodiadau',
+    'system_version' => 'Fersiwn System',
+    'categories' => 'Categorïau',
 
     // App Settings
-    'app_customization' => 'Customization',
-    'app_features_security' => 'Features & Security',
-    'app_name' => 'Application Name',
-    'app_name_desc' => 'This name is shown in the header and in any system-sent emails.',
-    'app_name_header' => 'Show name in header',
-    'app_public_access' => 'Public Access',
-    'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.',
-    'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.',
-    'app_public_access_toggle' => 'Allow public access',
-    'app_public_viewing' => 'Allow public viewing?',
-    'app_secure_images' => 'Higher Security Image Uploads',
-    'app_secure_images_toggle' => 'Enable higher security image uploads',
-    'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.',
-    'app_default_editor' => 'Default Page Editor',
-    'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
-    'app_custom_html' => 'Custom HTML Head Content',
-    'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the <head> section of every page. This is handy for overriding styles or adding analytics code.',
-    'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.',
-    'app_logo' => 'Application Logo',
-    'app_logo_desc' => 'This is used in the application header bar, among other areas. This image should be 86px in height. Large images will be scaled down.',
-    'app_icon' => 'Application Icon',
-    'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.',
-    'app_homepage' => 'Application Homepage',
-    'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.',
-    'app_homepage_select' => 'Select a page',
-    'app_footer_links' => 'Footer Links',
-    'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::<key>" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".',
-    'app_footer_links_label' => 'Link Label',
-    'app_footer_links_url' => 'Link URL',
-    'app_footer_links_add' => 'Add Footer Link',
-    'app_disable_comments' => 'Disable Comments',
-    'app_disable_comments_toggle' => 'Disable comments',
-    'app_disable_comments_desc' => 'Disables comments across all pages in the application. <br> Existing comments are not shown.',
+    'app_customization' => 'Addasiad',
+    'app_features_security' => 'Nodweddion & Diogelwch',
+    'app_name' => 'Enw\'r Rhaglen',
+    'app_name_desc' => 'Dangosir yr enw hwn yn y pennawd ac mewn unrhyw negeseuon e-bost a anfonir gan y system.',
+    'app_name_header' => 'Dangos enw yn y pennyn',
+    'app_public_access' => 'Mynediad Cyhoeddus',
+    'app_public_access_desc' => 'Bydd galluogi\'r opsiwn hwn yn caniatáu i ymwelwyr, nad ydynt wedi mewngofnodi, gael mynediad at gynnwys yn achos BookStack.',
+    'app_public_access_desc_guest' => 'Gellir rheoli mynediad i ymwelwyr cyhoeddus trwy\'r defnyddiwr "Gwestai".',
+    'app_public_access_toggle' => 'Caniatáu mynediad i\'r cyhoedd',
+    'app_public_viewing' => 'Caniatáu i\'r cyhoedd weld?',
+    'app_secure_images' => 'Uwchlwytho Delwedd Diogelwch Uwch',
+    'app_secure_images_toggle' => 'Galluogi uwchlwytho delwedd diogelwch uwch',
+    'app_secure_images_desc' => 'Am resymau perfformiad, mae\'r holl ddelweddau yn gyhoeddus. Mae\'r opsiwn hwn yn ychwanegu llinyn ar hap, anodd ei ddyfalu o flaen urls delwedd. Sicrhau nad yw mynegeion cyfeiriadur yn cael eu galluogi i atal mynediad hawdd.',
+    'app_default_editor' => 'Golygydd Tudalen Diofyn',
+    'app_default_editor_desc' => 'Dewiswch pa olygydd fydd yn cael ei ddefnyddio yn ddiofyn wrth olygu tudalennau newydd. Gellir diystyru hyn ar lefel tudalen os yw’r caniatâd yn galluogi hyn.',
+    'app_custom_html' => 'Cynnwys Pen HTML wedi’i deilwra',
+    'app_custom_html_desc' => 'Bydd unrhyw gynnwys a ychwanegir yma yn cael ei fewnosod i waelod yr adran <head> ar bob tudalen. Mae hyn yn ddefnyddiol ar gyfer diystyru arddulliau neu ychwanegu cod dadansoddeg.',
+    'app_custom_html_disabled_notice' => 'Mae cynnwys pen HTML wedi\'i deilwra wedi’i analluogi ar y dudalen gosodiadau hon i sicrhau y gellir troi unrhyw newidiadau toriadol yn ôl.',
+    'app_logo' => 'Logo’r Rhaglen',
+    'app_logo_desc' => 'Defnyddir hwn ym mar pennawd y rhaglen, ymhlith ardaloedd eraill. Dylai\'r ddelwedd hon fod yn 86px o uchder. Bydd delweddau mawr yn cael eu graddio i lawr.',
+    'app_icon' => 'Eicon yr Ap',
+    'app_icon_desc' => 'Defnyddir yr eicon hwn ar gyfer tabiau porwr ac eiconau llwybr byr. Dylai hwn fod yn ddelwedd PNG sgwâr 256px.',
+    'app_homepage' => 'Hafan y Rhaglen',
+    'app_homepage_desc' => 'Dewiswch wedd i\'w dangos ar yr hafan yn hytrach na\'r wedd ddiofyn. Anwybyddir caniatâd tudalen ar gyfer tudalennau dethol.',
+    'app_homepage_select' => 'Dewiswch dudalen',
+    'app_footer_links' => 'Dolenni Troedynnau',
+    'app_footer_links_desc' => 'Ychwanegwch ddolenni i\'w dangos o fewn troedyn y safle. Bydd y rhain yn cael eu harddangos ar waelod y rhan fwyaf o dudalennau, gan gynnwys y rhai nad oes angen mewngofnodi. Gallwch ddefnyddio label "trans::<key> i ddefnyddio cyfieithiadau wedi\'u diffinio gan y system. Er enghraifft: Bydd defnyddio "trans::common.privacy_policy" yn darparu\'r testun wedi’i gyfieithu "Polisi Preifatrwydd" a "trans::common.terms_of_service" yn darparu\'r testun wedi’i gyfieithu "Telerau Gwasanaeth".',
+    'app_footer_links_label' => 'Label Dolen',
+    'app_footer_links_url' => 'URL Dolen',
+    'app_footer_links_add' => 'Ychwanegu Dolen Troedyn',
+    'app_disable_comments' => 'Analluogi Sylwadau',
+    'app_disable_comments_toggle' => 'Analluogi sylwadau',
+    'app_disable_comments_desc' => 'Analluogi sylwadau ar draws pob tudalen yn y rhaglen. <br> Nid yw\'r sylwadau presennol yn cael eu dangos.',
 
     // Color settings
-    'color_scheme' => 'Application Color Scheme',
-    'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.',
-    'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.',
-    'app_color' => 'Primary Color',
-    'link_color' => 'Default Link Color',
-    'content_colors_desc' => 'Set colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.',
-    'bookshelf_color' => 'Shelf Color',
-    'book_color' => 'Book Color',
-    'chapter_color' => 'Chapter Color',
-    'page_color' => 'Page Color',
-    'page_draft_color' => 'Page Draft Color',
+    'color_scheme' => 'Cynllun Lliw’r Rhaglen',
+    'color_scheme_desc' => 'Gosodwch y lliwiau i\'w defnyddio yn rhyngwyneb defnyddiwr y rhaglen. Gellir ffurfweddu lliwiau ar wahân ar gyfer moddau tywyll a golau i gyd-fynd â\'r thema orau a sicrhau ei fod yn ddarllenadwy.',
+    'ui_colors_desc' => 'Gosodwch liw sylfaenol y rhaglen a’r lliw diofyn y ddolen. Defnyddir y lliw sylfaenol yn bennaf ar gyfer baner y pennyn, y botymau ac addurniadau rhyngwyneb. Defnyddir lliw diofyn y ddolen ar gyfer dolenni a chamau gweithredu testun, o fewn cynnwys ysgrifenedig ac yn rhyngwyneb y rhaglen.',
+    'app_color' => 'Prif Liw',
+    'link_color' => 'Lliw Diofyn y Ddolen',
+    'content_colors_desc' => 'Gosodwch liwiau ar gyfer pob elfen yn hierarchaeth trefn y dudalen. Argymhellir dewis lliwiau â disgleirdeb tebyg i\'r lliwiau diofyn ar gyfer darllenadwyedd.',
+    'bookshelf_color' => 'Lliw Silff',
+    'book_color' => 'Lliw Llyfr',
+    'chapter_color' => 'Lliw Pennod',
+    'page_color' => 'Lliw Tudalen',
+    'page_draft_color' => 'Lliw Tudalen Ddrafft',
 
     // Registration Settings
-    'reg_settings' => 'Registration',
-    'reg_enable' => 'Enable Registration',
-    'reg_enable_toggle' => 'Enable registration',
+    'reg_settings' => 'Cofrestriad',
+    'reg_enable' => 'Galluogi Cofrestru',
+    'reg_enable_toggle' => 'Galluogi cofrestru',
     'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.',
     'reg_default_role' => 'Default user role after registration',
     'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
@@ -75,215 +75,215 @@ return [
     'reg_confirm_restrict_domain_placeholder' => 'No restriction set',
 
     // Maintenance settings
-    'maint' => 'Maintenance',
-    'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
-    'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
-    'maint_image_cleanup_run' => 'Run Cleanup',
-    'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
-    'maint_image_cleanup_success' => ':count potentially unused images found and deleted!',
-    'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!',
-    'maint_send_test_email' => 'Send a Test Email',
-    'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.',
-    'maint_send_test_email_run' => 'Send test email',
-    'maint_send_test_email_success' => 'Email sent to :address',
-    'maint_send_test_email_mail_subject' => 'Test Email',
-    'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!',
-    'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.',
-    'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.',
-    'maint_recycle_bin_open' => 'Open Recycle Bin',
-    'maint_regen_references' => 'Regenerate References',
-    'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.',
-    'maint_regen_references_success' => 'Reference index has been regenerated!',
-    'maint_timeout_command_note' => 'Note: This action can take time to run, which can lead to timeout issues in some web environments. As an alternative, this action be performed using a terminal command.',
+    'maint' => 'Cynnal',
+    'maint_image_cleanup' => 'Glanhau Delweddau',
+    'maint_image_cleanup_desc' => 'Sganio tudalennau a chynnwys adolygu i wirio pa ddelweddau a darluniau sy\'n cael eu defnyddio ar hyn o bryd a pha ddelweddau sy\'n cael eu diddymu. Gwnewch yn siŵr eich bod yn creu cronfa ddata lawn a chopi wrth gefn o’r ddelwedd cyn rhedeg hwn.',
+    'maint_delete_images_only_in_revisions' => 'Hefyd dilëwch ddelweddau sydd ond yn bodoli mewn dhen dudalennau',
+    'maint_image_cleanup_run' => 'Rhedeg Glanhau',
+    'maint_image_cleanup_warning' => 'Daethpwyd o hyd i :count o ddelweddau nas defnyddiwyd o bosibl. Ydych chi\'n siŵr eich bod eisiau dileu’r delweddau hyn?',
+    'maint_image_cleanup_success' => 'daethpwyd o hyd i :count o ddelweddau nas defnyddiwyd o bosibl a chawsant eu dileu!',
+    'maint_image_cleanup_nothing_found' => 'Daethpwyd o hyd i ddim ddelweddau, Dim byd wedi\'i dileu!',
+    'maint_send_test_email' => 'Anfon E-bost Prawf',
+    'maint_send_test_email_desc' => 'Mae hyn yn anfon e-bost prawf i\'ch cyfeiriad e-bost a nodir yn eich proffil.',
+    'maint_send_test_email_run' => 'Anfon e-bost prawf',
+    'maint_send_test_email_success' => 'Anfonwyd e-bost at :address',
+    'maint_send_test_email_mail_subject' => 'E-bost Prawf',
+    'maint_send_test_email_mail_greeting' => 'Mae\'n ymddangos bod anfon e-bost yn gweithio!',
+    'maint_send_test_email_mail_text' => 'Llongyfarchiadau! Gan eich bod wedi derbyn yr hysbysiad e-bost hwn, mae\'n ymddangos bod eich gosodiadau e-bost wedi\'u ffurfweddu\'n iawn.',
+    'maint_recycle_bin_desc' => 'Caiff silffoedd, llyfrau, penodau a thudalennau wedi\'u dileu eu hanfon i’r bin ailgylchu fel y gellir eu hadfer neu eu dileu\'n barhaol. Bydd eitemau hŷn yn y bin ailgylchu yn cael eu dileu’n awtomatig ar ôl ychydig o bosibl, gan ddibynnu ar ffurfweddiad y system.',
+    'maint_recycle_bin_open' => 'Agor y Bin Ailgylchu',
+    'maint_regen_references' => 'Atgynhyrchu Cyfeiriadau',
+    'maint_regen_references_desc' => 'Bydd y weithred hon yn ailadeiladu\'r mynegai cyfeirio traws-eitem yn y gronfa ddata. Fel arfer, caiff hyn ei drin yn awtomatig ond gall y weithred hon fod yn ddefnyddiol i fynegeio hen gynnwys neu gynnwys a ychwanegwyd trwy ddulliau answyddogol.',
+    'maint_regen_references_success' => 'Mae’r mynegai cyfeirio wedi cael ei atgynhyrchu!',
+    'maint_timeout_command_note' => 'Noder: Gall y weithred hon gymryd amser i redeg, a all arwain at faterion amseru mewn rhai amgylcheddau gwe. Fel dewis arall, cyflawnir y weithred hon gan ddefnyddio gorchymyn terfynell.',
 
     // Recycle Bin
-    'recycle_bin' => 'Recycle Bin',
-    'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
-    'recycle_bin_deleted_item' => 'Deleted Item',
-    'recycle_bin_deleted_parent' => 'Parent',
-    'recycle_bin_deleted_by' => 'Deleted By',
-    'recycle_bin_deleted_at' => 'Deletion Time',
-    'recycle_bin_permanently_delete' => 'Permanently Delete',
-    'recycle_bin_restore' => 'Restore',
-    'recycle_bin_contents_empty' => 'The recycle bin is currently empty',
-    'recycle_bin_empty' => 'Empty Recycle Bin',
-    'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
-    'recycle_bin_destroy_list' => 'Items to be Destroyed',
-    'recycle_bin_restore_list' => 'Items to be Restored',
-    'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.',
-    'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.',
-    'recycle_bin_restore_parent' => 'Restore Parent',
-    'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.',
-    'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.',
+    'recycle_bin' => 'Bin Ailgylchu',
+    'recycle_bin_desc' => 'Yma gallwch adfer eitemau sydd wedi\'u dileu neu ddewis eu dileu yn barhaol oddi ar y system. Nid yw’r rhestr hon wedi’i hidlo yn wahanol i restrau gweithgaredd tebyg yn y system lle mae hidlwyr caniatâd yn cael eu cymhwyso.',
+    'recycle_bin_deleted_item' => 'Eitem wedi\'i Dileu',
+    'recycle_bin_deleted_parent' => 'Rhiant',
+    'recycle_bin_deleted_by' => 'Dilëwyd gan',
+    'recycle_bin_deleted_at' => 'Amser Dileu',
+    'recycle_bin_permanently_delete' => 'Dileu yn Barhaol',
+    'recycle_bin_restore' => 'Adfer',
+    'recycle_bin_contents_empty' => 'Mae\'r bin ailgylchu yn wag ar hyn o bryd',
+    'recycle_bin_empty' => 'Gwagio’r Bin Ailgylchu',
+    'recycle_bin_empty_confirm' => 'Bydd hyn yn dileu pob eitem yn y bin ailgylchu yn barhaol gan gynnwys popeth sydd wedi\'i gynnwys ym mhob eitem. Ydych chi\'n siŵr eich bod am wagio’r bin ailgylchu?',
+    'recycle_bin_destroy_confirm' => 'Bydd y weithred hon yn dileu\'r eitem hon o\'r system yn barhaol, ynghyd ag unrhyw elfennau plentyn a restrir isod, ac ni fyddwch yn gallu adfer y cynnwys hwn. Ydych chi\'n siŵr eich bod eisiau dileu\'r eitem hon yn barhaol?',
+    'recycle_bin_destroy_list' => 'Eitemau i\'w Dinistrio',
+    'recycle_bin_restore_list' => 'Eitemau i\'w Hadfer',
+    'recycle_bin_restore_confirm' => 'Bydd y weithred hon yn adfer yr eitem a ddilëwyd, gan gynnwys unrhyw elfennau plentyn, i\'w lleoliad gwreiddiol. Os yw\'r lleoliad gwreiddiol wedi\'i ddileu ers hynny, a’i fod bellach yn y bin ailgylchu, bydd angen adfer yr eitem riant hefyd.',
+    'recycle_bin_restore_deleted_parent' => 'Mae rhiant yr eitem hon hefyd wedi\'i dileu. Bydd y rhain yn parhau i fod wedi’u dileu nes bod y rhiant hwnnw hefyd yn cael ei adfer.',
+    'recycle_bin_restore_parent' => 'Adfer Rhiant',
+    'recycle_bin_destroy_notification' => 'Dilëwyd cyfanswm o :count o eitemau o\'r bin ailgylchu.',
+    'recycle_bin_restore_notification' => 'Adferwyd cyfanswm o :count o eitemau o\'r bin ailgylchu.',
 
     // Audit Log
-    'audit' => 'Audit Log',
-    'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
-    'audit_event_filter' => 'Event Filter',
-    'audit_event_filter_no_filter' => 'No Filter',
-    'audit_deleted_item' => 'Deleted Item',
-    'audit_deleted_item_name' => 'Name: :name',
-    'audit_table_user' => 'User',
-    'audit_table_event' => 'Event',
-    'audit_table_related' => 'Related Item or Detail',
-    'audit_table_ip' => 'IP Address',
-    'audit_table_date' => 'Activity Date',
+    'audit' => 'Log Awdit',
+    'audit_desc' => 'Mae\'r cofnod archwilio hwn yn dangos rhestr o weithgareddau sydd wedi\'u holrhain yn y system. Nid yw’r rhestr hon wedi’i hidlo yn wahanol i restrau gweithgaredd tebyg yn y system lle mae hidlwyr caniatâd yn cael eu cymhwyso.',
+    'audit_event_filter' => 'Hidlydd Digwyddiad',
+    'audit_event_filter_no_filter' => 'Dim Fidlydd',
+    'audit_deleted_item' => 'Eitem wedi\'i Dileu',
+    'audit_deleted_item_name' => 'Enw: :name',
+    'audit_table_user' => 'Defnyddiwr',
+    'audit_table_event' => 'Digwyddiad',
+    'audit_table_related' => 'Eitem neu Fanylion Cysylltiedig',
+    'audit_table_ip' => 'Cyfeiriad IP',
+    'audit_table_date' => 'Dyddiad Gweithgaredd',
     'audit_date_from' => 'Date Range From',
     'audit_date_to' => 'Date Range To',
 
     // Role Settings
-    'roles' => 'Roles',
-    'role_user_roles' => 'User Roles',
+    'roles' => 'Rolau',
+    'role_user_roles' => 'Rolau Defnyddiwr',
     'roles_index_desc' => 'Roles are used to group users & provide system permission to their members. When a user is a member of multiple roles the privileges granted will stack and the user will inherit all abilities.',
     'roles_x_users_assigned' => ':count user assigned|:count users assigned',
-    'roles_x_permissions_provided' => ':count permission|:count permissions',
+    'roles_x_permissions_provided' => ':count caniatâd|:count caniatâd',
     'roles_assigned_users' => 'Assigned Users',
     'roles_permissions_provided' => 'Provided Permissions',
-    'role_create' => 'Create New Role',
-    'role_delete' => 'Delete Role',
-    'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.',
-    'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.',
-    'role_delete_no_migration' => "Don't migrate users",
-    'role_delete_sure' => 'Are you sure you want to delete this role?',
-    'role_edit' => 'Edit Role',
-    'role_details' => 'Role Details',
-    'role_name' => 'Role Name',
-    'role_desc' => 'Short Description of Role',
-    'role_mfa_enforced' => 'Requires Multi-Factor Authentication',
-    'role_external_auth_id' => 'External Authentication IDs',
-    'role_system' => 'System Permissions',
-    'role_manage_users' => 'Manage users',
-    'role_manage_roles' => 'Manage roles & role permissions',
-    'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions',
-    'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages',
-    'role_manage_page_templates' => 'Manage page templates',
-    'role_access_api' => 'Access system API',
-    'role_manage_settings' => 'Manage app settings',
-    'role_export_content' => 'Export content',
-    'role_editor_change' => 'Change page editor',
-    'role_notifications' => 'Receive & manage notifications',
-    'role_asset' => 'Asset Permissions',
-    'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.',
-    'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.',
-    'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.',
-    'role_asset_image_view_note' => 'This relates to visibility within the image manager. Actual access of uploaded image files will be dependant upon system image storage option.',
-    'role_all' => 'All',
-    'role_own' => 'Own',
-    'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to',
-    'role_save' => 'Save Role',
-    'role_users' => 'Users in this role',
-    'role_users_none' => 'No users are currently assigned to this role',
+    'role_create' => 'Creu Rôl Newydd',
+    'role_delete' => 'Dileu Rôl',
+    'role_delete_confirm' => 'Bydd hyn yn dileu\'r rôl gyda\'r enw \':roleName\'.',
+    'role_delete_users_assigned' => 'Mae gan y rôl hon :userCount o ddefnyddwyr wedi’u clustnodi iddi. Os hoffech chi fudo\'r defnyddwyr o\'r rôl hon dewiswch rôl newydd isod.',
+    'role_delete_no_migration' => "Peidiwch â mudo defnyddwyr",
+    'role_delete_sure' => 'Wyt ti\'n bendant eisiau dileu\'r rôl hwn?',
+    'role_edit' => 'Golygu Rôl',
+    'role_details' => 'Manylion Rôl',
+    'role_name' => 'Enw Rôl',
+    'role_desc' => 'Disgrifiad Byr o’r Rôl',
+    'role_mfa_enforced' => 'Angen Dilysu Aml-Ffactor',
+    'role_external_auth_id' => 'ID Dilysu Allanol',
+    'role_system' => 'Caniatâd System',
+    'role_manage_users' => 'Rheoli defnyddwyr',
+    'role_manage_roles' => 'Rheoli rolau & chaniatâd rolau',
+    'role_manage_entity_permissions' => 'Rheoli caniatâd pob llyfr, pennod a thudalen',
+    'role_manage_own_entity_permissions' => 'Rheoli caniatâd eich llyfr, pennod a thudalennau eich hun',
+    'role_manage_page_templates' => 'Rheoli templedi tudalen',
+    'role_access_api' => 'Mynediad i Ryngwyneb Rhaglennu Cymwysiadau (API) system',
+    'role_manage_settings' => 'Rheoli gosodiadau apiau',
+    'role_export_content' => 'Cynnwys allforio',
+    'role_editor_change' => 'Newid golygydd tudalen',
+    'role_notifications' => 'Derbyn a rheoli hysbysiadau',
+    'role_asset' => 'Caniatâd Asedau',
+    'roles_system_warning' => 'Byddwch yn ymwybodol y gall mynediad i unrhyw un o\'r tri chaniatâd uchod ganiatáu i ddefnyddiwr newid eu breintiau eu hunain neu freintiau eraill yn y system. Neilltuo rolau gyda\'r caniatâd hyn i ddefnyddwyr dibynadwy yn unig.',
+    'role_asset_desc' => 'Mae\'r caniatâd hwn yn rheoli mynediad diofyn i\'r asedau o fewn y system. Bydd caniatâd ar Lyfrau, Penodau a Thudalennau yn diystyru\'r caniatâd hwn.',
+    'role_asset_admins' => 'Mae gweinyddwyr yn cael mynediad awtomatig i\'r holl gynnwys ond gall yr opsiynau hyn ddangos neu guddio opsiynau UI.',
+    'role_asset_image_view_note' => 'Mae hyn yn ymwneud â gwelededd o fewn y rheolwr delweddau. Bydd mynediad gwirioneddol i ffeiliau delwedd wedi\'u huwchlwytho yn dibynnu ar opsiwn storio delwedd y system.',
+    'role_all' => 'Popeth',
+    'role_own' => 'Meddu',
+    'role_controlled_by_asset' => 'Wedi\'u rheoli gan yr ased y maent yn cael eu huwchlwytho iddo',
+    'role_save' => 'Cadw Rôl',
+    'role_users' => 'Defnyddwyr yn y rôl hon',
+    'role_users_none' => 'Nid oes unrhyw ddefnyddwyr wedi’u neilltuo i\'r rôl hon ar hyn o bryd',
 
     // Users
-    'users' => 'Users',
-    'users_index_desc' => 'Create & manage individual user accounts within the system. User accounts are used for login and attribution of content & activity. Access permissions are primarily role-based but user content ownership, among other factors, may also affect permissions & access.',
-    'user_profile' => 'User Profile',
-    'users_add_new' => 'Add New User',
-    'users_search' => 'Search Users',
-    'users_latest_activity' => 'Latest Activity',
-    'users_details' => 'User Details',
-    'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.',
-    'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.',
-    'users_role' => 'User Roles',
-    'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.',
-    'users_password' => 'User Password',
-    'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.',
-    'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.',
-    'users_send_invite_option' => 'Send user invite email',
+    'users' => 'Defnyddwyr',
+    'users_index_desc' => 'Creu a rheoli cyfrifon defnyddwyr unigol o fewn y system. Defnyddir cyfrifon defnyddwyr ar gyfer mewngofnodi a phriodoli cynnwys a gweithgaredd. Mae caniatâd mynediad yn seiliedig ar rôl yn bennaf ond gall perchenogaeth cynnwys defnyddwyr, ymhlith ffactorau eraill, hefyd effeithio ar ganiatâd a mynediad.',
+    'user_profile' => 'Proffil Defnyddiwr',
+    'users_add_new' => 'Ychwanegu Defnyddiwr Newydd',
+    'users_search' => 'Chwilio Defnyddwyr',
+    'users_latest_activity' => 'Gweithgaredd Diweddaraf',
+    'users_details' => 'Manylion Defnyddiwr',
+    'users_details_desc' => 'Gosodwch enw arddangos a chyfeiriad e-bost ar gyfer y defnyddiwr hwn. Bydd y cyfeiriad e-bost yn cael ei ddefnyddio ar gyfer mewngofnodi i’r cais.',
+    'users_details_desc_no_email' => 'Gosodwch enw arddangos ar gyfer y defnyddiwr hwn fel y gall eraill eu hadnabod.',
+    'users_role' => 'Rolau Defnyddiwr',
+    'users_role_desc' => 'Dewiswch ba rolau a neilltuir i’r defnyddiwr hwn. Os yw defnyddiwr yn cael ei neilltuo i rolau lluosog, bydd y caniatâd o\'r rolau hynny yn pentyrru a byddant yn derbyn pob gallu o\'r rolau a neilltuwyd.',
+    'users_password' => 'Cyfrinair Defnyddiwr',
+    'users_password_desc' => 'Gosodwch gyfrinair a ddefnyddir i fewngofnodi i\'r rhaglen. Rhaid i gyfrineiriau fod yn 8 nod o leiaf.',
+    'users_send_invite_text' => 'Gallwch ddewis anfon e-bost gwahoddiad i\'r defnyddiwr hwn sy\'n caniatáu iddynt osod eu cyfrinair eu hunain neu gallwch osod eu cyfrinair eich hun.',
+    'users_send_invite_option' => 'Anfon e-bost gwahodd i’r defnyddiwr',
     'users_external_auth_id' => 'External Authentication ID',
-    'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.',
-    'users_password_warning' => 'Only fill the below if you would like to change the password for this user.',
-    'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.',
-    'users_delete' => 'Delete User',
-    'users_delete_named' => 'Delete user :userName',
-    'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.',
-    'users_delete_confirm' => 'Are you sure you want to delete this user?',
+    'users_external_auth_id_desc' => 'Pan fydd system ddilysu allanol yn cael ei defnyddio (megis SAML2, OIDC neu LDAP) dyma\'r ID sy\'n cysylltu\'r defnyddiwr BookStack hwn â\'r cyfrif system ddilysu. Gallwch anwybyddu\'r maes hwn os ydych chi\'n defnyddio\'r dilysiad diofyn e-bost.',
+    'users_password_warning' => 'Llenwch y canlynol os hoffech newid y cyfrinair ar gyfer y defnyddiwr hwn yn unig.',
+    'users_system_public' => 'Mae\'r defnyddiwr hwn yn cynrychioli unrhyw westeion sy\'n ymweld â\'ch enghraifft. Ni ellir ei ddefnyddio i fewngofnodi ond mae\'n cael ei aseinio\'n awtomatig.',
+    'users_delete' => 'Dileu Defnyddiwr',
+    'users_delete_named' => 'Dileu defnyddiwr :userName',
+    'users_delete_warning' => 'Bydd hyn yn dileu\'r defnyddiwr hwn yn llawn gyda\'r enw \':userName\' o\'r system.',
+    'users_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu’r defnyddiwr hwn?',
     'users_migrate_ownership' => 'Migrate Ownership',
-    'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
-    'users_none_selected' => 'No user selected',
-    'users_edit' => 'Edit User',
-    'users_edit_profile' => 'Edit Profile',
-    'users_avatar' => 'User Avatar',
-    'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.',
-    'users_preferred_language' => 'Preferred Language',
-    'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.',
-    'users_social_accounts' => 'Social Accounts',
-    'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.',
-    'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.',
-    'users_social_connect' => 'Connect Account',
-    'users_social_disconnect' => 'Disconnect Account',
-    'users_social_status_connected' => 'Connected',
-    'users_social_status_disconnected' => 'Disconnected',
-    'users_social_connected' => ':socialAccount account was successfully attached to your profile.',
-    'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.',
-    'users_api_tokens' => 'API Tokens',
-    'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.',
-    'users_api_tokens_none' => 'No API tokens have been created for this user',
-    'users_api_tokens_create' => 'Create Token',
-    'users_api_tokens_expires' => 'Expires',
-    'users_api_tokens_docs' => 'API Documentation',
-    'users_mfa' => 'Multi-Factor Authentication',
-    'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.',
-    'users_mfa_x_methods' => ':count method configured|:count methods configured',
-    'users_mfa_configure' => 'Configure Methods',
+    'users_migrate_ownership_desc' => 'Dewiswch ddefnyddiwr yma os ydych chi am i ddefnyddiwr arall ddod yn berchennog ar yr holl eitemau sy\'n eiddo i\'r defnyddiwr hwn ar hyn o bryd.',
+    'users_none_selected' => 'Ni ddewiswyd defnyddiwr',
+    'users_edit' => 'Golygu Defnyddiwr',
+    'users_edit_profile' => 'Golygu Proffil',
+    'users_avatar' => 'Afatar Defnyddiwr',
+    'users_avatar_desc' => 'Dewiswch ddelwedd i gynrychioli\'r defnyddiwr hwn. Dylai hwn fod yn ddelwedd sgwâr tua 256px.',
+    'users_preferred_language' => 'Dewis Iaith',
+    'users_preferred_language_desc' => 'Bydd yr opsiwn hwn yn newid yr iaith a ddefnyddir ar gyfer rhyngwyneb defnyddiwr y rhaglen. Ni fydd hyn yn effeithio ar unrhyw gynnwys a grëwyd gan y defnyddiwr.',
+    'users_social_accounts' => 'Cyfrifon Cymdeithasol',
+    'users_social_accounts_desc' => 'Gweld statws y cyfrifon cymdeithasol cysylltiedig ar gyfer y defnyddiwr hwn. Gellir defnyddio cyfrifon cymdeithasol yn ychwanegol at y system ddilysu sylfaenol ar gyfer mynediad system.',
+    'users_social_accounts_info' => 'Yma gallwch gysylltu eich cyfrifon eraill ar gyfer mewngofnodi cyflymach a haws. Nid yw datgysylltu cyfrif yma yn diddymu mynediad awdurdodedig blaenorol. Diddymu mynediad o\'ch gosodiadau proffil ar y cyfrif cymdeithasol cysylltiedig.',
+    'users_social_connect' => 'Cysylltu Cyfrif',
+    'users_social_disconnect' => 'Datgysylltu Cyfrif',
+    'users_social_status_connected' => 'Wedi Cysylltu',
+    'users_social_status_disconnected' => 'Wedi Datgysylltu',
+    'users_social_connected' => 'Mae eich cyfrif :socialAccount wedi\'i gysylltu\'n llwyddiannus â\'ch proffil.',
+    'users_social_disconnected' => 'Mae eich cyfrif :socialAccount wedi\'i ddatgysylltu\'n llwyddiannus o\'ch proffil.',
+    'users_api_tokens' => 'Tocynnau API',
+    'users_api_tokens_desc' => 'Creu a rheoli\'r tocynnau mynediad a ddefnyddir i ddilysu gyda\'r API BookStack REST. Rheolir caniatâd ar gyfer yr API trwy\'r defnyddiwr y mae\'r tocyn yn perthyn iddo.',
+    'users_api_tokens_none' => 'Nid oes tocynnau API wedi\'u creu ar gyfer y defnyddiwr hwn',
+    'users_api_tokens_create' => 'Creu Tocyn',
+    'users_api_tokens_expires' => 'Yn dod i ben',
+    'users_api_tokens_docs' => 'Dogfennaeth API',
+    'users_mfa' => 'Dilysu Aml-Ffactor',
+    'users_mfa_desc' => 'Gosod dilysu aml-ffactor fel haen ychwanegol o ddiogelwch ar gyfer eich cyfrif defnyddiwr.',
+    'users_mfa_x_methods' => ':count dull wedi\'i ffurfweddu|:count dull wedi\'u ffurfweddu',
+    'users_mfa_configure' => 'Ffurfweddu Dulliau',
 
     // API Tokens
-    'user_api_token_create' => 'Create API Token',
-    'user_api_token_name' => 'Name',
-    'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.',
-    'user_api_token_expiry' => 'Expiry Date',
-    'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.',
-    'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.',
-    'user_api_token' => 'API Token',
-    'user_api_token_id' => 'Token ID',
-    'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.',
-    'user_api_token_secret' => 'Token Secret',
-    'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.',
-    'user_api_token_created' => 'Token created :timeAgo',
-    'user_api_token_updated' => 'Token updated :timeAgo',
-    'user_api_token_delete' => 'Delete Token',
-    'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.',
-    'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?',
+    'user_api_token_create' => 'Creu Tocyn API',
+    'user_api_token_name' => 'Enw',
+    'user_api_token_name_desc' => 'Rhowch enw darllenadwy i\'ch tocyn i\'ch atgoffa o\'i bwrpas arfaethedig yn y dyfodol.',
+    'user_api_token_expiry' => 'Dyddiad Dod i Ben',
+    'user_api_token_expiry_desc' => 'Gosodwch ddyddiad pan fydd y tocyn hwn yn dod i ben. Ar ôl y dyddiad hwn, ni fydd ceisiadau a wneir gan ddefnyddio\'r tocyn hwn yn gweithio mwyach. Bydd gadael y maes hwn yn wag yn gosod dyddiad dod i ben 100 mlynedd i\'r dyfodol.',
+    'user_api_token_create_secret_message' => 'Yn syth ar ôl creu\'r tocyn hwn bydd "ID tocyn" a "Chyfrinach Tocyn" yn cael eu cynhyrchu a\'u harddangos. Dim ond unwaith y bydd y gyfrinach yn cael ei dangos, felly gwnewch yn siŵr eich bod yn copïo\'r gwerth i rywle diogel cyn bwrw ymlaen.',
+    'user_api_token' => 'Tocyn API',
+    'user_api_token_id' => 'ID Tocyn',
+    'user_api_token_id_desc' => 'Mae hwn yn ddynodwr a gynhyrchir gan y system na ellir ei olygu ar gyfer y tocyn hwn y bydd angen ei ddarparu mewn ceisiadau API.',
+    'user_api_token_secret' => 'Cyfrinach Tocyn',
+    'user_api_token_secret_desc' => 'Mae hwn yn gyfrinach a gynhyrchir gan y system ar gyfer y tocyn hwn y bydd angen ei ddarparu mewn ceisiadau API. Dim ond unwaith y bydd hyn yn cael ei arddangos, felly copïwch y gwerth hwn i rywle diogel.',
+    'user_api_token_created' => 'Crëwyd tocyn :timeAgo',
+    'user_api_token_updated' => 'Diweddarwyd tocyn :timeAgo',
+    'user_api_token_delete' => 'Dileu Tocyn',
+    'user_api_token_delete_warning' => 'Bydd hyn yn dileu\'r tocyn API hwn yn llawn gyda\'r enw \':tokenName\' o\'r system.',
+    'user_api_token_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu’r tocyn API hwn?',
 
     // Webhooks
-    'webhooks' => 'Webhooks',
-    'webhooks_index_desc' => 'Webhooks are a way to send data to external URLs when certain actions and events occur within the system which allows event-based integration with external platforms such as messaging or notification systems.',
-    'webhooks_x_trigger_events' => ':count trigger event|:count trigger events',
-    'webhooks_create' => 'Create New Webhook',
-    'webhooks_none_created' => 'No webhooks have yet been created.',
-    'webhooks_edit' => 'Edit Webhook',
-    'webhooks_save' => 'Save Webhook',
-    'webhooks_details' => 'Webhook Details',
+    'webhooks' => 'Gwe-fachau',
+    'webhooks_index_desc' => 'Mae gwe-fachau’n ffordd o anfon data at URL allanol pan fydd rhai gweithredoedd a digwyddiadau yn digwydd o fewn y system sy\'n caniatáu integreiddio ar sail digwyddiadau gyda llwyfannau allanol megis systemau negeseuon neu hysbysu.',
+    'webhooks_x_trigger_events' => ':count sbarduno digwyddiad|:count sbarduno digwyddiadau',
+    'webhooks_create' => 'Creu Gwe-fachyn Newydd',
+    'webhooks_none_created' => 'Nid oes unrhyw we-fachau wedi\'u creu eto.',
+    'webhooks_edit' => 'Golygu Gwe-fachyn',
+    'webhooks_save' => 'Cadw Gwe-fachyn',
+    'webhooks_details' => 'Manylion Gwe-fachyn',
     'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.',
-    'webhooks_events' => 'Webhook Events',
-    'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.',
-    'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.',
-    'webhooks_events_all' => 'All system events',
-    'webhooks_name' => 'Webhook Name',
-    'webhooks_timeout' => 'Webhook Request Timeout (Seconds)',
-    'webhooks_endpoint' => 'Webhook Endpoint',
-    'webhooks_active' => 'Webhook Active',
-    'webhook_events_table_header' => 'Events',
-    'webhooks_delete' => 'Delete Webhook',
-    'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.',
-    'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?',
-    'webhooks_format_example' => 'Webhook Format Example',
-    'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.',
-    'webhooks_status' => 'Webhook Status',
-    'webhooks_last_called' => 'Last Called:',
-    'webhooks_last_errored' => 'Last Errored:',
-    'webhooks_last_error_message' => 'Last Error Message:',
+    'webhooks_events' => 'Digwyddiadau Gwe-fachyn',
+    'webhooks_events_desc' => 'Dewiswch yr holl ddigwyddiadau a ddylai sbarduno\'r gwe-fachyn hwn i gael ei alw.',
+    'webhooks_events_warning' => 'Cadwch mewn cof y bydd y digwyddiadau hyn yn cael eu sbarduno ar gyfer yr holl ddigwyddiadau a ddewiswyd, hyd yn oed os rhoddir caniatâd arferol ar waith. Gwnewch yn siŵr na fydd defnyddio\'r gwe-fachyn hwn yn datgelu cynnwys cyfrinachol.',
+    'webhooks_events_all' => 'Holl ddigwyddiadau\'r system',
+    'webhooks_name' => 'Enw Gwe-fachyn',
+    'webhooks_timeout' => 'Terfyn Amser Gwneud Cais Gwe-fachyn (Eiliadau)',
+    'webhooks_endpoint' => 'Pwynt Terfyn Gwe-fachyn',
+    'webhooks_active' => 'Gwe-fachyn Byw',
+    'webhook_events_table_header' => 'Digwyddiadau',
+    'webhooks_delete' => 'Dileu Gwe-fachyn',
+    'webhooks_delete_warning' => 'Bydd hyn yn dileu\'r gwe-fachyn hwn yn llawn gyda\'r enw \':webhookName\', o\'r system.',
+    'webhooks_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu’r gwe-fachyn hwn?',
+    'webhooks_format_example' => 'Enghraifft Fformat Gwe-fachyn',
+    'webhooks_format_example_desc' => 'Anfonir data Gwe-fachyn fel cais POST i\'r pwynt terfyn wedi\'i ffurfweddu fel JSON yn dilyn y fformat isod. Mae\'r nodweddion "related_item" ac "url" yn ddewisol a byddant yn dibynnu ar y math o ddigwyddiad a sbardunir.',
+    'webhooks_status' => 'Statws Gwe-fachyn',
+    'webhooks_last_called' => 'Galwyd Ddiwethaf:',
+    'webhooks_last_errored' => 'Cafwyd Gwall Ddiwethaf:',
+    'webhooks_last_error_message' => 'Neges Wall Ddiwethaf:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => 'Trwyddedau',
+    'licenses_desc' => 'Mae\'r dudalen hon yn manylu ar wybodaeth am drwydded ar gyfer BookStack yn ychwanegol at y prosiectau a’r llyfrgelloedd a ddefnyddir o fewn BookStack. Dim ond mewn cyd-destun datblygu y gellir defnyddio llawer o’r prosiectau a restrir.',
+    'licenses_bookstack' => 'Trwydded BookStack',
+    'licenses_php' => 'Trwyddedau Llyfrgell PHP',
+    'licenses_js' => 'Trwyddedau Llyfrgell JavaScript',
+    'licenses_other' => 'Trwyddedau Eraill',
+    'license_details' => 'Manylion y Drwydded',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 87efe285093005f43dca4dea0d3480e8458609b0..006641841748367fd7ecb7f755b57526dda98303 100644 (file)
@@ -41,74 +41,74 @@ return [
         'array'   => 'Rhaid i\'r :attribute fod yn fwy na :value eitemau.',
     ],
     'gte'                  => [
-        'numeric' => 'The :attribute must be greater than or equal :value.',
-        'file'    => 'The :attribute must be greater than or equal :value kilobytes.',
-        'string'  => 'The :attribute must be greater than or equal :value characters.',
-        'array'   => 'The :attribute must have :value items or more.',
+        'numeric' => 'Rhaid i’r :attribute fod yn fwy na, neu’n gyfartal â :value.',
+        'file'    => 'Rhaid i’r :attribute fod yn fwy na, neu’n gyfartal â :value cilobeit.',
+        'string'  => 'Rhaid i’r :attribute fod yn fwy na, neu’n gyfartal â :value nod.',
+        'array'   => 'Rhaid i’r :attribute fod â :value o eitemau neu fwy.',
     ],
-    'exists'               => 'The selected :attribute is invalid.',
-    'image'                => 'The :attribute must be an image.',
-    'image_extension'      => 'The :attribute must have a valid & supported image extension.',
-    'in'                   => 'The selected :attribute is invalid.',
-    'integer'              => 'The :attribute must be an integer.',
-    'ip'                   => 'The :attribute must be a valid IP address.',
-    'ipv4'                 => 'The :attribute must be a valid IPv4 address.',
-    'ipv6'                 => 'The :attribute must be a valid IPv6 address.',
-    'json'                 => 'The :attribute must be a valid JSON string.',
+    'exists'               => 'Mae\'r dewis :attribute yn annilys.',
+    'image'                => 'Rhaid i’r :attribute fod yn ddelwedd.',
+    'image_extension'      => 'Rhaid i’r :attribute fod ag estyniad delwedd dilys & gefnogir.',
+    'in'                   => 'Mae\'r dewis :attribute yn annilys.',
+    'integer'              => 'Rhaid i’r :attribute fod yn gyfanrif.',
+    'ip'                   => 'Rhaid i’r :attribute fod yn gyfeiriad IP dilys.',
+    'ipv4'                 => 'Rhaid i’r :attribute fod yn gyfeiriad IPv4 dilys.',
+    'ipv6'                 => 'Rhaid i’r :attribute fod yn gyfeiriad IPv6 dilys.',
+    'json'                 => 'Rhaid i’r :attribute fod yn llinyn JSON dilys.',
     'lt'                   => [
-        'numeric' => 'The :attribute must be less than :value.',
-        'file'    => 'The :attribute must be less than :value kilobytes.',
-        'string'  => 'The :attribute must be less than :value characters.',
-        'array'   => 'The :attribute must have less than :value items.',
+        'numeric' => 'Rhaid i’r :attribute fod yn llai na :value.',
+        'file'    => 'Rhaid i’r :attribute fod yn llai na :value cilobeit.',
+        'string'  => 'Rhaid i’r :attribute fod yn llai na :value nod.',
+        'array'   => 'Rhaid i’r :attribute fod â llai na :value o eitemau.',
     ],
     'lte'                  => [
-        'numeric' => 'The :attribute must be less than or equal :value.',
-        'file'    => 'The :attribute must be less than or equal :value kilobytes.',
-        'string'  => 'The :attribute must be less than or equal :value characters.',
-        'array'   => 'The :attribute must not have more than :value items.',
+        'numeric' => 'Rhaid i’r :attribute fod yn llai na, neu’n gyfartal â :value.',
+        'file'    => 'Rhaid i’r :attribute fod yn llai na, neu’n gyfartal â :value cilobeit.',
+        'string'  => 'Rhaid i’r :attribute fod yn llai na, neu’n gyfartal â :value nod.',
+        'array'   => 'Ni ddylai’r :attribute fod â mwy na :value o eitemau.',
     ],
     'max'                  => [
-        'numeric' => 'The :attribute may not be greater than :max.',
-        'file'    => 'The :attribute may not be greater than :max kilobytes.',
-        'string'  => 'The :attribute may not be greater than :max characters.',
-        'array'   => 'The :attribute may not have more than :max items.',
+        'numeric' => 'Ni ddylai’r :attribute fod yn fwy na :max.',
+        'file'    => 'Ni ddylai’r :attribute fod yn fwy na :max cilobeit.',
+        'string'  => 'Ni ddylai’r :attribute fod yn fwy na :max nod.',
+        'array'   => 'Ni ddylai’r :attribute fod â mwy na :max o eitemau.',
     ],
-    'mimes'                => 'The :attribute must be a file of type: :values.',
+    'mimes'                => 'Rhaid i’r :attribute fod yn ffeil o fath: :values.',
     'min'                  => [
-        'numeric' => 'The :attribute must be at least :min.',
-        'file'    => 'The :attribute must be at least :min kilobytes.',
-        'string'  => 'The :attribute must be at least :min characters.',
-        'array'   => 'The :attribute must have at least :min items.',
+        'numeric' => 'Rhaid i’r :attribute fod yn o leiaf :min.',
+        'file'    => 'Rhaid i’r :attribute fod yn o leiaf :min cilobeit.',
+        'string'  => 'Rhaid i’r :attribute fod yn o leiaf :min nod.',
+        'array'   => 'Rhaid i’r :attribute fod â llai na :min o eitemau.',
     ],
-    'not_in'               => 'The selected :attribute is invalid.',
-    'not_regex'            => 'The :attribute format is invalid.',
-    'numeric'              => 'The :attribute must be a number.',
-    'regex'                => 'The :attribute format is invalid.',
-    'required'             => 'The :attribute field is required.',
-    'required_if'          => 'The :attribute field is required when :other is :value.',
-    'required_with'        => 'The :attribute field is required when :values is present.',
-    'required_with_all'    => 'The :attribute field is required when :values is present.',
-    'required_without'     => 'The :attribute field is required when :values is not present.',
-    'required_without_all' => 'The :attribute field is required when none of :values are present.',
-    'same'                 => 'The :attribute and :other must match.',
-    'safe_url'             => 'The provided link may not be safe.',
+    'not_in'               => 'Mae\'r dewis :attribute yn annilys.',
+    'not_regex'            => 'Mae’r fformat :attribute yn annilys.',
+    'numeric'              => 'Rhaid i’r :attribute fod yn rhif.',
+    'regex'                => 'Mae’r fformat :attribute yn annilys.',
+    'required'             => 'Mae :attribute yn faes gofynnol.',
+    'required_if'          => 'Mae :attribute yn faes gofynnol pan fo :other yn :value.',
+    'required_with'        => 'Mae :attribute yn faes gofynnol pan fo :values yn bresennol.',
+    'required_with_all'    => 'Mae :attribute yn faes gofynnol pan fo :values yn bresennol.',
+    'required_without'     => 'Mae :attitude yn faes gofynnol pan nad yw :values yn bresennol.',
+    'required_without_all' => 'Mae angen y maes :attribute os dydi\'r un o :values yn bresennol.',
+    'same'                 => 'Mae’n rhaid i’r :attribute a :other gyd-fynd.',
+    'safe_url'             => 'Efallai na fydd y ddolen a ddarperir yn ddiogel.',
     'size'                 => [
-        'numeric' => 'The :attribute must be :size.',
-        'file'    => 'The :attribute must be :size kilobytes.',
-        'string'  => 'The :attribute must be :size characters.',
-        'array'   => 'The :attribute must contain :size items.',
+        'numeric' => 'Rhaid i’r :attribute fod yn :size.',
+        'file'    => 'Rhaid i’r :attribute fod yn :size cilobeit.',
+        'string'  => 'Rhaid i’r :attribute fod yn :size nod.',
+        'array'   => 'Rhaid i’r :attribute gynnwys eitemau :size.',
     ],
-    'string'               => 'The :attribute must be a string.',
-    'timezone'             => 'The :attribute must be a valid zone.',
-    'totp'                 => 'The provided code is not valid or has expired.',
-    'unique'               => 'The :attribute has already been taken.',
-    'url'                  => 'The :attribute format is invalid.',
-    'uploaded'             => 'The file could not be uploaded. The server may not accept files of this size.',
+    'string'               => 'Rhaid i’r :attribute fod yn llinyn.',
+    'timezone'             => 'Rhaid i’r :attribute fod yn barth dilys.',
+    'totp'                 => 'Nid yw\'r cod a ddarperir yn ddilys neu mae wedi dod i ben.',
+    'unique'               => 'Mae’r :attribute eisoes wedi ei gymryd.',
+    'url'                  => 'Mae’r fformat :attribute yn annilys.',
+    'uploaded'             => 'Nid oedd modd uwchlwytho’r ffeil. Efallai na fydd y gweinydd yn derbyn ffeiliau o\'r maint hwn.',
 
     // Custom validation lines
     'custom' => [
         'password-confirm' => [
-            'required_with' => 'Password confirmation required',
+            'required_with' => 'Rhaid cadarnhau cyfrinair',
         ],
     ],
 
index 090e0751e6183587f6e755f2881eb4376c1e0417..fb11ea6865a8726a5a0fd32dfbcdd49497623d4f 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobil app',
     'mfa_option_totp_desc' => 'For at bruge multi-faktor godkendelse, skal du bruge en mobil app, der understøtter TOTP såsom Google Authenticator, Authy eller Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup koder',
-    'mfa_option_backup_codes_desc' => 'Gem sikkert et sæt af engangs backup koder, som du kan indtaste for at bekræfte din identitet.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Bekræft og aktivér',
     'mfa_gen_backup_codes_title' => 'Backup koder opsætning',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index aa9dcfd8e1aea3187e5a350b3a13a10e28a928a2..92789d182166900b0371fda95a734e8275bda821 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Handy-App',
     'mfa_option_totp_desc' => 'Um Mehrfach-Faktor-Authentifizierung nutzen zu können, benötigen Sie eine Handy-Anwendung, die TOTP unterstützt, wie Google Authenticator, Authy oder Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup-Codes',
-    'mfa_option_backup_codes_desc' => 'Speichern Sie sicher eine Reihe von einmaligen Backup-Codes, die Sie eingeben können, um Ihre Identität zu überprüfen.',
+    'mfa_option_backup_codes_desc' => 'Erzeugt eine Reihe von einmalig nutzbaren Backup-Codes, welche Sie bei der Anmeldung eingeben, um Ihre Identität zu bestätigen. Achten Sie darauf diese an einem sicheren Ort aufzubewahren.',
     'mfa_gen_confirm_and_enable' => 'Bestätigen und aktivieren',
     'mfa_gen_backup_codes_title' => 'Backup-Codes einrichten',
     'mfa_gen_backup_codes_desc' => 'Speichern Sie die folgende Liste von Codes an einem sicheren Ort. Wenn Sie auf das System zugreifen, können Sie einen der Codes als zweiten Authentifizierungsmechanismus verwenden.',
index fd926b3a975e80ba61c5f4fab5729bb05bbd7459..dda99bacfec3279dcc0e4161c972c38ce4c0ff03 100644 (file)
@@ -73,7 +73,7 @@ return [
     'search_permissions_set' => 'Berechtigungen gesetzt',
     'search_created_by_me' => 'Von mir erstellt',
     'search_updated_by_me' => 'Von mir aktualisiert',
-    'search_owned_by_me' => 'Besitzt von mir',
+    'search_owned_by_me' => 'In meinem Besitz',
     'search_date_options' => 'Datums Optionen',
     'search_updated_before' => 'Aktualisiert vor',
     'search_updated_after' => 'Aktualisiert nach',
index 5ba185ee6c3f2a58421681e2e85a276cb046033c..90e325c6dd873e4d4263c76929ca408c5d74cd2c 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Treiber für Social-Media-Konten nicht gefunden',
     'social_driver_not_configured' => 'Ihr :socialAccount-Konto ist nicht korrekt konfiguriert.',
     'invite_token_expired' => 'Dieser Einladungslink ist abgelaufen. Sie können stattdessen versuchen Ihr Passwort zurückzusetzen.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Ein Benutzer für diese Aktion konnte nicht gefunden werden.',
 
     // System
     'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stellen Sie sicher, dass dieser Ordner auf dem Server beschreibbar ist.',
index b133df49e3df88fecfacc0be4edfafafccc94863..779726f4bbe7bcfd8fa79dca7a14d86bf48cf2dc 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'Um Mehrfach-Faktor-Authentifizierung nutzen zu können, benötigst du eine mobile Anwendung, die TOTP unterstützt, wie Google Authenticator, Authy oder Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Code',
-    'mfa_option_backup_codes_desc' => 'Speichere eine Reihe von einmaligen Backup-Codes an einem sicheren Ort. Du kannst damit deine identität bestätigen.',
+    'mfa_option_backup_codes_desc' => 'Erzeugt eine Reihe von einmalig nutzbaren Backup-Codes, welche Du bei der Anmeldung eingibst, um deine Identität zu bestätigen. Achte darauf diese an einem sicheren Ort aufzubewahren.',
     'mfa_gen_confirm_and_enable' => 'Bestätigen und aktivieren',
     'mfa_gen_backup_codes_title' => 'Backup-Codes einrichten',
     'mfa_gen_backup_codes_desc' => 'Speichere die folgende Liste der Codes an einem sicheren Ort. Wenn du auf das System zugreifst, kannst du einen der Codes als zweiten Authentifizierungsmechanismus verwenden.',
index 2ae27c1063f763b848c47e8fa74af865e5fe7cbb..63c90db1d34a10891399c8fc2aca649b9ccf76fe 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Treiber für Social-Media-Konten nicht gefunden',
     'social_driver_not_configured' => 'Dein :socialAccount-Konto ist nicht korrekt konfiguriert.',
     'invite_token_expired' => 'Dieser Einladungslink ist abgelaufen. Du kannst stattdessen versuchen, dein Passwort zurückzusetzen.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Ein Benutzer für diese Aktion konnte nicht gefunden werden.',
 
     // System
     'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stelle sicher, dass dieser Ordner auf dem Server beschreibbar ist.',
index b6a237dab1e9ad8fb063e4a26e591c5d9fecc4ba..183baab7a0284869b0db924eecad375449abc6c5 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Εφαρμογή για κινητό',
     'mfa_option_totp_desc' => 'Για να χρησιμοποιήσετε τον έλεγχο ταυτότητας πολλαπλών παραγόντων, θα χρειαστείτε μια εφαρμογή για κινητά που υποστηρίζει TOTP, όπως το Google Authenticator, το Authy ή το Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Εφεδρικοί κωδικοί',
-    'mfa_option_backup_codes_desc' => 'Αποθηκεύστε με ασφάλεια ένα σύνολο εφεδρικών κωδικών μίας χρήσης τους οποίους μπορείτε να εισαγάγετε για να επαληθεύσετε την ταυτότητά σας.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Επιβεβαίωση και ενεργοποίηση',
     'mfa_gen_backup_codes_title' => 'Ρύθμιση εφεδρικών κωδικών',
     'mfa_gen_backup_codes_desc' => 'Αποθηκεύστε την παρακάτω λίστα κωδικών σε ασφαλές μέρος. Κατά την πρόσβαση στο σύστημα, θα μπορείτε να χρησιμοποιήσετε έναν από τους κωδικούς ως δεύτερο μηχανισμό ελέγχου ταυτότητας.',
index 13566e81131f7215ff3091df8368b51f3adf9bd2..45d3eb329165444978ebb26050caf5b7bcf51b97 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplicación para móviles',
     'mfa_option_totp_desc' => 'Para utilizar la autenticación en dos pasos necesitarás una aplicación móvil que soporte TOTP como Google Authenticator, Authy o Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Códigos de Respaldo',
-    'mfa_option_backup_codes_desc' => 'Almacena de forma segura un conjunto de códigos de respaldo de un solo uso que puedes introducir para verificar tu identidad.',
+    'mfa_option_backup_codes_desc' => 'Genera un conjunto de códigos de seguridad de un solo uso que ingresará al iniciar sesión para verificar su identidad. Asegúrese de guardarlos en un lugar seguro.',
     'mfa_gen_confirm_and_enable' => 'Confirmar y Activar',
     'mfa_gen_backup_codes_title' => 'Configuración de Códigos de Respaldo',
     'mfa_gen_backup_codes_desc' => 'Guarda la siguiente lista de códigos en un lugar seguro. Al acceder al sistema podrás usar uno de los códigos como un segundo mecanismo de autenticación.',
index 97c376df10164f7504aa44e9b08616870f5bb9e5..1323465000bc7a2e1224af98caaa8a8cc2091ceb 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Driver social no encontrado',
     'social_driver_not_configured' => 'Su configuración :socialAccount no es correcta.',
     'invite_token_expired' => 'Este enlace de invitación ha expirado. Puede resetear la contraseña de su cuenta como alternativa.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'No se pudo encontrar un usuario para esta acción.',
 
     // System
     'path_not_writable' => 'El fichero no pudo ser subido a la ruta :filePath . Asegúrese de que es escribible por el servidor.',
index 19b86f67961ab6f207e82c35ec61d9f2bdae56d8..1316dd686154104cb6c88701811bb0ec039292a1 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplicación móvil',
     'mfa_option_totp_desc' => 'Para utilizar la autenticación en dos pasos necesitará una aplicación móvil que soporte TOTP como Google Authenticator, Authy o Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Códigos de Respaldo',
-    'mfa_option_backup_codes_desc' => 'Almacene de forma segura un conjunto de códigos de respaldo de un solo uso que pueda introducir para verificar su identidad.',
+    'mfa_option_backup_codes_desc' => 'Genera un conjunto de códigos de seguridad de un solo uso que ingresará al iniciar sesión para verificar su identidad. Asegúrese de guardarlos en un lugar seguro.',
     'mfa_gen_confirm_and_enable' => 'Confirmar y Activar',
     'mfa_gen_backup_codes_title' => 'Configuración de Códigos de Respaldo',
     'mfa_gen_backup_codes_desc' => 'Guarde la siguiente lista de códigos en un lugar seguro. Al acceder al sistema podrá usar uno de los códigos como un segundo mecanismo de autenticación.',
index 818dccfb7b533c68e4df7bf06ea427e270328408..a5dd84df16c81300a2dbc3297b9e8d77c25c6714 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Driver social no encontrado',
     'social_driver_not_configured' => 'Su configuración :socialAccount no es correcta.',
     'invite_token_expired' => 'El enace de la esta invitación expiró. Puede intentar restablecer la contraseña de su cuenta',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'No se pudo encontrar un usuario para esta acción.',
 
     // System
     'path_not_writable' => 'La ruta :filePath no pudo ser cargada. Asegurese de que es escribible por el servidor.',
index a8c339030bcd1e586d7852331e081e55c1e613a7..46812551023a6a945f85cf4d6d393dcab84b8f3a 100644 (file)
@@ -93,11 +93,11 @@ return [
     'user_delete_notification' => 'Kasutaja on kustutatud',
 
     // API Tokens
-    'api_token_create' => 'created API token',
+    'api_token_create' => 'lisas API tunnuse',
     'api_token_create_notification' => 'API tunnus on lisatud',
-    'api_token_update' => 'updated API token',
+    'api_token_update' => 'muutis API tunnust',
     'api_token_update_notification' => 'API tunnus on muudetud',
-    'api_token_delete' => 'deleted API token',
+    'api_token_delete' => 'kustutas API tunnuse',
     'api_token_delete_notification' => 'API tunnus on kustutatud',
 
     // Roles
index 74e19a230ad0f4be17cf01a36de88b94976caa8e..014a9f858eb500e80d57a944e7f564622ed71161 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobiilirakendus',
     'mfa_option_totp_desc' => 'Mitmeastmelise autentimise kasutamiseks on sul vaja TOTP-toega mobiilirakendust, nagu Google Authenticator, Authy või Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Varukoodid',
-    'mfa_option_backup_codes_desc' => 'Hoiusta kindlas kohas komplekt ühekordseid varukoode, millega saad oma isikut tuvastada.',
+    'mfa_option_backup_codes_desc' => 'Genereerib komplekti ühekordseid tagavarakoode, mille abil saad sisselogimisel oma isikut tuvastada. Hoia neid kindlas ja turvalises kohas.',
     'mfa_gen_confirm_and_enable' => 'Kinnita ja lülita sisse',
     'mfa_gen_backup_codes_title' => 'Varukoodide seadistamine',
     'mfa_gen_backup_codes_desc' => 'Hoiusta allolevad koodid turvalises kohas. Saad neid kasutada sisselogimisel sekundaarse autentimismeetodina.',
index 9dfcf7de812995ed1eb0e942515f6388a8686a1f..6fe7f49a9e3b5b346bd084e84ad5d779df397387 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => 'Kirjeldus',
     'role' => 'Roll',
     'cover_image' => 'Kaanepilt',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'See pildifail peaks olema umbes 440x250px, ehkki seda skaleeritakse ja lõigatakse vastavalt vajadusele, et see mahuks erinevatesse kasutajaliidestesse, seega tegelikud kuvamõõdud võivad erineda.',
 
     // Actions
     'actions' => 'Tegevused',
index 832cd8d4aca4842284381960bb69c035bc5d4e18..610be63987943889f5c9819a52ba29dd5e0e2936 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => 'Tabeli omadused',
     'table_properties_title' => 'Tabeli omadused',
     'delete_table' => 'Kustuta tabel',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => 'Eemalda tabeli vormindus',
+    'resize_to_contents' => 'Muuda suurus sisule vastavaks',
+    'row_header' => 'Päiserida',
     'insert_row_before' => 'Sisesta rida enne',
     'insert_row_after' => 'Sisesta rida pärast',
     'delete_row' => 'Kustuta rida',
index 1a62e2c6a9ccf8a76286ad2d6b634f1066b4a03c..b142d79ba94340a768b78eda8941be2e454d9571 100644 (file)
@@ -23,7 +23,7 @@ return [
     'meta_updated' => 'Muudetud :timeLength',
     'meta_updated_name' => 'Muudetud :timeLength kasutaja :user poolt',
     'meta_owned_name' => 'Kuulub kasutajale :user',
-    'meta_reference_count' => 'Referenced by :count item|Referenced by :count items',
+    'meta_reference_count' => 'Viidatud :count objekti poolt|Viidatud :count objekti poolt',
     'entity_select' => 'Objekti valik',
     'entity_select_lack_permission' => 'Sul pole õiguseid selle objekti valimiseks',
     'images' => 'Pildid',
@@ -39,9 +39,9 @@ return [
     'export_pdf' => 'PDF fail',
     'export_text' => 'Tekstifail',
     'export_md' => 'Markdown fail',
-    'default_template' => 'Default Page Template',
-    'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
-    'default_template_select' => 'Select a template page',
+    'default_template' => 'Vaikimisi lehe mall',
+    'default_template_explain' => 'Vali lehe mall, mida kasutatakse kõigi selle objekti sees loodud lehtede vaikimisi sisuna. Pea meeles, et seda kasutatakse ainult siis, kui lehe loojal on valitud malli vaatamise õigus.',
+    'default_template_select' => 'Vali mall',
 
     // Permissions and restrictions
     'permissions' => 'Õigused',
@@ -207,7 +207,7 @@ return [
     'pages_delete_draft' => 'Kustuta mustand',
     'pages_delete_success' => 'Leht kustutatud',
     'pages_delete_draft_success' => 'Mustand kustutatud',
-    'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.',
+    'pages_delete_warning_template' => 'See leht on valitud raamatu või peatüki lehe malliks. Pärast selle lehe kustutamist ei ole vastavatel raamatutel või peatükkidel enam vaikimisi lehe malli.',
     'pages_delete_confirm' => 'Kas oled kindel, et soovid selle lehe kustutada?',
     'pages_delete_draft_confirm' => 'Kas oled kindel, et soovid selle mustandi kustutada?',
     'pages_editing_named' => 'Lehe :pageName muutmine',
@@ -409,7 +409,7 @@ return [
     // References
     'references' => 'Viited',
     'references_none' => 'Sellele objektile ei ole viiteid.',
-    'references_to_desc' => 'Listed below is all the known content in the system that links to this item.',
+    'references_to_desc' => 'Allpool on kogu teadaolev sisu süsteemis, mis sellele objektile viitab.',
 
     // Watch Options
     'watch' => 'Jälgi',
index 9cda6252119e7ea06b4ea794f272e974fce06f87..dd4df2051918e148d08ae04278b84d0f28253883 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => 'See e-posti aadress on juba seotud teise kasutajaga.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => 'Etteantud detailidega kasutajakontot ei saadud registreerida',
     'email_already_confirmed' => 'E-posti aadress on juba kinnitatud. Proovi sisse logida.',
     'email_confirmation_invalid' => 'Kinnituslink ei ole kehtiv või on seda juba kasutatud. Proovi uuesti registreeruda.',
     'email_confirmation_expired' => 'Kinnituslink on aegunud. Sulle saadeti aadressi kinnitamiseks uus e-kiri.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Sotsiaalmeedia kontode draiverit ei leitud',
     'social_driver_not_configured' => 'Sinu :socialAccount konto seaded ei ole korrektsed.',
     'invite_token_expired' => 'Link on aegunud. Võid selle asemel proovida oma konto parooli lähtestada.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Selle tegevuse jaoks ei leitud kasutajat.',
 
     // System
     'path_not_writable' => 'Faili asukohaga :filePath ei õnnestunud üles laadida. Veendu, et serveril on kirjutusõigused.',
index e73cde10b627398f064734a77538fba6920f0ed7..899fcefa29216bfdaae1018b0221e19408781503 100644 (file)
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => 'Prügikast on hetkel tühi',
     'recycle_bin_empty' => 'Tühjenda prügikast',
     'recycle_bin_empty_confirm' => 'See kustutab lõplikult kõik objektid prügikastis, kaasa arvatud nende sisu. Kas oled kindel, et soovid prügikasti tühjendada?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => 'See kustutab lõplikult süsteemist valitud objekti koos loetletud alamobjektidega, ja seda sisu ei ole enam võimalik taastada. Kas oled kindel, et soovid selle objekti kustutada?',
     'recycle_bin_destroy_list' => 'Kustutatavad objektid',
     'recycle_bin_restore_list' => 'Taastatavad objektid',
     'recycle_bin_restore_confirm' => 'See taastab valitud objekti koos kõigi alamobjektidega nende algsesse asukohta. Kui see asukoht on ka vahepeal kustutatud ja on nüüd prügikastis, tuleb ka see taastada.',
@@ -277,13 +277,13 @@ return [
     'webhooks_last_error_message' => 'Viimane veateade:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => 'Litsentsid',
+    'licenses_desc' => 'See leht koondab litsentsiinfot BookStack\'i ja selles kasutatud projektide ja teekide kohta. Paljusid loetletud teekidest võidakse kasutada ainult arenduse kontekstis.',
+    'licenses_bookstack' => 'BookStack\'i litsents',
+    'licenses_php' => 'PHP teekide litsentsid',
+    'licenses_js' => 'JavaScript teekide litsentsid',
+    'licenses_other' => 'Muud litsentsid',
+    'license_details' => 'Litsentsi detailid',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index d1f37804b6d80d25186b97fd7efed7ddf6797d0e..35cbafd721b3b084928a750e69132d1ddc7b4c01 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplikazio mugikorra',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Baieztatu eta gaitu',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index f4b30d4389284a1a48552080797a99fb71656852..c0902d4f9843d1b8053597fbc6444882d1fa7d23 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'برنامه ی موبایل',
     'mfa_option_totp_desc' => 'برای استفاده از احراز هویت چند عاملی به یک برنامه موبایلی نیاز دارید که از TOTP پشتیبانی کند، مانند Google Authenticator، Authy یا Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'کدهای پشتیبان',
-    'mfa_option_backup_codes_desc' => 'مجموعه ای از کدهای پشتیبان یکبار مصرف را ایمن ذخیره کنید که می توانید برای تأیید هویت خود وارد کنید.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'تایید و فعال کنید',
     'mfa_gen_backup_codes_title' => 'راه اندازی کدهای پشتیبان',
     'mfa_gen_backup_codes_desc' => 'لیست کدهای زیر را در مکانی امن ذخیره کنید. هنگام دسترسی به سیستم، می توانید از یکی از کدها به عنوان مکانیزم احراز هویت دوم استفاده کنید.',
index 97f808f2ab334010ccd6c6b2bead58bb5cb7756a..18b80de92a5267582084d34077e866987dc76a12 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => 'توضیحات',
     'role' => 'نقش',
     'cover_image' => 'تصویر روی جلد',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'تصویر باید حدودا 250*440 پیکسل باشد اما از آنجا که متناسب با رابط کاربری کوچک و بزرگ شده و بریده میشود، پس ابعاد نمایش داده شده متفاوت خواهند بود.',
 
     // Actions
     'actions' => 'عملیات',
index 8c16396b353ad961f3a04fb5978ef7d8d452246c..e014ca83e3caf551b2e64eeb45150835afe3269d 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => 'کاربری با ایمیل :email از قبل وجود دارد اما دارای اطلاعات متفاوتی می باشد.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => 'بر اساس اطلاعات ارائه شده، حساب کاربری نمی‌نواند ایجاد بشود',
     'email_already_confirmed' => 'ایمیل قبلا تایید شده است، وارد سیستم شوید.',
     'email_confirmation_invalid' => 'این کلمه عبور معتبر نمی باشد و یا قبلا استفاده شده است، لطفا دوباره ثبت نام نمایید.',
     'email_confirmation_expired' => 'کلمه عبور منقضی شده است، یک ایمیل تایید جدید ارسال شد.',
@@ -37,22 +37,22 @@ return [
     'social_driver_not_found' => 'درایور شبکه اجتماعی یافت نشد',
     'social_driver_not_configured' => 'تنظیمات شبکه اجتماعی :socialAccount به درستی پیکربندی نشده است.',
     'invite_token_expired' => 'این پیوند دعوت منقضی شده است. در عوض می توانید سعی کنید رمز عبور حساب خود را بازنشانی کنید.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'کاربری برای این کار پیدا نمی‌شود.',
 
     // System
     'path_not_writable' => 'مسیر فایل :filePath را نمی توان در آن آپلود کرد. مطمئن شوید که روی سرور قابل نوشتن است.',
     'cannot_get_image_from_url' => 'نمی توان تصویر را از :url دریافت کرد',
     'cannot_create_thumbs' => 'سرور نمی تواند تصاویر کوچک ایجاد کند. لطفاً بررسی کنید که پسوند GD PHP را نصب کرده اید.',
     'server_upload_limit' => 'سرور اجازه آپلود در این اندازه را نمی دهد. لطفا اندازه فایل کوچکتر را امتحان کنید.',
-    'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.',
+    'server_post_limit' => 'سرور نمی‌تواند داده مقادیر ارائه شده داده را دریافت کند. با مقدار کمتر و فایل کوچکتر دوباره امتحان کنید.',
     'uploaded'  => 'سرور اجازه آپلود در این اندازه را نمی دهد. لطفا اندازه فایل کوچکتر را امتحان کنید.',
 
     // Drawing & Images
     'image_upload_error' => 'هنگام آپلود تصویر خطایی روی داد',
     'image_upload_type_error' => 'نوع تصویر در حال آپلود نامعتبر است',
     'image_upload_replace_type' => 'جایگزینی فایل تصویری باید از یک نوع باشد',
-    'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.',
-    'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.',
+    'image_upload_memory_limit' => 'به دلیل محدودیت منابع سامانه، بارگذاری فایل و/یا ایجاد تصاویر کاور (thumbnails) ناموفق بود.',
+    'image_thumbnail_memory_limit' => 'به دلیل محدودیت منابع سیستم، تصاویر با اندازه گوناگون ایجاد نشدند.',
     'image_gallery_thumbnail_memory_limit' => 'به دلیل محدودیت منابع سیستم، تصاویر کوچک گالری ایجاد نشد.',
     'drawing_data_not_found' => 'داده های طرح قابل بارگذاری نیستند. ممکن است فایل طرح دیگر وجود نداشته باشد یا شما به آن دسترسی نداشته باشید.',
 
index d2df873a9849365e8aa881c4d20ea742f07e05b0..c6c4ddddd5eafc2d0f9b123e1a15d21616ee39ec 100644 (file)
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => 'سطل بازیافت در حال حاضر خالی است',
     'recycle_bin_empty' => 'سطل آشغال خالی',
     'recycle_bin_empty_confirm' => 'این کار همه اقلام موجود در سطل بازیافت از جمله محتوای موجود در هر مورد را برای همیشه از بین می برد. آیا مطمئن هستید که می خواهید سطل بازیافت را خالی کنید؟',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => 'این کار تمامی عناصر زیر مجموعه آیتم که در پایین فهرست شده را به همراه خودش برای همیشه از سامانه پاک میکند و شما امکان بازیابی آن را نخواهید داشت. آیا مطمئن هستید که میخواهید برای همیشه این آیتم را پاک کنید؟',
     'recycle_bin_destroy_list' => 'مواردی که باید نابود شوند',
     'recycle_bin_restore_list' => 'مواردی که باید بازیابی شوند',
     'recycle_bin_restore_confirm' => 'این اقدام، مورد حذف شده، از جمله هر عنصر فرزند، را به مکان اصلی خود باز می گرداند. اگر مکان اصلی از آن زمان حذف شده باشد، و اکنون در سطل بازیافت است، مورد اصلی نیز باید بازیابی شود.',
@@ -193,7 +193,7 @@ return [
     'users_send_invite_text' => 'می توانید انتخاب کنید که برای این کاربر یک ایمیل دعوت نامه ارسال شود که به آنها امکان می دهد رمز عبور خود را تعیین کنند در غیر این صورت می توانید رمز عبور خود را تعیین کنید.',
     'users_send_invite_option' => 'ارسال ایمیل دعوت کاربر',
     'users_external_auth_id' => 'شناسه احراز هویت خارجی',
-    'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.',
+    'users_external_auth_id_desc' => 'هنگامی که یک سامانه احراز هویت خارجی مورد استفاده است (مانند SAML2، OIDC یا LDAP)، شناسه ای که کاربر BookStack را به حساب سامانه احراز هویت مرتبط میکند بدین‌گونه می‌باشد. اگر از احراز هویت پیش فرض ایمیلی استفاده می‌کنید، میتوانید این را در نظر نگیرید.',
     'users_password_warning' => 'فقط در صورتی که مایل به تغییر رمز عبور این کاربر هستید، موارد زیر را پر کنید.',
     'users_system_public' => 'این کاربر نماینده هر کاربر مهمانی است که از نمونه شما بازدید می کند. نمی توان از آن برای ورود استفاده کرد اما به طور خودکار اختصاص داده می شود.',
     'users_delete' => 'حذف کاربر',
@@ -214,12 +214,12 @@ return [
     'users_social_accounts_info' => 'در اینجا می‌توانید حساب‌های دیگر خود را برای ورود سریع‌تر و آسان‌تر متصل کنید. قطع ارتباط حساب در اینجا، دسترسی مجاز قبلی را لغو نمی کند. دسترسی را از تنظیمات نمایه خود در حساب اجتماعی متصل لغو کنید.',
     'users_social_connect' => 'اتصال حساب کاربری',
     'users_social_disconnect' => 'قطع حساب',
-    'users_social_status_connected' => 'Connected',
+    'users_social_status_connected' => 'ارتباط برقرار شد',
     'users_social_status_disconnected' => 'قطع اتصال',
     'users_social_connected' => 'حساب :socialAccount با موفقیت به نمایه شما پیوست شد.',
     'users_social_disconnected' => 'حساب :socialAccount با موفقیت از نمایه شما قطع شد.',
     'users_api_tokens' => 'توکن‌های API',
-    'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.',
+    'users_api_tokens_desc' => 'توکن های دسترسی مورد استفاده در BookStack REST API را بسازید و مدیریت کنید. اجازه‌های مربوط به API توسط کاربری که صاحب آنها است مدیریت می‌شوند.',
     'users_api_tokens_none' => 'هیچ نشانه API برای این کاربر ایجاد نشده است',
     'users_api_tokens_create' => 'ایجاد توکن',
     'users_api_tokens_expires' => 'منقضی شده ها',
@@ -277,13 +277,13 @@ return [
     'webhooks_last_error_message' => 'آخرین پیغام خطا:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => 'مجوز‌ها',
+    'licenses_desc' => 'این صفحه اطلاعات مجوز‌های بوک استک به همراه پروژه‌ها و کتابخانه‌های مورد استفاده با آن را به نمایش می‌گذارد. بسیاری از پروژه‌های فهرست شده ممکن است فقط در بحث توسعه به کار گرفته شده باشند.',
+    'licenses_bookstack' => 'مجوز‌های بوک استک',
+    'licenses_php' => 'مجوز‌های کتابخانه PHP',
+    'licenses_js' => 'مجوز‌های کتابخانه جاوا اسکریپت',
+    'licenses_other' => 'سایر مجوز‌ها',
+    'license_details' => 'جزئیات مجوز',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 40aca06956556765b30d953b0131b030b0ac8345..580c867972663b0eb7663f27861251d00126fa1a 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobiilisovellus',
     'mfa_option_totp_desc' => 'Jos haluat käyttää monivaiheista tunnistautumista, tarvitset mobiilisovelluksen, joka tukee TOTP:tä, kuten Google Authenticator, Authy tai Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Varmistuskoodit',
-    'mfa_option_backup_codes_desc' => 'Tallenna turvallisesti joukko kertakäyttöisiä varmistuskoodeja, jotka voit syöttää henkilöllisyytesi varmentamiseksi.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Vahvista ja ota käyttöön',
     'mfa_gen_backup_codes_title' => 'Varmistuskoodien asetukset',
     'mfa_gen_backup_codes_desc' => 'Säilytä alla oleva luettelo koodeista turvallisessa paikassa. Kun käytät järjestelmää, voit käyttää yhtä koodeista toisena tunnistautumistapana.',
index 32b8c27ec1c2c2da1338472919c5d990108fa074..fab11a83bfca458272e0418d1630963b988fd9a5 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Application mobile',
     'mfa_option_totp_desc' => 'Pour utiliser l\'authentification multi-facteurs, vous aurez besoin d\'une application mobile qui supporte TOTP comme Google Authenticator, Authy ou Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Codes de secours',
-    'mfa_option_backup_codes_desc' => 'Stockez en toute sécurité un jeu de codes de secours que vous pourrez utiliser pour vérifier votre identité.',
+    'mfa_option_backup_codes_desc' => 'Génère un ensemble de codes de sauvegarde à usage unique que vous saisirez lors de la connexion pour vérifier votre identité. Veillez à les conserver dans un endroit sûr.',
     'mfa_gen_confirm_and_enable' => 'Confirmer et activer',
     'mfa_gen_backup_codes_title' => 'Configuration des codes de secours',
     'mfa_gen_backup_codes_desc' => 'Stockez la liste des codes ci-dessous dans un endroit sûr. Lorsque vous accédez au système, vous pourrez utiliser l\'un des codes comme un deuxième mécanisme d\'authentification.',
index d6b054fe83e507d8de0d760dc2feefb8be6fa3ee..c04ef24e3bb538c44ac2cce3f80c3b802a38536d 100644 (file)
@@ -63,10 +63,10 @@ return [
     'search_for_term' => 'recherche pour :term',
     'search_more' => 'Plus de résultats',
     'search_advanced' => 'Recherche avancée',
-    'search_terms' => 'Mot-clé',
+    'search_terms' => 'Termes de recherche',
     'search_content_type' => 'Type de contenu',
     'search_exact_matches' => 'Correspondances exactes',
-    'search_tags' => 'Recherche par mots-clés',
+    'search_tags' => 'Recherche par tags',
     'search_options' => 'Options',
     'search_viewed_by_me' => 'Vu par moi',
     'search_not_viewed_by_me' => 'Non vu par moi',
@@ -307,7 +307,7 @@ return [
     'tag' => 'Mot-clé',
     'tags' =>  'Mots-clés',
     'tags_index_desc' => 'Les tags peuvent être appliqués au contenu du système pour appliquer une forme flexible de catégorisation. Les tags peuvent avoir à la fois une clé et une valeur, la valeur étant facultative. Une fois appliqué, le contenu peut ensuite être interrogé à l’aide du nom et de la valeur du tag.',
-    'tag_name' =>  'Nom du mot-clé',
+    'tag_name' =>  'Nom de l’étiquette',
     'tag_value' => 'Valeur du mot-clé (optionnel)',
     'tags_explain' => "Ajouter des mots-clés pour catégoriser votre contenu.",
     'tags_add' => 'Ajouter un autre mot-clé',
index 7d45c09d836ab6bd51e983fe93b91d5f5dd437a6..95434d400e8d7bc5df091d7553eb2f1ca44e9a26 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Pilote de compte de réseaux sociaux absent',
     'social_driver_not_configured' => 'Vos préférences pour le compte :socialAccount sont incorrectes.',
     'invite_token_expired' => 'Le lien de cette invitation a expiré. Vous pouvez essayer de réinitialiser votre mot de passe.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Impossible de trouver un utilisateur pour cette action.',
 
     // System
     'path_not_writable' => 'Impossible d\'écrire dans :filePath. Assurez-vous d\'avoir les droits d\'écriture sur le serveur',
index 4eadd419671455a2e0f6d21822bbdf96645b429b..587e4bdddce2b3dc0e796da81972fd4a8ac33259 100644 (file)
@@ -15,7 +15,7 @@ return [
     'page_restore'                => 'הדף שוחזר',
     'page_restore_notification'   => 'הדף שוחזר בהצלחה',
     'page_move'                   => 'דף הועבר',
-    'page_move_notification'      => 'Page successfully moved',
+    'page_move_notification'      => 'הדף הוזז בהצלחה',
 
     // Chapters
     'chapter_create'              => 'פרק נוצר',
@@ -25,7 +25,7 @@ return [
     'chapter_delete'              => 'פרק נמחק',
     'chapter_delete_notification' => 'הפרק נמחק בהצלחה',
     'chapter_move'                => 'פרק הועבר',
-    'chapter_move_notification' => 'Chapter successfully moved',
+    'chapter_move_notification' => 'פרק הוזז בהצלחה',
 
     // Books
     'book_create'                 => 'ספר נוצר',
@@ -50,13 +50,13 @@ return [
     'bookshelf_delete_notification'    => 'מדף נמחק בהצלחה',
 
     // Revisions
-    'revision_restore' => 'restored revision',
-    'revision_delete' => 'deleted revision',
-    'revision_delete_notification' => 'Revision successfully deleted',
+    'revision_restore' => 'גרסא שוחזרה',
+    'revision_delete' => 'גרסא הוסרה',
+    'revision_delete_notification' => 'גרסא הוסרה בהצלחה',
 
     // Favourites
-    'favourite_add_notification' => '":name" has been added to your favourites',
-    'favourite_remove_notification' => '":name" has been removed from your favourites',
+    'favourite_add_notification' => '":name" הוסף למועדפים',
+    'favourite_remove_notification' => '":name" הוסר מהמועדפים',
 
     // Watching
     'watch_update_level_notification' => 'Watch preferences successfully updated',
index 4e303a2ebbbc1179d6541f1d9ac499589f7433f6..0a85bbaf8416f58b257f577a385f621c512ac18e 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'אפליקציה לנייד',
     'mfa_option_totp_desc' => 'בכדי להשתמש באימות רב-שלבי תצטרך אפליקציית מובייל תומכת TOTP כמו Google Authenticator, Authy או Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'קודי גיבוי',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index f77853c430d1a55efa80926089913735d352f16e..bef07edcdaf3f8c32410df40f6248b7b697a33b6 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilna Aplikacija',
     'mfa_option_totp_desc' => 'Da biste koristili višestruku provjeru autentičnosti, trebat će vam mobilna aplikacija koja podržava TOTP (Time-Based One-Time Password) kao što su Google Authenticator, Authy ili Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Rezervni Kodovi',
-    'mfa_option_backup_codes_desc' => 'Sigurno pohranite set jednokratnih rezervnih kodova koje možete unijeti kako biste potvrdili svoj identitet.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Potvrdi i Omogući',
     'mfa_gen_backup_codes_title' => 'Postavke Rezervnih Kodova',
     'mfa_gen_backup_codes_desc' => 'Spremite sljedeći popis kodova na sigurno mjesto. Prilikom pristupa sustavu, moći ćete koristiti jedan od ovih kodova kao drugi mehanizam autentifikacije.',
index 74c4bbd79df6c112da84edbee826b9389f267052..ea3d0cef3f22d85812e08157bd3e62d68734a442 100644 (file)
@@ -93,11 +93,11 @@ return [
     'user_delete_notification' => 'Felhasználó sikeresen eltávolítva',
 
     // API Tokens
-    'api_token_create' => 'created API token',
+    'api_token_create' => 'létrehozott API token',
     'api_token_create_notification' => 'API token sikeresen létrehozva',
-    'api_token_update' => 'updated API token',
+    'api_token_update' => 'frissített API token',
     'api_token_update_notification' => 'API token sikeresen frissítve',
-    'api_token_delete' => 'deleted API token',
+    'api_token_delete' => 'törölt API token',
     'api_token_delete_notification' => 'API token sikeresen törölve',
 
     // Roles
index 22c7aedbcf5a803ad90dd5d61d6d3c0dd954ff5d..db065453ec31f70147ba9d14d7c266867664087e 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilalkalmazás',
     'mfa_option_totp_desc' => 'A többlépcsős azonosításhoz olyan mobilalkalmazásra lesz szükséged, amely támogatja a TOTP-t, például a Google Authenticator, az Authy vagy a Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Visszaállítási kulcsok',
-    'mfa_option_backup_codes_desc' => 'Biztonságosan tárolja el az egyszer használatos visszaállítási kódjait, amiket a későbbiekben fel tud majd használni bejelentkezése során.',
+    'mfa_option_backup_codes_desc' => 'Egyszer használatos biztonsági kódokat hoz létre, amelyeket bejelentkezéskor kell megadnia személyazonosságának igazolására. Ügyeljen arra, hogy ezeket biztonságos helyen tárolja.',
     'mfa_gen_confirm_and_enable' => 'Jóváhagyás és engedélyezés',
     'mfa_gen_backup_codes_title' => 'Visszaállítási kódok beállítása',
     'mfa_gen_backup_codes_desc' => 'Tárolja el egy biztonságos helyen az alábbi kódokat. Bejelentkezés során fel tudja használni őket másodlagos bejelentkezési kódként.',
index 16b5846c00cc72034ea6797e7aa11f9313fe548b..b71efec20f2f9930122c09bb5d5d936c64b3410c 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => 'Táblázat tulajdonságai',
     'table_properties_title' => 'Táblázat Tulajdonságai',
     'delete_table' => 'Táblázat törlése',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => 'Tábla formázás törlése',
+    'resize_to_contents' => 'Átméretezés a tartalomhoz',
+    'row_header' => 'Sorfejléc',
     'insert_row_before' => 'Sor beszúrása elé',
     'insert_row_after' => 'Sor beszúrása mögé',
     'delete_row' => 'Sor törlése',
@@ -135,7 +135,7 @@ return [
     'cell_border_groove' => 'Horony',
     'cell_border_ridge' => 'Domború',
     'cell_border_inset' => 'Behúzott',
-    'cell_border_outset' => 'Outset',
+    'cell_border_outset' => 'Kiemelés',
     'cell_border_none' => 'Egyik sem',
     'cell_border_hidden' => 'Rejtett',
 
index a63eb99827883ce6c9b5cabee62e5d59aa4bb8c6..2ef4de8fd49610f7ea418f4c97bca89b9fd099d7 100644 (file)
@@ -276,7 +276,7 @@ return [
     'pages_pointer_enter_mode' => 'Lépjen be a szakaszválasztó módba',
     'pages_pointer_label' => 'Oldalszakasz beállításai',
     'pages_pointer_permalink' => 'Oldalszakasz állandó hivatkozás',
-    'pages_pointer_include_tag' => 'Page Section Include Tag',
+    'pages_pointer_include_tag' => 'Oldalszakasz tartalmazza a címkét',
     'pages_pointer_toggle_link' => 'Permalink mód, Nyomja meg az include tag megjelenítéséhez',
     'pages_pointer_toggle_include' => 'Include tag mód, Nyomja meg az permalink megjelenítéséhez',
     'pages_permissions_active' => 'Oldal jogosultságok aktívak',
index 34e4f2b74a31426d282610b1713125749ac9277d..cd65bfc8798d24c379076d85cd6946b6b37104a7 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => ':email címmel már létezik felhasználó, de más hitelesítő adatokkal.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => 'A felhasználói fiók nem regisztrálható a megadott adatokkal',
     'email_already_confirmed' => 'Az email cím már meg van erősítve, meg lehet próbálni a bejelentkezést.',
     'email_confirmation_invalid' => 'A megerősítő vezérjel nem érvényes vagy használva volt. Meg kell próbálni újraregisztrálni.',
     'email_confirmation_expired' => 'A megerősítő vezérjel lejárt. Egy új megerősítő email lett elküldve.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Közösségi meghajtó nem található',
     'social_driver_not_configured' => ':socialAccount közösségi beállítások nem megfelelőek.',
     'invite_token_expired' => 'Ez a meghívó hivatkozás lejárt. Helyette meg lehet próbálni új jelszót megadni a fiókhoz.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'A művelethez nem található felhasználó.',
 
     // System
     'path_not_writable' => ':filePath elérési út nem tölthető fel. Ellenőrizni kell, hogy az útvonal a kiszolgáló számára írható.',
index b8b8bbe87c86a954309604f7fc0c24719eda6556..bc20b86ffb2e4b33131cdf9a7b4620ccfce0d4e5 100644 (file)
@@ -15,7 +15,7 @@ return [
     'page_restore'                => 'halaman telah dipulihkan',
     'page_restore_notification'   => 'Halaman berhasil dipulihkan',
     'page_move'                   => 'halaman dipindahkan',
-    'page_move_notification'      => 'Page successfully moved',
+    'page_move_notification'      => 'Halaman berhasil dipindahkan',
 
     // Chapters
     'chapter_create'              => 'membuat bab',
@@ -25,7 +25,7 @@ return [
     'chapter_delete'              => 'hapus bab',
     'chapter_delete_notification' => 'Bab berhasil dihapus',
     'chapter_move'                => 'bab dipindahkan',
-    'chapter_move_notification' => 'Chapter successfully moved',
+    'chapter_move_notification' => 'Bab berhasil dipindahkan',
 
     // Books
     'book_create'                 => 'membuat buku',
@@ -50,31 +50,31 @@ return [
     'bookshelf_delete_notification'    => 'Rak berhasil dihapus',
 
     // Revisions
-    'revision_restore' => 'restored revision',
-    'revision_delete' => 'deleted revision',
-    'revision_delete_notification' => 'Revision successfully deleted',
+    'revision_restore' => 'revisi yang dipulihkan',
+    'revision_delete' => 'revisi yang dihapus',
+    'revision_delete_notification' => 'Revisi berhasil dihapus',
 
     // Favourites
     'favourite_add_notification' => '":name" telah ditambahkan ke favorit Anda',
     'favourite_remove_notification' => '":name" telah dihapus dari favorit Anda',
 
     // Watching
-    'watch_update_level_notification' => 'Watch preferences successfully updated',
+    'watch_update_level_notification' => 'Preferensi pantauan berhasil diperbarui',
 
     // Auth
-    'auth_login' => 'logged in',
-    'auth_register' => 'registered as new user',
-    'auth_password_reset_request' => 'requested user password reset',
-    'auth_password_reset_update' => 'reset user password',
-    'mfa_setup_method' => 'configured MFA method',
+    'auth_login' => 'telah masuk',
+    'auth_register' => 'daftar sebagai user baru',
+    'auth_password_reset_request' => 'permintaan pengguna mengatur ulang kata sandi',
+    'auth_password_reset_update' => 'atur ulang kata sandi pengguna',
+    'mfa_setup_method' => 'metode MFA yang dikonfigurasi',
     'mfa_setup_method_notification' => 'Metode multi-faktor sukses dikonfigurasi',
-    'mfa_remove_method' => 'removed MFA method',
+    'mfa_remove_method' => 'menghapus metode MFA',
     'mfa_remove_method_notification' => 'Metode multi-faktor sukses dihapus',
 
     // Settings
     'settings_update' => 'updated settings',
-    'settings_update_notification' => 'Settings successfully updated',
-    'maintenance_action_run' => 'ran maintenance action',
+    'settings_update_notification' => 'Pengaturan berhasil diperbarui',
+    'maintenance_action_run' => 'menjalankan tindakan pemeliharaan',
 
     // Webhooks
     'webhook_create' => 'membuat webhook',
@@ -85,20 +85,20 @@ return [
     'webhook_delete_notification' => 'Webhook berhasil dihapus',
 
     // Users
-    'user_create' => 'created user',
-    'user_create_notification' => 'User successfully created',
-    'user_update' => 'updated user',
+    'user_create' => 'pengguna yang dibuat',
+    'user_create_notification' => 'Pengguna berhasil dibuat',
+    'user_update' => 'perbarui Pengguna',
     'user_update_notification' => 'Pengguna berhasil diperbarui',
-    'user_delete' => 'deleted user',
+    'user_delete' => 'pengguna yang dihapus',
     'user_delete_notification' => 'Pengguna berhasil dihapus',
 
     // API Tokens
-    'api_token_create' => 'created API token',
-    'api_token_create_notification' => 'API token successfully created',
-    'api_token_update' => 'updated API token',
-    'api_token_update_notification' => 'API token successfully updated',
-    'api_token_delete' => 'deleted API token',
-    'api_token_delete_notification' => 'API token successfully deleted',
+    'api_token_create' => 'API token yang dibuat',
+    'api_token_create_notification' => 'Token API berhasil dibuat',
+    'api_token_update' => 'token API yang diperbarui',
+    'api_token_update_notification' => 'token API berhasil dirubah',
+    'api_token_delete' => 'token API yang dihapus',
+    'api_token_delete_notification' => 'token API berhasil dihapus ',
 
     // Roles
     'role_create' => 'created role',
index 5d174f6acb4843cbe87a8c19ea365975a802ef69..552742bc6feecd7e15ebadf057ec1317b4fc4f70 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplikasi Seluler',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Kode Cadangan',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index 00ecf944317a13a098a9928d4b7c1affbfcb1845..94f1ebd53b06396fdd9cf8dfcfd9bf20a5572692 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'App mobile',
     'mfa_option_totp_desc' => 'Per utilizzare l\'autenticazione multi-fattore avrai bisogno di un\'applicazione mobile che supporti TOTP come Google Authenticator, Authy o Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Codici di backup',
-    'mfa_option_backup_codes_desc' => 'Salva in modo sicuro una serie di codici di backup monouso che puoi inserire per verificare la tua identità.',
+    'mfa_option_backup_codes_desc' => 'Genera un insieme di codici di backup monouso che inserirai al login per verificare la tua identità. Assicurati di conservarli in un luogo sicuro e sicuro.',
     'mfa_gen_confirm_and_enable' => 'Conferma e abilita',
     'mfa_gen_backup_codes_title' => 'Configurazione codici di backup',
     'mfa_gen_backup_codes_desc' => 'Conserva l\'elenco di codici qui sotto in un luogo sicuro. Quando accedi al sistema potrai utilizzare uno dei codici come meccanismo di autenticazione secondario.',
index a65ea5e87d47d51af34bf8d86bd41d403a2975cd..13c45c15254dfdb9bf74807a00c56d94e60d3202 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Driver social non trovato',
     'social_driver_not_configured' => 'Le impostazioni di :socialAccount non sono configurate correttamente.',
     'invite_token_expired' => 'Il link di invito è scaduto. Puoi provare a resettare la password del tuo account.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Impossibile trovare un utente per questa azione.',
 
     // System
     'path_not_writable' => 'Il percorso :filePath non è scrivibile. Controlla che abbia i permessi corretti.',
index c0c501b729c9bf33ad07f8bc33d6c90b95c8f865..077c31ac85c15838b4334fd230fdb258a84bbfe9 100644 (file)
@@ -87,13 +87,13 @@ return [
     'mfa_setup_reconfigure' => '再設定',
     'mfa_setup_remove_confirmation' => 'この多要素認証方法を削除してもよろしいですか?',
     'mfa_setup_action' => '設定',
-    'mfa_backup_codes_usage_limit_warning' => 'バックアップコードは残り5つ以下です。アカウントのロックアウトを防ぐため、コードがなくなる前に新しいセットを生成して保存してください。',
+    'mfa_backup_codes_usage_limit_warning' => '有効な確認コードは残り5つ以下です。アカウントのロックアウトを防ぐため、コードがなくなる前に新しいセットを生成して保存してください。',
     'mfa_option_totp_title' => 'モバイルアプリ',
     'mfa_option_totp_desc' => '多要素認証を使用するには、Google Authenticator、Authy、Microsoft AuthenticatorなどのTOTPをサポートするモバイルアプリケーションが必要です。',
-    'mfa_option_backup_codes_title' => 'バックアップコード',
-    'mfa_option_backup_codes_desc' => '本人確認のために入力する、一度しか使えないバックアップコードを安全に保存します。',
+    'mfa_option_backup_codes_title' => '確認コード',
+    'mfa_option_backup_codes_desc' => 'ログイン時に本人確認のために追加入力する1回限りの確認コードセットを生成します。 これは安全な場所に保管してください。',
     'mfa_gen_confirm_and_enable' => '確認して有効化',
-    'mfa_gen_backup_codes_title' => 'バックアップコードの設定',
+    'mfa_gen_backup_codes_title' => '確認コードの構成',
     'mfa_gen_backup_codes_desc' => '以下のコードのリストを安全な場所に保管してください。システムにアクセスする際、コードのいずれかを第二の認証手段として使用できます。',
     'mfa_gen_backup_codes_download' => 'コードをダウンロード',
     'mfa_gen_backup_codes_usage_warning' => '各コードは一度だけ使用できます',
@@ -108,10 +108,10 @@ return [
     'mfa_verify_no_methods' => '手段が設定されていません',
     'mfa_verify_no_methods_desc' => 'アカウントの多要素認証手段が見つかりませんでした。アクセスする前に、少なくとも1つの手段を設定する必要があります。',
     'mfa_verify_use_totp' => 'モバイルアプリを利用して確認',
-    'mfa_verify_use_backup_codes' => 'バックアップコードを利用して確認',
-    'mfa_verify_backup_code' => 'バックアップコード',
-    'mfa_verify_backup_code_desc' => '残りのバックアップコードのいずれかを入力してください:',
-    'mfa_verify_backup_code_enter_here' => 'バックアップコードを入力',
+    'mfa_verify_use_backup_codes' => '確認コードによる検証',
+    'mfa_verify_backup_code' => '確認コード',
+    'mfa_verify_backup_code_desc' => '残りの確認コードのいずれかを入力してください:',
+    'mfa_verify_backup_code_enter_here' => '確認コードを入力',
     'mfa_verify_totp_desc' => 'モバイルアプリを利用して生成されたコードを入力してください:',
     'mfa_setup_login_notification' => '多要素認証が構成されました。設定された手段を利用して再度ログインしてください。',
 ];
index a944541111a3ac245b54ba29fa4863ff6fe40bec..90a4f854ea85ee11cb6ca2fc628f7698feeed7e8 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Social driverが見つかりません',
     'social_driver_not_configured' => 'あなたの:socialAccount設定は正しく構成されていません。',
     'invite_token_expired' => 'この招待リンクの有効期限が切れています。 代わりにアカウントのパスワードをリセットしてみてください。',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'このアクションのユーザーが見つかりません。',
 
     // System
     'path_not_writable' => 'ファイルパス :filePath へアップロードできませんでした。サーバ上での書き込みが許可されているか確認してください。',
index dc4b242a09ee68f5e0411e3500f59e00c5d78ea4..57f0cb5c632e936a03bd4581a6d504acc7d19c8e 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index aceac7d8756f8414d3166b5a06fc7da8a6d97320..7bdcd3c610f5a6bc6bd2f7796e3ef4b308c9ecf9 100644 (file)
@@ -93,11 +93,11 @@ return [
     'user_delete_notification' => '사용자가 삭제되었습니다',
 
     // API Tokens
-    'api_token_create' => 'created API token',
+    'api_token_create' => '생성된 API 토큰',
     'api_token_create_notification' => 'API 토큰이 성공적으로 생성되었습니다.',
-    'api_token_update' => 'updated API token',
+    'api_token_update' => '갱신된 API 토큰',
     'api_token_update_notification' => 'API 토큰이 성공적으로 업데이트되었습니다.',
-    'api_token_delete' => 'deleted API token',
+    'api_token_delete' => '삭제된 API 토큰',
     'api_token_delete_notification' => 'API 토큰이 성공적으로 삭제되었습니다.',
 
     // Roles
index a29f9b9ad960cb829f51dcb1a13d29ca75f01c52..fbf12859f184d4a793f950d33520218e370d79ab 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => '모바일 앱',
     'mfa_option_totp_desc' => '다중 인증에는 Google Authenticator, Authy나 Microsoft Authenticator와 같은 TOTP 지원 모바일 앱이 필요합니다.',
     'mfa_option_backup_codes_title' => '백업 코드',
-    'mfa_option_backup_codes_desc' => '일회성 백업 코드를 안전한 장소에 보관하세요.',
+    'mfa_option_backup_codes_desc' => '로그인 시 인증에 사용되는 일회용 백업 코드를 만듭니다. 이 백업 코드는 안전한 곳에 보관하세요.',
     'mfa_gen_confirm_and_enable' => '확인 및 활성화',
     'mfa_gen_backup_codes_title' => '백업 코드 설정',
     'mfa_gen_backup_codes_desc' => '코드 목록을 안전한 장소에 보관하세요. 코드 중 하나를 2FA에 쓸 수 있습니다.',
index 95974dad4f4cbbb9d6b92c58c920d27b0cf45520..3a9a94bc8b79ad5cc1dfec92294d06bf21c3e35e 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => '설명',
     'role' => '권한',
     'cover_image' => '대표 이미지',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => '이 이미지는 필요에 따라 다양한 시나리오에서 사용자 인터페이스에 맞게 크기가 조정되거나 잘려질 수 있기 때문에 실제 표시되는 크기가 다를 수는 있지만 대략 440x250px 이어야 합니다.',
 
     // Actions
     'actions' => '활동',
index 0c9a5cfed09aa0b72a1f67bf992fac3d2528e751..485ab79cd9471b8ce7163c4a37a90ce95413b150 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => '테이블 속성',
     'table_properties_title' => '테이블 속성',
     'delete_table' => '테이블 삭제',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => '테이블 형식 지우기',
+    'resize_to_contents' => '내용 크기 조정',
+    'row_header' => '행 머릿글',
     'insert_row_before' => '앞에 행 추가',
     'insert_row_after' => '뒤에 행 추가',
     'delete_row' => '행 삭제',
index 09037fac3964eee40af12f1c952ff24692175a1d..5b7d7143a92a11e39c7a41c76f04028c2469de11 100644 (file)
@@ -39,9 +39,9 @@ return [
     'export_pdf' => 'PDF 파일',
     'export_text' => '일반 텍스트 파일',
     'export_md' => '마크다운 파일',
-    'default_template' => 'Default Page Template',
-    'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
-    'default_template_select' => 'Select a template page',
+    'default_template' => '기본 페이지 템플릿',
+    'default_template_explain' => '이 항목 내에서 생성되는 모든 페이지의 기본 콘텐츠로 사용할 페이지 템플릿을 지정합니다. 페이지 작성자가 선택한 템플릿 페이지를 볼 수 있는 권한이 있는 경우에만 이 항목이 사용된다는 점을 유의하세요.',
+    'default_template_select' => '템플릿 페이지 선택',
 
     // Permissions and restrictions
     'permissions' => '권한',
@@ -207,7 +207,7 @@ return [
     'pages_delete_draft' => '초안 문서 삭제하기',
     'pages_delete_success' => '문서 지움',
     'pages_delete_draft_success' => '초안 문서 지움',
-    'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.',
+    'pages_delete_warning_template' => '이 페이지는 책의 기본 페이지 템플릿으로 사용 중입니다. 이 페이지가 삭제되면 해당하는 책에 더 이상 기본 페이지 템플릿이 적용되지 않습니다.',
     'pages_delete_confirm' => '이 문서를 지울 건가요?',
     'pages_delete_draft_confirm' => '이 초안을 지울 건가요?',
     'pages_editing_named' => ':pageName 수정',
index bcfdf876cb6a536836cab0ff685794a0f2f61039..074cec83b8b54dd2a1cb9f78db221f70e503af19 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => '이메일 :email 이 이미 존재하지만 다른 자격 증명을 가진 사용자입니다.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => '제공된 세부 정보로 사용자 계정을 등록할 수 없습니다',
     'email_already_confirmed' => '이메일이 이미 확인되었으니 로그인해 보세요.',
     'email_confirmation_invalid' => '이 확인 토큰이 유효하지 않거나 이미 사용되었습니다. 다시 등록해 주세요.',
     'email_confirmation_expired' => '확인 토큰이 만료되었습니다. 새 확인 이메일이 전송되었습니다.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => '소셜 드라이버를 찾을 수 없습니다.',
     'social_driver_not_configured' => '소셜 계정 :socialAccount 가(이) 올바르게 구성되지 않았습니다.',
     'invite_token_expired' => '이 초대 링크가 만료되었습니다. 대신 계정 비밀번호 재설정을 시도해 보세요.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => '이 동작의 사용자를 찾을 수 없습니다.',
 
     // System
     'path_not_writable' => '파일 경로 :filePath 에 업로드할 수 없습니다. 서버에 저장이 가능한지 확인하세요.',
index d52e5064f9c9286271f27bfb37128d10aeb15d34..817791dc0d045021f6c2fbf3f0a46270bc5e35fb 100644 (file)
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => '휴지통이 비었습니다.',
     'recycle_bin_empty' => '비우기',
     'recycle_bin_empty_confirm' => '휴지통을 비울 건가요?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => '이 작업을 수행하면 이 항목이 아래에 나열된 모든 하위 요소와 함께 시스템에서 영구적으로 삭제되며, 복원할 수 없습니다. 이 항목을 영구 삭제하시겠어요?',
     'recycle_bin_destroy_list' => '영구 삭제함',
     'recycle_bin_restore_list' => '복원함',
     'recycle_bin_restore_confirm' => '원래 위치로 복원합니다. 원래 위치의 부모 항목이 지워졌을 경우 부모 항목도 복원해야 합니다.',
@@ -277,13 +277,13 @@ return [
     'webhooks_last_error_message' => '마지막 에러 메시지:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => '라이선스',
+    'licenses_desc' => '이 페이지에서는 BookStack 내에서 사용되는 프로젝트 및 라이브러리 외에 BookStack 라이선스 정보를 자세히 설명합니다. 나열된 프로젝트는 개발 용도로만 사용할 수 있습니다.',
+    'licenses_bookstack' => 'BookStack 라이선스',
+    'licenses_php' => 'PHP 라이브러리 라이선스',
+    'licenses_js' => 'JavaScript 라이브러리 라이선스',
+    'licenses_other' => '기타 라이선스',
+    'license_details' => '라이선스 세부 사항',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 02e64e25035a2c329d6423f42b87ce9634946e2b..a2f7f466846575f4f8962f6d448dd75f0d46f26e 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index d13d93012eb49d63164bde2256d0db3d38819a7b..71b92ac0109ae10669ca44e25e4dc496e5f0d515 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilā aplikācija',
     'mfa_option_totp_desc' => 'Lai lietotu vairākfaktoru autentifikāciju, jums būs nepieciešama mobilā aplikācija, kas atbalsta TOTP, piemēram, Google Authenticator, Authy vai Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Rezerves kodi',
-    'mfa_option_backup_codes_desc' => 'Droši noglabājiet vienreizlietojamu rezerves kodu komplektu, ko varēsiet izmantot, lai verificētu savu identitāti.',
+    'mfa_option_backup_codes_desc' => 'Izveido vienreizējas lietošanas rezerves kodus, ko var izmantot pierakstoties, lai apstiprinātu savu identitāti. Pārliecinieties, ka tie ir noglabāti drošā vietā.',
     'mfa_gen_confirm_and_enable' => 'Apstiprināt un ieslēgt',
     'mfa_gen_backup_codes_title' => 'Rezerves kodu iestatījumi',
     'mfa_gen_backup_codes_desc' => 'Noglabājiet zemāk esošo kodu sarakstu drošā vietā. Kad piekļūsiet sistēmai, jūs varēsiet izmantot vienu no kodiem kā papildus autentifikācijas mehānismu.',
index dcee2878223d512630e1579c6bd05c052f7376a1..657d9be64fd901d8082f8d37cc9250065f2a8302 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => 'Apraksts',
     'role' => 'Loma',
     'cover_image' => 'Vāka attēls',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'Šim attēlam jābūt apmēram 440x250px izmērā, taču tas tiks pielāgots lietotāja saskarnei dažādos scenārijos pēc nepieciešamības, un attēla izmēri tad var atšķirties.',
 
     // Actions
     'actions' => 'Darbības',
index 4a5747e9e285bf98a717d59b52f424c0f5675796..5443e505d663c23d9c9a26a867610adffef79cca 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => 'Tabulas īpašības',
     'table_properties_title' => 'Tabulas īpašības',
     'delete_table' => 'Dzēst tabulu',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => 'Notīrīt tabulas formatējumu',
+    'resize_to_contents' => 'Pielāgot izmēru saturam',
+    'row_header' => 'Rindas galvene',
     'insert_row_before' => 'Ievietot rindu augstāk',
     'insert_row_after' => 'Ievietot rindu zemāk',
     'delete_row' => 'Dzēst rindu',
index 6db02da6a8cb1df5086b303f412b53a7cf11c577..147f5d28b28c9493d5d24390b4af8db2d5734d99 100644 (file)
@@ -39,9 +39,9 @@ return [
     'export_pdf' => 'PDF fails',
     'export_text' => 'Vienkāršs teksta fails',
     'export_md' => 'Markdown fails',
-    'default_template' => 'Default Page Template',
+    'default_template' => 'Noklusētā lapas sagatave',
     'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
-    'default_template_select' => 'Select a template page',
+    'default_template_select' => 'Izvēlēt sagataves lapu',
 
     // Permissions and restrictions
     'permissions' => 'Atļaujas',
@@ -299,7 +299,7 @@ return [
     'pages_is_template' => 'Lapas šablons',
 
     // Editor Sidebar
-    'toggle_sidebar' => 'Toggle Sidebar',
+    'toggle_sidebar' => 'Pārslēgt sānjoslu',
     'page_tags' => 'Lapas birkas',
     'chapter_tags' => 'Nodaļas birkas',
     'book_tags' => 'Grāmatas birkas',
@@ -330,7 +330,7 @@ return [
     'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.',
     'attachments_set_link' => 'Uzstādīt saiti',
     'attachments_delete' => 'Vai tiešām vēlaties dzēst šo pielikumu?',
-    'attachments_dropzone' => 'Drop files here to upload',
+    'attachments_dropzone' => 'Ievelciet failus šeit, lai augšupielādētu',
     'attachments_no_files' => 'Neviens fails nav augšupielādēts',
     'attachments_explain_link' => 'Ja nevēlaties augšupielādēt failu, varat pievienot saiti. Tā var būt saite uz citu lapu vai saite uz failu mākonī.',
     'attachments_link_name' => 'Saites nosaukums',
@@ -416,16 +416,16 @@ return [
     'watch_title_default' => 'Noklusētie uzstādījumi',
     'watch_desc_default' => 'Revert watching to just your default notification preferences.',
     'watch_title_ignore' => 'Ignorēt',
-    'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.',
+    'watch_desc_ignore' => 'Ignorēt visus paziņojumus, tai skaitā arī tādus, kas uzstādīti lietotāja uzstādījumos.',
     'watch_title_new' => 'Jaunas lapas',
     'watch_desc_new' => 'Notify when any new page is created within this item.',
     'watch_title_updates' => 'Visi lapu atjauninājumi',
-    'watch_desc_updates' => 'Notify upon all new pages and page changes.',
-    'watch_desc_updates_page' => 'Notify upon all page changes.',
+    'watch_desc_updates' => 'Paziņot par visām jaunām lapām un lapu izmaiņām.',
+    'watch_desc_updates_page' => 'Paziņot par visām lapu izmaiņām.',
     'watch_title_comments' => 'Visi lapu atjauninājumi un komentāri',
-    'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.',
-    'watch_desc_comments_page' => 'Notify upon page changes and new comments.',
-    'watch_change_default' => 'Change default notification preferences',
+    'watch_desc_comments' => 'Paziņot par visām jaunām lapām, lapu izmaiņām un jauniem komentāriem.',
+    'watch_desc_comments_page' => 'Paziņot par lapu izmaiņām un jauniem komentāriem.',
+    'watch_change_default' => 'Izmainīt noklusētos paziņojumu uzstādījumus',
     'watch_detail_ignore' => 'Ignorēt paziņojumus',
     'watch_detail_new' => 'Watching for new pages',
     'watch_detail_updates' => 'Watching new pages and updates',
index 22ccbe3833ab483b99c45a2270021d7a593234e6..192676f35a7e28f0739cae697f5d34e1d91e45f2 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => 'Lietotājs ar epastu :email bet ar citiem piekļuves datiem jau eksistē.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => 'Lietotāja kontu nevar reģistrēt ar norādītajām detaļām',
     'email_already_confirmed' => 'Epasts jau ir apstiprināts, mēģini ielogoties.',
     'email_confirmation_invalid' => 'Šis apstiprinājuma žetons nav derīgs vai jau ir izmantots. Lūdzu, mēģiniet reģistrēties vēlreiz.',
     'email_confirmation_expired' => 'Apstiprinājuma žetona derīguma termiņš ir beidzies. Ir nosūtīts jauns apstiprinājuma e-pasts.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Sociālā tīkla savienojums nav atrasts',
     'social_driver_not_configured' => 'Jūsu :socialAccount sociālie iestatījumi nav uzstādīti pareizi.',
     'invite_token_expired' => 'Šī uzaicinājuma saite ir novecojusi. Tā vietā jūs varat mēģināt atiestatīt sava konta paroli.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Šai darbībai netika atrasts lietotājs.',
 
     // System
     'path_not_writable' => 'Faila ceļā :filePath nav iespējams ielādēt failus. Lūdzu pārliecinieties, ka serverim tur ir rakstīšanas tiesības.',
index d0fee395021f2f9547727b95a83e07a80c90a6ff..9fd60222a72fb10607113099bdffecd5b65c1856 100644 (file)
@@ -10,10 +10,10 @@ return [
     'new_page_intro' => 'Jauna lapa izveidota :appName:',
     'updated_page_subject' => 'Atjaunināta lapa: :pageName',
     'updated_page_intro' => 'Lapa atjaunināta :appName:',
-    'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.',
+    'updated_page_debounce' => 'Lai novērstu pārliecīgu paziņojumu sūtīšanu, uz laiku jums tiks pārtraukti paziņojumi par turpmākiem šī lietotāja labojumiem šai lapai.',
 
     'detail_page_name' => 'Lapas nosaukums:',
-    'detail_page_path' => 'Page Path:',
+    'detail_page_path' => 'Ceļš uz lapu:',
     'detail_commenter' => 'Komentētājs:',
     'detail_comment' => 'Komentārs:',
     'detail_created_by' => 'Izveidoja:',
@@ -22,6 +22,6 @@ return [
     'action_view_comment' => 'Skatīt komentāru',
     'action_view_page' => 'Skatīt lapu',
 
-    'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.',
+    'footer_reason' => 'Šis paziņojums nosūtīts tāpēc, ka :link paredz šādu aktivitāti šai vienībai.',
     'footer_reason_link' => 'paziņojumu vēlamie iestatījumi',
 ];
index cb38482da980dc36ea27d9b6cf5ade634d5d1425..895d9a89809bfbd603c8bfe64f523cdd87b59f8b 100644 (file)
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => 'Miskaste ir tukša',
     'recycle_bin_empty' => 'Iztīrīt miskasti',
     'recycle_bin_empty_confirm' => 'Šī darbība pilnībā dzēsīs visas vienības miskastē, ieskaitot saturu, kas ievietots katrā no šīm vienībām. Vai tiešām vēlaties dzēst visu miskastes saturu?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => 'Šī darbība pilnībā no sistēmas izdzēsis šo vienību kopā ar tai pakārtotajiem elementiem, un jūs nevarēsiet šo saturu atjaunot. Vai tiešām vēlaties pilnībā izdzēst šo vienību?',
     'recycle_bin_destroy_list' => 'Dzēšamās vienības',
     'recycle_bin_restore_list' => 'Atjaunojamās vienības',
     'recycle_bin_restore_confirm' => 'Šī darbība atjaunos dzēsto vienību, tai skaitā visus tai pakārtotos elementus, uz tās sākotnējo atrašanās vietu. Ja sākotnējā atrašanās vieta ir izdzēsta un atrodas miskastē, būs nepieciešams atjaunot arī to.',
@@ -277,13 +277,13 @@ return [
     'webhooks_last_error_message' => 'Pēdējais kļūdas paziņojums:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => 'Licences',
+    'licenses_desc' => 'Šī lapa attēlo BookStack licences informāciju, kā arī licences citiem projektiem un bibliotēkām, kas tiek izmantoti BookStack. Daļa no minētajiem projektiem var būt izmantoti tikai izstrādē.',
+    'licenses_bookstack' => 'BookStack licence',
+    'licenses_php' => 'PHP bibliotēku licences',
+    'licenses_js' => 'JavaScript bibliotēku licences',
+    'licenses_other' => 'Citas licences',
+    'license_details' => 'Licences informācija',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 1db179b5f376928645422838f8585795ffc7daf7..125e6daf5d4ff41bbbe729391836b8aaed29dd3b 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilapplikasjon',
     'mfa_option_totp_desc' => 'For å bruke flerfaktorautentisering trenger du en mobilapplikasjon som støtter TOTP-teknologien, slik som Google Authenticator, Authy eller Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Sikkerhetskoder',
-    'mfa_option_backup_codes_desc' => 'Lagre sikkerhetskoder til engangsbruk på et trygt sted, disse kan du bruke for å verifisere identiteten din.',
+    'mfa_option_backup_codes_desc' => 'Genererer et sett med engangskoder som du kan bruke ved innlogging for å bekrefte identiteten din. Sørg for å lagre disse på et sikkert sted.',
     'mfa_gen_confirm_and_enable' => 'Bekreft og aktiver',
     'mfa_gen_backup_codes_title' => 'Konfigurasjon av sikkerhetskoder',
     'mfa_gen_backup_codes_desc' => 'Lagre nedeforstående liste med koder på et trygt sted. Når du skal ha tilgang til systemet kan du bruke en av disse som en faktor under innlogging.',
index 2f3e802baae509d64558af8d18696de2c6f8e93d..7b7f6e8a93021191567a27e62c4c2ff694a04267 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Autentiseringstjeneste fra sosiale medier er ikke installert',
     'social_driver_not_configured' => 'Dine :socialAccount innstilliner er ikke angitt.',
     'invite_token_expired' => 'Invitasjonslenken har utgått, du kan forsøke å be om nytt passord istede.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'En bruker for denne handlingen ble ikke funnet.',
 
     // System
     'path_not_writable' => 'Filstien :filePath aksepterer ikke filer, du må sjekke filstitilganger i systemet.',
@@ -76,7 +76,7 @@ return [
     'guests_cannot_save_drafts' => 'Gjester kan ikke lagre utkast',
 
     // Users
-    'users_cannot_delete_only_admin' => 'Du kan ikke kaste ut den eneste administratoren',
+    'users_cannot_delete_only_admin' => 'Du kan ikke slette den eneste administratoren',
     'users_cannot_delete_guest' => 'Du kan ikke slette gjestebrukeren (Du kan deaktivere offentlig visning istede)',
 
     // Roles
index 08c168e9faed3601909a3c59e3284098ab0fed0b..52a8e3e3762a055ebe53014b8b734709b2b4d3e0 100644 (file)
@@ -94,11 +94,11 @@ return [
 
     // API Tokens
     'api_token_create' => 'API-token aangemaakt',
-    'api_token_create_notification' => 'API-token met succes aangemaakt',
+    'api_token_create_notification' => 'API-token succesvol aangemaakt',
     'api_token_update' => 'wijzigde API-token',
-    'api_token_update_notification' => 'API-token met succes bijgewerkt',
+    'api_token_update_notification' => 'API-token succesvol bijgewerkt',
     'api_token_delete' => 'verwijderde API-token',
-    'api_token_delete_notification' => 'API-token met succes verwijderd',
+    'api_token_delete_notification' => 'API-token succesvol verwijderd',
 
     // Roles
     'role_create' => 'maakte rol aan',
@@ -110,8 +110,8 @@ return [
 
     // Recycle Bin
     'recycle_bin_empty' => 'leegde prullenbak',
-    'recycle_bin_restore' => 'is van prullenbak hersteld',
-    'recycle_bin_destroy' => 'is van prullenbak verwijderd',
+    'recycle_bin_restore' => 'herstelde van prullenbak',
+    'recycle_bin_destroy' => 'verwijderde van prullenbak',
 
     // Comments
     'commented_on'                => 'reageerde op',
index e3ff59cd6c2ea8f2f148fa50d457db9704515f21..12c6b6c7bff4854b84eea40ae7bfa9c518892562 100644 (file)
@@ -47,11 +47,11 @@ return [
     'reset_password' => 'Wachtwoord Herstellen',
     'reset_password_send_instructions' => 'Geef je e-mailadres op en er wordt een link gestuurd om je wachtwoord te herstellen.',
     'reset_password_send_button' => 'Stuur Herstel Link',
-    'reset_password_sent' => 'Een link om het wachtwoord te resetten zal verstuurd worden naar :email als dat e-mailadres in het systeem gevonden is.',
+    'reset_password_sent' => 'Een wachtwoordherstel-link zal worden verstuurd naar :email als dat e-mailadres in het systeem gevonden is.',
     'reset_password_success' => 'Je wachtwoord is succesvol hersteld.',
     'email_reset_subject' => 'Herstel je wachtwoord van :appName',
-    'email_reset_text' => 'Je ontvangt deze e-mail omdat we een wachtwoordresetverzoek voor uw account hebben ontvangen.',
-    'email_reset_not_requested' => 'Als je geen wachtwoord herstel hebt aangevraagd, hoef je niets te doen.',
+    'email_reset_text' => 'Je ontvangt deze e-mail omdat we een wachtwoordherstelverzoek voor uw account hebben ontvangen.',
+    'email_reset_not_requested' => 'Als je geen wachtwoordherstel hebt aangevraagd, hoef je niets te doen.',
 
     // Email Confirmation
     'email_confirm_subject' => 'Bevestig je e-mailadres op :appName',
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobiele app',
     'mfa_option_totp_desc' => 'Om meervoudige verificatie te gebruiken heb je een mobiele applicatie nodig die TOTP ondersteunt, zoals Google Authenticator, Authy of Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Back-up Codes',
-    'mfa_option_backup_codes_desc' => 'Bewaar veilig een set eenmalige back-upcodes die je kunt invoeren om je identiteit te verifiëren.',
+    'mfa_option_backup_codes_desc' => 'Genereert een set met eenmalige back-upcodes die je kan invoeren om je identiteit te bevestigen. Bewaar deze op een veilige plaats.',
     'mfa_gen_confirm_and_enable' => 'Bevestigen en inschakelen',
     'mfa_gen_backup_codes_title' => 'Back-up codes instellen',
     'mfa_gen_backup_codes_desc' => 'Bewaar de onderstaande lijst met codes op een veilige plaats. Bij toegang tot het systeem kun je een van de codes gebruiken als tweede verificatiemechanisme.',
index 7f854662574f21b5e70328ea3658568887f4203e..896b7a71d09b9f0ffb1b9a5b1ecdc30d30292874 100644 (file)
@@ -36,8 +36,8 @@ return [
     'social_account_register_instructions' => 'Als je nog geen account hebt, kun je je registreren met de :socialAccount optie.',
     'social_driver_not_found' => 'Social driver niet gevonden',
     'social_driver_not_configured' => 'Je :socialAccount instellingen zijn niet correct geconfigureerd.',
-    'invite_token_expired' => 'Deze uitnodigingslink is verlopen. Je kunt in plaats daarvan proberen je wachtwoord opnieuw in te stellen.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'invite_token_expired' => 'Deze uitnodigingslink is verlopen. Je kunt in plaats daarvan proberen je wachtwoord te herstellen.',
+    'login_user_not_found' => 'Er is geen gebruiker gevonden voor deze actie.',
 
     // System
     'path_not_writable' => 'Bestandspad :filePath kon niet naar geüpload worden. Zorg dat je schrijfrechten op de server hebt.',
index 1781256f254449bdc695501c6fab0e378127cdfa..5223bdf39ee9f09c8ae7d17ff21440f85a8fb774 100644 (file)
@@ -6,9 +6,9 @@
  */
 return [
 
-    'password' => 'Wachtwoorden moeten uit ten minste acht tekens bestaan en overeenkomen met de bevestiging.',
-    'user' => "We kunnen niemand vinden met dat e-mailadres.",
-    'token' => 'De wachtwoord reset token is ongeldig voor dit e-mailadres.',
+    'password' => 'Wachtwoorden moeten uit minstens acht tekens bestaan en overeenkomen met de bevestiging.',
+    'user' => "We kunnen geen gebruiker vinden met dat e-mailadres.",
+    'token' => 'De wachtwoordhersteltoken is ongeldig voor dit e-mailadres.',
     'sent' => 'We hebben je een link gestuurd om je wachtwoord te herstellen!',
     'reset' => 'Je wachtwoord is hersteld!',
 
index a6ae5917aec9562396634ad0d1889b7408446214..04546da1dc46ce185451cbf3c9f5579f7c3e4c59 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilapplikasjon',
     'mfa_option_totp_desc' => 'For å bruka fleirfaktorautentisering treng du ein mobilapplikasjon som støttar TOTP-teknologien, slik som Google Authenticator, Authy eller Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Tryggleikskodar',
-    'mfa_option_backup_codes_desc' => 'Lagre tryggleiksskodar til eingongsbruk på ein trygg stad, desse kan du bruka for å verifisera identiteten din.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Stadfest og aktiver',
     'mfa_gen_backup_codes_title' => 'Konfigurasjon av tryggleikskodar',
     'mfa_gen_backup_codes_desc' => 'Lagre lista under med kodar på ein trygg stad. Når du skal ha tilgang til systemet kan du bruka ein av desse som ein faktor under innlogging.',
index 00cce1a2cc59187fc82750c4a8cfe3e66204006e..e56e8ab43f198ad72feaf1c613ed74fde321149a 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplikacja mobilna',
     'mfa_option_totp_desc' => 'Aby korzystać z uwierzytelniania wieloskładnikowego, potrzebujesz aplikacji mobilnej, która obsługuje TOTP, takiej jak Google Authenticator, Authy lub Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Kody zapasowe',
-    'mfa_option_backup_codes_desc' => 'Bezpiecznie przechowuj zestaw jednorazowych kodów zapasowych, które możesz wprowadzić, aby zweryfikować swoją tożsamość.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Potwierdź i włącz',
     'mfa_gen_backup_codes_title' => 'Ustawienia kopii zapasowych kodów',
     'mfa_gen_backup_codes_desc' => 'Przechowuj poniższą listę kodów w bezpiecznym miejscu. Przy dostępie do systemu będziesz mógł użyć jednego z kodów jako drugiego mechanizmu uwierzytelniania.',
index a21eb701b3f8bdc5c9cd39171bf045703f6a01ba..81956161d19207525c27bc982355e78a245134b2 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplicação móvel',
     'mfa_option_totp_desc' => 'Para usar a autenticação multi-fator, você precisa de uma aplicação móvel que suporte TOTP como o Autenticador do Google, Authy ou o autenticador Microsoft.',
     'mfa_option_backup_codes_title' => 'Códigos de Backup',
-    'mfa_option_backup_codes_desc' => 'Armazene com segurança um conjunto de códigos de backup únicos que você pode inserir para verificar sua identidade.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirmar e ativar',
     'mfa_gen_backup_codes_title' => 'Configuração dos Códigos de Backup',
     'mfa_gen_backup_codes_desc' => 'Armazene a lista de códigos abaixo em um lugar seguro. Ao acessar o sistema você poderá usar um dos códigos como um segundo mecanismo de autenticação.',
index 089cfea3b086481105b7e98dc71bc9324637a68d..59abaea5c573cbb2eacd92a1d3df020d3c3787be 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => 'Descrição',
     'role' => 'Cargo',
     'cover_image' => 'Imagem de capa',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'Esta imagem deve ser de aproximadamente 440x250px, embora seja escalada de forma flexível e cortada para caber na interface do usuário em diferentes cenários conforme necessário, então, dimensões atuais para exibição serão diferentes.',
 
     // Actions
     'actions' => 'Ações',
index ec5e54bba2bfd1d0b618518321400d08aa5a471d..860eec645bc82629c14448f3dba422d31d2bb379 100644 (file)
@@ -25,9 +25,9 @@ return [
     'notifications_opt_own_page_comments' => 'Notificar quando comentam páginas que possuo',
     'notifications_opt_comment_replies' => 'Notificar respostas aos meus comentários',
     'notifications_save' => 'Guardar preferências',
-    'notifications_update_success' => 'Notification preferences have been updated!',
-    'notifications_watched' => 'Watched & Ignored Items',
-    'notifications_watched_desc' => 'Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.',
+    'notifications_update_success' => 'Preferências de notificação foram atualizadas!',
+    'notifications_watched' => 'Itens assistidos e ignorados',
+    'notifications_watched_desc' => 'Abaixo estão os itens que possuem preferências de seguir personalizadas aplicadas. Para atualizar suas preferências para estes, veja o item e encontre as opções de seguir na barra lateral.',
 
     'auth' => 'Acesso e Segurança',
     'auth_change_password' => 'Alterar Palavra-passe',
@@ -35,13 +35,13 @@ return [
     'auth_change_password_success' => 'A palavra-passe foi atualizada!',
 
     'profile' => 'Detalhes Do Perfil',
-    'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.',
+    'profile_desc' => 'Gerencie os detalhes de sua conta que o representam para outros usuários, além de detalhes que são usados para personalização do sistema e comunicação.',
     'profile_view_public' => 'Visualizar Perfil Público',
-    'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.',
-    'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.',
-    'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.',
-    'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.',
-    'profile_admin_options' => 'Administrator Options',
+    'profile_name_desc' => 'Configure o seu nome de exibição que será visível para outros usuários no sistema através da atividade que você executa e do conteúdo você tem.',
+    'profile_email_desc' => 'Este e-mail será usado para notificações e, dependendo da autenticação ativa do sistema, acesso do sistema.',
+    'profile_email_no_permission' => 'Infelizmente você não tem permissão para alterar seu correio eletrônico. Se você quiser mudar isso, você precisa pedir a um administrador para alterar por você.',
+    'profile_avatar_desc' => 'Selecione uma imagem que será usada para lhe representar aos outros usuários do sistema. Idealmente, esta imagem deve ser quadrada e sobre 256px em largura e altura.',
+    'profile_admin_options' => 'Opções de administrador',
     'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.',
 
     'delete_account' => 'Excluir Conta',
index 93b4d91e6fdebfcc5039e688ebae4b1a1eb9e51b..d2b963244daea7888cc15789403c93c496b4968a 100644 (file)
@@ -93,11 +93,11 @@ return [
     'user_delete_notification' => 'Usuário removido com sucesso',
 
     // API Tokens
-    'api_token_create' => 'created API token',
+    'api_token_create' => 'token de API criado',
     'api_token_create_notification' => 'Token de API criado com sucesso',
-    'api_token_update' => 'updated API token',
+    'api_token_update' => 'token de API atualizado',
     'api_token_update_notification' => 'Token de API atualizado com sucesso',
-    'api_token_delete' => 'deleted API token',
+    'api_token_delete' => 'token de API excluído',
     'api_token_delete_notification' => 'Token de API excluído com sucesso',
 
     // Roles
index 71d8b73a2b3ce663e7e31034e0a8df8e9fbf521f..b5fd974aa200b187350cafa0f9df2e9c2b4d1915 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplicativo Móvel',
     'mfa_option_totp_desc' => 'Para usar a autenticação multi-fator, você precisará de um aplicativo móvel que suporte TOTP como o Google Authenticator, Authy ou o Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Códigos de backup',
-    'mfa_option_backup_codes_desc' => 'Armazene com segurança um conjunto de códigos de backup únicos que você pode inserir para verificar sua identidade.',
+    'mfa_option_backup_codes_desc' => 'Gera um conjunto de códigos de backup de uso único que você inserirá no login para verificar sua identidade. Certifique-se de armazená-los em um local seguro e protegido.',
     'mfa_gen_confirm_and_enable' => 'Confirmar e habilitar',
     'mfa_gen_backup_codes_title' => 'Configuração dos Códigos de Backup',
     'mfa_gen_backup_codes_desc' => 'Armazene a lista de códigos abaixo em um lugar seguro. Ao acessar o sistema você poderá usar um dos códigos como segundo mecanismo de autenticação.',
index 3bc23623b4b8019fd06d3c58a156e8c0098aeb62..88bb6de249f68f1afda9cc17e6226e1ed290ebb7 100644 (file)
@@ -20,7 +20,7 @@ return [
     'description' => 'Descrição',
     'role' => 'Cargo',
     'cover_image' => 'Imagem de capa',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'Esta imagem deve ter aproximadamente 440x250px, embora seja dimensionada e cortada de forma flexível para se ajustar à interface do usuário em diferentes cenários, conforme necessário, portanto, as dimensões reais para exibição serão diferentes.',
 
     // Actions
     'actions' => 'Ações',
index d89117885cae7acebe91535f0a5df741e876d506..c54d9eed93866918fe3f7541c8eb8b3b088f6518 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => 'Propriedades da tabela',
     'table_properties_title' => 'Propriedades da Tabela',
     'delete_table' => 'Excluir Tabela',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => 'Limpar formatação de tabela',
+    'resize_to_contents' => 'Redimensionar para o conteúdo',
+    'row_header' => 'Cabeçalho da linha',
     'insert_row_before' => 'Inserir linha antes',
     'insert_row_after' => 'Inserir linha depois',
     'delete_row' => 'Excluir linha',
@@ -165,7 +165,7 @@ return [
     'editor_license' => 'Licença do Editor e Direitos Autorais',
     'editor_tiny_license' => 'Este editor é construído usando :tinyLink que é fornecido sob a licença MIT.',
     'editor_tiny_license_link' => 'Os dados relativos aos direitos de autor e à licença do TinyMCE podem ser encontrados aqui.',
-    'save_continue' => 'Salvar e continuar',
+    'save_continue' => 'Salvar Página e Continuar',
     'callouts_cycle' => '(Continue pressionando para alternar através de tipos)',
     'link_selector' => 'Link para conteúdo',
     'shortcuts' => 'Atalhos',
index f57784f9fe6da0f338d608b7d8cd292dabb129f9..8946e851cbab4579cc8a88a264f1bec5ad3bf009 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => 'Um usuário com o e-mail :email já existe mas com credenciais diferentes.',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => 'A conta do usuário não pôde ser registrada com os detalhes fornecidos',
     'email_already_confirmed' => 'E-mail já foi confirmado. Tente efetuar o login.',
     'email_confirmation_invalid' => 'Esse token de confirmação não é válido ou já foi utilizado. Por favor, tente cadastrar-se novamente.',
     'email_confirmation_expired' => 'O token de confirmação já expirou. Um novo e-mail foi enviado.',
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Social driver não encontrado',
     'social_driver_not_configured' => 'Seus parâmetros socials de :socialAccount não estão configurados corretamente.',
     'invite_token_expired' => 'Esse link de convite expirou. Alternativamente, você pode tentar redefinir a senha da sua conta.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Não foi possível encontrar um usuário para esta ação.',
 
     // System
     'path_not_writable' => 'O caminho de destino (:filePath) de upload de arquivo não possui permissão de escrita. Certifique-se que ele possui direitos de escrita no servidor.',
index 1107855a61aece655c019ebc2782fb19162deff9..3e5341e41936da858c1c2e7456cf80b159ac1698 100644 (file)
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => 'A lixeira está vazia',
     'recycle_bin_empty' => 'Esvaziar Lixeira',
     'recycle_bin_empty_confirm' => 'Isso irá destruir permanentemente todos os itens na lixeira inclusive o conteúdo de cada item. Tem certeza de que quer esvaziar a lixeira?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => 'Esta ação excluirá permanentemente este item do sistema, juntamente com quaisquer elementos secundários listados abaixo, e você não poderá restaurar este conteúdo. Tem certeza de que deseja excluir permanentemente este item?',
     'recycle_bin_destroy_list' => 'Itens a serem Destruídos',
     'recycle_bin_restore_list' => 'Itens a serem restaurados',
     'recycle_bin_restore_confirm' => 'Esta ação irá restaurar o item excluído, inclusive quaisquer elementos filhos, para seu local original. Se a localização original tiver, entretanto, sido eliminada e estiver agora na lixeira, o item pai também precisará ser restaurado.',
@@ -277,13 +277,13 @@ return [
     'webhooks_last_error_message' => 'Última mensagem de erro:',
 
     // Licensing
-    'licenses' => 'Licenses',
-    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
-    'licenses_other' => 'Other Licenses',
-    'license_details' => 'License Details',
+    'licenses' => 'Licenças',
+    'licenses_desc' => 'Esta página detalha informações da licença do BookStack, além dos projetos e bibliotecas usadas no BookStack. Muitos projectos listados só podem ser utilizados num contexto de desenvolvimento.',
+    'licenses_bookstack' => 'Licença do BookStack',
+    'licenses_php' => 'Licenças de Bibliotecas PHP',
+    'licenses_js' => 'Licenças de Bibliotecas JavaScript',
+    'licenses_other' => 'Outras licenças',
+    'license_details' => 'Detalhes da Licença',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 7f461bc7a8f0e598470368762b29d9dab96ca874..e02eeb4c1ba4f0311e8f48f61134e42404a12b77 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplicație mobilă',
     'mfa_option_totp_desc' => 'Pentru a utiliza autentificarea multifactor, vei avea nevoie de o aplicație mobilă care acceptă TOTP, cum ar fi Google Authenticator, Authy sau Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Coduri de rezervă',
-    'mfa_option_backup_codes_desc' => 'Stochează în siguranță un set de coduri de rezervă de unică folosință pe care le poți introduce pentru verificarea identității.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirmă și activează',
     'mfa_gen_backup_codes_title' => 'Configurarea codurilor de rezervă',
     'mfa_gen_backup_codes_desc' => 'Păstrează lista de coduri de mai jos într-un loc sigur. Când accesezi sistemul, vei putea folosi unul dintre coduri ca un al doilea mecanism de autentificare.',
index b50d67a922685f8c0c7b539ecf8e48cb2e7a7538..d39da119dea76a746ab5bb1f5a937c991b541d94 100644 (file)
@@ -6,7 +6,7 @@
  */
 return [
 
-    'failed' => 'УÑ\87еÑ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°.',
+    'failed' => 'Ð\92веденнÑ\8bе Ð²Ð°Ð¼Ð¸ Ð´Ð°Ð½Ð½Ñ\8bе Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ\8b Ð² Ð½Ð°Ñ\88ей Ð±Ð°Ð·Ðµ.',
     'throttle' => 'Слишком много попыток входа. Пожалуйста, повторите попытку через :seconds секунд.',
 
     // Login & Register
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Мобильное приложение',
     'mfa_option_totp_desc' => 'Для использования многофакторной аутентификации вам понадобится мобильное приложение, поддерживающее TOTP, например Google Authenticator, Authy или Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Резервные коды',
-    'mfa_option_backup_codes_desc' => 'Ð\91езопаÑ\81но Ñ\85Ñ\80аниÑ\82Ñ\8c Ð½Ð°Ð±Ð¾Ñ\80 Ð¾Ð´Ð½Ð¾Ñ\80азовÑ\8bÑ\85 Ñ\80езеÑ\80внÑ\8bÑ\85 ÐºÐ¾Ð´Ð¾Ð², ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð²Ð²ÐµÑ\81Ñ\82и Ð´Ð»Ñ\8f Ð¿Ñ\80овеÑ\80ки Ð²Ð°Ñ\88ей Ð»Ð¸Ñ\87ноÑ\81Ñ\82и.',
+    'mfa_option_backup_codes_desc' => 'Ð\93енеÑ\80иÑ\80Ñ\83еÑ\82 Ð½Ð°Ð±Ð¾Ñ\80 Ð¾Ð´Ð½Ð¾Ñ\80азовÑ\8bÑ\85 Ñ\80езеÑ\80внÑ\8bÑ\85 ÐºÐ¾Ð´Ð¾Ð², ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²Ñ\8b Ð²Ð²Ð¾Ð´Ð¸Ñ\82е Ð¿Ñ\80и Ð²Ñ\85оде, Ñ\87Ñ\82обÑ\8b Ð¿Ñ\80овеÑ\80иÑ\82Ñ\8c Ð²Ð°Ñ\88Ñ\83 Ð»Ð¸Ñ\87ноÑ\81Ñ\82Ñ\8c. Ð\9dе Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ñ\81оÑ\85Ñ\80аниÑ\82Ñ\8c Ð¸Ñ\85 Ð² Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ\81ном Ð¼ÐµÑ\81Ñ\82е.',
     'mfa_gen_confirm_and_enable' => 'Подтвердить и включить',
     'mfa_gen_backup_codes_title' => 'Настройка резервных кодов',
     'mfa_gen_backup_codes_desc' => 'Сохраните приведенный ниже список кодов в безопасном месте. При доступе к системе вы сможете использовать один из кодов в качестве второго механизма аутентификации.',
index 596d8b78a5948f75bdd7acce4221235b0518a4f3..a234bd9c9cc580e3db044ef7f0a8df84fbe0fc7b 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => 'Драйвер для Соцсети не найден',
     'social_driver_not_configured' => 'Настройки вашего :socialAccount заданы неправильно.',
     'invite_token_expired' => 'Срок действия приглашения истек. Вместо этого вы можете попытаться сбросить пароль своей учетной записи.',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => 'Пользователь для этого действия не найден.',
 
     // System
     'path_not_writable' => 'Невозможно загрузить файл по пути :filePath. Убедитесь что сервер доступен для записи.',
index 084de678e2a41a3f5b22b61562f194d1d38e13b8..11ccdc8893f469e5a813d7d6a81b113156657691 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilná aplikácia',
     'mfa_option_totp_desc' => 'Pre používanie viacúrovňového prihlasovania budete potrebovať mobilnú aplikáciu, ktorá podporuje TOPS ako napríklad Google Authenticator, Authy alebo Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Záložné kódy',
-    'mfa_option_backup_codes_desc' => 'Bezpečne uložte jednorázové záložné kódy pre overenie vačej identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Potvrdiť a zapnúť',
     'mfa_gen_backup_codes_title' => 'Nastavenie záložných kódov',
     'mfa_gen_backup_codes_desc' => 'Uložte si tieto kódy na bezpečné miesto. Jeden z kódov budete môcť použiť ako druhý faktor overenia identiy na prihlásenie sa.',
index ed7b5d4a0504bee191f9262a26ebac06b4522eff..47b70df7f22087d30ad6c750a69f8b4ddeff3c0a 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index 344ef767e16b39503bfad91dd0d723dd63d82d93..e3259a9618f3700afb89e25b6cd95f7d1d4967ab 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobile App',
     'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Backup Codes',
-    'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Confirm and Enable',
     'mfa_gen_backup_codes_title' => 'Backup Codes Setup',
     'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.',
index aae292a3073852a2688b8081085c083600a44d5a..0100e666fa39ff7b51d0e44196cf557c37875025 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Aplikacije za mobilne uređaje',
     'mfa_option_totp_desc' => 'Да бисте користили вишефакторску аутентификацију, биће вам потребна мобилна апликација која подржава ТОТП, као што јеGoogle Authenticator, Authy или Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Резервни кодови',
-    'mfa_option_backup_codes_desc' => 'Ð\91езбедно Ñ\87Ñ\83ваÑ\98Ñ\82е Ñ\81кÑ\83п Ñ\80езеÑ\80вниÑ\85 ÐºÐ¾Ð´Ð¾Ð²Ð° Ð·Ð° Ñ\98еднокÑ\80аÑ\82нÑ\83 Ñ\83поÑ\82Ñ\80ебÑ\83 ÐºÐ¾Ñ\98е Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\83неÑ\81еÑ\82е Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ñ\81воÑ\98 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82.',
+    'mfa_option_backup_codes_desc' => 'Ð\93енеÑ\80иÑ\88е Ñ\81кÑ\83п Ñ\80езеÑ\80вниÑ\85 ÐºÐ¾Ð´Ð¾Ð²Ð° Ð·Ð° Ñ\98еднокÑ\80аÑ\82нÑ\83 Ñ\83поÑ\82Ñ\80ебÑ\83 ÐºÐ¾Ñ\98е Ñ\9bеÑ\82е Ñ\83неÑ\82и Ð¿Ñ\80иликом Ð¿Ñ\80иÑ\98авÑ\99иваÑ\9aа Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ñ\81воÑ\98 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82. Ð\9eбавезно Ð¸Ñ\85 Ñ\87Ñ\83ваÑ\98Ñ\82е Ð½Ð° Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ð¼ Ð¸ Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ð¼ Ð¼ÐµÑ\81Ñ\82Ñ\83.',
     'mfa_gen_confirm_and_enable' => 'Потврдите и омогућите',
     'mfa_gen_backup_codes_title' => 'Подешавање резервних кодова',
     'mfa_gen_backup_codes_desc' => 'Чувајте доњу листу кодова на безбедном месту. Када приступате систему, моћи ћете да користите један од кодова као други механизам за аутентификацију.',
index 9e620b24ed1dfcde5d5283b659d78b3fc63e5c10..0666a58ead9dbc3f2e12ef49e047623f74b7865f 100644 (file)
@@ -6,59 +6,59 @@
 return [
 
     // Shared
-    'recently_created' => 'Recently Created',
-    'recently_created_pages' => 'Recently Created Pages',
-    'recently_updated_pages' => 'Recently Updated Pages',
-    'recently_created_chapters' => 'Recently Created Chapters',
-    'recently_created_books' => 'Recently Created Books',
-    'recently_created_shelves' => 'Recently Created Shelves',
-    'recently_update' => 'Recently Updated',
-    'recently_viewed' => 'Recently Viewed',
-    'recent_activity' => 'Recent Activity',
-    'create_now' => 'Create one now',
-    'revisions' => 'Revisions',
-    'meta_revision' => 'Revision #:revisionCount',
-    'meta_created' => 'Created :timeLength',
-    'meta_created_name' => 'Created :timeLength by :user',
-    'meta_updated' => 'Updated :timeLength',
-    'meta_updated_name' => 'Updated :timeLength by :user',
-    'meta_owned_name' => 'Owned by :user',
-    'meta_reference_count' => 'Referenced by :count item|Referenced by :count items',
-    'entity_select' => 'Entity Select',
-    'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item',
-    'images' => 'Images',
-    'my_recent_drafts' => 'My Recent Drafts',
-    'my_recently_viewed' => 'My Recently Viewed',
-    'my_most_viewed_favourites' => 'My Most Viewed Favourites',
-    'my_favourites' => 'My Favourites',
-    'no_pages_viewed' => 'You have not viewed any pages',
-    'no_pages_recently_created' => 'No pages have been recently created',
-    'no_pages_recently_updated' => 'No pages have been recently updated',
-    'export' => 'Export',
-    'export_html' => 'Contained Web File',
-    'export_pdf' => 'PDF File',
-    'export_text' => 'Plain Text File',
+    'recently_created' => 'Недавно додато',
+    'recently_created_pages' => 'Недавно креиране странице',
+    'recently_updated_pages' => 'Недавно ажуриране странице',
+    'recently_created_chapters' => 'Недавно креирана поглавља',
+    'recently_created_books' => 'Недавно креиране књиге',
+    'recently_created_shelves' => 'Недавно креиране полице',
+    'recently_update' => 'Недавно ажурирано',
+    'recently_viewed' => 'Недавно прегледано',
+    'recent_activity' => 'Скорашња активност',
+    'create_now' => 'Направи један сада',
+    'revisions' => 'Ревизије',
+    'meta_revision' => 'Ревизија #:revisionCount',
+    'meta_created' => 'Направљено :timeLength',
+    'meta_created_name' => 'Направљено :timeLength од :user',
+    'meta_updated' => 'Ажурирано :timeLength',
+    'meta_updated_name' => 'Ажурирано :timeLength од :user',
+    'meta_owned_name' => 'Власништво :user',
+    'meta_reference_count' => 'Референтна од :count item|Референтна од :count items',
+    'entity_select' => 'Избор ентитета',
+    'entity_select_lack_permission' => 'Немате потребне дозволе да изаберете ову ставку',
+    'images' => 'Слике',
+    'my_recent_drafts' => 'Моји недавни нацрти',
+    'my_recently_viewed' => 'Моје недавно прегледано',
+    'my_most_viewed_favourites' => 'Моји најгледанији фаворити',
+    'my_favourites' => 'Моји омиљени',
+    'no_pages_viewed' => 'Нисте погледали ниједну страницу',
+    'no_pages_recently_created' => 'Недавно није направљена ниједна страница',
+    'no_pages_recently_updated' => 'Ниједна страница није недавно ажурирана',
+    'export' => 'Извоз',
+    'export_html' => 'Садржана веб датотека',
+    'export_pdf' => 'PDF датотека',
+    'export_text' => 'Датотеке чистог текста',
     'export_md' => 'Markdown File',
-    'default_template' => 'Default Page Template',
-    'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
-    'default_template_select' => 'Select a template page',
+    'default_template' => 'Подразумевани шаблон странице',
+    'default_template_explain' => 'Доделите шаблон странице који ће се користити као подразумевани садржај за све странице креиране у оквиру ове ставке. Имајте на уму да ће се ово користити само ако креатор странице има приступ за преглед изабране странице шаблона.',
+    'default_template_select' => 'Изаберите страницу са шаблоном',
 
     // Permissions and restrictions
-    'permissions' => 'Permissions',
-    'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
-    'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
-    'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
-    'permissions_save' => 'Save Permissions',
-    'permissions_owner' => 'Owner',
-    'permissions_role_everyone_else' => 'Everyone Else',
-    'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
-    'permissions_role_override' => 'Override permissions for role',
-    'permissions_inherit_defaults' => 'Inherit defaults',
+    'permissions' => 'Дозволе',
+    'permissions_desc' => 'Подесите дозволе овде да бисте заменили подразумеване дозволе које дају корисничке улоге.',
+    'permissions_book_cascade' => 'Дозволе постављене за књиге ће се аутоматски пребацивати на подређена поглавља и странице, осим ако немају дефинисане сопствене дозволе.',
+    'permissions_chapter_cascade' => 'Дозволе постављене на поглављима ће се аутоматски каскадно пребацивати на подређене странице, осим ако немају дефинисане сопствене дозволе.',
+    'permissions_save' => 'Сачувај дозволе',
+    'permissions_owner' => 'Власник',
+    'permissions_role_everyone_else' => 'Сви остали',
+    'permissions_role_everyone_else_desc' => 'Подесите дозволе за све улоге које нису посебно замењене.',
+    'permissions_role_override' => 'Замени дозволе за улогу',
+    'permissions_inherit_defaults' => 'Наследи подразумеване вредности',
 
     // Search
-    'search_results' => 'Search Results',
-    'search_total_results_found' => ':count result found|:count total results found',
-    'search_clear' => 'Clear Search',
+    'search_results' => 'Резултати претраге',
+    'search_total_results_found' => ':count пронађених резултата|:count укупно пронађених резултата',
+    'search_clear' => 'Обриши претрагу',
     'search_no_pages' => 'No pages matched this search',
     'search_for_term' => 'Search for :term',
     'search_more' => 'More Results',
index ba0043600a79343cf0b7724c842bc40399eb5b4d..44df0307a48442c5831e02da8aba8fafeabdf699 100644 (file)
@@ -5,11 +5,11 @@
 return [
 
     // Permissions
-    'permission' => 'You do not have permission to access the requested page.',
-    'permissionJson' => 'You do not have permission to perform the requested action.',
+    'permission' => 'Немате дозволу да приступите овој страни.',
+    'permissionJson' => 'Немате овлашћење да извршите ову акцију.',
 
     // Auth
-    'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.',
+    'error_user_exists_different_creds' => 'Корисник са е-мејл адресом :email већ постоји са другим приступним подацима.',
     'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
     'email_already_confirmed' => 'Email has already been confirmed, Try logging in.',
     'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.',
index 11b9a9efe58a0895e2a5f14613e3e5af306ea453..abe53c856d13c2607e07e7ab7ecf8738e63c15aa 100644 (file)
@@ -64,17 +64,17 @@ return [
     // Auth
     'auth_login' => 'loggade in',
     'auth_register' => 'registrerad som ny användare',
-    'auth_password_reset_request' => 'requested user password reset',
-    'auth_password_reset_update' => 'reset user password',
-    'mfa_setup_method' => 'configured MFA method',
+    'auth_password_reset_request' => 'begärd återställning av användarlösenord',
+    'auth_password_reset_update' => 'återställa användarens lösenord',
+    'mfa_setup_method' => 'konfigurerad MFA metod',
     'mfa_setup_method_notification' => 'Multifaktor-metod har konfigurerats',
-    'mfa_remove_method' => 'removed MFA method',
+    'mfa_remove_method' => 'tog bort MFA metod',
     'mfa_remove_method_notification' => 'Multifaktor-metod har tagits bort',
 
     // Settings
-    'settings_update' => 'updated settings',
-    'settings_update_notification' => 'Settings successfully updated',
-    'maintenance_action_run' => 'ran maintenance action',
+    'settings_update' => 'uppdaterade inställningar',
+    'settings_update_notification' => 'Inställningarna har uppdaterats',
+    'maintenance_action_run' => 'körde underhållsåtgärder',
 
     // Webhooks
     'webhook_create' => 'skapade webhook',
@@ -85,39 +85,39 @@ return [
     'webhook_delete_notification' => 'Webhook har tagits bort',
 
     // Users
-    'user_create' => 'created user',
-    'user_create_notification' => 'User successfully created',
-    'user_update' => 'updated user',
+    'user_create' => 'skapade användare',
+    'user_create_notification' => 'Användare skapades',
+    'user_update' => 'uppdaterad användare',
     'user_update_notification' => 'Användaren har uppdaterats',
-    'user_delete' => 'deleted user',
+    'user_delete' => 'raderad användare',
     'user_delete_notification' => 'Användaren har tagits bort',
 
     // API Tokens
-    'api_token_create' => 'created API token',
-    'api_token_create_notification' => 'API token successfully created',
-    'api_token_update' => 'updated API token',
-    'api_token_update_notification' => 'API token successfully updated',
-    'api_token_delete' => 'deleted API token',
-    'api_token_delete_notification' => 'API token successfully deleted',
+    'api_token_create' => 'skapade API-token',
+    'api_token_create_notification' => 'API-token har skapats',
+    'api_token_update' => 'uppdaterad API-token',
+    'api_token_update_notification' => 'API-token har uppdaterats',
+    'api_token_delete' => 'raderad API-token',
+    'api_token_delete_notification' => 'API-token har tagits bort',
 
     // Roles
-    'role_create' => 'created role',
-    'role_create_notification' => 'Role successfully created',
-    'role_update' => 'updated role',
-    'role_update_notification' => 'Role successfully updated',
-    'role_delete' => 'deleted role',
-    'role_delete_notification' => 'Role successfully deleted',
+    'role_create' => 'skapad roll',
+    'role_create_notification' => 'Rollen har skapats',
+    'role_update' => 'uppdaterad roll',
+    'role_update_notification' => 'Rollen har uppdaterats',
+    'role_delete' => 'raderad roll',
+    'role_delete_notification' => 'Rollen har tagits bort',
 
     // Recycle Bin
-    'recycle_bin_empty' => 'emptied recycle bin',
-    'recycle_bin_restore' => 'restored from recycle bin',
-    'recycle_bin_destroy' => 'removed from recycle bin',
+    'recycle_bin_empty' => 'tömd papperskorg',
+    'recycle_bin_restore' => 'återställd från papperskorgen',
+    'recycle_bin_destroy' => 'borttagen från papperskorgen',
 
     // Comments
     'commented_on'                => 'kommenterade',
-    'comment_create'              => 'added comment',
-    'comment_update'              => 'updated comment',
-    'comment_delete'              => 'deleted comment',
+    'comment_create'              => 'lagt till kommentar',
+    'comment_update'              => 'uppdaterad kommentar',
+    'comment_delete'              => 'raderad kommentar',
 
     // Other
     'permissions_update'          => 'uppdaterade behörigheter',
index e77f4c6696d8731105fdda9278cf107a6fd32994..c9feb83121852a060a5dd2414b888e5aa93e8b04 100644 (file)
@@ -61,8 +61,8 @@ return [
     'email_confirm_send_error' => 'E-posten behöver bekräftas men systemet kan inte skicka mail. Kontakta adminstratören för att kontrollera att allt är konfigurerat korrekt.',
     'email_confirm_success' => 'Din e-postadress har bekräftats! Du bör nu kunna logga in med denna e-postadress.',
     'email_confirm_resent' => 'Bekräftelsemailet har skickats på nytt, kolla din mail',
-    'email_confirm_thanks' => 'Thanks for confirming!',
-    'email_confirm_thanks_desc' => 'Please wait a moment while your confirmation is handled. If you are not redirected after 3 seconds press the "Continue" link below to proceed.',
+    'email_confirm_thanks' => 'Tack för att du bekräftade!',
+    'email_confirm_thanks_desc' => 'Vänta en stund medan din bekräftelse hanteras. Om du inte omdirigeras efter 3 sekunder tryck på "Fortsätt" länken nedan för att fortsätta.',
 
     'email_not_confirmed' => 'E-posadress ej bekräftad',
     'email_not_confirmed_text' => 'Din e-postadress har inte bekräftats ännu.',
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobilapp',
     'mfa_option_totp_desc' => 'För att använda multifaktorautentisering behöver du en mobil app som stöder TOTP så som Google Authenticator, Authy eller Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Reservkoder',
-    'mfa_option_backup_codes_desc' => 'Lagra säkert en uppsättning engångsreservkoder som du kan ange för att verifiera din identitet.',
+    'mfa_option_backup_codes_desc' => 'Genererar en uppsättning engångsbaserade säkerhetskopieringskoder som du anger vid inloggningen för att verifiera din identitet. Se till att förvara dessa på en säker och säker plats.',
     'mfa_gen_confirm_and_enable' => 'Bekräfta och aktivera',
     'mfa_gen_backup_codes_title' => 'Konfiguration av reservkoder',
     'mfa_gen_backup_codes_desc' => 'Spara nedanstående koder på en säker plats. När du använder systemet kommer du att kunna använda en av koderna som en andra autentiseringsmekanism.',
index 70e9d2500a0e365b478061592332389b49c20814..ae0aded622500809efabb056d6a88e0c2b32015b 100644 (file)
@@ -20,13 +20,13 @@ return [
     'description' => 'Beskrivning',
     'role' => 'Roll',
     'cover_image' => 'Omslagsbild',
-    'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
+    'cover_image_description' => 'Denna bild bör vara ungefär 440x250px även om den kommer att vara flexibelt skalad och beskuren för att passa användargränssnittet i olika scenarier där så krävs, kommer faktiska visningsmått att skilja sig.',
 
     // Actions
     'actions' => 'Åtgärder',
     'view' => 'Visa',
     'view_all' => 'Visa alla',
-    'new' => 'New',
+    'new' => 'Ny',
     'create' => 'Skapa',
     'update' => 'Uppdatera',
     'edit' => 'Redigera',
@@ -52,7 +52,7 @@ return [
     'filter_clear' => 'Rensa filter',
     'download' => 'Ladda ner',
     'open_in_tab' => 'Öppna i flik',
-    'open' => 'Open',
+    'open' => 'Öppna',
 
     // Sort Options
     'sort_options' => 'Sorteringsalternativ',
@@ -84,14 +84,14 @@ return [
     'none' => 'Inga',
 
     // Header
-    'homepage' => 'Homepage',
+    'homepage' => 'Startsida',
     'header_menu_expand' => 'Expandera sidhuvudsmenyn',
     'profile_menu' => 'Profilmeny',
     'view_profile' => 'Visa profil',
     'edit_profile' => 'Redigera profil',
     'dark_mode' => 'Mörkt läge',
     'light_mode' => 'Ljust läge',
-    'global_search' => 'Global Search',
+    'global_search' => 'Global sökning',
 
     // Layout tabs
     'tab_info' => 'Information',
index 5a4296868aebbdedb2f6dc0ca18b91b8001ac7bf..315e1683c501d6a624e1ccdb43bb9d75c0d89761 100644 (file)
@@ -6,36 +6,36 @@ return [
 
     // Image Manager
     'image_select' => 'Val av bild',
-    'image_list' => 'Image List',
-    'image_details' => 'Image Details',
-    'image_upload' => 'Upload Image',
-    'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.',
-    'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.',
+    'image_list' => 'Bildlista',
+    'image_details' => 'Bilddetaljer',
+    'image_upload' => 'Ladda upp bild',
+    'image_intro' => 'Här kan du välja och hantera bilder som tidigare har laddats upp till systemet.',
+    'image_intro_upload' => 'Ladda upp en ny bild genom att dra en bildfil till detta fönster, eller genom att använda knappen "Ladda upp bild" ovan.',
     'image_all' => 'Alla',
     'image_all_title' => 'Visa alla bilder',
     'image_book_title' => 'Visa bilder som laddats upp till den aktuella boken',
     'image_page_title' => 'Visa bilder som laddats upp till den aktuella sidan',
     'image_search_hint' => 'Sök efter bildens namn',
     'image_uploaded' => 'Laddades upp :uploadedDate',
-    'image_uploaded_by' => 'Uploaded by :userName',
-    'image_uploaded_to' => 'Uploaded to :pageLink',
-    'image_updated' => 'Updated :updateDate',
+    'image_uploaded_by' => 'Uppladdad av :userName',
+    'image_uploaded_to' => 'Uppladdad till :pageLink',
+    'image_updated' => 'Uppdaterad :updateDate',
     'image_load_more' => 'Ladda fler',
     'image_image_name' => 'Bildnamn',
     'image_delete_used' => 'Den här bilden används på nedanstående sidor.',
     'image_delete_confirm_text' => 'Är du säker på att du vill radera denna bild?',
     'image_select_image' => 'Välj bild',
     'image_dropzone' => 'Släpp bilder här eller klicka för att ladda upp',
-    'image_dropzone_drop' => 'Drop images here to upload',
+    'image_dropzone_drop' => 'Släpp filer här för att ladda upp dem',
     'images_deleted' => 'Bilder borttagna',
     'image_preview' => 'Förhandsgranskning',
     'image_upload_success' => 'Bilden har laddats upp',
     'image_update_success' => 'Bildens uppgifter har ändrats',
     'image_delete_success' => 'Bilden har tagits bort',
-    'image_replace' => 'Replace Image',
-    'image_replace_success' => 'Image file successfully updated',
-    'image_rebuild_thumbs' => 'Regenerate Size Variations',
-    'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!',
+    'image_replace' => 'Ersätt bild',
+    'image_replace_success' => 'Bildfilen har uppdaterats',
+    'image_rebuild_thumbs' => 'Återskapa variationer av bildstorlekar',
+    'image_rebuild_thumbs_success' => 'Variationer av bildstorlekar har återskapats!',
 
     // Code Editor
     'code_editor' => 'Redigera kod',
index 0ada0a4cec1bcb5e1ac34af770bec9a78a71604f..25e443511c1b11e67cdcc5de2c5b03ee004b0371 100644 (file)
@@ -82,7 +82,7 @@ return [
     'table_properties_title' => 'Tabellegenskaper',
     'delete_table' => 'Ta bort tabell',
     'table_clear_formatting' => 'Rensa tabell-formatering',
-    'resize_to_contents' => 'Resize to contents',
+    'resize_to_contents' => 'Ändra storlek till innehåll',
     'row_header' => 'Radrubrik',
     'insert_row_before' => 'Infoga rad före',
     'insert_row_after' => 'Infoga rad efter',
@@ -165,7 +165,7 @@ return [
     'editor_license' => 'Licens och upphovsrätt för redigerare',
     'editor_tiny_license' => 'Denna redigerare är byggd med :tinyLink som tillhandahålls under MIT licensen.',
     'editor_tiny_license_link' => 'Upphovsrätten och licensuppgifterna för TinyMCE hittar du här.',
-    'save_continue' => 'Spara & Fortsätt',
+    'save_continue' => 'Spara sida & fortsätt',
     'callouts_cycle' => '(Fortsätt trycka för att växla mellan typer)',
     'link_selector' => 'Länka till innehåll',
     'shortcuts' => 'Genvägar',
index 79aa46365dfea5e72b2dacf77df0ab95d357cb37..6023c6cd3b46047e65c092d468839057b98464eb 100644 (file)
@@ -23,7 +23,7 @@ return [
     'meta_updated' => 'Uppdaterad :timeLength',
     'meta_updated_name' => 'Uppdaterad :timeLength av :user',
     'meta_owned_name' => 'Ägs av :user',
-    'meta_reference_count' => 'Referenced by :count item|Referenced by :count items',
+    'meta_reference_count' => 'Refererad till av :count item|Referenced by :count items',
     'entity_select' => 'Välj enhet',
     'entity_select_lack_permission' => 'Du har inte den behörighet som krävs för att välja det här objektet',
     'images' => 'Bilder',
@@ -39,7 +39,7 @@ return [
     'export_pdf' => 'PDF-fil',
     'export_text' => 'Textfil',
     'export_md' => 'Markdown-fil',
-    'default_template' => 'Default Page Template',
+    'default_template' => 'Förvald sidmall',
     'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
     'default_template_select' => 'Select a template page',
 
@@ -53,7 +53,7 @@ return [
     'permissions_role_everyone_else' => 'Alla andra',
     'permissions_role_everyone_else_desc' => 'Ställ in rättigheter för alla roller som inte uttryckligen har åsidosatts.',
     'permissions_role_override' => 'Åsidosätt rättigheter för roll',
-    'permissions_inherit_defaults' => 'Inherit defaults',
+    'permissions_inherit_defaults' => 'Ärv standardrättigheter',
 
     // Search
     'search_results' => 'Sökresultat',
@@ -155,16 +155,16 @@ return [
     'books_sort_show_other' => 'Visa andra böcker',
     'books_sort_save' => 'Spara ordning',
     'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.',
-    'books_sort_move_up' => 'Move Up',
-    'books_sort_move_down' => 'Move Down',
-    'books_sort_move_prev_book' => 'Move to Previous Book',
-    'books_sort_move_next_book' => 'Move to Next Book',
-    'books_sort_move_prev_chapter' => 'Move Into Previous Chapter',
-    'books_sort_move_next_chapter' => 'Move Into Next Chapter',
-    'books_sort_move_book_start' => 'Move to Start of Book',
-    'books_sort_move_book_end' => 'Move to End of Book',
-    'books_sort_move_before_chapter' => 'Move to Before Chapter',
-    'books_sort_move_after_chapter' => 'Move to After Chapter',
+    'books_sort_move_up' => 'Flytta upp',
+    'books_sort_move_down' => 'Flytta ned',
+    'books_sort_move_prev_book' => 'Gå till förgående bok',
+    'books_sort_move_next_book' => 'Gå till nästa bok',
+    'books_sort_move_prev_chapter' => 'Gå till förgående kapitel',
+    'books_sort_move_next_chapter' => 'Gå till nästa kapitel',
+    'books_sort_move_book_start' => 'Gå till början av boken',
+    'books_sort_move_book_end' => 'Gå till slutet av boken',
+    'books_sort_move_before_chapter' => 'Gå till innan kapitlet',
+    'books_sort_move_after_chapter' => 'Gå till efter kapitlet',
     'books_copy' => 'Kopiera bok',
     'books_copy_success' => 'Boken har kopierats',
 
@@ -373,7 +373,7 @@ return [
     'comment_new' => 'Ny kommentar',
     'comment_created' => 'kommenterade :createDiff',
     'comment_updated' => 'Uppdaterade :updateDiff av :username',
-    'comment_updated_indicator' => 'Updated',
+    'comment_updated_indicator' => 'Uppdaterad',
     'comment_deleted_success' => 'Kommentar borttagen',
     'comment_created_success' => 'Kommentaren har sparats',
     'comment_updated_success' => 'Kommentaren har uppdaterats',
@@ -412,12 +412,12 @@ return [
     'references_to_desc' => 'Listed below is all the known content in the system that links to this item.',
 
     // Watch Options
-    'watch' => 'Watch',
+    'watch' => 'Följ',
     'watch_title_default' => 'Default Preferences',
     'watch_desc_default' => 'Revert watching to just your default notification preferences.',
     'watch_title_ignore' => 'Ignorera',
     'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.',
-    'watch_title_new' => 'New Pages',
+    'watch_title_new' => 'Nya sidor',
     'watch_desc_new' => 'Notify when any new page is created within this item.',
     'watch_title_updates' => 'All Page Updates',
     'watch_desc_updates' => 'Notify upon all new pages and page changes.',
index e06c0fbaa7963ccf77758debc4044893b8dbd70c..945099151f2130df7b0d0321329ea2c1da182c18 100644 (file)
@@ -14,7 +14,7 @@ return [
     'shortcuts_toggle_label' => 'Keyboard shortcuts enabled',
     'shortcuts_section_navigation' => 'Navigation',
     'shortcuts_section_actions' => 'Common Actions',
-    'shortcuts_save' => 'Save Shortcuts',
+    'shortcuts_save' => 'Spara genvägar',
     'shortcuts_overlay_desc' => 'Note: When shortcuts are enabled a helper overlay is available via pressing "?" which will highlight the available shortcuts for actions currently visible on the screen.',
     'shortcuts_update_success' => 'Shortcut preferences have been updated!',
     'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.',
@@ -32,11 +32,11 @@ return [
     'auth' => 'Access & Security',
     'auth_change_password' => 'Change Password',
     'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.',
-    'auth_change_password_success' => 'Password has been updated!',
+    'auth_change_password_success' => 'Lösenordet har uppdaterats!',
 
-    'profile' => 'Profile Details',
+    'profile' => 'Profildetaljer',
     'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.',
-    'profile_view_public' => 'View Public Profile',
+    'profile_view_public' => 'Visa publik profil',
     'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.',
     'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.',
     'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.',
@@ -44,8 +44,8 @@ return [
     'profile_admin_options' => 'Administrator Options',
     'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.',
 
-    'delete_account' => 'Delete Account',
-    'delete_my_account' => 'Delete My Account',
+    'delete_account' => 'Radera konto',
+    'delete_my_account' => 'Radera mitt konto',
     'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.',
     'delete_my_account_warning' => 'Are you sure you want to delete your account?',
 ];
index 5b5738f79d0e045062b8f1895c1e68dec4601a07..ef1ee584eb88700173db0e3c761de3f3fb540c12 100644 (file)
@@ -33,8 +33,8 @@ return [
     'app_custom_html_disabled_notice' => 'Anpassat innehåll i HTML-huvudet är inaktiverat på denna inställningssida för att säkerställa att eventuella ändringar som påverkar funktionaliteten kan återställas.',
     'app_logo' => 'Applikationslogotyp',
     'app_logo_desc' => 'Detta används bland annat i applikationshuvudet. Bilden bör vara 86 pixlar i höjd. Stora bilder skalas ned.',
-    'app_icon' => 'Application Icon',
-    'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.',
+    'app_icon' => 'Applikationsikon',
+    'app_icon_desc' => 'Den här ikonen syns i webbläsarens flikar, bokmärken och genvägar. Den skall vara 256x256 pixlar i PNG format.',
     'app_homepage' => 'Startsida',
     'app_homepage_desc' => 'Välj en vy att använda som startsida istället för standardvyn. Behörigheter för valda sidor kommer att ignoreras.',
     'app_homepage_select' => 'Välj en sida',
@@ -279,11 +279,11 @@ return [
     // Licensing
     'licenses' => 'Licenser',
     'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
-    'licenses_bookstack' => 'BookStack License',
-    'licenses_php' => 'PHP Library Licenses',
-    'licenses_js' => 'JavaScript Library Licenses',
+    'licenses_bookstack' => 'BookStack licens',
+    'licenses_php' => 'Licenser för PHP-bibliotek',
+    'licenses_js' => 'Licenser för JavaScript-bibliotek',
     'licenses_other' => 'Andra licenser',
-    'license_details' => 'License Details',
+    'license_details' => 'Licensinformation',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 50f4f60a955d13ae5b07e876a40dba588643d828..c9663f21e00baeaebb032aedad2aec30a7166925 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobil Uygulama',
     'mfa_option_totp_desc' => 'Çok aşamalı kimlik doğrulamayı kullanabilmek için Google Authenticator, Authy veya Microsoft Authenticator gibi TOTP destekleyen bir mobil uygulamaya ihtiyacınız olacaktır.',
     'mfa_option_backup_codes_title' => 'Yedekleme Kodları',
-    'mfa_option_backup_codes_desc' => 'Kimliğini doğrulamak için kullanabileceğin aşağıdaki tek kullanımlık yedek kodlarını güvenli bir yerde sakla.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Onayla ve aktive et',
     'mfa_gen_backup_codes_title' => 'Yedekleme Kodları Kurulumu',
     'mfa_gen_backup_codes_desc' => 'Aşağıdaki kod listesini güvenli bir yerde sakla. Sisteme giriş yaparken kodlardan birini ikinci bir kimlik doğrulama mekanizması olarak kullanabileceksin.',
index 649c6e8df7d979c7a7c7de74f745059a8f7d8d26..412f9c03fedbbb1b0b07cead72076c4b3d98090d 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Мобільний додаток',
     'mfa_option_totp_desc' => 'Для використання багатофакторної автентифікації вам потрібен мобільний додаток, який підтримує TOTP такі як Google Authenticator, Authy або Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Резервні коди',
-    'mfa_option_backup_codes_desc' => 'Безпечно зберігайте набір резервних кодів з використанням одноразового використання, які можна увійти, щоб підтвердити свою особу.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Підтвердити та увімкнути',
     'mfa_gen_backup_codes_title' => 'Налаштування резервних кодів',
     'mfa_gen_backup_codes_desc' => 'Зберігайте список кодів в безпечному місці. Для доступу до системи ви зможете використовувати один з кодів як другий механізм аутентифікації.',
index 18236a8fba619e87d188a469cd6dea36e0f8ecfd..1a22f0f1d3313d83be47e16ba99f88a4af680914 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Mobil ilova',
     'mfa_option_totp_desc' => 'Ko‘p faktorli autentifikatsiyadan foydalanish uchun sizga Google Authenticator, Authy yoki Microsoft Authenticator kabi OTPni qo‘llab-quvvatlaydigan mobil ilova kerak bo‘ladi.',
     'mfa_option_backup_codes_title' => 'Zaxira kodlari',
-    'mfa_option_backup_codes_desc' => 'Shaxsingizni tasdiqlash uchun kiritishingiz mumkin bo‘lgan bir martalik zaxira kodlari to‘plamini xavfsiz saqlang.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Tasdiqlash va yoqish',
     'mfa_gen_backup_codes_title' => 'Zaxira kodlarini sozlash',
     'mfa_gen_backup_codes_desc' => 'Quyidagi kodlar ro‘yxatini xavfsiz joyda saqlang. Tizimga kirishda siz kodlardan birini ikkinchi autentifikatsiya mexanizmi sifatida ishlatishingiz mumkin.',
index 78624f22266f1162e4e3cfa2062f893a91e581ed..a13b8993e6d61ddfbb9588c874e17a8a998889b3 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => 'Ứng dụng di động',
     'mfa_option_totp_desc' => 'Để sử dụng xác thực đa lớp bạn cần ưng dụng trên điện thoại có hỗ trợ TOTP như Google Authenticator, Authy hoặc Microsoft Authenticator.',
     'mfa_option_backup_codes_title' => 'Mã dự phòng',
-    'mfa_option_backup_codes_desc' => 'Bảo mật việc lưu trữ mã dự phòng dùng một lần mà bạn có thể sử dụng để xác định danh tính của mình.',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => 'Xác nhận và Mở',
     'mfa_gen_backup_codes_title' => 'Cài đặt Mã dự phòng',
     'mfa_gen_backup_codes_desc' => 'Lưu trữ các mã dưới đây ở một nơi an toàn. Khi truy cập vào hệ thống bạn sẽ có thể sử dụng được một trong các đoạn mã đó như là một phương thức xác thực dự phòng.',
index d6dcd6219331660dbe854db3bce0758682251a81..811d2aecc20281ccdef3dbdd1817c92f1cb8aae6 100644 (file)
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => '移动设备 App',
     'mfa_option_totp_desc' => '要使用多重身份认证功能,您需要一个支持 TOTP(基于时间的一次性密码算法) 的移动设备 App,如谷歌身份验证器(Google Authenticator)、Authy 或微软身份验证器(Microsoft Authenticator)。',
     'mfa_option_backup_codes_title' => '备用认证码',
-    'mfa_option_backup_codes_desc' => '请安全地保存这些一次性使用的备用认证码,您可以输入这些认证码来验证您的身份。',
+    'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
     'mfa_gen_confirm_and_enable' => '确认并启用',
     'mfa_gen_backup_codes_title' => '备用认证码设置',
     'mfa_gen_backup_codes_desc' => '将下面的认证码存放在一个安全的地方。访问系统时,您可以使用其中的一个验证码进行二次认证。',
index 0a0318381f0217a195fb1fa41391b1bf8cf1dba0..b0f90611fa4283a1fbecd971de1816bad40dc122 100644 (file)
@@ -37,7 +37,7 @@ return [
     'social_driver_not_found' => '未找到社交驱动程序',
     'social_driver_not_configured' => '您的:socialAccount社交设置不正确。',
     'invite_token_expired' => '此邀请链接已过期。 您可以尝试重置您的账户密码。',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => '找不到执行此操作的用户。',
 
     // System
     'path_not_writable' => '无法上传到文件路径“:filePath”,请确保它可写入服务器。',
index 7a3d8031d47ffa73aa93453e07363fb52a35ab81..1168b48b2700d955f03749f26fd0e620f453b0ff 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'failed' => '使用者名稱或密碼錯誤。',
-    'throttle' => '您的登入次數過多,請在:seconds秒後重試。',
+    'throttle' => '您的登入次數過多,請在 :seconds 秒後重試。',
 
     // Login & Register
     'sign_up' => '註冊',
@@ -91,7 +91,7 @@ return [
     'mfa_option_totp_title' => '手機App',
     'mfa_option_totp_desc' => '您必須在行動裝置上安裝了支援TOTP的身份驗證程式(例如Google Authenticator, Authy 或是 Microsoft Authenticator)才能使用雙重身份驗證。',
     'mfa_option_backup_codes_title' => '備用驗證碼',
-    'mfa_option_backup_codes_desc' => '妥善保存好您的一次性備用驗證碼,以便日後驗證您的身份。',
+    'mfa_option_backup_codes_desc' => '產生一次使用的備份代碼,你可以在登入時用來辨識身份。請確認代碼被存放在安全的地方。',
     'mfa_gen_confirm_and_enable' => '確認並啟用',
     'mfa_gen_backup_codes_title' => '備援代碼設定',
     'mfa_gen_backup_codes_desc' => '將以下代碼列表儲存在安全的地方。存取系統時,您可以使用其中一個代碼作為第二個身份驗證機制。',
index 682a8ed4d8c11a1a65b1587ac75d31024b4b07aa..d66dd383e8d4670c19de81d58b2d466b2cac386a 100644 (file)
@@ -10,16 +10,16 @@ return [
     'image_details' => '圖片詳細資訊',
     'image_upload' => '上傳圖片',
     'image_intro' => '您可以在這裡選取和管理上傳到系統的圖片。',
-    'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.',
+    'image_intro_upload' => '透過拖曳圖檔至視窗中,或是使用下方的「上傳圖片」按鍵',
     'image_all' => '全部',
     'image_all_title' => '檢視所有圖片',
     'image_book_title' => '檢視上傳到此書本的圖片',
     'image_page_title' => '檢視上傳到此頁面的圖片',
     'image_search_hint' => '以圖片名稱搜尋',
     'image_uploaded' => '上傳於 :uploadedDate',
-    'image_uploaded_by' => 'Uploaded by :userName',
-    'image_uploaded_to' => 'Uploaded to :pageLink',
-    'image_updated' => 'Updated :updateDate',
+    'image_uploaded_by' => '由 :username 上傳',
+    'image_uploaded_to' => '上傳到 :pageLink',
+    'image_updated' => ':updateDate 更新',
     'image_load_more' => '載入更多',
     'image_image_name' => '圖片名稱',
     'image_delete_used' => '此圖片用於以下頁面。',
@@ -34,8 +34,8 @@ return [
     'image_delete_success' => '圖片刪除成功',
     'image_replace' => '替換圖片',
     'image_replace_success' => '圖片更新成功',
-    'image_rebuild_thumbs' => 'Regenerate Size Variations',
-    'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!',
+    'image_rebuild_thumbs' => '重建影像縮圖',
+    'image_rebuild_thumbs_success' => '縮圖建立成功',
 
     // Code Editor
     'code_editor' => '編輯程式碼',
index cd023cd61c924464de561271f03b3746cad19099..2ee37f863dea710a3a23d26e2279893988155abd 100644 (file)
@@ -81,9 +81,9 @@ return [
     'table_properties' => '表格屬性',
     'table_properties_title' => '表格屬性',
     'delete_table' => '刪除表格',
-    'table_clear_formatting' => 'Clear table formatting',
-    'resize_to_contents' => 'Resize to contents',
-    'row_header' => 'Row header',
+    'table_clear_formatting' => '清除格式',
+    'resize_to_contents' => '將大小調整到符合內容',
+    'row_header' => '列標題',
     'insert_row_before' => '插入上方列',
     'insert_row_after' => '插入下方列',
     'delete_row' => '刪除列',
@@ -93,85 +93,85 @@ return [
     'table_cell' => '儲存格',
     'table_row' => '行',
     'table_column' => '欄',
-    'cell_properties' => 'Cell properties',
-    'cell_properties_title' => 'Cell Properties',
-    'cell_type' => 'Cell type',
-    'cell_type_cell' => 'Cell',
-    'cell_scope' => 'Scope',
-    'cell_type_header' => 'Header cell',
-    'merge_cells' => 'Merge cells',
-    'split_cell' => 'Split cell',
-    'table_row_group' => 'Row Group',
-    'table_column_group' => 'Column Group',
-    'horizontal_align' => 'Horizontal align',
-    'vertical_align' => 'Vertical align',
-    'border_width' => 'Border width',
-    'border_style' => 'Border style',
-    'border_color' => 'Border color',
-    'row_properties' => 'Row properties',
-    'row_properties_title' => 'Row Properties',
-    'cut_row' => 'Cut row',
-    'copy_row' => 'Copy row',
-    'paste_row_before' => 'Paste row before',
-    'paste_row_after' => 'Paste row after',
-    'row_type' => 'Row type',
+    'cell_properties' => '表格屬性',
+    'cell_properties_title' => '表格屬性',
+    'cell_type' => '儲存格類型',
+    'cell_type_cell' => '儲存格',
+    'cell_scope' => '範圍',
+    'cell_type_header' => '標題儲存格',
+    'merge_cells' => '合併儲存格',
+    'split_cell' => '分割儲存格',
+    'table_row_group' => '依行分組',
+    'table_column_group' => '依列分組',
+    'horizontal_align' => '水平對齊',
+    'vertical_align' => '垂直對齊',
+    'border_width' => '邊框寬度',
+    'border_style' => '邊框樣式',
+    'border_color' => '邊框顏色',
+    'row_properties' => '行屬性',
+    'row_properties_title' => '行屬性',
+    'cut_row' => '剪切行',
+    'copy_row' => '複製行',
+    'paste_row_before' => '插入上方行',
+    'paste_row_after' => '插入下方行',
+    'row_type' => '行類型',
     'row_type_header' => '頁眉',
     'row_type_body' => '正文',
     'row_type_footer' => '页脚',
-    'alignment' => 'Alignment',
-    'cut_column' => 'Cut column',
-    'copy_column' => 'Copy column',
-    'paste_column_before' => 'Paste column before',
-    'paste_column_after' => 'Paste column after',
-    'cell_padding' => 'Cell padding',
-    'cell_spacing' => 'Cell spacing',
-    'caption' => 'Caption',
-    'show_caption' => 'Show caption',
-    'constrain' => 'Constrain proportions',
-    'cell_border_solid' => 'Solid',
-    'cell_border_dotted' => 'Dotted',
-    'cell_border_dashed' => 'Dashed',
-    'cell_border_double' => 'Double',
-    'cell_border_groove' => 'Groove',
-    'cell_border_ridge' => 'Ridge',
-    'cell_border_inset' => 'Inset',
-    'cell_border_outset' => 'Outset',
-    'cell_border_none' => 'None',
-    'cell_border_hidden' => 'Hidden',
+    'alignment' => '對齊',
+    'cut_column' => '剪切列',
+    'copy_column' => '剪切列',
+    'paste_column_before' => '插入前方列',
+    'paste_column_after' => '插入後方列',
+    'cell_padding' => '單元格填充',
+    'cell_spacing' => '單元格間距',
+    'caption' => '標題',
+    'show_caption' => '顯示標題',
+    'constrain' => '維持比例',
+    'cell_border_solid' => '實線',
+    'cell_border_dotted' => '點線',
+    'cell_border_dashed' => '虛線',
+    'cell_border_double' => '兩倍',
+    'cell_border_groove' => '凹線',
+    'cell_border_ridge' => '浮出',
+    'cell_border_inset' => '嵌入',
+    'cell_border_outset' => '外嵌',
+    'cell_border_none' => '',
+    'cell_border_hidden' => '隱藏',
 
     // Images, links, details/summary & embed
     'source' => '來源',
-    'alt_desc' => 'Alternative description',
-    'embed' => 'Embed',
-    'paste_embed' => 'Paste your embed code below:',
+    'alt_desc' => '替代描述',
+    'embed' => '內嵌',
+    'paste_embed' => '在下面黏貼您的嵌入代碼:',
     'url' => '網址',
-    'text_to_display' => 'Text to display',
-    'title' => 'Title',
-    'open_link' => 'Open link',
-    'open_link_in' => 'Open link in...',
-    'open_link_current' => 'Current window',
-    'open_link_new' => 'New window',
-    'remove_link' => 'Remove link',
-    'insert_collapsible' => 'Insert collapsible block',
-    'collapsible_unwrap' => 'Unwrap',
+    'text_to_display' => '要顯示的文字',
+    'title' => '標題',
+    'open_link' => '開啟連結',
+    'open_link_in' => '打開連結於……',
+    'open_link_current' => '當前視窗',
+    'open_link_new' => '新視窗',
+    'remove_link' => '移除連結',
+    'insert_collapsible' => '插入可折疊塊',
+    'collapsible_unwrap' => '展開',
     'edit_label' => '編輯標記',
-    'toggle_open_closed' => 'Toggle open/closed',
-    'collapsible_edit' => 'Edit collapsible block',
-    'toggle_label' => 'Toggle label',
+    'toggle_open_closed' => '切換打開/關閉',
+    'collapsible_edit' => '編輯可折疊塊',
+    'toggle_label' => '切換標籤',
 
     // About view
-    'about' => 'About the editor',
-    'about_title' => 'About the WYSIWYG Editor',
-    'editor_license' => 'Editor License & Copyright',
-    'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under the MIT license.',
-    'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.',
-    'save_continue' => 'Save Page & Continue',
-    'callouts_cycle' => '(Keep pressing to toggle through types)',
-    'link_selector' => 'Link to content',
-    'shortcuts' => 'Shortcuts',
-    'shortcut' => 'Shortcut',
-    'shortcuts_intro' => 'The following shortcuts are available in the editor:',
+    'about' => '關於編輯器',
+    'about_title' => '關於所見即所得(WYSIWYG)編輯器',
+    'editor_license' => '編輯器許可證與版權信息',
+    'editor_tiny_license' => '此編輯器是用 :tinyLink 構建的,基於 MIT 許可證。',
+    'editor_tiny_license_link' => 'TinyMCE 的版權和許可證詳細信息可以在這裡找到。',
+    'save_continue' => '保存頁面並繼續',
+    'callouts_cycle' => '(繼續按下以切換類型)',
+    'link_selector' => '鏈接到內容',
+    'shortcuts' => '快捷鍵',
+    'shortcut' => '快捷鍵',
+    'shortcuts_intro' => '編輯器中提供了以下快捷鍵:',
     'windows_linux' => '(Windows/Linux)',
     'mac' => '(Mac)',
-    'description' => 'Description',
+    'description' => '說明',
 ];
index 44f6e4754164eaa090bddd51576407db9495a124..8aa9255c511cf9baf13a6261552756b164cfbbe1 100644 (file)
@@ -23,9 +23,9 @@ return [
     'meta_updated' => '更新於 :timeLength',
     'meta_updated_name' => '由 :user 更新於 :timeLength',
     'meta_owned_name' => ':user 所擁有',
-    'meta_reference_count' => 'Referenced by :count item|Referenced by :count items',
+    'meta_reference_count' => '被 :count 個項目引用',
     'entity_select' => '選取項目',
-    'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item',
+    'entity_select_lack_permission' => '你沒有權限使用此項目',
     'images' => '圖片',
     'my_recent_drafts' => '我最近的草稿',
     'my_recently_viewed' => '我最近檢視',
@@ -39,21 +39,21 @@ return [
     'export_pdf' => 'PDF 檔案',
     'export_text' => '純文字檔案',
     'export_md' => 'Markdown 檔案',
-    'default_template' => 'Default Page Template',
-    'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.',
-    'default_template_select' => 'Select a template page',
+    'default_template' => '預設頁面範本',
+    'default_template_explain' => '請設定一個頁面範本,作為新頁面的預設內容。請注意,這僅限於作者擁有頁面範本讀取權限時才能夠使用。',
+    'default_template_select' => '選擇一個頁面範本',
 
     // Permissions and restrictions
     'permissions' => '權限',
-    'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
-    'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
-    'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
+    'permissions_desc' => '設定權限,並覆蓋角色預設權限',
+    'permissions_book_cascade' => '除非章節、頁面有自訂權限,否則書籍設定的權限將自動套用',
+    'permissions_chapter_cascade' => '除非章節、頁面有自訂權限,否則章節的權限將自動套用',
     'permissions_save' => '儲存權限',
     'permissions_owner' => '擁有者',
-    'permissions_role_everyone_else' => 'Everyone Else',
-    'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
-    'permissions_role_override' => 'Override permissions for role',
-    'permissions_inherit_defaults' => 'Inherit defaults',
+    'permissions_role_everyone_else' => '所有其他人',
+    'permissions_role_everyone_else_desc' => '設定未被指派角色時的權限',
+    'permissions_role_override' => '覆蓋角色權限',
+    'permissions_inherit_defaults' => '繼承預設值',
 
     // Search
     'search_results' => '搜尋結果',
@@ -96,24 +96,24 @@ return [
     'shelves_save' => '儲存書架',
     'shelves_books' => '此書架上的書本',
     'shelves_add_books' => '新增書本至此書架',
-    'shelves_drag_books' => 'Drag books below to add them to this shelf',
+    'shelves_drag_books' => '拖曳書籍至下方,以便新增至此書架',
     'shelves_empty_contents' => '此書架沒有分配任何書本',
     'shelves_edit_and_assign' => '編輯書架以分配書本',
-    'shelves_edit_named' => 'Edit Shelf :name',
-    'shelves_edit' => 'Edit Shelf',
-    'shelves_delete' => 'Delete Shelf',
-    'shelves_delete_named' => 'Delete Shelf :name',
+    'shelves_edit_named' => '編輯書架',
+    'shelves_edit' => '編輯書架',
+    'shelves_delete' => '刪除書架',
+    'shelves_delete_named' => '刪除書架「:name」',
     'shelves_delete_explain' => "這將刪除名為「:name」的書架。但其中的書本不會被刪除。",
     'shelves_delete_confirmation' => '您確定要刪除此書架嗎?',
-    'shelves_permissions' => 'Shelf Permissions',
-    'shelves_permissions_updated' => 'Shelf Permissions Updated',
-    'shelves_permissions_active' => 'Shelf Permissions Active',
-    'shelves_permissions_cascade_warning' => 'Permissions on shelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.',
-    'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.',
+    'shelves_permissions' => '書架權限',
+    'shelves_permissions_updated' => '已更新書架權限',
+    'shelves_permissions_active' => '已啟用書架權限',
+    'shelves_permissions_cascade_warning' => '因書籍可位於多個書架,因此書架權限不會自動套用至書籍上。但仍可透過下方的選項來複製權限到子書籍。',
+    'shelves_permissions_create' => '書架創建權限僅用於使用下面的操作將權限複製到子圖書。這個權限不是用來控制創建書籍的。',
     'shelves_copy_permissions_to_books' => '將權限複製到書本',
     'shelves_copy_permissions' => '複製權限',
-    'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this shelf to all books contained within. Before activating, ensure any changes to the permissions of this shelf have been saved.',
-    'shelves_copy_permission_success' => 'Shelf permissions copied to :count books',
+    'shelves_copy_permissions_explain' => '此操作會將此書架的當前權限設置應用於其中包含的所有圖書上。 啓用前請確保已保存對此書架權限的任何更改。',
+    'shelves_copy_permission_success' => '書架權限已複製到 :count 本書籍',
 
     // Books
     'book' => '書本',
@@ -145,7 +145,7 @@ return [
     'books_search_this' => '搜尋此書本',
     'books_navigation' => '書本導覽',
     'books_sort' => '排序書本內容',
-    'books_sort_desc' => 'Move chapters and pages within a book to reorganise its contents. Other books can be added which allows easy moving of chapters and pages between books.',
+    'books_sort_desc' => '移動章節、頁面來重新組織內容。也可以透過顯示多本書籍來調整書籍之間的內容',
     'books_sort_named' => '排序書本 :bookName',
     'books_sort_name' => '按名稱排序',
     'books_sort_created' => '按建立時間排序',
@@ -154,19 +154,19 @@ return [
     'books_sort_chapters_last' => '最後一章',
     'books_sort_show_other' => '顯示其他書本',
     'books_sort_save' => '儲存新順序',
-    'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.',
-    'books_sort_move_up' => 'Move Up',
-    'books_sort_move_down' => 'Move Down',
-    'books_sort_move_prev_book' => 'Move to Previous Book',
-    'books_sort_move_next_book' => 'Move to Next Book',
-    'books_sort_move_prev_chapter' => 'Move Into Previous Chapter',
-    'books_sort_move_next_chapter' => 'Move Into Next Chapter',
-    'books_sort_move_book_start' => 'Move to Start of Book',
-    'books_sort_move_book_end' => 'Move to End of Book',
-    'books_sort_move_before_chapter' => 'Move to Before Chapter',
-    'books_sort_move_after_chapter' => 'Move to After Chapter',
-    'books_copy' => 'Copy Book',
-    'books_copy_success' => 'Book successfully copied',
+    'books_sort_show_other_desc' => '新增書籍到排序清單中,以便跨書籍重組資料',
+    'books_sort_move_up' => '上移',
+    'books_sort_move_down' => '下移',
+    'books_sort_move_prev_book' => '移動至前一書籍',
+    'books_sort_move_next_book' => '移動至前一書籍',
+    'books_sort_move_prev_chapter' => '移動至前一章節',
+    'books_sort_move_next_chapter' => '移動至下一章節',
+    'books_sort_move_book_start' => '移動到書籍開頭',
+    'books_sort_move_book_end' => '移動到書籍結尾',
+    'books_sort_move_before_chapter' => '移動到章節之前',
+    'books_sort_move_after_chapter' => '移動到章節之後',
+    'books_copy' => '複製書籍',
+    'books_copy_success' => '書籍已成功被複製',
 
     // Chapters
     'chapter' => '章節',
@@ -184,14 +184,14 @@ return [
     'chapters_save' => '儲存章節',
     'chapters_move' => '移動章節',
     'chapters_move_named' => '移動章節 :chapterName',
-    'chapters_copy' => 'Copy Chapter',
-    'chapters_copy_success' => 'Chapter successfully copied',
+    'chapters_copy' => '複製章節',
+    'chapters_copy_success' => '章節已成功被複製',
     'chapters_permissions' => '章節權限',
     'chapters_empty' => '本章目前沒有頁面。',
     'chapters_permissions_active' => '章節權限已啟用',
     'chapters_permissions_success' => '章節權限已更新',
     'chapters_search_this' => '搜尋此章節',
-    'chapter_sort_book' => 'Sort Book',
+    'chapter_sort_book' => '排序書籍內容',
 
     // Pages
     'page' => '頁面',
@@ -207,7 +207,7 @@ return [
     'pages_delete_draft' => '刪除草稿頁面',
     'pages_delete_success' => '頁面已刪除',
     'pages_delete_draft_success' => '草稿頁面已刪除',
-    'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.',
+    'pages_delete_warning_template' => '此頁面是當前書籍或章節的默認頁面模板。刪除此頁面後,這些書籍或章節的默認頁面模板將被取消。',
     'pages_delete_confirm' => '您確定要刪除此頁面嗎?',
     'pages_delete_draft_confirm' => '您確定要刪除此草稿頁面嗎?',
     'pages_editing_named' => '正在編輯頁面 :pageName',
@@ -218,21 +218,21 @@ return [
     'pages_editing_page' => '正在編輯頁面',
     'pages_edit_draft_save_at' => '草稿儲存於 ',
     'pages_edit_delete_draft' => '刪除草稿',
-    'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.',
+    'pages_edit_delete_draft_confirm' => '您確定要刪除您的草稿頁面更改嗎?自上次完整保存以來的所有更改都將丟失,編輯器將更新為最新非草稿頁面。',
     'pages_edit_discard_draft' => '放棄草稿',
-    'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
-    'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
-    'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
-    'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
+    'pages_edit_switch_to_markdown' => '切換到 Markdown 編輯器',
+    'pages_edit_switch_to_markdown_clean' => '(清除內容)',
+    'pages_edit_switch_to_markdown_stable' => '(保留內容)',
+    'pages_edit_switch_to_wysiwyg' => '切換到所見即所得編輯器',
     'pages_edit_set_changelog' => '設定變更日誌',
     'pages_edit_enter_changelog_desc' => '輸入對您所做變動的簡易描述',
     'pages_edit_enter_changelog' => '輸入變更日誌',
     'pages_editor_switch_title' => '切換編輯器',
-    'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
-    'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
-    'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
-    'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
-    'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
+    'pages_editor_switch_are_you_sure' => '你想要更改這頁所使用的編輯器嗎?',
+    'pages_editor_switch_consider_following' => '更換編輯器時請考慮以下事項:',
+    'pages_editor_switch_consideration_a' => '一旦選擇使用新的編輯器,其他頁面以及沒有權限更換編輯器的使用者都將使用新的編輯器',
+    'pages_editor_switch_consideration_b' => '在某些情況下,將遺失細部設定以及語法',
+    'pages_editor_switch_consideration_c' => '切換編輯器時,本次的標籤設定、版本修訂記錄將不會被保留',
     'pages_save' => '儲存頁面',
     'pages_title' => '頁面標題',
     'pages_name' => '頁面名稱',
@@ -242,9 +242,9 @@ return [
     'pages_md_insert_link' => '插入連結',
     'pages_md_insert_drawing' => '插入繪圖',
     'pages_md_show_preview' => '顯示預覽',
-    'pages_md_sync_scroll' => 'Sync preview scroll',
-    'pages_drawing_unsaved' => 'Unsaved Drawing Found',
-    'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?',
+    'pages_md_sync_scroll' => '預覽頁面同步捲動',
+    'pages_drawing_unsaved' => '偵測到未儲存的繪圖',
+    'pages_drawing_unsaved_confirm' => '從之前保存失敗的繪圖中發現了可恢復的數據。您想恢復並繼續編輯這個未保存的繪圖嗎?',
     'pages_not_in_chapter' => '頁面不在章節中',
     'pages_move' => '移動頁面',
     'pages_copy' => '複製頁面',
@@ -254,17 +254,17 @@ return [
     'pages_permissions_success' => '頁面權限已更新',
     'pages_revision' => '修訂版本',
     'pages_revisions' => '頁面修訂版本',
-    'pages_revisions_desc' => 'Listed below are all the past revisions of this page. You can look back upon, compare, and restore old page versions if permissions allow. The full history of the page may not be fully reflected here since, depending on system configuration, old revisions could be auto-deleted.',
+    'pages_revisions_desc' => '下面列出的是該頁面的所有過去修訂。如果權限允許,您可以回顧、比較和恢復舊的頁面版本。頁面的完整歷史可能不會在這裡完全反映出來,因為根據系統配置,舊的修訂可能會被自動刪除。',
     'pages_revisions_named' => ':pageName 頁面修訂版本',
     'pages_revision_named' => ':pageName 頁面修訂版本',
     'pages_revision_restored_from' => '從 #:id; :summary 復原',
     'pages_revisions_created_by' => '建立者',
     'pages_revisions_date' => '修訂日期',
     'pages_revisions_number' => '#',
-    'pages_revisions_sort_number' => 'Revision Number',
+    'pages_revisions_sort_number' => '修訂版號',
     'pages_revisions_numbered' => '修訂版本 #:id',
     'pages_revisions_numbered_changes' => '修訂版本 #:id 變更',
-    'pages_revisions_editor' => 'Editor Type',
+    'pages_revisions_editor' => '編輯器類型',
     'pages_revisions_changelog' => '變動日誌',
     'pages_revisions_changes' => '變動',
     'pages_revisions_current' => '目前版本',
@@ -272,20 +272,20 @@ return [
     'pages_revisions_restore' => '還原',
     'pages_revisions_none' => '此頁面沒有修訂',
     'pages_copy_link' => '複製連結',
-    'pages_edit_content_link' => 'Jump to section in editor',
-    'pages_pointer_enter_mode' => 'Enter section select mode',
-    'pages_pointer_label' => 'Page Section Options',
-    'pages_pointer_permalink' => 'Page Section Permalink',
-    'pages_pointer_include_tag' => 'Page Section Include Tag',
-    'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag',
-    'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink',
+    'pages_edit_content_link' => '移動到編輯器區段',
+    'pages_pointer_enter_mode' => '進入區段選取模式',
+    'pages_pointer_label' => '頁面區段選項',
+    'pages_pointer_permalink' => '頁面區段永久連結',
+    'pages_pointer_include_tag' => '包含標籤的頁面區段',
+    'pages_pointer_toggle_link' => '永久連結模式,點擊顯示包含的標籤',
+    'pages_pointer_toggle_include' => '包含標籤模式,按下顯示永久鏈接',
     'pages_permissions_active' => '頁面權限已啟用',
     'pages_initial_revision' => '初次發布',
-    'pages_references_update_revision' => 'System auto-update of internal links',
+    'pages_references_update_revision' => '系統自動更新的內部鏈接',
     'pages_initial_name' => '新頁面',
     'pages_editing_draft_notification' => '您正在編輯最後儲存為 :timeDiff 的草稿。',
     'pages_draft_edited_notification' => '此頁面已經被更新過。建議您放棄此草稿。',
-    'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.',
+    'pages_draft_page_changed_since_creation' => '這個頁面在您的草稿創建後被其他用戶更新了,您目前的草稿不包含新的內容。建議您放棄此草稿,或是注意不要覆蓋新的頁面更改。',
     'pages_draft_edit_active' => [
         'start_a' => ':count 位使用者已經開始編輯此頁面',
         'start_b' => '使用者 :userName 已經開始編輯此頁面',
@@ -293,35 +293,35 @@ return [
         'time_b' => '在最近:minCount分鐘',
         'message' => ':start :time。注意不要覆寫其他人的更新!',
     ],
-    'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content',
-    'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content',
+    'pages_draft_discarded' => '草稿已丟棄!編輯器已更新到當前頁面內容',
+    'pages_draft_deleted' => '草稿已刪除!編輯器已更新為當前頁面內容',
     'pages_specific' => '特定頁面',
     'pages_is_template' => '頁面模板',
 
     // Editor Sidebar
-    'toggle_sidebar' => 'Toggle Sidebar',
+    'toggle_sidebar' => '切換側邊欄',
     'page_tags' => '頁面標籤',
     'chapter_tags' => '章節標籤',
     'book_tags' => '書本標籤',
     'shelf_tags' => '書架標籤',
     'tag' => '標籤',
     'tags' =>  '標籤',
-    'tags_index_desc' => 'Tags can be applied to content within the system to apply a flexible form of categorization. Tags can have both a key and value, with the value being optional. Once applied, content can then be queried using the tag name and value.',
+    'tags_index_desc' => '為內容加上標籤可靈活得進行分類。標籤可以設定名稱與數值,其中數值為選用。一旦標籤設定完成,便可透過標籤名稱與數值來進行搜尋。',
     'tag_name' =>  '標籤名稱',
     'tag_value' => '標籤值(選擇性)',
     'tags_explain' => "加入一些標籤以更好地對您的內容進行分類。 \n 您可以為標籤分配一個值,以進行更深入的組織。",
     'tags_add' => '新增另一個標籤',
     'tags_remove' => '移除此標籤',
-    'tags_usages' => 'Total tag usages',
-    'tags_assigned_pages' => 'Assigned to Pages',
-    'tags_assigned_chapters' => 'Assigned to Chapters',
-    'tags_assigned_books' => 'Assigned to Books',
-    'tags_assigned_shelves' => 'Assigned to Shelves',
-    'tags_x_unique_values' => ':count unique values',
-    'tags_all_values' => 'All values',
+    'tags_usages' => '總用量',
+    'tags_assigned_pages' => '頁面',
+    'tags_assigned_chapters' => '章節',
+    'tags_assigned_books' => '書籍',
+    'tags_assigned_shelves' => '書架',
+    'tags_x_unique_values' => ':count 個不同的數值',
+    'tags_all_values' => '所有數值',
     'tags_view_tags' => '檢視標籤',
     'tags_view_existing_tags' => '檢視已存在的標籤',
-    'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.',
+    'tags_list_empty_hint' => '可在編輯書架、書籍時設定標籤,或是在編輯章節、頁面時透過側邊欄設定',
     'attachments' => '附件',
     'attachments_explain' => '上傳一些檔案或附加連結以顯示在您的網頁上。將顯示在在頁面的側邊欄。',
     'attachments_explain_instant_save' => '此處的變動將會立刻儲存。',
@@ -330,7 +330,7 @@ return [
     'attachments_upload_drop' => '你也可以將檔案拖曳到此來上傳附加檔案',
     'attachments_set_link' => '設定連結',
     'attachments_delete' => '您確定要刪除此附件嗎?',
-    'attachments_dropzone' => 'Drop files here to upload',
+    'attachments_dropzone' => '將檔案拖曳至此來上傳',
     'attachments_no_files' => '尚未上傳檔案',
     'attachments_explain_link' => '如果您不想上傳檔案,則可以附加連結。這可以是指向其他頁面的連結,也可以是指向雲端檔案的連結。',
     'attachments_link_name' => '連結名稱',
@@ -373,7 +373,7 @@ return [
     'comment_new' => '新評論',
     'comment_created' => '評論於 :createDiff',
     'comment_updated' => '由 :username 於 :updateDiff 更新',
-    'comment_updated_indicator' => 'Updated',
+    'comment_updated_indicator' => '已更新',
     'comment_deleted_success' => '評論已刪除',
     'comment_created_success' => '評論已加入',
     'comment_updated_success' => '評論已更新',
@@ -387,51 +387,51 @@ return [
     'revision_cannot_delete_latest' => '無法刪除最新修訂版本。',
 
     // Copy view
-    'copy_consider' => 'Please consider the below when copying content.',
-    'copy_consider_permissions' => 'Custom permission settings will not be copied.',
-    'copy_consider_owner' => 'You will become the owner of all copied content.',
-    'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.',
-    'copy_consider_attachments' => 'Page attachments will not be copied.',
-    'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.',
+    'copy_consider' => '複製內容時請注意以下事項',
+    'copy_consider_permissions' => '自定義權限設置將不會被複製。',
+    'copy_consider_owner' => '您將成為所有已複製內容的所有者。',
+    'copy_consider_images' => '頁面中的圖像文件不會被複製,原始圖像將保留它們與最初上傳到的頁面的關係。',
+    'copy_consider_attachments' => '頁面中的附件不會被複製。',
+    'copy_consider_access' => '改變位置、所有者或權限可能會導致此內容被以前無法訪問的人訪問。',
 
     // Conversions
-    'convert_to_shelf' => 'Convert to Shelf',
-    'convert_to_shelf_contents_desc' => 'You can convert this book to a new shelf with the same contents. Chapters contained within this book will be converted to new books. If this book contains any pages, that are not in a chapter, this book will be renamed and contain such pages, and this book will become part of the new shelf.',
-    'convert_to_shelf_permissions_desc' => 'Any permissions set on this book will be copied to the new shelf and to all new child books that don\'t have their own permissions enforced. Note that permissions on shelves do not auto-cascade to content within, as they do for books.',
-    'convert_book' => 'Convert Book',
-    'convert_book_confirm' => 'Are you sure you want to convert this book?',
-    'convert_undo_warning' => 'This cannot be as easily undone.',
-    'convert_to_book' => 'Convert to Book',
-    'convert_to_book_desc' => 'You can convert this chapter to a new book with the same contents. Any permissions set on this chapter will be copied to the new book but any inherited permissions, from the parent book, will not be copied which could lead to a change of access control.',
-    'convert_chapter' => 'Convert Chapter',
-    'convert_chapter_confirm' => 'Are you sure you want to convert this chapter?',
+    'convert_to_shelf' => '轉換成書架',
+    'convert_to_shelf_contents_desc' => '你可以將此書籍轉換成包含相同內容的新書架,書籍中的章節則會轉換成書籍。若書籍中有不屬於任何章節的頁面,這些頁面會自動轉換成新書架中的書籍。',
+    'convert_to_shelf_permissions_desc' => '在這本書上設置的任何權限都將複製到所有未強制執行權限的新書架和新子圖書上。請注意,書架上的權限不會像圖書那樣繼承到內容物上。',
+    'convert_book' => '轉換成書本',
+    'convert_book_confirm' => '您確定要轉換此書本嗎?',
+    'convert_undo_warning' => '這可不能輕易撤消。',
+    'convert_to_book' => '轉換成書籍',
+    'convert_to_book_desc' => '您可以將此章節轉換為具有相同內容的新書本。此章節中設置的任何權限都將複製到新書本上,但從父圖書繼承的任何權限都不會被複製,這可能會導致訪問控制發生變化。',
+    'convert_chapter' => '轉換章節',
+    'convert_chapter_confirm' => '您確定要轉換此章節嗎?',
 
     // References
-    'references' => 'References',
-    'references_none' => 'There are no tracked references to this item.',
-    'references_to_desc' => 'Listed below is all the known content in the system that links to this item.',
+    'references' => '引用',
+    'references_none' => '沒有跟蹤到對此項目的引用。',
+    'references_to_desc' => '下方列出了系統中鏈接到此項目的所有已知內容。',
 
     // Watch Options
     'watch' => '追蹤',
     'watch_title_default' => '預設偏好設定',
-    'watch_desc_default' => 'Revert watching to just your default notification preferences.',
-    'watch_title_ignore' => 'Ignore',
-    'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.',
-    'watch_title_new' => 'New Pages',
-    'watch_desc_new' => 'Notify when any new page is created within this item.',
-    'watch_title_updates' => 'All Page Updates',
-    'watch_desc_updates' => 'Notify upon all new pages and page changes.',
-    'watch_desc_updates_page' => 'Notify upon all page changes.',
-    'watch_title_comments' => 'All Page Updates & Comments',
-    'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.',
-    'watch_desc_comments_page' => 'Notify upon page changes and new comments.',
-    'watch_change_default' => 'Change default notification preferences',
-    'watch_detail_ignore' => 'Ignoring notifications',
-    'watch_detail_new' => 'Watching for new pages',
-    'watch_detail_updates' => 'Watching new pages and updates',
-    'watch_detail_comments' => 'Watching new pages, updates & comments',
-    'watch_detail_parent_book' => 'Watching via parent book',
-    'watch_detail_parent_book_ignore' => 'Ignoring via parent book',
-    'watch_detail_parent_chapter' => 'Watching via parent chapter',
-    'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter',
+    'watch_desc_default' => '還原成預設的通知設定',
+    'watch_title_ignore' => '忽略',
+    'watch_desc_ignore' => '忽略所有通知,包括來自用戶級偏好的通知。',
+    'watch_title_new' => '新頁面',
+    'watch_desc_new' => '在此項目中創建任何新頁面時通知我。',
+    'watch_title_updates' => '所有頁面更新',
+    'watch_desc_updates' => '在所有新頁面和頁面更改時通知我。',
+    'watch_desc_updates_page' => '在有頁面發生更改時通知我。',
+    'watch_title_comments' => '所有頁面更新和評論',
+    'watch_desc_comments' => '在有新頁面、頁面更改和新評論時通知我。',
+    'watch_desc_comments_page' => '在有頁面更改和新評論時通知我。',
+    'watch_change_default' => '更改默認通知偏好',
+    'watch_detail_ignore' => '忽略通知',
+    'watch_detail_new' => '追蹤新頁面',
+    'watch_detail_updates' => '追蹤新頁面與異動',
+    'watch_detail_comments' => '追蹤新頁面、自動與評論',
+    'watch_detail_parent_book' => '已關注—繼承自父書本',
+    'watch_detail_parent_book_ignore' => '已忽略—繼承自父書本',
+    'watch_detail_parent_chapter' => '已關注—繼承自父章節',
+    'watch_detail_parent_chapter_ignore' => '已忽略—繼承自父章節',
 ];
index 5b07513531296f4324868178ebe5198afef0d386..6fec01ea0d45a70dd0320945527271ec6469770b 100644 (file)
@@ -10,7 +10,7 @@ return [
 
     // Auth
     'error_user_exists_different_creds' => '電子郵件為 :email 已存在,但帳號密碼不同。',
-    'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
+    'auth_pre_register_theme_prevention' => '無法使用資料建立帳號',
     'email_already_confirmed' => '已確認電子郵件,請嘗試登入。',
     'email_confirmation_invalid' => '這個確認權杖無效或已被使用,請嘗試重新註冊。',
     'email_confirmation_expired' => '這個確認權杖無效或已被使用,已傳送新的確認電子郵件。',
@@ -37,32 +37,32 @@ return [
     'social_driver_not_found' => '找不到社交驅動程式',
     'social_driver_not_configured' => '您的 :socialAccount 社交設定不正確。',
     'invite_token_expired' => '此邀請連結已過期。您可以嘗試重設您的帳號密碼。',
-    'login_user_not_found' => 'A user for this action could not be found.',
+    'login_user_not_found' => '使用者不存在',
 
     // System
     'path_not_writable' => '無法上傳到 :filePath 檔案路徑。請確定其對伺服器來說是可寫入的。',
     'cannot_get_image_from_url' => '無法從 :url 取得圖片',
     'cannot_create_thumbs' => '伺服器無法建立縮圖。請檢查您是否安裝了 PHP 的 GD 擴充程式。',
     'server_upload_limit' => '伺服器不允許上傳這個大的檔案。請嘗試較小的檔案。',
-    'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.',
+    'server_post_limit' => '伺服器無法處理提供的資料,請嘗試刪減內容或較小的檔案',
     'uploaded'  => '伺服器不允許上傳這個大的檔案。請嘗試較小的檔案。',
 
     // Drawing & Images
     'image_upload_error' => '上傳圖片時發生錯誤',
     'image_upload_type_error' => '上傳圖片類型無效',
     'image_upload_replace_type' => '必須使用的檔案類型才能置換圖檔',
-    'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.',
-    'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.',
-    'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.',
+    'image_upload_memory_limit' => '由於系統限制,無法處理上傳的檔案或縮圖',
+    'image_thumbnail_memory_limit' => '由於系統限制,無法建立不同尺寸的圖片',
+    'image_gallery_thumbnail_memory_limit' => '由於系統限制,無法建立縮圖',
     'drawing_data_not_found' => '無法載入繪圖資料,繪圖檔案可能不存在,或您可能沒有權限存取它。',
 
     // Attachments
     'attachment_not_found' => '找不到附件',
-    'attachment_upload_error' => 'An error occurred uploading the attachment file',
+    'attachment_upload_error' => '上傳檔案時發生錯誤',
 
     // Pages
     'page_draft_autosave_fail' => '無法儲存草稿。請確保您在儲存此頁面前已連線至網際網路',
-    'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content',
+    'page_draft_delete_fail' => '無法刪除草稿並取得最新的頁面存檔',
     'page_custom_home_deletion' => '無法刪除被設定為首頁的頁面',
 
     // Entities
@@ -116,5 +116,5 @@ return [
     'maintenance_test_email_failure' => '寄送測試電子郵件時發生錯誤:',
 
     // HTTP errors
-    'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts',
+    'http_ssr_url_no_match' => 'URL 與設置的 SSR 主機不符',
 ];
index 1afd23f1dc4b0bfbb208f923075a86b14547a801..7fcfa64009011f65eaef9a28708a1ee21247aaf5 100644 (file)
@@ -4,24 +4,24 @@
  */
 return [
 
-    'new_comment_subject' => 'New comment on page: :pageName',
-    'new_comment_intro' => 'A user has commented on a page in :appName:',
-    'new_page_subject' => 'New page: :pageName',
-    'new_page_intro' => 'A new page has been created in :appName:',
-    'updated_page_subject' => 'Updated page: :pageName',
-    'updated_page_intro' => 'A page has been updated in :appName:',
-    'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.',
+    'new_comment_subject' => '頁面上有新評論::pageName',
+    'new_comment_intro' => '一位用戶在 :appName: 的頁面上發表了評論',
+    'new_page_subject' => '新頁面::pageName',
+    'new_page_intro' => ':appName: 中創建了一個新頁面',
+    'updated_page_subject' => '頁面更新::pageName',
+    'updated_page_intro' => ':appName: 中的一個頁面已被更新',
+    'updated_page_debounce' => '為了防止出現大量通知,一段時間內您不會收到同一編輯者再次編輯本頁面的通知。',
 
-    'detail_page_name' => 'Page Name:',
-    'detail_page_path' => 'Page Path:',
-    'detail_commenter' => 'Commenter:',
-    'detail_comment' => 'Comment:',
-    'detail_created_by' => 'Created By:',
-    'detail_updated_by' => 'Updated By:',
+    'detail_page_name' => '頁面名稱:',
+    'detail_page_path' => '頁面路徑:',
+    'detail_commenter' => '評論者:',
+    'detail_comment' => '評論:',
+    'detail_created_by' => '建立者:',
+    'detail_updated_by' => '更新者:',
 
-    'action_view_comment' => 'View Comment',
-    'action_view_page' => 'View Page',
+    'action_view_comment' => '檢視評論',
+    'action_view_page' => '查看頁面',
 
-    'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.',
-    'footer_reason_link' => 'your notification preferences',
+    'footer_reason' => '向您發送此通知是因為 :link 涵蓋了該項目的此類活動。',
+    'footer_reason_link' => '個人偏好通知設定',
 ];
index 572739f29339d5db408bf8e7b1e561e0274647e3..acfbe334d7b653e9ed82a79c1a79b4266f6062ae 100644 (file)
@@ -27,7 +27,7 @@ return [
     'app_secure_images_toggle' => '啟用更高安全性的圖片上傳',
     'app_secure_images_desc' => '因為效能因素,所有圖片都是公開的。此選項會在圖片的網址前加入一串隨機且難以猜測的字串。確保未啟用目錄索引,讓直接進入變得更困難。',
     'app_default_editor' => '預設頁面編輯器',
-    'app_default_editor_desc' => 'é\80\89æ\8b©ç¼\96è¾\91æ\96°é¡µé\9d¢æ\97¶é»\98认使ç\94¨ç\9a\84ç¼\96è¾\91å\99¨ã\80\82è¿\99å\8f¯ä»¥å\9c¨æ\9d\83é\99\90å\85\81许ç\9a\84页é\9d¢çº§å\88«è¢«è¦\86ç\9b\96ã\80\82',
+    'app_default_editor_desc' => 'é\81¸æ\93\87編輯é \81é\9d¢æ\99\82é \90設使ç\94¨ç\9a\84編輯å\99¨ï¼\8cé\80\99é \85設å®\9aå\80¼å\8f¯è¢«é \81é\9d¢ç\9a\84æ¬\8aé\99\90è¦\86è\93\8b',
     'app_custom_html' => '自訂 HTML 標題內容',
     'app_custom_html_desc' => '此處加入的任何內容都將插入到每個頁面的 <head> 部分的底部,這對於覆蓋樣式或加入分析程式碼很方便。',
     'app_custom_html_disabled_notice' => '在此設定頁面上停用了自訂 HTML 標題內容,以確保任何重大變更都能被還原。',
@@ -49,8 +49,8 @@ return [
 
     // Color settings
     'color_scheme' => '應用程式配色',
-    'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.',
-    'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.',
+    'color_scheme_desc' => '設定使用者頁面欲使用的顏色。可分別針對淺色模式與暗色模式設定顏色,以確保容易閱讀',
+    'ui_colors_desc' => '設定頁面主要色彩以及頁面連結預設顏色。主要色彩用於標題橫幅、按鈕以及主要操作界面,頁面連結顏色,主要用於主頁面、編輯頁面中的文字連結、操作按鈕。',
     'app_color' => '主要顏色',
     'link_color' => '連結預設顏色',
     'content_colors_desc' => '設定頁面層次結構中的元素顏色;為了提高可讀性,建議選擇亮度與預設顏色相似的顏色。',
@@ -92,9 +92,9 @@ return [
     'maint_send_test_email_mail_text' => '恭喜!您收到這封電子郵件通知時,代表您的電子郵件設定已正確設定。',
     'maint_recycle_bin_desc' => '刪除的書架、書本、章節與頁面將會被傳送到回收桶,這樣仍可以還原或永久刪除。回收桶中較舊的項目可能會在一段時間後自動移除,取決於您的系統設定。',
     'maint_recycle_bin_open' => '開啟回收桶',
-    'maint_regen_references' => 'Regenerate References',
-    'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.',
-    'maint_regen_references_success' => 'Reference index has been regenerated!',
+    'maint_regen_references' => '重新生成引用',
+    'maint_regen_references_desc' => '此操作將重建數據庫中的跨項目引用索引。這通常是自動處理的,但可能有助於索引舊內容或通過非官方方法添加的內容。',
+    'maint_regen_references_success' => '引用索引已重新生成!',
     'maint_timeout_command_note' => '備註:這項操作需要較長的時間,可能導致多數的網路環境發生連線逾時的問題。若有需要,可以透過終端機指令來替代。',
 
     // Recycle Bin
@@ -109,7 +109,7 @@ return [
     'recycle_bin_contents_empty' => '回收桶目前是空的',
     'recycle_bin_empty' => '清空回收桶',
     'recycle_bin_empty_confirm' => '這將會永久破壞回收桶中的所有項目,包括每個項目中包含的內容。您確定您想要清空回收桶嗎?',
-    'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
+    'recycle_bin_destroy_confirm' => '此操作將從系統中永久刪除此項目以及下面列出的所有子元素,並且您將無法還原此內容。您確定要永久刪除該項目嗎?',
     'recycle_bin_destroy_list' => '要被銷毀的項目',
     'recycle_bin_restore_list' => '要被還原的項目',
     'recycle_bin_restore_confirm' => '此動作將會還原已被刪除的項目(包含任何下層元素)到其原始位置。如果原始位置已被刪除,且目前位於垃圾桶裡,那麼上層項目也需要被還原。',
@@ -138,10 +138,10 @@ return [
     'role_user_roles' => '使用者角色',
     'roles_index_desc' => '「角色」用於將系統權限套用至使用者群組。當使用者擁有多角色時,
 使用者會自動繼承角色中的所有系統權限',
-    'roles_x_users_assigned' => ':count user assigned|:count users assigned',
-    'roles_x_permissions_provided' => ':count permission|:count permissions',
-    'roles_assigned_users' => 'Assigned Users',
-    'roles_permissions_provided' => 'Provided Permissions',
+    'roles_x_users_assigned' => ':count 位用戶已分配|:count 位用戶已分配',
+    'roles_x_permissions_provided' => ':count 個權限|:count 個權限',
+    'roles_assigned_users' => '已分配用戶',
+    'roles_permissions_provided' => '已提供權限',
     'role_create' => '建立新角色',
     'role_delete' => '刪除角色',
     'role_delete_confirm' => '這將會刪除名為「:roleName」的角色.',
@@ -164,12 +164,12 @@ return [
     'role_manage_settings' => '管理應用程式設定',
     'role_export_content' => '匯出內容',
     'role_editor_change' => '重設頁面編輯器',
-    'role_notifications' => 'Receive & manage notifications',
+    'role_notifications' => '管理和接收通知',
     'role_asset' => '資源權限',
     'roles_system_warning' => '請注意,有上述三項權限中的任一項的使用者都可以更改自己或系統中其他人的權限。有這些權限的角色只應分配給受信任的使用者。',
     'role_asset_desc' => '對系統內資源的預設權限將由這裡的權限控制。若有單獨設定在書本、章節和頁面上的權限,將會覆寫這裡的權限設定。',
     'role_asset_admins' => '管理員會自動取得對所有內容的存取權,但這些選項可能會顯示或隱藏使用者介面的選項。',
-    'role_asset_image_view_note' => 'This relates to visibility within the image manager. Actual access of uploaded image files will be dependant upon system image storage option.',
+    'role_asset_image_view_note' => '這與圖像管理器中的可見性有關。已經上傳的圖片的實際訪問取決於系統圖像存儲選項。',
     'role_all' => '全部',
     'role_own' => '擁有',
     'role_controlled_by_asset' => '依據隸屬的資源來決定',
@@ -194,8 +194,8 @@ return [
     'users_send_invite_text' => '您可以選擇向此使用者傳送邀請電子郵件,讓他們可以設定自己的密碼,您也可以自行設定他們的密碼。',
     'users_send_invite_option' => '傳送邀請電子郵件給使用者',
     'users_external_auth_id' => '外部身份驗證 ID',
-    'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.',
-    'users_password_warning' => 'Only fill the below if you would like to change the password for this user.',
+    'users_external_auth_id_desc' => '使用外部驗證系統時 (如 SAML2、OIDC、LDAP),將使這個帳號與驗證系統帳號連結。若使用一般的 email 認證方式,可以忽略此欄位。',
+    'users_password_warning' => '如果您想更改此用戶的密碼,請填寫以下內容:',
     'users_system_public' => '此使用者代表造訪您站台的任何訪客使用者。其不能用於登入,而會自動分配。',
     'users_delete' => '刪除使用者',
     'users_delete_named' => '刪除使用者 :userName',
@@ -211,23 +211,23 @@ return [
     'users_preferred_language' => '偏好語言',
     'users_preferred_language_desc' => '此選項將會變更用於應用程式使用者介面的語言。不會影響任何使用者建立的內容。',
     'users_social_accounts' => '社群網站帳號',
-    'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.',
+    'users_social_accounts_desc' => '查看此用戶已連接的社交賬戶狀態。 除了主要認證系統外,社交賬戶也可用於系統訪問。',
     'users_social_accounts_info' => '您可以在此處連結您其他的帳號以供快速登入。從此處取消連結帳號並不會撤銷先前已授權的存取。請從您連結的社群網站帳號的個人設定中撤銷存取權。',
     'users_social_connect' => '連結帳號',
     'users_social_disconnect' => '取消連結帳號',
-    'users_social_status_connected' => 'Connected',
-    'users_social_status_disconnected' => 'Disconnected',
+    'users_social_status_connected' => '已連接',
+    'users_social_status_disconnected' => '已斷開連接',
     'users_social_connected' => ':socialAccount 帳號已經成功連結到您的個人資料。',
     'users_social_disconnected' => ':socialAccount 帳號已經成功取消連結。',
     'users_api_tokens' => 'API 權杖',
-    'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.',
+    'users_api_tokens_desc' => '創建和管理用於 BookStack REST API 認證的訪問令牌。 API 的權限是通過令牌所屬的用戶管理的。',
     'users_api_tokens_none' => '尚未為此使用者建立 API 權杖',
     'users_api_tokens_create' => '建立權杖',
     'users_api_tokens_expires' => '過期',
     'users_api_tokens_docs' => 'API 文件',
     'users_mfa' => '多重身分驗證',
     'users_mfa_desc' => '設定多重身份驗證為您的帳戶多增加了一道防線',
-    'users_mfa_x_methods' => ':count method configured|:count methods configured',
+    'users_mfa_x_methods' => ':count 個措施已配置|:count 個措施已配置',
     'users_mfa_configure' => '方式設置',
 
     // API Tokens
@@ -250,30 +250,30 @@ return [
 
     // Webhooks
     'webhooks' => 'Webhooks',
-    'webhooks_index_desc' => 'Webhooks are a way to send data to external URLs when certain actions and events occur within the system which allows event-based integration with external platforms such as messaging or notification systems.',
-    'webhooks_x_trigger_events' => ':count trigger event|:count trigger events',
+    'webhooks_index_desc' => 'Webhook 是一種在系統內發生某些操作和事件時將數據發送到外部 URL 的方法,它允許與外部平台(例如消息傳遞或通知系統)進行基於事件的集成。',
+    'webhooks_x_trigger_events' => ':count 個觸發事件 |:count 個觸發事件',
     'webhooks_create' => '建立 Webhook',
     'webhooks_none_created' => '沒有已建立的 Webhook',
     'webhooks_edit' => '設置 Webhook',
     'webhooks_save' => '儲存 Webhook',
     'webhooks_details' => 'WebHook 詳細資料',
-    'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.',
-    'webhooks_events' => 'Webhook Events',
-    'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.',
-    'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.',
+    'webhooks_details_desc' => '提供一個用戶友好的名稱和一個 POST Endpoint 作為 Webhook 數據發送的位置。',
+    'webhooks_events' => 'Webhook 事件',
+    'webhooks_events_desc' => '選擇所有應觸發此 Webhook 的事件。',
+    'webhooks_events_warning' => '請記住,即使應用了自定義權限,所有選定的事件也仍然會被觸發。 確保使用此 Webhook 不會洩露機密內容。',
     'webhooks_events_all' => '全部系統活動',
     'webhooks_name' => 'Webhook 名稱',
-    'webhooks_timeout' => 'Webhook Request Timeout (Seconds)',
-    'webhooks_endpoint' => 'Webhook Endpoint',
-    'webhooks_active' => 'Webhook Active',
+    'webhooks_timeout' => 'Webhook 請求超時(秒)',
+    'webhooks_endpoint' => 'Webhook 端點',
+    'webhooks_active' => 'Webhook 啟用',
     'webhook_events_table_header' => '事件',
     'webhooks_delete' => '刪除 Webhook',
-    'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.',
-    'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?',
+    'webhooks_delete_warning' => '這將會從系統中完全刪除名為 “:webhookName” 的 webhook。',
+    'webhooks_delete_confirm' => '確定要刪除此 Webhook 嗎?',
     'webhooks_format_example' => 'Webhook 格式範例',
-    'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.',
+    'webhooks_format_example_desc' => 'Webhook 數據會以 POST 請求按照以下 JSON 格式發送到設置的 Endpoint。 “related_item” 和 “url” 屬性是可選的,取決於觸發的事件類型。',
     'webhooks_status' => 'Webhook 狀態',
-    'webhooks_last_called' => 'Last Called:',
+    'webhooks_last_called' => '最後一次調用:',
     'webhooks_last_errored' => '上次錯誤',
     'webhooks_last_error_message' => '上次錯誤信息',
 
index 0b6c970806c3dc7d79623e1b76189b07e6b66ac4..cdc1f3ee0d5e8ae7118a4b5594e5c64e25f96b38 100644 (file)
@@ -33,7 +33,7 @@
         "@lezer/generator": "^1.5.1",
         "babel-jest": "^29.7.0",
         "chokidar-cli": "^3.0",
-        "esbuild": "^0.20",
+        "esbuild": "^0.23.0",
         "eslint": "^8.55.0",
         "eslint-config-airbnb-base": "^15.0.0",
         "eslint-plugin-import": "^2.29.0",
         "@jridgewell/sourcemap-codec": "^1.4.10"
       }
     },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
-      "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
-      "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
-      "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
-      "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
-      "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
-      "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
-      "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
-      "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
-      "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
-      "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
-      "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
-      "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
-      "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
-      "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
-      "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
-      "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
-      "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
       "cpu": [
         "x64"
       ],
         "linux"
       ],
       "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
-      "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
-      "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
-      "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
-      "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
-      "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
-      "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
       }
     },
     "node_modules/esbuild": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
-      "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.20.2",
-        "@esbuild/android-arm": "0.20.2",
-        "@esbuild/android-arm64": "0.20.2",
-        "@esbuild/android-x64": "0.20.2",
-        "@esbuild/darwin-arm64": "0.20.2",
-        "@esbuild/darwin-x64": "0.20.2",
-        "@esbuild/freebsd-arm64": "0.20.2",
-        "@esbuild/freebsd-x64": "0.20.2",
-        "@esbuild/linux-arm": "0.20.2",
-        "@esbuild/linux-arm64": "0.20.2",
-        "@esbuild/linux-ia32": "0.20.2",
-        "@esbuild/linux-loong64": "0.20.2",
-        "@esbuild/linux-mips64el": "0.20.2",
-        "@esbuild/linux-ppc64": "0.20.2",
-        "@esbuild/linux-riscv64": "0.20.2",
-        "@esbuild/linux-s390x": "0.20.2",
-        "@esbuild/linux-x64": "0.20.2",
-        "@esbuild/netbsd-x64": "0.20.2",
-        "@esbuild/openbsd-x64": "0.20.2",
-        "@esbuild/sunos-x64": "0.20.2",
-        "@esbuild/win32-arm64": "0.20.2",
-        "@esbuild/win32-ia32": "0.20.2",
-        "@esbuild/win32-x64": "0.20.2"
+        "@esbuild/aix-ppc64": "0.23.1",
+        "@esbuild/android-arm": "0.23.1",
+        "@esbuild/android-arm64": "0.23.1",
+        "@esbuild/android-x64": "0.23.1",
+        "@esbuild/darwin-arm64": "0.23.1",
+        "@esbuild/darwin-x64": "0.23.1",
+        "@esbuild/freebsd-arm64": "0.23.1",
+        "@esbuild/freebsd-x64": "0.23.1",
+        "@esbuild/linux-arm": "0.23.1",
+        "@esbuild/linux-arm64": "0.23.1",
+        "@esbuild/linux-ia32": "0.23.1",
+        "@esbuild/linux-loong64": "0.23.1",
+        "@esbuild/linux-mips64el": "0.23.1",
+        "@esbuild/linux-ppc64": "0.23.1",
+        "@esbuild/linux-riscv64": "0.23.1",
+        "@esbuild/linux-s390x": "0.23.1",
+        "@esbuild/linux-x64": "0.23.1",
+        "@esbuild/netbsd-x64": "0.23.1",
+        "@esbuild/openbsd-arm64": "0.23.1",
+        "@esbuild/openbsd-x64": "0.23.1",
+        "@esbuild/sunos-x64": "0.23.1",
+        "@esbuild/win32-arm64": "0.23.1",
+        "@esbuild/win32-ia32": "0.23.1",
+        "@esbuild/win32-x64": "0.23.1"
       }
     },
     "node_modules/escalade": {
       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "dev": true
     },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
index 163df34ed223cc1cd654b382677ce8a9ad94e950..46a41218351c1d0dd5b9602b8174a20a7e756d3b 100644 (file)
@@ -22,7 +22,7 @@
     "@lezer/generator": "^1.5.1",
     "babel-jest": "^29.7.0",
     "chokidar-cli": "^3.0",
-    "esbuild": "^0.20",
+    "esbuild": "^0.23.0",
     "eslint": "^8.55.0",
     "eslint-config-airbnb-base": "^15.0.0",
     "eslint-plugin-import": "^2.29.0",
index 21f17685b5b63aacd448fcbfa898ca9d16b6ffaa..b72c6e5f13e7fa25c751449e71b3b363e0c04270 100644 (file)
@@ -13,6 +13,7 @@
     <server name="APP_AUTO_LANG_PUBLIC" value="true"/>
     <server name="APP_URL" value="http://bookstack.dev"/>
     <server name="ALLOWED_IFRAME_HOSTS" value=""/>
+    <server name="ALLOWED_IFRAME_SOURCES" value="https://*.draw.io https://*.youtube.com https://*.youtube-nocookie.com https://*.vimeo.com"/>
     <server name="ALLOWED_SSR_HOSTS" value="*"/>
     <server name="CACHE_DRIVER" value="array"/>
     <server name="SESSION_DRIVER" value="array"/>
index 29983eafff0f03dd3c2798d3c04be01444936590..857e2051a55a84d483c6c45d61b69e4450750110 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -49,7 +49,7 @@ Big thanks to these companies for supporting the project.
 
 <table><tbody><tr>
 <td align="center"><a href="https://www.federated.computer/bookstack/" target="_blank">
-    <img width="480" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/federated-computer.png" alt="Federated.computer">
+    <img width="480" src="https://www.bookstackapp.com/images/sponsors/federated-computer.png" alt="Federated.computer">
 </a></td>
 </tr></tbody></table>
 
@@ -57,34 +57,41 @@ Big thanks to these companies for supporting the project.
 
 <table><tbody><tr>
 <td align="center"><a href="https://www.diagrams.net/" target="_blank">
-    <img width="240" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/diagramsnet.png" alt="Diagrams.net">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/diagramsnet.png" alt="Diagrams.net">
 </a></td>
 <td align="center"><a href="https://cloudabove.com/hosting" target="_blank">
-    <img width="200" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/cloudabove.png" alt="Cloudabove">
+    <img width="200" src="https://www.bookstackapp.com/images/sponsors/cloudabove.png" alt="Cloudabove">
 </a></td>
 </tr><tr>
 <td align="center"><a href="https://www.practicali.be" target="_blank">
-    <img width="240" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/practicali.png" alt="Practicali">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/practicali.png" alt="Practicali">
 </a></td>
 <td align="center"><a href="https://www.stellarhosted.com/bookstack/" target="_blank">
-    <img width="240" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/stellarhosted.png" alt="Stellar Hosted">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/stellarhosted.png" alt="Stellar Hosted">
 </a></td>
 </tr>
 <tr>
-<td colspan="2" align="center" style="text-align: center"><a href="https://nws.netways.de/apps/bookstack/" target="_blank">
-    <img width="240" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/netways.png" alt="NETWAYS Web Services">
+<td align="center" style="text-align: center"><a href="https://nws.netways.de/apps/bookstack/" target="_blank">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/netways.png" alt="NETWAYS Web Services">
+</a></td>
+<td align="center" style="text-align: center"><a href="https://www.schroeck-consulting.de/" target="_blank">
+    <img width="200" src="https://www.bookstackapp.com/images/sponsors/schroeck-consulting.png" alt="Schroeck IT Consulting">
+</a></td>
+</tr>
+<tr>
+<td align="center"><a href="https://practinet.be/" target="_blank">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/practinet.png" alt="Practinet">
+</a></td>
+<td align="center"><a href="https://transporttalent.com" target="_blank">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/transport-talent.png" alt="Transport Talent">
+</a></td>
+</tr>
+<tr>
+<td colspan="2" align="center"><a href="https://route4me.com/" target="_blank">
+    <img width="240" src="https://www.bookstackapp.com/images/sponsors/route4me.png" alt="Route4Me - Route Optimizer and Route Planner Software">
 </a></td>
 </tr></tbody></table>
 
-## 🛣️ Road Map
-
-Below is a high-level road map view for BookStack to provide a sense of direction of where the project is going. This can change at any point and does not reflect many features and improvements that will also be included as part of the journey along this road map. For more granular detail of what will be included in upcoming releases you can review the project milestones as defined in our [Release Process](dev/docs/release-process.md) documentation.
-
-- **Platform REST API** - *(Most actions implemented, maturing)*
-    - *A REST API covering, at minimum, control of core content models (Books, Chapters, Pages) for automation and platform extension.*
-- **Permission System Review** - *(In Progress)*
-    - *Improvement in how permissions are applied and a review of the efficiency of the permission & roles system.*
-
 ## 🛠️ Development & Testing
 
 Please see our [development docs](dev/docs/development.md) for full details regarding work on the BookStack source code.
index c0f9e6dd996b70bdb4e6586b55ef5edfdf3af6c6..ef317334c2b93d93b23cf63c29093a9104d22a08 100644 (file)
@@ -35,7 +35,7 @@ const modeMap = {
     go: () => legacyLoad('go'),
     haskell: () => legacyLoad('haskell'),
     hs: () => legacyLoad('haskell'),
-    html: async () => html(),
+    html: async () => html({selfClosingTags: true}),
     ini: () => legacyLoad('properties'),
     java: () => legacyLoad('java'),
     javascript: async () => javascript(),
index b187d6408cc70b4c29f886af249160771a78e1c6..0a1a49151a99ed6f3b99910b1f9e099556c077c0 100644 (file)
     margin-bottom: 1.375em;
   }
 
-  video {
+  video, iframe {
     max-width: 100%;
   }
 
@@ -130,11 +130,18 @@ body .page-content img,
 
 /**
  * Callouts
+ * Some styles duplicated for supporting logical units (eg. inline-end) while
+ * providing fallbacks to non-logical rules, so RTL is natively supported where possible.
  */
 .callout {
   border-left: 3px solid #BBB;
+  border-inline-start: 3px solid #BBB;
+  border-inline-end: none;
   background-color: #EEE;
-  padding: $-s $-s $-s $-xl;
+  padding: $-s;
+  padding-left: $-xl;
+  padding-inline-start: $-xl;
+  padding-inline-end: $-s;
   display: block;
   position: relative;
   overflow: auto;
@@ -145,6 +152,8 @@ body .page-content img,
     width: 1.2em;
     height: 1.2em;
     left: $-xs + 2px;
+    inset-inline-start: $-xs + 2px;
+    inset-inline-end: unset;
     top: 50%;
     margin-top: -9px;
     display: inline-block;
@@ -153,7 +162,7 @@ body .page-content img,
     opacity: 0.8;
   }
   &.success {
-    @include lightDark(border-left-color, $positive, $positive-dark);
+    @include lightDark(border-color, $positive, $positive-dark);
     @include lightDark(background-color, lighten($positive, 68%), darken($positive-dark, 36%));
     @include lightDark(color, darken($positive, 16%), $positive-dark);
   }
@@ -161,7 +170,7 @@ body .page-content img,
     background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMzNzZjMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+");
   }
   &.danger {
-    @include lightDark(border-left-color, $negative, $negative-dark);
+    @include lightDark(border-color, $negative, $negative-dark);
     @include lightDark(background-color, lighten($negative, 56%), darken($negative-dark, 55%));
     @include lightDark(color, darken($negative, 20%), $negative-dark);
   }
@@ -169,12 +178,12 @@ body .page-content img,
     background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiOTE4MTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==");
   }
   &.info {
-    @include lightDark(border-left-color, $info, $info-dark);
+    @include lightDark(border-color, $info, $info-dark);
     @include lightDark(color, darken($info, 20%), $info-dark);
     @include lightDark(background-color, lighten($info, 50%), darken($info-dark, 34%));
   }
   &.warning {
-    @include lightDark(border-left-color, $warning, $warning-dark);
+    @include lightDark(border-color, $warning, $warning-dark);
     @include lightDark(background-color, lighten($warning, 50%), darken($warning-dark, 50%));
     @include lightDark(color, darken($warning, 20%), $warning-dark);
   }
index 9f367984ad57eeb805297ea688efcb7072ce9c48..9acfe2ceed37348f13939b65995f49553e8c1219 100644 (file)
@@ -309,15 +309,26 @@ li > ol, li > ul {
   padding-right: $-m * 1.2;
 }
 
+/**
+ * Checkbox lists
+ * Some styles duplicated for supporting logical units (eg. inline-end) while
+ * providing fallbacks to non-logical rules, so RTL is natively supported where possible.
+ */
 li.checkbox-item, li.task-list-item {
   display: list-item;
   list-style: none;
   margin-left: -($-m * 1.2);
+  margin-inline-start: -($-m * 1.2);
+  margin-inline-end: 0;
   input[type="checkbox"] {
     margin-right: $-xs;
+    margin-inline-end: $-xs;
+    margin-inline-start: 0;
   }
   li.checkbox-item, li.task-list-item {
     margin-left: $-xs;
+    margin-inline-start: $-xs;
+    margin-inline-end: 0;
   }
 }
 
index 95294cdf2c0885636b12ece48f10d2ad865616fb..129e478212b3b9b00849e109d3fca329b2258818 100644 (file)
@@ -173,7 +173,7 @@ body.page-content.mce-content-body  {
  * Fake task list checkboxes
  */
 .page-content.mce-content-body .task-list-item {
-  margin-left: 0;
+  margin-inline-start: 0;
   position: relative;
 }
 .page-content.mce-content-body .task-list-item > input[type="checkbox"] {
@@ -186,11 +186,11 @@ body.page-content.mce-content-body  {
   width: 12px;
   height: 12px;
   border-radius: 2px;
-  margin-right: 8px;
+  margin-inline-end: 8px;
   vertical-align: text-top;
   cursor: pointer;
   position: absolute;
-  left: -24px;
+  inset-inline-start: -24px;
   top: 4px;
 }
 
index 8fc0912586d5000fbb883e61c62d6666545d5cd6..8ff59c8d664bc3880d8a77b6bd43bb48b1ab3d85 100644 (file)
             </tr>
             <tr>
                 <td>
-                    <code>Ctrl</code>+<code>Shift</code>+<code>8</code><br>
+                    <code>Ctrl</code>+<code>8</code><br>
                     <code>Ctrl</code>+<code>Shift</code>+<code>E</code>
                 </td>
                 <td>
-                    <code>Cmd</code>+<code>Shift</code>+<code>8</code><br>
+                    <code>Cmd</code>+<code>8</code><br>
                     <code>Cmd</code>+<code>Shift</code>+<code>E</code>
                 </td>
                 <td>{{ trans('editor.inline_code') }}</td>
index b8c2b613387ef79a156ecc783e5e9dd067083bca..0de98dc323bf5ab14f8630075696a97a3f7e6118 100644 (file)
@@ -149,6 +149,23 @@ class BooksApiTest extends TestCase
         ]);
     }
 
+    public function test_read_endpoint_contents_nested_pages_has_permissions_applied()
+    {
+        $this->actingAsApiEditor();
+
+        $book = $this->entities->bookHasChaptersAndPages();
+        $chapter = $book->chapters()->first();
+        $chapterPage = $chapter->pages()->first();
+        $customName = 'MyNonVisiblePageWithinAChapter';
+        $chapterPage->name = $customName;
+        $chapterPage->save();
+
+        $this->permissions->disableEntityInheritedPermissions($chapterPage);
+
+        $resp = $this->getJson($this->baseEndpoint . "/{$book->id}");
+        $resp->assertJsonMissing(['name' => $customName]);
+    }
+
     public function test_update_endpoint()
     {
         $this->actingAsApiEditor();
index 3f80f00f41e4abf454b2121abde1005aa3adef90..ef95bc2e8f41fdaad71d30a13352229f0996e20f 100644 (file)
@@ -76,7 +76,7 @@ class LdapTest extends TestCase
     /**
      * Set LDAP method mocks for things we commonly call without altering.
      */
-    protected function commonLdapMocks(int $connects = 1, int $versions = 1, int $options = 2, int $binds = 4, int $escapes = 2, int $explodes = 0)
+    protected function commonLdapMocks(int $connects = 1, int $versions = 1, int $options = 2, int $binds = 4, int $escapes = 2, int $explodes = 0, int $groups = 0)
     {
         $this->mockLdap->shouldReceive('connect')->times($connects)->andReturn($this->resourceId);
         $this->mockLdap->shouldReceive('setVersion')->times($versions);
@@ -84,6 +84,13 @@ class LdapTest extends TestCase
         $this->mockLdap->shouldReceive('bind')->times($binds)->andReturn(true);
         $this->mockEscapes($escapes);
         $this->mockExplodes($explodes);
+        $this->mockGroupLookups($groups);
+    }
+
+    protected function mockGroupLookups(int $times = 1): void
+    {
+        $this->mockLdap->shouldReceive('read')->times($times)->andReturn(['count' => 0]);
+        $this->mockLdap->shouldReceive('getEntries')->times($times)->andReturn(['count' => 0]);
     }
 
     public function test_login()
@@ -307,8 +314,8 @@ class LdapTest extends TestCase
             'services.ldap.remove_from_groups' => false,
         ]);
 
-        $this->commonLdapMocks(1, 1, 4, 5, 4, 6);
-        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4)
+        $this->commonLdapMocks(1, 1, 4, 5, 2, 2, 2);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
             ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
             ->andReturn(['count' => 1, 0 => [
                 'uid'      => [$this->mockUser->name],
@@ -352,8 +359,8 @@ class LdapTest extends TestCase
             'services.ldap.remove_from_groups' => true,
         ]);
 
-        $this->commonLdapMocks(1, 1, 3, 4, 3, 2);
-        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(3)
+        $this->commonLdapMocks(1, 1, 3, 4, 2, 1, 1);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
             ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
             ->andReturn(['count' => 1, 0 => [
                 'uid'      => [$this->mockUser->name],
@@ -394,22 +401,26 @@ class LdapTest extends TestCase
             'dn'       => 'dc=test,' . config('services.ldap.base_dn'),
             'mail'     => [$this->mockUser->email],
         ]];
-        $this->commonLdapMocks(1, 1, 4, 5, 4, 2);
-        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4)
+        $this->commonLdapMocks(1, 1, 4, 5, 2, 2, 0);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
             ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
             ->andReturn($userResp, ['count' => 1,
-                0                           => [
-                    'dn'       => 'dc=test,' . config('services.ldap.base_dn'),
+                0 => [
+                    'dn' => 'dc=test,' . config('services.ldap.base_dn'),
                     'memberof' => [
                         'count' => 1,
-                        0       => 'cn=ldaptester,ou=groups,dc=example,dc=com',
+                        0 => 'cn=ldaptester,ou=groups,dc=example,dc=com',
                     ],
                 ],
-            ], [
+            ]);
+
+        $this->mockLdap->shouldReceive('read')->times(2);
+        $this->mockLdap->shouldReceive('getEntries')->times(2)
+            ->andReturn([
                 'count' => 1,
-                0       => [
-                    'dn'       => 'cn=ldaptester,ou=groups,dc=example,dc=com',
-                    'memberof' => [
+                0 => [
+                    'dn'        => 'cn=ldaptester,ou=groups,dc=example,dc=com',
+                    'memberof'  => [
                         'count' => 1,
                         0       => 'cn=monsters,ou=groups,dc=example,dc=com',
                     ],
@@ -426,15 +437,60 @@ class LdapTest extends TestCase
                 ],
             ],
             'parsed_direct_user_groups' => [
-                'ldaptester',
+                'cn=ldaptester,ou=groups,dc=example,dc=com',
             ],
             'parsed_recursive_user_groups' => [
+                'cn=ldaptester,ou=groups,dc=example,dc=com',
+                'cn=monsters,ou=groups,dc=example,dc=com',
+            ],
+            'parsed_resulting_group_names' => [
                 'ldaptester',
                 'monsters',
             ],
         ]);
     }
 
+    public function test_recursive_group_search_queries_via_full_dn()
+    {
+        app('config')->set([
+            'services.ldap.user_to_groups'     => true,
+            'services.ldap.group_attribute'    => 'memberOf',
+        ]);
+
+        $userResp = ['count' => 1, 0 => [
+            'uid'      => [$this->mockUser->name],
+            'cn'       => [$this->mockUser->name],
+            'dn'       => 'dc=test,' . config('services.ldap.base_dn'),
+            'mail'     => [$this->mockUser->email],
+        ]];
+        $groupResp = ['count' => 1,
+                      0 => [
+                          'dn'       => 'dc=test,' . config('services.ldap.base_dn'),
+                          'memberof' => [
+                              'count' => 1,
+                              0       => 'cn=ldaptester,ou=groups,dc=example,dc=com',
+                          ],
+                      ],
+        ];
+
+        $this->commonLdapMocks(1, 1, 3, 4, 2, 1);
+
+        $escapedName = ldap_escape($this->mockUser->name);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->twice()
+            ->with($this->resourceId, config('services.ldap.base_dn'), "(&(uid={$escapedName}))", \Mockery::type('array'))
+            ->andReturn($userResp, $groupResp);
+
+        $this->mockLdap->shouldReceive('read')->times(1)
+            ->with($this->resourceId, 'cn=ldaptester,ou=groups,dc=example,dc=com', '(objectClass=*)', ['memberof'])
+            ->andReturn(['count' => 0]);
+        $this->mockLdap->shouldReceive('getEntries')->times(1)
+            ->with($this->resourceId, ['count' => 0])
+            ->andReturn(['count' => 0]);
+
+        $resp = $this->mockUserLogin();
+        $resp->assertRedirect('/');
+    }
+
     public function test_external_auth_id_visible_in_roles_page_when_ldap_active()
     {
         $role = Role::factory()->create(['display_name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']);
@@ -453,8 +509,8 @@ class LdapTest extends TestCase
             'services.ldap.remove_from_groups' => true,
         ]);
 
-        $this->commonLdapMocks(1, 1, 3, 4, 3, 2);
-        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(3)
+        $this->commonLdapMocks(1, 1, 3, 4, 2, 1, 1);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
             ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
             ->andReturn(['count' => 1, 0 => [
                 'uid'      => [$this->mockUser->name],
@@ -494,8 +550,8 @@ class LdapTest extends TestCase
             'services.ldap.remove_from_groups' => true,
         ]);
 
-        $this->commonLdapMocks(1, 1, 4, 5, 4, 6);
-        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4)
+        $this->commonLdapMocks(1, 1, 4, 5, 2, 2, 2);
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
             ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
             ->andReturn(['count' => 1, 0 => [
                 'uid'      => [$this->mockUser->name],
@@ -734,9 +790,9 @@ class LdapTest extends TestCase
             'services.ldap.remove_from_groups' => true,
         ]);
 
-        $this->commonLdapMocks(1, 1, 6, 8, 6, 4);
+        $this->commonLdapMocks(1, 1, 6, 8, 4, 2, 2);
         $this->mockLdap->shouldReceive('searchAndGetEntries')
-            ->times(6)
+            ->times(4)
             ->andReturn(['count' => 1, 0 => [
                 'uid'      => [$user->name],
                 'cn'       => [$user->name],
index 9bde71c80ef19ff06c9a654b03fae4fa9204c3ea..201f67b533338057e13b405d611d21cd2c1b1ba6 100644 (file)
@@ -849,6 +849,26 @@ class OidcTest extends TestCase
         $this->assertSessionError('Userinfo endpoint response validation failed with error: No valid subject value found in userinfo data');
     }
 
+    public function test_userinfo_endpoint_not_called_if_empty_groups_array_provided_in_id_token()
+    {
+        config()->set([
+            'oidc.user_to_groups'     => true,
+            'oidc.groups_claim'       => 'groups',
+            'oidc.remove_from_groups' => false,
+        ]);
+
+        $this->post('/oidc/login');
+        $state = session()->get('oidc_state');
+        $client = $this->mockHttpClient([$this->getMockAuthorizationResponse([
+            'groups' => [],
+        ])]);
+
+        $resp = $this->get('/oidc/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=' . $state);
+        $resp->assertRedirect('/');
+        $this->assertEquals(1, $client->requestCount());
+        $this->assertTrue(auth()->check());
+    }
+
     protected function withAutodiscovery(): void
     {
         config()->set([
index daad82e76dc5cbf586bf80eb59290da31ef3436d..b96d455eb253cec53e09c5a13ad5eca89fd53e07 100644 (file)
@@ -86,6 +86,32 @@ class PageTest extends TestCase
         $resp->assertSee('# a title');
     }
 
+    public function test_page_creation_allows_summary_to_be_set()
+    {
+        $book = $this->entities->book();
+
+        $this->asEditor()->get($book->getUrl('/create-page'));
+        $draft = Page::query()->where('book_id', '=', $book->id)
+            ->where('draft', '=', true)->first();
+
+        $details = [
+            'html'    => '<h1>a title</h1>',
+            'name'    => 'My page with summary',
+            'summary' => 'Here is my changelog message for a new page!',
+        ];
+        $resp = $this->post($book->getUrl("/draft/{$draft->id}"), $details);
+        $resp->assertRedirect();
+
+        $this->assertDatabaseHas('page_revisions', [
+            'page_id' => $draft->id,
+            'summary' => 'Here is my changelog message for a new page!',
+        ]);
+
+        $draft->refresh();
+        $resp = $this->get($draft->getUrl('/revisions'));
+        $resp->assertSee('Here is my changelog message for a new page!');
+    }
+
     public function test_page_delete()
     {
         $page = $this->entities->page();
index d369e695c516a8fc2d0093b9bbc0afc39f66a650..5d354e5539e9dcdd27bb05df788a61510c162068 100644 (file)
@@ -139,6 +139,18 @@ class SecurityHeaderTest extends TestCase
         $this->assertEquals('frame-src \'self\' https://example.com https://diagrams.example.com', $scriptHeader);
     }
 
+    public function test_frame_src_csp_header_drawio_host_includes_port_if_existing()
+    {
+        config()->set([
+            'app.iframe_sources' => 'https://example.com',
+            'services.drawio'    => 'https://diagrams.example.com:8080/testing?cat=dog',
+        ]);
+
+        $resp = $this->get('/');
+        $scriptHeader = $this->getCspHeader($resp, 'frame-src');
+        $this->assertEquals('frame-src \'self\' https://example.com https://diagrams.example.com:8080', $scriptHeader);
+    }
+
     public function test_cache_control_headers_are_set_on_responses()
     {
         // Public access
index d24b6202b3770d4adf235d7a19f2dbe6a824e4a2..2c36f5f356ed575d546ea640cab9e00b0e78749a 100644 (file)
@@ -119,6 +119,33 @@ class ImageTest extends TestCase
         $this->files->deleteAtRelativePath($relPath);
     }
 
+    public function test_image_file_update_allows_case_differences()
+    {
+        $page = $this->entities->page();
+        $this->asEditor();
+
+        $imgDetails = $this->files->uploadGalleryImageToPage($this, $page);
+        $relPath = $imgDetails['path'];
+
+        $newUpload = $this->files->uploadedImage('updated-image.PNG', 'compressed.png');
+        $this->assertFileEquals($this->files->testFilePath('test-image.png'), public_path($relPath));
+
+        $imageId = $imgDetails['response']->id;
+        $image = Image::findOrFail($imageId);
+        $image->updated_at = now()->subMonth();
+        $image->save();
+
+        $this->call('PUT', "/images/{$imageId}/file", [], [], ['file' => $newUpload])
+            ->assertOk();
+
+        $this->assertFileEquals($this->files->testFilePath('compressed.png'), public_path($relPath));
+
+        $image->refresh();
+        $this->assertTrue($image->updated_at->gt(now()->subMinute()));
+
+        $this->files->deleteAtRelativePath($relPath);
+    }
+
     public function test_image_file_update_does_not_allow_change_in_image_extension()
     {
         $page = $this->entities->page();
@@ -599,6 +626,40 @@ class ImageTest extends TestCase
         $this->files->deleteAtRelativePath($relPath);
     }
 
+    public function test_gif_thumbnail_generation()
+    {
+        $this->asAdmin();
+        $originalFile = $this->files->testFilePath('animated.gif');
+        $originalFileSize = filesize($originalFile);
+
+        $imgDetails = $this->files->uploadGalleryImageToPage($this, $this->entities->page(), 'animated.gif');
+        $relPath = $imgDetails['path'];
+
+        $this->assertTrue(file_exists(public_path($relPath)), 'Uploaded image found at path: ' . public_path($relPath));
+        $galleryThumb = $imgDetails['response']->thumbs->gallery;
+        $displayThumb = $imgDetails['response']->thumbs->display;
+
+        // Ensure display thumbnail is original image
+        $this->assertStringEndsWith($imgDetails['path'], $displayThumb);
+        $this->assertStringNotContainsString('thumbs', $displayThumb);
+
+        // Ensure gallery thumbnail is reduced image (single frame)
+        $galleryThumbRelPath = implode('/', array_slice(explode('/', $galleryThumb), 3));
+        $galleryThumbPath = public_path($galleryThumbRelPath);
+        $galleryFileSize = filesize($galleryThumbPath);
+
+        // Basic scan of GIF content to check frame count
+        $originalFrameCount = count(explode("\x00\x21\xF9", file_get_contents($originalFile)));
+        $galleryFrameCount = count(explode("\x00\x21\xF9", file_get_contents($galleryThumbPath)));
+
+        $this->files->deleteAtRelativePath($relPath);
+        $this->files->deleteAtRelativePath($galleryThumbRelPath);
+
+        $this->assertNotEquals($originalFileSize, $galleryFileSize);
+        $this->assertEquals(3, $originalFrameCount);
+        $this->assertEquals(1, $galleryFrameCount);
+    }
+
     protected function getTestProfileImage()
     {
         $imageName = 'profile.png';
index 9e5cf78dd8463c4267acdf902b6a50b2890263a4..8683fcb6e86b7d914cea03d95b66c905e7fb9bc0 100644 (file)
@@ -96,6 +96,31 @@ class RoleManagementTest extends TestCase
         $this->assertActivityExists(ActivityType::ROLE_DELETE);
     }
 
+    public function test_role_external_auth_id_validation()
+    {
+        config()->set('auth.method', 'oidc');
+        $role = Role::query()->first();
+        $routeByMethod = [
+            'post' => '/settings/roles/new',
+            'put' => "/settings/roles/{$role->id}",
+        ];
+
+        foreach ($routeByMethod as $method => $route) {
+            $resp = $this->asAdmin()->get($route);
+            $resp->assertDontSee('The external auth id');
+
+            $resp = $this->asAdmin()->call($method, $route, [
+                'display_name' => 'Test role for auth id validation',
+                'description'  => '',
+                'external_auth_id' => str_repeat('a', 181),
+            ]);
+
+            $resp->assertRedirect($route);
+            $resp = $this->followRedirects($resp);
+            $resp->assertSee('The external auth id may not be greater than 180 characters.');
+        }
+    }
+
     public function test_admin_role_cannot_be_removed_if_user_last_admin()
     {
         /** @var Role $adminRole */
diff --git a/tests/test-data/animated.gif b/tests/test-data/animated.gif
new file mode 100644 (file)
index 0000000..13c9d05
Binary files /dev/null and b/tests/test-data/animated.gif differ