Merge pull request #2 from BookStackApp/master

fetch upstream
This commit is contained in:
jzoy 2020-04-11 21:18:17 +08:00 committed by GitHub
commit 7673a2bd6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
251 changed files with 9622 additions and 2876 deletions

View File

@ -17,9 +17,13 @@ DB_USERNAME=database_username
DB_PASSWORD=database_user_password
# Mail system to use
# Can be 'smtp', 'mail' or 'sendmail'
# Can be 'smtp' or 'sendmail'
MAIL_DRIVER=smtp
# Mail sender options
MAIL_FROM_NAME=BookStack
MAIL_FROM=bookstack@example.com
# SMTP mail options
MAIL_HOST=localhost
MAIL_PORT=1025

View File

@ -238,7 +238,10 @@ DISABLE_EXTERNAL_SERVICES=false
# Example: AVATAR_URL=https://seccdn.libravatar.org/avatar/${hash}?s=${size}&d=identicon
AVATAR_URL=
# Enable Draw.io integration
# Enable draw.io integration
# Can simply be true/false to enable/disable the integration.
# Alternatively, It can be URL to the draw.io instance you want to use.
# For URLs, The following URL parameters should be included: embed=1&proto=json&spin=1
DRAWIO=true
# Default item listing view

View File

@ -69,5 +69,21 @@ dbguichu :: Chinese Simplified
Randy Kim (hyunjun) :: Korean
Francesco M. Taurino (ftaurino) :: Italian
DanielFrederiksen :: Danish
Finn Wessel (19finnwessel6) :: German
Finn Wessel (19finnwessel6) :: German Informal; German
Gustav Kånåhols (Kurbitz) :: Swedish
Vuong Trung Hieu (fpooon) :: Vietnamese
Emil Petersen (emoyly) :: Danish
mrjaboozy :: Slovenian
Statium :: Russian
Mikkel Struntze (MStruntze) :: Danish
kostefun :: Russian
Tuyen.NG (tuyendev) :: Vietnamese
Ghost_chu (dbguichu) :: Chinese Simplified
Ziipen :: Danish
Samuel Schwarz (Guiph7quan) :: Czech
Aleph (toishoki) :: Turkish
Julio Alberto García (Yllelder) :: Spanish
Rafael (raribeir) :: Portuguese, Brazilian
Hiroyuki Odake (dakesan) :: Japanese
Alex Lee (qianmengnet) :: Chinese Simplified
swinn37 :: French

View File

@ -31,6 +31,10 @@ jobs:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ matrix.php }}
- name: Start Database
run: |
sudo /etc/init.d/mysql start
- name: Setup Database
run: |
mysql -uroot -proot -e 'CREATE DATABASE IF NOT EXISTS `bookstack-test`;'

View File

@ -50,10 +50,8 @@ class Activity extends Model
/**
* Checks if another Activity matches the general information of another.
* @param $activityB
* @return bool
*/
public function isSimilarTo($activityB)
public function isSimilarTo(Activity $activityB): bool
{
return [$this->key, $this->entity_type, $this->entity_id] === [$activityB->key, $activityB->entity_type, $activityB->entity_id];
}

View File

