Compare commits

..

24 Commits

Author SHA1 Message Date
Dan Brown
d11144d9e2 Updated version and assets for release v21.12.5 2022-02-06 15:49:23 +00:00
Dan Brown
f96b0ea5f3 Merge branch 'development' into release 2022-02-06 15:48:55 +00:00
Dan Brown
b4e29d2b7d New Crowdin updates (#3225) 2022-02-06 15:46:28 +00:00
Dan Brown
2732d8961f Merge branch 'fix-code-block-linefeed' into development 2022-02-06 15:19:52 +00:00
Dan Brown
b2f863e1f1 WYSIWG: Improved handling of cross-block code block creation
- Updated code content to get specific text selection instead of using
  node-based handling which could return the whole document when
  multiple top-level nodes were in selection.
- Simplified how code gets applied into the page to not be node based
  but use native editor methods to replace the selection. Allows
  creation from half-way through a block.

Tested on chrome+Firefox on Fedora 35.
Builds upon changes in #3246.
For #3200.
2022-02-06 15:19:18 +00:00
Dan Brown
1df7497c09 Added missing validation.file message
- Included test to cover
- Also applied StyleCI fixes

Closes #3248
2022-02-06 14:48:33 +00:00
Dan Brown
d29a2a647a Prevented PCRE limit issues in markdown base64 extraction
For #3249
2022-02-06 07:51:38 +00:00
Dan Brown
43f32f6d5a Added attachment API file size limit test
Created while testing for #3248, Was not something that's currently
failing within BookStack but will still add for coverage.
2022-02-06 05:05:17 +00:00
julesdevops
049d6ba5b2 fix(wysiwyg): preserves line feeds in code block mode 2022-02-05 10:28:44 +01:00
Dan Brown
815f8d79ed Updated version and assets for release v21.12.4 2022-02-01 11:52:24 +00:00
Dan Brown
b62dab32e0 Merge branch 'development' into release 2022-02-01 11:51:48 +00:00
Dan Brown
9d15688a43 Applied latest styleci changes 2022-02-01 11:49:30 +00:00
Dan Brown
033b163675 New Crowdin updates (#3214)
* New translations auth.php (Spanish)

* New translations auth.php (Estonian)

* New translations entities.php (Estonian)

* New translations common.php (French)

* New translations common.php (Indonesian)

* New translations common.php (Turkish)

* New translations common.php (Ukrainian)

* New translations common.php (Chinese Simplified)

* New translations common.php (Chinese Traditional)

* New translations common.php (Vietnamese)

* New translations common.php (Portuguese, Brazilian)

* New translations common.php (Persian)

* New translations common.php (Slovenian)

* New translations common.php (Spanish, Argentina)

* New translations common.php (Croatian)

* New translations common.php (Estonian)

* New translations common.php (Latvian)

* New translations common.php (Bosnian)

* New translations common.php (Norwegian Bokmal)

* New translations common.php (Swedish)

* New translations common.php (Slovak)

* New translations common.php (Spanish)

* New translations common.php (Hebrew)

* New translations common.php (Arabic)

* New translations common.php (Bulgarian)

* New translations common.php (Catalan)

* New translations common.php (Czech)

* New translations common.php (Danish)

* New translations common.php (German)

* New translations common.php (Hungarian)

* New translations common.php (Russian)

* New translations common.php (Italian)

* New translations common.php (Japanese)

* New translations common.php (Korean)

* New translations common.php (Lithuanian)

* New translations common.php (Dutch)

* New translations common.php (Polish)

* New translations common.php (Portuguese)

* New translations common.php (German Informal)

* New translations common.php (Spanish)

* New translations common.php (Italian)

* New translations settings.php (Italian)

* New translations common.php (Spanish, Argentina)
2022-02-01 11:48:29 +00:00
Dan Brown
6eadf3efb3 Added language select to the user create form
- Updated user invite to take language from user.
- Added tests to cover.
- Added page/tab title to user create view.

For #2576 and #2408
2022-01-31 22:15:21 +00:00
Dan Brown
f83cc83877 Added external-auth-id option to create-admin command
- Added tests to cover.
- Refactored some existing testing.
- Requires password or external_auth_id to be provided. Defaults to
  password.
- Randomly sets password to 32 digit random chars if external_auth_id
  provided instead.

For #3222
2022-01-31 20:43:41 +00:00
Dan Brown
17215431ca Fixed default registration role display options
- This also allows an admin to choose not to have a default role.
- Also applied latest styleCI fixes.

For #3220
2022-01-31 14:16:56 +00:00
Dan Brown
90c543064b Merge branch 'development' of github.com:BookStackApp/BookStack into development 2022-01-30 17:41:16 +00:00
Dan Brown
a709fd04b5 Added option to configure PDF export paper size
For #995
2022-01-30 17:40:42 +00:00
StyleCI Bot
4a1d060eb9 Apply fixes from StyleCI 2022-01-30 16:44:51 +00:00
Dan Brown
e17cdab420 Updated default branch name references 2022-01-30 16:33:03 +00:00
Dan Brown
2d074caf72 Merge pull request #3210 from Julesdevops/simple-503-error-file
Massively simplify the 503 error view
2022-01-30 16:24:24 +00:00
julesdevops
99202b3bb8 fix(503): massively simplify the 503 error view
This view was relying on too much app logic, which could lead to errors
when rendering it.
2022-01-29 10:56:13 +01:00
Dan Brown
73eac83afe Fixed OIDC JWT key parsing in microsoft environments
Made existence of 'alg' optional when JWK array set so we instead infer
it as RSA256 if not existing.

Fixes #3206
2022-01-28 14:00:55 +00:00
Dan Brown
c11f795c1d Added cloudabove sponsor logo 2022-01-26 20:45:14 +00:00
110 changed files with 517 additions and 167 deletions

View File

@@ -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

View File

@@ -3,10 +3,10 @@ name: phpstan
on:
push:
branches-ignore:
- l10n_master
- l10n_development
pull_request:
branches-ignore:
- l10n_master
- l10n_development
jobs:
build:

View File

@@ -3,10 +3,10 @@ name: phpunit
on:
push:
branches-ignore:
- l10n_master
- l10n_development
pull_request:
branches-ignore:
- l10n_master
- l10n_development
jobs:
build:

View File

@@ -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:

View File

@@ -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'])) {

View File

@@ -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');
});
}

