mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-07 11:19:38 +03:00
Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d11144d9e2 | ||
|
|
f96b0ea5f3 | ||
|
|
b4e29d2b7d | ||
|
|
2732d8961f | ||
|
|
b2f863e1f1 | ||
|
|
1df7497c09 | ||
|
|
d29a2a647a | ||
|
|
43f32f6d5a | ||
|
|
049d6ba5b2 | ||
|
|
815f8d79ed | ||
|
|
b62dab32e0 | ||
|
|
9d15688a43 | ||
|
|
033b163675 | ||
|
|
6eadf3efb3 | ||
|
|
f83cc83877 | ||
|
|
17215431ca | ||
|
|
90c543064b | ||
|
|
a709fd04b5 | ||
|
|
4a1d060eb9 | ||
|
|
e17cdab420 | ||
|
|
2d074caf72 | ||
|
|
99202b3bb8 | ||
|
|
73eac83afe | ||
|
|
c11f795c1d |
@@ -297,6 +297,11 @@ RECYCLE_BIN_LIFETIME=30
|
||||
# Maximum file size, in megabytes, that can be uploaded to the system.
|
||||
FILE_UPLOAD_SIZE_LIMIT=50
|
||||
|
||||
# Export Page Size
|
||||
# Primarily used to determine page size of PDF exports.
|
||||
# Can be 'a4' or 'letter'.
|
||||
EXPORT_PAGE_SIZE=a4
|
||||
|
||||
# Allow <script> tags in page content
|
||||
# Note, if set to 'true' the page editor may still escape scripts.
|
||||
ALLOW_CONTENT_SCRIPTS=false
|
||||
|
||||
4
.github/workflows/phpstan.yml
vendored
4
.github/workflows/phpstan.yml
vendored
@@ -3,10 +3,10 @@ name: phpstan
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
4
.github/workflows/phpunit.yml
vendored
4
.github/workflows/phpunit.yml
vendored
@@ -3,10 +3,10 @@ name: phpunit
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
4
.github/workflows/test-migrations.yml
vendored
4
.github/workflows/test-migrations.yml
vendored
@@ -3,10 +3,10 @@ name: test-migrations
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- l10n_master
|
||||
- l10n_development
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
@@ -60,8 +60,11 @@ class OidcJwtSigningKey
|
||||
*/
|
||||
protected function loadFromJwkArray(array $jwk)
|
||||
{
|
||||
if ($jwk['alg'] !== 'RS256') {
|
||||
throw new OidcInvalidKeyException("Only RS256 keys are currently supported. Found key using {$jwk['alg']}");
|
||||
// 'alg' is optional for a JWK, but we will still attempt to validate if
|
||||
// it exists otherwise presume it will be compatible.
|
||||
$alg = $jwk['alg'] ?? null;
|
||||
if ($jwk['kty'] !== 'RSA' || !(is_null($alg) || $alg === 'RS256')) {
|
||||
throw new OidcInvalidKeyException("Only RS256 keys are currently supported. Found key using {$alg}");
|
||||
}
|
||||
|
||||
if (empty($jwk['use'])) {
|
||||
|
||||
@@ -164,7 +164,9 @@ class OidcProviderSettings
|
||||
protected function filterKeys(array $keys): array
|
||||
{
|
||||
return array_filter($keys, function (array $key) {
|
||||
return $key['kty'] === 'RSA' && $key['use'] === 'sig' && $key['alg'] === 'RS256';
|
||||
$alg = $key['alg'] ?? null;
|
||||
|
||||
return $key['kty'] === 'RSA' && $key['use'] === 'sig' && (is_null($alg) || $alg === 'RS256');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
*/
|
||||
public function attachDefaultRole(): void
|
||||
{
|
||||
$roleId = setting('registration-role');
|
||||
$roleId = intval(setting('registration-role'));
|
||||
if ($roleId && $this->roles()->where('id', '=', $roleId)->count() === 0) {
|
||||
$this->roles()->attach($roleId);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
$dompdfPaperSizeMap = [
|
||||
'a4' => 'a4',
|
||||
'letter' => 'letter',
|
||||
];
|
||||
|
||||
return [
|
||||
|
||||
@@ -150,7 +154,7 @@ return [
|
||||
*
|
||||
* @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
|
||||
*/
|
||||
'default_paper_size' => 'a4',
|
||||
'default_paper_size' => $dompdfPaperSizeMap[env('EXPORT_PAGE_SIZE', 'a4')] ?? 'a4',
|
||||
|
||||
/**
|
||||
* The default font family.
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
$snappyPaperSizeMap = [
|
||||
'a4' => 'A4',
|
||||
'letter' => 'Letter',
|
||||
];
|
||||
|
||||
return [
|
||||
'pdf' => [
|
||||
@@ -14,7 +18,8 @@ return [
|
||||
'binary' => file_exists(base_path('wkhtmltopdf')) ? base_path('wkhtmltopdf') : env('WKHTMLTOPDF', false),
|
||||
'timeout' => false,
|
||||
'options' => [
|
||||
'outline' => true,
|
||||
'outline' => true,
|
||||
'page-size' => $snappyPaperSizeMap[env('EXPORT_PAGE_SIZE', 'a4')] ?? 'A4',
|
||||
],
|
||||
'env' => [],
|
||||
],
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
namespace BookStack\Console\Commands;
|
||||
|
||||
use BookStack\Auth\UserRepo;
|
||||
use BookStack\Exceptions\NotFoundException;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rules\Password;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
use Symfony\Component\Console\Command\Command as SymfonyCommand;
|
||||
@@ -19,7 +21,8 @@ class CreateAdmin extends Command
|
||||
protected $signature = 'bookstack:create-admin
|
||||
{--email= : The email address for the new admin user}
|
||||
{--name= : The name of the new admin user}
|
||||
{--password= : The password to assign to the new admin user}';
|
||||
{--password= : The password to assign to the new admin user}
|
||||
{--external-auth-id= : The external authentication system id for the new admin user (SAML2/LDAP/OIDC)}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
@@ -42,28 +45,35 @@ class CreateAdmin extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @throws \BookStack\Exceptions\NotFoundException
|
||||
* @throws NotFoundException
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$details = $this->options();
|
||||
$details = $this->snakeCaseOptions();
|
||||
|
||||
if (empty($details['email'])) {
|
||||
$details['email'] = $this->ask('Please specify an email address for the new admin user');
|
||||
}
|
||||
|
||||
if (empty($details['name'])) {
|
||||
$details['name'] = $this->ask('Please specify a name for the new admin user');
|
||||
}
|
||||
|
||||
if (empty($details['password'])) {
|
||||
$details['password'] = $this->ask('Please specify a password for the new admin user (8 characters min)');
|
||||
if (empty($details['external_auth_id'])) {
|
||||
$details['password'] = $this->ask('Please specify a password for the new admin user (8 characters min)');
|
||||
} else {
|
||||
$details['password'] = Str::random(32);
|
||||
}
|
||||
}
|
||||
|
||||
$validator = Validator::make($details, [
|
||||
'email' => ['required', 'email', 'min:5', new Unique('users', 'email')],
|
||||
'name' => ['required', 'min:2'],
|
||||
'password' => ['required', Password::default()],
|
||||
'email' => ['required', 'email', 'min:5', new Unique('users', 'email')],
|
||||
'name' => ['required', 'min:2'],
|
||||
'password' => ['required_without:external_auth_id', Password::default()],
|
||||
'external_auth_id' => ['required_without:password'],
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
@@ -84,4 +94,14 @@ class CreateAdmin extends Command
|
||||
|
||||
return SymfonyCommand::SUCCESS;
|
||||
}
|
||||
|
||||
protected function snakeCaseOptions(): array
|
||||
{
|
||||
$returnOpts = [];
|
||||
foreach ($this->options() as $key => $value) {
|
||||
$returnOpts[str_replace('-', '_', $key)] = $value;
|
||||
}
|
||||
|
||||
return $returnOpts;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,15 +109,35 @@ class PageContent
|
||||
|
||||
/**
|
||||
* Convert all inline base64 content to uploaded image files.
|
||||
* Regex is used to locate the start of data-uri definitions then
|
||||
* manual looping over content is done to parse the whole data uri.
|
||||
* Attempting to capture the whole data uri using regex can cause PHP
|
||||
* PCRE limits to be hit with larger, multi-MB, files.
|
||||
*/
|
||||
protected function extractBase64ImagesFromMarkdown(string $markdown)
|
||||
{
|
||||
$matches = [];
|
||||
preg_match_all('/!\[.*?]\(.*?(data:image\/.*?)[)"\s]/', $markdown, $matches);
|
||||
$contentLength = strlen($markdown);
|
||||
$replacements = [];
|
||||
preg_match_all('/!\[.*?]\(.*?(data:image\/.{1,6};base64,)/', $markdown, $matches, PREG_OFFSET_CAPTURE);
|
||||
|
||||
foreach ($matches[1] as $base64Match) {
|
||||
$newUrl = $this->base64ImageUriToUploadedImageUrl($base64Match);
|
||||
$markdown = str_replace($base64Match, $newUrl, $markdown);
|
||||
foreach ($matches[1] as $base64MatchPair) {
|
||||
[$dataUri, $index] = $base64MatchPair;
|
||||
|
||||
for ($i = strlen($dataUri) + $index; $i < $contentLength; $i++) {
|
||||
$char = $markdown[$i];
|
||||
if ($char === ')' || $char === ' ' || $char === "\n" || $char === '"') {
|
||||
break;
|
||||
}
|
||||
$dataUri .= $char;
|
||||
}
|
||||
|
||||
$newUrl = $this->base64ImageUriToUploadedImageUrl($dataUri);
|
||||
$replacements[] = [$dataUri, $newUrl];
|
||||
}
|
||||
|
||||
foreach ($replacements as [$dataUri, $newUrl]) {
|
||||
$markdown = str_replace($dataUri, $newUrl, $markdown);
|
||||
}
|
||||
|
||||
return $markdown;
|
||||
|
||||
@@ -62,6 +62,7 @@ class UserController extends Controller
|
||||
$this->checkPermission('users-manage');
|
||||
$authMethod = config('auth.method');
|
||||
$roles = $this->userRepo->getAllRoles();
|
||||
$this->setPageTitle(trans('settings.users_add_new'));
|
||||
|
||||
return view('users.create', ['authMethod' => $authMethod, 'roles' => $roles]);
|
||||
}
|
||||
@@ -76,8 +77,9 @@ class UserController extends Controller
|
||||
{
|
||||
$this->checkPermission('users-manage');
|
||||
$validationRules = [
|
||||
'name' => ['required'],
|
||||
'email' => ['required', 'email', 'unique:users,email'],
|
||||
'name' => ['required'],
|
||||
'email' => ['required', 'email', 'unique:users,email'],
|
||||
'setting' => ['array'],
|
||||
];
|
||||
|
||||
$authMethod = config('auth.method');
|
||||
@@ -104,6 +106,13 @@ class UserController extends Controller
|
||||
DB::transaction(function () use ($user, $sendInvite, $request) {
|
||||
$user->save();
|
||||
|
||||
// Save user-specific settings
|
||||
if ($request->filled('setting')) {
|
||||
foreach ($request->get('setting') as $key => $value) {
|
||||
setting()->putUser($user, $key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
if ($sendInvite) {
|
||||
$this->inviteService->sendInvitation($user);
|
||||
}
|
||||
@@ -198,7 +207,7 @@ class UserController extends Controller
|
||||
$user->external_auth_id = $request->get('external_auth_id');
|
||||
}
|
||||
|
||||
// Save an user-specific settings
|
||||
// Save user-specific settings
|
||||
if ($request->filled('setting')) {
|
||||
foreach ($request->get('setting') as $key => $value) {
|
||||
setting()->putUser($user, $key, $value);
|
||||
|
||||
@@ -2,35 +2,33 @@
|
||||
|
||||
namespace BookStack\Notifications;
|
||||
|
||||
use BookStack\Auth\User;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class UserInvite extends MailNotification
|
||||
{
|
||||
public $token;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @param string $token
|
||||
*/
|
||||
public function __construct($token)
|
||||
public function __construct(string $token)
|
||||
{
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
*
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
public function toMail(User $notifiable): MailMessage
|
||||
{
|
||||
$appName = ['appName' => setting('app-name')];
|
||||
$language = setting()->getUser($notifiable, 'language');
|
||||
|
||||
return $this->newMailMessage()
|
||||
->subject(trans('auth.user_invite_email_subject', $appName))
|
||||
->greeting(trans('auth.user_invite_email_greeting', $appName))
|
||||
->line(trans('auth.user_invite_email_text'))
|
||||
->action(trans('auth.user_invite_email_action'), url('/register/invite/' . $this->token));
|
||||
->subject(trans('auth.user_invite_email_subject', $appName, $language))
|
||||
->greeting(trans('auth.user_invite_email_greeting', $appName, $language))
|
||||
->line(trans('auth.user_invite_email_text', [], $language))
|
||||
->action(trans('auth.user_invite_email_action', [], $language), url('/register/invite/' . $this->token));
|
||||
}
|
||||
}
|
||||
|
||||
50
public/dist/app.js
vendored
50
public/dist/app.js
vendored
File diff suppressed because one or more lines are too long
19
readme.md
19
readme.md
@@ -1,7 +1,7 @@
|
||||
# BookStack
|
||||
|
||||
[](https://github.com/BookStackApp/BookStack/releases/latest)
|
||||
[](https://github.com/BookStackApp/BookStack/blob/master/LICENSE)
|
||||
[](https://github.com/BookStackApp/BookStack/blob/development/LICENSE)
|
||||
[](https://crowdin.com/project/bookstack)
|
||||
[](https://discord.gg/ztkBqR2)
|
||||
[](https://gh-stats.bookstackapp.com/)
|
||||
@@ -34,11 +34,14 @@ Big thanks to these companies for supporting the project.
|
||||
Note: Listed services are not tested, vetted nor supported by the official BookStack project in any manner.
|
||||
[View all sponsors](https://github.com/sponsors/ssddanbrown).
|
||||
|
||||
#### Silver Sponsor
|
||||
#### Silver Sponsors
|
||||
|
||||
<table><tbody><tr>
|
||||
<td><a href="https://www.diagrams.net/" target="_blank">
|
||||
<img width="420" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/diagramsnet.png" alt="Diagrams.net">
|
||||
<img width="400" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/diagramsnet.png" alt="Diagrams.net">
|
||||
</a></td>
|
||||
<td><a href="https://cloudabove.com/hosting" target="_blank">
|
||||
<img height="100" src="https://raw.githubusercontent.com/BookStackApp/website/main/static/images/sponsors/cloudabove.svg" alt="Cloudabove">
|
||||
</a></td>
|
||||
</tr></tbody></table>
|
||||
|
||||
@@ -79,7 +82,7 @@ Feature releases, and some patch releases, will be accompanied by a post on the
|
||||
|
||||
## 🛠️ Development & Testing
|
||||
|
||||
All development on BookStack is currently done on the master branch. When it's time for a release the master branch is merged into release with built & minified CSS & JS then tagged at its version. Here are the current development requirements:
|
||||
All development on BookStack is currently done on the `development` branch. When it's time for a release the `development` branch is merged into release with built & minified CSS & JS then tagged at its version. Here are the current development requirements:
|
||||
|
||||
* [Node.js](https://nodejs.org/en/) v14.0+
|
||||
|
||||
@@ -175,9 +178,9 @@ Feel free to create issues to request new features or to report bugs & problems.
|
||||
|
||||
Pull requests are welcome. Unless a small tweak or language update, It may be best to open the pull request early or create an issue for your intended change to discuss how it will fit in to the project and plan out the merge. Just because a feature request exists, or is tagged, does not mean that feature would be accepted into the core project.
|
||||
|
||||
Pull requests should be created from the `master` branch since they will be merged back into `master` once done. Please do not build from or request a merge into the `release` branch as this is only for publishing releases. If you are looking to alter CSS or JavaScript content please edit the source files found in `resources/`. Any CSS or JS files within `public` are built from these source files and therefore should not be edited directly.
|
||||
Pull requests should be created from the `development` branch since they will be merged back into `development` once done. Please do not build from or request a merge into the `release` branch as this is only for publishing releases. If you are looking to alter CSS or JavaScript content please edit the source files found in `resources/`. Any CSS or JS files within `public` are built from these source files and therefore should not be edited directly.
|
||||
|
||||
The project's code of conduct [can be found here](https://github.com/BookStackApp/BookStack/blob/master/.github/CODE_OF_CONDUCT.md).
|
||||
The project's code of conduct [can be found here](https://github.com/BookStackApp/BookStack/blob/development/.github/CODE_OF_CONDUCT.md).
|
||||
|
||||
## 🔒 Security
|
||||
|
||||
@@ -185,7 +188,7 @@ Security information for administering a BookStack instance can be found on the
|
||||
|
||||
If you'd like to be notified of new potential security concerns you can [sign-up to the BookStack security mailing list](https://updates.bookstackapp.com/signup/bookstack-security-updates).
|
||||
|
||||
If you would like to report a security concern, details of doing so can [can be found here](https://github.com/BookStackApp/BookStack/blob/master/.github/SECURITY.md).
|
||||
If you would like to report a security concern, details of doing so can [can be found here](https://github.com/BookStackApp/BookStack/blob/development/.github/SECURITY.md).
|
||||
|
||||
## ♿ Accessibility
|
||||
|
||||
@@ -203,7 +206,7 @@ The BookStack source is provided under the MIT License. The libraries used by, a
|
||||
|
||||
The great people that have worked to build and improve BookStack can [be seen here](https://github.com/BookStackApp/BookStack/graphs/contributors).
|
||||
|
||||
The wonderful people that have provided translations, either through GitHub or via Crowdin [can be seen here](https://github.com/BookStackApp/BookStack/blob/master/.github/translators.txt).
|
||||
The wonderful people that have provided translations, either through GitHub or via Crowdin [can be seen here](https://github.com/BookStackApp/BookStack/blob/development/.github/translators.txt).
|
||||
|
||||
These are the great open-source projects used to help build BookStack:
|
||||
|
||||
|
||||
@@ -136,18 +136,14 @@ function codePlugin() {
|
||||
const selectedNode = editor.selection.getNode();
|
||||
|
||||
if (!elemIsCodeBlock(selectedNode)) {
|
||||
const providedCode = editor.selection.getNode().textContent;
|
||||
const providedCode = editor.selection.getContent({format: 'text'});
|
||||
window.components.first('code-editor').open(providedCode, '', (code, lang) => {
|
||||
const wrap = document.createElement('div');
|
||||
wrap.innerHTML = `<pre><code class="language-${lang}"></code></pre>`;
|
||||
wrap.querySelector('code').innerText = code;
|
||||
|
||||
editor.formatter.toggle('pre');
|
||||
const node = editor.selection.getNode();
|
||||
editor.dom.setHTML(node, wrap.querySelector('pre').innerHTML);
|
||||
editor.fire('SetContent');
|
||||
|
||||
editor.focus()
|
||||
editor.insertContent(wrap.innerHTML);
|
||||
editor.focus();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'عرض القائمة',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'يجب أن يكون :attribute بعدد خانات بين :min و :max.',
|
||||
'email' => 'يجب أن يكون :attribute عنوان بريد إلكتروني صالح.',
|
||||
'ends_with' => 'يجب أن تنتهي السمة بأحد القيم التالية',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'حقل :attribute مطلوب.',
|
||||
'gt' => [
|
||||
'numeric' => 'يجب أن تكون السمة أكبر من: القيمة.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute трябва да бъде с дължина между :min и :max цифри.',
|
||||
'email' => ':attribute трябва да бъде валиден имейл адрес.',
|
||||
'ends_with' => ':attribute трябва да свършва с един от следните символи: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Полето :attribute е задължителен.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute трябва да бъде по-голям от :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Otvori meni u zaglavlju',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute mora imati između :min i :max brojeva.',
|
||||
'email' => ':attribute mora biti ispravna e-mail adresa.',
|
||||
'ends_with' => ':attribute mora završavati sa jednom od sljedećih: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Polje :attribute je obavezno.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute mora biti veći od :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'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',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'El camp :attribute és obligatori.',
|
||||
'gt' => [
|
||||
'numeric' => 'El camp :attribute ha de ser més gran que :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Aktivní',
|
||||
'status_inactive' => 'Neaktivní',
|
||||
'never' => 'Nikdy',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Rozbalit menu v záhlaví',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute musí být dlouhé nejméně :min a nejvíce :max pozic.',
|
||||
'email' => ':attribute není platný formát.',
|
||||
'ends_with' => ':attribute musí končit jednou z následujících hodnot: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute musí být vyplněno.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute musí být větší než :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Udvid header menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute skal være mellem :min og :max cifre.',
|
||||
'email' => ':attribute skal være en gyldig mail-adresse.',
|
||||
'ends_with' => ':attribute skal slutte på en af følgende værdier: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute er obligatorisk.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute skal være større end :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Aktiv',
|
||||
'status_inactive' => 'Inaktiv',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Header-Menü erweitern',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.',
|
||||
'email' => ':attribute muss eine valide E-Mail-Adresse sein.',
|
||||
'ends_with' => ':attribute muss mit einem der folgenden Werte: :values enden',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute ist erforderlich.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute muss größer als :value sein.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Aktiv',
|
||||
'status_inactive' => 'Inaktiv',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Header-Menü erweitern',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.',
|
||||
'email' => ':attribute muss eine valide E-Mail-Adresse sein.',
|
||||
'ends_with' => ':attribute muss mit einem der folgenden Werte: :values enden',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute ist erforderlich.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute muss größer als :value sein.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'The :attribute field is required.',
|
||||
'gt' => [
|
||||
'numeric' => 'The :attribute must be greater than :value.',
|
||||
|
||||
@@ -64,7 +64,7 @@ return [
|
||||
'email_not_confirmed_resend_button' => 'Reenviar Correo Electrónico de confirmación',
|
||||
|
||||
// User Invite
|
||||
'user_invite_email_subject' => 'Has sido invitado a unirte a :appName!',
|
||||
'user_invite_email_subject' => 'As sido invitado a unirte a :appName!',
|
||||
'user_invite_email_greeting' => 'Se ha creado una cuenta para usted en :appName.',
|
||||
'user_invite_email_text' => 'Clica en el botón a continuación para ajustar una contraseña y poder acceder:',
|
||||
'user_invite_email_action' => 'Ajustar la Contraseña de la Cuenta',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Activo',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Nunca',
|
||||
'none' => 'Ninguno',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expandir el Menú de la Cabecera',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute debe ser un valor entre :min y :max dígios.',
|
||||
'email' => ':attribute debe ser un correo electrónico válido.',
|
||||
'ends_with' => 'El :attribute debe terminar con uno de los siguientes: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'El campo :attribute es requerido.',
|
||||
'gt' => [
|
||||
'numeric' => 'El :attribute debe ser mayor que :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Activo',
|
||||
'status_inactive' => 'Inactivo',
|
||||
'never' => 'Nunca',
|
||||
'none' => 'Ninguno',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expandir el Menú de Cabecera',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute debe ser un valor entre :min y :max dígios.',
|
||||
'email' => ':attribute debe ser una dirección álida.',
|
||||
'ends_with' => 'El :attribute debe terminar con uno de los siguientes: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'El campo :attribute es requerido.',
|
||||
'gt' => [
|
||||
'numeric' => 'El :attribute debe ser mayor que :value.',
|
||||
|
||||
@@ -28,8 +28,8 @@ return [
|
||||
'create_account' => 'Loo konto',
|
||||
'already_have_account' => 'Kasutajakonto juba olemas?',
|
||||
'dont_have_account' => 'Sul ei ole veel kontot?',
|
||||
'social_login' => 'Social Login',
|
||||
'social_registration' => 'Social Registration',
|
||||
'social_login' => 'Sisene läbi sotsiaalmeedia',
|
||||
'social_registration' => 'Registreeru läbi sotsiaalmeedia',
|
||||
'social_registration_text' => 'Registreeru ja logi sisse välise teenuse kaudu.',
|
||||
|
||||
'register_thanks' => 'Aitäh, et registreerusid!',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Aktiivne',
|
||||
'status_inactive' => 'Mitteaktiivne',
|
||||
'never' => 'Mitte kunagi',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Laienda päisemenüü',
|
||||
|
||||
@@ -23,7 +23,7 @@ return [
|
||||
'meta_updated' => 'Muudetud :timeLength',
|
||||
'meta_updated_name' => 'Muudetud :timeLength kasutaja :user poolt',
|
||||
'meta_owned_name' => 'Kuulub kasutajale :user',
|
||||
'entity_select' => 'Entity Select',
|
||||
'entity_select' => 'Objekti valik',
|
||||
'images' => 'Pildid',
|
||||
'my_recent_drafts' => 'Minu hiljutised mustandid',
|
||||
'my_recently_viewed' => 'Minu viimati vaadatud',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute peab olema :min ja :max numbri vahel.',
|
||||
'email' => ':attribute peab olema kehtiv e-posti aadress.',
|
||||
'ends_with' => ':attribute lõpus peab olema üks järgmistest väärtustest: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute väli on kohustuslik.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute peab olema suurem kui :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'فعال',
|
||||
'status_inactive' => 'غیر فعال',
|
||||
'never' => 'هرگز',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'گسترش منو',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute باید بین :min و :max رقم باشد.',
|
||||
'email' => ':attribute باید یک ایمیل معتبر باشد.',
|
||||
'ends_with' => 'فیلد :attribute باید با یکی از مقادیر زیر خاتمه یابد: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'فیلد :attribute باید مقدار داشته باشد.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute باید بزرگتر از :value باشد.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Actif',
|
||||
'status_inactive' => 'Inactif',
|
||||
'never' => 'Jamais',
|
||||
'none' => 'Aucun',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Développer le menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute doit avoir une longueur entre :min et :max.',
|
||||
'email' => ':attribute doit être une adresse e-mail valide.',
|
||||
'ends_with' => ':attribute doit se terminer par une des valeurs suivantes : :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute est un champ requis.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute doit être plus grand que :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'שדה :attribute חייב להיות בין :min ו-:max ספרות.',
|
||||
'email' => 'שדה :attribute חייב להיות כתובת אימייל תקנית.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'שדה :attribute הוא חובה.',
|
||||
'gt' => [
|
||||
'numeric' => 'The :attribute must be greater than :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Proširi izbornik',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute mora biti između :min i :max znamenki.',
|
||||
'email' => ':attribute mora biti valjana email adresa.',
|
||||
'ends_with' => ':attribute mora završiti s :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute polje je obavezno.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute mora biti veći od :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute hosszának :min és :max számjegy között kell lennie.',
|
||||
'email' => ':attribute érvényes email cím kell legyen.',
|
||||
'ends_with' => ':attribute attribútumnak a következők egyikével kell végződnie: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute mező kötelező.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute nagyobb kell, hogy legyen, mint :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Perluas Menu Tajuk',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute harus diantara :min dan :max digit.',
|
||||
'email' => ':attrtibute Harus alamat e-mail yang valid.',
|
||||
'ends_with' => ':attribute harus diakhiri dengan salah satu dari berikut ini: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute bidang diperlukan.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute harus lebih besar dari :value.',
|
||||
|
||||
@@ -74,7 +74,8 @@ return [
|
||||
'status' => 'Stato',
|
||||
'status_active' => 'Attivo',
|
||||
'status_inactive' => 'Inattivo',
|
||||
'never' => 'Never',
|
||||
'never' => 'Mai',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Espandi Menù Intestazione',
|
||||
|
||||
@@ -246,7 +246,7 @@ return [
|
||||
'webhooks_events_warning' => 'Tieni presente che questi eventi saranno attivati per tutti gli eventi selezionati, anche se vengono applicati permessi personalizzati. Assicurarsi che l\'uso di questo webhook non esporrà contenuti riservati.',
|
||||
'webhooks_events_all' => 'Tutti gli eventi di sistema',
|
||||
'webhooks_name' => 'Nome Webhook',
|
||||
'webhooks_timeout' => 'Webhook Request Timeout (Seconds)',
|
||||
'webhooks_timeout' => 'Timeout Richiesta Webhook (Secondi)',
|
||||
'webhooks_endpoint' => 'Endpoint Webhook',
|
||||
'webhooks_active' => 'Webhook Attivo',
|
||||
'webhook_events_table_header' => 'Eventi',
|
||||
@@ -255,10 +255,10 @@ return [
|
||||
'webhooks_delete_confirm' => 'Sei sicuro di voler eliminare questo webhook?',
|
||||
'webhooks_format_example' => 'Esempio Di Formato Webhook',
|
||||
'webhooks_format_example_desc' => 'I dati Webhook vengono inviati come richiesta POST all\'endpoint configurato come JSON seguendo il formato sottostante. Le proprietà "related_item" e "url" sono opzionali e dipenderanno dal tipo di evento attivato.',
|
||||
'webhooks_status' => 'Webhook Status',
|
||||
'webhooks_last_called' => 'Last Called:',
|
||||
'webhooks_last_errored' => 'Last Errored:',
|
||||
'webhooks_last_error_message' => 'Last Error Message:',
|
||||
'webhooks_status' => 'Stato Webhook',
|
||||
'webhooks_last_called' => 'Ultima Chiamata:',
|
||||
'webhooks_last_errored' => 'Ultimo Errore:',
|
||||
'webhooks_last_error_message' => 'Ultimo Messaggio Di Errore:',
|
||||
|
||||
|
||||
//! If editing translations files directly please ignore this in all
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'Il campo :attribute deve essere tra i numeri :min e :max.',
|
||||
'email' => 'Il campo :attribute deve essere un indirizzo email valido.',
|
||||
'ends_with' => ':attribute deve terminare con uno dei seguenti: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Il campo :attribute field is required.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute deve essere maggiore di :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => '有効',
|
||||
'status_inactive' => '無効',
|
||||
'never' => '該当なし',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'ヘッダーメニューを展開',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attributeは:min〜:maxである必要があります。',
|
||||
'email' => ':attributeは正しいEメールアドレスである必要があります。',
|
||||
'ends_with' => ':attributeは:valuesのいずれかで終わる必要があります。',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attributeは必須です。',
|
||||
'gt' => [
|
||||
'numeric' => ':attributeは:valueより大きな値である必要があります。',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute(을)를 :min~:max자리로 구성하세요.',
|
||||
'email' => ':attribute(을)를 유효한 메일 주소로 구성하세요.',
|
||||
'ends_with' => ':attribute(을)를 :values(으)로 끝나게 구성하세요.',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute(을)를 구성하세요.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute(을)를 :value(이)가 넘게 구성하세요.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Plėsti antraštės meniu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute turi būti tarp :min ir :max skaitmenų.',
|
||||
'email' => ':attribute turi būti tinkamas elektroninio pašto adresas.',
|
||||
'ends_with' => ':attribute turi pasibaigti vienu iš šių: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute laukas yra privalomas.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute turi būti didesnis negu :value.',
|
||||
|
||||
@@ -74,7 +74,8 @@ return [
|
||||
'status' => 'Statuss',
|
||||
'status_active' => 'Aktīvs',
|
||||
'status_inactive' => 'Neaktīvs',
|
||||
'never' => 'Never',
|
||||
'never' => 'Nekad',
|
||||
'none' => 'Neviens',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Izvērst galvenes izvēlni',
|
||||
|
||||
@@ -246,7 +246,7 @@ return [
|
||||
'webhooks_events_warning' => 'Ņemiet vērā, ka šie notikumi tiks palaisti visiem izvēlētajiem notikumiem, pat ja norādītas pielāgotas piekļuves tiesības. Pārliecineities, ka webhook lietošana neatklās ierobežotas pieejamības saturu.',
|
||||
'webhooks_events_all' => 'Visi sistēmas notikumi',
|
||||
'webhooks_name' => 'Webhook nosaukums',
|
||||
'webhooks_timeout' => 'Webhook Request Timeout (Seconds)',
|
||||
'webhooks_timeout' => 'Webhook pieprasījuma laika ierobežojums (sekundēs)',
|
||||
'webhooks_endpoint' => 'Webhook adrese (endpoint)',
|
||||
'webhooks_active' => 'Webhook aktīvs',
|
||||
'webhook_events_table_header' => 'Notikumi',
|
||||
@@ -255,10 +255,10 @@ return [
|
||||
'webhooks_delete_confirm' => 'Vai tiešām vēlaties dzēst šo webhook?',
|
||||
'webhooks_format_example' => 'Webhook formāta piemērs',
|
||||
'webhooks_format_example_desc' => 'Webhook dati tiek nosūtīti kā POST pieprasījums norādītajai endpoint adresei kā JSON tālāk norādītajā formātā. "related_item" un "url" īpašības nav obligātas un ir atkarīgas no palaistā notikuma veida.',
|
||||
'webhooks_status' => 'Webhook Status',
|
||||
'webhooks_last_called' => 'Last Called:',
|
||||
'webhooks_last_errored' => 'Last Errored:',
|
||||
'webhooks_last_error_message' => 'Last Error Message:',
|
||||
'webhooks_status' => 'Webhook statuss',
|
||||
'webhooks_last_called' => 'Pēdejoreiz izsaukts:',
|
||||
'webhooks_last_errored' => 'Pedējoreiz kļūda:',
|
||||
'webhooks_last_error_message' => 'Pēdējais kļūdas paziņojums:',
|
||||
|
||||
|
||||
//! If editing translations files directly please ignore this in all
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute jābūt starp :min un :max cipariem.',
|
||||
'email' => ':attribute jābūt derīgai e-pasta adresei.',
|
||||
'ends_with' => ':attribute jābeidzas ar vienu no :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute lauks ir obligāts.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute jābūt lielākam kā :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Utvid toppmeny',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute må være mellomg :min og :max tall.',
|
||||
'email' => ':attribute må være en gyldig e-post.',
|
||||
'ends_with' => ':attribute må slutte med en av verdiene: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute feltet er påkrevd.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute må være større enn :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Header menu uitvouwen',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute moet tussen de :min en :max cijfers zijn.',
|
||||
'email' => ':attribute is geen geldig e-mailadres.',
|
||||
'ends_with' => ':attribute moet eindigen met een van de volgende: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute is verplicht.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute moet groter zijn dan :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Rozwiń menu nagłówka',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute musi mieć od :min do :max cyfr.',
|
||||
'email' => ':attribute musi być prawidłowym adresem e-mail.',
|
||||
'ends_with' => ':attribute musi kończyć się jedną z poniższych wartości: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute jest wymagany.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute musi być większy niż :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Ativo',
|
||||
'status_inactive' => 'Inativo',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expandir Menu de Cabeçalho',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.',
|
||||
'email' => 'O campo :attribute deve ser um endereço de e-mail válido.',
|
||||
'ends_with' => 'O campo :attribute deve terminar com um dos seguintes: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'O campo :attribute é requerido.',
|
||||
'gt' => [
|
||||
'numeric' => 'O campo :attribute deve ser maior que :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Ativo',
|
||||
'status_inactive' => 'Inativo',
|
||||
'never' => 'Nunca',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expandir Cabeçalho do Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.',
|
||||
'email' => 'O campo :attribute deve ser um e-mail válido.',
|
||||
'ends_with' => 'O campo :attribute deve terminar com um dos seguintes: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'O campo :attribute é requerido.',
|
||||
'gt' => [
|
||||
'numeric' => 'O campo :attribute deve ser maior que :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Активен',
|
||||
'status_inactive' => 'Неактивен',
|
||||
'never' => 'Никогда',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Развернуть меню заголовка',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute должен иметь от :min до :max цифр.',
|
||||
'email' => ':attribute должен быть корректным email адресом.',
|
||||
'ends_with' => ':attribute должен заканчиваться одним из следующих: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute поле необходимо.',
|
||||
'gt' => [
|
||||
'numeric' => 'Значение :attribute должно быть больше чем :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Rozbaliť menu v záhlaví',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute musí mať medzi :min a :max číslicami.',
|
||||
'email' => ':attribute musí byť platná emailová adresa.',
|
||||
'ends_with' => ':attribute musí končiť jednou z nasledujúcich hodnôt :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Políčko :attribute je povinné.',
|
||||
'gt' => [
|
||||
'numeric' => 'Hodnota :attribute musí byť väčšia ako :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute mora biti med :min in :max števkami.',
|
||||
'email' => ':attribute mora biti veljaven e-naslov.',
|
||||
'ends_with' => 'The :attribute se mora končati z eno od določenih: :vrednost/values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Polje ne sme biti prazno.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute mora biti večji kot :vrednost.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expandera sidhuvudsmenyn',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute måste vara mellan :min och :max siffror.',
|
||||
'email' => ':attribute måste vara en giltig e-postadress.',
|
||||
'ends_with' => ':attribute måste sluta med något av följande: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute är obligatoriskt.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute måste vara större än :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute, en az :min ve en fazla :max basamaklı olmalıdır.',
|
||||
'email' => ':attribute, geçerli bir e-posta adresi olmalıdır.',
|
||||
'ends_with' => ':attribute, şunlardan birisiyle bitmelidir: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute alanı zorunludur.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute, :max değerinden büyük olmalıdır.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Розгорнути меню заголовка',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => 'Довжина цифрового поля :attribute повинна бути від :min до :max.',
|
||||
'email' => 'Поле :attribute повинне містити коректну електронну адресу.',
|
||||
'ends_with' => 'Поле :attribute має закінчуватися одним з наступних значень: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Поле :attribute є обов\'язковим для заповнення.',
|
||||
'gt' => [
|
||||
'numeric' => 'Поле :attribute має бути більше ніж :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Expand Header Menu',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute phải có từ :min đến :max chữ số.',
|
||||
'email' => ':attribute phải là địa chỉ email hợp lệ.',
|
||||
'ends_with' => ':attribute phải kết thúc bằng một trong các ký tự: :values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => 'Trường :attribute là bắt buộc.',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute phải lớn hơn :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => '已激活',
|
||||
'status_inactive' => '未激活',
|
||||
'never' => '从未',
|
||||
'none' => '无',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => '展开标头菜单',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute 必须为:min到:max位数。',
|
||||
'email' => ':attribute 必须是有效的电子邮件地址。',
|
||||
'ends_with' => ' :attribute 必须以 :values 后缀结尾',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute 字段是必需的。',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute必须大于 :value.',
|
||||
|
||||
@@ -75,6 +75,7 @@ return [
|
||||
'status_active' => 'Active',
|
||||
'status_inactive' => 'Inactive',
|
||||
'never' => 'Never',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => '展開選單',
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'digits_between' => ':attribute 必須為 :min 到 :max 位數。',
|
||||
'email' => ':attribute 必須是有效的電子郵件地址。',
|
||||
'ends_with' => ':attribute必須以下列之一結尾::values',
|
||||
'file' => 'The :attribute must be provided as a valid file.',
|
||||
'filled' => ':attribute 欄位必填。',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute 必須大於 :value。',
|
||||
|
||||
@@ -1,12 +1,29 @@
|
||||
@extends('layouts.simple')
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ config('app.lang') }}"
|
||||
dir="{{ config('app.rtl') ? 'rtl' : 'ltr' }}">
|
||||
<head>
|
||||
<title>{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }}</title>
|
||||
|
||||
@section('content')
|
||||
<!-- Meta -->
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<div class="container small mt-xl">
|
||||
<div class="card content-wrap auto-height">
|
||||
<h1 class="list-heading">{{ trans('errors.app_down', ['appName' => setting('app-name')]) }}</h1>
|
||||
<p>{{ trans('errors.back_soon') }}</p>
|
||||
<!-- Styles and Fonts -->
|
||||
<link rel="stylesheet" href="{{ versioned_asset('dist/styles.css') }}">
|
||||
<link rel="stylesheet" media="print" href="{{ versioned_asset('dist/print-styles.css') }}">
|
||||
|
||||
<!-- Custom Styles & Head Content -->
|
||||
@include('common.custom-styles')
|
||||
@include('common.custom-head')
|
||||
</head>
|
||||
<body>
|
||||
<div id="content" class="block">
|
||||
<div class="container small mt-xl">
|
||||
<div class="card content-wrap auto-height">
|
||||
<h1 class="list-heading">{{ trans('errors.app_down', ['appName' => setting('app-name')]) }}</h1>
|
||||
<p>{{ trans('errors.back_soon') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -227,10 +227,11 @@
|
||||
|
||||
<label for="setting-registration-role">{{ trans('settings.reg_default_role') }}</label>
|
||||
<select id="setting-registration-role" name="setting-registration-role" @if($errors->has('setting-registration-role')) class="neg" @endif>
|
||||
<option value="0" @if(intval(setting('registration-role', '0')) === 0) selected @endif>-- {{ trans('common.none') }} --</option>
|
||||
@foreach(\BookStack\Auth\Role::all() as $role)
|
||||
<option value="{{$role->id}}"
|
||||
data-system-role-name="{{ $role->system_name ?? '' }}"
|
||||
@if(setting('registration-role', \BookStack\Auth\Role::first()->id) == $role->id) selected @endif
|
||||
@if(intval(setting('registration-role', '0')) === $role->id) selected @endif
|
||||
>
|
||||
{{ $role->display_name }}
|
||||
</option>
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
<div class="setting-list">
|
||||
@include('users.parts.form')
|
||||
@include('users.parts.language-option-row', ['value' => old('setting.language') ?? config('app.default_locale')])
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
|
||||
@@ -35,22 +35,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid half gap-xl v-center">
|
||||
<div>
|
||||
<label for="user-language" class="setting-list-label">{{ trans('settings.users_preferred_language') }}</label>
|
||||
<p class="small">
|
||||
{{ trans('settings.users_preferred_language_desc') }}
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<select name="setting[language]" id="user-language">
|
||||
@foreach(trans('settings.language_select') as $lang => $label)
|
||||
<option @if(setting()->getUser($user, 'language', config('app.default_locale')) === $lang) selected @endif value="{{ $lang }}">{{ $label }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@include('users.parts.language-option-row', ['value' => setting()->getUser($user, 'language', config('app.default_locale'))])
|
||||
</div>
|
||||
|
||||
<div class="text-right">
|
||||
|
||||
18
resources/views/users/parts/language-option-row.blade.php
Normal file
18
resources/views/users/parts/language-option-row.blade.php
Normal file
@@ -0,0 +1,18 @@
|
||||
{{--
|
||||
$value - Currently selected lanuage value
|
||||
--}}
|
||||
<div class="grid half gap-xl v-center">
|
||||
<div>
|
||||
<label for="user-language" class="setting-list-label">{{ trans('settings.users_preferred_language') }}</label>
|
||||
<p class="small">
|
||||
{{ trans('settings.users_preferred_language_desc') }}
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<select name="setting[language]" id="user-language">
|
||||
@foreach(trans('settings.language_select') as $lang => $label)
|
||||
<option @if($value === $lang) selected @endif value="{{ $lang }}">{{ $label }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user