mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-11 11:19:38 +03:00
Compare commits
205 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26aadffb20 | ||
|
|
a5f48e3202 | ||
|
|
a58102d6ef | ||
|
|
65453bd94e | ||
|
|
d22413b931 | ||
|
|
8b9bcc1768 | ||
|
|
51287d545b | ||
|
|
c314a60a16 | ||
|
|
9b2520aa0c | ||
|
|
346b88ae43 | ||
|
|
2766c76491 | ||
|
|
be6529d0a1 | ||
|
|
b1a3ea1aa4 | ||
|
|
6646dcc24d | ||
|
|
966ff91386 | ||
|
|
cd84d08157 | ||
|
|
93c677a6a9 | ||
|
|
177cfd72bf | ||
|
|
34ade50181 | ||
|
|
e65655594f | ||
|
|
514db60617 | ||
|
|
8bc6e75319 | ||
|
|
2f74cfb42c | ||
|
|
1302e3c959 | ||
|
|
a5b031f906 | ||
|
|
f583354748 | ||
|
|
d12e8ec923 | ||
|
|
89f84c9a95 | ||
|
|
6103a22feb | ||
|
|
42264f402d | ||
|
|
abda9bc00a | ||
|
|
eec639d84e | ||
|
|
56b9107c6b | ||
|
|
b35b62d59f | ||
|
|
1b9310e766 | ||
|
|
a62d8381be | ||
|
|
8b32e6c15a | ||
|
|
c8ccb2bac7 | ||
|
|
ef3de1050f | ||
|
|
2add15bd72 | ||
|
|
e6edd9340e | ||
|
|
654a7a5d03 | ||
|
|
dba8ab947f | ||
|
|
787e06e3d8 | ||
|
|
ccd486f2a9 | ||
|
|
22d078b47f | ||
|
|
03490d6597 | ||
|
|
5f46d71af0 | ||
|
|
4f890c431c | ||
|
|
c110a97d8a | ||
|
|
6872eb802c | ||
|
|
662110c269 | ||
|
|
5083188ed8 | ||
|
|
2036438203 | ||
|
|
476c2be5a6 | ||
|
|
ced66f1671 | ||
|
|
fb49371c6b | ||
|
|
fd07aa0f05 | ||
|
|
16518a4f89 | ||
|
|
bed2c29a33 | ||
|
|
e5b6d28bca | ||
|
|
1c9afcb84e | ||
|
|
b0dda6e6a7 | ||
|
|
d4025d95e7 | ||
|
|
3a058a6e34 | ||
|
|
aac7d564c8 | ||
|
|
9aa3442a17 | ||
|
|
c68d154f0f | ||
|
|
1b4ed69f41 | ||
|
|
8cef998f49 | ||
|
|
90d1223acd | ||
|
|
1f2506221a | ||
|
|
9f68ca5358 | ||
|
|
1ebb0f8c93 | ||
|
|
8a13a9df80 | ||
|
|
ddf5f2543c | ||
|
|
dbb2fe3e59 | ||
|
|
aa1fac62d5 | ||
|
|
111a313d51 | ||
|
|
0039f893cc | ||
|
|
ad6b26ba97 | ||
|
|
1ef4044419 | ||
|
|
accf2565a0 | ||
|
|
ec965f28c0 | ||
|
|
ebf95f637a | ||
|
|
abbfd42a6c | ||
|
|
db4208a7eb | ||
|
|
da54e1d87c | ||
|
|
e8532ef4de | ||
|
|
fa6d66db49 | ||
|
|
6604e7365f | ||
|
|
fcc1c2968d | ||
|
|
b3d3b14f79 | ||
|
|
8939f310db | ||
|
|
efec752985 | ||
|
|
e94ad78ea7 | ||
|
|
a27a325af7 | ||
|
|
6b06d490c5 | ||
|
|
13f8f39dd5 | ||
|
|
fe05cff64f | ||
|
|
d86837ac07 | ||
|
|
9a7edc6e52 | ||
|
|
ce8c9dd079 | ||
|
|
c8f6b7e0d6 | ||
|
|
f284d31861 | ||
|
|
76b0d2d5d8 | ||
|
|
2cab778f19 | ||
|
|
c31f8eb2e0 | ||
|
|
b618287585 | ||
|
|
63f4b42453 | ||
|
|
c7c0df0964 | ||
|
|
fb87fb5750 | ||
|
|
634b0aaa07 | ||
|
|
5002a89754 | ||
|
|
b367490edc | ||
|
|
e145f21512 | ||
|
|
ea4c50c2c2 | ||
|
|
d6021f4d22 | ||
|
|
b9a3290731 | ||
|
|
47ac0d5c3e | ||
|
|
75f225d6dc | ||
|
|
adb7bf7016 | ||
|
|
897bb338f9 | ||
|
|
767699a066 | ||
|
|
7161f22706 | ||
|
|
ddec8097b7 | ||
|
|
95c3cc5c00 | ||
|
|
60c53705ca | ||
|
|
51d8044a54 | ||
|
|
ce697ab0f5 | ||
|
|
ca310966b2 | ||
|
|
25f92ce584 | ||
|
|
2c96af9aea | ||
|
|
04c7e680fd | ||
|
|
9b0ef85f77 | ||
|
|
a8f1160743 | ||
|
|
feca1f0502 | ||
|
|
d0a5a5ef37 | ||
|
|
97f570a4ee | ||
|
|
9ebbf7ce94 | ||
|
|
c2ecbf071f | ||
|
|
b1c489090e | ||
|
|
c9a03c5b01 | ||
|
|
517c578a5f | ||
|
|
14837e34fb | ||
|
|
f10ec3271a | ||
|
|
4e2820d6e3 | ||
|
|
72a0e081ca | ||
|
|
b1130cb1c3 | ||
|
|
59936631ec | ||
|
|
3af22ce754 | ||
|
|
5546b8ff43 | ||
|
|
a07092b7e6 | ||
|
|
ac01c62e6e | ||
|
|
f47f7dd9d2 | ||
|
|
13d970c7ce | ||
|
|
e2409a5fab | ||
|
|
e30aae3399 | ||
|
|
b81f2b52d0 | ||
|
|
9e43e03db4 | ||
|
|
a475cf68bf | ||
|
|
e889bc680b | ||
|
|
48f235ea5a | ||
|
|
047771b9f4 | ||
|
|
c096b20d9c | ||
|
|
11a7ccc37e | ||
|
|
d9b9e6c0b1 | ||
|
|
f18d42f08e | ||
|
|
4986f008b9 | ||
|
|
a8ce199e0d | ||
|
|
c77e8730d6 | ||
|
|
3406846c82 | ||
|
|
bddc6ae66b | ||
|
|
5c343638b6 | ||
|
|
0722960260 | ||
|
|
e959c468f6 | ||
|
|
ba871ec46a | ||
|
|
bd6e3c022f | ||
|
|
a74e04141c | ||
|
|
7c504a10a8 | ||
|
|
ae98745439 | ||
|
|
57259aee00 | ||
|
|
8759fff116 | ||
|
|
dc1a40ea74 | ||
|
|
483d9bf26c | ||
|
|
b24d60e98d | ||
|
|
0f8bd869d8 | ||
|
|
49546cd627 | ||
|
|
6e852d2e65 | ||
|
|
5a4f595341 | ||
|
|
6019d2ee14 | ||
|
|
b5375114d3 | ||
|
|
fc13e56cea | ||
|
|
f937bf3abb | ||
|
|
586e8963a8 | ||
|
|
bdfa76ed9a | ||
|
|
d133f904d3 | ||
|
|
69af9e0dbd | ||
|
|
72c5141dec | ||
|
|
5651d2c43d | ||
|
|
fc236f930b | ||
|
|
570af500f4 | ||
|
|
38913288d8 | ||
|
|
c14d7d9509 | ||
|
|
79f5be4170 |
@@ -334,6 +334,11 @@ EXPORT_PAGE_SIZE=a4
|
||||
# Example: EXPORT_PDF_COMMAND="/scripts/convert.sh {input_html_path} {output_pdf_path}"
|
||||
EXPORT_PDF_COMMAND=false
|
||||
|
||||
# Export PDF Command Timeout
|
||||
# The number of seconds that the export PDF command will run before a timeout occurs.
|
||||
# Only applies for the EXPORT_PDF_COMMAND option, not for DomPDF or wkhtmltopdf.
|
||||
EXPORT_PDF_COMMAND_TIMEOUT=15
|
||||
|
||||
# Set path to wkhtmltopdf binary for PDF generation.
|
||||
# Can be 'false' or a path path like: '/home/bins/wkhtmltopdf'
|
||||
# When false, BookStack will attempt to find a wkhtmltopdf in the application
|
||||
|
||||
33
.github/translators.txt
vendored
33
.github/translators.txt
vendored
@@ -141,7 +141,7 @@ Kauê Sena (kaue.sena.ks) :: Portuguese, Brazilian
|
||||
MatthieuParis :: French
|
||||
Douradinho :: Portuguese, Brazilian; Portuguese
|
||||
Gaku Yaguchi (tama11) :: Japanese
|
||||
johnroyer :: Chinese Traditional
|
||||
Zero Huang (johnroyer) :: Chinese Traditional
|
||||
jackaaa :: Chinese Traditional
|
||||
Irfan Hukama Arsyad (IrfanArsyad) :: Indonesian
|
||||
Jeff Huang (s8321414) :: Chinese Traditional
|
||||
@@ -347,7 +347,7 @@ Taygun Yıldırım (yildirimtaygun) :: Turkish
|
||||
robing29 :: German
|
||||
Bruno Eduardo de Jesus Barroso (brunoejb) :: Portuguese, Brazilian
|
||||
Igor V Belousov (biv) :: Russian
|
||||
David Bauer (davbauer) :: German
|
||||
David Bauer (davbauer) :: German; German Informal
|
||||
Guttorm Hveem (guttormhveem) :: Norwegian Nynorsk; Norwegian Bokmal
|
||||
Minh Giang Truong (minhgiang1204) :: Vietnamese
|
||||
Ioannis Ioannides (i.ioannides) :: Greek
|
||||
@@ -389,7 +389,7 @@ Marc Hagen (MarcHagen) :: Dutch
|
||||
Kasper Alsøe (zeonos) :: Danish
|
||||
sultani :: Persian
|
||||
renge :: Korean
|
||||
Tim (thegatesdev) :: Dutch; German Informal; Romanian; French; Catalan; Czech; Danish; German; Finnish; Hungarian; Italian; Japanese; Korean; Polish; Russian; Ukrainian; Chinese Simplified; Chinese Traditional; Portuguese, Brazilian; Persian; Spanish, Argentina; Croatian; Norwegian Nynorsk; Estonian; Uzbek; Norwegian Bokmal
|
||||
Tim (thegatesdev) :: Dutch; German Informal; French; Romanian; Catalan; Czech; Danish; German; Finnish; Hungarian; Italian; Japanese; Korean; Polish; Russian; Ukrainian; Chinese Simplified; Chinese Traditional; Portuguese, Brazilian; Persian; Spanish, Argentina; Croatian; Norwegian Nynorsk; Estonian; Uzbek; Norwegian Bokmal
|
||||
Irdi (irdiOL) :: Albanian
|
||||
KateBarber :: Welsh
|
||||
Twister (theuncles75) :: Hebrew
|
||||
@@ -422,3 +422,30 @@ crow_ :: Latvian
|
||||
JocelynDelalande :: French
|
||||
Jan (JW-CH) :: German Informal
|
||||
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
|
||||
Ricard López Torres (richilpez.torres) :: Catalan
|
||||
sarahalves7 :: Portuguese, Brazilian
|
||||
petr.husak :: Czech
|
||||
javadataherian :: Persian
|
||||
Ludo-code :: French
|
||||
hollsten :: Swedish
|
||||
Ngoc Lan Phung (lanpncz) :: Vietnamese
|
||||
Worive :: Catalan
|
||||
Илья Скаба (skabailya) :: Russian
|
||||
Irjan Olsen (Irch) :: Norwegian Bokmal
|
||||
Aleksandar Jovanovic (jovanoviczaleksandar) :: Serbian (Cyrillic)
|
||||
Red (RedVortex) :: Hebrew
|
||||
xgrug :: Chinese Simplified
|
||||
HrCalmar :: Danish
|
||||
Avishay Rapp (AvishayRapp) :: Hebrew
|
||||
matthias4217 :: French
|
||||
Berke BOYLU2 (berkeboylu2) :: Turkish
|
||||
etwas7B :: German
|
||||
|
||||
4
.github/workflows/lint-js.yml
vendored
4
.github/workflows/lint-js.yml
vendored
@@ -13,9 +13,9 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.ref != 'refs/heads/l10n_development' }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install NPM deps
|
||||
run: npm ci
|
||||
|
||||
29
.github/workflows/test-js.yml
vendored
Normal file
29
.github/workflows/test-js.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
name: test-js
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.json'
|
||||
pull_request:
|
||||
paths:
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.json'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.ref != 'refs/heads/l10n_development' }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install NPM deps
|
||||
run: npm ci
|
||||
|
||||
- name: Run TypeScript type checking
|
||||
run: npm run ts:lint
|
||||
|
||||
- name: Run JavaScript tests
|
||||
run: npm run test
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,6 +2,7 @@
|
||||
/node_modules
|
||||
/.vscode
|
||||
/composer
|
||||
/coverage
|
||||
Homestead.yaml
|
||||
.env
|
||||
.idea
|
||||
|
||||
@@ -32,13 +32,17 @@ class ConfirmEmailController extends Controller
|
||||
|
||||
/**
|
||||
* Shows a notice that a user's email address has not been confirmed,
|
||||
* Also has the option to re-send the confirmation email.
|
||||
* along with the option to re-send the confirmation email.
|
||||
*/
|
||||
public function showAwaiting()
|
||||
{
|
||||
$user = $this->loginService->getLastLoginAttemptUser();
|
||||
if ($user === null) {
|
||||
$this->showErrorNotification(trans('errors.login_user_not_found'));
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
return view('auth.user-unconfirmed', ['user' => $user]);
|
||||
return view('auth.register-confirm-awaiting');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,19 +94,24 @@ class ConfirmEmailController extends Controller
|
||||
/**
|
||||
* Resend the confirmation email.
|
||||
*/
|
||||
public function resend(Request $request)
|
||||
public function resend()
|
||||
{
|
||||
$this->validate($request, [
|
||||
'email' => ['required', 'email', 'exists:users,email'],
|
||||
]);
|
||||
$user = $this->userRepo->getByEmail($request->get('email'));
|
||||
$user = $this->loginService->getLastLoginAttemptUser();
|
||||
if ($user === null) {
|
||||
$this->showErrorNotification(trans('errors.login_user_not_found'));
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
try {
|
||||
$this->emailConfirmationService->sendConfirmation($user);
|
||||
} catch (ConfirmationEmailException $e) {
|
||||
$this->showErrorNotification($e->getMessage());
|
||||
|
||||
return redirect('/login');
|
||||
} catch (Exception $e) {
|
||||
$this->showErrorNotification(trans('auth.email_confirm_send_error'));
|
||||
|
||||
return redirect('/register/confirm');
|
||||
return redirect('/register/awaiting');
|
||||
}
|
||||
|
||||
$this->showSuccessNotification(trans('auth.email_confirm_resent'));
|
||||
|
||||
@@ -6,6 +6,7 @@ use BookStack\Activity\ActivityType;
|
||||
use BookStack\Http\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Support\Sleep;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
@@ -32,6 +33,10 @@ class ForgotPasswordController extends Controller
|
||||
'email' => ['required', 'email'],
|
||||
]);
|
||||
|
||||
// Add random pause to the response to help avoid time-base sniffing
|
||||
// of valid resets via slower email send handling.
|
||||
Sleep::for(random_int(1000, 3000))->milliseconds();
|
||||
|
||||
// We will send the password reset link to this user. Once we have attempted
|
||||
// to send the link, we will examine the response then see the message we
|
||||
// need to show to the user. Finally, we'll send out a proper response.
|
||||
|
||||
@@ -17,7 +17,7 @@ trait HandlesPartialLogins
|
||||
$user = auth()->user() ?? $loginService->getLastLoginAttemptUser();
|
||||
|
||||
if (!$user) {
|
||||
throw new NotFoundException('A user for this action could not be found');
|
||||
throw new NotFoundException(trans('errors.login_user_not_found'));
|
||||
}
|
||||
|
||||
return $user;
|
||||
|
||||
@@ -15,14 +15,11 @@ use Illuminate\Validation\Rules\Password as PasswordRule;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
protected LoginService $loginService;
|
||||
|
||||
public function __construct(LoginService $loginService)
|
||||
{
|
||||
public function __construct(
|
||||
protected LoginService $loginService
|
||||
) {
|
||||
$this->middleware('guest');
|
||||
$this->middleware('guard:standard');
|
||||
|
||||
$this->loginService = $loginService;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,7 +17,7 @@ class EmailConfirmationService extends UserTokenService
|
||||
*
|
||||
* @throws ConfirmationEmailException
|
||||
*/
|
||||
public function sendConfirmation(User $user)
|
||||
public function sendConfirmation(User $user): void
|
||||
{
|
||||
if ($user->email_confirmed) {
|
||||
throw new ConfirmationEmailException(trans('errors.email_already_confirmed'), '/login');
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
10
app/Access/UserInviteException.php
Normal file
10
app/Access/UserInviteException.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Access;
|
||||
|
||||
use Exception;
|
||||
|
||||
class UserInviteException extends Exception
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -13,11 +13,17 @@ class UserInviteService extends UserTokenService
|
||||
/**
|
||||
* Send an invitation to a user to sign into BookStack
|
||||
* Removes existing invitation tokens.
|
||||
* @throws UserInviteException
|
||||
*/
|
||||
public function sendInvitation(User $user)
|
||||
{
|
||||
$this->deleteByUser($user);
|
||||
$token = $this->createTokenForUser($user);
|
||||
$user->notify(new UserInviteNotification($token));
|
||||
|
||||
try {
|
||||
$user->notify(new UserInviteNotification($token));
|
||||
} catch (\Exception $exception) {
|
||||
throw new UserInviteException($exception->getMessage(), $exception->getCode(), $exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ abstract class BaseActivityNotification extends MailNotification
|
||||
protected function buildReasonFooterLine(LocaleDefinition $locale): LinkedMailMessageLine
|
||||
{
|
||||
return new LinkedMailMessageLine(
|
||||
url('/preferences/notifications'),
|
||||
url('/my-account/notifications'),
|
||||
$locale->trans('notifications.footer_reason'),
|
||||
$locale->trans('notifications.footer_reason_link'),
|
||||
);
|
||||
|
||||
@@ -64,4 +64,14 @@ class MetaController extends Controller
|
||||
'jsLibData' => file_get_contents(base_path('dev/licensing/js-library-licenses.txt')),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the view for /opensearch.xml.
|
||||
*/
|
||||
public function opensearch()
|
||||
{
|
||||
return response()
|
||||
->view('misc.opensearch')
|
||||
->header('Content-Type', 'application/opensearchdescription+xml');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,5 +81,9 @@ class RouteServiceProvider extends ServiceProvider
|
||||
RateLimiter::for('api', function (Request $request) {
|
||||
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
|
||||
});
|
||||
|
||||
RateLimiter::for('public', function (Request $request) {
|
||||
return Limit::perMinute(10)->by($request->ip());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,8 +53,8 @@ return [
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
'path' => storage_path('framework/cache'),
|
||||
'lock_path' => storage_path('framework/cache'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
|
||||
@@ -29,6 +29,10 @@ return [
|
||||
// Example: EXPORT_PDF_COMMAND="/scripts/convert.sh {input_html_path} {output_pdf_path}"
|
||||
'pdf_command' => env('EXPORT_PDF_COMMAND', false),
|
||||
|
||||
// The amount of time allowed for PDF generation command to run
|
||||
// before the process times out and is stopped.
|
||||
'pdf_command_timeout' => env('EXPORT_PDF_COMMAND_TIMEOUT', 15),
|
||||
|
||||
// 2024-04: Snappy/WKHTMLtoPDF now considered deprecated in regard to BookStack support.
|
||||
'snappy' => [
|
||||
'pdf_binary' => env('WKHTMLTOPDF', false),
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace BookStack\Entities\Models;
|
||||
|
||||
use BookStack\Entities\Tools\PageContent;
|
||||
use BookStack\Entities\Tools\PageEditorType;
|
||||
use BookStack\Permissions\PermissionApplicator;
|
||||
use BookStack\Uploads\Attachment;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
@@ -11,7 +11,7 @@ use BookStack\Entities\Models\PageRevision;
|
||||
use BookStack\Entities\Queries\EntityQueries;
|
||||
use BookStack\Entities\Tools\BookContents;
|
||||
use BookStack\Entities\Tools\PageContent;
|
||||
use BookStack\Entities\Tools\PageEditorData;
|
||||
use BookStack\Entities\Tools\PageEditorType;
|
||||
use BookStack\Entities\Tools\TrashCan;
|
||||
use BookStack\Exceptions\MoveOperationException;
|
||||
use BookStack\Exceptions\PermissionsException;
|
||||
@@ -43,6 +43,7 @@ class PageRepo
|
||||
'owned_by' => user()->id,
|
||||
'updated_by' => user()->id,
|
||||
'draft' => true,
|
||||
'editor' => PageEditorType::getSystemDefault()->value,
|
||||
]);
|
||||
|
||||
if ($parent instanceof Chapter) {
|
||||
@@ -77,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);
|
||||
@@ -126,7 +128,9 @@ class PageRepo
|
||||
}
|
||||
|
||||
$pageContent = new PageContent($page);
|
||||
$currentEditor = $page->editor ?: PageEditorData::getSystemDefaultEditor();
|
||||
$defaultEditor = PageEditorType::getSystemDefault();
|
||||
$currentEditor = PageEditorType::forPage($page) ?: $defaultEditor;
|
||||
$inputEditor = PageEditorType::fromRequestValue($input['editor'] ?? '') ?? $currentEditor;
|
||||
$newEditor = $currentEditor;
|
||||
|
||||
$haveInput = isset($input['markdown']) || isset($input['html']);
|
||||
@@ -135,15 +139,17 @@ class PageRepo
|
||||
if ($haveInput && $inputEmpty) {
|
||||
$pageContent->setNewHTML('', user());
|
||||
} elseif (!empty($input['markdown']) && is_string($input['markdown'])) {
|
||||
$newEditor = 'markdown';
|
||||
$newEditor = PageEditorType::Markdown;
|
||||
$pageContent->setNewMarkdown($input['markdown'], user());
|
||||
} elseif (isset($input['html'])) {
|
||||
$newEditor = 'wysiwyg';
|
||||
$newEditor = ($inputEditor->isHtmlBased() ? $inputEditor : null) ?? ($defaultEditor->isHtmlBased() ? $defaultEditor : null) ?? PageEditorType::WysiwygTinymce;
|
||||
$pageContent->setNewHTML($input['html'], user());
|
||||
}
|
||||
|
||||
if ($newEditor !== $currentEditor && userCan('editor-change')) {
|
||||
$page->editor = $newEditor;
|
||||
if (($newEditor !== $currentEditor || empty($page->editor)) && userCan('editor-change')) {
|
||||
$page->editor = $newEditor->value;
|
||||
} elseif (empty($page->editor)) {
|
||||
$page->editor = $defaultEditor->value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -74,17 +74,17 @@ class PageEditorData
|
||||
];
|
||||
}
|
||||
|
||||
protected function updateContentForEditor(Page $page, string $editorType): void
|
||||
protected function updateContentForEditor(Page $page, PageEditorType $editorType): void
|
||||
{
|
||||
$isHtml = !empty($page->html) && empty($page->markdown);
|
||||
|
||||
// HTML to markdown-clean conversion
|
||||
if ($editorType === 'markdown' && $isHtml && $this->requestedEditor === 'markdown-clean') {
|
||||
if ($editorType === PageEditorType::Markdown && $isHtml && $this->requestedEditor === 'markdown-clean') {
|
||||
$page->markdown = (new HtmlToMarkdown($page->html))->convert();
|
||||
}
|
||||
|
||||
// Markdown to HTML conversion if we don't have HTML
|
||||
if ($editorType === 'wysiwyg' && !$isHtml) {
|
||||
if ($editorType->isHtmlBased() && !$isHtml) {
|
||||
$page->html = (new MarkdownToHtml($page->markdown))->convert();
|
||||
}
|
||||
}
|
||||
@@ -94,24 +94,16 @@ class PageEditorData
|
||||
* Defaults based upon the current content of the page otherwise will fall back
|
||||
* to system default but will take a requested type (if provided) if permissions allow.
|
||||
*/
|
||||
protected function getEditorType(Page $page): string
|
||||
protected function getEditorType(Page $page): PageEditorType
|
||||
{
|
||||
$editorType = $page->editor ?: self::getSystemDefaultEditor();
|
||||
$editorType = PageEditorType::forPage($page) ?: PageEditorType::getSystemDefault();
|
||||
|
||||
// Use requested editor if valid and if we have permission
|
||||
$requestedType = explode('-', $this->requestedEditor)[0];
|
||||
if (($requestedType === 'markdown' || $requestedType === 'wysiwyg') && userCan('editor-change')) {
|
||||
$requestedType = PageEditorType::fromRequestValue($this->requestedEditor);
|
||||
if ($requestedType && userCan('editor-change')) {
|
||||
$editorType = $requestedType;
|
||||
}
|
||||
|
||||
return $editorType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the configured system default editor.
|
||||
*/
|
||||
public static function getSystemDefaultEditor(): string
|
||||
{
|
||||
return setting('app-editor') === 'markdown' ? 'markdown' : 'wysiwyg';
|
||||
}
|
||||
}
|
||||
|
||||
37
app/Entities/Tools/PageEditorType.php
Normal file
37
app/Entities/Tools/PageEditorType.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Entities\Tools;
|
||||
|
||||
use BookStack\Entities\Models\Page;
|
||||
|
||||
enum PageEditorType: string
|
||||
{
|
||||
case WysiwygTinymce = 'wysiwyg';
|
||||
case WysiwygLexical = 'wysiwyg2024';
|
||||
case Markdown = 'markdown';
|
||||
|
||||
public function isHtmlBased(): bool
|
||||
{
|
||||
return match ($this) {
|
||||
self::WysiwygTinymce, self::WysiwygLexical => true,
|
||||
self::Markdown => false,
|
||||
};
|
||||
}
|
||||
|
||||
public static function fromRequestValue(string $value): static|null
|
||||
{
|
||||
$editor = explode('-', $value)[0];
|
||||
return static::tryFrom($editor);
|
||||
}
|
||||
|
||||
public static function forPage(Page $page): static|null
|
||||
{
|
||||
return static::tryFrom($page->editor);
|
||||
}
|
||||
|
||||
public static function getSystemDefault(): static
|
||||
{
|
||||
$setting = setting('app-editor');
|
||||
return static::tryFrom($setting) ?? static::WysiwygTinymce;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ namespace BookStack\Entities\Tools;
|
||||
use BookStack\Exceptions\PdfExportException;
|
||||
use Knp\Snappy\Pdf as SnappyPdf;
|
||||
use Dompdf\Dompdf;
|
||||
use Symfony\Component\Process\Exception\ProcessTimedOutException;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
class PdfGenerator
|
||||
@@ -85,9 +86,15 @@ class PdfGenerator
|
||||
|
||||
file_put_contents($inputHtml, $html);
|
||||
|
||||
$timeout = intval(config('exports.pdf_command_timeout'));
|
||||
$process = Process::fromShellCommandline($command);
|
||||
$process->setTimeout(15);
|
||||
$process->run();
|
||||
$process->setTimeout($timeout);
|
||||
|
||||
try {
|
||||
$process->run();
|
||||
} catch (ProcessTimedOutException $e) {
|
||||
throw new PdfExportException("PDF Export via command failed due to timeout at {$timeout} second(s)");
|
||||
}
|
||||
|
||||
if (!$process->isSuccessful()) {
|
||||
throw new PdfExportException("PDF Export via command failed with exit code {$process->getExitCode()}, stdout: {$process->getOutput()}, stderr: {$process->getErrorOutput()}");
|
||||
|
||||
@@ -9,16 +9,10 @@ use Illuminate\Http\Request;
|
||||
|
||||
class StoppedAuthenticationException extends \Exception implements Responsable
|
||||
{
|
||||
protected $user;
|
||||
protected $loginService;
|
||||
|
||||
/**
|
||||
* StoppedAuthenticationException constructor.
|
||||
*/
|
||||
public function __construct(User $user, LoginService $loginService)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->loginService = $loginService;
|
||||
public function __construct(
|
||||
protected User $user,
|
||||
protected LoginService $loginService
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
13
app/Search/Options/ExactSearchOption.php
Normal file
13
app/Search/Options/ExactSearchOption.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search\Options;
|
||||
|
||||
class ExactSearchOption extends SearchOption
|
||||
{
|
||||
public function toString(): string
|
||||
{
|
||||
$escaped = str_replace('\\', '\\\\', $this->value);
|
||||
$escaped = str_replace('"', '\"', $escaped);
|
||||
return ($this->negated ? '-' : '') . '"' . $escaped . '"';
|
||||
}
|
||||
}
|
||||
37
app/Search/Options/FilterSearchOption.php
Normal file
37
app/Search/Options/FilterSearchOption.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search\Options;
|
||||
|
||||
class FilterSearchOption extends SearchOption
|
||||
{
|
||||
protected string $name;
|
||||
|
||||
public function __construct(
|
||||
string $value,
|
||||
string $name,
|
||||
bool $negated = false,
|
||||
) {
|
||||
parent::__construct($value, $negated);
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function toString(): string
|
||||
{
|
||||
$valueText = ($this->value ? ':' . $this->value : '');
|
||||
$filterBrace = '{' . $this->name . $valueText . '}';
|
||||
return ($this->negated ? '-' : '') . $filterBrace;
|
||||
}
|
||||
|
||||
public function getKey(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public static function fromContentString(string $value, bool $negated = false): self
|
||||
{
|
||||
$explodedFilter = explode(':', $value, 2);
|
||||
$filterValue = (count($explodedFilter) > 1) ? $explodedFilter[1] : '';
|
||||
$filterName = $explodedFilter[0];
|
||||
return new self($filterValue, $filterName, $negated);
|
||||
}
|
||||
}
|
||||
26
app/Search/Options/SearchOption.php
Normal file
26
app/Search/Options/SearchOption.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search\Options;
|
||||
|
||||
abstract class SearchOption
|
||||
{
|
||||
public function __construct(
|
||||
public string $value,
|
||||
public bool $negated = false,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the key used for this option when used in a map.
|
||||
* Null indicates to use the index of the containing array.
|
||||
*/
|
||||
public function getKey(): string|null
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the search string representation for this search option.
|
||||
*/
|
||||
abstract public function toString(): string;
|
||||
}
|
||||
37
app/Search/Options/TagSearchOption.php
Normal file
37
app/Search/Options/TagSearchOption.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search\Options;
|
||||
|
||||
class TagSearchOption extends SearchOption
|
||||
{
|
||||
/**
|
||||
* Acceptable operators to be used within a tag search option.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected array $queryOperators = ['<=', '>=', '=', '<', '>', 'like', '!='];
|
||||
|
||||
public function toString(): string
|
||||
{
|
||||
return ($this->negated ? '-' : '') . "[{$this->value}]";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{name: string, operator: string, value: string}
|
||||
*/
|
||||
public function getParts(): array
|
||||
{
|
||||
$operatorRegex = implode('|', array_map(fn($op) => preg_quote($op), $this->queryOperators));
|
||||
preg_match('/^(.*?)((' . $operatorRegex . ')(.*?))?$/', $this->value, $tagSplit);
|
||||
|
||||
$extractedOperator = count($tagSplit) > 2 ? $tagSplit[3] : '';
|
||||
$tagOperator = in_array($extractedOperator, $this->queryOperators) ? $extractedOperator : '=';
|
||||
$tagValue = count($tagSplit) > 3 ? $tagSplit[4] : '';
|
||||
|
||||
return [
|
||||
'name' => $tagSplit[1],
|
||||
'operator' => $tagOperator,
|
||||
'value' => $tagValue,
|
||||
];
|
||||
}
|
||||
}
|
||||
11
app/Search/Options/TermSearchOption.php
Normal file
11
app/Search/Options/TermSearchOption.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search\Options;
|
||||
|
||||
class TermSearchOption extends SearchOption
|
||||
{
|
||||
public function toString(): string
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
}
|
||||
82
app/Search/SearchOptionSet.php
Normal file
82
app/Search/SearchOptionSet.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Search;
|
||||
|
||||
use BookStack\Search\Options\SearchOption;
|
||||
|
||||
/**
|
||||
* @template T of SearchOption
|
||||
*/
|
||||
class SearchOptionSet
|
||||
{
|
||||
/**
|
||||
* @var T[]
|
||||
*/
|
||||
protected array $options = [];
|
||||
|
||||
public function __construct(array $options = [])
|
||||
{
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
public function toValueArray(): array
|
||||
{
|
||||
return array_map(fn(SearchOption $option) => $option->value, $this->options);
|
||||
}
|
||||
|
||||
public function toValueMap(): array
|
||||
{
|
||||
$map = [];
|
||||
foreach ($this->options as $index => $option) {
|
||||
$key = $option->getKey() ?? $index;
|
||||
$map[$key] = $option->value;
|
||||
}
|
||||
return $map;
|
||||
}
|
||||
|
||||
public function merge(SearchOptionSet $set): self
|
||||
{
|
||||
return new self(array_merge($this->options, $set->options));
|
||||
}
|
||||
|
||||
public function filterEmpty(): self
|
||||
{
|
||||
$filteredOptions = array_values(array_filter($this->options, fn (SearchOption $option) => !empty($option->value)));
|
||||
return new self($filteredOptions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param class-string<SearchOption> $class
|
||||
*/
|
||||
public static function fromValueArray(array $values, string $class): self
|
||||
{
|
||||
$options = array_map(fn($val) => new $class($val), $values);
|
||||
return new self($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return T[]
|
||||
*/
|
||||
public function all(): array
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self<T>
|
||||
*/
|
||||
public function negated(): self
|
||||
{
|
||||
$values = array_values(array_filter($this->options, fn (SearchOption $option) => $option->negated));
|
||||
return new self($values);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self<T>
|
||||
*/
|
||||
public function nonNegated(): self
|
||||
{
|
||||
$values = array_values(array_filter($this->options, fn (SearchOption $option) => !$option->negated));
|
||||
return new self($values);
|
||||
}
|
||||
}
|
||||
@@ -2,26 +2,39 @@
|
||||
|
||||
namespace BookStack\Search;
|
||||
|
||||
use BookStack\Search\Options\ExactSearchOption;
|
||||
use BookStack\Search\Options\FilterSearchOption;
|
||||
use BookStack\Search\Options\SearchOption;
|
||||
use BookStack\Search\Options\TagSearchOption;
|
||||
use BookStack\Search\Options\TermSearchOption;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SearchOptions
|
||||
{
|
||||
public array $searches = [];
|
||||
public array $exacts = [];
|
||||
public array $tags = [];
|
||||
public array $filters = [];
|
||||
/** @var SearchOptionSet<TermSearchOption> */
|
||||
public SearchOptionSet $searches;
|
||||
/** @var SearchOptionSet<ExactSearchOption> */
|
||||
public SearchOptionSet $exacts;
|
||||
/** @var SearchOptionSet<TagSearchOption> */
|
||||
public SearchOptionSet $tags;
|
||||
/** @var SearchOptionSet<FilterSearchOption> */
|
||||
public SearchOptionSet $filters;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->searches = new SearchOptionSet();
|
||||
$this->exacts = new SearchOptionSet();
|
||||
$this->tags = new SearchOptionSet();
|
||||
$this->filters = new SearchOptionSet();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new instance from a search string.
|
||||
*/
|
||||
public static function fromString(string $search): self
|
||||
{
|
||||
$decoded = static::decode($search);
|
||||
$instance = new SearchOptions();
|
||||
foreach ($decoded as $type => $value) {
|
||||
$instance->$type = $value;
|
||||
}
|
||||
|
||||
$instance = new self();
|
||||
$instance->addOptionsFromString($search);
|
||||
return $instance;
|
||||
}
|
||||
|
||||
@@ -41,46 +54,64 @@ class SearchOptions
|
||||
}
|
||||
|
||||
$instance = new SearchOptions();
|
||||
$inputs = $request->only(['search', 'types', 'filters', 'exact', 'tags']);
|
||||
$inputs = $request->only(['search', 'types', 'filters', 'exact', 'tags', 'extras']);
|
||||
|
||||
$parsedStandardTerms = static::parseStandardTermString($inputs['search'] ?? '');
|
||||
$instance->searches = array_filter($parsedStandardTerms['terms']);
|
||||
$instance->exacts = array_filter($parsedStandardTerms['exacts']);
|
||||
|
||||
array_push($instance->exacts, ...array_filter($inputs['exact'] ?? []));
|
||||
|
||||
$instance->tags = array_filter($inputs['tags'] ?? []);
|
||||
$inputExacts = array_filter($inputs['exact'] ?? []);
|
||||
$instance->searches = SearchOptionSet::fromValueArray(array_filter($parsedStandardTerms['terms']), TermSearchOption::class);
|
||||
$instance->exacts = SearchOptionSet::fromValueArray(array_filter($parsedStandardTerms['exacts']), ExactSearchOption::class);
|
||||
$instance->exacts = $instance->exacts->merge(SearchOptionSet::fromValueArray($inputExacts, ExactSearchOption::class));
|
||||
$instance->tags = SearchOptionSet::fromValueArray(array_filter($inputs['tags'] ?? []), TagSearchOption::class);
|
||||
|
||||
$cleanedFilters = [];
|
||||
foreach (($inputs['filters'] ?? []) as $filterKey => $filterVal) {
|
||||
if (empty($filterVal)) {
|
||||
continue;
|
||||
}
|
||||
$instance->filters[$filterKey] = $filterVal === 'true' ? '' : $filterVal;
|
||||
$cleanedFilterVal = $filterVal === 'true' ? '' : $filterVal;
|
||||
$cleanedFilters[] = new FilterSearchOption($cleanedFilterVal, $filterKey);
|
||||
}
|
||||
|
||||
if (isset($inputs['types']) && count($inputs['types']) < 4) {
|
||||
$instance->filters['type'] = implode('|', $inputs['types']);
|
||||
$cleanedFilters[] = new FilterSearchOption(implode('|', $inputs['types']), 'type');
|
||||
}
|
||||
|
||||
$instance->filters = new SearchOptionSet($cleanedFilters);
|
||||
|
||||
// Parse and merge in extras if provided
|
||||
if (!empty($inputs['extras'])) {
|
||||
$extras = static::fromString($inputs['extras']);
|
||||
$instance->searches = $instance->searches->merge($extras->searches);
|
||||
$instance->exacts = $instance->exacts->merge($extras->exacts);
|
||||
$instance->tags = $instance->tags->merge($extras->tags);
|
||||
$instance->filters = $instance->filters->merge($extras->filters);
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a search string into an array of terms.
|
||||
* Decode a search string and add its contents to this instance.
|
||||
*/
|
||||
protected static function decode(string $searchString): array
|
||||
protected function addOptionsFromString(string $searchString): void
|
||||
{
|
||||
/** @var array<string, SearchOption[]> $terms */
|
||||
$terms = [
|
||||
'searches' => [],
|
||||
'exacts' => [],
|
||||
'tags' => [],
|
||||
'filters' => [],
|
||||
];
|
||||
|
||||
$patterns = [
|
||||
'exacts' => '/"((?:\\\\.|[^"\\\\])*)"/',
|
||||
'tags' => '/\[(.*?)\]/',
|
||||
'filters' => '/\{(.*?)\}/',
|
||||
'exacts' => '/-?"((?:\\\\.|[^"\\\\])*)"/',
|
||||
'tags' => '/-?\[(.*?)\]/',
|
||||
'filters' => '/-?\{(.*?)\}/',
|
||||
];
|
||||
|
||||
$constructors = [
|
||||
'exacts' => fn(string $value, bool $negated) => new ExactSearchOption($value, $negated),
|
||||
'tags' => fn(string $value, bool $negated) => new TagSearchOption($value, $negated),
|
||||
'filters' => fn(string $value, bool $negated) => FilterSearchOption::fromContentString($value, $negated),
|
||||
];
|
||||
|
||||
// Parse special terms
|
||||
@@ -88,34 +119,32 @@ class SearchOptions
|
||||
$matches = [];
|
||||
preg_match_all($pattern, $searchString, $matches);
|
||||
if (count($matches) > 0) {
|
||||
$terms[$termType] = $matches[1];
|
||||
foreach ($matches[1] as $index => $value) {
|
||||
$negated = str_starts_with($matches[0][$index], '-');
|
||||
$terms[$termType][] = $constructors[$termType]($value, $negated);
|
||||
}
|
||||
$searchString = preg_replace($pattern, '', $searchString);
|
||||
}
|
||||
}
|
||||
|
||||
// Unescape exacts and backslash escapes
|
||||
foreach ($terms['exacts'] as $index => $exact) {
|
||||
$terms['exacts'][$index] = static::decodeEscapes($exact);
|
||||
foreach ($terms['exacts'] as $exact) {
|
||||
$exact->value = static::decodeEscapes($exact->value);
|
||||
}
|
||||
|
||||
// Parse standard terms
|
||||
$parsedStandardTerms = static::parseStandardTermString($searchString);
|
||||
array_push($terms['searches'], ...$parsedStandardTerms['terms']);
|
||||
array_push($terms['exacts'], ...$parsedStandardTerms['exacts']);
|
||||
$this->searches = $this->searches
|
||||
->merge(SearchOptionSet::fromValueArray($parsedStandardTerms['terms'], TermSearchOption::class))
|
||||
->filterEmpty();
|
||||
$this->exacts = $this->exacts
|
||||
->merge(new SearchOptionSet($terms['exacts']))
|
||||
->merge(SearchOptionSet::fromValueArray($parsedStandardTerms['exacts'], ExactSearchOption::class))
|
||||
->filterEmpty();
|
||||
|
||||
// Split filter values out
|
||||
$splitFilters = [];
|
||||
foreach ($terms['filters'] as $filter) {
|
||||
$explodedFilter = explode(':', $filter, 2);
|
||||
$splitFilters[$explodedFilter[0]] = (count($explodedFilter) > 1) ? $explodedFilter[1] : '';
|
||||
}
|
||||
$terms['filters'] = $splitFilters;
|
||||
|
||||
// Filter down terms where required
|
||||
$terms['exacts'] = array_filter($terms['exacts']);
|
||||
$terms['searches'] = array_filter($terms['searches']);
|
||||
|
||||
return $terms;
|
||||
// Add tags & filters
|
||||
$this->tags = $this->tags->merge(new SearchOptionSet($terms['tags']));
|
||||
$this->filters = $this->filters->merge(new SearchOptionSet($terms['filters']));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,7 +204,9 @@ class SearchOptions
|
||||
*/
|
||||
public function setFilter(string $filterName, string $filterValue = ''): void
|
||||
{
|
||||
$this->filters[$filterName] = $filterValue;
|
||||
$this->filters = $this->filters->merge(
|
||||
new SearchOptionSet([new FilterSearchOption($filterValue, $filterName)])
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,22 +214,43 @@ class SearchOptions
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
$parts = $this->searches;
|
||||
$options = [
|
||||
...$this->searches->all(),
|
||||
...$this->exacts->all(),
|
||||
...$this->tags->all(),
|
||||
...$this->filters->all(),
|
||||
];
|
||||
|
||||
foreach ($this->exacts as $term) {
|
||||
$escaped = str_replace('\\', '\\\\', $term);
|
||||
$escaped = str_replace('"', '\"', $escaped);
|
||||
$parts[] = '"' . $escaped . '"';
|
||||
}
|
||||
|
||||
foreach ($this->tags as $term) {
|
||||
$parts[] = "[{$term}]";
|
||||
}
|
||||
|
||||
foreach ($this->filters as $filterName => $filterVal) {
|
||||
$parts[] = '{' . $filterName . ($filterVal ? ':' . $filterVal : '') . '}';
|
||||
}
|
||||
$parts = array_map(fn(SearchOption $o) => $o->toString(), $options);
|
||||
|
||||
return implode(' ', $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the search options that don't have UI controls provided for.
|
||||
* Provided back as a key => value array with the keys being expected
|
||||
* input names for a search form, and values being the option value.
|
||||
*/
|
||||
public function getAdditionalOptionsString(): string
|
||||
{
|
||||
$options = [];
|
||||
|
||||
// Handle filters without UI support
|
||||
$userFilters = ['updated_by', 'created_by', 'owned_by'];
|
||||
$unsupportedFilters = ['is_template', 'sort_by'];
|
||||
foreach ($this->filters->all() as $filter) {
|
||||
if (in_array($filter->getKey(), $userFilters, true) && $filter->value !== null && $filter->value !== 'me') {
|
||||
$options[] = $filter;
|
||||
} else if (in_array($filter->getKey(), $unsupportedFilters, true)) {
|
||||
$options[] = $filter;
|
||||
}
|
||||
}
|
||||
|
||||
// Negated items
|
||||
array_push($options, ...$this->exacts->negated()->all());
|
||||
array_push($options, ...$this->tags->negated()->all());
|
||||
array_push($options, ...$this->filters->negated()->all());
|
||||
|
||||
return implode(' ', array_map(fn(SearchOption $o) => $o->toString(), $options));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,11 +25,12 @@ class SearchResultsFormatter
|
||||
* Update the given entity model to set attributes used for previews of the item
|
||||
* primarily within search result lists.
|
||||
*/
|
||||
protected function setSearchPreview(Entity $entity, SearchOptions $options)
|
||||
protected function setSearchPreview(Entity $entity, SearchOptions $options): void
|
||||
{
|
||||
$textProperty = $entity->textField;
|
||||
$textContent = $entity->$textProperty;
|
||||
$terms = array_merge($options->exacts, $options->searches);
|
||||
$relevantSearchOptions = $options->exacts->merge($options->searches);
|
||||
$terms = $relevantSearchOptions->toValueArray();
|
||||
|
||||
$originalContentByNewAttribute = [
|
||||
'preview_name' => $entity->name,
|
||||
|
||||
@@ -7,6 +7,7 @@ use BookStack\Entities\Models\Entity;
|
||||
use BookStack\Entities\Models\Page;
|
||||
use BookStack\Entities\Queries\EntityQueries;
|
||||
use BookStack\Permissions\PermissionApplicator;
|
||||
use BookStack\Search\Options\TagSearchOption;
|
||||
use BookStack\Users\Models\User;
|
||||
use Illuminate\Database\Connection;
|
||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||
@@ -16,31 +17,21 @@ use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use SplObjectStorage;
|
||||
use WeakMap;
|
||||
|
||||
class SearchRunner
|
||||
{
|
||||
/**
|
||||
* Acceptable operators to be used in a query.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected array $queryOperators = ['<=', '>=', '=', '<', '>', 'like', '!='];
|
||||
|
||||
/**
|
||||
* Retain a cache of score adjusted terms for specific search options.
|
||||
* From PHP>=8 this can be made into a WeakMap instead.
|
||||
*
|
||||
* @var SplObjectStorage
|
||||
*/
|
||||
protected $termAdjustmentCache;
|
||||
protected WeakMap $termAdjustmentCache;
|
||||
|
||||
public function __construct(
|
||||
protected EntityProvider $entityProvider,
|
||||
protected PermissionApplicator $permissions,
|
||||
protected EntityQueries $entityQueries,
|
||||
) {
|
||||
$this->termAdjustmentCache = new SplObjectStorage();
|
||||
$this->termAdjustmentCache = new WeakMap();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,10 +46,11 @@ class SearchRunner
|
||||
$entityTypes = array_keys($this->entityProvider->all());
|
||||
$entityTypesToSearch = $entityTypes;
|
||||
|
||||
$filterMap = $searchOpts->filters->toValueMap();
|
||||
if ($entityType !== 'all') {
|
||||
$entityTypesToSearch = [$entityType];
|
||||
} elseif (isset($searchOpts->filters['type'])) {
|
||||
$entityTypesToSearch = explode('|', $searchOpts->filters['type']);
|
||||
} elseif (isset($filterMap['type'])) {
|
||||
$entityTypesToSearch = explode('|', $filterMap['type']);
|
||||
}
|
||||
|
||||
$results = collect();
|
||||
@@ -97,7 +89,8 @@ class SearchRunner
|
||||
{
|
||||
$opts = SearchOptions::fromString($searchString);
|
||||
$entityTypes = ['page', 'chapter'];
|
||||
$entityTypesToSearch = isset($opts->filters['type']) ? explode('|', $opts->filters['type']) : $entityTypes;
|
||||
$filterMap = $opts->filters->toValueMap();
|
||||
$entityTypesToSearch = isset($filterMap['type']) ? explode('|', $filterMap['type']) : $entityTypes;
|
||||
|
||||
$results = collect();
|
||||
foreach ($entityTypesToSearch as $entityType) {
|
||||
@@ -161,24 +154,26 @@ class SearchRunner
|
||||
$this->applyTermSearch($entityQuery, $searchOpts, $entityType);
|
||||
|
||||
// Handle exact term matching
|
||||
foreach ($searchOpts->exacts as $inputTerm) {
|
||||
$entityQuery->where(function (EloquentBuilder $query) use ($inputTerm, $entityModelInstance) {
|
||||
$inputTerm = str_replace('\\', '\\\\', $inputTerm);
|
||||
foreach ($searchOpts->exacts->all() as $exact) {
|
||||
$filter = function (EloquentBuilder $query) use ($exact, $entityModelInstance) {
|
||||
$inputTerm = str_replace('\\', '\\\\', $exact->value);
|
||||
$query->where('name', 'like', '%' . $inputTerm . '%')
|
||||
->orWhere($entityModelInstance->textField, 'like', '%' . $inputTerm . '%');
|
||||
});
|
||||
};
|
||||
|
||||
$exact->negated ? $entityQuery->whereNot($filter) : $entityQuery->where($filter);
|
||||
}
|
||||
|
||||
// Handle tag searches
|
||||
foreach ($searchOpts->tags as $inputTerm) {
|
||||
$this->applyTagSearch($entityQuery, $inputTerm);
|
||||
foreach ($searchOpts->tags->all() as $tagOption) {
|
||||
$this->applyTagSearch($entityQuery, $tagOption);
|
||||
}
|
||||
|
||||
// Handle filters
|
||||
foreach ($searchOpts->filters as $filterTerm => $filterValue) {
|
||||
$functionName = Str::camel('filter_' . $filterTerm);
|
||||
foreach ($searchOpts->filters->all() as $filterOption) {
|
||||
$functionName = Str::camel('filter_' . $filterOption->getKey());
|
||||
if (method_exists($this, $functionName)) {
|
||||
$this->$functionName($entityQuery, $entityModelInstance, $filterValue);
|
||||
$this->$functionName($entityQuery, $entityModelInstance, $filterOption->value, $filterOption->negated);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,7 +185,7 @@ class SearchRunner
|
||||
*/
|
||||
protected function applyTermSearch(EloquentBuilder $entityQuery, SearchOptions $options, string $entityType): void
|
||||
{
|
||||
$terms = $options->searches;
|
||||
$terms = $options->searches->toValueArray();
|
||||
if (count($terms) === 0) {
|
||||
return;
|
||||
}
|
||||
@@ -209,8 +204,8 @@ class SearchRunner
|
||||
$subQuery->where('entity_type', '=', $entityType);
|
||||
$subQuery->where(function (Builder $query) use ($terms) {
|
||||
foreach ($terms as $inputTerm) {
|
||||
$inputTerm = str_replace('\\', '\\\\', $inputTerm);
|
||||
$query->orWhere('term', 'like', $inputTerm . '%');
|
||||
$escapedTerm = str_replace('\\', '\\\\', $inputTerm);
|
||||
$query->orWhere('term', 'like', $escapedTerm . '%');
|
||||
}
|
||||
});
|
||||
$subQuery->groupBy('entity_type', 'entity_id');
|
||||
@@ -264,7 +259,7 @@ class SearchRunner
|
||||
$whenStatements = [];
|
||||
$whenBindings = [];
|
||||
|
||||
foreach ($options->searches as $term) {
|
||||
foreach ($options->searches->toValueArray() as $term) {
|
||||
$whenStatements[] = 'WHEN term LIKE ? THEN ?';
|
||||
$whenBindings[] = $term . '%';
|
||||
$whenBindings[] = $term;
|
||||
@@ -310,179 +305,165 @@ class SearchRunner
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the available query operators as a regex escaped list.
|
||||
* Apply a tag search term onto an entity query.
|
||||
*/
|
||||
protected function getRegexEscapedOperators(): string
|
||||
protected function applyTagSearch(EloquentBuilder $query, TagSearchOption $option): void
|
||||
{
|
||||
$escapedOperators = [];
|
||||
foreach ($this->queryOperators as $operator) {
|
||||
$escapedOperators[] = preg_quote($operator);
|
||||
}
|
||||
$filter = function (EloquentBuilder $query) use ($option): void {
|
||||
$tagParts = $option->getParts();
|
||||
if (empty($tagParts['operator']) || empty($tagParts['value'])) {
|
||||
$query->where('name', '=', $tagParts['name']);
|
||||
return;
|
||||
}
|
||||
|
||||
return implode('|', $escapedOperators);
|
||||
if (!empty($tagParts['name'])) {
|
||||
$query->where('name', '=', $tagParts['name']);
|
||||
}
|
||||
|
||||
if (is_numeric($tagParts['value']) && $tagParts['operator'] !== 'like') {
|
||||
// We have to do a raw sql query for this since otherwise PDO will quote the value and MySQL will
|
||||
// search the value as a string which prevents being able to do number-based operations
|
||||
// on the tag values. We ensure it has a numeric value and then cast it just to be sure.
|
||||
/** @var Connection $connection */
|
||||
$connection = $query->getConnection();
|
||||
$quotedValue = (float) trim($connection->getPdo()->quote($tagParts['value']), "'");
|
||||
$query->whereRaw("value {$tagParts['operator']} {$quotedValue}");
|
||||
} else if ($tagParts['operator'] === 'like') {
|
||||
$query->where('value', $tagParts['operator'], str_replace('\\', '\\\\', $tagParts['value']));
|
||||
} else {
|
||||
$query->where('value', $tagParts['operator'], $tagParts['value']);
|
||||
}
|
||||
};
|
||||
|
||||
$option->negated ? $query->whereDoesntHave('tags', $filter) : $query->whereHas('tags', $filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply a tag search term onto a entity query.
|
||||
*/
|
||||
protected function applyTagSearch(EloquentBuilder $query, string $tagTerm): EloquentBuilder
|
||||
protected function applyNegatableWhere(EloquentBuilder $query, bool $negated, string $column, string $operator, mixed $value): void
|
||||
{
|
||||
preg_match('/^(.*?)((' . $this->getRegexEscapedOperators() . ')(.*?))?$/', $tagTerm, $tagSplit);
|
||||
$query->whereHas('tags', function (EloquentBuilder $query) use ($tagSplit) {
|
||||
$tagName = $tagSplit[1];
|
||||
$tagOperator = count($tagSplit) > 2 ? $tagSplit[3] : '';
|
||||
$tagValue = count($tagSplit) > 3 ? $tagSplit[4] : '';
|
||||
$validOperator = in_array($tagOperator, $this->queryOperators);
|
||||
if (!empty($tagOperator) && !empty($tagValue) && $validOperator) {
|
||||
if (!empty($tagName)) {
|
||||
$query->where('name', '=', $tagName);
|
||||
}
|
||||
if (is_numeric($tagValue) && $tagOperator !== 'like') {
|
||||
// We have to do a raw sql query for this since otherwise PDO will quote the value and MySQL will
|
||||
// search the value as a string which prevents being able to do number-based operations
|
||||
// on the tag values. We ensure it has a numeric value and then cast it just to be sure.
|
||||
/** @var Connection $connection */
|
||||
$connection = $query->getConnection();
|
||||
$tagValue = (float) trim($connection->getPdo()->quote($tagValue), "'");
|
||||
$query->whereRaw("value {$tagOperator} {$tagValue}");
|
||||
} else {
|
||||
if ($tagOperator === 'like') {
|
||||
$tagValue = str_replace('\\', '\\\\', $tagValue);
|
||||
}
|
||||
$query->where('value', $tagOperator, $tagValue);
|
||||
}
|
||||
} else {
|
||||
$query->where('name', '=', $tagName);
|
||||
}
|
||||
});
|
||||
|
||||
return $query;
|
||||
if ($negated) {
|
||||
$query->whereNot($column, $operator, $value);
|
||||
} else {
|
||||
$query->where($column, $operator, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom entity search filters.
|
||||
*/
|
||||
protected function filterUpdatedAfter(EloquentBuilder $query, Entity $model, $input): void
|
||||
protected function filterUpdatedAfter(EloquentBuilder $query, Entity $model, string $input, bool $negated): void
|
||||
{
|
||||
try {
|
||||
$date = date_create($input);
|
||||
$query->where('updated_at', '>=', $date);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
$date = date_create($input);
|
||||
$this->applyNegatableWhere($query, $negated, 'updated_at', '>=', $date);
|
||||
}
|
||||
|
||||
protected function filterUpdatedBefore(EloquentBuilder $query, Entity $model, $input): void
|
||||
protected function filterUpdatedBefore(EloquentBuilder $query, Entity $model, string $input, bool $negated): void
|
||||
{
|
||||
try {
|
||||
$date = date_create($input);
|
||||
$query->where('updated_at', '<', $date);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
$date = date_create($input);
|
||||
$this->applyNegatableWhere($query, $negated, 'updated_at', '<', $date);
|
||||
}
|
||||
|
||||
protected function filterCreatedAfter(EloquentBuilder $query, Entity $model, $input): void
|
||||
protected function filterCreatedAfter(EloquentBuilder $query, Entity $model, string $input, bool $negated): void
|
||||
{
|
||||
try {
|
||||
$date = date_create($input);
|
||||
$query->where('created_at', '>=', $date);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
$date = date_create($input);
|
||||
$this->applyNegatableWhere($query, $negated, 'created_at', '>=', $date);
|
||||
}
|
||||
|
||||
protected function filterCreatedBefore(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterCreatedBefore(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
try {
|
||||
$date = date_create($input);
|
||||
$query->where('created_at', '<', $date);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
$date = date_create($input);
|
||||
$this->applyNegatableWhere($query, $negated, 'created_at', '<', $date);
|
||||
}
|
||||
|
||||
protected function filterCreatedBy(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterCreatedBy(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$userSlug = $input === 'me' ? user()->slug : trim($input);
|
||||
$user = User::query()->where('slug', '=', $userSlug)->first(['id']);
|
||||
if ($user) {
|
||||
$query->where('created_by', '=', $user->id);
|
||||
$this->applyNegatableWhere($query, $negated, 'created_by', '=', $user->id);
|
||||
}
|
||||
}
|
||||
|
||||
protected function filterUpdatedBy(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterUpdatedBy(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$userSlug = $input === 'me' ? user()->slug : trim($input);
|
||||
$user = User::query()->where('slug', '=', $userSlug)->first(['id']);
|
||||
if ($user) {
|
||||
$query->where('updated_by', '=', $user->id);
|
||||
$this->applyNegatableWhere($query, $negated, 'updated_by', '=', $user->id);
|
||||
}
|
||||
}
|
||||
|
||||
protected function filterOwnedBy(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterOwnedBy(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$userSlug = $input === 'me' ? user()->slug : trim($input);
|
||||
$user = User::query()->where('slug', '=', $userSlug)->first(['id']);
|
||||
if ($user) {
|
||||
$query->where('owned_by', '=', $user->id);
|
||||
$this->applyNegatableWhere($query, $negated, 'owned_by', '=', $user->id);
|
||||
}
|
||||
}
|
||||
|
||||
protected function filterInName(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterInName(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$query->where('name', 'like', '%' . $input . '%');
|
||||
$this->applyNegatableWhere($query, $negated, 'name', 'like', '%' . $input . '%');
|
||||
}
|
||||
|
||||
protected function filterInTitle(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterInTitle(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$this->filterInName($query, $model, $input);
|
||||
$this->filterInName($query, $model, $input, $negated);
|
||||
}
|
||||
|
||||
protected function filterInBody(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterInBody(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$query->where($model->textField, 'like', '%' . $input . '%');
|
||||
$this->applyNegatableWhere($query, $negated, $model->textField, 'like', '%' . $input . '%');
|
||||
}
|
||||
|
||||
protected function filterIsRestricted(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterIsRestricted(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$query->whereHas('permissions');
|
||||
$negated ? $query->whereDoesntHave('permissions') : $query->whereHas('permissions');
|
||||
}
|
||||
|
||||
protected function filterViewedByMe(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterViewedByMe(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$query->whereHas('views', function ($query) {
|
||||
$filter = function ($query) {
|
||||
$query->where('user_id', '=', user()->id);
|
||||
});
|
||||
};
|
||||
|
||||
$negated ? $query->whereDoesntHave('views', $filter) : $query->whereHas('views', $filter);
|
||||
}
|
||||
|
||||
protected function filterNotViewedByMe(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterNotViewedByMe(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$query->whereDoesntHave('views', function ($query) {
|
||||
$filter = function ($query) {
|
||||
$query->where('user_id', '=', user()->id);
|
||||
});
|
||||
};
|
||||
|
||||
$negated ? $query->whereHas('views', $filter) : $query->whereDoesntHave('views', $filter);
|
||||
}
|
||||
|
||||
protected function filterIsTemplate(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterIsTemplate(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
if ($model instanceof Page) {
|
||||
$query->where('template', '=', true);
|
||||
$this->applyNegatableWhere($query, $negated, 'template', '=', true);
|
||||
}
|
||||
}
|
||||
|
||||
protected function filterSortBy(EloquentBuilder $query, Entity $model, $input)
|
||||
protected function filterSortBy(EloquentBuilder $query, Entity $model, string $input, bool $negated)
|
||||
{
|
||||
$functionName = Str::camel('sort_by_' . $input);
|
||||
if (method_exists($this, $functionName)) {
|
||||
$this->$functionName($query, $model);
|
||||
$this->$functionName($query, $model, $negated);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorting filter options.
|
||||
*/
|
||||
protected function sortByLastCommented(EloquentBuilder $query, Entity $model)
|
||||
protected function sortByLastCommented(EloquentBuilder $query, Entity $model, bool $negated)
|
||||
{
|
||||
$commentsTable = DB::getTablePrefix() . 'comments';
|
||||
$morphClass = str_replace('\\', '\\\\', $model->getMorphClass());
|
||||
$commentQuery = DB::raw('(SELECT c1.entity_id, c1.entity_type, c1.created_at as last_commented FROM ' . $commentsTable . ' c1 LEFT JOIN ' . $commentsTable . ' c2 ON (c1.entity_id = c2.entity_id AND c1.entity_type = c2.entity_type AND c1.created_at < c2.created_at) WHERE c1.entity_type = \'' . $morphClass . '\' AND c2.created_at IS NULL) as comments');
|
||||
|
||||
$query->join($commentQuery, $model->getTable() . '.id', '=', 'comments.entity_id')->orderBy('last_commented', 'desc');
|
||||
$query->join($commentQuery, $model->getTable() . '.id', '=', DB::raw('comments.entity_id'))
|
||||
->orderBy('last_commented', $negated ? 'asc' : 'desc');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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'],
|
||||
]
|
||||
|
||||
@@ -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'],
|
||||
]);
|
||||
|
||||
@@ -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'],
|
||||
],
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace BookStack\Users\Controllers;
|
||||
|
||||
use BookStack\Access\SocialDriverManager;
|
||||
use BookStack\Access\UserInviteException;
|
||||
use BookStack\Exceptions\ImageUploadException;
|
||||
use BookStack\Exceptions\UserUpdateException;
|
||||
use BookStack\Http\Controller;
|
||||
@@ -14,6 +15,7 @@ use BookStack\Util\SimpleListOptions;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Validation\Rules\Password;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
@@ -91,9 +93,15 @@ class UserController extends Controller
|
||||
|
||||
$validated = $this->validate($request, array_filter($validationRules));
|
||||
|
||||
DB::transaction(function () use ($validated, $sendInvite) {
|
||||
$this->userRepo->create($validated, $sendInvite);
|
||||
});
|
||||
try {
|
||||
DB::transaction(function () use ($validated, $sendInvite) {
|
||||
$this->userRepo->create($validated, $sendInvite);
|
||||
});
|
||||
} catch (UserInviteException $e) {
|
||||
Log::error("Failed to send user invite with error: {$e->getMessage()}");
|
||||
$this->showErrorNotification(trans('errors.users_could_not_send_invite'));
|
||||
return redirect('/settings/users/create')->withInput();
|
||||
}
|
||||
|
||||
return redirect('/settings/users');
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace BookStack\Users;
|
||||
|
||||
use BookStack\Access\UserInviteException;
|
||||
use BookStack\Access\UserInviteService;
|
||||
use BookStack\Activity\ActivityType;
|
||||
use BookStack\Entities\EntityProvider;
|
||||
@@ -83,6 +84,7 @@ class UserRepo
|
||||
* As per "createWithoutActivity" but records a "create" activity.
|
||||
*
|
||||
* @param array{name: string, email: string, password: ?string, external_auth_id: ?string, language: ?string, roles: ?array} $data
|
||||
* @throws UserInviteException
|
||||
*/
|
||||
public function create(array $data, bool $sendInvite = false): User
|
||||
{
|
||||
|
||||
@@ -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 '';
|
||||
}
|
||||
|
||||
return $hosts;
|
||||
$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 $drawioHost;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-xml": "*",
|
||||
"bacon/bacon-qr-code": "^2.0",
|
||||
"bacon/bacon-qr-code": "^3.0",
|
||||
"doctrine/dbal": "^3.5",
|
||||
"dompdf/dompdf": "^2.0",
|
||||
"dompdf/dompdf": "^3.0",
|
||||
"guzzlehttp/guzzle": "^7.4",
|
||||
"intervention/image": "^3.5",
|
||||
"knplabs/knp-snappy": "^1.5",
|
||||
|
||||
1389
composer.lock
generated
1389
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
// Ensure we have an "editor" value set for pages
|
||||
|
||||
// Get default
|
||||
$default = DB::table('settings')
|
||||
->where('setting_key', '=', 'app-editor')
|
||||
->first()
|
||||
->value ?? 'wysiwyg';
|
||||
$default = ($default === 'markdown') ? 'markdown' : 'wysiwyg';
|
||||
|
||||
// We set it to 'markdown' for pages currently with markdown content
|
||||
DB::table('pages')
|
||||
->where('editor', '=', '')
|
||||
->where('markdown', '!=', '')
|
||||
->update(['editor' => 'markdown']);
|
||||
|
||||
// We set it to 'wysiwyg' where we have HTML but no markdown
|
||||
DB::table('pages')
|
||||
->where('editor', '=', '')
|
||||
->where('markdown', '=', '')
|
||||
->where('html', '!=', '')
|
||||
->update(['editor' => 'wysiwyg']);
|
||||
|
||||
// Otherwise, where still empty, set to the current default
|
||||
DB::table('pages')
|
||||
->where('editor', '=', '')
|
||||
->update(['editor' => $default]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
// Can't reverse due to not knowing what would have been empty before
|
||||
}
|
||||
};
|
||||
@@ -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",
|
||||
|
||||
@@ -14,6 +14,7 @@ const entryPoints = {
|
||||
code: path.join(__dirname, '../../resources/js/code/index.mjs'),
|
||||
'legacy-modes': path.join(__dirname, '../../resources/js/code/legacy-modes.mjs'),
|
||||
markdown: path.join(__dirname, '../../resources/js/markdown/index.mjs'),
|
||||
wysiwyg: path.join(__dirname, '../../resources/js/wysiwyg/index.ts'),
|
||||
};
|
||||
|
||||
// Locate our output directory
|
||||
@@ -31,6 +32,15 @@ esbuild.build({
|
||||
format: 'esm',
|
||||
minify: isProd,
|
||||
logLevel: 'info',
|
||||
loader: {
|
||||
'.svg': 'text',
|
||||
},
|
||||
absWorkingDir: path.join(__dirname, '../..'),
|
||||
alias: {
|
||||
'@icons': './resources/icons',
|
||||
lexical: './resources/js/wysiwyg/lexical/core',
|
||||
'@lexical': './resources/js/wysiwyg/lexical',
|
||||
},
|
||||
banner: {
|
||||
js: '// See the "/licenses" URI for full package license details',
|
||||
css: '/* See the "/licenses" URI for full package license details */',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM php:8.1-apache
|
||||
FROM php:8.3-apache
|
||||
|
||||
ENV APACHE_DOCUMENT_ROOT /app/public
|
||||
WORKDIR /app
|
||||
|
||||
@@ -137,8 +137,8 @@ window.$events.showValidationErrors(error);
|
||||
// Translator
|
||||
// Take the given plural text and count to decide on what plural option
|
||||
// to use, Similar to laravel's trans_choice function but instead
|
||||
// takes the direction directly instead of a translation key.
|
||||
window.trans_plural(translationString, count, replacements);
|
||||
// takes the translation text directly instead of a translation key.
|
||||
window.$trans.choice(translationString, count, replacements);
|
||||
|
||||
// Component System
|
||||
// Parse and initialise any components from the given root el down.
|
||||
|
||||
@@ -6,14 +6,14 @@ This theme system itself is maintained and supported but usages of this system,
|
||||
|
||||
## Getting Started
|
||||
|
||||
*[Video Guide](https://www.youtube.com/watch?v=gLy_2GBse48)*
|
||||
*[Video Guide](https://foss.video/w/ibNY6bGmKFV1tva3Jz4KfA)*
|
||||
|
||||
This makes use of the theme system. Create a folder for your theme within your BookStack `themes` directory. As an example we'll use `my_theme`, so we'd create a `themes/my_theme` folder.
|
||||
You'll need to tell BookStack to use your theme via the `APP_THEME` option in your `.env` file. For example: `APP_THEME=my_theme`.
|
||||
|
||||
## Customizing View Files
|
||||
|
||||
Content placed in your `themes/<theme_name>/` folder will override the original view files found in the `resources/views` folder. These files are typically [Laravel Blade](https://laravel.com/docs/8.x/blade) files.
|
||||
Content placed in your `themes/<theme_name>/` folder will override the original view files found in the `resources/views` folder. These files are typically [Laravel Blade](https://laravel.com/docs/10.x/blade) files.
|
||||
As an example, I could override the `resources/views/books/parts/list-item.blade.php` file with my own template at the path `themes/<theme_name>/books/parts/list-item.blade.php`.
|
||||
|
||||
## Customizing Icons
|
||||
@@ -22,7 +22,7 @@ SVG files placed in a `themes/<theme_name>/icons` folder will override any icons
|
||||
|
||||
## Customizing Text Content
|
||||
|
||||
Folders with PHP translation files placed in a `themes/<theme_name>/lang` folder will override translations defined within the `resources/lang` folder. Custom translations are merged with the original files so you only need to override the select translations you want to override, you don't need to copy the whole original file. Note that you'll need to include the language folder.
|
||||
Folders with PHP translation files placed in a `themes/<theme_name>/lang` folder will override translations defined within the `lang` folder. Custom translations are merged with the original files, so you only need to override the select translations you want to override, you don't need to copy the whole original file. Note that you'll need to include the language folder.
|
||||
|
||||
As an example, Say I wanted to change 'Search' to 'Find'; Within a `themes/<theme_name>/lang/en/common.php` file I'd set the following:
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -96,6 +96,22 @@ Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
Source: https://github.com/dompdf/dompdf.git
|
||||
Link: https://github.com/dompdf/dompdf
|
||||
-----------
|
||||
dompdf/php-font-lib
|
||||
License: LGPL-2.1-or-later
|
||||
License File: vendor/dompdf/php-font-lib/LICENSE
|
||||
Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
Source: https://github.com/dompdf/php-font-lib.git
|
||||
Link: https://github.com/dompdf/php-font-lib
|
||||
-----------
|
||||
dompdf/php-svg-lib
|
||||
License: LGPL-3.0-or-later
|
||||
License File: vendor/dompdf/php-svg-lib/LICENSE
|
||||
Copyright: Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
Source: https://github.com/dompdf/php-svg-lib.git
|
||||
Link: https://github.com/dompdf/php-svg-lib
|
||||
-----------
|
||||
dragonmantank/cron-expression
|
||||
License: MIT
|
||||
License File: vendor/dragonmantank/cron-expression/LICENSE
|
||||
@@ -128,7 +144,7 @@ Link: https://github.com/fruitcake/php-cors
|
||||
graham-campbell/result-type
|
||||
License: MIT
|
||||
License File: vendor/graham-campbell/result-type/LICENSE
|
||||
Copyright: Copyright (c) 2020-2023 Graham Campbell <*****@**********.**.**>
|
||||
Copyright: Copyright (c) 2020-2024 Graham Campbell <*****@**********.**.**>
|
||||
Source: https://github.com/GrahamCampbell/Result-Type.git
|
||||
Link: https://github.com/GrahamCampbell/Result-Type.git
|
||||
-----------
|
||||
@@ -357,9 +373,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
|
||||
@@ -375,22 +391,6 @@ Copyright: Copyright (c) 2015 Paragon Initiative Enterprises
|
||||
Source: https://github.com/paragonie/random_compat.git
|
||||
Link: https://github.com/paragonie/random_compat.git
|
||||
-----------
|
||||
phenx/php-font-lib
|
||||
License: LGPL-2.1-or-later
|
||||
License File: vendor/phenx/php-font-lib/LICENSE
|
||||
Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
Source: https://github.com/dompdf/php-font-lib.git
|
||||
Link: https://github.com/PhenX/php-font-lib
|
||||
-----------
|
||||
phenx/php-svg-lib
|
||||
License: LGPL-3.0-or-later
|
||||
License File: vendor/phenx/php-svg-lib/LICENSE
|
||||
Copyright: Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
Source: https://github.com/dompdf/php-svg-lib.git
|
||||
Link: https://github.com/PhenX/php-svg-lib
|
||||
-----------
|
||||
phpoption/phpoption
|
||||
License: Apache-2.0
|
||||
License File: vendor/phpoption/phpoption/LICENSE
|
||||
@@ -676,13 +676,6 @@ Copyright: Copyright (c) 2015-present Fabien Potencier
|
||||
Source: https://github.com/symfony/polyfill-mbstring.git
|
||||
Link: https://symfony.com
|
||||
-----------
|
||||
symfony/polyfill-php72
|
||||
License: MIT
|
||||
License File: vendor/symfony/polyfill-php72/LICENSE
|
||||
Copyright: Copyright (c) 2015-present Fabien Potencier
|
||||
Source: https://github.com/symfony/polyfill-php72.git
|
||||
Link: https://symfony.com
|
||||
-----------
|
||||
symfony/polyfill-php80
|
||||
License: MIT
|
||||
License File: vendor/symfony/polyfill-php80/LICENSE
|
||||
|
||||
@@ -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:
|
||||
|
||||
209
jest.config.ts
Normal file
209
jest.config.ts
Normal file
@@ -0,0 +1,209 @@
|
||||
/**
|
||||
* For a detailed explanation regarding each configuration property, visit:
|
||||
* https://jestjs.io/docs/configuration
|
||||
*/
|
||||
|
||||
import type {Config} from 'jest';
|
||||
import {pathsToModuleNameMapper} from "ts-jest";
|
||||
import { compilerOptions } from './tsconfig.json';
|
||||
|
||||
const config: Config = {
|
||||
// All imported modules in your tests should be mocked automatically
|
||||
// automock: false,
|
||||
|
||||
// Stop running tests after `n` failures
|
||||
// bail: 0,
|
||||
|
||||
// The directory where Jest should store its cached dependency information
|
||||
// cacheDirectory: "/tmp/jest_rs",
|
||||
|
||||
// Automatically clear mock calls, instances, contexts and results before every test
|
||||
clearMocks: true,
|
||||
|
||||
// Indicates whether the coverage information should be collected while executing the test
|
||||
collectCoverage: false,
|
||||
|
||||
// An array of glob patterns indicating a set of files for which coverage information should be collected
|
||||
// collectCoverageFrom: undefined,
|
||||
|
||||
// The directory where Jest should output its coverage files
|
||||
coverageDirectory: "coverage",
|
||||
|
||||
// An array of regexp pattern strings used to skip coverage collection
|
||||
// coveragePathIgnorePatterns: [
|
||||
// "/node_modules/"
|
||||
// ],
|
||||
|
||||
// Indicates which provider should be used to instrument code for coverage
|
||||
coverageProvider: "v8",
|
||||
|
||||
// A list of reporter names that Jest uses when writing coverage reports
|
||||
// coverageReporters: [
|
||||
// "json",
|
||||
// "text",
|
||||
// "lcov",
|
||||
// "clover"
|
||||
// ],
|
||||
|
||||
// An object that configures minimum threshold enforcement for coverage results
|
||||
// coverageThreshold: undefined,
|
||||
|
||||
// A path to a custom dependency extractor
|
||||
// dependencyExtractor: undefined,
|
||||
|
||||
// Make calling deprecated APIs throw helpful error messages
|
||||
// errorOnDeprecated: false,
|
||||
|
||||
// The default configuration for fake timers
|
||||
// fakeTimers: {
|
||||
// "enableGlobally": false
|
||||
// },
|
||||
|
||||
// Force coverage collection from ignored files using an array of glob patterns
|
||||
// forceCoverageMatch: [],
|
||||
|
||||
// A path to a module which exports an async function that is triggered once before all test suites
|
||||
// globalSetup: undefined,
|
||||
|
||||
// A path to a module which exports an async function that is triggered once after all test suites
|
||||
// globalTeardown: undefined,
|
||||
|
||||
// A set of global variables that need to be available in all test environments
|
||||
globals: {
|
||||
__DEV__: true,
|
||||
},
|
||||
|
||||
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
|
||||
// maxWorkers: "50%",
|
||||
|
||||
// An array of directory names to be searched recursively up from the requiring module's location
|
||||
// moduleDirectories: [
|
||||
// "node_modules"
|
||||
// ],
|
||||
|
||||
// An array of file extensions your modules use
|
||||
// moduleFileExtensions: [
|
||||
// "js",
|
||||
// "mjs",
|
||||
// "cjs",
|
||||
// "jsx",
|
||||
// "ts",
|
||||
// "tsx",
|
||||
// "json",
|
||||
// "node"
|
||||
// ],
|
||||
|
||||
modulePaths: ['./'],
|
||||
|
||||
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
|
||||
moduleNameMapper: {
|
||||
'lexical/shared/invariant': 'resources/js/wysiwyg/lexical/core/shared/__mocks__/invariant',
|
||||
...pathsToModuleNameMapper(compilerOptions.paths),
|
||||
},
|
||||
|
||||
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
|
||||
// modulePathIgnorePatterns: [],
|
||||
|
||||
// Activates notifications for test results
|
||||
// notify: false,
|
||||
|
||||
// An enum that specifies notification mode. Requires { notify: true }
|
||||
// notifyMode: "failure-change",
|
||||
|
||||
// A preset that is used as a base for Jest's configuration
|
||||
// preset: undefined,
|
||||
|
||||
// Run tests from one or more projects
|
||||
// projects: undefined,
|
||||
|
||||
// Use this configuration option to add custom reporters to Jest
|
||||
// reporters: undefined,
|
||||
|
||||
// Automatically reset mock state before every test
|
||||
// resetMocks: false,
|
||||
|
||||
// Reset the module registry before running each individual test
|
||||
// resetModules: false,
|
||||
|
||||
// A path to a custom resolver
|
||||
// resolver: undefined,
|
||||
|
||||
// Automatically restore mock state and implementation before every test
|
||||
// restoreMocks: false,
|
||||
|
||||
// The root directory that Jest should scan for tests and modules within
|
||||
// rootDir: undefined,
|
||||
|
||||
// A list of paths to directories that Jest should use to search for files in
|
||||
roots: [
|
||||
"./resources/js"
|
||||
],
|
||||
|
||||
// Allows you to use a custom runner instead of Jest's default test runner
|
||||
// runner: "jest-runner",
|
||||
|
||||
// The paths to modules that run some code to configure or set up the testing environment before each test
|
||||
// setupFiles: [],
|
||||
|
||||
// A list of paths to modules that run some code to configure or set up the testing framework before each test
|
||||
// setupFilesAfterEnv: [],
|
||||
|
||||
// The number of seconds after which a test is considered as slow and reported as such in the results.
|
||||
// slowTestThreshold: 5,
|
||||
|
||||
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
||||
// snapshotSerializers: [],
|
||||
|
||||
// The test environment that will be used for testing
|
||||
testEnvironment: "jsdom",
|
||||
|
||||
// Options that will be passed to the testEnvironment
|
||||
// testEnvironmentOptions: {},
|
||||
|
||||
// Adds a location field to test results
|
||||
// testLocationInResults: false,
|
||||
|
||||
// The glob patterns Jest uses to detect test files
|
||||
testMatch: [
|
||||
"**/__tests__/**/*.test.[jt]s",
|
||||
],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
|
||||
// testPathIgnorePatterns: [
|
||||
// "/node_modules/"
|
||||
// ],
|
||||
|
||||
// The regexp pattern or array of patterns that Jest uses to detect test files
|
||||
// testRegex: [],
|
||||
|
||||
// This option allows the use of a custom results processor
|
||||
// testResultsProcessor: undefined,
|
||||
|
||||
// This option allows use of a custom test runner
|
||||
// testRunner: "jest-circus/runner",
|
||||
|
||||
// A map from regular expressions to paths to transformers
|
||||
transform: {
|
||||
"^.+.tsx?$": ["ts-jest",{}],
|
||||
},
|
||||
|
||||
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
||||
// transformIgnorePatterns: [
|
||||
// "/node_modules/",
|
||||
// "\\.pnp\\.[^\\/]+$"
|
||||
// ],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
|
||||
// unmockedModulePathPatterns: undefined,
|
||||
|
||||
// Indicates whether each individual test should be reported during the run
|
||||
// verbose: undefined,
|
||||
|
||||
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
|
||||
// watchPathIgnorePatterns: [],
|
||||
|
||||
// Whether to use watchman for file crawling
|
||||
// watchman: true,
|
||||
};
|
||||
|
||||
export default config;
|
||||
@@ -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.',
|
||||
|
||||
@@ -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' => 'يجب أن يكون حجم هذه الصورة تقريبًا 440x250 بكسل، على الرغم من أنه سيتم تحجيمها وقصها بشكل مرن لتناسب واجهة المستخدم في سيناريوهات مختلفة حسب الحاجة، لذا فإن الأبعاد الفعلية للعرض ستختلف.',
|
||||
|
||||
// Actions
|
||||
'actions' => 'إجراءات',
|
||||
@@ -107,4 +107,7 @@ return [
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'سياسة الخصوصية',
|
||||
'terms_of_service' => 'اتفاقية شروط الخدمة',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Search :appName',
|
||||
];
|
||||
|
||||
@@ -224,6 +224,8 @@ return [
|
||||
'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_new_wysiwyg' => 'Switch to new WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Alpha Testing)',
|
||||
'pages_edit_set_changelog' => 'تثبيت سجل التعديل',
|
||||
'pages_edit_enter_changelog_desc' => 'ضع وصف مختصر للتعديلات التي تمت',
|
||||
'pages_edit_enter_changelog' => 'أدخل سجل التعديل',
|
||||
|
||||
@@ -37,6 +37,7 @@ return [
|
||||
'social_driver_not_found' => 'لم يتم العثور على السوشيال درايفر "Social driver"',
|
||||
'social_driver_not_configured' => 'لم يتم تهيئة إعدادات حسابك الاجتماعي بشكل صحيح.',
|
||||
'invite_token_expired' => 'انتهت صلاحية رابط هذه الدعوة. يمكنك بدلاً من ذلك محاولة إعادة تعيين كلمة مرور حسابك.',
|
||||
'login_user_not_found' => 'A user for this action could not be found.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'لا يمكن الرفع إلى مسار :filePath. الرجاء التأكد من قابلية الكتابة إلى الخادم.',
|
||||
@@ -77,6 +78,7 @@ return [
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'لا يمكن حذف المشرف الوحيد',
|
||||
'users_cannot_delete_guest' => 'لا يمكن حذف المستخدم الضيف',
|
||||
'users_could_not_send_invite' => 'Could not create user since invite email failed to send',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'لا يمكن تعديل هذا الدور',
|
||||
|
||||
@@ -295,6 +295,7 @@ return [
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'cy' => 'Cymraeg',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
|
||||
@@ -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' => 'Запази този лист с кодове на сигурно място. Когато достъпваш системата, ще можеш да използваш един от тези кодове като вторичен механизъм за удостоверяване.',
|
||||
|
||||
@@ -107,4 +107,7 @@ return [
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Политика за поверителност',
|
||||
'terms_of_service' => 'Условия на услугата',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Search :appName',
|
||||
];
|
||||
|
||||
@@ -224,6 +224,8 @@ return [
|
||||
'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_new_wysiwyg' => 'Switch to new WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Alpha Testing)',
|
||||
'pages_edit_set_changelog' => 'Задайте регистър на промените',
|
||||
'pages_edit_enter_changelog_desc' => 'Въведете кратко резюме на промените, които сте създали',
|
||||
'pages_edit_enter_changelog' => 'Въведи регистър на промените',
|
||||
|
||||
@@ -37,6 +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.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Не може да се качи файл в :filePath. Увери се на сървъра, че в пътя може да се записва.',
|
||||
@@ -77,6 +78,7 @@ return [
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Не можеш да изтриеш единствения администратор',
|
||||
'users_cannot_delete_guest' => 'Не можеш да изтриеш потребителя на госта',
|
||||
'users_could_not_send_invite' => 'Could not create user since invite email failed to send',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Ролята не може да бъде редактирана',
|
||||
|
||||
@@ -295,6 +295,7 @@ return [
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'cy' => 'Cymraeg',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
|
||||
@@ -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.',
|
||||
|
||||
@@ -107,4 +107,7 @@ return [
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Pravila o privatnosti',
|
||||
'terms_of_service' => 'Uslovi korištenja',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Search :appName',
|
||||
];
|
||||
|
||||
@@ -224,6 +224,8 @@ return [
|
||||
'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_new_wysiwyg' => 'Switch to new WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Alpha Testing)',
|
||||
'pages_edit_set_changelog' => 'Set Changelog',
|
||||
'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made',
|
||||
'pages_edit_enter_changelog' => 'Enter Changelog',
|
||||
|
||||
@@ -37,6 +37,7 @@ return [
|
||||
'social_driver_not_found' => 'Driver društvene mreže nije pronađen',
|
||||
'social_driver_not_configured' => 'Vaše :socialAccount postavke nisu konfigurisane ispravno.',
|
||||
'invite_token_expired' => 'Pozivni link je istekao. Možete umjesto toga pokušati da resetujete lozinku.',
|
||||
'login_user_not_found' => 'A user for this action could not be found.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Na putanju fajla :filePath se ne može učitati. Potvrdite da je omogućeno pisanje na server.',
|
||||
@@ -77,6 +78,7 @@ return [
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Ne možete izbrisati jedinog administratora',
|
||||
'users_cannot_delete_guest' => 'Ne možete izbrisati gost korisnika',
|
||||
'users_could_not_send_invite' => 'Could not create user since invite email failed to send',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Ova uloga ne može biti mijenjana',
|
||||
|
||||
@@ -295,6 +295,7 @@ return [
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'cy' => 'Cymraeg',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
|
||||
@@ -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 «:name» als favorits.',
|
||||
'favourite_remove_notification' => 'S’ha eliminat «:name» 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
|
||||
|
||||
146
lang/ca/auth.php
146
lang/ca/auth.php
@@ -6,112 +6,112 @@
|
||||
*/
|
||||
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í a :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ç «Continua» 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.',
|
||||
];
|
||||
|
||||
@@ -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,11 +100,14 @@ 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ó «:actionText» no funciona, copieu i enganxeu l’URL següent al vostre navegador:',
|
||||
'email_rights' => 'Tots els drets reservats',
|
||||
|
||||
// Footer Link Options
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Política de privadesa',
|
||||
'terms_of_service' => 'Condicions del servei',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Search :appName',
|
||||
];
|
||||
|
||||
@@ -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ó «Puja una imatge».',
|
||||
'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',
|
||||
|
||||
@@ -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ó',
|
||||
];
|
||||
|
||||
@@ -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 «:name»',
|
||||
'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 «:name»',
|
||||
'shelves_delete_explain' => "Se suprimirà el prestatge «:name». 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 «:bookName»',
|
||||
'books_delete_explain' => 'Se suprimirà el llibre «:bookName». 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 «:bookName»',
|
||||
'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 «:bookName»',
|
||||
'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 «:chapterName»',
|
||||
'chapters_delete_explain' => 'Se suprimirà el capítol «:chapterName». 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 «:chapterName»',
|
||||
'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 «:chapterName»',
|
||||
'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,107 @@ 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 «:pageName»',
|
||||
'pages_delete_draft_named' => 'Suprimeix l’esborrany de pàgina «:pageName»',
|
||||
'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 «:pageName»',
|
||||
'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_switch_to_new_wysiwyg' => 'Switch to new WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Alpha Testing)',
|
||||
'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 «:pageName»',
|
||||
'pages_revision_named' => 'Revisió de la pàgina «:pageName»',
|
||||
'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 +308,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 +369,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',
|
||||
];
|
||||
|
||||
@@ -6,114 +6,116 @@ 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.',
|
||||
'users_could_not_send_invite' => 'Could not create user since invite email failed to send',
|
||||
|
||||
// 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.',
|
||||
];
|
||||
|
||||
@@ -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ó',
|
||||
];
|
||||
|
||||
@@ -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.',
|
||||
|
||||
];
|
||||
|
||||
@@ -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 «?» 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 «Preferències › Usuaris».',
|
||||
|
||||
'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?',
|
||||
];
|
||||
|
||||
@@ -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 «Convidat».',
|
||||
'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 «trans::<key>» per a utilitzar traduccions definides pel sistema. Per exemple: Si utilitzeu «trans::common.privacy_policy» es mostrarà la traducció de «Privacy Policy» i si utilitzeu «trans::common.terms_of_service» es mostrarà la traducció de «Terms of Service».',
|
||||
'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' => 'Desactivarà 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 «:roleName».',
|
||||
'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 «:userName» 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 «identificador de testimoni» i un «secret de testimoni» 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 «:tokenName» 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 «:webhookName» 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 «related_item» i «url» 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
|
||||
@@ -295,6 +295,7 @@ return [
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'cy' => 'Cymraeg',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
|
||||
@@ -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.',
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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í.',
|
||||
|
||||
@@ -107,4 +107,7 @@ return [
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Zásady ochrany osobních údajů',
|
||||
'terms_of_service' => 'Podmínky služby',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Search :appName',
|
||||
];
|
||||
|
||||
@@ -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',
|
||||
@@ -224,6 +224,8 @@ return [
|
||||
'pages_edit_switch_to_markdown_clean' => '(Vytvořený obsah)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stabilní obsah)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Přepnout na WYSIWYG Editor',
|
||||
'pages_edit_switch_to_new_wysiwyg' => 'Switch to new WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Alpha Testing)',
|
||||
'pages_edit_set_changelog' => 'Nastavit protokol změn',
|
||||
'pages_edit_enter_changelog_desc' => 'Zadejte stručný popis změn, které jste provedli',
|
||||
'pages_edit_enter_changelog' => 'Zadejte protokol změn',
|
||||
@@ -303,7 +305,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 +318,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 +397,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.',
|
||||
|
||||
@@ -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,6 +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' => '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.',
|
||||
@@ -66,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',
|
||||
@@ -77,6 +78,7 @@ return [
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Nemůžete odstranit posledního administrátora',
|
||||
'users_cannot_delete_guest' => 'Uživatele Host není možno odstranit',
|
||||
'users_could_not_send_invite' => 'Could not create user since invite email failed to send',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Tuto roli nelze editovat',
|
||||
|
||||
@@ -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ěný v:',
|
||||
'detail_commenter' => 'Komentoval(a):',
|
||||
'detail_page_path' => 'Umístění:',
|
||||
'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í',
|
||||
];
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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.',
|
||||
@@ -295,6 +295,7 @@ return [
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'cy' => 'Cymraeg',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
|
||||
@@ -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,39 +42,39 @@ 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',
|
||||
'favourite_remove_notification' => 'Mae ":name" wedi\'i tynnu o\'ch ffefrynnau',
|
||||
|
||||
// Watching
|
||||
'watch_update_level_notification' => 'Watch preferences successfully updated',
|
||||
'watch_update_level_notification' => 'Dewisiadau gwylio wedi’u diweddaru\'n llwyddiannus',
|
||||
|
||||
// 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',
|
||||
'mfa_setup_method' => 'configured MFA method',
|
||||
'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' => 'Dull Dilysu Aml-ffactor wedi’i ffurfweddu',
|
||||
'mfa_setup_method_notification' => 'Dull aml-ffactor wedi\'i ffurfweddu\'n llwyddiannus',
|
||||
'mfa_remove_method' => 'removed MFA method',
|
||||
'mfa_remove_method' => 'Dull Dilysu Aml-ffactor wedi\'i ddileu',
|
||||
'mfa_remove_method_notification' => 'Llwyddwyd i ddileu dull aml-ffactor',
|
||||
|
||||
// Settings
|
||||
'settings_update' => 'updated settings',
|
||||
'settings_update_notification' => 'Settings successfully updated',
|
||||
'maintenance_action_run' => 'ran maintenance action',
|
||||
'settings_update' => 'diweddarodd osodiadau',
|
||||
'settings_update_notification' => 'Gosodiadau wedi\'i diweddaru\'n llwyddiannus',
|
||||
'maintenance_action_run' => 'rhedeg gweithred cynnal a chadw',
|
||||
|
||||
// Webhooks
|
||||
'webhook_create' => 'webhook wedi creu',
|
||||
@@ -93,25 +93,25 @@ 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_destroy' => 'removed from recycle bin',
|
||||
'recycle_bin_restore' => 'wedi\'i adfer o\'r bin ailgylchu',
|
||||
'recycle_bin_destroy' => 'symudwyd o’r bin ailgylchu',
|
||||
|
||||
// Comments
|
||||
'commented_on' => 'gwnaeth sylwadau ar',
|
||||
|
||||
104
lang/cy/auth.php
104
lang/cy/auth.php
@@ -39,79 +39,79 @@ return [
|
||||
'register_success' => 'Diolch am arwyddo! Rydych bellach wedi cofrestru ac wedi mewngofnodi.',
|
||||
|
||||
// Login auto-initiation
|
||||
'auto_init_starting' => 'Attempting Login',
|
||||
'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_starting' => 'Wrthi\'n ceisio mewngofnodi',
|
||||
'auto_init_starting_desc' => 'Rydym yn cysylltu â\'ch system ddilysu i ddechrau\'r broses fewngofnodi. Os nad oes cynnydd ar ôl 5 eiliad, gallwch geisio clicio ar y ddolen isod.',
|
||||
'auto_init_start_link' => 'Parhau gyda dilysu',
|
||||
|
||||
// Password Reset
|
||||
'reset_password' => 'Ailosod cyfrinair',
|
||||
'reset_password_send_instructions' => 'Rhowch eich e-bost isod ac anfonir e-bost atoch gyda dolen ailosod cyfrinair.',
|
||||
'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_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.',
|
||||
'reset_password_sent' => 'Bydd dolen ailosod cyfrinair yn cael ei hanfon at :email os ceir hyd i’r cyfeiriad e-bost hwn yn y system.',
|
||||
'reset_password_success' => 'Mae eich cyfrinair wedi\'i ailosod yn llwyddiannus.',
|
||||
'email_reset_subject' => 'Ailosod eich gair pass :appName',
|
||||
'email_reset_text' => 'Anfonwyd yr e-bost hwn atoch oherwydd ein bod wedi cael cais ailosod cyfrinair ar gyfer eich cyfrif.',
|
||||
'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',
|
||||
'email_confirm_greeting' => 'Diolch am ymuno â :appName!',
|
||||
'email_confirm_text' => 'Os gwelwch yn dda cadarnhewch eich e-bost chi gan clicio ar y botwm isod:',
|
||||
'email_confirm_action' => 'Cadarnhau E-bost',
|
||||
'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.',
|
||||
'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.',
|
||||
'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.',
|
||||
'email_confirm_send_error' => 'Mae angen cadarnhad e-bost ond ni allai\'r system anfon yr e-bost. Cysylltwch â\'r gweinyddwr i sicrhau bod yr e-bost wedi\'i osod yn gywir.',
|
||||
'email_confirm_success' => 'Mae eich e-bost wedi\'i gadarnhau! Dylech nawr allu mewngofnodi gan ddefnyddio\'r cyfeiriad e-bost hwn.',
|
||||
'email_confirm_resent' => 'Ail-anfonwyd cadarnhad e-bost, gwiriwch eich mewnflwch.',
|
||||
'email_confirm_thanks' => 'Diolch am gadarnhau!',
|
||||
'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_desc' => 'Arhoswch eiliad wrth i’ch cadarnhad gael ei drin. Os na chewch eich ailgyfeirio ar ôl 3 eiliad, pwyswch y ddolen "Parhau" isod i symud ymlaen.',
|
||||
|
||||
'email_not_confirmed' => 'Cyfeiriad E-bost heb ei Gadarnhau',
|
||||
'email_not_confirmed_text' => 'Dyw eich cyfeiriad e-bost chi ddim wedi cael ei gadarnhau eto.',
|
||||
'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.',
|
||||
'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.',
|
||||
'email_not_confirmed_resend_button' => 'Resend Confirmation Email',
|
||||
'email_not_confirmed_click_link' => 'Cliciwch ar y ddolen yn yr e-bost a anfonwyd yn fuan ar ôl i chi gofrestru.',
|
||||
'email_not_confirmed_resend' => 'Os na allwch ddod o hyd i\'r e-bost, gallwch ail-anfon yr e-bost cadarnhad trwy gyflwyno\'r ffurflen isod.',
|
||||
'email_not_confirmed_resend_button' => 'Ail-anfon E-bost Cadarnhad',
|
||||
|
||||
// User Invite
|
||||
'user_invite_email_subject' => 'You have been invited to join :appName!',
|
||||
'user_invite_email_subject' => 'Rydych chi wedi cael gwahoddiad i ymuno :appName!',
|
||||
'user_invite_email_greeting' => 'Mae cyfrif wedi cae ei greu i chi ar :appName.',
|
||||
'user_invite_email_text' => 'Click the button below to set an account password and gain access:',
|
||||
'user_invite_email_action' => 'Set Account Password',
|
||||
'user_invite_email_text' => 'Cliciwch ar y botwm isod i osod cyfrinair cyfrif a chael mynediad:',
|
||||
'user_invite_email_action' => 'Gosod Cyfrinair Cyfrif',
|
||||
'user_invite_page_welcome' => 'Croeso i :appName!',
|
||||
'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.',
|
||||
'user_invite_page_text' => 'I gwblhau eich cyfrif a chael mynediad mae angen i chi osod cyfrinair a fydd yn cael ei ddefnyddio i fewngofnodi i :appName ar ymweliadau yn y dyfodol.',
|
||||
'user_invite_page_confirm_button' => 'Cadarnhau cyfrinair',
|
||||
'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!',
|
||||
'user_invite_success_login' => 'Cyfrinair wedi’i osod, dylech nawr allu mewngofnodi gan ddefnyddio\'r cyfrinair a osodwyd i gael mynediad i :appName!',
|
||||
|
||||
// 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_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?',
|
||||
'mfa_setup_action' => 'Setup',
|
||||
'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_setup' => 'Gosod Dilysu Aml-Ffactor',
|
||||
'mfa_setup_desc' => 'Gosod dilysu aml-ffactor fel haen ychwanegol o ddiogelwch ar gyfer eich cyfrif defnyddiwr.',
|
||||
'mfa_setup_configured' => 'Wedi\'i ail-ffurfweddu\'n barod',
|
||||
'mfa_setup_reconfigure' => 'Ail-ffurfweddu',
|
||||
'mfa_setup_remove_confirmation' => 'Ydych chi\'n siŵr eich bod am gael gwared ar y dull dilysu aml-ffactor hwn?',
|
||||
'mfa_setup_action' => 'Gosodiad',
|
||||
'mfa_backup_codes_usage_limit_warning' => 'Mae gennych lai na 5 cod wrth gefn yn weddill, crëwch a storio cyfres newydd cyn i chi redeg allan o godau i osgoi cael eich cloi allan o\'ch cyfrif.',
|
||||
'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_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.',
|
||||
'mfa_gen_backup_codes_download' => 'Download Codes',
|
||||
'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.',
|
||||
'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.',
|
||||
'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_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_backup_code_desc' => 'Enter one of your remaining backup codes below:',
|
||||
'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
|
||||
'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.',
|
||||
'mfa_option_totp_desc' => 'I ddefnyddio dilysu aml-ffactor bydd angen dyfais symudol arnoch sy\'n cefnogi TOTP megis Google Authenticator, Authy neu Microsoft Authenticator.',
|
||||
'mfa_option_backup_codes_title' => 'Codau wrth Gefn',
|
||||
'mfa_option_backup_codes_desc' => 'Mae’n cynhyrchu cyfres o godau wrth gefn un-amser y byddwch chi\'n eu defnyddio i fewngofnodi i wirio pwy ydych chi. Gwnewch yn siŵr eich bod yn storio\'r rhain mewn lle saff a diogel.',
|
||||
'mfa_gen_confirm_and_enable' => 'Cadarnhau a Galluogi',
|
||||
'mfa_gen_backup_codes_title' => 'Gosodiad Codau wrth Gefn',
|
||||
'mfa_gen_backup_codes_desc' => 'Storiwch y rhestr isod o godau mewn lle diogel. Wrth ddefnyddio’r system bydd modd i chi ddefnyddio un o\'r codau fel ail fecanwaith dilysu.',
|
||||
'mfa_gen_backup_codes_download' => 'Llwytho Codau i Lawr',
|
||||
'mfa_gen_backup_codes_usage_warning' => 'Gellir defnyddio pob cod unwaith yn unig',
|
||||
'mfa_gen_totp_title' => 'Gosod Ap Symudol',
|
||||
'mfa_gen_totp_desc' => 'I ddefnyddio dilysu aml-ffactor bydd angen dyfais symudol arnoch sy\'n cefnogi TOTP megis Google Authenticator, Authy neu Microsoft Authenticator.',
|
||||
'mfa_gen_totp_scan' => 'Sganiwch y cod QR isod gan ddefnyddio\'ch ap dilysu dewisol i ddechrau.',
|
||||
'mfa_gen_totp_verify_setup' => 'Gwirio Gosodiad',
|
||||
'mfa_gen_totp_verify_setup_desc' => 'Gwiriwch fod popeth yn gweithio trwy roi cod, a gynhyrchwyd gan eich ap dilysu, yn y blwch mewnbwn isod:',
|
||||
'mfa_gen_totp_provide_code_here' => 'Rhowch y cod a gynhyrchwyd gan eich ap yma',
|
||||
'mfa_verify_access' => 'Gwirio Mynediad',
|
||||
'mfa_verify_access_desc' => 'Mae eich cyfrif defnyddiwr yn gofyn i chi gadarnhau pwy ydych chi trwy lefel ychwanegol o ddilysu cyn i chi gael mynediad. Gwiriwch gan ddefnyddio un o\'ch dulliau ffurfweddu i barhau.',
|
||||
'mfa_verify_no_methods' => 'Dim Dulliau wedi\'u Ffurfweddu',
|
||||
'mfa_verify_no_methods_desc' => 'Ni ellid dod o hyd i unrhyw ddulliau dilysu aml-ffactor ar gyfer eich cyfrif. Bydd angen i chi osod o leiaf un dull cyn i chi gael mynediad.',
|
||||
'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' => 'Rhowch un o\'ch codau wrth gefn sy\'n weddill isod:',
|
||||
'mfa_verify_backup_code_enter_here' => 'Cofnodi cod wrth gefn yma',
|
||||
'mfa_verify_totp_desc' => 'Rhowch y cod, a gynhyrchwyd gan ddefnyddio\'ch ap symudol, isod:',
|
||||
'mfa_setup_login_notification' => 'Dull aml-ffactor wedi\'i ffurfweddu, nawr mewngofnodwch eto gan ddefnyddio\'r dull wedi\'i ffurfweddu.',
|
||||
];
|
||||
|
||||
@@ -12,15 +12,15 @@ 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',
|
||||
'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.',
|
||||
'role' => 'Rôl',
|
||||
'cover_image' => 'Delwedd y clawr',
|
||||
'cover_image_description' => 'Dylai\'r ddelwedd hon fod oddeutu 440x250px er y bydd wedi\'i graddio a’i thocio i ffitio rhyngwyneb y defnyddiwr mewn gwahanol senarios yn ôl yr angen, felly bydd y dimensiynau arddangos gwirioneddol yn amrywio.',
|
||||
|
||||
// Actions
|
||||
'actions' => 'Gweithredoedd',
|
||||
@@ -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:',
|
||||
@@ -56,55 +56,58 @@ return [
|
||||
|
||||
// Sort Options
|
||||
'sort_options' => 'Trefnu\'r opsiynau',
|
||||
'sort_direction_toggle' => 'Sort Direction Toggle',
|
||||
'sort_direction_toggle' => 'Trefnu Cyfeiriad Togl',
|
||||
'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',
|
||||
'breadcrumb' => 'Breadcrumb',
|
||||
'status' => 'Status',
|
||||
'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' => 'Briwsion bara',
|
||||
'status' => 'Statws',
|
||||
'status_active' => 'Gweithredol',
|
||||
'status_inactive' => 'Anweithredol',
|
||||
'never' => 'Byth',
|
||||
'none' => 'Dim un',
|
||||
|
||||
// Header
|
||||
'homepage' => 'Homepage',
|
||||
'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',
|
||||
'global_search' => 'Global Search',
|
||||
'homepage' => 'Tudalen cartref',
|
||||
'header_menu_expand' => 'Ehangu Dewislen Pennawd',
|
||||
'profile_menu' => 'Dewislen Proffil',
|
||||
'view_profile' => 'Gweld proffil',
|
||||
'edit_profile' => 'Golygu Proffil',
|
||||
'dark_mode' => 'Modd Tywyll',
|
||||
'light_mode' => 'Modd Golau',
|
||||
'global_search' => 'Chwilio Byd-eang',
|
||||
|
||||
// Layout tabs
|
||||
'tab_info' => 'Gwybodaeth',
|
||||
'tab_info_label' => 'Tab: Show Secondary Information',
|
||||
'tab_info_label' => 'Tab: Dangos Gwybodaeth Eilaidd',
|
||||
'tab_content' => 'Cynnwys',
|
||||
'tab_content_label' => 'Tab: Show Primary Content',
|
||||
'tab_content_label' => 'Tab: Dangos Prif Gynnwys',
|
||||
|
||||
// Email Content
|
||||
'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:',
|
||||
'email_rights' => 'All rights reserved',
|
||||
'email_action_help' => 'Os ydych chi\'n cael trafferth clicio ar y botwm ":actionText", copïwch a gludwch yr URL isod i\'ch porwr gwe:',
|
||||
'email_rights' => 'Cedwir pob hawl',
|
||||
|
||||
// Footer Link Options
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Privacy Policy',
|
||||
'terms_of_service' => 'Terms of Service',
|
||||
'privacy_policy' => 'Polisi Preifatrwydd',
|
||||
'terms_of_service' => 'Telerau Gwasanaeth',
|
||||
|
||||
// OpenSearch
|
||||
'opensearch_description' => 'Chwilio :appName',
|
||||
];
|
||||
|
||||
@@ -5,42 +5,42 @@
|
||||
return [
|
||||
|
||||
// Image Manager
|
||||
'image_select' => 'Image Select',
|
||||
'image_select' => 'Dewis Llun',
|
||||
'image_list' => 'Rhestr o Ddelweddau',
|
||||
'image_details' => 'Manylion Delwedd',
|
||||
'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_upload' => 'Uwchlwytho Llun',
|
||||
'image_intro' => 'Yma gallwch ddewis a rheoli lluniau sydd wedi\'u huwchlwytho i’r system o’r blaen.',
|
||||
'image_intro_upload' => 'Uwchlwythwch lun newydd drwy lusgo ffeil llun i\'r ffenestr hon, neu drwy ddefnyddio\'r botwm "Uwchlwytho Llun" uchod.',
|
||||
'image_all' => 'Popeth',
|
||||
'image_all_title' => 'Gweld holl ddelweddau',
|
||||
'image_book_title' => 'View images uploaded to this book',
|
||||
'image_page_title' => 'View images uploaded to this page',
|
||||
'image_book_title' => 'Gweld lluniau a uwchlwythwyd i’r llyfr hwn',
|
||||
'image_page_title' => 'Gweld lluniau a uwchlwythwyd i’r dudalen hon',
|
||||
'image_search_hint' => 'Cwilio gan enw delwedd',
|
||||
'image_uploaded' => 'Uploaded :uploadedDate',
|
||||
'image_uploaded_by' => 'Uploaded by :userName',
|
||||
'image_uploaded_to' => 'Uploaded to :pageLink',
|
||||
'image_updated' => 'Updated :updateDate',
|
||||
'image_load_more' => 'Load More',
|
||||
'image_uploaded' => 'Uwchlwythwyd am :uploadedDate',
|
||||
'image_uploaded_by' => 'Uwchlwythwyd gan :userName',
|
||||
'image_uploaded_to' => 'Uwchlwythwyd i :pageLink',
|
||||
'image_updated' => 'Diweddarwyd am :updateDate',
|
||||
'image_load_more' => 'Llwytho Mwy',
|
||||
'image_image_name' => 'Enw Delwedd',
|
||||
'image_delete_used' => 'This image is used in the pages below.',
|
||||
'image_delete_used' => 'Mae\'r llun hwn yn cael ei ddefnyddio ar y tudalennau isod.',
|
||||
'image_delete_confirm_text' => 'Wyt ti\'n bendant eisiau dileu\'r ddelwedd hwn?',
|
||||
'image_select_image' => 'Select Image',
|
||||
'image_dropzone' => 'Drop images or click here to upload',
|
||||
'image_dropzone_drop' => 'Drop images here to upload',
|
||||
'image_select_image' => 'Dewis Llun',
|
||||
'image_dropzone' => 'Gollyngwch luniau neu cliciwch yma i uwchlwytho',
|
||||
'image_dropzone_drop' => 'Gollyngwch luniau yma i uwchlwytho',
|
||||
'images_deleted' => 'Delweddau wedi\'u Dileu',
|
||||
'image_preview' => 'Image Preview',
|
||||
'image_upload_success' => 'Image uploaded successfully',
|
||||
'image_update_success' => 'Image details successfully updated',
|
||||
'image_delete_success' => 'Image successfully deleted',
|
||||
'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_preview' => 'Rhagolwg o’r Llun',
|
||||
'image_upload_success' => 'Uwchlwythwyd y llun yn llwyddiannus',
|
||||
'image_update_success' => 'Diweddarwyd manylion y llun yn llwyddiannus',
|
||||
'image_delete_success' => 'Dilëwyd y llun yn llwyddiannus',
|
||||
'image_replace' => 'Newid y llun',
|
||||
'image_replace_success' => 'Ffeil llun wedi\'i diweddaru’n llwyddiannus',
|
||||
'image_rebuild_thumbs' => 'Atgynhyrchu Amrywiadau Maint',
|
||||
'image_rebuild_thumbs_success' => 'Ailadeiladwyd amrywiadau maint y llun yn llwyddiannus!',
|
||||
|
||||
// Code Editor
|
||||
'code_editor' => 'Edit Code',
|
||||
'code_language' => 'Code Language',
|
||||
'code_content' => 'Code Content',
|
||||
'code_session_history' => 'Session History',
|
||||
'code_save' => 'Save Code',
|
||||
'code_editor' => 'Golygu Cod',
|
||||
'code_language' => 'Iaith y Cod',
|
||||
'code_content' => 'Cynnwys y Cod',
|
||||
'code_session_history' => 'Hanes y Sesiwn',
|
||||
'code_save' => 'Cadw Cod',
|
||||
];
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
*/
|
||||
return [
|
||||
// General editor terms
|
||||
'general' => 'General',
|
||||
'advanced' => 'Advanced',
|
||||
'general' => 'Cyffredin',
|
||||
'advanced' => 'Datblygedig',
|
||||
'none' => 'Dim un',
|
||||
'cancel' => 'Canslo',
|
||||
'save' => 'Cadw',
|
||||
@@ -33,144 +33,144 @@ return [
|
||||
'header_small' => 'Pennyn Bach',
|
||||
'header_tiny' => 'Pennyn Mân',
|
||||
'paragraph' => 'Paragraff',
|
||||
'blockquote' => 'Blockquote',
|
||||
'inline_code' => 'Inline code',
|
||||
'callouts' => 'Callouts',
|
||||
'blockquote' => 'Dyfyniad bloc',
|
||||
'inline_code' => 'Cod mewnol',
|
||||
'callouts' => 'Galwadau',
|
||||
'callout_information' => 'Gwybodaeth',
|
||||
'callout_success' => 'Llwyddiant',
|
||||
'callout_warning' => 'Rhybudd',
|
||||
'callout_danger' => 'Perygl',
|
||||
'bold' => 'Trwm',
|
||||
'italic' => 'Italig',
|
||||
'underline' => 'Underline',
|
||||
'strikethrough' => 'Strikethrough',
|
||||
'superscript' => 'Superscript',
|
||||
'subscript' => 'Subscript',
|
||||
'underline' => 'Tanlinellu',
|
||||
'strikethrough' => 'Llinell Drwodd',
|
||||
'superscript' => 'Uwchysgrif',
|
||||
'subscript' => 'Isysgrif',
|
||||
'text_color' => 'Lliw testun',
|
||||
'custom_color' => 'Lliw addasu',
|
||||
'remove_color' => 'Remove color',
|
||||
'remove_color' => 'Dileu lliw',
|
||||
'background_color' => 'Lliw cefnder',
|
||||
'align_left' => 'Align left',
|
||||
'align_center' => 'Align center',
|
||||
'align_right' => 'Align right',
|
||||
'align_justify' => 'Justify',
|
||||
'list_bullet' => 'Bullet list',
|
||||
'list_numbered' => 'Numbered list',
|
||||
'list_task' => 'Task list',
|
||||
'indent_increase' => 'Increase indent',
|
||||
'indent_decrease' => 'Decrease indent',
|
||||
'table' => 'Table',
|
||||
'insert_image' => 'Insert image',
|
||||
'insert_image_title' => 'Insert/Edit Image',
|
||||
'insert_link' => 'Insert/edit link',
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
'insert_media_title' => 'Insert/Edit Media',
|
||||
'clear_formatting' => 'Clear formatting',
|
||||
'source_code' => 'Source code',
|
||||
'source_code_title' => 'Source Code',
|
||||
'fullscreen' => 'Fullscreen',
|
||||
'image_options' => 'Image options',
|
||||
'align_left' => 'Alinio i\'r chwith',
|
||||
'align_center' => 'Alinio i’r canol',
|
||||
'align_right' => 'Alinio i\'r dde',
|
||||
'align_justify' => 'Unioni',
|
||||
'list_bullet' => 'Rhestr o Bwyntiau Bwled',
|
||||
'list_numbered' => 'Rhestr wedi\'i rhifo',
|
||||
'list_task' => 'Rhestr dasgau',
|
||||
'indent_increase' => 'Cynyddu mewnoliad',
|
||||
'indent_decrease' => 'Lleihau mewnoliad',
|
||||
'table' => 'Bwrdd',
|
||||
'insert_image' => 'Mewnosod llun',
|
||||
'insert_image_title' => 'Mewnosod/Golygu Llun',
|
||||
'insert_link' => 'Mewnosod/golygu dolen',
|
||||
'insert_link_title' => 'Mewnosod/Golygu Dolen',
|
||||
'insert_horizontal_line' => 'Mewnosod llinell lorweddol',
|
||||
'insert_code_block' => 'Mewnosod bloc cod',
|
||||
'edit_code_block' => 'Golygu bloc cod',
|
||||
'insert_drawing' => 'Mewnosod/golygu dyluniad',
|
||||
'drawing_manager' => 'Rheolwr dylunio',
|
||||
'insert_media' => 'Mewnosod/golygu cyfryngau',
|
||||
'insert_media_title' => 'Mewnosod/Golygu Cyfryngau',
|
||||
'clear_formatting' => 'Clirio fformatio',
|
||||
'source_code' => 'Cod ffynhonnell',
|
||||
'source_code_title' => 'Cod Ffynhonnell',
|
||||
'fullscreen' => 'Sgrin lawn',
|
||||
'image_options' => 'Opsiynau llun',
|
||||
|
||||
// Tables
|
||||
'table_properties' => 'Table properties',
|
||||
'table_properties_title' => 'Table Properties',
|
||||
'delete_table' => 'Delete table',
|
||||
'table_clear_formatting' => 'Clear table formatting',
|
||||
'resize_to_contents' => 'Resize to contents',
|
||||
'row_header' => 'Row header',
|
||||
'insert_row_before' => 'Insert row before',
|
||||
'insert_row_after' => 'Insert row after',
|
||||
'delete_row' => 'Delete row',
|
||||
'insert_column_before' => 'Insert column before',
|
||||
'insert_column_after' => 'Insert column after',
|
||||
'delete_column' => 'Delete column',
|
||||
'table_properties' => 'Priodweddau tabl',
|
||||
'table_properties_title' => 'Priodweddau Tabl',
|
||||
'delete_table' => 'Dileu tabl',
|
||||
'table_clear_formatting' => 'Clirio fformatio tabl',
|
||||
'resize_to_contents' => 'Newid maint i\'r cynnwys',
|
||||
'row_header' => 'Pennyn rhes',
|
||||
'insert_row_before' => 'Mewnosod rhes cyn',
|
||||
'insert_row_after' => 'Mewnosod rhes ar ôl',
|
||||
'delete_row' => 'Dileu rhes',
|
||||
'insert_column_before' => 'Mewnosod colofn cyn',
|
||||
'insert_column_after' => 'Mewnosod colofn ar ôl',
|
||||
'delete_column' => 'Dileu colofn',
|
||||
'table_cell' => 'Cell',
|
||||
'table_row' => 'Row',
|
||||
'table_column' => 'Column',
|
||||
'cell_properties' => 'Cell properties',
|
||||
'cell_properties_title' => 'Cell Properties',
|
||||
'cell_type' => 'Cell type',
|
||||
'table_row' => 'Rhes',
|
||||
'table_column' => 'Colofn',
|
||||
'cell_properties' => 'Priodweddau cell',
|
||||
'cell_properties_title' => 'Priodweddau Cell',
|
||||
'cell_type' => 'Math o gell',
|
||||
'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_scope' => 'Cwmpas',
|
||||
'cell_type_header' => 'Pennyn cell',
|
||||
'merge_cells' => 'Uno celloedd',
|
||||
'split_cell' => 'Hollti cell',
|
||||
'table_row_group' => 'Grŵp Rhes',
|
||||
'table_column_group' => 'Grŵp Colofn',
|
||||
'horizontal_align' => 'Alinio llorweddol',
|
||||
'vertical_align' => 'Alinio fertigol',
|
||||
'border_width' => 'Lled y border',
|
||||
'border_style' => 'Arddull y border',
|
||||
'border_color' => 'Lliw y border',
|
||||
'row_properties' => 'Priodweddau’r rhes',
|
||||
'row_properties_title' => 'Priodweddau’r Rhes',
|
||||
'cut_row' => 'Torri rhes',
|
||||
'copy_row' => 'Copïo rhes',
|
||||
'paste_row_before' => 'Gludo rhes cyn',
|
||||
'paste_row_after' => 'Gludo rhes ar ôl',
|
||||
'row_type' => 'Math o res',
|
||||
'row_type_header' => 'Pennyn',
|
||||
'row_type_body' => 'Body',
|
||||
'row_type_body' => 'Corff',
|
||||
'row_type_footer' => 'Troedyn',
|
||||
'alignment' => 'Aliniad',
|
||||
'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',
|
||||
'cut_column' => 'Torri colofn',
|
||||
'copy_column' => 'Copïo colofn',
|
||||
'paste_column_before' => 'Gludo colofn cyn',
|
||||
'paste_column_after' => 'Gludo colofn ar ôl',
|
||||
'cell_padding' => 'Padio cell',
|
||||
'cell_spacing' => 'Bylchau rhwng celloedd',
|
||||
'caption' => 'Pennawd',
|
||||
'show_caption' => 'Dangos pennawd',
|
||||
'constrain' => 'Constrain proportions',
|
||||
'constrain' => 'Cyfyngu cyfrannau',
|
||||
'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',
|
||||
'cell_border_dotted' => 'Dotiog',
|
||||
'cell_border_dashed' => 'Llinell Doredig',
|
||||
'cell_border_double' => 'Dwbl',
|
||||
'cell_border_groove' => 'Rhigol',
|
||||
'cell_border_ridge' => 'Crib',
|
||||
'cell_border_inset' => 'Mewnosodiad',
|
||||
'cell_border_outset' => 'Cychwyniad',
|
||||
'cell_border_none' => 'Dim un',
|
||||
'cell_border_hidden' => 'Cuddiedig',
|
||||
|
||||
// Images, links, details/summary & embed
|
||||
'source' => 'Source',
|
||||
'alt_desc' => 'Alternative description',
|
||||
'embed' => 'Embed',
|
||||
'paste_embed' => 'Paste your embed code below:',
|
||||
'source' => 'Ffynhonnell',
|
||||
'alt_desc' => 'Disgrifiad amgen',
|
||||
'embed' => 'Ymgorffori',
|
||||
'paste_embed' => 'Gludwch eich cod ymgorffori isod:',
|
||||
'url' => 'URL',
|
||||
'text_to_display' => 'Text to display',
|
||||
'text_to_display' => 'Testun i\'w arddangos',
|
||||
'title' => 'Teitl',
|
||||
'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',
|
||||
'edit_label' => 'Edit label',
|
||||
'toggle_open_closed' => 'Toggle open/closed',
|
||||
'collapsible_edit' => 'Edit collapsible block',
|
||||
'toggle_label' => 'Toggle label',
|
||||
'open_link' => 'Agor dolen',
|
||||
'open_link_in' => 'Agor dolen yn...',
|
||||
'open_link_current' => 'Ffenestr bresennol',
|
||||
'open_link_new' => 'Ffenestr newydd',
|
||||
'remove_link' => 'Dileu dolen',
|
||||
'insert_collapsible' => 'Mewnosod bloc cwympadwy',
|
||||
'collapsible_unwrap' => 'Datod',
|
||||
'edit_label' => 'Golygu label',
|
||||
'toggle_open_closed' => 'Agor/cau Togl',
|
||||
'collapsible_edit' => 'Golygu bloc cwympadwy',
|
||||
'toggle_label' => 'Toglo 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' => 'Ynglŷn â\'r golygydd',
|
||||
'about_title' => 'Ynglŷn â\'r Golygydd WYSIWYG',
|
||||
'editor_license' => 'Trwydded a Hawlfraint Golygydd',
|
||||
'editor_tiny_license' => 'Mae\'r golygydd hwn wedi\'i adeiladu gan ddefnyddio :tinyLink sy\'n cael ei ddarparu o dan y drwydded MIT.',
|
||||
'editor_tiny_license_link' => 'Gellir dod o hyd i fanylion hawlfraint a thrwydded TinyMCE yma.',
|
||||
'save_continue' => 'Cadw Tudalen a Pharhau',
|
||||
'callouts_cycle' => '(Pwyswch i doglo drwy’r mathau)',
|
||||
'link_selector' => 'Dolen i\'r cynnwys',
|
||||
'shortcuts' => 'Llwybrau Byr',
|
||||
'shortcut' => 'Llwybr Byr',
|
||||
'shortcuts_intro' => 'Mae\'r llwybrau byr canlynol ar gael yn y golygydd:',
|
||||
'windows_linux' => '(Windows/Linux)',
|
||||
'mac' => '(Mac)',
|
||||
'description' => 'Disgrifiad',
|
||||
|
||||
@@ -6,432 +6,434 @@
|
||||
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',
|
||||
'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',
|
||||
'recently_created' => 'Crëwyd yn Ddiweddar',
|
||||
'recently_created_pages' => 'Tudalennau a Grëwyd yn Ddiweddar',
|
||||
'recently_updated_pages' => 'Tudalennau a Ddiweddarwyd yn Ddiweddar',
|
||||
'recently_created_chapters' => 'Penodau a Grëwyd yn Ddiweddar',
|
||||
'recently_created_books' => 'Llyfrau a Grëwyd yn Ddiweddar',
|
||||
'recently_created_shelves' => 'Silffoedd a Grëwyd yn Ddiweddar',
|
||||
'recently_update' => 'Diweddarwyd yn Ddiweddar',
|
||||
'recently_viewed' => 'Gwelwyd yn Ddiweddar',
|
||||
'recent_activity' => 'Gweithgaredd Diweddar',
|
||||
'create_now' => 'Creu un nawr',
|
||||
'revisions' => 'Diwygiadau',
|
||||
'meta_revision' => 'Diwygiad #:revisionCount',
|
||||
'meta_created' => 'Crëwyd',
|
||||
'meta_created_name' => 'Crëwyd :timeLength gan :user',
|
||||
'meta_updated' => 'Diweddarwyd :timeLength',
|
||||
'meta_updated_name' => 'Diweddarwyd :timeLength gan :user',
|
||||
'meta_owned_name' => 'Mae\'n eiddo i :user',
|
||||
'meta_reference_count' => 'Cyfeirir ato gan :count eitem|Cyfeirir ato gan :count o eitemau',
|
||||
'entity_select' => 'Dewis Endid',
|
||||
'entity_select_lack_permission' => 'Nid oes gennych y caniatâd angenrheidiol i ddewis yr eitem hon',
|
||||
'images' => 'Delweddau',
|
||||
'my_recent_drafts' => 'Fy Nrafftiau Diweddar',
|
||||
'my_recently_viewed' => 'Edrych yn Ddiweddar',
|
||||
'my_most_viewed_favourites' => 'Fy Ffefrynnau Mwyaf Poblogaidd',
|
||||
'my_favourites' => 'Fy Ffefrynnau',
|
||||
'no_pages_viewed' => 'Nid ydych wedi edrych ar unrhyw dudalennau',
|
||||
'no_pages_recently_created' => 'Nid oes unrhyw dudalennau wedi\'u creu\'n ddiweddar',
|
||||
'no_pages_recently_updated' => 'Nid oes unrhyw dudalennau wedi\'u diweddaru\'n ddiweddar',
|
||||
'export' => 'Allforio',
|
||||
'export_html' => 'Ffeil Gwe wedi\'i Chynnwys',
|
||||
'export_pdf' => 'Ffeil PDF',
|
||||
'export_text' => 'Ffeil Testun Plaen',
|
||||
'export_md' => 'Ffeil Markdown',
|
||||
'default_template' => 'Templed Tudalen Diofyn',
|
||||
'default_template_explain' => 'Clustnodwch dempled tudalen a fydd yn cael ei ddefnyddio fel y cynnwys diofyn ar gyfer pob tudalen a grëwyd yn yr eitem hon. Cofiwch y bydd hwn ond yn cael ei ddefnyddio os yw’r sawl a grëodd y dudalen â mynediad gweld i’r dudalen dempled a ddewiswyd.',
|
||||
'default_template_select' => 'Dewiswch dudalen templed',
|
||||
|
||||
// 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' => 'Caniatâd',
|
||||
'permissions_desc' => 'Gosodwch ganiatâd yma i ddiystyru\'r caniatâd diofyn a ddarperir gan rolau defnyddwyr.',
|
||||
'permissions_book_cascade' => 'Bydd caniatâd a osodir ar lyfrau yn rhaeadru’n awtomatig i benodau a thudalennau plant, oni bai bod ganddynt eu caniatâd diffiniedig eu hunain.',
|
||||
'permissions_chapter_cascade' => 'Bydd caniatâd a osodir ar benodau yn rhaeadru’n awtomatig i dudalennau plant, oni bai bod ganddynt eu caniatâd diffiniedig eu hunain.',
|
||||
'permissions_save' => 'Cadw Caniatâd',
|
||||
'permissions_owner' => 'Perchennog',
|
||||
'permissions_role_everyone_else' => 'Pawb arall',
|
||||
'permissions_role_everyone_else_desc' => 'Gosod caniatâd ar gyfer pob rôl nad ydynt yn cael eu diystyru\'n benodol.',
|
||||
'permissions_role_override' => 'Diystyru caniatâd ar gyfer rôl',
|
||||
'permissions_inherit_defaults' => 'Etifeddu rhagosodiadau',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Search Results',
|
||||
'search_total_results_found' => ':count result found|:count total results found',
|
||||
'search_clear' => 'Clear Search',
|
||||
'search_no_pages' => 'No pages matched this search',
|
||||
'search_for_term' => 'Search for :term',
|
||||
'search_more' => 'More Results',
|
||||
'search_advanced' => 'Advanced Search',
|
||||
'search_terms' => 'Search Terms',
|
||||
'search_content_type' => 'Content Type',
|
||||
'search_exact_matches' => 'Exact Matches',
|
||||
'search_tags' => 'Tag Searches',
|
||||
'search_options' => 'Options',
|
||||
'search_viewed_by_me' => 'Viewed by me',
|
||||
'search_not_viewed_by_me' => 'Not viewed by me',
|
||||
'search_permissions_set' => 'Permissions set',
|
||||
'search_created_by_me' => 'Created by me',
|
||||
'search_updated_by_me' => 'Updated by me',
|
||||
'search_owned_by_me' => 'Owned by me',
|
||||
'search_date_options' => 'Date Options',
|
||||
'search_updated_before' => 'Updated before',
|
||||
'search_updated_after' => 'Updated after',
|
||||
'search_created_before' => 'Created before',
|
||||
'search_created_after' => 'Created after',
|
||||
'search_set_date' => 'Set Date',
|
||||
'search_update' => 'Update Search',
|
||||
'search_results' => 'Canlyniadau Chwilio',
|
||||
'search_total_results_found' => 'Cafwyd :count canlyniad|Cafwyd cyfanswm o :count canlyniad',
|
||||
'search_clear' => 'Clirio\'r Chwiliad',
|
||||
'search_no_pages' => 'Nid oedd unrhyw dudalennau yn cyfateb â\'r chwiliad hwn',
|
||||
'search_for_term' => 'Chwilio am :term',
|
||||
'search_more' => 'Mwy o Ganlyniadau',
|
||||
'search_advanced' => 'Math o Gynnwys',
|
||||
'search_terms' => 'Termau Chwilio',
|
||||
'search_content_type' => 'Math o Gynnwys',
|
||||
'search_exact_matches' => 'Union Gyfatebiaethau',
|
||||
'search_tags' => 'Tagio Chwiliadau',
|
||||
'search_options' => 'Opsiynau',
|
||||
'search_viewed_by_me' => 'Gwelwyd gennyf fi',
|
||||
'search_not_viewed_by_me' => 'Nas gwelwyd gennyf fi',
|
||||
'search_permissions_set' => 'Gosod Caniatâd',
|
||||
'search_created_by_me' => 'Crëwyd gennyf fi',
|
||||
'search_updated_by_me' => 'Diweddarwyd gennyf fi',
|
||||
'search_owned_by_me' => 'Yn eiddo i mi',
|
||||
'search_date_options' => 'Opsiynau Dyddiad',
|
||||
'search_updated_before' => 'Diweddarwyd cyn',
|
||||
'search_updated_after' => 'Diweddarwyd ar ôl',
|
||||
'search_created_before' => 'Crëwyd cyn',
|
||||
'search_created_after' => 'Crëwyd ar ôl',
|
||||
'search_set_date' => 'Gosod Dyddiad',
|
||||
'search_update' => 'Diweddaru Chwiliad',
|
||||
|
||||
// Shelves
|
||||
'shelf' => 'Shelf',
|
||||
'shelves' => 'Shelves',
|
||||
'x_shelves' => ':count Shelf|: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_popular_empty' => 'The most popular shelves will appear here.',
|
||||
'shelves_new_empty' => 'The most recently created shelves will appear here.',
|
||||
'shelves_save' => 'Save Shelf',
|
||||
'shelves_books' => 'Books on this shelf',
|
||||
'shelves_add_books' => 'Add books to this shelf',
|
||||
'shelves_drag_books' => 'Drag books below to add them to this shelf',
|
||||
'shelves_empty_contents' => 'This shelf has no books assigned to it',
|
||||
'shelves_edit_and_assign' => 'Edit shelf to assign books',
|
||||
'shelves_edit_named' => 'Edit Shelf :name',
|
||||
'shelves_edit' => 'Edit Shelf',
|
||||
'shelves_delete' => 'Delete Shelf',
|
||||
'shelves_delete_named' => 'Delete Shelf :name',
|
||||
'shelves_delete_explain' => "This will delete the shelf with the name ':name'. Contained books will not be deleted.",
|
||||
'shelves_delete_confirmation' => 'Are you sure you want to delete this shelf?',
|
||||
'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_copy_permissions_to_books' => 'Copy Permissions to Books',
|
||||
'shelves_copy_permissions' => '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',
|
||||
'shelf' => 'Silff',
|
||||
'shelves' => 'Silffau',
|
||||
'x_shelves' => ':count Silff|:count Shelves',
|
||||
'shelves_empty' => 'Ni chrëwyd unrhyw silffoedd',
|
||||
'shelves_create' => 'Creu Silff Newydd',
|
||||
'shelves_popular' => 'Silffoedd Poblogaidd',
|
||||
'shelves_new' => 'Silffau Newydd',
|
||||
'shelves_new_action' => 'Silff Newydd',
|
||||
'shelves_popular_empty' => 'Bydd y silffoedd mwyaf poblogaidd yn ymddangos yma.',
|
||||
'shelves_new_empty' => 'Bydd y silffoedd a grëwyd fwyaf diweddar yn ymddangos yma.',
|
||||
'shelves_save' => 'Cadw Silff',
|
||||
'shelves_books' => 'Llyfrau ar y silff hon',
|
||||
'shelves_add_books' => 'Ychwanegu llyfrau i\'r silff hon',
|
||||
'shelves_drag_books' => 'Llusgwch lyfrau isod i\'w hychwanegu at y silff hon',
|
||||
'shelves_empty_contents' => 'Nid oes gan y silff hon unrhyw lyfrau wedi’u clustnodi iddi',
|
||||
'shelves_edit_and_assign' => 'Golygu silff i glustnodi llyfrau',
|
||||
'shelves_edit_named' => 'Golygu Silff :name',
|
||||
'shelves_edit' => 'Golygu Silff',
|
||||
'shelves_delete' => 'Dileu Silff',
|
||||
'shelves_delete_named' => 'Dileu Silff :name',
|
||||
'shelves_delete_explain' => "Bydd hyn yn dileu'r silff gyda'r enw ':name'. Ni fydd llyfrau wedi'u cynnwys yn cael eu dileu.",
|
||||
'shelves_delete_confirmation' => 'Ydych chi\'n siŵr eich bod chi eisiau dileu\'r silff hon?',
|
||||
'shelves_permissions' => 'Caniatâd Silffoedd',
|
||||
'shelves_permissions_updated' => 'Diweddarwyd Caniatâd Silffoedd',
|
||||
'shelves_permissions_active' => 'Caniatâd Silffoedd yn Weithredol',
|
||||
'shelves_permissions_cascade_warning' => 'Nid yw caniatâd ar silffoedd yn rhaeadru’n awtomatig i lyfrau sydd wedi\'u cynnwys. Mae hyn oherwydd y gall llyfr fodoli ar silffoedd lluosog. Fodd bynnag, gellir copïo caniatâd i lawr i lyfrau plant gan ddefnyddio\'r opsiwn a geir isod.',
|
||||
'shelves_permissions_create' => 'Dim ond ar gyfer copïo caniatâd i lyfrau plant y defnyddir caniatâd creu silff gan ddefnyddio\'r camau isod. Nid ydynt yn rheoli\'r gallu i greu llyfrau.',
|
||||
'shelves_copy_permissions_to_books' => 'Copïo Caniatâd i Lyfrau',
|
||||
'shelves_copy_permissions' => 'Copïo Caniatâd',
|
||||
'shelves_copy_permissions_explain' => 'Bydd hyn yn cymhwyso gosodiadau caniatâd presennol y silff hon i bob llyfr sydd wedi\'u cynnwys ynddi. Cyn ysgogi, gwnewch yn siŵr bod unrhyw newidiadau i ganiatâd y silff hon wedi\'u cadw.',
|
||||
'shelves_copy_permission_success' => 'Caniatâd silff wedi\'i gopïo i :count o lyfrau',
|
||||
|
||||
// Books
|
||||
'book' => 'Book',
|
||||
'books' => 'Books',
|
||||
'x_books' => ':count Book|:count Books',
|
||||
'books_empty' => 'No books have been created',
|
||||
'books_popular' => 'Popular Books',
|
||||
'books_recent' => 'Recent Books',
|
||||
'books_new' => 'New Books',
|
||||
'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_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_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_sort_current_book' => 'Sort the current book',
|
||||
'books_empty_add_chapter' => 'Add a chapter',
|
||||
'books_permissions_active' => 'Book Permissions Active',
|
||||
'books_search_this' => 'Search this book',
|
||||
'books_navigation' => 'Book Navigation',
|
||||
'books_sort' => 'Sort Book Contents',
|
||||
'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_named' => 'Sort Book :bookName',
|
||||
'books_sort_name' => 'Sort by Name',
|
||||
'books_sort_created' => 'Sort by Created Date',
|
||||
'books_sort_updated' => 'Sort by Updated Date',
|
||||
'books_sort_chapters_first' => 'Chapters First',
|
||||
'books_sort_chapters_last' => 'Chapters Last',
|
||||
'books_sort_show_other' => 'Show Other Books',
|
||||
'books_sort_save' => 'Save New Order',
|
||||
'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',
|
||||
'book' => 'Llyfr',
|
||||
'books' => 'Llyfrau',
|
||||
'x_books' => ':count Llyfr|:count o Lyfrau',
|
||||
'books_empty' => 'Ni chrëwyd unrhyw llyfrau',
|
||||
'books_popular' => 'Llyfrau Poblogaidd',
|
||||
'books_recent' => 'Llyfrau Diweddar',
|
||||
'books_new' => 'Llyfrau Newydd',
|
||||
'books_new_action' => 'Llyfr Newydd',
|
||||
'books_popular_empty' => 'Bydd y llyfrau mwyaf poblogaidd yn ymddangos yma.',
|
||||
'books_new_empty' => 'Bydd y llyfrau a grëwyd fwyaf diweddar yn ymddangos yma.',
|
||||
'books_create' => 'Creu Llyfr Newydd',
|
||||
'books_delete' => 'Dileu Llyfr',
|
||||
'books_delete_named' => 'Dileu :bookName Llyfr',
|
||||
'books_delete_explain' => 'Bydd hyn yn dileu\'r llyfr gyda\'r enw ‘:bookName’. Bydd yr holl dudalennau a phenodau yn cael eu dileu.',
|
||||
'books_delete_confirmation' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r llyfr hwn?',
|
||||
'books_edit' => 'Golygu\'r Llyfr',
|
||||
'books_edit_named' => 'Golygu :bookName Llyfr',
|
||||
'books_form_book_name' => 'Enw\'r Llyfr',
|
||||
'books_save' => 'Cadw Llyfr',
|
||||
'books_permissions' => 'Caniatâd Llyfr',
|
||||
'books_permissions_updated' => 'Diweddarwyd Caniatâd Llyfr',
|
||||
'books_empty_contents' => 'Ni chrëwyd unrhyw dudalennau neu benodau ar gyfer y llyfr hwn.',
|
||||
'books_empty_create_page' => 'Creu tudalen newydd',
|
||||
'books_empty_sort_current_book' => 'Trefnu’r llyfr presennol',
|
||||
'books_empty_add_chapter' => 'Ychwanegu pennod',
|
||||
'books_permissions_active' => 'Caniatâd Llyfr yn Weithredol',
|
||||
'books_search_this' => 'Chwilio\'r llyfr hwn',
|
||||
'books_navigation' => 'Llywio Llyfr',
|
||||
'books_sort' => 'Trefnu Cynnwys Llyfr',
|
||||
'books_sort_desc' => 'Symudwch benodau a thudalennau o fewn llyfr i ad-drefnu ei gynnwys. Gellir ychwanegu llyfrau eraill sy\'n caniatáu symud penodau a thudalennau yn hawdd rhwng llyfrau.',
|
||||
'books_sort_named' => 'Trefnu Llyfr :bookName',
|
||||
'books_sort_name' => 'Trefnu yn ôl Enw',
|
||||
'books_sort_created' => 'Trefnu yn ôl Dyddiad Creu',
|
||||
'books_sort_updated' => 'Trefnu yn ôl Dyddiad Diweddaru',
|
||||
'books_sort_chapters_first' => 'Penodau yn Gyntaf',
|
||||
'books_sort_chapters_last' => 'Penodau yn Olaf',
|
||||
'books_sort_show_other' => 'Dangos Llyfrau Eraill',
|
||||
'books_sort_save' => 'Cadw’r Drefn Newydd',
|
||||
'books_sort_show_other_desc' => 'Ychwanegwch lyfrau eraill yma i\'w cynnwys yn y gwaith didoli, a chaniatáu ad-drefnu hawdd rhwng llyfrau.',
|
||||
'books_sort_move_up' => 'Symud i Fyny',
|
||||
'books_sort_move_down' => 'Symud i Lawr',
|
||||
'books_sort_move_prev_book' => 'Symud i\'r Llyfr Blaenorol',
|
||||
'books_sort_move_next_book' => 'Symud i\'r Llyfr Nesaf',
|
||||
'books_sort_move_prev_chapter' => 'Symud i\'r Bennod Flaenorol',
|
||||
'books_sort_move_next_chapter' => 'Symud i\'r Bennod Nesaf',
|
||||
'books_sort_move_book_start' => 'Symud i Ddechrau\'r Llyfr',
|
||||
'books_sort_move_book_end' => 'Symud i Ddiwedd y Llyfr',
|
||||
'books_sort_move_before_chapter' => 'Symud i’r Bennod Cynt',
|
||||
'books_sort_move_after_chapter' => 'Symud i’r Bennod Ddilynol',
|
||||
'books_copy' => 'Copio Llyfr',
|
||||
'books_copy_success' => 'Llyfr wedi\'i copio\'n llwyddiannus',
|
||||
|
||||
// Chapters
|
||||
'chapter' => 'Chapter',
|
||||
'chapters' => 'Chapters',
|
||||
'x_chapters' => ':count Chapter|:count Chapters',
|
||||
'chapters_popular' => 'Popular Chapters',
|
||||
'chapters_new' => 'New Chapter',
|
||||
'chapters_create' => 'Create New Chapter',
|
||||
'chapters_delete' => 'Delete Chapter',
|
||||
'chapters_delete_named' => 'Delete Chapter :chapterName',
|
||||
'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',
|
||||
'chapters_edit_named' => 'Edit Chapter :chapterName',
|
||||
'chapters_save' => 'Save Chapter',
|
||||
'chapters_move' => 'Move Chapter',
|
||||
'chapters_move_named' => 'Move Chapter :chapterName',
|
||||
'chapters_copy' => 'Copy Chapter',
|
||||
'chapters_copy_success' => 'Chapter successfully copied',
|
||||
'chapters_permissions' => 'Chapter Permissions',
|
||||
'chapters_empty' => 'No pages are currently in this chapter.',
|
||||
'chapters_permissions_active' => 'Chapter Permissions Active',
|
||||
'chapters_permissions_success' => 'Chapter Permissions Updated',
|
||||
'chapters_search_this' => 'Search this chapter',
|
||||
'chapter_sort_book' => 'Sort Book',
|
||||
'chapter' => 'Pennod',
|
||||
'chapters' => 'Penodau',
|
||||
'x_chapters' => ':count Pennod|:count Penodau',
|
||||
'chapters_popular' => 'Penodau Poblogaidd',
|
||||
'chapters_new' => 'Pennod Newydd',
|
||||
'chapters_create' => 'Creu Pennod Newydd',
|
||||
'chapters_delete' => 'Dileu Pennod',
|
||||
'chapters_delete_named' => 'Dileu :chapterName Pennod',
|
||||
'chapters_delete_explain' => 'Bydd hyn yn dileu\'r bennod gyda\'r enw \':chapterName\'. Bydd yr holl dudalennau sy\'n bodoli yn y bennod hon hefyd yn cael eu dileu.',
|
||||
'chapters_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r bennod hon?',
|
||||
'chapters_edit' => 'Ychwanegu Pennod',
|
||||
'chapters_edit_named' => 'Ychwanegu Pennod :chapterName',
|
||||
'chapters_save' => 'Cadw Pennod',
|
||||
'chapters_move' => 'Symud Pennod',
|
||||
'chapters_move_named' => 'Symud Pennod :chapterName',
|
||||
'chapters_copy' => 'Copïo Pennod',
|
||||
'chapters_copy_success' => 'Pennod wedi\'i chopïo\'n llwyddiannus',
|
||||
'chapters_permissions' => 'Pennau Taith Pennod',
|
||||
'chapters_empty' => 'Does dim tudalennau yn y bennod hon ar hyn o bryd.',
|
||||
'chapters_permissions_active' => 'Caniatâd Pennod yn Weithredol',
|
||||
'chapters_permissions_success' => 'Diweddarwyd Caniatâd Pennod',
|
||||
'chapters_search_this' => 'Chwilio yn y bennod hon',
|
||||
'chapter_sort_book' => 'Trefnu Llyfr',
|
||||
|
||||
// Pages
|
||||
'page' => 'Page',
|
||||
'pages' => 'Pages',
|
||||
'x_pages' => ':count Page|:count Pages',
|
||||
'pages_popular' => 'Popular Pages',
|
||||
'pages_new' => 'New Page',
|
||||
'pages_attachments' => 'Attachments',
|
||||
'pages_navigation' => 'Page Navigation',
|
||||
'pages_delete' => 'Delete Page',
|
||||
'pages_delete_named' => 'Delete Page :pageName',
|
||||
'pages_delete_draft_named' => 'Delete Draft Page :pageName',
|
||||
'pages_delete_draft' => 'Delete Draft Page',
|
||||
'pages_delete_success' => 'Page deleted',
|
||||
'pages_delete_draft_success' => 'Draft page deleted',
|
||||
'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' => 'Are you sure you want to delete this page?',
|
||||
'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?',
|
||||
'pages_editing_named' => 'Editing Page :pageName',
|
||||
'pages_edit_draft_options' => 'Draft Options',
|
||||
'pages_edit_save_draft' => 'Save Draft',
|
||||
'pages_edit_draft' => 'Edit Page Draft',
|
||||
'pages_editing_draft' => 'Editing Draft',
|
||||
'pages_editing_page' => 'Editing Page',
|
||||
'pages_edit_draft_save_at' => 'Draft saved at ',
|
||||
'pages_edit_delete_draft' => '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_discard_draft' => '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_set_changelog' => 'Set Changelog',
|
||||
'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made',
|
||||
'pages_edit_enter_changelog' => 'Enter Changelog',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'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_save' => 'Save Page',
|
||||
'pages_title' => 'Page Title',
|
||||
'pages_name' => 'Page Name',
|
||||
'pages_md_editor' => 'Editor',
|
||||
'pages_md_preview' => 'Preview',
|
||||
'pages_md_insert_image' => 'Insert Image',
|
||||
'pages_md_insert_link' => 'Insert Entity Link',
|
||||
'pages_md_insert_drawing' => 'Insert Drawing',
|
||||
'pages_md_show_preview' => '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_not_in_chapter' => 'Page is not in a chapter',
|
||||
'pages_move' => 'Move Page',
|
||||
'pages_copy' => 'Copy Page',
|
||||
'pages_copy_desination' => 'Copy Destination',
|
||||
'pages_copy_success' => 'Page successfully copied',
|
||||
'pages_permissions' => 'Page Permissions',
|
||||
'pages_permissions_success' => 'Page permissions updated',
|
||||
'pages_revision' => 'Revision',
|
||||
'pages_revisions' => 'Page 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_named' => 'Page Revisions for :pageName',
|
||||
'pages_revision_named' => 'Page Revision for :pageName',
|
||||
'pages_revision_restored_from' => 'Restored from #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Created By',
|
||||
'pages_revisions_date' => 'Revision Date',
|
||||
'page' => 'Tudalen',
|
||||
'pages' => 'Tudalennau',
|
||||
'x_pages' => ':count Tudalen|:count Tudalennau',
|
||||
'pages_popular' => 'Tudalennau Poblogaidd',
|
||||
'pages_new' => 'Tudalen Newydd',
|
||||
'pages_attachments' => 'Atodiadau',
|
||||
'pages_navigation' => 'Llywio Tudalen',
|
||||
'pages_delete' => 'Dileu Tudalen',
|
||||
'pages_delete_named' => 'Dileu :pageName Tudalen',
|
||||
'pages_delete_draft_named' => 'Dileu Tudalen Ddrafft :pageName',
|
||||
'pages_delete_draft' => 'Dileu Tudalen Ddrafft',
|
||||
'pages_delete_success' => 'Tudalen wedi\'i dileu',
|
||||
'pages_delete_draft_success' => 'Tudalen ddrafft wedi’i dileu',
|
||||
'pages_delete_warning_template' => 'Mae\'r dudalen hon yn cael ei defnyddio\'n weithredol fel templed tudalen diofyn llyfr neu bennod. Ni fydd gan y llyfrau neu\'r penodau hyn dempled tudalen diofyn wedi\'i glustnodi ar ôl dileu\'r dudalen hon.',
|
||||
'pages_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r dudalen hon?',
|
||||
'pages_delete_draft_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r dudalen ddrafft hon?',
|
||||
'pages_editing_named' => 'Golygu Tudalen :pageName',
|
||||
'pages_edit_draft_options' => 'Opsiynau Drafft',
|
||||
'pages_edit_save_draft' => 'Cadw Drafft',
|
||||
'pages_edit_draft' => 'Golygu Tudalen Ddrafft',
|
||||
'pages_editing_draft' => 'Golygu Drafft',
|
||||
'pages_editing_page' => 'Golygu Tudalen',
|
||||
'pages_edit_draft_save_at' => 'Cadwyd drafft ar ',
|
||||
'pages_edit_delete_draft' => 'Dileu Drafft',
|
||||
'pages_edit_delete_draft_confirm' => 'Ydych chi\'n siŵr eich bod am ddileu eich newidiadau i’r dudalen ddrafft? Bydd eich holl newidiadau, ers eu cadw ddiwethaf, yn cael eu colli a bydd y golygydd yn cael ei ddiweddaru gyda\'r dudalen ddiweddaraf nad yw\'n ddrafft.',
|
||||
'pages_edit_discard_draft' => 'Gwaredu Drafft',
|
||||
'pages_edit_switch_to_markdown' => 'Newid i’r Golygydd Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Cynnwys Glân)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Cynnwys Glân)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Newid i Olygydd WYSIWYG',
|
||||
'pages_edit_switch_to_new_wysiwyg' => 'Newid i WYSIWYG newydd',
|
||||
'pages_edit_switch_to_new_wysiwyg_desc' => '(Mewn Profi Alpha)',
|
||||
'pages_edit_set_changelog' => 'Gosod Changelog',
|
||||
'pages_edit_enter_changelog_desc' => 'Rhowch ddisgrifiad byr o\'r newidiadau rydych wedi\'u gwneud',
|
||||
'pages_edit_enter_changelog' => 'Cofnodwch Changelog',
|
||||
'pages_editor_switch_title' => 'Newid Golygydd',
|
||||
'pages_editor_switch_are_you_sure' => 'Ydych chi\'n siŵr eich bod eisiau newid y golygydd ar gyfer y dudalen hon?',
|
||||
'pages_editor_switch_consider_following' => 'Ystyriwch y canlynol wrth newid golygyddion:',
|
||||
'pages_editor_switch_consideration_a' => 'Ar ôl ei gadw, bydd yr opsiwn golygydd newydd yn cael ei ddefnyddio gan unrhyw olygydd yn y dyfodol, gan gynnwys y rhai na fyddant efallai\'n gallu newid y math o olygydd eu hunain.',
|
||||
'pages_editor_switch_consideration_b' => 'Gall hyn arwain at golli manylion a Syntax mewn rhai amgylchiadau.',
|
||||
'pages_editor_switch_consideration_c' => 'Ni fydd newidiadau tag neu changelog, a wnaed ers eu cadw ddiwethaf, yn parhau ar draws y newid hwn.',
|
||||
'pages_save' => 'Cadw Tudalen',
|
||||
'pages_title' => 'Teitl y Dudalen',
|
||||
'pages_name' => 'Enw\'r Dudalen',
|
||||
'pages_md_editor' => 'Golygydd',
|
||||
'pages_md_preview' => 'Rhagolwg',
|
||||
'pages_md_insert_image' => 'Mewnosod Delwedd',
|
||||
'pages_md_insert_link' => 'Mewnosod Dolen Endid',
|
||||
'pages_md_insert_drawing' => 'Mewnosod Llun',
|
||||
'pages_md_show_preview' => 'Dangos rhagolwg',
|
||||
'pages_md_sync_scroll' => 'Cydamseru sgrôl ragolwg',
|
||||
'pages_drawing_unsaved' => 'Canfuwyd Llun heb ei Gadw',
|
||||
'pages_drawing_unsaved_confirm' => 'Canfuwyd data llun heb ei gadw o ymgais aflwyddiannus blaenorol i gadw llun. Hoffech chi adfer a pharhau i olygu\'r llun heb ei gadw?',
|
||||
'pages_not_in_chapter' => 'Nid yw\'r dudalen mewn pennod',
|
||||
'pages_move' => 'Symud Tudalen',
|
||||
'pages_copy' => 'Copïo Tudalen',
|
||||
'pages_copy_desination' => 'Copïo Cyrchfan',
|
||||
'pages_copy_success' => 'Tudalen wedi\'i chreu\'n llwyddiannus',
|
||||
'pages_permissions' => 'Pennau Taith Tudalen',
|
||||
'pages_permissions_success' => 'Pennau taith tudalen wedi\'u diweddaru',
|
||||
'pages_revision' => 'Diwygiad',
|
||||
'pages_revisions' => 'Diwygiadau\'r Dudalen',
|
||||
'pages_revisions_desc' => 'Isod ceir holl ddiwygiadau blaenorol y dudalen hon. Gallwch edrych yn ôl ar, cymharu, ac adfer hen fersiynau o’r dudalen os oes gennych y caniatâd priodol. Efallai na fydd hanes llawn y dudalen yn cael ei adlewyrchu\'n llawn yma oherwydd, gan ddibynnu ar ffurfweddiad y system, gallai hen fersiynau fod wedi’u dileu’n awtomatig.',
|
||||
'pages_revisions_named' => 'Diwygiadau Tudalen ar gyfer :pageName',
|
||||
'pages_revision_named' => 'Diwygiad Tudalen ar gyfer :pageName',
|
||||
'pages_revision_restored_from' => 'Adferwyd o #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Crëwyd gan',
|
||||
'pages_revisions_date' => 'Dyddiad Adolygu',
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_sort_number' => 'Revision Number',
|
||||
'pages_revisions_numbered' => 'Revision #:id',
|
||||
'pages_revisions_numbered_changes' => 'Revision #:id Changes',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_sort_number' => 'Rhif Diwygiad',
|
||||
'pages_revisions_numbered' => 'Diwygiad #:id',
|
||||
'pages_revisions_numbered_changes' => 'Diwygiad #:id Newidiadau',
|
||||
'pages_revisions_editor' => 'Math o Olygydd',
|
||||
'pages_revisions_changelog' => 'Changelog',
|
||||
'pages_revisions_changes' => 'Changes',
|
||||
'pages_revisions_current' => 'Current Version',
|
||||
'pages_revisions_preview' => 'Preview',
|
||||
'pages_revisions_restore' => 'Restore',
|
||||
'pages_revisions_none' => 'This page has no revisions',
|
||||
'pages_copy_link' => '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_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_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.',
|
||||
'pages_revisions_changes' => 'Newidiadau',
|
||||
'pages_revisions_current' => 'Fersiwn Bresennol',
|
||||
'pages_revisions_preview' => 'Rhagolwg',
|
||||
'pages_revisions_restore' => 'Adfer',
|
||||
'pages_revisions_none' => 'Nid oes gan y dudalen hon unrhyw ddiwygiadau',
|
||||
'pages_copy_link' => 'Copïo Dolen',
|
||||
'pages_edit_content_link' => 'Neidio i\'r adran yn y golygydd',
|
||||
'pages_pointer_enter_mode' => 'Rhowch y modd dethol adran',
|
||||
'pages_pointer_label' => 'Dewisiadau Adran Tudalen',
|
||||
'pages_pointer_permalink' => 'Dolen Barhaol Adran Tudalen',
|
||||
'pages_pointer_include_tag' => 'Adran Tudalen Cynnwys Tag',
|
||||
'pages_pointer_toggle_link' => 'Modd dolen barhaol, Pwyswch i ddangos cynnwys tag',
|
||||
'pages_pointer_toggle_include' => 'Modd cynnwys tag, Pwyswch i ddangos dolen barhaol',
|
||||
'pages_permissions_active' => 'Caniatâd Tudalen yn Weithredol',
|
||||
'pages_initial_revision' => 'Cyhoeddi cychwynnol',
|
||||
'pages_references_update_revision' => 'Diweddariad awtomatig y system o ddolenni mewnol',
|
||||
'pages_initial_name' => 'Tudalen Newydd',
|
||||
'pages_editing_draft_notification' => 'Rydych chi wrthi’n golygu drafft a gafodd ei gadw ddiwethaf ar :timeDiff.',
|
||||
'pages_draft_edited_notification' => 'Mae\'r dudalen hon wedi\'i diweddaru ers hynny. Argymhellir eich bod yn dileu\'r drafft hwn.',
|
||||
'pages_draft_page_changed_since_creation' => 'Mae\'r dudalen hon wedi\'i diweddaru ers i\'r drafft hwn gael ei greu. Argymhellir eich bod yn dileu\'r drafft hwn neu\'n sicrhau nad ydych yn ysgrifennu unrhyw newidiadau i’r dudalen.',
|
||||
'pages_draft_edit_active' => [
|
||||
'start_a' => ':count users have started editing this page',
|
||||
'start_b' => ':userName has started editing this page',
|
||||
'time_a' => 'since the page was last updated',
|
||||
'time_b' => 'in the last :minCount minutes',
|
||||
'message' => ':start :time. Take care not to overwrite each other\'s updates!',
|
||||
'start_a' => 'Mae :count defnyddiwr wedi dechrau golygu\'r dudalen hon',
|
||||
'start_b' => 'Mae :userName wedi dechrau golygu\'r dudalen hon',
|
||||
'time_a' => 'ers i\'r dudalen gael ei diweddaru ddiwethaf',
|
||||
'time_b' => 'yn y :minCount munud diwethaf',
|
||||
'message' => ':start :time. Gofalwch beidio ag ysgrifennu dros ddiweddariadau eich gilydd!',
|
||||
],
|
||||
'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_specific' => 'Specific Page',
|
||||
'pages_is_template' => 'Page Template',
|
||||
'pages_draft_discarded' => 'Drafft wedi\'i waredu! Mae\'r golygydd wedi\'i ddiweddaru gyda chynnwys presennol y dudalen',
|
||||
'pages_draft_deleted' => 'Drafft wedi\'i ddileu! Mae\'r golygydd wedi\'i ddiweddaru gyda chynnwys presennol y dudalen',
|
||||
'pages_specific' => 'Tudalen Benodol',
|
||||
'pages_is_template' => 'Templed Tudalen',
|
||||
|
||||
// Editor Sidebar
|
||||
'toggle_sidebar' => 'Toggle Sidebar',
|
||||
'page_tags' => 'Page Tags',
|
||||
'chapter_tags' => 'Chapter Tags',
|
||||
'book_tags' => 'Book Tags',
|
||||
'shelf_tags' => 'Shelf Tags',
|
||||
'toggle_sidebar' => 'Toglo Bar ochr',
|
||||
'page_tags' => 'Tagiau Tudalennau',
|
||||
'chapter_tags' => 'Tagiau Penodau',
|
||||
'book_tags' => 'Tagiau Llyfrau',
|
||||
'shelf_tags' => 'Tagiau Silffoedd',
|
||||
'tag' => 'Tag',
|
||||
'tags' => '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.',
|
||||
'tag_name' => 'Tag Name',
|
||||
'tag_value' => 'Tag Value (Optional)',
|
||||
'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.",
|
||||
'tags_add' => 'Add another tag',
|
||||
'tags_remove' => 'Remove this tag',
|
||||
'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_view_tags' => 'View Tags',
|
||||
'tags_view_existing_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.',
|
||||
'attachments' => 'Attachments',
|
||||
'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.',
|
||||
'attachments_explain_instant_save' => 'Changes here are saved instantly.',
|
||||
'attachments_upload' => 'Upload File',
|
||||
'attachments_link' => 'Attach Link',
|
||||
'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.',
|
||||
'attachments_set_link' => 'Set Link',
|
||||
'attachments_delete' => 'Are you sure you want to delete this attachment?',
|
||||
'attachments_dropzone' => 'Drop files here to upload',
|
||||
'attachments_no_files' => 'No files have been uploaded',
|
||||
'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.',
|
||||
'attachments_link_name' => 'Link Name',
|
||||
'attachment_link' => 'Attachment link',
|
||||
'attachments_link_url' => 'Link to file',
|
||||
'attachments_link_url_hint' => 'Url of site or file',
|
||||
'attach' => 'Attach',
|
||||
'attachments_insert_link' => 'Add Attachment Link to Page',
|
||||
'attachments_edit_file' => 'Edit File',
|
||||
'attachments_edit_file_name' => 'File Name',
|
||||
'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',
|
||||
'attachments_deleted' => 'Attachment deleted',
|
||||
'attachments_file_uploaded' => 'File successfully uploaded',
|
||||
'attachments_file_updated' => 'File successfully updated',
|
||||
'attachments_link_attached' => 'Link successfully attached to page',
|
||||
'templates' => 'Templates',
|
||||
'templates_set_as_template' => 'Page is a template',
|
||||
'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.',
|
||||
'templates_replace_content' => 'Replace page content',
|
||||
'templates_append_content' => 'Append to page content',
|
||||
'templates_prepend_content' => 'Prepend to page content',
|
||||
'tags' => 'Tagiau',
|
||||
'tags_index_desc' => 'Gellir cymhwyso tagiau i gynnwys o fewn y system i sicrhau categoreiddio hyblyg. Gall tagiau fod ag allwedd a gwerth, gyda\'r gwerth yn ddewisol. Ar ôl ei gymhwyso, gellir cwestiynu’r cynnwys gan ddefnyddio enw a gwerth y tag.',
|
||||
'tag_name' => 'Enw’r Tag',
|
||||
'tag_value' => 'Gwerth y Tag (Dewisol)',
|
||||
'tags_explain' => "Ychwanegwch rai tagiau i gategoreiddio'ch cynnwys yn well. Gallwch glustnodi gwerth i dag i gael trefn fanylach.",
|
||||
'tags_add' => 'Ychwanegu tag arall',
|
||||
'tags_remove' => 'Tynnu’r tag hwn',
|
||||
'tags_usages' => 'Cyfanswm y defnydd o’r tag',
|
||||
'tags_assigned_pages' => 'Clustnodwyd i Dudalennau',
|
||||
'tags_assigned_chapters' => 'Clustnodwyd i Benodau',
|
||||
'tags_assigned_books' => 'Clustnodwyd i Lyfrau',
|
||||
'tags_assigned_shelves' => 'Clustnodwyd i Silffoedd',
|
||||
'tags_x_unique_values' => ':count gwerthoedd unigryw',
|
||||
'tags_all_values' => 'Pob gwerth',
|
||||
'tags_view_tags' => 'Gweld Tagiau',
|
||||
'tags_view_existing_tags' => 'Gweld tagiau presennol',
|
||||
'tags_list_empty_hint' => 'Gellir clustnodi tagiau trwy far ochr golygydd y dudalen neu wrth olygu manylion llyfr, pennod neu silff.',
|
||||
'attachments' => 'Atodiadau',
|
||||
'attachments_explain' => 'Uwchlwytho rhai ffeiliau neu atodi rhai dolenni i\'w harddangos ar eich tudalen. Mae\'r rhain i\'w gweld ym mar ochr y dudalen.',
|
||||
'attachments_explain_instant_save' => 'Caiff y newidiadau yma eu cadw ar unwaith.',
|
||||
'attachments_upload' => 'Uwchlwytho Ffeil',
|
||||
'attachments_link' => 'Atodi Dolen',
|
||||
'attachments_upload_drop' => 'Neu gallwch lusgo a gollwng ffeil yma i\'w huwchlwytho fel atodiad.',
|
||||
'attachments_set_link' => 'Gosod Dolen',
|
||||
'attachments_delete' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r atodiad hwn?',
|
||||
'attachments_dropzone' => 'Gollyngwch ffeiliau yma i\'w huwchlwytho',
|
||||
'attachments_no_files' => 'Nid oes unrhyw ffeiliau wedi\'u huwchlwytho',
|
||||
'attachments_explain_link' => 'Gallwch atodi dolen pe bai’n well gennych beidio ag uwchlwytho ffeil. Gall hyn fod yn ddolen i dudalen arall neu\'n ddolen i ffeil yn y cwmwl.',
|
||||
'attachments_link_name' => 'Enw’r Ddolen',
|
||||
'attachment_link' => 'Dolen atodiad',
|
||||
'attachments_link_url' => 'Dolen i ffeil',
|
||||
'attachments_link_url_hint' => 'Url y safle neu ffeil',
|
||||
'attach' => 'Atodi',
|
||||
'attachments_insert_link' => 'Ychwanegu Dolen Atodiad i Dudalen',
|
||||
'attachments_edit_file' => 'Golygu Ffeil',
|
||||
'attachments_edit_file_name' => 'Enw\'r Ffeil',
|
||||
'attachments_edit_drop_upload' => 'Gollwng ffeiliau neu glicio yma i uwchlwytho ac arysgrifennu',
|
||||
'attachments_order_updated' => 'Trefn atodiad wedi’i diweddaru',
|
||||
'attachments_updated_success' => 'Manylion yr atodiad wedi\'u diweddaru',
|
||||
'attachments_deleted' => 'Atodiad wedi’i ddileu',
|
||||
'attachments_file_uploaded' => 'Ffeil wedi\'i huwchwytho\'n llwyddiannus',
|
||||
'attachments_file_updated' => 'Ffeil wedi\'i diweddaru’n llwyddiannus',
|
||||
'attachments_link_attached' => 'Dolen wedi\'i atodi’n llwyddiannus i\'r dudalen',
|
||||
'templates' => 'Templedi',
|
||||
'templates_set_as_template' => 'Mae\'r dudalen yn dempled',
|
||||
'templates_explain_set_as_template' => 'Gallwch osod y dudalen hon fel templed er mwyn gallu defnyddio ei chynnwys wrth greu tudalennau eraill. Bydd modd i ddefnyddwyr eraill ddefnyddio\'r templed hwn os oes ganddynt ganiatâd gweld ar gyfer y dudalen hon.',
|
||||
'templates_replace_content' => 'Disodli cynnwys tudalen',
|
||||
'templates_append_content' => 'Atodi i gynnwys tudalen',
|
||||
'templates_prepend_content' => 'Rhagarweiniad i gynnwys tudalen',
|
||||
|
||||
// Profile View
|
||||
'profile_user_for_x' => 'User for :time',
|
||||
'profile_created_content' => 'Created Content',
|
||||
'profile_not_created_pages' => ':userName has not created any pages',
|
||||
'profile_not_created_chapters' => ':userName has not created any chapters',
|
||||
'profile_not_created_books' => ':userName has not created any books',
|
||||
'profile_not_created_shelves' => ':userName has not created any shelves',
|
||||
'profile_user_for_x' => 'Defnyddiwr am :time',
|
||||
'profile_created_content' => 'Cynnwys a Grëwyd',
|
||||
'profile_not_created_pages' => 'Nid yw :userName wedi creu unrhyw dudalennau',
|
||||
'profile_not_created_chapters' => 'Nid yw :userName wedi creu unrhyw benodau',
|
||||
'profile_not_created_books' => 'Nid yw :userName wedi creu unrhyw lyfrau',
|
||||
'profile_not_created_shelves' => 'Nid yw :userName wedi creu unrhyw silffoedd',
|
||||
|
||||
// Comments
|
||||
'comment' => 'Comment',
|
||||
'comments' => 'Comments',
|
||||
'comment_add' => 'Add Comment',
|
||||
'comment_placeholder' => 'Leave a comment here',
|
||||
'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments',
|
||||
'comment_save' => 'Save Comment',
|
||||
'comment_new' => 'New Comment',
|
||||
'comment_created' => 'commented :createDiff',
|
||||
'comment_updated' => 'Updated :updateDiff by :username',
|
||||
'comment_updated_indicator' => 'Updated',
|
||||
'comment_deleted_success' => 'Comment deleted',
|
||||
'comment_created_success' => 'Comment added',
|
||||
'comment_updated_success' => 'Comment updated',
|
||||
'comment_delete_confirm' => 'Are you sure you want to delete this comment?',
|
||||
'comment_in_reply_to' => 'In reply to :commentId',
|
||||
'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.',
|
||||
'comment' => 'Sylw',
|
||||
'comments' => 'Sylwadau',
|
||||
'comment_add' => 'Ychwanegu Sylw',
|
||||
'comment_placeholder' => 'Gadewch sylw yma',
|
||||
'comment_count' => '{0} Dim sylwadau|{1} 1 Sylw| [2,*] :count Sylwadau',
|
||||
'comment_save' => 'Cadw Sylw',
|
||||
'comment_new' => 'Sylw Newydd',
|
||||
'comment_created' => 'sylwodd :createDiff',
|
||||
'comment_updated' => 'Diweddarwyd :update gan :username',
|
||||
'comment_updated_indicator' => 'Diweddarwyd',
|
||||
'comment_deleted_success' => 'Dilëwyd sylw',
|
||||
'comment_created_success' => 'Ychwanegwyd sylw',
|
||||
'comment_updated_success' => 'Diweddarwyd sylw',
|
||||
'comment_delete_confirm' => 'Ydych chi\'n siwr eich bod eisiau dileu\'r sylw hwn?',
|
||||
'comment_in_reply_to' => 'Mewn ymateb i :commentId',
|
||||
'comment_editor_explain' => 'Dyma\'r sylwadau sydd wedi eu gadael ar y dudalen hon. Gellir ychwanegu a rheoli sylwadau wrth edrych ar y dudalen a gadwyd.',
|
||||
|
||||
// Revision
|
||||
'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
|
||||
'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
|
||||
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
|
||||
'revision_delete_confirm' => 'Ydych chi\'n siŵr eich bod eisiau dileu\'r adolygiad hwn?',
|
||||
'revision_restore_confirm' => 'Ydych chi\'n siŵr eich bod eisiau adfer yr adolygiad hwn? Bydd cynnwys presennol y dudalen yn cael ei newid.',
|
||||
'revision_cannot_delete_latest' => 'Ni ellir dileu\'r adolygiad diweddaraf.',
|
||||
|
||||
// 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' => 'Ystyriwch yr isod wrth gopïo cynnwys.',
|
||||
'copy_consider_permissions' => 'Ni fydd gosodiadau caniatâd personol yn cael eu copïo.',
|
||||
'copy_consider_owner' => 'Byddwch yn dod yn berchennog yr holl gynnwys sydd wedi’i gopïo.',
|
||||
'copy_consider_images' => 'Ni fydd ffeiliau delwedd tudalen yn cael eu dyblygu a bydd y delweddau gwreiddiol yn cadw eu perthynas â\'r dudalen y cawsant eu huwchlwytho yn wreiddiol iddi.',
|
||||
'copy_consider_attachments' => 'Ni fydd atodiadau tudalen yn cael eu copïo.',
|
||||
'copy_consider_access' => 'Gall newid lleoliad, perchennog neu ganiatâd olygu bod y cynnwys hwn yn hygyrch i\'r rhai nad oedd ganddynt fynediad o\'r blaen.',
|
||||
|
||||
// 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' => 'Trosi i Silff',
|
||||
'convert_to_shelf_contents_desc' => 'Gallwch drosi\'r llyfr hwn i silff newydd gyda\'r un cynnwys. Bydd penodau yn y llyfr hwn yn cael eu trosi i lyfrau newydd. Os yw\'r llyfr hwn yn cynnwys unrhyw dudalennau, nad ydynt mewn pennod, bydd y llyfr hwn yn cael ei ailenwi ac yn cynnwys tudalennau o\'r fath, a bydd y llyfr hwn yn dod yn rhan o\'r silff newydd.',
|
||||
'convert_to_shelf_permissions_desc' => 'Bydd unrhyw ganiatâd a osodir ar y llyfr hwn yn cael ei gopïo i\'r silff newydd ac i bob llyfr plentyn newydd nad oes ganddynt eu caniatâd eu hunain. Noder nad yw caniatâd ar silffoedd yn rhaeadru’n awtomatig i’r cynnwys oddi mewn, fel y maent ar gyfer llyfrau.',
|
||||
'convert_book' => 'Trosi Llyfr',
|
||||
'convert_book_confirm' => 'Ydych chi\'n siwr eich bod eisiau trosi’r llyfr hwn?',
|
||||
'convert_undo_warning' => 'Ni ellir dad-wneud hyn mor hawdd.',
|
||||
'convert_to_book' => 'Trosi i Lyfr',
|
||||
'convert_to_book_desc' => 'Gallwch drosi\'r bennod hon i lyfr newydd gyda\'r un cynnwys. Bydd unrhyw ganiatâd a osodir ar y bennod hon yn cael ei gopïo i\'r llyfr newydd ond ni fydd unrhyw ganiatâd a etifeddir o\'r llyfr rhiant yn cael ei gopïo, a allai arwain at newid rheolaeth mynediad.',
|
||||
'convert_chapter' => 'Trosi Pennod',
|
||||
'convert_chapter_confirm' => 'Ydych chi\'n siŵr eich bod eisiau trosi’r bennod hon?',
|
||||
|
||||
// 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' => 'Cyfeirnodau',
|
||||
'references_none' => 'Nid oes unrhyw gyfeirnodau wedi\'u holrhain ar gyfer yr eitem hon.',
|
||||
'references_to_desc' => 'Isod ceir yr holl gynnwys hysbys yn y system sy\'n cysylltu â\'r eitem hon.',
|
||||
|
||||
// Watch Options
|
||||
'watch' => 'Watch',
|
||||
'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_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' => 'Gwylio',
|
||||
'watch_title_default' => 'Dewisiadau Diofyn',
|
||||
'watch_desc_default' => 'Newid i weld eich dewisiadau hysbysu diofyn yn unig.',
|
||||
'watch_title_ignore' => 'Anwybyddu',
|
||||
'watch_desc_ignore' => 'Anwybyddu pob hysbysiad, gan gynnwys y rhai o ddewisiadau lefel defnyddiwr.',
|
||||
'watch_title_new' => 'Tudalennau Newydd',
|
||||
'watch_desc_new' => 'Rhoi gwybod pan fydd unrhyw dudalen newydd yn cael ei chreu yn yr eitem hon.',
|
||||
'watch_title_updates' => 'Diweddariadau Pob Tudalen',
|
||||
'watch_desc_updates' => 'Hysbysu am bob tudalen newydd a newid i dudalennau.',
|
||||
'watch_desc_updates_page' => 'Hysbysu am bob newid i dudalennau.',
|
||||
'watch_title_comments' => 'Pob Diweddariad i Dualennau a Sylwadau',
|
||||
'watch_desc_comments' => 'Hysbysu am bob tudalen newydd, newidiadau i dudalennau a sylwadau newydd.',
|
||||
'watch_desc_comments_page' => 'Hysbysu am newidiadau i dudalennau a sylwadau newydd.',
|
||||
'watch_change_default' => 'Newid dewisiadau hysbysu diofyn',
|
||||
'watch_detail_ignore' => 'Anwybyddu hysbysiadau',
|
||||
'watch_detail_new' => 'Gwylio am dudalennau newydd',
|
||||
'watch_detail_updates' => 'Gwylio tudalennau a diweddariadau newydd',
|
||||
'watch_detail_comments' => 'Gwylio tudalennau newydd, diweddariadau a sylwadau',
|
||||
'watch_detail_parent_book' => 'Gwylio trwy lyfr rhiant',
|
||||
'watch_detail_parent_book_ignore' => 'Anwybyddu trwy lyfr rhiant',
|
||||
'watch_detail_parent_chapter' => 'Gwylio trwy bennod rhiant',
|
||||
'watch_detail_parent_chapter_ignore' => 'Anwybyddu trwy bennod rhiant',
|
||||
];
|
||||
|
||||
@@ -10,7 +10,7 @@ return [
|
||||
|
||||
// Auth
|
||||
'error_user_exists_different_creds' => 'Mae defnyddiwr gyda\'r e-bost :email eisoes yn bodoli ond gyda nodweddion gwahanol.',
|
||||
'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
|
||||
'auth_pre_register_theme_prevention' => 'Nid oedd modd cofrestru cyfrif defnyddiwr ar gyfer y manylion a ddarparwyd',
|
||||
'email_already_confirmed' => 'E-bost eisoes wedi\'i gadarnhau, Ceisiwch fewngofnodi.',
|
||||
'email_confirmation_invalid' => 'Nid yw\'r tocyn cadarnhau hwn yn ddilys neu mae eisoes wedi\'i ddefnyddio. Ceisiwch gofrestru eto.',
|
||||
'email_confirmation_expired' => 'Mae\'r tocyn cadarnhad wedi dod i ben, Mae e-bost cadarnhau newydd wedi\'i anfon.',
|
||||
@@ -37,36 +37,37 @@ return [
|
||||
'social_driver_not_found' => 'Gyrrwr cymdeithasol heb ei ganfod',
|
||||
'social_driver_not_configured' => 'Nid yw eich gosodiadau cymdeithasol :socialAccount wedi\'u ffurfweddu\'n gywir.',
|
||||
'invite_token_expired' => 'Mae\'r ddolen wahoddiad hon wedi dod i ben. Yn lle hynny, gallwch chi geisio ailosod cyfrinair eich cyfrif.',
|
||||
'login_user_not_found' => 'Nid oedd modd dod o hyd i ddefnyddiwr ar gyfer y weithred hon.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Nid oedd modd uwchlwytho llwybr ffeil :filePath. Sicrhewch ei fod yn ysgrifenadwy i\'r gweinydd.',
|
||||
'cannot_get_image_from_url' => 'Methu cael delwedd o :url',
|
||||
'cannot_create_thumbs' => 'Ni all y gweinydd greu mân-luniau. Gwiriwch fod gennych yr estyniad GD PHP wedi\'i osod.',
|
||||
'server_upload_limit' => 'Nid yw\'r gweinydd yn caniatáu uwchlwythiadau o\'r maint hwn. Rhowch gynnig ar faint ffeil llai.',
|
||||
'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.',
|
||||
'server_post_limit' => 'Ni all y gweinydd dderbyn y swm o ddata a ddarparwyd. Rhowch gynnig arall arni eto gyda llai o ddata neu ffeil lai.',
|
||||
'uploaded' => 'Nid yw\'r gweinydd yn caniatáu uwchlwythiadau o\'r maint hwn. Rhowch gynnig ar faint ffeil llai.',
|
||||
|
||||
// Drawing & Images
|
||||
'image_upload_error' => 'Bu gwall wrth uwchlwytho\'r ddelwedd',
|
||||
'image_upload_type_error' => 'Mae\'r math o ddelwedd sy\'n cael ei huwchlwytho yn annilys',
|
||||
'image_upload_replace_type' => 'Image file replacements must be of the same 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.',
|
||||
'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.',
|
||||
'image_upload_replace_type' => 'Rhaid i ffeiliau delwedd a newidir fod o\'r un math',
|
||||
'image_upload_memory_limit' => 'Methwyd â thrin y llun a uwchlwythwyd a/neu greu mân-luniau oherwydd cyfyngiadau i adnoddau’r system.',
|
||||
'image_thumbnail_memory_limit' => 'Methwyd â chreu amrywiadau i faint y llun oherwydd cyfyngiadau i adnoddau’r system.',
|
||||
'image_gallery_thumbnail_memory_limit' => 'Methwyd â chreu oriel o fân-luniau oherwydd cyfyngiadau i adnoddau’r system.',
|
||||
'drawing_data_not_found' => 'Nid oedd modd llwytho\'r data dylunio. Efallai nad yw’r ffeil ddylunio yn bodoli mwyach neu efallai nad oes gennych ganiatâd i\'w defnyddio.',
|
||||
|
||||
// Attachments
|
||||
'attachment_not_found' => 'Ni chanfuwyd yr atodiad',
|
||||
'attachment_upload_error' => 'An error occurred uploading the attachment file',
|
||||
'attachment_upload_error' => 'Digwyddodd gwall wrth uwchlwytho’r ffeil atodiad',
|
||||
|
||||
// Pages
|
||||
'page_draft_autosave_fail' => 'Wedi methu cadw\'r drafft. Sicrhewch fod gennych gysylltiad rhyngrwyd cyn cadw\'r dudalen hon',
|
||||
'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content',
|
||||
'page_draft_delete_fail' => 'Methwyd â dileu’r dudalen ddrafft a chyrchu cynnwys y dudalen gyfredol',
|
||||
'page_custom_home_deletion' => 'Methu dileu tudalen tra ei bod wedi\'i gosod fel hafan',
|
||||
|
||||
// Entities
|
||||
'entity_not_found' => 'Endid heb ei ganfod',
|
||||
'bookshelf_not_found' => 'Shelf not found',
|
||||
'bookshelf_not_found' => 'Ni chanfuwyd y silff',
|
||||
'book_not_found' => 'Ni chanfuwyd y llyfr',
|
||||
'page_not_found' => 'Heb ganfod y dudalen',
|
||||
'chapter_not_found' => 'Pennod heb ei chanfod',
|
||||
@@ -77,6 +78,7 @@ return [
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Ni allwch ddileu\'r unig weinyddwr',
|
||||
'users_cannot_delete_guest' => 'Ni allwch ddileu\'r defnyddiwr gwadd',
|
||||
'users_could_not_send_invite' => 'Methu creu defnyddiwr oherwydd ni fu modd anfon e-bost gwahodd',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Nid oes modd golygu\'r rôl hon',
|
||||
@@ -115,5 +117,5 @@ return [
|
||||
'maintenance_test_email_failure' => 'Gwall a daflwyd wrth anfon e-bost prawf:',
|
||||
|
||||
// HTTP errors
|
||||
'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts',
|
||||
'http_ssr_url_no_match' => 'Nid yw\'r URL yn cyd-fynd â\'r gwesteion SSR ffurfweddu a ganiateir',
|
||||
];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user