View File

@@ -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);
}

View File

@@ -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.

View File

@@ -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' => [],
],

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
# BookStack
[![GitHub release](https://img.shields.io/github/release/BookStackApp/BookStack.svg)](https://github.com/BookStackApp/BookStack/releases/latest)
[![license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/BookStackApp/BookStack/blob/master/LICENSE)
[![license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/BookStackApp/BookStack/blob/development/LICENSE)
[![Crowdin](https://badges.crowdin.net/bookstack/localized.svg)](https://crowdin.com/project/bookstack)
[![Discord](https://img.shields.io/static/v1?label=chat&message=discord&color=738adb&logo=discord)](https://discord.gg/ztkBqR2)
[![Repo Stats](https://img.shields.io/static/v1?label=GitHub+project&message=stats&color=f27e3f)](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:

View File

@@ -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;
}

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'عرض القائمة',

View File

@@ -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' => 'يجب أن تكون السمة أكبر من: القيمة.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Otvori meni u zaglavlju',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Aktivní',
'status_inactive' => 'Neaktivní',
'never' => 'Nikdy',
'none' => 'None',
// Header
'header_menu_expand' => 'Rozbalit menu v záhlaví',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Udvid header menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Aktiv',
'status_inactive' => 'Inaktiv',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Header-Menü erweitern',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Aktiv',
'status_inactive' => 'Inaktiv',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Header-Menü erweitern',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Activo',
'status_inactive' => 'Inactivo',
'never' => 'Nunca',
'none' => 'Ninguno',
// Header
'header_menu_expand' => 'Expandir el Menú de Cabecera',

View File

@@ -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.',

View File

@@ -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!',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Aktiivne',
'status_inactive' => 'Mitteaktiivne',
'never' => 'Mitte kunagi',
'none' => 'None',
// Header
'header_menu_expand' => 'Laienda päisemenüü',

View File

@@ -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',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'فعال',
'status_inactive' => 'غیر فعال',
'never' => 'هرگز',
'none' => 'None',
// Header
'header_menu_expand' => 'گسترش منو',

View File

@@ -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 باشد.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Actif',
'status_inactive' => 'Inactif',
'never' => 'Jamais',
'none' => 'Aucun',
// Header
'header_menu_expand' => 'Développer le menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Proširi izbornik',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Perluas Menu Tajuk',

View File

@@ -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.',

View File

@@ -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',

View File

@@ -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

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => '有効',
'status_inactive' => '無効',
'never' => '該当なし',
'none' => 'None',
// Header
'header_menu_expand' => 'ヘッダーメニューを展開',

View File

@@ -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より大きな値である必要があります。',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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(이)가 넘게 구성하세요.',

View File

@@ -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',

View File

@@ -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.',

View File

@@ -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',

View File

@@ -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

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Utvid toppmeny',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Header menu uitvouwen',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Rozwiń menu nagłówka',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Ativo',
'status_inactive' => 'Inativo',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expandir Menu de Cabeçalho',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Ativo',
'status_inactive' => 'Inativo',
'never' => 'Nunca',
'none' => 'None',
// Header
'header_menu_expand' => 'Expandir Cabeçalho do Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Активен',
'status_inactive' => 'Неактивен',
'never' => 'Никогда',
'none' => 'None',
// Header
'header_menu_expand' => 'Развернуть меню заголовка',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Rozbaliť menu v záhlaví',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expandera sidhuvudsmenyn',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Розгорнути меню заголовка',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => 'Expand Header Menu',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => '已激活',
'status_inactive' => '未激活',
'never' => '从未',
'none' => '无',
// Header
'header_menu_expand' => '展开标头菜单',

View File

@@ -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.',

View File

@@ -75,6 +75,7 @@ return [
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'never' => 'Never',
'none' => 'None',
// Header
'header_menu_expand' => '展開選單',

View File

@@ -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。',

View File

@@ -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>

View File

@@ -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>

View File

@@ -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">

View File

@@ -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">

View 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