@ -1,8 +1,9 @@
<?php namespace BookStack\Actions;
use BookStack\Auth\Permissions\PermissionService;
use BookStack\Entities\Book;
use BookStack\Auth\User;
use BookStack\Entities\Entity;
use Illuminate\Support\Collection;
class ActivityService
{
@ -12,8 +13,6 @@ class ActivityService
/**
* ActivityService constructor.
* @param Activity $activity
* @param PermissionService $permissionService
*/
public function __construct(Activity $activity, PermissionService $permissionService)
{
@ -24,11 +23,8 @@ class ActivityService
/**
* Add activity data to database.
* @param \BookStack\Entities\Entity $entity
* @param string $activityKey
* @param int $bookId
*/
public function add(Entity $entity, string $activityKey, int $bookId = null)
public function add(Entity $entity, string $activityKey, ?int $bookId = null)
{
$activity = $this->newActivityForUser($activityKey, $bookId);
$entity->activity()->save($activity);
@ -37,11 +33,8 @@ class ActivityService
/**
* Adds a activity history with a message, without binding to a entity.
* @param string $activityKey
* @param string $message
* @param int $bookId
*/
public function addMessage(string $activityKey, string $message, int $bookId = null)
public function addMessage(string $activityKey, string $message, ?int $bookId = null)
{
$this->newActivityForUser($activityKey, $bookId)->forceFill([
'extra' => $message
@ -52,11 +45,8 @@ class ActivityService
/**
* Get a new activity instance for the current user.
* @param string $key
* @param int|null $bookId
* @return Activity
*/
protected function newActivityForUser(string $key, int $bookId = null)
protected function newActivityForUser(string $key, ?int $bookId = null): Activity
{
return $this->activity->newInstance()->forceFill([
'key' => strtolower($key),
@ -69,34 +59,27 @@ class ActivityService
* Removes the entity attachment from each of its activities
* and instead uses the 'extra' field with the entities name.
* Used when an entity is deleted.
* @param \BookStack\Entities\Entity $entity
* @return mixed
*/
public function removeEntity(Entity $entity)
public function removeEntity(Entity $entity): Collection
{
// TODO - Rewrite to db query.
$activities = $entity->activity;
foreach ($activities as $activity) {
$activity->extra = $entity->name;
$activity->entity_id = 0;
$activity->entity_type = null;
$activity->save();
}
$activities = $entity->activity()->get();
$entity->activity()->update([
'extra' => $entity->name,
'entity_id' => 0,
'entity_type' => '',
]);
return $activities;
}
/**
* Gets the latest activity.
* @param int $count
* @param int $page
* @return array
*/
public function latest($count = 20, $page = 0)
public function latest(int $count = 20, int $page = 0): array
{
$activityList = $this->permissionService
->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
->orderBy('created_at', 'desc')
->with('user', 'entity')
->with(['user', 'entity'])
->skip($count * $page)
->take($count)
->get();
@ -107,17 +90,13 @@ class ActivityService
/**
* Gets the latest activity for an entity, Filtering out similar
* items to prevent a message activity list.
* @param \BookStack\Entities\Entity $entity
* @param int $count
* @param int $page
* @return array
*/
public function entityActivity($entity, $count = 20, $page = 1)
public function entityActivity(Entity $entity, int $count = 20, int $page = 1): array
{
if ($entity->isA('book')) {
$query = $this->activity->where('book_id', '=', $entity->id);
$query = $this->activity->newQuery()->where('book_id', '=', $entity->id);
} else {
$query = $this->activity->where('entity_type', '=', $entity->getMorphClass())
$query = $this->activity->newQuery()->where('entity_type', '=', $entity->getMorphClass())
->where('entity_id', '=', $entity->id);
}
@ -133,18 +112,18 @@ class ActivityService
}
/**
* Get latest activity for a user, Filtering out similar
* items.
* @param $user
* @param int $count
* @param int $page
* @return array
* Get latest activity for a user, Filtering out similar items.
*/
public function userActivity($user, $count = 20, $page = 0)
public function userActivity(User $user, int $count = 20, int $page = 0): array
{
$activityList = $this->permissionService
->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
->orderBy('created_at', 'desc')->where('user_id', '=', $user->id)->skip($count * $page)->take($count)->get();
->orderBy('created_at', 'desc')
->where('user_id', '=', $user->id)
->skip($count * $page)
->take($count)
->get();
return $this->filterSimilar($activityList);
}
@ -153,29 +132,26 @@ class ActivityService
* @param Activity[] $activities
* @return array
*/
protected function filterSimilar($activities)
protected function filterSimilar(iterable $activities): array
{
$newActivity = [];
$previousItem = false;
$previousItem = null;
foreach ($activities as $activityItem) {
if ($previousItem === false) {
$previousItem = $activityItem;
$newActivity[] = $activityItem;
continue;
}
if (!$activityItem->isSimilarTo($previousItem)) {
if (!$previousItem || !$activityItem->isSimilarTo($previousItem)) {
$newActivity[] = $activityItem;
}
$previousItem = $activityItem;
}
return $newActivity;
}
/**
* Flashes a notification message to the session if an appropriate message is available.
* @param $activityKey
*/
protected function setNotification($activityKey)
protected function setNotification(string $activityKey)
{
$notificationTextKey = 'activities.' . $activityKey . '_notification';
if (trans()->has($notificationTextKey)) {

View File

@ -3,6 +3,7 @@
use BookStack\Http\Controllers\Api\ApiController;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
use ReflectionClass;
use ReflectionException;
use ReflectionMethod;
@ -117,6 +118,7 @@ class ApiDocsGenerator
'method' => $route->methods[0],
'controller' => $controller,
'controller_method' => $controllerMethod,
'controller_method_kebab' => Str::kebab($controllerMethod),
'base_model' => $baseModelName,
];
});

View File

@ -233,6 +233,9 @@ class SocialAuthService
if ($driverName === 'google' && config('services.google.select_account')) {
$driver->with(['prompt' => 'select_account']);
}
if ($driverName === 'azure') {
$driver->with(['resource' => 'https://graph.windows.net']);
}
return $driver;
}

View File

@ -47,7 +47,10 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
* The attributes excluded from the model's JSON form.
* @var array
*/
protected $hidden = ['password', 'remember_token', 'system_name', 'email_confirmed', 'external_auth_id', 'email'];
protected $hidden = [
'password', 'remember_token', 'system_name', 'email_confirmed', 'external_auth_id', 'email',
'created_at', 'updated_at',
];
/**
* This holds the user's permissions when loaded.

View File

@ -52,7 +52,7 @@ return [
'locale' => env('APP_LANG', 'en'),
// Locales available
'locales' => ['en', 'ar', 'da', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'hu', 'nl', 'pt_BR', 'sk', 'cs', 'sv', 'ko', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW', 'tr'],
'locales' => ['en', 'ar', 'cs', 'da', 'de', 'de_informal', 'es', 'es_AR', 'fa', 'fr', 'he', 'hu', 'it', 'ja', 'ko', 'nl', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ru', 'tr', 'uk', 'vi', 'zh_CN', 'zh_TW',],
// Application Fallback Locale
'fallback_locale' => 'en',

View File

@ -18,7 +18,7 @@ class ClearViews extends Command
*
* @var string
*/
protected $description = 'Clear all view-counts for all entities.';
protected $description = 'Clear all view-counts for all entities';
/**
* Create a new command instance.

View File

@ -23,7 +23,7 @@ class CopyShelfPermissions extends Command
*
* @var string
*/
protected $description = 'Copy shelf permissions to all child books.';
protected $description = 'Copy shelf permissions to all child books';
/**
* @var BookshelfRepo

View File

@ -25,7 +25,7 @@ class DeleteUsers extends Command
*
* @var string
*/
protected $description = 'Delete users that are not "admin" or system users.';
protected $description = 'Delete users that are not "admin" or system users';
public function __construct(User $user, UserRepo $userRepo)
{

View File

@ -3,6 +3,7 @@
namespace BookStack\Console\Commands;
use BookStack\Entities\SearchService;
use DB;
use Illuminate\Console\Command;
class RegenerateSearch extends Command
@ -26,7 +27,7 @@ class RegenerateSearch extends Command
/**
* Create a new command instance.
*
* @param \BookStack\Entities\SearchService $searchService
* @param SearchService $searchService
*/
public function __construct(SearchService $searchService)
{
@ -41,14 +42,14 @@ class RegenerateSearch extends Command
*/
public function handle()
{
$connection = \DB::getDefaultConnection();
$connection = DB::getDefaultConnection();
if ($this->option('database') !== null) {
\DB::setDefaultConnection($this->option('database'));
$this->searchService->setConnection(\DB::connection($this->option('database')));
DB::setDefaultConnection($this->option('database'));
$this->searchService->setConnection(DB::connection($this->option('database')));
}
$this->searchService->indexAllEntities();
\DB::setDefaultConnection($connection);
DB::setDefaultConnection($connection);
$this->comment('Search index regenerated');
}
}

View File

@ -0,0 +1,91 @@
<?php
namespace BookStack\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Database\Connection;
class UpdateUrl extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'bookstack:update-url
{oldUrl : URL to replace}
{newUrl : URL to use as the replacement}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Find and replace the given URLs in your BookStack database';
protected $db;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct(Connection $db)
{
$this->db = $db;
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$oldUrl = str_replace("'", '', $this->argument('oldUrl'));
$newUrl = str_replace("'", '', $this->argument('newUrl'));
$urlPattern = '/https?:\/\/(.+)/';
if (!preg_match($urlPattern, $oldUrl) || !preg_match($urlPattern, $newUrl)) {
$this->error("The given urls are expected to be full urls starting with http:// or https://");
return 1;
}
if (!$this->checkUserOkayToProceed($oldUrl, $newUrl)) {
return 1;
}
$columnsToUpdateByTable = [
"attachments" => ["path"],
"pages" => ["html", "text", "markdown"],
"images" => ["url"],
"comments" => ["html", "text"],
];
foreach ($columnsToUpdateByTable as $table => $columns) {
foreach ($columns as $column) {
$changeCount = $this->db->table($table)->update([
$column => $this->db->raw("REPLACE({$column}, '{$oldUrl}', '{$newUrl}')")
]);
$this->info("Updated {$changeCount} rows in {$table}->{$column}");
}
}
$this->info("URL update procedure complete.");
return 0;
}
/**
* Warn the user of the dangers of this operation.
* Returns a boolean indicating if they've accepted the warnings.
*/
protected function checkUserOkayToProceed(string $oldUrl, string $newUrl): bool
{
$dangerWarning = "This will search for \"{$oldUrl}\" in your database and replace it with \"{$newUrl}\".\n";
$dangerWarning .= "Are you sure you want to proceed?";
$backupConfirmation = "This operation could cause issues if used incorrectly. Have you made a backup of your existing database?";
return $this->confirm($dangerWarning) && $this->confirm($backupConfirmation);
}
}

View File

@ -19,7 +19,7 @@ class Book extends Entity implements HasCoverImage
public $searchFactor = 2;
protected $fillable = ['name', 'description'];
protected $hidden = ['restricted'];
protected $hidden = ['restricted', 'pivot'];
/**
* Get the url for this book.

View File

@ -12,6 +12,8 @@ class Bookshelf extends Entity implements HasCoverImage
protected $fillable = ['name', 'description', 'image_id'];
protected $hidden = ['restricted'];
/**
* Get the books in this shelf.
* Should not be used directly since does not take into account permissions.

View File

@ -91,10 +91,14 @@ class BookshelfRepo
/**
* Create a new shelf in the system.
*/
public function update(Bookshelf $shelf, array $input, array $bookIds): Bookshelf
public function update(Bookshelf $shelf, array $input, ?array $bookIds): Bookshelf
{
$this->baseRepo->update($shelf, $input);
$this->updateBooks($shelf, $bookIds);
if (!is_null($bookIds)) {
$this->updateBooks($shelf, $bookIds);
}
return $shelf;
}

View File

@ -0,0 +1,55 @@
<?php namespace BookStack\Http\Controllers\Api;
use BookStack\Entities\Book;
use BookStack\Entities\ExportService;
use BookStack\Entities\Repos\BookRepo;
use Throwable;
class BooksExportApiController extends ApiController
{
protected $bookRepo;
protected $exportService;
/**
* BookExportController constructor.
*/
public function __construct(BookRepo $bookRepo, ExportService $exportService)
{
$this->bookRepo = $bookRepo;
$this->exportService = $exportService;
parent::__construct();
}
/**
* Export a book as a PDF file.
* @throws Throwable
*/
public function exportPdf(int $id)
{
$book = Book::visible()->findOrFail($id);
$pdfContent = $this->exportService->bookToPdf($book);
return $this->downloadResponse($pdfContent, $book->slug . '.pdf');
}
/**
* Export a book as a contained HTML file.
* @throws Throwable
*/
public function exportHtml(int $id)
{
$book = Book::visible()->findOrFail($id);
$htmlContent = $this->exportService->bookToContainedHtml($book);
return $this->downloadResponse($htmlContent, $book->slug . '.html');
}
/**
* Export a book as a plain text file.
*/
public function exportPlainText(int $id)
{
$book = Book::visible()->findOrFail($id);
$textContent = $this->exportService->bookToPlainText($book);
return $this->downloadResponse($textContent, $book->slug . '.txt');
}
}

View File

@ -0,0 +1,122 @@
<?php namespace BookStack\Http\Controllers\Api;
use BookStack\Facades\Activity;
use BookStack\Entities\Repos\BookshelfRepo;
use BookStack\Entities\Bookshelf;
use Exception;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
class BookshelfApiController extends ApiController
{
/**
* @var BookshelfRepo
*/
protected $bookshelfRepo;
protected $rules = [
'create' => [
'name' => 'required|string|max:255',
'description' => 'string|max:1000',
'books' => 'array',
],
'update' => [
'name' => 'string|min:1|max:255',
'description' => 'string|max:1000',
'books' => 'array',
],
];
/**
* BookshelfApiController constructor.
* @param BookshelfRepo $bookshelfRepo
*/
public function __construct(BookshelfRepo $bookshelfRepo)
{
$this->bookshelfRepo = $bookshelfRepo;
}
/**
* Get a listing of shelves visible to the user.
*/
public function list()
{
$shelves = Bookshelf::visible();
return $this->apiListingResponse($shelves, [
'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'image_id',
]);
}
/**
* Create a new shelf in the system.
* An array of books IDs can be provided in the request. These
* will be added to the shelf in the same order as provided.
* @throws ValidationException
*/
public function create(Request $request)
{
$this->checkPermission('bookshelf-create-all');
$requestData = $this->validate($request, $this->rules['create']);
$bookIds = $request->get('books', []);
$shelf = $this->bookshelfRepo->create($requestData, $bookIds);
Activity::add($shelf, 'bookshelf_create', $shelf->id);
return response()->json($shelf);
}
/**
* View the details of a single shelf.
*/
public function read(string $id)
{
$shelf = Bookshelf::visible()->with([
'tags', 'cover', 'createdBy', 'updatedBy',
'books' => function (BelongsToMany $query) {
$query->visible()->get(['id', 'name', 'slug']);
}
])->findOrFail($id);
return response()->json($shelf);
}
/**
* Update the details of a single shelf.
* An array of books IDs can be provided in the request. These
* will be added to the shelf in the same order as provided and overwrite
* any existing book assignments.
* @throws ValidationException
*/
public function update(Request $request, string $id)
{
$shelf = Bookshelf::visible()->findOrFail($id);
$this->checkOwnablePermission('bookshelf-update', $shelf);
$requestData = $this->validate($request, $this->rules['update']);
$bookIds = $request->get('books', null);
$shelf = $this->bookshelfRepo->update($shelf, $requestData, $bookIds);
Activity::add($shelf, 'bookshelf_update', $shelf->id);
return response()->json($shelf);
}
/**
* Delete a single shelf from the system.
* @throws Exception
*/
public function delete(string $id)
{
$shelf = Bookshelf::visible()->findOrFail($id);
$this->checkOwnablePermission('bookshelf-delete', $shelf);
$this->bookshelfRepo->destroy($shelf);
Activity::addMessage('bookshelf_delete', $shelf->name);
return response('', 204);
}
}

View File

@ -5,7 +5,7 @@ namespace BookStack\Http\Controllers\Auth;
use BookStack\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
use Password;
use Illuminate\Support\Facades\Password;
class ForgotPasswordController extends Controller
{
@ -52,8 +52,8 @@ class ForgotPasswordController extends Controller
$request->only('email')
);
if ($response === Password::RESET_LINK_SENT) {
$message = trans('auth.reset_password_sent_success', ['email' => $request->get('email')]);
if ($response === Password::RESET_LINK_SENT || $response === Password::INVALID_USER) {
$message = trans('auth.reset_password_sent', ['email' => $request->get('email')]);
$this->showSuccessNotification($message);
return back()->with('status', trans($response));
}

View File

@ -76,6 +76,11 @@ class LoginController extends Controller
]);
}
$previous = url()->previous('');
if (setting('app-public') && $previous && $previous !== url('/login')) {
redirect()->setIntendedUrl($previous);
}
return view('auth.login', [
'socialDrivers' => $socialDrivers,
'authMethod' => $authMethod,

View File

@ -5,6 +5,7 @@ namespace BookStack\Http\Controllers\Auth;
use BookStack\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
class ResetPasswordController extends Controller
{
@ -49,4 +50,24 @@ class ResetPasswordController extends Controller
return redirect($this->redirectPath())
->with('status', trans($response));
}
/**
* Get the response for a failed password reset.
*
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
protected function sendResetFailedResponse(Request $request, $response)
{
// We show invalid users as invalid tokens as to not leak what
// users may exist in the system.
if ($response === Password::INVALID_USER) {
$response = Password::INVALID_TOKEN;
}
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
}

View File

@ -123,6 +123,11 @@ class SocialController extends Controller
'password' => Str::random(32)
];
// Take name from email address if empty
if (!$userData['name']) {
$userData['name'] = explode('@', $userData['email'])[0];
}
$user = $this->registrationService->registerUser($userData, $socialAccount, $emailVerified);
auth()->login($user);

View File

@ -86,7 +86,7 @@ class BookController extends Controller
$this->validate($request, [
'name' => 'required|string|max:255',
'description' => 'string|max:1000',
'image' => $this->getImageValidationRules(),
'image' => 'nullable|' . $this->getImageValidationRules(),
]);
$bookshelf = null;
@ -114,6 +114,7 @@ class BookController extends Controller
{
$book = $this->bookRepo->getBySlug($slug);
$bookChildren = (new BookContents($book))->getTree(true);
$bookParentShelves = $book->shelves()->visible()->get();
Views::add($book);
if ($request->has('shelf')) {
@ -125,6 +126,7 @@ class BookController extends Controller
'book' => $book,
'current' => $book,
'bookChildren' => $bookChildren,
'bookParentShelves' => $bookParentShelves,
'activity' => Activity::entityActivity($book, 20, 1)
]);
}
@ -153,7 +155,7 @@ class BookController extends Controller
$this->validate($request, [
'name' => 'required|string|max:255',
'description' => 'string|max:1000',
'image' => $this->getImageValidationRules(),
'image' => 'nullable|' . $this->getImageValidationRules(),
]);
$book = $this->bookRepo->update($book, $request->all());

View File

@ -85,7 +85,7 @@ class BookshelfController extends Controller
$this->validate($request, [
'name' => 'required|string|max:255',
'description' => 'string|max:1000',
'image' => $this->getImageValidationRules(),
'image' => 'nullable|' . $this->getImageValidationRules(),
]);
$bookIds = explode(',', $request->get('books', ''));
@ -107,10 +107,12 @@ class BookshelfController extends Controller
Views::add($shelf);
$this->entityContextManager->setShelfContext($shelf->id);
$view = setting()->getForCurrentUser('bookshelf_view_type', config('app.views.books'));
$this->setPageTitle($shelf->getShortName());
return view('shelves.show', [
'shelf' => $shelf,
'view' => $view,
'activity' => Activity::entityActivity($shelf, 20, 1)
]);
}
@ -146,7 +148,7 @@ class BookshelfController extends Controller
$this->validate($request, [
'name' => 'required|string|max:255',
'description' => 'string|max:1000',
'image' => $this->imageRepo->getImageValidationRules(),
'image' => 'nullable|' . $this->getImageValidationRules(),
]);

View File

@ -195,6 +195,6 @@ abstract class Controller extends BaseController
*/
protected function getImageValidationRules(): string
{
return 'image_extension|no_double_extension|mimes:jpeg,png,gif,bmp,webp,tiff';
return 'image_extension|no_double_extension|mimes:jpeg,png,gif,webp';
}
}

View File

@ -4,6 +4,7 @@ namespace BookStack\Http\Controllers\Images;
use BookStack\Exceptions\ImageUploadException;
use BookStack\Uploads\ImageRepo;
use Exception;
use Illuminate\Http\Request;
use BookStack\Http\Controllers\Controller;
@ -11,10 +12,6 @@ class DrawioImageController extends Controller
{
protected $imageRepo;
/**
* DrawioImageController constructor.
* @param ImageRepo $imageRepo
*/
public function __construct(ImageRepo $imageRepo)
{
$this->imageRepo = $imageRepo;
@ -24,8 +21,6 @@ class DrawioImageController extends Controller
/**
* Get a list of gallery images, in a list.
* Can be paged and filtered by entity.
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function list(Request $request)
{
@ -40,9 +35,7 @@ class DrawioImageController extends Controller
/**
* Store a new gallery image in the system.
* @param Request $request
* @return Illuminate\Http\JsonResponse
* @throws \Exception
* @throws Exception
*/
public function create(Request $request)
{
@ -66,8 +59,6 @@ class DrawioImageController extends Controller
/**
* Get the content of an image based64 encoded.
* @param $id
* @return \Illuminate\Http\JsonResponse|mixed
*/
public function getAsBase64($id)
{

View File

@ -48,7 +48,7 @@ class GalleryImageController extends Controller
{
$this->checkPermission('image-create-all');
$this->validate($request, [
'file' => $this->imageRepo->getImageValidationRules()
'file' => $this->getImageValidationRules()
]);
try {

View File

@ -44,7 +44,7 @@ class SettingController extends Controller
$this->preventAccessInDemoMode();
$this->checkPermission('settings-manage');
$this->validate($request, [
'app_logo' => $this->imageRepo->getImageValidationRules(),
'app_logo' => 'nullable|' . $this->getImageValidationRules(),
]);
// Cycles through posted settings and update them
@ -57,7 +57,7 @@ class SettingController extends Controller
}
// Update logo image if set
if ($request->has('app_logo')) {
if ($request->hasFile('app_logo')) {
$logoFile = $request->file('app_logo');
$this->imageRepo->destroyByType('system');
$image = $this->imageRepo->saveNew($logoFile, 'system', 0, null, 86);

View File

@ -7,7 +7,6 @@ use BookStack\Auth\UserRepo;
use BookStack\Exceptions\UserUpdateException;
use BookStack\Uploads\ImageRepo;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Str;
class UserController extends Controller
@ -20,10 +19,6 @@ class UserController extends Controller
/**
* UserController constructor.
* @param User $user
* @param UserRepo $userRepo
* @param UserInviteService $inviteService
* @param ImageRepo $imageRepo
*/
public function __construct(User $user, UserRepo $userRepo, UserInviteService $inviteService, ImageRepo $imageRepo)
{
@ -36,8 +31,6 @@ class UserController extends Controller
/**
* Display a listing of the users.
* @param Request $request
* @return Response
*/
public function index(Request $request)
{
@ -55,7 +48,6 @@ class UserController extends Controller
/**
* Show the form for creating a new user.
* @return Response
*/
public function create()
{
@ -67,9 +59,8 @@ class UserController extends Controller
/**
* Store a newly created user in storage.
* @param Request $request
* @return Response
* @throws UserUpdateException
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
@ -138,13 +129,11 @@ class UserController extends Controller
/**
* Update the specified user in storage.
* @param Request $request
* @param int $id
* @return Response
* @throws UserUpdateException
* @throws \BookStack\Exceptions\ImageUploadException
* @throws \Illuminate\Validation\ValidationException
*/
public function update(Request $request, $id)
public function update(Request $request, int $id)
{
$this->preventAccessInDemoMode();
$this->checkPermissionOrCurrentUser('users-manage', $id);
@ -155,7 +144,7 @@ class UserController extends Controller
'password' => 'min:6|required_with:password_confirm',
'password-confirm' => 'same:password|required_with:password',
'setting' => 'array',
'profile_image' => $this->imageRepo->getImageValidationRules(),
'profile_image' => 'nullable|' . $this->getImageValidationRules(),
]);
$user = $this->userRepo->getById($id);
@ -191,7 +180,7 @@ class UserController extends Controller
}
// Save profile image if in request
if ($request->has('profile_image')) {
if ($request->hasFile('profile_image')) {
$imageUpload = $request->file('profile_image');
$this->imageRepo->destroyImage($user->avatar);
$image = $this->imageRepo->saveNew($imageUpload, 'user', $user->id);
@ -212,10 +201,8 @@ class UserController extends Controller
/**
* Show the user delete page.
* @param int $id
* @return \Illuminate\View\View
*/
public function delete($id)
public function delete(int $id)
{
$this->checkPermissionOrCurrentUser('users-manage', $id);
@ -226,11 +213,9 @@ class UserController extends Controller
/**
* Remove the specified user from storage.
* @param int $id
* @return Response
* @throws \Exception
*/
public function destroy($id)
public function destroy(int $id)
{
$this->preventAccessInDemoMode();
$this->checkPermissionOrCurrentUser('users-manage', $id);
@ -255,8 +240,6 @@ class UserController extends Controller
/**
* Show the user profile page
* @param $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function showProfilePage($id)
{
@ -276,34 +259,32 @@ class UserController extends Controller
/**
* Update the user's preferred book-list display setting.
* @param Request $request
* @param $id
* @return \Illuminate\Http\RedirectResponse
*/
public function switchBookView(Request $request, $id)
public function switchBooksView(Request $request, int $id)
{
return $this->switchViewType($id, $request, 'books');
}
/**
* Update the user's preferred shelf-list display setting.
* @param Request $request
* @param $id
* @return \Illuminate\Http\RedirectResponse
*/
public function switchShelfView(Request $request, $id)
public function switchShelvesView(Request $request, int $id)
{
return $this->switchViewType($id, $request, 'bookshelves');
}
/**
* For a type of list, switch with stored view type for a user.
* @param integer $userId
* @param Request $request
* @param string $listName
* @return \Illuminate\Http\RedirectResponse
* Update the user's preferred shelf-view book list display setting.
*/
protected function switchViewType($userId, Request $request, string $listName)
public function switchShelfView(Request $request, int $id)
{
return $this->switchViewType($id, $request, 'bookshelf');
}
/**
* For a type of list, switch with stored view type for a user.
*/
protected function switchViewType(int $userId, Request $request, string $listName)
{
$this->checkPermissionOrCurrentUser('users-manage', $userId);
@ -321,10 +302,6 @@ class UserController extends Controller
/**
* Change the stored sort type for a particular view.
* @param Request $request
* @param string $id
* @param string $type
* @return \Illuminate\Http\RedirectResponse
*/
public function changeSort(Request $request, string $id, string $type)
{
@ -337,10 +314,6 @@ class UserController extends Controller
/**
* Update the stored section expansion preference for the given user.
* @param Request $request
* @param string $id
* @param string $key
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
*/
public function updateExpansionPreference(Request $request, string $id, string $key)
{
@ -359,10 +332,6 @@ class UserController extends Controller
/**
* Changed the stored preference for a list sort order.
* @param int $userId
* @param Request $request
* @param string $listName
* @return \Illuminate\Http\RedirectResponse
*/
protected function changeListSort(int $userId, Request $request, string $listName)
{

View File

@ -11,7 +11,7 @@ class Localization
* Array of right-to-left locales
* @var array
*/
protected $rtlLocales = ['ar'];
protected $rtlLocales = ['ar', 'he'];
/**
* Map of BookStack locale names to best-estimate system locale names.
@ -26,16 +26,20 @@ class Localization
'es' => 'es_ES',
'es_AR' => 'es_AR',
'fr' => 'fr_FR',
'he' => 'he_IL',
'it' => 'it_IT',
'ja' => 'ja',
'ko' => 'ko_KR',
'nl' => 'nl_NL',
'pl' => 'pl_PL',
'pt' => 'pl_PT',
'pt_BR' => 'pt_BR',
'ru' => 'ru',
'sk' => 'sk_SK',
'sl' => 'sl_SI',
'sv' => 'sv_SE',
'uk' => 'uk_UA',
'vi' => 'vi_VN',
'zh_CN' => 'zh_CN',
'zh_TW' => 'zh_TW',
'tr' => 'tr_TR',

View File

@ -34,7 +34,7 @@ class AppServiceProvider extends ServiceProvider
// Custom validation methods
Validator::extend('image_extension', function ($attribute, $value, $parameters, $validator) {
$validImageExtensions = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'tiff', 'webp'];
$validImageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'webp'];
return in_array(strtolower($value->getClientOriginalExtension()), $validImageExtensions);
});

View File

@ -138,7 +138,7 @@ class ImageRepo
*/
public function saveDrawing(string $base64Uri, int $uploadedTo): Image
{
$name = 'Drawing-' . user()->getShortName(40) . '-' . strval(time()) . '.png';
$name = 'Drawing-' . strval(user()->id) . '-' . strval(time()) . '.png';
return $this->imageService->saveNewFromBase64Uri($base64Uri, $name, 'drawio', $uploadedTo);
}
@ -219,12 +219,4 @@ class ImageRepo
return null;
}
}
/**
* Get the validation rules for image files.
*/
public function getImageValidationRules(): string
{
return 'image_extension|no_double_extension|mimes:jpeg,png,gif,bmp,webp,tiff';
}
}

View File

@ -20,7 +20,7 @@
"gathercontent/htmldiff": "^0.2.1",
"intervention/image": "^2.5",
"laravel/framework": "^6.12",
"laravel/socialite": "^4.2",
"laravel/socialite": "^4.3.2",
"league/flysystem-aws-s3-v3": "^1.0",
"onelogin/php-saml": "^3.3",
"predis/predis": "^1.1",

802
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
{
"name": "My shelf",
"description": "This is my shelf with some books",
"books": [5,1,3]
}

View File

@ -0,0 +1,5 @@
{
"name": "My updated shelf",
"description": "This is my update shelf with some books",
"books": [5,1,3]
}

View File

@ -8,15 +8,11 @@
"created_by": {
"id": 1,
"name": "Admin",
"created_at": "2019-05-05 21:15:13",
"updated_at": "2019-12-16 12:18:37",
"image_id": 48
},
"updated_by": {
"id": 1,
"name": "Admin",
"created_at": "2019-05-05 21:15:13",
"updated_at": "2019-12-16 12:18:37",
"image_id": 48
},
"image_id": 452,

View File

@ -0,0 +1,10 @@
{
"name": "My shelf",
"description": "This is my shelf with some books",
"created_by": 1,
"updated_by": 1,
"slug": "my-shelf",
"updated_at": "2020-04-10 13:24:09",
"created_at": "2020-04-10 13:24:09",
"id": 14
}

View File

@ -0,0 +1,38 @@
{
"data": [
{
"id": 8,
"name": "Qui qui aspernatur autem molestiae libero necessitatibus molestias.",
"slug": "qui-qui-aspernatur-autem-molestiae-libero-necessitatibus-molestias",
"description": "Enim dolor ut quia error dolores est. Aut distinctio consequuntur non nisi nostrum. Labore cupiditate error labore aliquid provident impedit voluptatibus. Quaerat impedit excepturi eius qui eius voluptatem reiciendis.",
"created_at": "2019-05-05 22:10:16",
"updated_at": "2020-04-10 13:00:45",
"created_by": 4,
"updated_by": 1,
"image_id": 31
},
{
"id": 9,
"name": "Ipsum aut inventore fuga libero non facilis.",
"slug": "ipsum-aut-inventore-fuga-libero-non-facilis",
"description": "Labore culpa modi perspiciatis harum sit. Maxime non et nam est. Quae ut laboriosam repellendus sunt quisquam. Velit at est perspiciatis nesciunt adipisci nobis illo. Sed possimus odit optio officiis nisi voluptates officiis dolor.",
"created_at": "2019-05-05 22:10:16",
"updated_at": "2020-04-10 13:00:58",
"created_by": 4,
"updated_by": 1,
"image_id": 28
},
{
"id": 10,
"name": "Omnis reiciendis aut molestias sint accusantium.",
"slug": "omnis-reiciendis-aut-molestias-sint-accusantium",
"description": "Qui ea occaecati alias est dolores voluptatem doloribus. Ad reiciendis corporis vero nostrum omnis et. Non doloribus ut eaque ut quos dolores.",
"created_at": "2019-05-05 22:10:16",
"updated_at": "2020-04-10 13:00:53",
"created_by": 4,
"updated_by": 1,
"image_id": 30
}
],
"total": 3
}

View File

@ -0,0 +1,60 @@
{
"id": 14,
"name": "My shelf",
"slug": "my-shelf",
"description": "This is my shelf with some books",
"created_by": {
"id": 1,
"name": "Admin",
"image_id": 48
},
"updated_by": {
"id": 1,
"name": "Admin",
"image_id": 48
},
"image_id": 501,
"created_at": "2020-04-10 13:24:09",
"updated_at": "2020-04-10 13:31:04",
"tags": [
{
"id": 16,
"entity_id": 14,
"entity_type": "BookStack\\Bookshelf",
"name": "Category",
"value": "Guide",
"order": 0,
"created_at": "2020-04-10 13:31:04",
"updated_at": "2020-04-10 13:31:04"
}
],
"cover": {
"id": 501,
"name": "anafrancisconi_Sp04AfFCPNM.jpg",
"url": "http://bookstack.local/uploads/images/cover_book/2020-04/anafrancisconi_Sp04AfFCPNM.jpg",
"created_at": "2020-04-10 13:31:04",
"updated_at": "2020-04-10 13:31:04",
"created_by": 1,
"updated_by": 1,
"path": "/uploads/images/cover_book/2020-04/anafrancisconi_Sp04AfFCPNM.jpg",
"type": "cover_book",
"uploaded_to": 14
},
"books": [
{
"id": 5,
"name": "Sint explicabo alias sunt.",
"slug": "jbsQrzuaXe"
},
{
"id": 1,
"name": "BookStack User Guide",
"slug": "bookstack-user-guide"
},
{
"id": 3,
"name": "Molestiae doloribus sint velit suscipit dolorem.",
"slug": "H99QxALaoG"
}
]
}

View File

@ -0,0 +1,11 @@
{
"id": 14,
"name": "My updated shelf",
"slug": "my-updated-shelf",
"description": "This is my update shelf with some books",
"created_by": 1,
"updated_by": 1,
"image_id": 501,
"created_at": "2020-04-10 13:24:09",
"updated_at": "2020-04-10 13:48:22"
}

2103
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,23 +10,23 @@
"permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads"
},
"devDependencies": {
"css-loader": "^3.4.0",
"livereload": "^0.8.2",
"css-loader": "^3.4.2",
"livereload": "^0.9.1",
"mini-css-extract-plugin": "^0.9.0",
"node-sass": "^4.13.0",
"node-sass": "^4.13.1",
"npm-run-all": "^4.1.5",
"sass-loader": "^8.0.0",
"style-loader": "^1.1.1",
"webpack": "^4.41.4",
"webpack-cli": "^3.3.10"
"sass-loader": "^8.0.2",
"style-loader": "^1.1.3",
"webpack": "^4.42.1",
"webpack-cli": "^3.3.11"
},
"dependencies": {
"clipboard": "^2.0.4",
"codemirror": "^5.50.0",
"dropzone": "^5.5.1",
"clipboard": "^2.0.6",
"codemirror": "^5.52.2",
"dropzone": "^5.7.0",
"markdown-it": "^10.0.0",
"markdown-it-task-lists": "^2.1.1",
"sortablejs": "^1.10.1",
"sortablejs": "^1.10.2",
"vue": "^2.6.11",
"vuedraggable": "^2.23.2"
},

View File

@ -5,6 +5,10 @@
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

View File

@ -13,6 +13,8 @@ A platform for storing and organising information and documentation. Details for
* [Demo Instance](https://demo.bookstackapp.com)
* [Admin Login](https://demo.bookstackapp.com/login?email=admin@example.com&password=password)
* [BookStack Blog](https://www.bookstackapp.com/blog)
* [Issue List](https://github.com/BookStackApp/BookStack/issues)
* [Discord Chat](https://discord.gg/ztkBqR2)
## 📚 Project Definition
@ -49,7 +51,7 @@ All development on BookStack is currently done on the master branch. When it's t
* [Node.js](https://nodejs.org/en/) v10.0+
SASS is used to help the CSS development and the JavaScript is run through babel to allow for writing ES6 code. This is done using webpack. To run the build task you can use the following commands:
This project uses SASS for CSS development and this is built, along with the JavaScript, using webpack. The below npm commands can be used to install the dependencies & run the build tasks:
``` bash
# Install NPM Dependencies
@ -78,7 +80,7 @@ Once done you can run `php vendor/bin/phpunit` in the application root directory
### 📜 Code Standards
PHP code within BookStack is generally to [PSR-2](http://www.php-fig.org/psr/psr-2/) standards. From the BookStack root folder you can run `./vendor/bin/phpcs` to check code is formatted correctly and `./vendor/bin/phpcbf` to auto-fix non-PSR-2 code.
PHP code within BookStack is generally to [PSR-2](http://www.php-fig.org/psr/psr-2/) standards. From the BookStack root folder you can run `./vendor/bin/phpcs` to check code is formatted correctly and `./vendor/bin/phpcbf` to auto-fix non-PSR-2 code. Please don't auto-fix code unless it's related to changes you've made otherwise you'll likely cause git conflicts.
### 🐋 Development using Docker
@ -118,7 +120,9 @@ Please note, translations in BookStack are provided to the "Crowdin Global Trans
Feel free to create issues to request new features or to report bugs & problems. Just please follow the template given when creating the issue.
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. 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/assets`. Any CSS or JS files within `public` are built from these source files and therefore should not be edited directly.
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/assets`. 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).

View File

@ -11,6 +11,7 @@ class DropDown {
this.menu = elem.querySelector('.dropdown-menu, [dropdown-menu]');
this.moveMenu = elem.hasAttribute('dropdown-move-menu');
this.toggle = elem.querySelector('[dropdown-toggle]');
this.direction = (document.dir === 'rtl') ? 'right' : 'left';
this.body = document.body;
this.showing = false;
this.setupListeners();
@ -28,7 +29,11 @@ class DropDown {
this.rect = this.menu.getBoundingClientRect();
this.body.appendChild(this.menu);
this.menu.style.position = 'fixed';
this.menu.style.left = `${this.rect.left}px`;
if (this.direction === 'right') {
this.menu.style.right = `${(this.rect.right - this.rect.width)}px`;
} else {
this.menu.style.left = `${this.rect.left}px`;
}
this.menu.style.top = `${this.rect.top}px`;
this.menu.style.width = `${this.rect.width}px`;
}
@ -67,7 +72,7 @@ class DropDown {
this.toggle.setAttribute('aria-expanded', 'false');
if (this.moveMenu) {
this.menu.style.position = '';
this.menu.style.left = '';
this.menu.style[this.direction] = '';
this.menu.style.top = '';
this.menu.style.width = '';
this.container.appendChild(this.menu);

View File

@ -411,17 +411,23 @@ class MarkdownEditor {
});
}
getDrawioUrl() {
const drawioUrlElem = document.querySelector('[drawio-url]');
return drawioUrlElem ? drawioUrlElem.getAttribute('drawio-url') : false;
}
// Show draw.io if enabled and handle save.
actionStartDrawing() {
if (document.querySelector('[drawio-enabled]').getAttribute('drawio-enabled') !== 'true') return;
let cursorPos = this.cm.getCursor('from');
const url = this.getDrawioUrl();
if (!url) return;
DrawIO.show(() => {
const cursorPos = this.cm.getCursor('from');
DrawIO.show(url,() => {
return Promise.resolve('');
}, (pngData) => {
// let id = "image-" + Math.random().toString(16).slice(2);
// let loadingImage = window.baseUrl('/loading.gif');
let data = {
const data = {
image: pngData,
uploaded_to: Number(document.getElementById('page-editor').getAttribute('page-id'))
};
@ -445,15 +451,15 @@ class MarkdownEditor {
// Show draw.io if enabled and handle save.
actionEditDrawing(imgContainer) {
const drawingDisabled = document.querySelector('[drawio-enabled]').getAttribute('drawio-enabled') !== 'true';
if (drawingDisabled) {
const drawioUrl = this.getDrawioUrl();
if (!drawioUrl) {
return;
}
const cursorPos = this.cm.getCursor('from');
const drawingId = imgContainer.getAttribute('drawio-diagram');
DrawIO.show(() => {
DrawIO.show(drawioUrl, () => {
return DrawIO.load(drawingId);
}, (pngData) => {

View File

@ -28,7 +28,11 @@ class Notification {
this.elem.classList.add('showing');
}, 1);
if (this.autohide) setTimeout(this.hide.bind(this), 2000);
if (this.autohide) {
const words = textToShow.split(' ').length;
const timeToShow = Math.max(2000, 1000 + (250 * words));
setTimeout(this.hide.bind(this), timeToShow);
}
}
hide() {

View File

@ -56,6 +56,10 @@ class TemplateManager {
setupSearchBox() {
const searchBox = this.elem.querySelector('.search-box');
// Search box may not exist if there are no existing templates in the system.
if (!searchBox) return;
const input = searchBox.querySelector('input');
const submitButton = searchBox.querySelector('button');
const cancelButton = searchBox.querySelector('button.search-box-cancel');
@ -70,7 +74,7 @@ class TemplateManager {
}
performSearch = performSearch.bind(this);
// Searchbox enter press
// Search box enter press
searchBox.addEventListener('keypress', event => {
if (event.key === 'Enter') {
event.preventDefault();

View File

@ -139,19 +139,21 @@ function codePlugin() {
}
function showPopup(editor) {
let selectedNode = editor.selection.getNode();
const selectedNode = editor.selection.getNode();
if (!elemIsCodeBlock(selectedNode)) {
let providedCode = editor.selection.getNode().textContent;
const providedCode = editor.selection.getNode().textContent;
window.vues['code-editor'].open(providedCode, '', (code, lang) => {
let wrap = document.createElement('div');
const wrap = document.createElement('div');
wrap.innerHTML = `<pre><code class="language-${lang}"></code></pre>`;
wrap.querySelector('code').innerText = code;
editor.formatter.toggle('pre');
let node = editor.selection.getNode();
const node = editor.selection.getNode();
editor.dom.setHTML(node, wrap.querySelector('pre').innerHTML);
editor.fire('SetContent');
editor.focus()
});
return;
}
@ -160,15 +162,17 @@ function codePlugin() {
let currentCode = selectedNode.querySelector('textarea').textContent;
window.vues['code-editor'].open(currentCode, lang, (code, lang) => {
let editorElem = selectedNode.querySelector('.CodeMirror');
let cmInstance = editorElem.CodeMirror;
const editorElem = selectedNode.querySelector('.CodeMirror');
const cmInstance = editorElem.CodeMirror;
if (cmInstance) {
Code.setContent(cmInstance, code);
Code.setMode(cmInstance, lang, code);
}
let textArea = selectedNode.querySelector('textarea');
const textArea = selectedNode.querySelector('textarea');
if (textArea) textArea.textContent = code;
selectedNode.setAttribute('data-lang', lang);
editor.focus()
});
}
@ -238,7 +242,7 @@ function codePlugin() {
});
}
function drawIoPlugin() {
function drawIoPlugin(drawioUrl) {
let pageEditor = null;
let currentNode = null;
@ -266,7 +270,7 @@ function drawIoPlugin() {
function showDrawingEditor(mceEditor, selectedNode = null) {
pageEditor = mceEditor;
currentNode = selectedNode;
DrawIO.show(drawingInit, updateContent);
DrawIO.show(drawioUrl, drawingInit, updateContent);
}
async function updateContent(pngData) {
@ -423,10 +427,14 @@ class WysiwygEditor {
loadPlugins() {
codePlugin();
customHrPlugin();
if (document.querySelector('[drawio-enabled]').getAttribute('drawio-enabled') === 'true') {
drawIoPlugin();
const drawioUrlElem = document.querySelector('[drawio-url]');
if (drawioUrlElem) {
const url = drawioUrlElem.getAttribute('drawio-url');
drawIoPlugin(url);
this.plugins += ' drawio';
}
if (this.textDirection === 'rtl') {
this.plugins += ' directionality'
}
@ -500,7 +508,15 @@ class WysiwygEditor {
const originalField = win.document.getElementById(field_name);
originalField.value = entity.link;
const mceForm = originalField.closest('.mce-form');
mceForm.querySelectorAll('input')[2].value = entity.name;
const inputs = mceForm.querySelectorAll('input');
// Set text to display if not empty
if (!inputs[1].value) {
inputs[1].value = entity.name;
}
// Set title field
inputs[2].value = entity.name;
});
}

View File

@ -5,15 +5,18 @@ import Clipboard from "clipboard/dist/clipboard.min";
import 'codemirror/mode/css/css';
import 'codemirror/mode/clike/clike';
import 'codemirror/mode/diff/diff';
import 'codemirror/mode/fortran/fortran';
import 'codemirror/mode/go/go';
import 'codemirror/mode/haskell/haskell';
import 'codemirror/mode/htmlmixed/htmlmixed';
import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/julia/julia';
import 'codemirror/mode/lua/lua';
import 'codemirror/mode/haskell/haskell';
import 'codemirror/mode/markdown/markdown';
import 'codemirror/mode/mllike/mllike';
import 'codemirror/mode/nginx/nginx';
import 'codemirror/mode/perl/perl';
import 'codemirror/mode/pascal/pascal';
import 'codemirror/mode/php/php';
import 'codemirror/mode/powershell/powershell';
import 'codemirror/mode/properties/properties';
@ -25,7 +28,6 @@ import 'codemirror/mode/sql/sql';
import 'codemirror/mode/toml/toml';
import 'codemirror/mode/xml/xml';
import 'codemirror/mode/yaml/yaml';
import 'codemirror/mode/pascal/pascal';
// Addons
import 'codemirror/addon/scroll/scrollpastend';
@ -43,6 +45,8 @@ const modeMap = {
'c#': 'text/x-csharp',
csharp: 'text/x-csharp',
diff: 'diff',
for: 'fortran',
fortran: 'fortran',
go: 'go',
haskell: 'haskell',
hs: 'haskell',
@ -59,6 +63,8 @@ const modeMap = {
markdown: 'markdown',
ml: 'mllike',
nginx: 'nginx',
perl: 'perl',
pl: 'perl',
powershell: 'powershell',
properties: 'properties',
ocaml: 'mllike',

View File

@ -1,22 +1,21 @@
const drawIoUrl = 'https://www.draw.io/?embed=1&ui=atlas&spin=1&proto=json';
let iFrame = null;
let onInit, onSave;
/**
* Show the draw.io editor.
* @param onInitCallback - Must return a promise with the xml to load for the editor.
* @param onSaveCallback - Is called with the drawing data on save.
* @param {String} drawioUrl
* @param {Function} onInitCallback - Must return a promise with the xml to load for the editor.
* @param {Function} onSaveCallback - Is called with the drawing data on save.
*/
function show(onInitCallback, onSaveCallback) {
function show(drawioUrl, onInitCallback, onSaveCallback) {
onInit = onInitCallback;
onSave = onSaveCallback;
iFrame = document.createElement('iframe');
iFrame.setAttribute('frameborder', '0');
window.addEventListener('message', drawReceive);
iFrame.setAttribute('src', drawIoUrl);
iFrame.setAttribute('src', drawioUrl);
iFrame.setAttribute('class', 'fullscreen');
iFrame.style.backgroundColor = '#FFFFFF';
document.body.appendChild(iFrame);

View File

@ -5,6 +5,7 @@ const methods = {
if (!this.editor) this.editor = codeLib.popupEditor(this.$refs.editor, this.language);
this.$refs.overlay.components.overlay.show(() => {
codeLib.updateLayout(this.editor);
this.editor.focus();
});
},
hide() {

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'لم يتم العثور على الصفحة',
'sorry_page_not_found' => 'عفواً, لا يمكن العثور على الصفحة التي تبحث عنها.',
'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.',
'return_home' => 'العودة للصفحة الرئيسية',
'error_occurred' => 'حدث خطأ',
'app_down' => ':appName لا يعمل حالياً',
@ -96,4 +97,7 @@ return [
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',
];

View File

@ -185,27 +185,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dansk',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -18,7 +18,7 @@ return [
'name' => 'Jméno',
'username' => 'Jméno účtu',
'email' => 'Email',
'email' => 'E-mail',
'password' => 'Heslo',
'password_confirm' => 'Potvrdit heslo',
'password_hint' => 'Musí mít víc než 7 znaků',
@ -26,8 +26,8 @@ return [
'remember_me' => 'Neodhlašovat',
'ldap_email_hint' => 'Zadejte email, který chcete přiřadit k tomuto účtu.',
'create_account' => 'Vytvořit účet',
'already_have_account' => 'Already have an account?',
'dont_have_account' => 'Don\'t have an account?',
'already_have_account' => 'Máte už založený účet?',
'dont_have_account' => 'Nemáte učet?',
'social_login' => 'Přihlášení přes sociální sítě',
'social_registration' => 'Registrace přes sociální sítě',
'social_registration_text' => 'Registrovat a přihlásit se přes jinou službu',
@ -66,12 +66,12 @@ return [
'email_not_confirmed_resend_button' => 'Znovu poslat email pro potvrzení emailové adresy',
// User Invite
'user_invite_email_subject' => 'You have been invited to join :appName!',
'user_invite_email_greeting' => 'An account has been created for you on :appName.',
'user_invite_email_text' => 'Click the button below to set an account password and gain access:',
'user_invite_email_action' => 'Set Account Password',
'user_invite_page_welcome' => 'Welcome to :appName!',
'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.',
'user_invite_page_confirm_button' => 'Confirm Password',
'user_invite_success' => 'Password set, you now have access to :appName!'
'user_invite_email_subject' => 'Byl jste pozván do :appName!',
'user_invite_email_greeting' => 'Byl pro vás vytvořen účet na :appName.',
'user_invite_email_text' => 'Klikněte na tlačítko níže pro nastavení hesla k účtu a získání přístupu:',
'user_invite_email_action' => 'Nastavit heslo účtu',
'user_invite_page_welcome' => 'Vítejte v :appName!',
'user_invite_page_text' => 'Chcete-li dokončit svůj účet a získat přístup, musíte nastavit heslo, které bude použito k přihlášení do :appName při budoucích návštěvách.',
'user_invite_page_confirm_button' => 'Potvrdit heslo',
'user_invite_success' => 'Heslo nastaveno, nyní máte přístup k :appName!'
];

View File

@ -11,20 +11,20 @@ return [
'save' => 'Uložit',
'continue' => 'Pokračovat',
'select' => 'Zvolit',
'toggle_all' => 'Toggle All',
'toggle_all' => 'Přepnout vše',
'more' => 'Více',
// Form Labels
'name' => 'Jméno',
'description' => 'Popis',
'role' => 'Role',
'role' => 'Funkce',
'cover_image' => 'Obrázek na přebal',
'cover_image_description' => 'Obrázek by měl být asi 440 × 250px.',
// Actions
'actions' => 'Akce',
'view' => 'Pohled',
'view_all' => 'View All',
'view_all' => 'Zobrazit vše',
'create' => 'Vytvořit',
'update' => 'Aktualizovat',
'edit' => 'Upravit',
@ -35,19 +35,19 @@ return [
'delete' => 'Smazat',
'search' => 'Hledat',
'search_clear' => 'Vyčistit hledání',
'reset' => 'Reset',
'reset' => 'Resetovat',
'remove' => 'Odstranit',
'add' => 'Přidat',
'fullscreen' => 'Fullscreen',
'fullscreen' => 'Celá obrazovka',
// Sort Options
'sort_options' => 'Sort Options',
'sort_direction_toggle' => 'Sort Direction Toggle',
'sort_ascending' => 'Sort Ascending',
'sort_descending' => 'Sort Descending',
'sort_name' => 'Name',
'sort_created_at' => 'Created Date',
'sort_updated_at' => 'Updated Date',
'sort_options' => 'Možnosti řazení',
'sort_direction_toggle' => 'Přepínač směru řazení',
'sort_ascending' => 'Řadit vzestupně',
'sort_descending' => 'Řadit sestupně',
'sort_name' => 'Jméno',
'sort_created_at' => 'Datum vytvoření',
'sort_updated_at' => 'Datum aktualizace',
// Misc
'deleted_user' => 'Smazaný uživatel',
@ -60,16 +60,16 @@ return [
'grid_view' => 'Zobrazit dlaždice',
'list_view' => 'Zobrazit seznam',
'default' => 'Výchozí',
'breadcrumb' => 'Breadcrumb',
'breadcrumb' => 'Drobečková navigace',
// Header
'profile_menu' => 'Profile Menu',
'profile_menu' => 'Nabídka profilu',
'view_profile' => 'Ukázat profil',
'edit_profile' => 'Upravit profil',
// Layout tabs
'tab_info' => 'Info',
'tab_content' => 'Content',
'tab_content' => 'Obsah',
// Email Content
'email_action_help' => 'Pokud se vám nedaří kliknout na tlačítko ":actionText", zkopírujte odkaz níže přímo do webového prohlížeče:',

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Stránka nenalezena',
'sorry_page_not_found' => 'Omlouváme se, ale stránka, kterou hledáte nebyla nalezena.',
'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.',
'return_home' => 'Návrat domů',
'error_occurred' => 'Nastala chyba',
'app_down' => ':appName je momentálně vypnutá',
@ -96,4 +97,7 @@ return [
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',
];

View File

@ -185,27 +185,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dansk',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -34,44 +34,44 @@ return [
'register_thanks' => 'Tak for registreringen!',
'register_confirm' => 'Check venligst din e-mail og klik deri på bekræftelses knappen for at tilgå :appName.',
'registrations_disabled' => 'Registrations are currently disabled',
'registration_email_domain_invalid' => 'That email domain does not have access to this application',
'register_success' => 'Thanks for signing up! You are now registered and signed in.',
'registrations_disabled' => 'Registrering er i øjeblikket deaktiveret',
'registration_email_domain_invalid' => 'E-Mail domænet har ikke adgang til denne applikation',
'register_success' => 'Tak for din registrering. Du er nu registeret og logget ind.',
// Password Reset
'reset_password' => 'Reset Password',
'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
'reset_password_send_button' => 'Send Reset Link',
'reset_password_sent_success' => 'A password reset link has been sent to :email.',
'reset_password_success' => 'Your password has been successfully reset.',
'email_reset_subject' => 'Reset your :appName password',
'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
'reset_password' => 'Nulstil adgangskode',
'reset_password_send_instructions' => 'Indtast din E-Mail herunder og du vil blive sendt en E-Mail med et link til at nulstille din adgangskode.',
'reset_password_send_button' => 'Send link til nulstilling',
'reset_password_sent_success' => 'Et link til at nulstille adgangskoden er blevet sendt til :email.',
'reset_password_success' => 'Din adgangskode er blevet nulstillet.',
'email_reset_subject' => 'Nulstil din :appName adgangskode',
'email_reset_text' => 'Du modtager denne E-Mail fordi vi har modtaget en anmodning om at nulstille din adgangskode.',
'email_reset_not_requested' => 'Hvis du ikke har anmodet om at få din adgangskode nulstillet, behøver du ikke at foretage dig noget.',
// Email Confirmation
'email_confirm_subject' => 'Confirm your email on :appName',
'email_confirm_greeting' => 'Thanks for joining :appName!',
'email_confirm_text' => 'Please confirm your email address by clicking the button below:',
'email_confirm_action' => 'Confirm Email',
'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.',
'email_confirm_success' => 'Your email has been confirmed!',
'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.',
'email_confirm_subject' => 'Bekræft din E-Mail på :appName',
'email_confirm_greeting' => 'Tak for at oprette dig på :appName!',
'email_confirm_text' => 'Bekræft venligst din E-Mail adresse ved at klikke på linket nedenfor:',
'email_confirm_action' => 'Bekræft E-Mail',
'email_confirm_send_error' => 'E-Mail-bekræftelse kræves, men systemet kunne ikke sende E-Mailen. Kontakt administratoren for at sikre, at E-Mail er konfigureret korrekt.',
'email_confirm_success' => 'Din E-Mail er blevet bekræftet!',
'email_confirm_resent' => 'Bekræftelsesmail sendt, tjek venligst din indboks.',
'email_not_confirmed' => 'Email Address Not Confirmed',
'email_not_confirmed_text' => 'Your email address has not yet been confirmed.',
'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.',
'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.',
'email_not_confirmed_resend_button' => 'Resend Confirmation Email',
'email_not_confirmed' => 'E-Mail adresse ikke bekræftet',
'email_not_confirmed_text' => 'Din E-Mail adresse er endnu ikke blevet bekræftet.',
'email_not_confirmed_click_link' => 'Klik venligst på linket i E-Mailen der blev sendt kort efter du registrerede dig.',
'email_not_confirmed_resend' => 'Hvis du ikke kan finde E-Mailen, kan du du få gensendt bekræftelsesemailen ved at trykke herunder.',
'email_not_confirmed_resend_button' => 'Gensend bekræftelsesemail',
// User Invite
'user_invite_email_subject' => 'You have been invited to join :appName!',
'user_invite_email_greeting' => 'An account has been created for you on :appName.',
'user_invite_email_text' => 'Click the button below to set an account password and gain access:',
'user_invite_email_action' => 'Set Account Password',
'user_invite_page_welcome' => 'Welcome to :appName!',
'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.',
'user_invite_page_confirm_button' => 'Confirm Password',
'user_invite_success' => 'Password set, you now have access to :appName!'
'user_invite_email_subject' => 'Du er blevet inviteret til :appName!',
'user_invite_email_greeting' => 'En konto er blevet oprettet til dig på :appName.',
'user_invite_email_text' => 'Klik på knappen nedenunderm for at sætte en adgangskode og opnå adgang:',
'user_invite_email_action' => 'Set adgangskode',
'user_invite_page_welcome' => 'Velkommen til :appName!',
'user_invite_page_text' => 'For at færdiggøre din konto og få adgang skal du indstille en adgangskode, der bruges til at logge ind på :appName ved fremtidige besøg.',
'user_invite_page_confirm_button' => 'Bekræft adgangskode',
'user_invite_success' => 'Adgangskode indstillet, du har nu adgang til :appName!'
];

View File

@ -19,10 +19,10 @@ return [
'description' => 'Beskrivelse',
'role' => 'Rolle',
'cover_image' => 'Coverbillede',
'cover_image_description' => 'This image should be approx 440x250px.',
'cover_image_description' => 'Dette billede skal være omtrent 440x250px.',
// Actions
'actions' => 'Actions',
'actions' => 'Handlinger',
'view' => 'Vis',
'view_all' => 'Vis alle',
'create' => 'Opret',
@ -42,36 +42,36 @@ return [
// Sort Options
'sort_options' => 'Sorteringsindstillinger',
'sort_direction_toggle' => 'Sort Direction Toggle',
'sort_ascending' => 'Sort Ascending',
'sort_descending' => 'Sort Descending',
'sort_name' => 'Name',
'sort_created_at' => 'Created Date',
'sort_updated_at' => 'Updated Date',
'sort_direction_toggle' => 'Sorteringsretning',
'sort_ascending' => 'Sorter stigende',
'sort_descending' => 'Sorter faldende',
'sort_name' => 'Navn',
'sort_created_at' => 'Oprettelsesdato',
'sort_updated_at' => 'Opdateringsdato',
// Misc
'deleted_user' => 'Deleted User',
'no_activity' => 'No activity to show',
'no_items' => 'No items available',
'back_to_top' => 'Back to top',
'toggle_details' => 'Toggle Details',
'toggle_thumbnails' => 'Toggle Thumbnails',
'details' => 'Details',
'grid_view' => 'Grid View',
'list_view' => 'List View',
'default' => 'Default',
'breadcrumb' => 'Breadcrumb',
'deleted_user' => 'Slettet bruger',
'no_activity' => 'Ingen aktivitet at vise',
'no_items' => 'Intet indhold tilgængeligt',
'back_to_top' => 'Tilbage til toppen',
'toggle_details' => 'Vis/skjul detaljer',
'toggle_thumbnails' => 'Vis/skjul miniaturer',
'details' => 'Detaljer',
'grid_view' => 'Gittervisning',
'list_view' => 'Listevisning',
'default' => 'Standard',
'breadcrumb' => 'Brødkrumme',
// Header
'profile_menu' => 'Profile Menu',
'view_profile' => 'View Profile',
'edit_profile' => 'Edit Profile',
'profile_menu' => 'Profilmenu',
'view_profile' => 'Vis profil',
'edit_profile' => 'Redigér Profil',
// Layout tabs
'tab_info' => 'Info',
'tab_content' => 'Content',
'tab_content' => 'Indhold',
// Email Content
'email_action_help' => 'If youre having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:',
'email_rights' => 'All rights reserved',
'email_action_help' => 'Hvis du har problemer med at trykke på ":actionText" knappen, prøv at kopiere og indsætte linket herunder ind i din webbrowser:',
'email_rights' => 'Alle rettigheder forbeholdes',
];

View File

@ -0,0 +1,33 @@
<?php
/**
* Text used in custom JavaScript driven components.
*/
return [
// Image Manager
'image_select' => 'Billedselektion',
'image_all' => 'Alt',
'image_all_title' => 'Se alle billeder',
'image_book_title' => 'Vis billeder uploadet til denne bog',
'image_page_title' => 'Vis billeder uploadet til denne side',
'image_search_hint' => 'Søg efter billednavn',
'image_uploaded' => 'Uploadet :uploadedDate',
'image_load_more' => 'Indlæse mere',
'image_image_name' => 'Billednavn',
'image_delete_used' => 'Dette billede er brugt på siderne nedenfor.',
'image_delete_confirm' => 'Tryk på slet igen for at bekræft at du ønsker at slette dette billede.',
'image_select_image' => 'Vælg billede',
'image_dropzone' => 'Træk-og-slip billede eller klik her for at uploade',
'images_deleted' => 'Billede slettet',
'image_preview' => 'Billedeksempel',
'image_upload_success' => 'Foto uploadet',
'image_update_success' => 'Billeddetaljer succesfuldt opdateret',
'image_delete_success' => 'Billede slettet',
'image_upload_remove' => 'Fjern',
// Code Editor
'code_editor' => 'Rediger kode',
'code_language' => 'Kodesprog',
'code_content' => 'Kodeindhold',
'code_save' => 'Gem kode',
];

View File

@ -0,0 +1,314 @@
<?php
/**
* Text used for 'Entities' (Document Structure Elements) such as
* Books, Shelves, Chapters & Pages
*/
return [
// Shared
'recently_created' => 'Nyligt oprettet',
'recently_created_pages' => 'Nyligt oprettede sider',
'recently_updated_pages' => 'Nyligt opdaterede sider',
'recently_created_chapters' => 'Nyligt oprettede kapitler',
'recently_created_books' => 'Nyligt oprettede bøger',
'recently_created_shelves' => 'Nyligt oprettede reoler',
'recently_update' => 'Opdateret for nyligt',
'recently_viewed' => 'Senest viste',
'recent_activity' => 'Seneste aktivitet',
'create_now' => 'Opret en nu',
'revisions' => 'Revisioner',
'meta_revision' => 'Revision #:revisionCount',
'meta_created' => 'Oprettet :timeLength',
'meta_created_name' => 'Oprettet :timeLength af :user',
'meta_updated' => 'Opdateret :timeLength',
'meta_updated_name' => 'Opdateret :timeLength af :user',
'entity_select' => 'Vælg emne',
'images' => 'Billeder',
'my_recent_drafts' => 'Mine seneste kladder',
'my_recently_viewed' => 'Mine senest viste',
'no_pages_viewed' => 'Du har ikke besøgt nogle sider',
'no_pages_recently_created' => 'Ingen sider er blevet oprettet for nyligt',
'no_pages_recently_updated' => 'Ingen sider er blevet opdateret for nyligt',
'export' => 'Exporter',
'export_html' => 'Indeholdt webfil',
'export_pdf' => 'PDF-fil',
'export_text' => 'Almindelig tekstfil',
// Permissions and restrictions
'permissions' => 'Rettigheder',
'permissions_intro' => 'Når de er aktiveret, vil disse tilladelser have prioritet over alle indstillede rolletilladelser.',
'permissions_enable' => 'Aktivér tilpassede tilladelser',
'permissions_save' => 'Gem tilladelser',
// Search
'search_results' => 'Søgeresultater',
'search_total_results_found' => ':count resultat fundet|:count resultater fundet',
'search_clear' => 'Ryd søgning',
'search_no_pages' => 'Ingen sider matchede søgning',
'search_for_term' => 'Søgning for :term',
'search_more' => 'Flere resultater',
'search_filters' => 'Søgefiltre',
'search_content_type' => 'Indholdstype',
'search_exact_matches' => 'Nøjagtige matches',
'search_tags' => 'Tagsøgninger',
'search_options' => 'Indstillinger',
'search_viewed_by_me' => 'Set af mig',
'search_not_viewed_by_me' => 'Ikke set af mig',
'search_permissions_set' => 'Rettigheders sæt',
'search_created_by_me' => 'Oprettet af mig',
'search_updated_by_me' => 'Opdateret af mig',
'search_date_options' => 'Datoindstillinger',
'search_updated_before' => 'Opdateret før',
'search_updated_after' => 'Opdateret efter',
'search_created_before' => 'Oprettet før',
'search_created_after' => 'Oprettet efter',
'search_set_date' => 'Sæt dato',
'search_update' => 'Opdatér søgning',
// Shelves
'shelf' => 'Reol',
'shelves' => 'Reoler',
'x_shelves' => ':count reol|:count reoler',
'shelves_long' => 'Bogreoler',
'shelves_empty' => 'Ingen reoler er blevet oprettet',
'shelves_create' => 'Opret ny reol',
'shelves_popular' => 'Populære reoler',
'shelves_new' => 'Nye reoler',
'shelves_new_action' => 'Ny reol',
'shelves_popular_empty' => 'De mest populære reoler vil blive vist her.',
'shelves_new_empty' => 'De nyeste reoler vil blive vist her.',
'shelves_save' => 'Gem reol',
'shelves_books' => 'Bøger på denne reol',
'shelves_add_books' => 'Tilføj bøger til denne reol',
'shelves_drag_books' => 'Træk bog her for at tilføje dem til denne reol',
'shelves_empty_contents' => 'Denne reol har ingen bøger tilknyttet til den',
'shelves_edit_and_assign' => 'Rediger reol for at tilføje bøger',
'shelves_edit_named' => 'Rediger reol :name',
'shelves_edit' => 'Rediger reol',
'shelves_delete' => 'Slet reol',
'shelves_delete_named' => 'Slet bogreol :name',
'shelves_delete_explain' => "Dette vil slette bogreolen med navn ':name'. Bøger heri vil ikke blive slettet.",
'shelves_delete_confirmation' => 'Er du sikker på at du vil slette denne bogreol?',
'shelves_permissions' => 'Reoltilladelser',
'shelves_permissions_updated' => 'Reoltilladelser opdateret',
'shelves_permissions_active' => 'Aktive reoltilladelser',
'shelves_copy_permissions_to_books' => 'Kopier tilladelser til bøger',
'shelves_copy_permissions' => 'Kopier tilladelser',
'shelves_copy_permissions_explain' => 'Dette vil anvende de aktuelle tilladelsesindstillinger på denne boghylde på alle bøger indeholdt i. Før aktivering skal du sikre dig, at ændringer i tilladelserne til denne boghylde er blevet gemt.',
'shelves_copy_permission_success' => 'Reolstilladelser kopieret til :count bøger',
// Books
'book' => 'Bog',
'books' => 'Bøger',
'x_books' => ':count bog|:count bøger',
'books_empty' => 'Ingen bøger er blevet oprettet',
'books_popular' => 'Populære bøger',
'books_recent' => 'Nylige bøger',
'books_new' => 'Nye bøger',
'books_new_action' => 'Ny bog',
'books_popular_empty' => 'De mest populære bøger vil blive vist her.',
'books_new_empty' => 'De nyeste boger vil blive vist her.',
'books_create' => 'Lav en ny bog',
'books_delete' => 'Slet bog',
'books_delete_named' => 'Slet bog :bookName',
'books_delete_explain' => 'Dette vil slette bogen ved navn \':bookName\'. Alle sider og kapitler vil blive slettet.',
'books_delete_confirmation' => 'Er du sikker på at du vil slette denne bog?',
'books_edit' => 'Rediger bog',
'books_edit_named' => 'Rediger bog :bookName',
'books_form_book_name' => 'Bognavn',
'books_save' => 'Gem bog',
'books_permissions' => 'Bogtilladelser',
'books_permissions_updated' => 'Bogtilladelser opdateret',
'books_empty_contents' => 'Ingen sider eller kapitler er blevet oprettet i denne bog.',
'books_empty_create_page' => 'Opret en ny side',
'books_empty_sort_current_book' => 'Sortér denne bog',
'books_empty_add_chapter' => 'Tilføj et kapitel',
'books_permissions_active' => 'Aktive bogtilladelser',
'books_search_this' => 'Søg i denne bog',
'books_navigation' => 'Bognavigation',
'books_sort' => 'Sorter bogindhold',
'books_sort_named' => 'Sorter bog :bookName',
'books_sort_name' => 'Sortér efter navn',
'books_sort_created' => 'Sortér efter oprettelsesdato',
'books_sort_updated' => 'Sortér efter opdateringsdato',
'books_sort_chapters_first' => 'Kapitler først',
'books_sort_chapters_last' => 'Kapitler sidst',
'books_sort_show_other' => 'Vis andre bøger',
'books_sort_save' => 'Gem ny ordre',
// Chapters
'chapter' => 'Kapitel',
'chapters' => 'Kapitler',
'x_chapters' => ':count kapitel|:count kapitler',
'chapters_popular' => 'Populære kapitler',
'chapters_new' => 'Nyt kapitel',
'chapters_create' => 'Opret nyt kapitel',
'chapters_delete' => 'Slet kapitel',
'chapters_delete_named' => 'Slet kapitel :chapterName',
'chapters_delete_explain' => 'Dette vil slette kapitlet med navnet \':chapterName\'. Alle sider fjernes og tilføjes direkte til den tilhørende bog.',
'chapters_delete_confirm' => 'Er du sikker på du vil slette dette kapitel?',
'chapters_edit' => 'Rediger kapitel',
'chapters_edit_named' => 'Rediger kapitel :chapterName',
'chapters_save' => 'Gem kapitel',
'chapters_move' => 'Flyt kapitel',
'chapters_move_named' => 'Flyt kapitel :chapterName',
'chapter_move_success' => 'Kapitel flyttet til :bookName',
'chapters_permissions' => 'Kapiteltilladelser',
'chapters_empty' => 'Der er lige nu ingen sider i dette kapitel.',
'chapters_permissions_active' => 'Aktive kapiteltilladelser',
'chapters_permissions_success' => 'Kapiteltilladelser opdateret',
'chapters_search_this' => 'Søg i dette kapitel',
// Pages
'page' => 'Side',
'pages' => 'Sider',
'x_pages' => ':count Side|:count Sider',
'pages_popular' => 'Populære sider',
'pages_new' => 'Ny side',
'pages_attachments' => 'Vedhæftninger',
'pages_navigation' => 'Sidenavigation',
'pages_delete' => 'Slet side',
'pages_delete_named' => 'Slet side :pageName',
'pages_delete_draft_named' => 'Slet kladdesidde :pageName',
'pages_delete_draft' => 'Slet kladdeside',
'pages_delete_success' => 'Side slettet',
'pages_delete_draft_success' => 'Kladdeside slettet',
'pages_delete_confirm' => 'Er du sikker på, du vil slette denne side?',
'pages_delete_draft_confirm' => 'Er du sikker på at du vil slette denne kladdesidde?',
'pages_editing_named' => 'Redigerer :pageName',
'pages_edit_draft_options' => 'Kladdeindstillinger',
'pages_edit_save_draft' => 'Gem kladde',
'pages_edit_draft' => 'Rediger sidekladde',
'pages_editing_draft' => 'Redigerer kladde',
'pages_editing_page' => 'Redigerer side',
'pages_edit_draft_save_at' => 'Kladde gemt ved ',
'pages_edit_delete_draft' => 'Slet kladde',
'pages_edit_discard_draft' => 'Kassér kladde',
'pages_edit_set_changelog' => 'Sæt ændringsoversigt',
'pages_edit_enter_changelog_desc' => 'Indtast en kort beskrivelse af ændringer du har lavet',
'pages_edit_enter_changelog' => 'Indtast ændringsoversigt',
'pages_save' => 'Gem siden',
'pages_title' => 'Overskrift',
'pages_name' => 'Sidenavn',
'pages_md_editor' => 'Editor',
'pages_md_preview' => 'Forhåndsvisning',
'pages_md_insert_image' => 'Indsæt billede',
'pages_md_insert_link' => 'Indsæt emnelink',
'pages_md_insert_drawing' => 'Indsæt tegning',
'pages_not_in_chapter' => 'Side er ikke i et kapitel',
'pages_move' => 'Flyt side',
'pages_move_success' => 'Flyt side til ":parentName"',
'pages_copy' => 'Kopier side',
'pages_copy_desination' => 'Kopier destination',
'pages_copy_success' => 'Side kopieret succesfuldt',
'pages_permissions' => 'Sidetilladelser',
'pages_permissions_success' => 'Sidetilladelser opdateret',
'pages_revision' => 'Revision',
'pages_revisions' => 'Sidserevisioner',
'pages_revisions_named' => 'Siderevisioner for :pageName',
'pages_revision_named' => 'Siderevision for :pageName',
'pages_revisions_created_by' => 'Oprettet af',
'pages_revisions_date' => 'Revisionsdato',
'pages_revisions_number' => '#',
'pages_revisions_numbered' => 'Revision #:id',
'pages_revisions_numbered_changes' => 'Revision #:id ændringer',
'pages_revisions_changelog' => 'Ændringsoversigt',
'pages_revisions_changes' => 'Ændringer',
'pages_revisions_current' => 'Nuværende version',
'pages_revisions_preview' => 'Forhåndsvisning',
'pages_revisions_restore' => 'Gendan',
'pages_revisions_none' => 'Denne side har ingen revisioner',
'pages_copy_link' => 'Kopier link',
'pages_edit_content_link' => 'Redigér indhold',
'pages_permissions_active' => 'Aktive sidetilladelser',
'pages_initial_revision' => 'Første udgivelse',
'pages_initial_name' => 'Ny side',
'pages_editing_draft_notification' => 'Du redigerer en kladde der sidst var gemt :timeDiff.',
'pages_draft_edited_notification' => 'Siden har været opdateret siden da. Det er anbefalet at du kasserer denne kladde.',
'pages_draft_edit_active' => [
'start_a' => ':count brugerer har begyndt at redigere denne side',
'start_b' => ':userName er begyndt at redigere denne side',
'time_a' => 'siden siden sidst blev opdateret',
'time_b' => 'i de sidste :minCount minutter',
'message' => ':start : time. Pas på ikke at overskrive hinandens opdateringer!',
],
'pages_draft_discarded' => 'Kladde kasseret, editoren er blevet opdateret med aktuelt sideindhold',
'pages_specific' => 'Specifik side',
'pages_is_template' => 'Sideskabelon',
// Editor Sidebar
'page_tags' => 'Sidetags',
'chapter_tags' => 'Kapiteltags',
'book_tags' => 'Bogtags',
'shelf_tags' => 'Reoltags',
'tag' => 'Tag',
'tags' => 'Tags',
'tag_name' => 'Tagnavn',
'tag_value' => 'Tagværdi (valgfri)',
'tags_explain' => "Tilføj nogle tags for bedre at kategorisere dit indhold. \n Du kan tildele en værdi til et tag for mere dybdegående organisering.",
'tags_add' => 'Tilføj endnu et tag',
'tags_remove' => 'Fjern dette tag',
'attachments' => 'Vedhæftninger',
'attachments_explain' => 'Upload nogle filer, eller vedhæft nogle links, der skal vises på siden. Disse er synlige i sidepanelet.',
'attachments_explain_instant_save' => 'Ændringer her gemmes med det samme.',
'attachments_items' => 'Vedhæftede emner',
'attachments_upload' => 'Upload fil',
'attachments_link' => 'Vedhæft link',
'attachments_set_link' => 'Sæt link',
'attachments_delete_confirm' => 'Tryk på slet igen for at bekræft at du ønsker at slette denne vedhæftning.',
'attachments_dropzone' => 'Slip filer eller klik her for at vedhæfte en fil',
'attachments_no_files' => 'Ingen filer er blevet overført',
'attachments_explain_link' => 'Du kan vedhæfte et link, hvis du foretrækker ikke at uploade en fil. Dette kan være et link til en anden side eller et link til en fil i skyen.',
'attachments_link_name' => 'Linknavn',
'attachment_link' => 'Vedhæftningslink',
'attachments_link_url' => 'Link til filen',
'attachments_link_url_hint' => 'Adresse (URL) på side eller fil',
'attach' => 'Vedhæft',
'attachments_edit_file' => 'Rediger fil',
'attachments_edit_file_name' => 'Filnavn',
'attachments_edit_drop_upload' => 'Slip filer eller klik her for at uploade og overskrive',
'attachments_order_updated' => 'Vedhæftningsordre opdateret',
'attachments_updated_success' => 'Vedhæftningsdetaljer opdateret',
'attachments_deleted' => 'Vedhæftning slettet',
'attachments_file_uploaded' => 'Filen blev uploadet korrekt',
'attachments_file_updated' => 'Filen blev opdateret korrekt',
'attachments_link_attached' => 'Link succesfuldt vedhæftet til side',
'templates' => 'Skabeloner',
'templates_set_as_template' => 'Side er en skabelon',
'templates_explain_set_as_template' => 'Du kan indstille denne side som en skabelon, så dens indhold bruges, når du opretter andre sider. Andre brugere vil kunne bruge denne skabelon, hvis de har visningstilladelser til denne side.',
'templates_replace_content' => 'Udskift sideindhold',
'templates_append_content' => 'Tilføj efter sideindhold',
'templates_prepend_content' => 'Tilføj før sideindhold',
// Profile View
'profile_user_for_x' => 'Bruger i :time',
'profile_created_content' => 'Oprettet indhold',
'profile_not_created_pages' => ':userName har ikke oprettet nogle sider',
'profile_not_created_chapters' => ':userName har ikke oprettet nogle kapitler',
'profile_not_created_books' => ':userName har ikke oprettet nogle bøger',
'profile_not_created_shelves' => ':userName har ikke oprettet nogle reoler',
// Comments
'comment' => 'Kommentar',
'comments' => 'Kommentarer',
'comment_add' => 'Tilføj kommentar',
'comment_placeholder' => 'Skriv en kommentar her',
'comment_count' => '{0} Ingen kommentarer|{1} 1 Kommentar|[2,*] :count kommentarer',
'comment_save' => 'Gem kommentar',
'comment_saving' => 'Gemmer kommentar...',
'comment_deleting' => 'Sletter kommentar...',
'comment_new' => 'Ny kommentar',
'comment_created' => 'kommenteret :createDiff',
'comment_updated' => 'Opdateret :updateDiff af :username',
'comment_deleted_success' => 'Kommentar slettet',
'comment_created_success' => 'Kommentaren er tilføjet',
'comment_updated_success' => 'Kommentaren er opdateret',
'comment_delete_confirm' => 'Er du sikker på, at du vil slette denne kommentar?',
'comment_in_reply_to' => 'Som svar til :commentId',
// Revision
'revision_delete_confirm' => 'Er du sikker på at du vil slette denne revision?',
'revision_restore_confirm' => 'Er du sikker på at du ønsker at gendanne denne revision? Nuværende sideindhold vil blive erstattet.',
'revision_delete_success' => 'Revision slettet',
'revision_cannot_delete_latest' => 'Kan ikke slette seneste revision.'
];

View File

@ -13,87 +13,91 @@ return [
'email_already_confirmed' => 'Email er allerede bekræftet. Prøv at logge ind.',
'email_confirmation_invalid' => 'Denne bekræftelsestoken er ikke gyldig eller er allerede blevet brugt. Prøv at registrere dig igen.',
'email_confirmation_expired' => 'Bekræftelsestoken er udløbet. En ny bekræftelsesmail er blevet sendt.',
'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed',
'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind',
'email_confirmation_awaiting' => 'Mail-adressen for din konto i brug er nød til at blive bekræftet',
'ldap_fail_anonymous' => 'LDAP-adgang fejlede ved brugen af annonym bind',
'ldap_fail_authed' => 'LDAP adgang fejlede med de givne DN & kodeord oplysninger',
'ldap_extension_not_installed' => 'LDAP PHP udvidelse er ikke installeret',
'ldap_cannot_connect' => 'Kan ikke forbinde til ldap server. Indledende forbindelse mislykkedes',
'saml_already_logged_in' => 'Allerede logget ind',
'saml_user_not_registered' => 'Brugeren :name er ikke registreret, og automatisk registrering er slået fra',
'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system',
'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.',
'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization',
'social_no_action_defined' => 'No action defined',
'social_login_bad_response' => "Error received during :socialAccount login: \n:error",
'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.',
'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.',
'social_account_existing' => 'This :socialAccount is already attached to your profile.',
'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.',
'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ',
'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.',
'social_driver_not_found' => 'Social driver not found',
'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.',
'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.',
'saml_no_email_address' => 'Kunne ikke finde en e-mail-adresse for denne bruger i de data, der leveres af det eksterne godkendelsessystem',
'saml_invalid_response_id' => 'Anmodningen fra det eksterne godkendelsessystem genkendes ikke af en proces, der er startet af denne applikation. Navigering tilbage efter et login kan forårsage dette problem.',
'saml_fail_authed' => 'Login ved hjælp af :system failed, systemet har ikke givet tilladelse',
'social_no_action_defined' => 'Ingen handling er defineret',
'social_login_bad_response' => "Der opstod en fejl under :socialAccount login:\n:error",
'social_account_in_use' => 'Denne :socialAccount konto er allerede i brug, prøv at logge ind med :socialAccount loginmetoden.',
'social_account_email_in_use' => 'Emailen :email er allerede i brug. Hvis du allerede har en konto, kan du forbinde din :socialAccount fra dine profilindstillinger.',
'social_account_existing' => ':socialAccount er allerede tilknyttet din profil.',
'social_account_already_used_existing' => 'Denne :socialAccount konto er allerede i brug af en anden bruger.',
'social_account_not_used' => 'Denne :socialAccount konto er ikke tilknyttet nogle brugere. Tilknyt den i dine profilindstillinger. ',
'social_account_register_instructions' => 'Hvis du ikke har en konto, kan du registrere en konto gennem :socialAccount loginmetoden.',
'social_driver_not_found' => 'Socialdriver ikke fundet',
'social_driver_not_configured' => 'Dine :socialAccount indstillinger er ikke konfigureret korret.',
'invite_token_expired' => 'Dette invitationslink er udløbet. I stedet kan du prøve at nulstille din kontos kodeord.',
// System
'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.',
'cannot_get_image_from_url' => 'Cannot get image from :url',
'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
'image_upload_error' => 'An error occurred uploading the image',
'image_upload_type_error' => 'The image type being uploaded is invalid',
'file_upload_timeout' => 'The file upload has timed out.',
'path_not_writable' => 'Filsti :filePath kunne ikke uploades til. Sørg for at den kan skrives til af webserveren.',
'cannot_get_image_from_url' => 'Kan ikke finde billede på :url',
'cannot_create_thumbs' => 'Serveren kan ikke oprette miniaturer. Kontroller, at GD PHP-udvidelsen er installeret.',
'server_upload_limit' => 'Serveren tillader ikke uploads af denne størrelse. Prøv en mindre filstørrelse.',
'uploaded' => 'Serveren tillader ikke uploads af denne størrelse. Prøv en mindre filstørrelse.',
'image_upload_error' => 'Der opstod en fejl ved upload af billedet',
'image_upload_type_error' => 'Billedtypen, der uploades, er ugyldig',
'file_upload_timeout' => 'Filuploaden udløb.',
// Attachments
'attachment_page_mismatch' => 'Page mismatch during attachment update',
'attachment_not_found' => 'Attachment not found',
'attachment_page_mismatch' => 'Der blev fundet en uoverensstemmelse på siden under opdatering af vedhæftet fil',
'attachment_not_found' => 'Vedhæftning ikke fundet',
// Pages
'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page',
'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage',
'page_draft_autosave_fail' => 'Kunne ikke gemme kladde. Tjek at du har internetforbindelse før du gemmer siden',
'page_custom_home_deletion' => 'Kan ikke slette en side der er sat som forside',
// Entities
'entity_not_found' => 'Entity not found',
'bookshelf_not_found' => 'Bookshelf not found',
'book_not_found' => 'Book not found',
'page_not_found' => 'Page not found',
'chapter_not_found' => 'Chapter not found',
'selected_book_not_found' => 'The selected book was not found',
'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found',
'guests_cannot_save_drafts' => 'Guests cannot save drafts',
'entity_not_found' => 'Emne ikke fundet',
'bookshelf_not_found' => 'Bogreol ikke fundet',
'book_not_found' => 'Bog ikke fundet',
'page_not_found' => 'Side ikke fundet',
'chapter_not_found' => 'Kapitel ikke fundet',
'selected_book_not_found' => 'Den valgte bog kunne ikke findes',
'selected_book_chapter_not_found' => 'Den valgte bog eller kapitel kunne ikke findes',
'guests_cannot_save_drafts' => 'Gæster kan ikke gemme kladder',
// Users
'users_cannot_delete_only_admin' => 'You cannot delete the only admin',
'users_cannot_delete_guest' => 'You cannot delete the guest user',
'users_cannot_delete_only_admin' => 'Du kan ikke slette den eneste admin',
'users_cannot_delete_guest' => 'Du kan ikke slette gæstebrugeren',
// Roles
'role_cannot_be_edited' => 'This role cannot be edited',
'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted',
'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role',
'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.',
'role_cannot_be_edited' => 'Denne rolle kan ikke redigeres',
'role_system_cannot_be_deleted' => 'Denne rolle er en systemrolle og kan ikke slettes',
'role_registration_default_cannot_delete' => 'Kan ikke slette rollen mens den er sat som standardrolle for registrerede brugere',
'role_cannot_remove_only_admin' => 'Denne bruger er den eneste bruger der har administratorrollen. Tilføj en anden bruger til administratorrollen før du forsøger at slette den her.',
// Comments
'comment_list' => 'An error occurred while fetching the comments.',
'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.',
'comment_add' => 'An error occurred while adding / updating the comment.',
'comment_delete' => 'An error occurred while deleting the comment.',
'empty_comment' => 'Cannot add an empty comment.',
'comment_list' => 'Der opstod en fejl under hentning af kommentarerne.',
'cannot_add_comment_to_draft' => 'Du kan ikke kommentere på en kladde.',
'comment_add' => 'Der opstod en fejl under tilføjelse/opdatering af kommentaren.',
'comment_delete' => 'Der opstod en fejl under sletning af kommentaren.',
'empty_comment' => 'Kan ikke tilføje en tom kommentar.',
// Error pages
'404_page_not_found' => 'Page Not Found',
'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.',
'return_home' => 'Return to home',
'error_occurred' => 'An Error Occurred',
'app_down' => ':appName is down right now',
'back_soon' => 'It will be back up soon.',
'404_page_not_found' => 'Siden blev ikke fundet',
'sorry_page_not_found' => 'Beklager, siden du leder efter blev ikke fundet.',
'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.',
'return_home' => 'Gå tilbage til hjem',
'error_occurred' => 'Der opstod en fejl',
'app_down' => ':appName er nede lige nu',
'back_soon' => 'Den er oppe igen snart.',
// API errors
'api_no_authorization_found' => 'No authorization token found on the request',
'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect',
'api_user_token_not_found' => 'No matching API token was found for the provided authorization token',
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_no_authorization_found' => 'Der blev ikke fundet nogen autorisationstoken på anmodningen',
'api_bad_authorization_format' => 'En autorisationstoken blev fundet på anmodningen, men formatet var forkert',
'api_user_token_not_found' => 'Der blev ikke fundet nogen matchende API-token for det angivne autorisationstoken',
'api_incorrect_token_secret' => 'Hemmeligheden leveret til det givne anvendte API-token er forkert',
'api_user_no_api_permission' => 'Ejeren af den brugte API token har ikke adgang til at foretage API-kald',
'api_user_token_expired' => 'Den brugte godkendelsestoken er udløbet',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Følgende fejl opstod under afsendelse af testemail:',
];

View File

@ -0,0 +1,12 @@
<?php
/**
* Pagination Language Lines
* The following language lines are used by the paginator library to build
* the simple pagination links.
*/
return [
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@ -12,74 +12,74 @@ return [
'settings_save_success' => 'Indstillinger gemt',
// App Settings
'app_customization' => 'Customization',
'app_features_security' => 'Features & Security',
'app_name' => 'Application Name',
'app_name_desc' => 'This name is shown in the header and in any system-sent emails.',
'app_name_header' => 'Show name in header',
'app_customization' => 'Tilpasning',
'app_features_security' => 'Funktioner & sikkerhed',
'app_name' => 'Programnavn',
'app_name_desc' => 'Dette er navnet vist i headeren og i systemafsendte E-Mails.',
'app_name_header' => 'Vis navn i header',
'app_public_access' => 'Offentlig adgang',
'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.',
'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.',
'app_public_access_desc' => 'Aktivering af denne funktion giver besøgende, der ikke er logget ind, adgang til indhold i din BookStack-instans.',
'app_public_access_desc_guest' => 'Adgang for ikke-registrerede besøgende kan kontrolleres via "Gæst" -brugeren.',
'app_public_access_toggle' => 'Tillad offentlig adgang',
'app_public_viewing' => 'Allow public viewing?',
'app_secure_images' => 'Higher Security Image Uploads',
'app_secure_images_toggle' => 'Enable higher security image uploads',
'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.',
'app_editor' => 'Page Editor',
'app_editor_desc' => 'Select which editor will be used by all users to edit pages.',
'app_custom_html' => 'Custom HTML Head Content',
'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the <head> section of every page. This is handy for overriding styles or adding analytics code.',
'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.',
'app_logo' => 'Application Logo',
'app_logo_desc' => 'This image should be 43px in height. <br>Large images will be scaled down.',
'app_primary_color' => 'Application Primary Color',
'app_primary_color_desc' => 'Sets the primary color for the application including the banner, buttons, and links.',
'app_homepage' => 'Application Homepage',
'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.',
'app_public_viewing' => 'Tillad offentlig visning?',
'app_secure_images' => 'Højere sikkerhed for billeduploads',
'app_secure_images_toggle' => 'Aktiver højere sikkerhed for billeduploads',
'app_secure_images_desc' => 'Af ydeevneårsager er alle billeder offentlige. Denne funktion tilføjer en tilfældig, vanskelig at gætte streng foran billed-Url\'er. Sørg for, at mappeindekser ikke er aktiveret for at forhindre nem adgang.',
'app_editor' => 'Sideeditor',
'app_editor_desc' => 'Vælg hvilken editor der skal bruges af alle brugere til at redigere sider.',
'app_custom_html' => 'Tilpasset HTML head-indhold',
'app_custom_html_desc' => 'Al indhold tilføjet her, vil blive indsat i bunden af <head> sektionen på alle sider. Dette er brugbart til overskrivning af styling og tilføjelse af analysekode.',
'app_custom_html_disabled_notice' => 'Brugerdefineret HTML-head indhold er deaktiveret på denne indstillingsside for at sikre, at ødelæggende ændringer kan rettes.',
'app_logo' => 'Programlogo',
'app_logo_desc' => 'Dette billede skal være 43px højt. <br> Større billeder vil blive skaleret ned.',
'app_primary_color' => 'Primær programfarve',
'app_primary_color_desc' => 'Sætter den primære farve for applikationen herunder banneret, knapper og links.',
'app_homepage' => 'Programforside',
'app_homepage_desc' => 'Vælg en visning, der skal vises på startsiden i stedet for standardvisningen. Sidetilladelser ignoreres for valgte sider.',
'app_homepage_select' => 'Vælg en side',
'app_disable_comments' => 'Disable Comments',
'app_disable_comments_toggle' => 'Disable comments',
'app_disable_comments_desc' => 'Disables comments across all pages in the application. <br> Existing comments are not shown.',
'app_disable_comments' => 'Deaktiver kommentarer',
'app_disable_comments_toggle' => 'Deaktiver kommentar',
'app_disable_comments_desc' => 'Deaktiverer kommentarer på tværs af alle sider i applikationen. <br> Eksisterende kommentarer vises ikke.',
// Color settings
'content_colors' => 'Content Colors',
'content_colors_desc' => 'Sets colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.',
'bookshelf_color' => 'Shelf Color',
'book_color' => 'Book Color',
'chapter_color' => 'Chapter Color',
'content_colors' => 'Indholdsfarver',
'content_colors_desc' => 'Sætter farver for alle elementer i sideorganisationshierarkiet. Valg af farver med en lignende lysstyrke som standardfarverne anbefales af hensyn til læsbarhed.',
'bookshelf_color' => 'Bogreolfarve',
'book_color' => 'Bogfarve',
'chapter_color' => 'Kapitelfarve',
'page_color' => 'Sidefarve',
'page_draft_color' => 'Page Draft Color',
'page_draft_color' => 'Sidekladdefarve',
// Registration Settings
'reg_settings' => 'Registrering',
'reg_enable' => 'Aktivér tilmelding',
'reg_enable_toggle' => 'Aktivér tilmelding',
'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.',
'reg_default_role' => 'Default user role after registration',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_desc' => 'Når registrering er aktiveret, vil alle kunne registrere sig som en applikationsbruger. Ved registrering får de en standardbrugerrolle.',
'reg_default_role' => 'Standardrolle efter registrering',
'reg_enable_external_warning' => 'Indstillingen ovenfor ignoreres, mens ekstern LDAP- eller SAML-godkendelse er aktiv. Brugerkonti for ikke-eksisterende medlemmer oprettes automatisk, hvis godkendelse mod det eksterne system, der er i brug, er vellykket.',
'reg_email_confirmation' => 'Email bekræftelse',
'reg_email_confirmation_toggle' => 'Require email confirmation',
'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.',
'reg_confirm_restrict_domain' => 'Domain Restriction',
'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application. <br> Note that users will be able to change their email addresses after successful registration.',
'reg_confirm_restrict_domain_placeholder' => 'No restriction set',
'reg_email_confirmation_toggle' => 'Kræv E-Mail bekræftelse',
'reg_confirm_email_desc' => 'Hvis domænebegrænsning bruges, kræves e-mail-bekræftelse, og denne indstilling ignoreres.',
'reg_confirm_restrict_domain' => 'Domæneregistrering',
'reg_confirm_restrict_domain_desc' => 'Indtast en kommasepareret liste over e-mail-domæner, som du vil begrænse registreringen til. Brugere får en E-Mail for at bekræfte deres adresse, før de får tilladelse til at interagere med applikationen. <br> Bemærk, at brugere vil kunne ændre deres e-mail-adresser efter vellykket registrering.',
'reg_confirm_restrict_domain_placeholder' => 'Ingen restriktion opsat',
// Maintenance settings
'maint' => 'Vedligeholdelse',
'maint_image_cleanup' => 'Cleanup Images',
'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
'maint_image_cleanup_ignore_revisions' => 'Ignore images in revisions',
'maint_image_cleanup_run' => 'Run Cleanup',
'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
'maint_image_cleanup_success' => ':count potentially unused images found and deleted!',
'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!',
'maint_send_test_email' => 'Send a Test Email',
'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.',
'maint_send_test_email_run' => 'Send test email',
'maint_send_test_email_success' => 'Email sent to :address',
'maint_send_test_email_mail_subject' => 'Test Email',
'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!',
'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.',
'maint_image_cleanup' => 'Ryd op i billeder',
'maint_image_cleanup_desc' => "Scanner side & revisionsindhold for at kontrollere, hvilke billeder og tegninger, der i øjeblikket er i brug, og hvilke billeder, der er overflødige. Sørg for, at du opretter en komplet database og billedbackup, før du kører dette.",
'maint_image_cleanup_ignore_revisions' => 'Ignorer billeder i revisioner',
'maint_image_cleanup_run' => 'Kør Oprydning',
'maint_image_cleanup_warning' => 'der blev fundet :count potentielt ubrugte billeder. Er du sikker på, at du vil slette disse billeder?',
'maint_image_cleanup_success' => ':count: potentielt ubrugte billeder fundet og slettet!',
'maint_image_cleanup_nothing_found' => 'Ingen ubrugte billeder fundet, intet slettet!',
'maint_send_test_email' => 'Send en Testemail',
'maint_send_test_email_desc' => 'Dette sender en testmail til din mailadresse specificeret på din profil.',
'maint_send_test_email_run' => 'Afsend test E-Mail',
'maint_send_test_email_success' => 'E-Mail sendt til :address',
'maint_send_test_email_mail_subject' => 'Test E-Mail',
'maint_send_test_email_mail_greeting' => 'E-Mail levering ser ud til at virke!',
'maint_send_test_email_mail_text' => 'Tillykke! Da du har modtaget denne mailnotifikation, ser det ud som om, at dine mailindstillinger er opsat korrekt.',
// Role Settings
'roles' => 'Roller',
@ -87,34 +87,34 @@ return [
'role_create' => 'Opret en ny rolle',
'role_create_success' => 'Rollen blev oprette korrekt',
'role_delete' => 'Slet rolle',
'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.',
'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.',
'role_delete_no_migration' => "Don't migrate users",
'role_delete_sure' => 'Are you sure you want to delete this role?',
'role_delete_success' => 'Role successfully deleted',
'role_delete_confirm' => 'Dette vil slette rollen med navnet \':roleName\'.',
'role_delete_users_assigned' => 'Denne rolle er tildelt :userCount brugere. Hvis du vil rykke disse brugere fra denne rolle, kan du vælge en ny nedenunder.',
'role_delete_no_migration' => "Ryk ikke brugere",
'role_delete_sure' => 'Er du sikker på, at du vil slette denne rolle?',
'role_delete_success' => 'Rollen blev slettet',
'role_edit' => 'Rediger rolle',
'role_details' => 'Role Details',
'role_details' => 'Rolledetaljer',
'role_name' => 'Rollenavn',
'role_desc' => 'Short Description of Role',
'role_external_auth_id' => 'External Authentication IDs',
'role_system' => 'System Permissions',
'role_desc' => 'Kort beskrivelse af rolle',
'role_external_auth_id' => 'Eksterne godkendelses-IDer',
'role_system' => 'Systemtilladelser',
'role_manage_users' => 'Administrere brugere',
'role_manage_roles' => 'Manage roles & role permissions',
'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions',
'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages',
'role_manage_page_templates' => 'Manage page templates',
'role_access_api' => 'Access system API',
'role_manage_settings' => 'Manage app settings',
'role_asset' => 'Asset Permissions',
'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.',
'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.',
'role_manage_roles' => 'Administrer roller & rollerettigheder',
'role_manage_entity_permissions' => 'Administrer alle bog-, kapitel- & side-rettigheder',
'role_manage_own_entity_permissions' => 'Administrer tilladelser på egne bøger, kapitler og sider',
'role_manage_page_templates' => 'Administrer side-skabeloner',
'role_access_api' => 'Tilgå system-API',
'role_manage_settings' => 'Administrer app-indstillinger',
'role_asset' => 'Tilladelser for medier og "assets"',
'role_asset_desc' => 'Disse tilladelser kontrollerer standardadgang til medier og "assets" i systemet. Tilladelser til bøger, kapitler og sider tilsidesætter disse tilladelser.',
'role_asset_admins' => 'Administratorer får automatisk adgang til alt indhold, men disse indstillinger kan vise eller skjule UI-indstillinger.',
'role_all' => 'Alle',
'role_own' => 'Eget',
'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to',
'role_save' => 'Save Role',
'role_update_success' => 'Role successfully updated',
'role_users' => 'Users in this role',
'role_users_none' => 'No users are currently assigned to this role',
'role_controlled_by_asset' => 'Styres af det medie/"asset", de uploades til',
'role_save' => 'Gem rolle',
'role_update_success' => 'Rollen blev opdateret',
'role_users' => 'Brugere med denne rolle',
'role_users_none' => 'Ingen brugere er i øjeblikket tildelt denne rolle',
// Users
'users' => 'Brugere',
@ -122,62 +122,62 @@ return [
'users_add_new' => 'Tilføj ny bruger',
'users_search' => 'Søg efter brugere',
'users_details' => 'Brugeroplysninger',
'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.',
'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.',
'users_details_desc' => 'Angiv et visningsnavn og en E-Mail-adresse for denne bruger. E-Mail-adressen bruges til at logge ind på applikationen.',
'users_details_desc_no_email' => 'Sætter et visningsnavn for denne bruger, så andre kan genkende dem.',
'users_role' => 'Brugerroller',
'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.',
'users_password' => 'User Password',
'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 6 characters long.',
'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.',
'users_send_invite_option' => 'Send user invite email',
'users_role_desc' => 'Vælg hvilke roller denne bruger skal tildeles. Hvis en bruger er tildelt flere roller, sammenføres tilladelserne fra disse roller, og de får alle evnerne fra de tildelte roller.',
'users_password' => 'Brugeradgangskode',
'users_password_desc' => 'Sæt et kodeord, der bruges til at logge på applikationen. Dette skal være mindst 6 tegn langt.',
'users_send_invite_text' => 'Du kan vælge at sende denne bruger en invitation på E-Mail, som giver dem mulighed for at indstille deres egen adgangskode, ellers kan du indstille deres adgangskode selv.',
'users_send_invite_option' => 'Send bruger en invitationsmail',
'users_external_auth_id' => 'Ekstern godkendelses ID',
'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.',
'users_password_warning' => 'Only fill the below if you would like to change your password.',
'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.',
'users_delete' => 'Delete User',
'users_delete_named' => 'Delete user :userName',
'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.',
'users_delete_confirm' => 'Are you sure you want to delete this user?',
'users_delete_success' => 'Users successfully removed',
'users_edit' => 'Edit User',
'users_edit_profile' => 'Edit Profile',
'users_edit_success' => 'User successfully updated',
'users_avatar' => 'User Avatar',
'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.',
'users_preferred_language' => 'Preferred Language',
'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.',
'users_social_accounts' => 'Social Accounts',
'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.',
'users_social_connect' => 'Connect Account',
'users_social_disconnect' => 'Disconnect Account',
'users_external_auth_id_desc' => 'Dette er det ID, der bruges til at matche denne bruger ved kommunikation med dit eksterne godkendelsessystem.',
'users_password_warning' => 'Udfyld kun nedenstående, hvis du vil ændre din adgangskode.',
'users_system_public' => 'Denne bruger repræsenterer alle gæstebrugere, der besøger din instans. Den kan ikke bruges til at logge på, men tildeles automatisk.',
'users_delete' => 'Slet bruger',
'users_delete_named' => 'Slet bruger :userName',
'users_delete_warning' => 'Dette vil helt slette denne bruger med navnet \':userName\' fra systemet.',
'users_delete_confirm' => 'Er du sikker på, at du vil slette denne bruger?',
'users_delete_success' => 'Brugere blev fjernet',
'users_edit' => 'Rediger bruger',
'users_edit_profile' => 'Rediger profil',
'users_edit_success' => 'Bruger suscesfuldt opdateret',
'users_avatar' => 'Brugeravatar',
'users_avatar_desc' => 'Vælg et billede for at repræsentere denne bruger. Dette skal være ca. 256px kvadratisk.',
'users_preferred_language' => 'Foretrukket sprog',
'users_preferred_language_desc' => 'Denne indstilling ændrer det sprog, der bruges til applikationens brugergrænseflade. Dette påvirker ikke noget brugeroprettet indhold.',
'users_social_accounts' => 'Sociale konti',
'users_social_accounts_info' => 'Her kan du forbinde dine andre konti for hurtigere og lettere login. Afbrydelse af en konto her tilbagekalder ikke tidligere autoriseret adgang. Tilbagekald adgang fra dine profilindstillinger på den tilsluttede sociale konto.',
'users_social_connect' => 'Forbind konto',
'users_social_disconnect' => 'Frakobl konto',
'users_social_connected' => ':socialAccount kontoen blev knyttet til din profil.',
'users_social_disconnected' => ':socialAccount kontoen blev afbrudt fra din profil.',
'users_api_tokens' => 'API Tokens',
'users_api_tokens_none' => 'No API tokens have been created for this user',
'users_api_tokens_create' => 'Create Token',
'users_api_tokens_expires' => 'Expires',
'users_api_tokens_docs' => 'API Documentation',
'users_api_tokens_none' => 'Ingen API tokens er blevet oprettet for denne bruger',
'users_api_tokens_create' => 'Opret Token',
'users_api_tokens_expires' => 'Udløber',
'users_api_tokens_docs' => 'API-dokumentation',
// API Tokens
'user_api_token_create' => 'Create API Token',
'user_api_token_name' => 'Name',
'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.',
'user_api_token_expiry' => 'Expiry Date',
'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.',
'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID"" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.',
'user_api_token_create_success' => 'API token successfully created',
'user_api_token_update_success' => 'API token successfully updated',
'user_api_token_create' => 'Opret API-token',
'user_api_token_name' => 'Navn',
'user_api_token_name_desc' => 'Giv din token et læsbart navn som en fremtidig påmindelse om dets tilsigtede formål.',
'user_api_token_expiry' => 'Udløbsdato',
'user_api_token_expiry_desc' => 'Indstil en dato, hvorpå denne token udløber. Efter denne dato fungerer anmodninger, der er lavet med denne token, ikke længere. Hvis du lader dette felt være tomt, udløber den 100 år ud i fremtiden.',
'user_api_token_create_secret_message' => 'Umiddelbart efter oprettelse af denne token genereres og vises et "Token-ID" og Token hemmelighed". Hemmeligheden vises kun en gang, så husk at kopiere værdien til et sikkert sted inden du fortsætter.',
'user_api_token_create_success' => 'API token succesfuldt oprettet',
'user_api_token_update_success' => 'API token succesfuldt opdateret',
'user_api_token' => 'API Token',
'user_api_token_id' => 'Token ID',
'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.',
'user_api_token_secret' => 'Token Secret',
'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.',
'user_api_token_created' => 'Token Created :timeAgo',
'user_api_token_updated' => 'Token Updated :timeAgo',
'user_api_token_delete' => 'Delete Token',
'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.',
'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?',
'user_api_token_delete_success' => 'API token successfully deleted',
'user_api_token_id' => 'Token-ID',
'user_api_token_id_desc' => 'Dette er en ikke-redigerbar systemgenereret identifikator for denne token, som skal sendes i API-anmodninger.',
'user_api_token_secret' => 'Token hemmelighed',
'user_api_token_secret_desc' => 'Dette er et system genereret hemmelighed for denne token, som skal sendes i API-anmodninger. Dette vises kun denne ene gang, så kopier denne værdi til et sikkert sted.',
'user_api_token_created' => 'Token oprettet :timeAgo',
'user_api_token_updated' => 'Token opdateret :timeAgo',
'user_api_token_delete' => 'Slet Token',
'user_api_token_delete_warning' => 'Dette vil helt slette API-token\'en med navnet \':tokenName\' fra systemet.',
'user_api_token_delete_confirm' => 'Er du sikker på, at du vil slette denne API-token?',
'user_api_token_delete_success' => 'API-token slettet',
//! If editing translations files directly please ignore this in all
//! languages apart from en. Content will be auto-copied from en.
@ -185,27 +185,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dansk',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -0,0 +1,114 @@
<?php
/**
* Validation Lines
* The following language lines contain the default error messages used by
* the validator class. Some of these rules have multiple versions such
* as the size rules. Feel free to tweak each of these messages here.
*/
return [
// Standard laravel validation lines
'accepted' => ':attribute skal være accepteret.',
'active_url' => ':attribute er ikke en gyldig URL.',
'after' => ':attribute skal være en dato efter :date.',
'alpha' => ':attribute må kun indeholde bogstaver.',
'alpha_dash' => ':attribute må kun bestå af bogstaver, tal, binde- og under-streger.',
'alpha_num' => ':attribute må kun indeholde bogstaver og tal.',
'array' => ':attribute skal være et array.',
'before' => ':attribute skal være en dato før :date.',
'between' => [
'numeric' => ':attribute skal være mellem :min og :max.',
'file' => ':attribute skal være mellem :min og :max kilobytes.',
'string' => ':attribute skal være mellem :min og :max tegn.',
'array' => ':attribute skal have mellem :min og :max elementer.',
],
'boolean' => ':attribute-feltet skal være enten sandt eller falsk.',
'confirmed' => ':attribute-bekræftelsen matcher ikke.',
'date' => ':attribute er ikke en gyldig dato.',
'date_format' => ':attribute matcher ikke formatet :format.',
'different' => ':attribute og :other skal være forskellige.',
'digits' => ':attribute skal være :digits cifre.',
'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',
'filled' => ':attribute er obligatorisk.',
'gt' => [
'numeric' => ':attribute skal være større end :value.',
'file' => ':attribute skal være større end :value kilobytes.',
'string' => ':attribute skal have mere end :value tegn.',
'array' => ':attribute skal indeholde mere end :value elementer.',
],
'gte' => [
'numeric' => ':attribute skal mindst være :value.',
'file' => ':attribute skal være mindst :value kilobytes.',
'string' => ':attribute skal indeholde mindst :value tegn.',
'array' => ':attribute skal have :value elementer eller flere.',
],
'exists' => 'Den valgte :attribute er ikke gyldig.',
'image' => ':attribute skal være et billede.',
'image_extension' => ':attribute skal være et gyldigt og understøttet billedformat.',
'in' => 'Den valgte :attribute er ikke gyldig.',
'integer' => ':attribute skal være et heltal.',
'ip' => ':attribute skal være en gyldig IP-adresse.',
'ipv4' => ':attribute skal være en gyldig IPv4-adresse.',
'ipv6' => ':attribute skal være en gyldig IPv6-adresse.',
'json' => ':attribute skal være en gyldig JSON-streng.',
'lt' => [
'numeric' => ':attribute skal være mindre end :value.',
'file' => ':attribute skal være mindre end :value kilobytes.',
'string' => ':attribute skal have mindre end :value tegn.',
'array' => ':attribute skal indeholde mindre end :value elementer.',
],
'lte' => [
'numeric' => ':attribute skal være mindre end eller lig med :value.',
'file' => 'The :attribute skal være mindre eller lig med :value kilobytes.',
'string' => ':attribute skal maks være :value tegn.',
'array' => ':attribute må ikke indeholde mere end :value elementer.',
],
'max' => [
'numeric' => ':attribute må ikke overstige :max.',
'file' => ':attribute må ikke overstige :max kilobytes.',
'string' => ':attribute må ikke overstige :max. tegn.',
'array' => ':attribute må ikke have mere end :max elementer.',
],
'mimes' => ':attribute skal være en fil af typen: :values.',
'min' => [
'numeric' => ':attribute skal mindst være :min.',
'file' => ':attribute skal være mindst :min kilobytes.',
'string' => ':attribute skal mindst være :min tegn.',
'array' => ':attribute skal have mindst :min elementer.',
],
'no_double_extension' => ':attribute må kun indeholde én filtype.',
'not_in' => 'Den valgte :attribute er ikke gyldig.',
'not_regex' => ':attribute-formatet er ugyldigt.',
'numeric' => ':attribute skal være et tal.',
'regex' => ':attribute-formatet er ugyldigt.',
'required' => ':attribute er obligatorisk.',
'required_if' => ':attribute skal udfyldes når :other er :value.',
'required_with' => ':attribute skal udfyldes når :values er udfyldt.',
'required_with_all' => ':attribute skal udfyldes når :values er udfyldt.',
'required_without' => ':attribute skal udfyldes når :values ikke er udfyldt.',
'required_without_all' => ':attribute skal udfyldes når ingen af :values er udfyldt.',
'same' => ':attribute og :other skal være ens.',
'size' => [
'numeric' => ':attribute skal være :size.',
'file' => ':attribute skal være :size kilobytes.',
'string' => ':attribute skal være :size tegn.',
'array' => ':attribute skal indeholde :size elementer.',
],
'string' => ':attribute skal være tekst.',
'timezone' => ':attribute skal være en gyldig zone.',
'unique' => ':attribute er allerede i brug.',
'url' => ':attribute-formatet er ugyldigt.',
'uploaded' => 'Filen kunne ikke oploades. Serveren accepterer muligvis ikke filer af denne størrelse.',
// Custom validation lines
'custom' => [
'password-confirm' => [
'required_with' => 'Adgangskodebekræftelse påkrævet',
],
],
// Custom validation attributes
'attributes' => [],
];

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Seite nicht gefunden',
'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Sie angefordert haben, wurde nicht gefunden.',
'sorry_page_not_found_permission_warning' => 'Wenn Sie erwartet haben, dass diese Seite existiert, haben Sie möglicherweise nicht die Berechtigung, sie anzuzeigen.',
'return_home' => 'Zurück zur Startseite',
'error_occurred' => 'Es ist ein Fehler aufgetreten',
'app_down' => ':appName befindet sich aktuell im Wartungsmodus.',
@ -96,4 +97,7 @@ return [
'api_user_no_api_permission' => 'Der Besitzer des verwendeten API-Token hat keine Berechtigung für API-Aufrufe',
'api_user_token_expired' => 'Das verwendete Autorisierungs-Token ist abgelaufen',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Fehler beim Senden einer Test E-Mail:',
];

View File

@ -58,7 +58,7 @@ Wenn Sie nicht eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt
'reg_enable_toggle' => 'Registrierung erlauben',
'reg_enable_desc' => 'Wenn die Registrierung erlaubt ist, kann sich der Benutzer als Anwendungsbenutzer anmelden. Bei der Registrierung erhält er eine einzige, voreingestellte Benutzerrolle.',
'reg_default_role' => 'Standard-Benutzerrolle nach Registrierung',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_external_warning' => 'Die obige Option wird ignoriert, während eine externe LDAP oder SAML Authentifizierung aktiv ist. Benutzerkonten für nicht existierende Mitglieder werden automatisch erzeugt, wenn die Authentifizierung gegen das verwendete externe System erfolgreich ist.',
'reg_email_confirmation' => 'Bestätigung per E-Mail',
'reg_email_confirmation_toggle' => 'Bestätigung per E-Mail erforderlich',
'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.',
@ -134,7 +134,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
'users_send_invite_text' => 'Sie können diesem Benutzer eine Einladungs-E-Mail senden, die es ihm erlaubt, sein eigenes Passwort zu setzen, andernfalls können Sie sein Passwort selbst setzen.',
'users_send_invite_option' => 'Benutzer-Einladungs-E-Mail senden',
'users_external_auth_id' => 'Externe Authentifizierungs-ID',
'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.',
'users_external_auth_id_desc' => 'Dies ist die ID, mit der dieser Benutzer bei der Kommunikation mit Ihrem externen Authentifizierungssystem übereinstimmt.',
'users_password_warning' => 'Füllen Sie die folgenden Felder nur aus, wenn Sie Ihr Passwort ändern möchten:',
'users_system_public' => 'Dieser Benutzer repräsentiert alle unangemeldeten Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.',
'users_delete' => 'Benutzer löschen',
@ -188,27 +188,29 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dänisch',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -20,7 +20,7 @@ return [
'username' => 'Benutzername',
'email' => 'E-Mail',
'password' => 'Passwort',
'password_confirm' => 'Passwort best&auml;tigen',
'password_confirm' => 'Passwort bestätigen',
'password_hint' => 'Mindestlänge: 7 Zeichen',
'forgot_password' => 'Passwort vergessen?',
'remember_me' => 'Angemeldet bleiben',
@ -32,11 +32,11 @@ return [
'social_registration' => 'Mit Sozialem Netzwerk registrieren',
'social_registration_text' => 'Mit einer dieser Dienste registrieren oder anmelden',
'register_thanks' => 'Vielen Dank für Ihre Registrierung!',
'register_thanks' => 'Vielen Dank für deine Registrierung!',
'register_confirm' => 'Bitte prüfe Deinen Posteingang und bestätig die Registrierung.',
'registrations_disabled' => 'Eine Registrierung ist momentan nicht möglich',
'registration_email_domain_invalid' => 'Du kannst dich mit dieser E-Mail nicht registrieren.',
'register_success' => 'Vielen Dank für Deine Registrierung! Die Daten sind gespeichert und Du bist angemeldet.',
'register_success' => 'Vielen Dank für deine Registrierung! Du bist jetzt registriert und eingeloggt.',
// Password Reset
@ -47,7 +47,7 @@ return [
'reset_password_success' => 'Dein Passwort wurde erfolgreich zurückgesetzt.',
'email_reset_subject' => 'Passwort zurücksetzen für :appName',
'email_reset_text' => 'Du erhältsts diese E-Mail, weil jemand versucht hat, Dein Passwort zurückzusetzen.',
'email_reset_not_requested' => 'Wenn Du das nicht warst, brauchst Du nichts weiter zu tun.',
'email_reset_not_requested' => 'Wenn du das zurücksetzen des Passworts nicht angefordert hast, ist keine weitere Aktion erforderlich.',
// Email Confirmation
@ -55,8 +55,8 @@ return [
'email_confirm_greeting' => 'Danke, dass Du dich für :appName registrierst hast!',
'email_confirm_text' => 'Bitte bestätige Deine E-Mail-Adresse, indem Du auf die Schaltfläche klickst:',
'email_confirm_action' => 'E-Mail-Adresse bestätigen',
'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur Bestätigung Deine E-Mail-Adresse nicht versandt werden. Bitte kontaktiere den Systemadministrator!',
'email_confirm_success' => 'Deine E-Mail-Adresse wurde best&auml;tigt!',
'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur Bestätigung Deiner E-Mail-Adresse nicht versandt werden. Bitte kontaktiere den Systemadministrator!',
'email_confirm_success' => 'Deine E-Mail-Adresse wurde bestätigt!',
'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfe Deinen Posteingang.',
'email_not_confirmed' => 'E-Mail-Adresse ist nicht bestätigt',
@ -67,11 +67,11 @@ return [
// User Invite
'user_invite_email_subject' => 'Du wurdest eingeladen :appName beizutreten!',
'user_invite_email_greeting' => 'Ein Konto wurde für Sie auf :appName erstellt.',
'user_invite_email_text' => 'Klicken Sie auf die Schaltfläche unten, um ein Passwort festzulegen und Zugriff zu erhalten:',
'user_invite_email_action' => 'Account-Passwort festlegen',
'user_invite_email_greeting' => 'Ein Konto wurde für dich auf :appName erstellt.',
'user_invite_email_text' => 'Klicke auf die Schaltfläche unten, um ein Passwort festzulegen und Zugriff zu erhalten:',
'user_invite_email_action' => 'Konto-Passwort festlegen',
'user_invite_page_welcome' => 'Willkommen bei :appName!',
'user_invite_page_text' => 'Um die Anmeldung abzuschließen und Zugriff auf :appName zu bekommen muss noch ein Passwort festgelegt werden. Dieses wird in Zukunft zum Einloggen benötigt.',
'user_invite_page_confirm_button' => 'Passwort wiederholen',
'user_invite_success' => 'Passwort gesetzt, Sie haben nun Zugriff auf :appName!'
'user_invite_page_confirm_button' => 'Passwort bestätigen',
'user_invite_success' => 'Das Passwort wurde gesetzt, du hast nun Zugriff auf :appName!'
];

View File

@ -275,7 +275,7 @@ return [
'attachments_link_attached' => 'Link erfolgreich der Seite hinzugefügt',
'templates' => 'Vorlagen',
'templates_set_as_template' => 'Seite ist eine Vorlage',
'templates_explain_set_as_template' => 'Sie können diese Seite als Vorlage festlegen, damit deren Inhalt beim Erstellen anderer Seiten verwendet werden kann. Andere Benutzer können diese Vorlage verwenden, wenn sie die Zugriffsrechte für diese Seite haben.',
'templates_explain_set_as_template' => 'Du kannst diese Seite als Vorlage festlegen, damit deren Inhalt beim Erstellen anderer Seiten verwendet werden kann. Andere Benutzer können diese Vorlage verwenden, wenn diese die Zugriffsrechte für diese Seite haben.',
'templates_replace_content' => 'Seiteninhalt ersetzen',
'templates_append_content' => 'An Seiteninhalt anhängen',
'templates_prepend_content' => 'Seiteninhalt voranstellen',

View File

@ -16,15 +16,15 @@ return [
'email_confirmation_awaiting' => 'Die E-Mail-Adresse für das verwendete Konto muss bestätigt werden',
'ldap_fail_anonymous' => 'Anonymer LDAP-Zugriff ist fehlgeschlafgen',
'ldap_fail_authed' => 'LDAP-Zugriff mit DN und Passwort ist fehlgeschlagen',
'ldap_extension_not_installed' => 'LDAP-PHP-Erweiterung ist nicht installiert.',
'ldap_cannot_connect' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.',
'ldap_extension_not_installed' => 'LDAP-PHP-Erweiterung ist nicht installiert',
'ldap_cannot_connect' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf',
'saml_already_logged_in' => 'Du bist bereits angemeldet',
'saml_user_not_registered' => 'Kein Benutzer mit ID :name registriert und die automatische Registrierung ist deaktiviert',
'saml_no_email_address' => 'Es konnte keine E-Mail-Adresse für diesen Benutzer in den vom externen Authentifizierungssystem zur Verfügung gestellten Daten gefunden werden',
'saml_invalid_response_id' => 'Die Anfrage vom externen Authentifizierungssystem wird von einem von dieser Anwendung gestarteten Prozess nicht erkannt. Das Zurückgehen nach einem Login könnte dieses Problem verursachen.',
'saml_fail_authed' => 'Anmeldung mit :system fehlgeschlagen, System konnte keine erfolgreiche Autorisierung bereitstellen',
'social_no_action_defined' => 'Es ist keine Aktion definiert',
'social_login_bad_response' => "Fehler bei der :socialAccount-Anmeldung: \n:error",
'social_login_bad_response' => "Fehler bei :socialAccount Login: \n:error",
'social_account_in_use' => 'Dieses :socialAccount-Konto wird bereits verwendet. Bitte melde dich mit dem :socialAccount-Konto an.',
'social_account_email_in_use' => 'Die E-Mail-Adresse ":email" ist bereits registriert. Wenn Du bereits registriert bist, kannst Du Dein :socialAccount-Konto in Deinen Profil-Einstellungen verknüpfen.',
'social_account_existing' => 'Dieses :socialAccount-Konto ist bereits mit Ihrem Profil verknüpft.',
@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Seite nicht gefunden',
'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Du angefordert hast, wurde nicht gefunden.',
'sorry_page_not_found_permission_warning' => 'Wenn du erwartet hast, dass diese Seite existiert, hast du möglicherweise nicht die Berechtigung, sie anzuzeigen.',
'return_home' => 'Zurück zur Startseite',
'error_occurred' => 'Es ist ein Fehler aufgetreten',
'app_down' => ':appName befindet sich aktuell im Wartungsmodus.',
@ -92,8 +93,11 @@ return [
'api_no_authorization_found' => 'Kein Autorisierungs-Token für die Anfrage gefunden',
'api_bad_authorization_format' => 'Ein Autorisierungs-Token wurde auf die Anfrage gefunden, aber das Format schien falsch zu sein',
'api_user_token_not_found' => 'Es wurde kein passender API-Token für den angegebenen Autorisierungs-Token gefunden',
'api_incorrect_token_secret' => 'Das für den angegebenen API-Token angegebene Kennwort ist falsch',
'api_incorrect_token_secret' => 'Das für den API-Token angegebene geheimen Token ist falsch',
'api_user_no_api_permission' => 'Der Besitzer des verwendeten API-Token hat keine Berechtigung für API-Aufrufe',
'api_user_token_expired' => 'Das verwendete Autorisierungs-Token ist abgelaufen',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Fehler beim Senden einer Test E-Mail:',
];

View File

@ -23,7 +23,7 @@ return [
'app_public_access_toggle' => 'Öffentlichen Zugriff erlauben',
'app_public_viewing' => 'Öffentliche Ansicht erlauben?',
'app_secure_images' => 'Erhöhte Sicherheit für hochgeladene Bilder aktivieren?',
'app_secure_images_toggle' => 'Aktiviere Bild-Upload höherer Sicherheit',
'app_secure_images_toggle' => 'Aktiviere Bild-Upload mit höherer Sicherheit',
'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten zu Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.',
'app_editor' => 'Seiteneditor',
'app_editor_desc' => 'Wähle den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.',
@ -58,7 +58,7 @@ Wenn Du nichts eingibst, wird die Anwendung auf die Standardfarbe zurückgesetzt
'reg_enable_toggle' => 'Registrierung erlauben',
'reg_enable_desc' => 'Wenn die Registrierung erlaubt ist, kann sich der Benutzer als Anwendungsbenutzer anmelden. Bei der Registrierung erhält er eine einzige, voreingestellte Benutzerrolle.',
'reg_default_role' => 'Standard-Benutzerrolle nach Registrierung',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_external_warning' => 'Die obige Option wird ignoriert, während eine externe LDAP oder SAML Authentifizierung aktiv ist. Benutzerkonten für nicht existierende Mitglieder werden automatisch erzeugt, wenn die Authentifizierung gegen das verwendete externe System erfolgreich ist.',
'reg_email_confirmation' => 'Bestätigung per E-Mail',
'reg_email_confirmation_toggle' => 'Bestätigung per E-Mail erforderlich',
'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.',
@ -77,12 +77,12 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
'maint_image_cleanup_success' => ':count eventuell unbenutze Bilder wurden gefunden und gelöscht.',
'maint_image_cleanup_nothing_found' => 'Keine unbenutzen Bilder gefunden. Nichts zu löschen!',
'maint_send_test_email' => 'Test Email versenden',
'maint_send_test_email_desc' => 'Dies sendet eine Test E-Mail an Ihre in Ihrem Profil angegebene E-Mail-Adresse.',
'maint_send_test_email_desc' => 'Dies sendet eine Test E-Mail an die in deinem Profil angegebene E-Mail-Adresse.',
'maint_send_test_email_run' => 'Sende eine Test E-Mail',
'maint_send_test_email_success' => 'E-Mail wurde an :address gesendet',
'maint_send_test_email_mail_subject' => 'Test E-Mail',
'maint_send_test_email_mail_greeting' => 'E-Mail-Versand scheint zu funktionieren!',
'maint_send_test_email_mail_text' => 'Glückwunsch! Da Sie diese E-Mail Benachrichtigung erhalten haben, scheinen Ihre E-Mail-Einstellungen korrekt konfiguriert zu sein.',
'maint_send_test_email_mail_text' => 'Glückwunsch! Da du diese E-Mail Benachrichtigung erhalten hast, scheinen deine E-Mail-Einstellungen korrekt konfiguriert zu sein.',
// Role Settings
'roles' => 'Rollen',
@ -131,10 +131,10 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
'users_role_desc' => 'Wählen Sie aus, welchen Rollen dieser Benutzer zugeordnet werden soll. Wenn ein Benutzer mehreren Rollen zugeordnet ist, werden die Berechtigungen dieser Rollen gestapelt und er erhält alle Fähigkeiten der zugewiesenen Rollen.',
'users_password' => 'Benutzerpasswort',
'users_password_desc' => 'Legen Sie ein Passwort fest, mit dem Sie sich anmelden möchten. Diese muss mindestens 5 Zeichen lang sein.',
'users_send_invite_text' => 'Sie können diesem Benutzer eine Einladungs-E-Mail senden, die es ihm erlaubt, sein eigenes Passwort zu setzen, andernfalls können Sie sein Passwort selbst setzen.',
'users_send_invite_text' => 'Du kannst diesem Benutzer eine Einladungs-E-Mail senden, die es ihm erlaubt, sein eigenes Passwort zu setzen, andernfalls kannst du sein Passwort selbst setzen.',
'users_send_invite_option' => 'Benutzer-Einladungs-E-Mail senden',
'users_external_auth_id' => 'Externe Authentifizierungs-ID',
'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.',
'users_external_auth_id_desc' => 'Dies ist die ID, die verwendet wird, um diesen Benutzer bei der Kommunikation mit deinem externen Authentifizierungssystem abzugleichen.',
'users_password_warning' => 'Fülle die folgenden Felder nur aus, wenn Du Dein Passwort ändern möchtest:',
'users_system_public' => 'Dieser Benutzer repräsentiert alle unangemeldeten Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.',
'users_delete' => 'Benutzer löschen',
@ -164,22 +164,22 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
// API Tokens
'user_api_token_create' => 'Neuen API-Token erstellen',
'user_api_token_name' => 'Name',
'user_api_token_name_desc' => 'Geben Sie Ihrem Token einen aussagekräftigen Namen als spätere Erinnerung an seinen Verwendungszweck.',
'user_api_token_name_desc' => 'Gebe deinem Token einen aussagekräftigen Namen als spätere Erinnerung an seinen Verwendungszweck.',
'user_api_token_expiry' => 'Ablaufdatum',
'user_api_token_expiry_desc' => 'Legen Sie ein Datum fest, an dem dieser Token abläuft. Nach diesem Datum funktionieren Anfragen, die mit diesem Token gestellt werden, nicht mehr. Wenn Sie dieses Feld leer lassen, wird ein Ablaufdatum von 100 Jahren in der Zukunft festgelegt.',
'user_api_token_create_secret_message' => 'Unmittelbar nach der Erstellung dieses Tokens wird eine "Token ID" & ein "Token Kennwort" generiert und angezeigt. Das Kennwort wird nur ein einziges Mal angezeigt. Stellen Sie also sicher, dass Sie den Inhalt an einen sicheren Ort kopieren, bevor Sie fortfahren.',
'user_api_token_expiry_desc' => 'Lege ein Datum fest, an dem dieser Token abläuft. Nach diesem Datum funktionieren Anfragen, die mit diesem Token gestellt werden, nicht mehr. Wenn du dieses Feld leer lässt, wird ein Ablaufdatum von 100 Jahren in der Zukunft festgelegt.',
'user_api_token_create_secret_message' => 'Unmittelbar nach der Erstellung dieses Tokens wird eine "Token ID" & ein "Token Kennwort" generiert und angezeigt. Das Kennwort wird nur ein einziges Mal angezeigt. Stelle also sicher, dass du den Inhalt an einen sicheren Ort kopierst, bevor du fortfährst.',
'user_api_token_create_success' => 'API-Token erfolgreich erstellt',
'user_api_token_update_success' => 'API-Token erfolgreich aktualisiert',
'user_api_token' => 'API-Token',
'user_api_token_id' => 'Token ID',
'user_api_token_id_desc' => 'Dies ist ein nicht editierbarer, vom System generierter Identifikator für diesen Token, welcher bei API-Anfragen angegeben werden muss.',
'user_api_token_secret' => 'Token Kennwort',
'user_api_token_secret_desc' => 'Dies ist ein systemgeneriertes Kennwort für diesen Token, das bei API-Anfragen zur Verfügung gestellt werden muss. Es wird nur dieses eine Mal angezeigt, deshalb kopieren Sie diesen Wert an einen sicheren und geschützten Ort.',
'user_api_token_secret_desc' => 'Dies ist ein systemgeneriertes Kennwort für diesen Token, das bei API-Anfragen zur Verfügung gestellt werden muss. Es wird nur dieses eine Mal angezeigt, deshalb kopiere diesen an einen sicheren und geschützten Ort.',
'user_api_token_created' => 'Token erstellt :timeAgo',
'user_api_token_updated' => 'Token aktualisiert :timeAgo',
'user_api_token_delete' => 'Lösche Token',
'user_api_token_delete_warning' => 'Dies löscht den API-Token mit dem Namen \':tokenName\' vollständig aus dem System.',
'user_api_token_delete_confirm' => 'Sind Sie sicher, dass Sie diesen API-Token löschen möchten?',
'user_api_token_delete_confirm' => 'Bist du sicher, dass du diesen API-Token löschen möchtest?',
'user_api_token_delete_success' => 'API-Token erfolgreich gelöscht',
//! If editing translations files directly please ignore this in all
@ -188,27 +188,29 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dänisch',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slowenisch',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -34,14 +34,14 @@ return [
'filled' => ':attribute ist erforderlich.',
'gt' => [
'numeric' => ':attribute muss größer als :value sein.',
'file' => ':attribute muss mindestens :value Kilobytes groß sein.',
'file' => ':attribute muss mindestens größer als :value Kilobytes sein.',
'string' => ':attribute muss mehr als :value Zeichen haben.',
'array' => ':attribute muss mindestens :value Elemente haben.',
'array' => ':attribute muss mehr als :value Elemente haben.',
],
'gte' => [
'numeric' => ':attribute muss größer-gleich :value sein.',
'file' => ':attribute muss mindestens :value Kilobytes groß sein.',
'string' => ':attribute muss mindestens :value Zeichen enthalten.',
'file' => ':attribute muss größer-gleich :value Kilobytes sein.',
'string' => ':attribute muss mindestens :value Zeichen haben.',
'array' => ':attribute muss :value Elemente oder mehr haben.',
],
'exists' => ':attribute ist ungültig.',
@ -52,9 +52,9 @@ return [
'ip' => ':attribute muss eine valide IP-Adresse sein.',
'ipv4' => ':attribute muss eine gültige IPv4 Adresse sein.',
'ipv6' => ':attribute muss eine gültige IPv6-Adresse sein.',
'json' => 'Das Attribut muss eine gültige JSON-Zeichenfolge sein.',
'json' => ':attribute muss ein gültiger JSON-String sein.',
'lt' => [
'numeric' => ':attribute muss kleiner sein :value sein.',
'numeric' => ':attribute muss kleiner als :value sein.',
'file' => ':attribute muss kleiner als :value Kilobytes sein.',
'string' => ':attribute muss weniger als :value Zeichen haben.',
'array' => ':attribute muss weniger als :value Elemente haben.',
@ -62,7 +62,7 @@ return [
'lte' => [
'numeric' => ':attribute muss kleiner oder gleich :value sein.',
'file' => ':attribute muss kleiner oder gleich :value Kilobytes sein.',
'string' => ':attribute darf höchstens :value Zeichen besitzen.',
'string' => ':attribute muss :value oder weniger Zeichen haben.',
'array' => ':attribute darf höchstens :value Elemente haben.',
],
'max' => [
@ -80,7 +80,7 @@ return [
],
'no_double_extension' => ':attribute darf nur eine gültige Dateiendung',
'not_in' => ':attribute ist ungültig.',
'not_regex' => ':attribute ist kein valides Format.',
'not_regex' => ':attribute ist kein gültiges Format.',
'numeric' => ':attribute muss eine Zahl sein.',
'regex' => ':attribute ist in einem ungültigen Format.',
'required' => ':attribute ist erforderlich.',

View File

@ -43,7 +43,7 @@ return [
'reset_password' => 'Reset Password',
'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
'reset_password_send_button' => 'Send Reset Link',
'reset_password_sent_success' => 'A password reset link has been sent to :email.',
'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.',
'reset_password_success' => 'Your password has been successfully reset.',
'email_reset_subject' => 'Reset your :appName password',
'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Page Not Found',
'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.',
'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.',
'return_home' => 'Return to home',
'error_occurred' => 'An Error Occurred',
'app_down' => ':appName is down right now',

View File

@ -8,7 +8,7 @@ return [
'password' => 'Passwords must be at least eight characters and match the confirmation.',
'user' => "We can't find a user with that e-mail address.",
'token' => 'This password reset token is invalid.',
'token' => 'The password reset token is invalid for this email address.',
'sent' => 'We have e-mailed your password reset link!',
'reset' => 'Your password has been reset!',

View File

@ -185,27 +185,30 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dansk',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'he' => 'עברית',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -7,41 +7,41 @@ return [
// Pages
'page_create' => 'página creada',
'page_create_notification' => 'Página creada exitosamente',
'page_create_notification' => 'Página creada correctamente',
'page_update' => 'página actualizada',
'page_update_notification' => 'Página actualizada exitosamente',
'page_delete' => 'página borrada',
'page_delete_notification' => 'Página borrada exitosamente',
'page_update_notification' => 'Página actualizada correctamente',
'page_delete' => 'página eliminada',
'page_delete_notification' => 'Página eliminada correctamente',
'page_restore' => 'página restaurada',
'page_restore_notification' => 'Página restaurada exitosamente',
'page_restore_notification' => 'Página restaurada correctamente',
'page_move' => 'página movida',
// Chapters
'chapter_create' => 'capítulo creado',
'chapter_create_notification' => 'Capítulo creado exitosamente',
'chapter_create_notification' => 'Capítulo creado correctamente',
'chapter_update' => 'capítulo actualizado',
'chapter_update_notification' => 'Capítulo actualizado exitosamente',
'chapter_delete' => 'capítulo borrado',
'chapter_delete_notification' => 'Capítulo borrado exitosamente',
'chapter_update_notification' => 'Capítulo actualizado correctamente',
'chapter_delete' => 'capítulo eliminado',
'chapter_delete_notification' => 'Capítulo eliminado correctamente',
'chapter_move' => 'capítulo movido',
// Books
'book_create' => 'libro creado',
'book_create_notification' => 'Libro creado exitosamente',
'book_create_notification' => 'Libro creado correctamente',
'book_update' => 'libro actualizado',
'book_update_notification' => 'Libro actualizado exitosamente',
'book_delete' => 'libro borrado',
'book_delete_notification' => 'Libro borrado exitosamente',
'book_update_notification' => 'Libro actualizado correctamente',
'book_delete' => 'libro eliminado',
'book_delete_notification' => 'Libro eliminado correctamente',
'book_sort' => 'libro ordenado',
'book_sort_notification' => 'Libro reordenado exitosamente',
'book_sort_notification' => 'Libro reordenado correctamente',
// Bookshelves
'bookshelf_create' => 'estante creado',
'bookshelf_create_notification' => 'Estante creado exitosamente',
'bookshelf_create_notification' => 'Estante creado correctamente',
'bookshelf_update' => 'estante actualizado',
'bookshelf_update_notification' => 'Estante actualizado exitosamente',
'bookshelf_delete' => 'estante borrado',
'bookshelf_delete_notification' => 'Estante borrado exitosamente',
'bookshelf_update_notification' => 'Estante actualizado correctamente',
'bookshelf_delete' => 'estante eliminado',
'bookshelf_delete_notification' => 'Estante eliminado correctamente',
// Other
'commented_on' => 'comentada el',

View File

@ -6,15 +6,15 @@
*/
return [
'failed' => 'Las credenciales no concuerdan con nuestros registros.',
'throttle' => 'Demasiados intentos fallidos de conexión. Por favor intente nuevamente en :seconds segundos.',
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
'throttle' => 'Demasiados intentos de inicio de sesión. Por favor, inténtalo de nuevo en :seconds segundos.',
// Login & Register
'sign_up' => 'Registrarse',
'log_in' => 'Acceder',
'log_in_with' => 'Acceder con :socialDriver',
'sign_up_with' => 'Registrarse con :socialDriver',
'logout' => 'Salir',
'logout' => 'Cerrar sesión',
'name' => 'Nombre',
'username' => 'Usuario',

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Página no encontrada',
'sorry_page_not_found' => 'Lo sentimos, la página a la que intenta acceder no pudo ser encontrada.',
'sorry_page_not_found_permission_warning' => 'Si esperaba que esta página existiera, puede que no tenga permiso para verla.',
'return_home' => 'Volver a la página de inicio',
'error_occurred' => 'Ha ocurrido un error',
'app_down' => 'La aplicación :appName se encuentra caída en este momento',
@ -96,4 +97,7 @@ return [
'api_user_no_api_permission' => 'El propietario del token API usado no tiene permiso para hacer llamadas API',
'api_user_token_expired' => 'El token de autorización usado ha caducado',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error al enviar un email de prueba:',
];

View File

@ -56,7 +56,7 @@ return [
'reg_enable_toggle' => 'Habilitar registro',
'reg_enable_desc' => 'Cuando se habilita el registro los usuarios podrán registrarse como usuarios de la aplicación. Al registrarse se les asigna un rol único por defecto.',
'reg_default_role' => 'Rol de usuario por defecto después del registro',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_external_warning' => 'La opción anterior no se utiliza mientras la autenticación LDAP o SAML externa esté activa. Las cuentas de usuario para los miembros no existentes se crearán automáticamente si la autenticación en el sistema externo en uso es exitosa.',
'reg_email_confirmation' => 'Confirmación por Email',
'reg_email_confirmation_toggle' => 'Requerir confirmación por Email',
'reg_confirm_email_desc' => 'Si se emplea la restricción por dominio, entonces se requerirá la confirmación por correo electrónico y esta opción será ignorada.',
@ -185,27 +185,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Danés',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Página no encontrada',
'sorry_page_not_found' => 'Lo sentimos, la página que intenta acceder no pudo ser encontrada.',
'sorry_page_not_found_permission_warning' => 'Si esperaba que esta página existiera, puede que no tenga permiso para verla.',
'return_home' => 'Volver al home',
'error_occurred' => 'Ha ocurrido un error',
'app_down' => 'La aplicación :appName se encuentra caída en este momento',
@ -96,4 +97,7 @@ return [
'api_user_no_api_permission' => 'El propietario del token API usado no tiene permiso para hacer llamadas API',
'api_user_token_expired' => 'El token de autorización usado ha caducado',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error al enviar un email de prueba:',
];

View File

@ -56,7 +56,7 @@ return [
'reg_enable_toggle' => 'Habilitar registro',
'reg_enable_desc' => 'Cuando se habilita el registro, el usuario podrá crear su usuario en la aplicación. Con el regsitro, se le otorga un rol de usuario único y por defecto.',
'reg_default_role' => 'Rol de usuario por defecto despúes del registro',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_external_warning' => 'La opción anterior no se utiliza mientras la autenticación LDAP o SAML externa esté activa. Las cuentas de usuario para los miembros no existentes se crearán automáticamente si la autenticación en el sistema externo en uso es exitosa.',
'reg_email_confirmation' => 'Confirmación de correo electrónico',
'reg_email_confirmation_toggle' => 'Requerir confirmación de correo electrónico',
'reg_confirm_email_desc' => 'Si se utiliza la restricción por dominio, entonces se requerirá la confirmación por correo electrónico y se ignorará el valor a continuación.',
@ -186,27 +186,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Danés',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -0,0 +1,48 @@
<?php
/**
* Activity text strings.
* Is used for all the text within activity logs & notifications.
*/
return [
// Pages
'page_create' => 'created page',
'page_create_notification' => 'Page Successfully Created',
'page_update' => 'updated page',
'page_update_notification' => 'Page Successfully Updated',
'page_delete' => 'deleted page',
'page_delete_notification' => 'Page Successfully Deleted',
'page_restore' => 'restored page',
'page_restore_notification' => 'Page Successfully Restored',
'page_move' => 'moved page',
// Chapters
'chapter_create' => 'created chapter',
'chapter_create_notification' => 'Chapter Successfully Created',
'chapter_update' => 'updated chapter',
'chapter_update_notification' => 'Chapter Successfully Updated',
'chapter_delete' => 'deleted chapter',
'chapter_delete_notification' => 'Chapter Successfully Deleted',
'chapter_move' => 'moved chapter',
// Books
'book_create' => 'created book',
'book_create_notification' => 'Book Successfully Created',
'book_update' => 'updated book',
'book_update_notification' => 'Book Successfully Updated',
'book_delete' => 'deleted book',
'book_delete_notification' => 'Book Successfully Deleted',
'book_sort' => 'sorted book',
'book_sort_notification' => 'Book Successfully Re-sorted',
// Bookshelves
'bookshelf_create' => 'created Bookshelf',
'bookshelf_create_notification' => 'Bookshelf Successfully Created',
'bookshelf_update' => 'updated bookshelf',
'bookshelf_update_notification' => 'Bookshelf Successfully Updated',
'bookshelf_delete' => 'deleted bookshelf',
'bookshelf_delete_notification' => 'Bookshelf Successfully Deleted',
// Other
'commented_on' => 'commented on',
];

View File

@ -0,0 +1,77 @@
<?php
/**
* Authentication Language Lines
* The following language lines are used during authentication for various
* messages that we need to display to the user.
*/
return [
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
// Login & Register
'sign_up' => 'Sign up',
'log_in' => 'Log in',
'log_in_with' => 'Login with :socialDriver',
'sign_up_with' => 'Sign up with :socialDriver',
'logout' => 'Logout',
'name' => 'Name',
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'password_confirm' => 'Confirm Password',
'password_hint' => 'Must be over 7 characters',
'forgot_password' => 'Forgot Password?',
'remember_me' => 'Remember Me',
'ldap_email_hint' => 'Please enter an email to use for this account.',
'create_account' => 'Create Account',
'already_have_account' => 'Already have an account?',
'dont_have_account' => 'Don\'t have an account?',
'social_login' => 'Social Login',
'social_registration' => 'Social Registration',
'social_registration_text' => 'Register and sign in using another service.',
'register_thanks' => 'Thanks for registering!',
'register_confirm' => 'Please check your email and click the confirmation button to access :appName.',
'registrations_disabled' => 'Registrations are currently disabled',
'registration_email_domain_invalid' => 'That email domain does not have access to this application',
'register_success' => 'Thanks for signing up! You are now registered and signed in.',
// Password Reset
'reset_password' => 'Reset Password',
'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
'reset_password_send_button' => 'Send Reset Link',
'reset_password_sent_success' => 'A password reset link has been sent to :email.',
'reset_password_success' => 'Your password has been successfully reset.',
'email_reset_subject' => 'Reset your :appName password',
'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
// Email Confirmation
'email_confirm_subject' => 'Confirm your email on :appName',
'email_confirm_greeting' => 'Thanks for joining :appName!',
'email_confirm_text' => 'Please confirm your email address by clicking the button below:',
'email_confirm_action' => 'Confirm Email',
'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.',
'email_confirm_success' => 'Your email has been confirmed!',
'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.',
'email_not_confirmed' => 'Email Address Not Confirmed',
'email_not_confirmed_text' => 'Your email address has not yet been confirmed.',
'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.',
'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.',
'email_not_confirmed_resend_button' => 'Resend Confirmation Email',
// User Invite
'user_invite_email_subject' => 'You have been invited to join :appName!',
'user_invite_email_greeting' => 'An account has been created for you on :appName.',
'user_invite_email_text' => 'Click the button below to set an account password and gain access:',
'user_invite_email_action' => 'Set Account Password',
'user_invite_page_welcome' => 'Welcome to :appName!',
'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.',
'user_invite_page_confirm_button' => 'Confirm Password',
'user_invite_success' => 'Password set, you now have access to :appName!'
];

View File

@ -0,0 +1,77 @@
<?php
/**
* Common elements found throughout many areas of BookStack.
*/
return [
// Buttons
'cancel' => 'Cancel',
'confirm' => 'Confirm',
'back' => 'Back',
'save' => 'Save',
'continue' => 'Continue',
'select' => 'Select',
'toggle_all' => 'Toggle All',
'more' => 'More',
// Form Labels
'name' => 'Name',
'description' => 'Description',
'role' => 'Role',
'cover_image' => 'Cover image',
'cover_image_description' => 'This image should be approx 440x250px.',
// Actions
'actions' => 'Actions',
'view' => 'View',
'view_all' => 'View All',
'create' => 'Create',
'update' => 'Update',
'edit' => 'Edit',
'sort' => 'Sort',
'move' => 'Move',
'copy' => 'Copy',
'reply' => 'Reply',
'delete' => 'Delete',
'search' => 'Search',
'search_clear' => 'Clear Search',
'reset' => 'Reset',
'remove' => 'Remove',
'add' => 'Add',
'fullscreen' => 'Fullscreen',
// Sort Options
'sort_options' => 'Sort Options',
'sort_direction_toggle' => 'Sort Direction Toggle',
'sort_ascending' => 'Sort Ascending',
'sort_descending' => 'Sort Descending',
'sort_name' => 'Name',
'sort_created_at' => 'Created Date',
'sort_updated_at' => 'Updated Date',
// Misc
'deleted_user' => 'Deleted User',
'no_activity' => 'No activity to show',
'no_items' => 'No items available',
'back_to_top' => 'Back to top',
'toggle_details' => 'Toggle Details',
'toggle_thumbnails' => 'Toggle Thumbnails',
'details' => 'Details',
'grid_view' => 'Grid View',
'list_view' => 'List View',
'default' => 'Default',
'breadcrumb' => 'Breadcrumb',
// Header
'profile_menu' => 'Profile Menu',
'view_profile' => 'View Profile',
'edit_profile' => 'Edit Profile',
// Layout tabs
'tab_info' => 'Info',
'tab_content' => 'Content',
// Email Content
'email_action_help' => 'If youre having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:',
'email_rights' => 'All rights reserved',
];

View File

@ -0,0 +1,33 @@
<?php
/**
* Text used in custom JavaScript driven components.
*/
return [
// Image Manager
'image_select' => 'Image Select',
'image_all' => 'All',
'image_all_title' => 'View all images',
'image_book_title' => 'View images uploaded to this book',
'image_page_title' => 'View images uploaded to this page',
'image_search_hint' => 'Search by image name',
'image_uploaded' => 'Uploaded :uploadedDate',
'image_load_more' => 'Load More',
'image_image_name' => 'Image Name',
'image_delete_used' => 'This image is used in the pages below.',
'image_delete_confirm' => 'Click delete again to confirm you want to delete this image.',
'image_select_image' => 'Select Image',
'image_dropzone' => 'Drop images or click here to upload',
'images_deleted' => 'Images Deleted',
'image_preview' => 'Image Preview',
'image_upload_success' => 'Image uploaded successfully',
'image_update_success' => 'Image details successfully updated',
'image_delete_success' => 'Image successfully deleted',
'image_upload_remove' => 'Remove',
// Code Editor
'code_editor' => 'Edit Code',
'code_language' => 'Code Language',
'code_content' => 'Code Content',
'code_save' => 'Save Code',
];

View File

@ -0,0 +1,314 @@
<?php
/**
* Text used for 'Entities' (Document Structure Elements) such as
* Books, Shelves, Chapters & Pages
*/
return [
// Shared
'recently_created' => 'Recently Created',
'recently_created_pages' => 'Recently Created Pages',
'recently_updated_pages' => 'Recently Updated Pages',
'recently_created_chapters' => 'Recently Created Chapters',
'recently_created_books' => 'Recently Created Books',
'recently_created_shelves' => 'Recently Created Shelves',
'recently_update' => 'Recently Updated',
'recently_viewed' => 'Recently Viewed',
'recent_activity' => 'Recent Activity',
'create_now' => 'Create one now',
'revisions' => 'Revisions',
'meta_revision' => 'Revision #:revisionCount',
'meta_created' => 'Created :timeLength',
'meta_created_name' => 'Created :timeLength by :user',
'meta_updated' => 'Updated :timeLength',
'meta_updated_name' => 'Updated :timeLength by :user',
'entity_select' => 'Entity Select',
'images' => 'Images',
'my_recent_drafts' => 'My Recent Drafts',
'my_recently_viewed' => 'My Recently Viewed',
'no_pages_viewed' => 'You have not viewed any pages',
'no_pages_recently_created' => 'No pages have been recently created',
'no_pages_recently_updated' => 'No pages have been recently updated',
'export' => 'Export',
'export_html' => 'Contained Web File',
'export_pdf' => 'PDF File',
'export_text' => 'Plain Text File',
// Permissions and restrictions
'permissions' => 'Permissions',
'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.',
'permissions_enable' => 'Enable Custom Permissions',
'permissions_save' => 'Save Permissions',
// Search
'search_results' => 'Search Results',
'search_total_results_found' => ':count result found|:count total results found',
'search_clear' => 'Clear Search',
'search_no_pages' => 'No pages matched this search',
'search_for_term' => 'Search for :term',
'search_more' => 'More Results',
'search_filters' => 'Search Filters',
'search_content_type' => 'Content Type',
'search_exact_matches' => 'Exact Matches',
'search_tags' => 'Tag Searches',
'search_options' => 'Options',
'search_viewed_by_me' => 'Viewed by me',
'search_not_viewed_by_me' => 'Not viewed by me',
'search_permissions_set' => 'Permissions set',
'search_created_by_me' => 'Created by me',
'search_updated_by_me' => 'Updated by me',
'search_date_options' => 'Date Options',
'search_updated_before' => 'Updated before',
'search_updated_after' => 'Updated after',
'search_created_before' => 'Created before',
'search_created_after' => 'Created after',
'search_set_date' => 'Set Date',
'search_update' => 'Update Search',
// Shelves
'shelf' => 'Shelf',
'shelves' => 'Shelves',
'x_shelves' => ':count Shelf|:count Shelves',
'shelves_long' => 'Bookshelves',
'shelves_empty' => 'No shelves have been created',
'shelves_create' => 'Create New Shelf',
'shelves_popular' => 'Popular Shelves',
'shelves_new' => 'New Shelves',
'shelves_new_action' => 'New Shelf',
'shelves_popular_empty' => 'The most popular shelves will appear here.',
'shelves_new_empty' => 'The most recently created shelves will appear here.',
'shelves_save' => 'Save Shelf',
'shelves_books' => 'Books on this shelf',
'shelves_add_books' => 'Add books to this shelf',
'shelves_drag_books' => 'Drag books here to add them to this shelf',
'shelves_empty_contents' => 'This shelf has no books assigned to it',
'shelves_edit_and_assign' => 'Edit shelf to assign books',
'shelves_edit_named' => 'Edit Bookshelf :name',
'shelves_edit' => 'Edit Bookshelf',
'shelves_delete' => 'Delete Bookshelf',
'shelves_delete_named' => 'Delete Bookshelf :name',
'shelves_delete_explain' => "This will delete the bookshelf with the name ':name'. Contained books will not be deleted.",
'shelves_delete_confirmation' => 'Are you sure you want to delete this bookshelf?',
'shelves_permissions' => 'Bookshelf Permissions',
'shelves_permissions_updated' => 'Bookshelf Permissions Updated',
'shelves_permissions_active' => 'Bookshelf Permissions Active',
'shelves_copy_permissions_to_books' => 'Copy Permissions to Books',
'shelves_copy_permissions' => 'Copy Permissions',
'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this bookshelf to all books contained within. Before activating, ensure any changes to the permissions of this bookshelf have been saved.',
'shelves_copy_permission_success' => 'Bookshelf permissions copied to :count books',
// Books
'book' => 'Book',
'books' => 'Books',
'x_books' => ':count Book|:count Books',
'books_empty' => 'No books have been created',
'books_popular' => 'Popular Books',
'books_recent' => 'Recent Books',
'books_new' => 'New Books',
'books_new_action' => 'New Book',
'books_popular_empty' => 'The most popular books will appear here.',
'books_new_empty' => 'The most recently created books will appear here.',
'books_create' => 'Create New Book',
'books_delete' => 'Delete Book',
'books_delete_named' => 'Delete Book :bookName',
'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.',
'books_delete_confirmation' => 'Are you sure you want to delete this book?',
'books_edit' => 'Edit Book',
'books_edit_named' => 'Edit Book :bookName',
'books_form_book_name' => 'Book Name',
'books_save' => 'Save Book',
'books_permissions' => 'Book Permissions',
'books_permissions_updated' => 'Book Permissions Updated',
'books_empty_contents' => 'No pages or chapters have been created for this book.',
'books_empty_create_page' => 'Create a new page',
'books_empty_sort_current_book' => 'Sort the current book',
'books_empty_add_chapter' => 'Add a chapter',
'books_permissions_active' => 'Book Permissions Active',
'books_search_this' => 'Search this book',
'books_navigation' => 'Book Navigation',
'books_sort' => 'Sort Book Contents',
'books_sort_named' => 'Sort Book :bookName',
'books_sort_name' => 'Sort by Name',
'books_sort_created' => 'Sort by Created Date',
'books_sort_updated' => 'Sort by Updated Date',
'books_sort_chapters_first' => 'Chapters First',
'books_sort_chapters_last' => 'Chapters Last',
'books_sort_show_other' => 'Show Other Books',
'books_sort_save' => 'Save New Order',
// Chapters
'chapter' => 'Chapter',
'chapters' => 'Chapters',
'x_chapters' => ':count Chapter|:count Chapters',
'chapters_popular' => 'Popular Chapters',
'chapters_new' => 'New Chapter',
'chapters_create' => 'Create New Chapter',
'chapters_delete' => 'Delete Chapter',
'chapters_delete_named' => 'Delete Chapter :chapterName',
'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages will be removed and added directly to the parent book.',
'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?',
'chapters_edit' => 'Edit Chapter',
'chapters_edit_named' => 'Edit Chapter :chapterName',
'chapters_save' => 'Save Chapter',
'chapters_move' => 'Move Chapter',
'chapters_move_named' => 'Move Chapter :chapterName',
'chapter_move_success' => 'Chapter moved to :bookName',
'chapters_permissions' => 'Chapter Permissions',
'chapters_empty' => 'No pages are currently in this chapter.',
'chapters_permissions_active' => 'Chapter Permissions Active',
'chapters_permissions_success' => 'Chapter Permissions Updated',
'chapters_search_this' => 'Search this chapter',
// Pages
'page' => 'Page',
'pages' => 'Pages',
'x_pages' => ':count Page|:count Pages',
'pages_popular' => 'Popular Pages',
'pages_new' => 'New Page',
'pages_attachments' => 'Attachments',
'pages_navigation' => 'Page Navigation',
'pages_delete' => 'Delete Page',
'pages_delete_named' => 'Delete Page :pageName',
'pages_delete_draft_named' => 'Delete Draft Page :pageName',
'pages_delete_draft' => 'Delete Draft Page',
'pages_delete_success' => 'Page deleted',
'pages_delete_draft_success' => 'Draft page deleted',
'pages_delete_confirm' => 'Are you sure you want to delete this page?',
'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?',
'pages_editing_named' => 'Editing Page :pageName',
'pages_edit_draft_options' => 'Draft Options',
'pages_edit_save_draft' => 'Save Draft',
'pages_edit_draft' => 'Edit Page Draft',
'pages_editing_draft' => 'Editing Draft',
'pages_editing_page' => 'Editing Page',
'pages_edit_draft_save_at' => 'Draft saved at ',
'pages_edit_delete_draft' => 'Delete Draft',
'pages_edit_discard_draft' => 'Discard Draft',
'pages_edit_set_changelog' => 'Set Changelog',
'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made',
'pages_edit_enter_changelog' => 'Enter Changelog',
'pages_save' => 'Save Page',
'pages_title' => 'Page Title',
'pages_name' => 'Page Name',
'pages_md_editor' => 'Editor',
'pages_md_preview' => 'Preview',
'pages_md_insert_image' => 'Insert Image',
'pages_md_insert_link' => 'Insert Entity Link',
'pages_md_insert_drawing' => 'Insert Drawing',
'pages_not_in_chapter' => 'Page is not in a chapter',
'pages_move' => 'Move Page',
'pages_move_success' => 'Page moved to ":parentName"',
'pages_copy' => 'Copy Page',
'pages_copy_desination' => 'Copy Destination',
'pages_copy_success' => 'Page successfully copied',
'pages_permissions' => 'Page Permissions',
'pages_permissions_success' => 'Page permissions updated',
'pages_revision' => 'Revision',
'pages_revisions' => 'Page Revisions',
'pages_revisions_named' => 'Page Revisions for :pageName',
'pages_revision_named' => 'Page Revision for :pageName',
'pages_revisions_created_by' => 'Created By',
'pages_revisions_date' => 'Revision Date',
'pages_revisions_number' => '#',
'pages_revisions_numbered' => 'Revision #:id',
'pages_revisions_numbered_changes' => 'Revision #:id Changes',
'pages_revisions_changelog' => 'Changelog',
'pages_revisions_changes' => 'Changes',
'pages_revisions_current' => 'Current Version',
'pages_revisions_preview' => 'Preview',
'pages_revisions_restore' => 'Restore',
'pages_revisions_none' => 'This page has no revisions',
'pages_copy_link' => 'Copy Link',
'pages_edit_content_link' => 'Edit Content',
'pages_permissions_active' => 'Page Permissions Active',
'pages_initial_revision' => 'Initial publish',
'pages_initial_name' => 'New Page',
'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.',
'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.',
'pages_draft_edit_active' => [
'start_a' => ':count users have started editing this page',
'start_b' => ':userName has started editing this page',
'time_a' => 'since the page was last updated',
'time_b' => 'in the last :minCount minutes',
'message' => ':start :time. Take care not to overwrite each other\'s updates!',
],
'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content',
'pages_specific' => 'Specific Page',
'pages_is_template' => 'Page Template',
// Editor Sidebar
'page_tags' => 'Page Tags',
'chapter_tags' => 'Chapter Tags',
'book_tags' => 'Book Tags',
'shelf_tags' => 'Shelf Tags',
'tag' => 'Tag',
'tags' => 'Tags',
'tag_name' => 'Tag Name',
'tag_value' => 'Tag Value (Optional)',
'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.",
'tags_add' => 'Add another tag',
'tags_remove' => 'Remove this tag',
'attachments' => 'Attachments',
'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.',
'attachments_explain_instant_save' => 'Changes here are saved instantly.',
'attachments_items' => 'Attached Items',
'attachments_upload' => 'Upload File',
'attachments_link' => 'Attach Link',
'attachments_set_link' => 'Set Link',
'attachments_delete_confirm' => 'Click delete again to confirm you want to delete this attachment.',
'attachments_dropzone' => 'Drop files or click here to attach a file',
'attachments_no_files' => 'No files have been uploaded',
'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.',
'attachments_link_name' => 'Link Name',
'attachment_link' => 'Attachment link',
'attachments_link_url' => 'Link to file',
'attachments_link_url_hint' => 'Url of site or file',
'attach' => 'Attach',
'attachments_edit_file' => 'Edit File',
'attachments_edit_file_name' => 'File Name',
'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite',
'attachments_order_updated' => 'Attachment order updated',
'attachments_updated_success' => 'Attachment details updated',
'attachments_deleted' => 'Attachment deleted',
'attachments_file_uploaded' => 'File successfully uploaded',
'attachments_file_updated' => 'File successfully updated',
'attachments_link_attached' => 'Link successfully attached to page',
'templates' => 'Templates',
'templates_set_as_template' => 'Page is a template',
'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.',
'templates_replace_content' => 'Replace page content',
'templates_append_content' => 'Append to page content',
'templates_prepend_content' => 'Prepend to page content',
// Profile View
'profile_user_for_x' => 'User for :time',
'profile_created_content' => 'Created Content',
'profile_not_created_pages' => ':userName has not created any pages',
'profile_not_created_chapters' => ':userName has not created any chapters',
'profile_not_created_books' => ':userName has not created any books',
'profile_not_created_shelves' => ':userName has not created any shelves',
// Comments
'comment' => 'Comment',
'comments' => 'Comments',
'comment_add' => 'Add Comment',
'comment_placeholder' => 'Leave a comment here',
'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments',
'comment_save' => 'Save Comment',
'comment_saving' => 'Saving comment...',
'comment_deleting' => 'Deleting comment...',
'comment_new' => 'New Comment',
'comment_created' => 'commented :createDiff',
'comment_updated' => 'Updated :updateDiff by :username',
'comment_deleted_success' => 'Comment deleted',
'comment_created_success' => 'Comment added',
'comment_updated_success' => 'Comment updated',
'comment_delete_confirm' => 'Are you sure you want to delete this comment?',
'comment_in_reply_to' => 'In reply to :commentId',
// Revision
'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
'revision_delete_success' => 'Revision deleted',
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
];

View File

@ -0,0 +1,103 @@
<?php
/**
* Text shown in error messaging.
*/
return [
// Permissions
'permission' => 'You do not have permission to access the requested page.',
'permissionJson' => 'You do not have permission to perform the requested action.',
// Auth
'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.',
'email_already_confirmed' => 'Email has already been confirmed, Try logging in.',
'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.',
'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.',
'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed',
'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind',
'ldap_fail_authed' => 'LDAP access failed using given dn & password details',
'ldap_extension_not_installed' => 'LDAP PHP extension not installed',
'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed',
'saml_already_logged_in' => 'Already logged in',
'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled',
'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system',
'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.',
'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization',
'social_no_action_defined' => 'No action defined',
'social_login_bad_response' => "Error received during :socialAccount login: \n:error",
'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.',
'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.',
'social_account_existing' => 'This :socialAccount is already attached to your profile.',
'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.',
'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ',
'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.',
'social_driver_not_found' => 'Social driver not found',
'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.',
'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.',
// System
'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.',
'cannot_get_image_from_url' => 'Cannot get image from :url',
'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
'image_upload_error' => 'An error occurred uploading the image',
'image_upload_type_error' => 'The image type being uploaded is invalid',
'file_upload_timeout' => 'The file upload has timed out.',
// Attachments
'attachment_page_mismatch' => 'Page mismatch during attachment update',
'attachment_not_found' => 'Attachment not found',
// Pages
'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page',
'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage',
// Entities
'entity_not_found' => 'Entity not found',
'bookshelf_not_found' => 'Bookshelf not found',
'book_not_found' => 'Book not found',
'page_not_found' => 'Page not found',
'chapter_not_found' => 'Chapter not found',
'selected_book_not_found' => 'The selected book was not found',
'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found',
'guests_cannot_save_drafts' => 'Guests cannot save drafts',
// Users
'users_cannot_delete_only_admin' => 'You cannot delete the only admin',
'users_cannot_delete_guest' => 'You cannot delete the guest user',
// Roles
'role_cannot_be_edited' => 'This role cannot be edited',
'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted',
'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role',
'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.',
// Comments
'comment_list' => 'An error occurred while fetching the comments.',
'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.',
'comment_add' => 'An error occurred while adding / updating the comment.',
'comment_delete' => 'An error occurred while deleting the comment.',
'empty_comment' => 'Cannot add an empty comment.',
// Error pages
'404_page_not_found' => 'Page Not Found',
'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.',
'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.',
'return_home' => 'Return to home',
'error_occurred' => 'An Error Occurred',
'app_down' => ':appName is down right now',
'back_soon' => 'It will be back up soon.',
// API errors
'api_no_authorization_found' => 'No authorization token found on the request',
'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect',
'api_user_token_not_found' => 'No matching API token was found for the provided authorization token',
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',
];

View File

@ -0,0 +1,12 @@
<?php
/**
* Pagination Language Lines
* The following language lines are used by the paginator library to build
* the simple pagination links.
*/
return [
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@ -0,0 +1,15 @@
<?php
/**
* Password Reminder Language Lines
* The following language lines are the default lines which match reasons
* that are given by the password broker for a password update attempt has failed.
*/
return [
'password' => 'Passwords must be at least eight characters and match the confirmation.',
'user' => "We can't find a user with that e-mail address.",
'token' => 'This password reset token is invalid.',
'sent' => 'We have e-mailed your password reset link!',
'reset' => 'Your password has been reset!',
];

View File

@ -0,0 +1,213 @@
<?php
/**
* Settings text strings
* Contains all text strings used in the general settings sections of BookStack
* including users and roles.
*/
return [
// Common Messages
'settings' => 'Settings',
'settings_save' => 'Save Settings',
'settings_save_success' => 'Settings saved',
// App Settings
'app_customization' => 'Customization',
'app_features_security' => 'Features & Security',
'app_name' => 'Application Name',
'app_name_desc' => 'This name is shown in the header and in any system-sent emails.',
'app_name_header' => 'Show name in header',
'app_public_access' => 'Public Access',
'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.',
'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.',
'app_public_access_toggle' => 'Allow public access',
'app_public_viewing' => 'Allow public viewing?',
'app_secure_images' => 'Higher Security Image Uploads',
'app_secure_images_toggle' => 'Enable higher security image uploads',
'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.',
'app_editor' => 'Page Editor',
'app_editor_desc' => 'Select which editor will be used by all users to edit pages.',
'app_custom_html' => 'Custom HTML Head Content',
'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the <head> section of every page. This is handy for overriding styles or adding analytics code.',
'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.',
'app_logo' => 'Application Logo',
'app_logo_desc' => 'This image should be 43px in height. <br>Large images will be scaled down.',
'app_primary_color' => 'Application Primary Color',
'app_primary_color_desc' => 'Sets the primary color for the application including the banner, buttons, and links.',
'app_homepage' => 'Application Homepage',
'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.',
'app_homepage_select' => 'Select a page',
'app_disable_comments' => 'Disable Comments',
'app_disable_comments_toggle' => 'Disable comments',
'app_disable_comments_desc' => 'Disables comments across all pages in the application. <br> Existing comments are not shown.',
// Color settings
'content_colors' => 'Content Colors',
'content_colors_desc' => 'Sets colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.',
'bookshelf_color' => 'Shelf Color',
'book_color' => 'Book Color',
'chapter_color' => 'Chapter Color',
'page_color' => 'Page Color',
'page_draft_color' => 'Page Draft Color',
// Registration Settings
'reg_settings' => 'Registration',
'reg_enable' => 'Enable Registration',
'reg_enable_toggle' => 'Enable registration',
'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.',
'reg_default_role' => 'Default user role after registration',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_email_confirmation' => 'Email Confirmation',
'reg_email_confirmation_toggle' => 'Require email confirmation',
'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.',
'reg_confirm_restrict_domain' => 'Domain Restriction',
'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application. <br> Note that users will be able to change their email addresses after successful registration.',
'reg_confirm_restrict_domain_placeholder' => 'No restriction set',
// Maintenance settings
'maint' => 'Maintenance',
'maint_image_cleanup' => 'Cleanup Images',
'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
'maint_image_cleanup_ignore_revisions' => 'Ignore images in revisions',
'maint_image_cleanup_run' => 'Run Cleanup',
'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
'maint_image_cleanup_success' => ':count potentially unused images found and deleted!',
'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!',
'maint_send_test_email' => 'Send a Test Email',
'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.',
'maint_send_test_email_run' => 'Send test email',
'maint_send_test_email_success' => 'Email sent to :address',
'maint_send_test_email_mail_subject' => 'Test Email',
'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!',
'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.',
// Role Settings
'roles' => 'Roles',
'role_user_roles' => 'User Roles',
'role_create' => 'Create New Role',
'role_create_success' => 'Role successfully created',
'role_delete' => 'Delete Role',
'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.',
'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.',
'role_delete_no_migration' => "Don't migrate users",
'role_delete_sure' => 'Are you sure you want to delete this role?',
'role_delete_success' => 'Role successfully deleted',
'role_edit' => 'Edit Role',
'role_details' => 'Role Details',
'role_name' => 'Role Name',
'role_desc' => 'Short Description of Role',
'role_external_auth_id' => 'External Authentication IDs',
'role_system' => 'System Permissions',
'role_manage_users' => 'Manage users',
'role_manage_roles' => 'Manage roles & role permissions',
'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions',
'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages',
'role_manage_page_templates' => 'Manage page templates',
'role_access_api' => 'Access system API',
'role_manage_settings' => 'Manage app settings',
'role_asset' => 'Asset Permissions',
'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.',
'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.',
'role_all' => 'All',
'role_own' => 'Own',
'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to',
'role_save' => 'Save Role',
'role_update_success' => 'Role successfully updated',
'role_users' => 'Users in this role',
'role_users_none' => 'No users are currently assigned to this role',
// Users
'users' => 'Users',
'user_profile' => 'User Profile',
'users_add_new' => 'Add New User',
'users_search' => 'Search Users',
'users_details' => 'User Details',
'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.',
'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.',
'users_role' => 'User Roles',
'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.',
'users_password' => 'User Password',
'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 6 characters long.',
'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.',
'users_send_invite_option' => 'Send user invite email',
'users_external_auth_id' => 'External Authentication ID',
'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.',
'users_password_warning' => 'Only fill the below if you would like to change your password.',
'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.',
'users_delete' => 'Delete User',
'users_delete_named' => 'Delete user :userName',
'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.',
'users_delete_confirm' => 'Are you sure you want to delete this user?',
'users_delete_success' => 'Users successfully removed',
'users_edit' => 'Edit User',
'users_edit_profile' => 'Edit Profile',
'users_edit_success' => 'User successfully updated',
'users_avatar' => 'User Avatar',
'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.',
'users_preferred_language' => 'Preferred Language',
'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.',
'users_social_accounts' => 'Social Accounts',
'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.',
'users_social_connect' => 'Connect Account',
'users_social_disconnect' => 'Disconnect Account',
'users_social_connected' => ':socialAccount account was successfully attached to your profile.',
'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.',
'users_api_tokens' => 'API Tokens',
'users_api_tokens_none' => 'No API tokens have been created for this user',
'users_api_tokens_create' => 'Create Token',
'users_api_tokens_expires' => 'Expires',
'users_api_tokens_docs' => 'API Documentation',
// API Tokens
'user_api_token_create' => 'Create API Token',
'user_api_token_name' => 'Name',
'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.',
'user_api_token_expiry' => 'Expiry Date',
'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.',
'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID"" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.',
'user_api_token_create_success' => 'API token successfully created',
'user_api_token_update_success' => 'API token successfully updated',
'user_api_token' => 'API Token',
'user_api_token_id' => 'Token ID',
'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.',
'user_api_token_secret' => 'Token Secret',
'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.',
'user_api_token_created' => 'Token Created :timeAgo',
'user_api_token_updated' => 'Token Updated :timeAgo',
'user_api_token_delete' => 'Delete Token',
'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.',
'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?',
'user_api_token_delete_success' => 'API token successfully deleted',
//! If editing translations files directly please ignore this in all
//! languages apart from en. Content will be auto-copied from en.
//!////////////////////////////////
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Dansk',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
]
//!////////////////////////////////
];

View File

@ -0,0 +1,114 @@
<?php
/**
* Validation Lines
* The following language lines contain the default error messages used by
* the validator class. Some of these rules have multiple versions such
* as the size rules. Feel free to tweak each of these messages here.
*/
return [
// Standard laravel validation lines
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'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',
'filled' => 'The :attribute field is required.',
'gt' => [
'numeric' => 'The :attribute must be greater than :value.',
'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'The :attribute must be greater than :value characters.',
'array' => 'The :attribute must have more than :value items.',
],
'gte' => [
'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'The :attribute must have :value items or more.',
],
'exists' => 'The selected :attribute is invalid.',
'image' => 'The :attribute must be an image.',
'image_extension' => 'The :attribute must have a valid & supported image extension.',
'in' => 'The selected :attribute is invalid.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'lt' => [
'numeric' => 'The :attribute must be less than :value.',
'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'The :attribute must be less than :value characters.',
'array' => 'The :attribute must have less than :value items.',
],
'lte' => [
'numeric' => 'The :attribute must be less than or equal :value.',
'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'The :attribute must not have more than :value items.',
],
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'no_double_extension' => 'The :attribute must only have a single file extension.',
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'The :attribute must be a number.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
'uploaded' => 'The file could not be uploaded. The server may not accept files of this size.',
// Custom validation lines
'custom' => [
'password-confirm' => [
'required_with' => 'Password confirmation required',
],
],
// Custom validation attributes
'attributes' => [],
];

View File

@ -38,7 +38,7 @@ return [
'reset' => 'Réinitialiser',
'remove' => 'Enlever',
'add' => 'Ajouter',
'fullscreen' => 'Fullscreen',
'fullscreen' => 'Plein écran',
// Sort Options
'sort_options' => 'Options de tri',

View File

@ -83,6 +83,7 @@ return [
// Error pages
'404_page_not_found' => 'Page non trouvée',
'sorry_page_not_found' => 'Désolé, cette page n\'a pas pu être trouvée.',
'sorry_page_not_found_permission_warning' => 'Si vous vous attendiez à ce que cette page existe, il se peut que vous n\'ayez pas l\'autorisation de la consulter.',
'return_home' => 'Retour à l\'accueil',
'error_occurred' => 'Une erreur est survenue',
'app_down' => ':appName n\'est pas en service pour le moment',
@ -92,8 +93,11 @@ return [
'api_no_authorization_found' => 'Aucun jeton d\'autorisation trouvé pour la demande',
'api_bad_authorization_format' => 'Un jeton d\'autorisation a été trouvé pour la requête, mais le format semble incorrect',
'api_user_token_not_found' => 'Aucun jeton API correspondant n\'a été trouvé pour le jeton d\'autorisation fourni',
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_incorrect_token_secret' => 'Le secret fourni pour le jeton d\'API utilisé est incorrect',
'api_user_no_api_permission' => 'Le propriétaire du jeton API utilisé n\'a pas la permission de passer des appels API',
'api_user_token_expired' => 'Le jeton d\'autorisation utilisé a expiré',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Erreur émise lors de l\'envoi d\'un e-mail de test :',
];

View File

@ -29,7 +29,7 @@ return [
'app_editor_desc' => 'Sélectionnez l\'éditeur qui sera utilisé pour modifier les pages.',
'app_custom_html' => 'HTML personnalisé dans l\'en-tête',
'app_custom_html_desc' => 'Le contenu inséré ici sera ajouté en bas de la balise <head> de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.',
'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.',
'app_custom_html_disabled_notice' => 'Le contenu de la tête HTML personnalisée est désactivé sur cette page de paramètres pour garantir que les modifications les plus récentes peuvent être annulées.',
'app_logo' => 'Logo de l\'Application',
'app_logo_desc' => 'Cette image doit faire 43px de hauteur. <br>Les images plus larges seront réduites.',
'app_primary_color' => 'Couleur principale de l\'application',
@ -56,7 +56,7 @@ return [
'reg_enable_toggle' => 'Activer l\'inscription',
'reg_enable_desc' => 'Lorsque l\'inscription est activée, l\'utilisateur pourra s\'enregistrer en tant qu\'utilisateur de l\'application. Lors de l\'inscription, ils se voient attribuer un rôle par défaut.',
'reg_default_role' => 'Rôle par défaut lors de l\'inscription',
'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.',
'reg_enable_external_warning' => 'L\'option ci-dessus est ignorée lorsque l\'authentification externe LDAP ou SAML est activée. Les comptes utilisateur pour les membres non existants seront créés automatiquement si l\'authentification, par rapport au système externe utilisé, est réussie.',
'reg_email_confirmation' => 'Confirmation de l\'e-mail',
'reg_email_confirmation_toggle' => 'Obliger la confirmation par e-mail ?',
'reg_confirm_email_desc' => 'Si la restriction de domaine est activée, la confirmation sera automatiquement obligatoire et cette valeur sera ignorée.',
@ -131,7 +131,7 @@ return [
'users_send_invite_text' => 'Vous pouvez choisir d\'envoyer à cet utilisateur un email d\'invitation qui lui permet de définir son propre mot de passe, sinon vous pouvez définir son mot de passe vous-même.',
'users_send_invite_option' => 'Envoyer l\'e-mail d\'invitation',
'users_external_auth_id' => 'Identifiant d\'authentification externe',
'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.',
'users_external_auth_id_desc' => 'C\'est l\'ID utilisé pour correspondre à cet utilisateur lors de la communication avec votre système d\'authentification externe.',
'users_password_warning' => 'Remplissez ce formulaire uniquement si vous souhaitez changer de mot de passe:',
'users_system_public' => 'Cet utilisateur représente les invités visitant votre instance. Il est assigné automatiquement aux invités.',
'users_delete' => 'Supprimer un utilisateur',
@ -161,21 +161,21 @@ return [
// API Tokens
'user_api_token_create' => 'Créer un nouveau jeton API',
'user_api_token_name' => 'Nom',
'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.',
'user_api_token_name_desc' => 'Donnez à votre jeton un nom lisible pour l\'identifier plus tard.',
'user_api_token_expiry' => 'Date d\'expiration',
'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.',
'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID"" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.',
'user_api_token_expiry_desc' => 'Définissez une date à laquelle ce jeton expire. Après cette date, les demandes effectuées à l\'aide de ce jeton ne fonctionneront plus. Le fait de laisser ce champ vide entraînera une expiration dans 100 ans.',
'user_api_token_create_secret_message' => 'Immédiatement après la création de ce jeton, un "ID de jeton" "et" Secret de jeton "sera généré et affiché. Le secret ne sera affiché qu\'une seule fois, alors assurez-vous de copier la valeur dans un endroit sûr et sécurisé avant de continuer.',
'user_api_token_create_success' => 'L\'API token a été créé avec succès',
'user_api_token_update_success' => 'L\'API token a été mis à jour avec succès',
'user_api_token' => 'Token API',
'user_api_token_id' => 'Token ID',
'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.',
'user_api_token_id_desc' => 'Il s\'agit d\'un identifiant généré par le système non modifiable pour ce jeton qui devra être fourni dans les demandes d\'API.',
'user_api_token_secret' => 'Token Secret',
'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.',
'user_api_token_secret_desc' => 'Il s\'agit d\'un secret généré par le système pour ce jeton, qui devra être fourni dans les demandes d\'API. Cela ne sera affiché qu\'une seule fois, alors copiez cette valeur dans un endroit sûr et sécurisé.',
'user_api_token_created' => 'Jeton créé :timeAgo',
'user_api_token_updated' => 'Jeton mis à jour :timeAgo',
'user_api_token_delete' => 'Supprimer le Token',
'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.',
'user_api_token_delete_warning' => 'Cela supprimera complètement le jeton d\'API avec le nom \':tokenName\'.',
'user_api_token_delete_confirm' => 'Souhaitez-vous vraiment effacer l\'API Token ?',
'user_api_token_delete_success' => 'L\'API token a été supprimé avec succès',
@ -185,27 +185,29 @@ return [
'language_select' => [
'en' => 'English',
'ar' => 'العربية',
'cs' => 'Česky',
'da' => 'Danois',
'de' => 'Deutsch (Sie)',
'de_informal' => 'Deutsch (Du)',
'es' => 'Español',
'es_AR' => 'Español Argentina',
'fr' => 'Français',
'nl' => 'Nederlands',
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'cs' => 'Česky',
'sv' => 'Svenska',
'ko' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'hu' => 'Magyar',
'it' => 'Italian',
'ja' => '日本語',
'ko' => '한국어',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt_BR' => 'Português do Brasil',
'ru' => 'Русский',
'sk' => 'Slovensky',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh_CN' => '简体中文',
'zh_TW' => '繁體中文',
'hu' => 'Magyar',
'tr' => 'Türkçe',
]
//!////////////////////////////////
];

View File

@ -0,0 +1,48 @@
<?php
/**
* Activity text strings.
* Is used for all the text within activity logs & notifications.
*/
return [
// Pages
'page_create' => 'created page',
'page_create_notification' => 'הדף נוצר בהצלחה',
'page_update' => 'updated page',
'page_update_notification' => 'הדף עודכן בהצלחה',
'page_delete' => 'deleted page',
'page_delete_notification' => 'הדף הוסר בהצלחה',
'page_restore' => 'restored page',
'page_restore_notification' => 'הדף שוחזר בהצלחה',
'page_move' => 'moved page',
// Chapters
'chapter_create' => 'created chapter',
'chapter_create_notification' => 'הפרק נוצר בהצלחה',
'chapter_update' => 'updated chapter',
'chapter_update_notification' => 'הפרק עודכן בהצלחה',
'chapter_delete' => 'deleted chapter',
'chapter_delete_notification' => 'הפרק הוסר בהצלחה',
'chapter_move' => 'moved chapter',
// Books
'book_create' => 'created book',
'book_create_notification' => 'הספר נוצר בהצלחה',
'book_update' => 'updated book',
'book_update_notification' => 'הספר עודכן בהצלחה',
'book_delete' => 'deleted book',
'book_delete_notification' => 'הספר הוסר בהצלחה',
'book_sort' => 'sorted book',
'book_sort_notification' => 'הספר מוין מחדש בהצלחה',
// Bookshelves
'bookshelf_create' => 'created Bookshelf',
'bookshelf_create_notification' => 'מדף הספרים נוצר בהצלחה',
'bookshelf_update' => 'updated bookshelf',
'bookshelf_update_notification' => 'מדף הספרים עודכן בהצלחה',
'bookshelf_delete' => 'deleted bookshelf',
'bookshelf_delete_notification' => 'מדף הספרים הוסר בהצלחה',
// Other
'commented_on' => 'commented on',
];

Some files were not shown because too many files have changed in this diff Show More