This commit is contained in:
Mark Gregory
2026-06-10 13:34:24 +01:00
parent c9231b5062
commit 1489f9e747
4899 changed files with 270314 additions and 0 deletions
+198
View File
@@ -0,0 +1,198 @@
<laravel-boost-guidelines>
=== foundation rules ===
# Laravel Boost Guidelines
The Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications.
## Foundational Context
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
- php - 8.3
- filament/filament (FILAMENT) - v5
- laravel/breeze (BREEZE) - v2
- laravel/fortify (FORTIFY) - v1
- laravel/framework (LARAVEL) - v13
- laravel/horizon (HORIZON) - v5
- laravel/octane (OCTANE) - v2
- laravel/prompts (PROMPTS) - v0
- livewire/flux (FLUXUI_FREE) - v2
- livewire/livewire (LIVEWIRE) - v4
- laravel/boost (BOOST) - v2
- laravel/mcp (MCP) - v0
- laravel/pail (PAIL) - v1
- laravel/pint (PINT) - v1
- laravel/sail (SAIL) - v1
- phpunit/phpunit (PHPUNIT) - v12
- tailwindcss (TAILWINDCSS) - v4
## Skills Activation
This project has domain-specific skills available in `**/skills/**`. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck.
## Conventions
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.
- Check for existing components to reuse before writing a new one.
## Verification Scripts
- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important.
## Application Structure & Architecture
- Stick to existing directory structure; don't create new base folders without approval.
- Do not change the application's dependencies without approval.
## Frontend Bundling
- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run `npm run build`, `npm run dev`, or `composer run dev`. Ask them.
## Documentation Files
- You must only create documentation files if explicitly requested by the user.
## Replies
- Be concise in your explanations - focus on what's important rather than explaining obvious details.
=== boost rules ===
# Laravel Boost
## Tools
- Laravel Boost is an MCP server with tools designed specifically for this application. Prefer Boost tools over manual alternatives like shell commands or file reads.
- Use `database-query` to run read-only queries against the database instead of writing raw SQL in tinker.
- Use `database-schema` to inspect table structure before writing migrations or models.
- Use `get-absolute-url` to resolve the correct scheme, domain, and port for project URLs. Always use this before sharing a URL with the user.
- Use `browser-logs` to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries.
## Searching Documentation (IMPORTANT)
- Always use `search-docs` before making code changes. Do not skip this step. It returns version-specific docs based on installed packages automatically.
- Pass a `packages` array to scope results when you know which packages are relevant.
- Use multiple broad, topic-based queries: `['rate limiting', 'routing rate limiting', 'routing']`. Expect the most relevant results first.
- Do not add package names to queries because package info is already shared. Use `test resource table`, not `filament 4 test resource table`.
### Search Syntax
1. Use words for auto-stemmed AND logic: `rate limit` matches both "rate" AND "limit".
2. Use `"quoted phrases"` for exact position matching: `"infinite scroll"` requires adjacent words in order.
3. Combine words and phrases for mixed queries: `middleware "rate limit"`.
4. Use multiple queries for OR logic: `queries=["authentication", "middleware"]`.
## Artisan
- Run Artisan commands directly via the command line (e.g., `php artisan route:list`). Use `php artisan list` to discover available commands and `php artisan [command] --help` to check parameters.
- Inspect routes with `php artisan route:list`. Filter with: `--method=GET`, `--name=users`, `--path=api`, `--except-vendor`, `--only-vendor`.
- Read configuration values using dot notation: `php artisan config:show app.name`, `php artisan config:show database.default`. Or read config files directly from the `config/` directory.
## Tinker
- Execute PHP in app context for debugging and testing code. Do not create models without user approval, prefer tests with factories instead. Prefer existing Artisan commands over custom tinker code.
- Always use single quotes to prevent shell expansion: `php artisan tinker --execute 'Your::code();'`
- Double quotes for PHP strings inside: `php artisan tinker --execute 'User::where("active", true)->count();'`
=== php rules ===
# PHP
- Always use curly braces for control structures, even for single-line bodies.
- Use PHP 8 constructor property promotion: `public function __construct(public GitHub $github) { }`. Do not leave empty zero-parameter `__construct()` methods unless the constructor is private.
- Use explicit return type declarations and type hints for all method parameters: `function isAccessible(User $user, ?string $path = null): bool`
- Use TitleCase for Enum keys: `FavoritePerson`, `BestLake`, `Monthly`.
- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic.
- Use array shape type definitions in PHPDoc blocks.
=== deployments rules ===
# Deployment
- Laravel can be deployed using [Laravel Cloud](https://cloud.laravel.com/), which is the fastest way to deploy and scale production Laravel applications.
=== tests rules ===
# Test Enforcement
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
- Run the minimum number of tests needed to ensure code quality and speed. Use `php artisan test --compact` with a specific filename or filter.
=== laravel/core rules ===
# Do Things the Laravel Way
- Use `php artisan make:` commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using `php artisan list` and check their parameters with `php artisan [command] --help`.
- If you're creating a generic PHP class, use `php artisan make:class`.
- Pass `--no-interaction` to all Artisan commands to ensure they work without user input. You should also pass the correct `--options` to ensure correct behavior.
### Model Creation
- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using `php artisan make:model --help` to check the available options.
## APIs & Eloquent Resources
- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.
## URL Generation
- When generating links to other pages, prefer named routes and the `route()` function.
## Testing
- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.
- Faker: Use methods such as `$this->faker->word()` or `fake()->randomDigit()`. Follow existing conventions whether to use `$this->faker` or `fake()`.
- When creating tests, make use of `php artisan make:test [options] {name}` to create a feature test, and pass `--unit` to create a unit test. Most tests should be feature tests.
## Vite Error
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `npm run build` or ask the user to run `npm run dev` or `composer run dev`.
=== octane/core rules ===
# Laravel Octane
This application uses Laravel Octane, a long-running PHP server. The application bootstraps once and handles many requests within the same process.
- Never store request-specific state in singletons or static properties, because it can leak across requests.
- Use `config('octane.server')` to detect the active driver (`swoole`, `roadrunner`, or `frankenphp`).
- Prefer scoped bindings (`$this->app->scoped()`) over singletons for per-request services.
When working on Octane-specific features (concurrency, shared tables, memory, driver configuration, testing), invoke `octane-development` for detailed rules.
=== livewire/core rules ===
# Livewire
- Livewire allow to build dynamic, reactive interfaces in PHP without writing JavaScript.
- You can use Alpine.js for client-side interactions instead of JavaScript frameworks.
- Keep state server-side so the UI reflects it. Validate and authorize in actions as you would in HTTP requests.
=== pint/core rules ===
# Laravel Pint Code Formatter
- If you have modified any PHP files, you must run `vendor/bin/pint --dirty --format agent` before finalizing changes to ensure your code matches the project's expected style.
- Do not run `vendor/bin/pint --test --format agent`, simply run `vendor/bin/pint --format agent` to fix any formatting issues.
=== phpunit/core rules ===
# PHPUnit
- This application uses PHPUnit for testing. All tests must be written as PHPUnit classes. Use `php artisan make:test --phpunit {name}` to create a new test.
- If you see a test using "Pest", convert it to PHPUnit.
- Every time a test has been updated, run that singular test.
- When the tests relating to your feature are passing, ask the user if they would like to also run the entire test suite to make sure everything is still passing.
- Tests should cover all happy paths, failure paths, and edge cases.
- You must not remove any tests or test files from the tests directory without approval. These are not temporary or helper files; these are core to the application.
## Running Tests
- Run the minimal number of tests, using an appropriate filter, before finalizing.
- To run all tests: `php artisan test --compact`.
- To run all tests in a file: `php artisan test --compact tests/Feature/ExampleTest.php`.
- To filter on a particular test name: `php artisan test --compact --filter=testName` (recommended after making a change to a related file).
</laravel-boost-guidelines>
@@ -0,0 +1,19 @@
<?php
namespace App\Actions\Fortify;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Validation\Rules\Password;
trait PasswordValidationRules
{
/**
* Get the validation rules used to validate passwords.
*
* @return array<int, Rule|array<mixed>|string>
*/
protected function passwordRules(): array
{
return ['required', 'string', Password::default(), 'confirmed'];
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Actions\Fortify;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Laravel\Fortify\Contracts\UpdatesUserPasswords;
class UpdateUserPassword implements UpdatesUserPasswords
{
use PasswordValidationRules;
/**
* Validate and update the user's password.
*
* @param array<string, string> $input
*
* @throws ValidationException
*/
public function update(User $user, array $input): void
{
Validator::make($input, [
'current_password' => ['required', 'string', 'current_password:web'],
'password' => $this->passwordRules(),
], [
'current_password.current_password' => __('The provided password does not match your current password.'),
])->validateWithBag('updatePassword');
$user->forceFill([
'password' => Hash::make($input['password']),
])->save();
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Actions\Fortify;
use App\Models\User;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
{
/**
* Validate and update the given user's profile information.
*
* @param array<string, string> $input
*
* @throws ValidationException
*/
public function update(User $user, array $input): void
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
'email',
'max:255',
Rule::unique('users')->ignore($user->id),
],
])->validateWithBag('updateProfileInformation');
if ($input['email'] !== $user->email &&
$user instanceof MustVerifyEmail) {
$this->updateVerifiedUser($user, $input);
} else {
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
])->save();
}
}
/**
* Update the given verified user's profile information.
*
* @param array<string, string> $input
*/
protected function updateVerifiedUser(User $user, array $input): void
{
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'email_verified_at' => null,
])->save();
$user->sendEmailVerificationNotification();
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Laravel\Horizon\Horizon;
use Laravel\Horizon\HorizonApplicationServiceProvider;
class HorizonServiceProvider extends HorizonApplicationServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
parent::boot();
// Horizon::routeSmsNotificationsTo('15556667777');
// Horizon::routeMailNotificationsTo('example@example.com');
// Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
}
/**
* Register the Horizon gate.
*
* This gate determines who can access Horizon in non-local environments.
*/
protected function gate(): void
{
Gate::define('viewHorizon', function ($user = null) {
return in_array(optional($user)->email, [
//
]);
});
}
}
+148
View File
@@ -0,0 +1,148 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use Stancl\JobPipeline\JobPipeline;
use Stancl\Tenancy\Events;
use Stancl\Tenancy\Jobs;
use Stancl\Tenancy\Listeners;
use Stancl\Tenancy\Middleware;
class TenancyServiceProvider extends ServiceProvider
{
// By default, no namespace is used to support the callable array syntax.
public static string $controllerNamespace = '';
public function events()
{
return [
// Tenant events
Events\CreatingTenant::class => [],
Events\TenantCreated::class => [
JobPipeline::make([
Jobs\CreateDatabase::class,
Jobs\MigrateDatabase::class,
// Jobs\SeedDatabase::class,
// Your own jobs to prepare the tenant.
// Provision API keys, create S3 buckets, anything you want!
])->send(function (Events\TenantCreated $event) {
return $event->tenant;
})->shouldBeQueued(false), // `false` by default, but you probably want to make this `true` for production.
],
Events\SavingTenant::class => [],
Events\TenantSaved::class => [],
Events\UpdatingTenant::class => [],
Events\TenantUpdated::class => [],
Events\DeletingTenant::class => [],
Events\TenantDeleted::class => [
JobPipeline::make([
Jobs\DeleteDatabase::class,
])->send(function (Events\TenantDeleted $event) {
return $event->tenant;
})->shouldBeQueued(false), // `false` by default, but you probably want to make this `true` for production.
],
// Domain events
Events\CreatingDomain::class => [],
Events\DomainCreated::class => [],
Events\SavingDomain::class => [],
Events\DomainSaved::class => [],
Events\UpdatingDomain::class => [],
Events\DomainUpdated::class => [],
Events\DeletingDomain::class => [],
Events\DomainDeleted::class => [],
// Database events
Events\DatabaseCreated::class => [],
Events\DatabaseMigrated::class => [],
Events\DatabaseSeeded::class => [],
Events\DatabaseRolledBack::class => [],
Events\DatabaseDeleted::class => [],
// Tenancy events
Events\InitializingTenancy::class => [],
Events\TenancyInitialized::class => [
Listeners\BootstrapTenancy::class,
],
Events\EndingTenancy::class => [],
Events\TenancyEnded::class => [
Listeners\RevertToCentralContext::class,
],
Events\BootstrappingTenancy::class => [],
Events\TenancyBootstrapped::class => [],
Events\RevertingToCentralContext::class => [],
Events\RevertedToCentralContext::class => [],
// Resource syncing
Events\SyncedResourceSaved::class => [
Listeners\UpdateSyncedResource::class,
],
// Fired only when a synced resource is changed in a different DB than the origin DB (to avoid infinite loops)
Events\SyncedResourceChangedInForeignDatabase::class => [],
];
}
public function register()
{
//
}
public function boot()
{
$this->bootEvents();
$this->mapRoutes();
$this->makeTenancyMiddlewareHighestPriority();
}
protected function bootEvents()
{
foreach ($this->events() as $event => $listeners) {
foreach ($listeners as $listener) {
if ($listener instanceof JobPipeline) {
$listener = $listener->toListener();
}
Event::listen($event, $listener);
}
}
}
protected function mapRoutes()
{
$this->app->booted(function () {
if (file_exists(base_path('routes/tenant.php'))) {
Route::namespace(static::$controllerNamespace)
->group(base_path('routes/tenant.php'));
}
});
}
protected function makeTenancyMiddlewareHighestPriority()
{
$tenancyMiddleware = [
// Even higher priority than the initialization middleware
Middleware\PreventAccessFromCentralDomains::class,
Middleware\InitializeTenancyByDomain::class,
Middleware\InitializeTenancyBySubdomain::class,
Middleware\InitializeTenancyByDomainOrSubdomain::class,
Middleware\InitializeTenancyByPath::class,
Middleware\InitializeTenancyByRequestData::class,
];
foreach (array_reverse($tenancyMiddleware) as $middleware) {
$this->app[\Illuminate\Contracts\Http\Kernel::class]->prependToMiddlewarePriority($middleware);
}
}
}
+11
View File
@@ -10,8 +10,12 @@
"license": "MIT",
"require": {
"php": "^8.3",
"ayeo/gs1_barcode": "^1.0",
"barryvdh/laravel-dompdf": "^3.1",
"filament/filament": "^5.6",
"filament/tables": "^5.6",
"guzzlehttp/guzzle": "^7.11",
"laravel-lang/common": "^6.8",
"laravel/breeze": "^2.4",
"laravel/chisel": "^0.1.0",
"laravel/fortify": "^1.37.2",
@@ -23,9 +27,16 @@
"livewire/blaze": "^1.0",
"livewire/flux": "^2.14",
"livewire/livewire": "^4.1",
"mikehaertl/php-pdftk": "*",
"mpba/laravel-modules": "dev-main",
"phpoffice/phpspreadsheet": "*",
"picqer/php-barcode-generator": "*",
"predis/predis": "^3.5",
"ramsey/uuid": "^4.9",
"robgridley/zebra": "*",
"setasign/fpdf": "*",
"setasign/fpdi": "*",
"smalot/pdfparser": "*",
"spatie/laravel-medialibrary": "^11.23",
"spatie/laravel-permission": "^8.0",
"stancl/tenancy": "^3.10",
+383
View File
@@ -0,0 +1,383 @@
<?php
use Spatie\Backup\Notifications\Notifiable;
use Spatie\Backup\Notifications\Notifications\BackupHasFailedNotification;
use Spatie\Backup\Notifications\Notifications\BackupWasSuccessfulNotification;
use Spatie\Backup\Notifications\Notifications\CleanupHasFailedNotification;
use Spatie\Backup\Notifications\Notifications\CleanupWasSuccessfulNotification;
use Spatie\Backup\Notifications\Notifications\HealthyBackupWasFoundNotification;
use Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFoundNotification;
use Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy;
use Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays;
use Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes;
return [
'backup' => [
/*
* The name of this application. You can use this name to monitor
* the backups.
*/
'name' => env('APP_NAME', 'laravel-backup'),
'source' => [
'files' => [
/*
* The list of directories and files that will be included in the backup.
*/
'include' => [
base_path(),
// storage_path(), // Include if you use zero downtime deployments and don't follow symlinks
],
/*
* These directories and files will be excluded from the backup.
*
* Directories used by the backup process will automatically be excluded.
*/
'exclude' => [
base_path('vendor'),
base_path('node_modules'),
storage_path('framework'),
],
/*
* Determines if symlinks should be followed.
*/
'follow_links' => false,
/*
* Determines if it should avoid unreadable folders.
*/
'ignore_unreadable_directories' => false,
/*
* This path is used to make directories in resulting zip-file relative
* Set to `null` to include complete absolute path
* Example: base_path()
*/
'relative_path' => null,
],
/*
* The names of the connections to the databases that should be backed up
* MySQL, PostgreSQL, SQLite and Mongo databases are supported.
*
* The content of the database dump may be customized for each connection
* by adding a 'dump' key to the connection settings in config/database.php.
* E.g.
* 'mysql' => [
* ...
* 'dump' => [
* 'exclude_tables' => [
* 'table_to_exclude_from_backup',
* 'another_table_to_exclude'
* ]
* ],
* ],
*
* If you are using only InnoDB tables on a MySQL server, you can
* also supply the useSingleTransaction option to avoid table locking.
*
* E.g.
* 'mysql' => [
* ...
* 'dump' => [
* 'useSingleTransaction' => true,
* ],
* ],
*
* For a complete list of available customization options, see https://github.com/spatie/db-dumper
*/
'databases' => [
env('DB_CONNECTION', 'mysql'),
],
],
/*
* The database dump can be compressed to decrease disk space usage.
*
* Out of the box Laravel-backup supplies
* Spatie\DbDumper\Compressors\GzipCompressor::class.
*
* You can also create custom compressor. More info on that here:
* https://github.com/spatie/db-dumper#using-compression
*
* If you do not want any compressor at all, set it to null.
*/
'database_dump_compressor' => null,
/*
* If specified, the database dumped file name will contain a timestamp (e.g.: 'Y-m-d-H-i-s').
*/
'database_dump_file_timestamp_format' => null,
/*
* The base of the dump filename, either 'database' or 'connection'
*
* If 'database' (default), the dumped filename will contain the database name.
* If 'connection', the dumped filename will contain the connection name.
*/
'database_dump_filename_base' => 'database',
/*
* The file extension used for the database dump files.
*
* If not specified, the file extension will be .archive for MongoDB and .sql for all other databases
* The file extension should be specified without a leading .
*/
'database_dump_file_extension' => '',
'destination' => [
/*
* The compression algorithm to be used for creating the zip archive.
*
* If backing up only database, you may choose gzip compression for db dump and no compression at zip.
*
* Some common algorithms are listed below:
* ZipArchive::CM_STORE (no compression at all; set 0 as compression level)
* ZipArchive::CM_DEFAULT
* ZipArchive::CM_DEFLATE
* ZipArchive::CM_BZIP2
* ZipArchive::CM_XZ
*
* For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system.
*/
'compression_method' => ZipArchive::CM_DEFAULT,
/*
* The compression level corresponding to the used algorithm; an integer between 0 and 9.
*
* Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression,
* while 9 the slowest and strongest one.
*
* Setting of 0 for some algorithms may switch to the strongest compression.
*/
'compression_level' => 9,
/*
* The filename prefix used for the backup zip file.
*/
'filename_prefix' => '',
/*
* The disk names on which the backups will be stored.
*/
'disks' => [
'local',
],
/*
* Determines whether to allow backups to continue when some targets fail instead of failing completely.
*/
'continue_on_failure' => false,
],
/*
* The directory where the temporary files will be stored.
*/
'temporary_directory' => storage_path('app/backup-temp'),
/*
* The password to be used for archive encryption.
* Set to `null` to disable encryption.
*/
'password' => env('BACKUP_ARCHIVE_PASSWORD'),
/*
* The encryption algorithm to be used for archive encryption.
* Set to 'none' to disable encryption.
*
* Supported: 'none', 'default', 'aes128', 'aes192', 'aes256'
*
* When set to 'default', we'll use AES-256 if available on your system.
*/
'encryption' => 'default',
/*
* After creating the zip, verify it can be opened and contains files.
* Recommended for critical backups but adds a small overhead.
*/
'verify_backup' => false,
/*
* The number of attempts, in case the backup command encounters an exception
*/
'tries' => 1,
/*
* The number of seconds to wait before attempting a new backup if the previous try failed
* Set to `0` for none
*/
'retry_delay' => 0,
],
/*
* You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.
* For Slack you need to install laravel/slack-notification-channel.
*
* You can also use your own notification classes, just make sure the class is named after one of
* the `Spatie\Backup\Notifications\Notifications` classes.
*/
'notifications' => [
'notifications' => [
BackupHasFailedNotification::class => ['mail'],
UnhealthyBackupWasFoundNotification::class => ['mail'],
CleanupHasFailedNotification::class => ['mail'],
BackupWasSuccessfulNotification::class => ['mail'],
HealthyBackupWasFoundNotification::class => ['mail'],
CleanupWasSuccessfulNotification::class => ['mail'],
],
/*
* Here you can specify the notifiable to which the notifications should be sent. The default
* notifiable will use the variables specified in this config file.
*/
'notifiable' => Notifiable::class,
'mail' => [
'to' => 'your@example.com',
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
],
'slack' => [
'webhook_url' => '',
/*
* If this is set to null the default channel of the webhook will be used.
*/
'channel' => null,
'username' => null,
'icon' => null,
],
'discord' => [
'webhook_url' => '',
/*
* If this is an empty string, the name field on the webhook will be used.
*/
'username' => '',
/*
* If this is an empty string, the avatar on the webhook will be used.
*/
'avatar_url' => '',
],
/*
* A generic webhook channel that POSTs JSON to a URL.
* Useful for Mattermost, Microsoft Teams, or custom integrations.
*/
'webhook' => [
'url' => '',
],
],
/*
* The log channel used for backup activity messages.
*
* Set to a channel name defined in config/logging.php to use that channel.
* Set to false to disable backup logging entirely.
* Set to null to use the default log channel.
*/
'log_channel' => null,
/*
* Here you can specify which backups should be monitored.
* If a backup does not meet the specified requirements the
* UnHealthyBackupWasFound event will be fired.
*/
'monitor_backups' => [
[
'name' => env('APP_NAME', 'laravel-backup'),
'disks' => ['local'],
'health_checks' => [
MaximumAgeInDays::class => 1,
MaximumStorageInMegabytes::class => 5000,
],
],
/*
[
'name' => 'name of the second app',
'disks' => ['local', 's3'],
'health_checks' => [
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
],
],
*/
],
'cleanup' => [
/*
* The strategy that will be used to cleanup old backups. The default strategy
* will keep all backups for a certain amount of days. After that period only
* a daily backup will be kept. After that period only weekly backups will
* be kept and so on.
*
* No matter how you configure it the default strategy will never
* delete the newest backup.
*/
'strategy' => DefaultStrategy::class,
'default_strategy' => [
/*
* The number of days for which backups must be kept.
*/
'keep_all_backups_for_days' => 7,
/*
* After the "keep_all_backups_for_days" period is over, the most recent backup
* of that day will be kept. Older backups within the same day will be removed.
* If you create backups only once a day, no backups will be removed yet.
*/
'keep_daily_backups_for_days' => 16,
/*
* After the "keep_daily_backups_for_days" period is over, the most recent backup
* of that week will be kept. Older backups within the same week will be removed.
* If you create backups only once a week, no backups will be removed yet.
*/
'keep_weekly_backups_for_weeks' => 8,
/*
* After the "keep_weekly_backups_for_weeks" period is over, the most recent backup
* of that month will be kept. Older backups within the same month will be removed.
*/
'keep_monthly_backups_for_months' => 4,
/*
* After the "keep_monthly_backups_for_months" period is over, the most recent backup
* of that year will be kept. Older backups within the same year will be removed.
*/
'keep_yearly_backups_for_years' => 2,
/*
* After cleaning up the backups remove the oldest backup until
* this amount of megabytes has been reached.
* Set null for unlimited size.
*/
'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
],
/*
* The number of attempts, in case the cleanup command encounters an exception
*/
'tries' => 1,
/*
* The number of seconds to wait before attempting a new cleanup if the previous try failed
* Set to `0` for none
*/
'retry_delay' => 0,
],
];
+57
View File
@@ -0,0 +1,57 @@
<?php
return [
/*
|-----------------------------------------------------------------
| Default Prefix
|-----------------------------------------------------------------
|
| This config option allows you to define a default prefix for
| your icons. The dash separator will be applied automatically
| to every icon name. It's required and needs to be unique.
|
*/
'prefix' => 'heroicon',
/*
|-----------------------------------------------------------------
| Fallback Icon
|-----------------------------------------------------------------
|
| This config option allows you to define a fallback
| icon when an icon in this set cannot be found.
|
*/
'fallback' => '',
/*
|-----------------------------------------------------------------
| Default Set Classes
|-----------------------------------------------------------------
|
| This config option allows you to define some classes which
| will be applied by default to all icons within this set.
|
*/
'class' => '',
/*
|-----------------------------------------------------------------
| Default Set Attributes
|-----------------------------------------------------------------
|
| This config option allows you to define some attributes which
| will be applied by default to all icons within this set.
|
*/
'attributes' => [
// 'width' => 50,
// 'height' => 50,
],
];
+183
View File
@@ -0,0 +1,183 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Icons Sets
|--------------------------------------------------------------------------
|
| With this config option you can define a couple of
| default icon sets. Provide a key name for your icon
| set and a combination from the options below.
|
*/
'sets' => [
// 'default' => [
//
// /*
// |-----------------------------------------------------------------
// | Icons Path
// |-----------------------------------------------------------------
// |
// | Provide the relative path from your app root to your SVG icons
// | directory. Icons are loaded recursively so there's no need to
// | list every sub-directory.
// |
// | Relative to the disk root when the disk option is set.
// |
// */
//
// 'path' => 'resources/svg',
//
// /*
// |-----------------------------------------------------------------
// | Filesystem Disk
// |-----------------------------------------------------------------
// |
// | Optionally, provide a specific filesystem disk to read
// | icons from. When defining a disk, the "path" option
// | starts relatively from the disk root.
// |
// */
//
// 'disk' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Prefix
// |-----------------------------------------------------------------
// |
// | This config option allows you to define a default prefix for
// | your icons. The dash separator will be applied automatically
// | to every icon name. It's required and needs to be unique.
// |
// */
//
// 'prefix' => 'icon',
//
// /*
// |-----------------------------------------------------------------
// | Fallback Icon
// |-----------------------------------------------------------------
// |
// | This config option allows you to define a fallback
// | icon when an icon in this set cannot be found.
// |
// */
//
// 'fallback' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Set Classes
// |-----------------------------------------------------------------
// |
// | This config option allows you to define some classes which
// | will be applied by default to all icons within this set.
// |
// */
//
// 'class' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Set Attributes
// |-----------------------------------------------------------------
// |
// | This config option allows you to define some attributes which
// | will be applied by default to all icons within this set.
// |
// */
//
// 'attributes' => [
// // 'width' => 50,
// // 'height' => 50,
// ],
//
// ],
],
/*
|--------------------------------------------------------------------------
| Global Default Classes
|--------------------------------------------------------------------------
|
| This config option allows you to define some classes which
| will be applied by default to all icons.
|
*/
'class' => '',
/*
|--------------------------------------------------------------------------
| Global Default Attributes
|--------------------------------------------------------------------------
|
| This config option allows you to define some attributes which
| will be applied by default to all icons.
|
*/
'attributes' => [
// 'width' => 50,
// 'height' => 50,
],
/*
|--------------------------------------------------------------------------
| Global Fallback Icon
|--------------------------------------------------------------------------
|
| This config option allows you to define a global fallback
| icon when an icon in any set cannot be found. It can
| reference any icon from any configured set.
|
*/
'fallback' => '',
/*
|--------------------------------------------------------------------------
| Components
|--------------------------------------------------------------------------
|
| These config options allow you to define some
| settings related to Blade Components.
|
*/
'components' => [
/*
|----------------------------------------------------------------------
| Disable Components
|----------------------------------------------------------------------
|
| This config option allows you to disable Blade components
| completely. It's useful to avoid performance problems
| when working with large icon libraries.
|
*/
'disabled' => false,
/*
|----------------------------------------------------------------------
| Default Icon Component Name
|----------------------------------------------------------------------
|
| This config option allows you to define the name
| for the default Icon class component.
|
*/
'default' => 'icon',
],
];
+31
View File
@@ -0,0 +1,31 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Enable Blaze
|--------------------------------------------------------------------------
|
| When set to false, Blaze will skip all compilation and optimization.
| Templates will be rendered using standard Blade without any Blaze
| processing. This is useful for debugging or disabling Blaze in
| specific environments.
|
*/
'enabled' => env('BLAZE_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Debug Mode
|--------------------------------------------------------------------------
|
| When enabled, Blaze will register the debugger middleware and output
| additional diagnostic information about the compilation pipeline.
|
*/
'debug' => env('BLAZE_DEBUG', false),
];
+52
View File
@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| Boost Master Switch
|--------------------------------------------------------------------------
|
| This option may be used to disable all Boost functionality - which
| will prevent Boost's routes from being registered and will also
| disable Boost's browser logging functionality from operating.
|
*/
'enabled' => env('BOOST_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Boost Browser Logs Watcher
|--------------------------------------------------------------------------
|
| The following option may be used to enable or disable the browser logs
| watcher feature within Laravel Boost. The log watcher will read any
| errors within the browser's console to give Boost better context.
|
*/
'browser_logs_watcher' => env('BOOST_BROWSER_LOGS_WATCHER', true),
/*
|--------------------------------------------------------------------------
| Boost Executables Paths
|--------------------------------------------------------------------------
|
| These options allow you to specify custom paths for the executables that
| Boost uses. When configured, they take precedence over the automatic
| discovery mechanism. Leave empty to use defaults from your $PATH.
|
*/
'executable_paths' => [
'php' => env('BOOST_PHP_EXECUTABLE_PATH'),
'composer' => env('BOOST_COMPOSER_EXECUTABLE_PATH'),
'npm' => env('BOOST_NPM_EXECUTABLE_PATH'),
'vendor_bin' => env('BOOST_VENDOR_BIN_EXECUTABLE_PATH'),
'current_directory' => env('BOOST_CURRENT_DIRECTORY_EXECUTABLE_PATH'),
],
];
+91
View File
@@ -0,0 +1,91 @@
<?php
return [
/*
* Namespaces used by the generator.
*/
'namespace' => [
/*
* Base namespace/directory to create the new file.
* This is appended on default Laravel namespace.
* Usage: php artisan datatables:make User
* Output: App\DataTables\UserDataTable
* With Model: App\User (default model)
* Export filename: users_timestamp
*/
'base' => 'DataTables',
/*
* Base namespace/directory where your model's are located.
* This is appended on default Laravel namespace.
* Usage: php artisan datatables:make Post --model
* Output: App\DataTables\PostDataTable
* With Model: App\Post
* Export filename: posts_timestamp
*/
'model' => 'App\\Models',
],
/*
* Set Custom stub folder
*/
// 'stub' => '/resources/custom_stub',
/*
* PDF generator to be used when converting the table to pdf.
* Available generators: excel, snappy
* Snappy package: barryvdh/laravel-snappy
* Excel package: maatwebsite/excel
*/
'pdf_generator' => 'snappy',
/*
* Snappy PDF options.
*/
'snappy' => [
'options' => [
'no-outline' => true,
'margin-left' => '0',
'margin-right' => '0',
'margin-top' => '10mm',
'margin-bottom' => '10mm',
],
'orientation' => 'landscape',
],
/*
* Default html builder parameters.
*/
'parameters' => [
'dom' => 'Bfrtip',
'order' => [[0, 'desc']],
'buttons' => [
'excel',
'csv',
'pdf',
'print',
'reset',
'reload',
],
],
/*
* Generator command default options value.
*/
'generator' => [
/*
* Default columns to generate when not set.
*/
'columns' => 'id,add your columns,created_at,updated_at',
/*
* Default buttons to generate when not set.
*/
'buttons' => 'excel,csv,pdf,print,reset,reload',
/*
* Default DOM to generate when not set.
*/
'dom' => 'Bfrtip',
],
];
+120
View File
@@ -0,0 +1,120 @@
<?php
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
return [
/*
|--------------------------------------------------------------------------
| Method
|--------------------------------------------------------------------------
|
| Method to use to iterate with the query results.
| Options: lazy, cursor
|
| @link https://laravel.com/docs/eloquent#cursors
| @link https://laravel.com/docs/eloquent#chunking-using-lazy-collections
|
*/
'method' => 'lazy',
/*
|--------------------------------------------------------------------------
| Chunk Size
|--------------------------------------------------------------------------
|
| Chunk size to be used when using lazy method.
|
*/
'chunk' => 1000,
/*
|--------------------------------------------------------------------------
| Export filesystem disk
|--------------------------------------------------------------------------
|
| Export filesystem disk where generated files will be stored.
|
*/
'disk' => 'local',
/*
|--------------------------------------------------------------------------
| Use S3 for final file destination
|--------------------------------------------------------------------------
|
| After generating the file locally, it can be uploaded to s3.
|
*/
's3_disk' => '',
/*
|--------------------------------------------------------------------------
| Mail from address
|--------------------------------------------------------------------------
|
| Will be used to email report from this address.
|
*/
'mail_from' => env('MAIL_FROM_ADDRESS', ''),
/*
|--------------------------------------------------------------------------
| Default Date Format
|--------------------------------------------------------------------------
|
| Default export format for date.
|
*/
'default_date_format' => 'yyyy-mm-dd',
/*
|--------------------------------------------------------------------------
| Valid Date Formats
|--------------------------------------------------------------------------
|
| List of valid date formats to be used for auto-detection.
|
*/
'date_formats' => [
'mm/dd/yyyy',
...NumberFormat::DATE_TIME_OR_DATETIME_ARRAY,
...NumberFormat::TIME_OR_DATETIME_ARRAY,
],
/*
|--------------------------------------------------------------------------
| Valid Text Formats
|--------------------------------------------------------------------------
|
| List of valid text formats to be used.
|
*/
'text_formats' => [
NumberFormat::FORMAT_TEXT,
NumberFormat::FORMAT_GENERAL,
],
/*
|--------------------------------------------------------------------------
| Purge Options
|--------------------------------------------------------------------------
|
| Purge all exported by purge.days old files.
|
*/
'purge' => [
'days' => 1,
],
/*
* --------------------------------------------------------------------------
* Export Queue Name
* --------------------------------------------------------------------------
*
* The name of the queue connection to use for processing the export batch jobs.
* If this is set to null, the jobs will be pushed to the application's default queue.
*
*/
'queue' => env('DATATABLES_EXPORT_QUEUE', null),
];
+15
View File
@@ -0,0 +1,15 @@
<?php
use League\Fractal\Serializer\DataArraySerializer;
return [
/*
* Request key name to parse includes on fractal.
*/
'includes' => 'include',
/*
* Default fractal serializer.
*/
'serializer' => DataArraySerializer::class,
];
+27
View File
@@ -0,0 +1,27 @@
<?php
return [
/*
* DataTables JavaScript global namespace.
*/
'namespace' => 'LaravelDataTables',
/*
* Default table attributes when generating the table.
*/
'table' => [
'class' => 'table',
'id' => 'dataTableBuilder',
],
/*
* Html builder script template.
*/
'script' => 'datatables::script',
/*
* Html builder script template for DataTables Editor integration.
*/
'editor' => 'datatables::editor',
];
+135
View File
@@ -0,0 +1,135 @@
<?php
use Yajra\DataTables\ApiResourceDataTable;
use Yajra\DataTables\CollectionDataTable;
use Yajra\DataTables\EloquentDataTable;
use Yajra\DataTables\PaginatorDataTable;
use Yajra\DataTables\QueryDataTable;
return [
/*
* DataTables search options.
*/
'search' => [
/*
* Smart search will enclose search keyword with wildcard string "%keyword%".
* SQL: column LIKE "%keyword%"
*/
'smart' => true,
/*
* Multi-term search will explode search keyword using spaces resulting into multiple term search.
*/
'multi_term' => true,
/*
* Case insensitive will search the keyword in lower case format.
* SQL: LOWER(column) LIKE LOWER(keyword)
*/
'case_insensitive' => true,
/*
* Wild card will add "%" in between every characters of the keyword.
* SQL: column LIKE "%k%e%y%w%o%r%d%"
*/
'use_wildcards' => false,
/*
* Perform a search which starts with the given keyword.
* SQL: column LIKE "keyword%"
*/
'starts_with' => false,
],
/*
* DataTables internal index id response column name.
*/
'index_column' => 'DT_RowIndex',
/*
* List of available builders for DataTables.
* This is where you can register your custom DataTables builder.
*/
'engines' => [
'eloquent' => EloquentDataTable::class,
'query' => QueryDataTable::class,
'collection' => CollectionDataTable::class,
'paginator' => PaginatorDataTable::class,
'resource' => ApiResourceDataTable::class,
],
/*
* DataTables accepted builder to engine mapping.
* This is where you can override which engine a builder should use
* Note, only change this if you know what you are doing!
*/
'builders' => [
// Illuminate\Database\Eloquent\Relations\Relation::class => 'eloquent',
// Illuminate\Database\Eloquent\Builder::class => 'eloquent',
// Illuminate\Database\Query\Builder::class => 'query',
// Illuminate\Support\Collection::class => 'collection',
// Illuminate\Pagination\LengthAwarePaginator::class => 'paginator',
],
/*
* Nulls last sql pattern for PostgreSQL & Oracle.
* For MySQL, use 'CASE WHEN :column IS NULL THEN 1 ELSE 0 END, :column :direction'
*/
'nulls_last_sql' => ':column :direction NULLS LAST',
/*
* User friendly message to be displayed on user if error occurs.
* Possible values:
* null - The exception message will be used on error response.
* 'throw' - Throws a \Yajra\DataTables\Exceptions\Exception. Use your custom error handler if needed.
* 'custom message' - Any friendly message to be displayed to the user. You can also use translation key.
*/
'error' => env('DATATABLES_ERROR', null),
/*
* Default columns definition of DataTable utility functions.
*/
'columns' => [
/*
* List of columns hidden/removed on json response.
*/
'excess' => ['rn', 'row_num'],
/*
* List of columns to be escaped. If set to *, all columns are escape.
* Note: You can set the value to empty array to disable XSS protection.
*/
'escape' => '*',
/*
* List of columns that are allowed to display html content.
* Note: Adding columns to list will make us available to XSS attacks.
*/
'raw' => ['action'],
/*
* List of columns are forbidden from being searched/sorted.
*/
'blacklist' => ['password', 'remember_token'],
/*
* List of columns that are only allowed for search/sort.
* If set to *, all columns are allowed.
*/
'whitelist' => '*',
],
/*
* JsonResponse header and options config.
*/
'json' => [
'header' => [],
'options' => 0,
],
/*
* Default condition to determine if a parameter is a callback or not.
* Callbacks needs to start by those terms, or they will be cast to string.
*/
'callback' => ['$', '$.', 'function'],
];
+301
View File
@@ -0,0 +1,301 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Settings
|--------------------------------------------------------------------------
|
| Set some default values. It is possible to add all defines that can be set
| in dompdf_config.inc.php. You can also override the entire config file.
|
*/
'show_warnings' => false, // Throw an Exception on warnings from dompdf
'public_path' => null, // Override the public path if needed
/*
* Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £.
*/
'convert_entities' => true,
'options' => [
/**
* The location of the DOMPDF font directory
*
* The location of the directory where DOMPDF will store fonts and font metrics
* Note: This directory must exist and be writable by the webserver process.
* *Please note the trailing slash.*
*
* Notes regarding fonts:
* Additional .afm font metrics can be added by executing load_font.php from command line.
*
* Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must
* be embedded in the pdf file or the PDF may not display correctly. This can significantly
* increase file size unless font subsetting is enabled. Before embedding a font please
* review your rights under the font license.
*
* Any font specification in the source HTML is translated to the closest font available
* in the font directory.
*
* The pdf standard "Base 14 fonts" are:
* Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,
* Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,
* Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
* Symbol, ZapfDingbats.
*/
'font_dir' => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
/**
* The location of the DOMPDF font cache directory
*
* This directory contains the cached font metrics for the fonts used by DOMPDF.
* This directory can be the same as DOMPDF_FONT_DIR
*
* Note: This directory must exist and be writable by the webserver process.
*/
'font_cache' => storage_path('fonts'),
/**
* The location of a temporary directory.
*
* The directory specified must be writeable by the webserver process.
* The temporary directory is required to download remote images and when
* using the PDFLib back end.
*/
'temp_dir' => sys_get_temp_dir(),
/**
* ==== IMPORTANT ====
*
* dompdf's "chroot": Prevents dompdf from accessing system files or other
* files on the webserver. All local files opened by dompdf must be in a
* subdirectory of this directory. DO NOT set it to '/' since this could
* allow an attacker to use dompdf to read any files on the server. This
* should be an absolute path.
* This is only checked on command line call by dompdf.php, but not by
* direct class use like:
* $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();
*/
'chroot' => realpath(base_path()),
/**
* Protocol whitelist
*
* Protocols and PHP wrappers allowed in URIs, and the validation rules
* that determine if a resouce may be loaded. Full support is not guaranteed
* for the protocols/wrappers specified
* by this array.
*
* @var array
*/
'allowed_protocols' => [
'data://' => ['rules' => []],
'file://' => ['rules' => []],
'http://' => ['rules' => []],
'https://' => ['rules' => []],
],
/**
* Operational artifact (log files, temporary files) path validation
*/
'artifactPathValidation' => null,
/**
* @var string
*/
'log_output_file' => null,
/**
* Whether to enable font subsetting or not.
*/
'enable_font_subsetting' => false,
/**
* The PDF rendering backend to use
*
* Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and
* 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will
* fall back on CPDF. 'GD' renders PDFs to graphic files.
* {@link * Canvas_Factory} ultimately determines which rendering class to
* instantiate based on this setting.
*
* Both PDFLib & CPDF rendering backends provide sufficient rendering
* capabilities for dompdf, however additional features (e.g. object,
* image and font support, etc.) differ between backends. Please see
* {@link PDFLib_Adapter} for more information on the PDFLib backend
* and {@link CPDF_Adapter} and lib/class.pdf.php for more information
* on CPDF. Also see the documentation for each backend at the links
* below.
*
* The GD rendering backend is a little different than PDFLib and
* CPDF. Several features of CPDF and PDFLib are not supported or do
* not make any sense when creating image files. For example,
* multiple pages are not supported, nor are PDF 'objects'. Have a
* look at {@link GD_Adapter} for more information. GD support is
* experimental, so use it at your own risk.
*
* @link http://www.pdflib.com
* @link http://www.ros.co.nz/pdf
* @link http://www.php.net/image
*/
'pdf_backend' => 'CPDF',
/**
* html target media view which should be rendered into pdf.
* List of types and parsing rules for future extensions:
* http://www.w3.org/TR/REC-html40/types.html
* screen, tty, tv, projection, handheld, print, braille, aural, all
* Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.
* Note, even though the generated pdf file is intended for print output,
* the desired content might be different (e.g. screen or projection view of html file).
* Therefore allow specification of content here.
*/
'default_media_type' => 'screen',
/**
* The default paper size.
*
* North America standard is "letter"; other countries generally "a4"
*
* @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
*/
'default_paper_size' => 'a4',
/**
* The default paper orientation.
*
* The orientation of the page (portrait or landscape).
*
* @var string
*/
'default_paper_orientation' => 'portrait',
/**
* The default font family
*
* Used if no suitable fonts can be found. This must exist in the font folder.
*
* @var string
*/
'default_font' => 'serif',
/**
* Image DPI setting
*
* This setting determines the default DPI setting for images and fonts. The
* DPI may be overridden for inline images by explictly setting the
* image's width & height style attributes (i.e. if the image's native
* width is 600 pixels and you specify the image's width as 72 points,
* the image will have a DPI of 600 in the rendered PDF. The DPI of
* background images can not be overridden and is controlled entirely
* via this parameter.
*
* For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
* If a size in html is given as px (or without unit as image size),
* this tells the corresponding size in pt.
* This adjusts the relative sizes to be similar to the rendering of the
* html page in a reference browser.
*
* In pdf, always 1 pt = 1/72 inch
*
* Rendering resolution of various browsers in px per inch:
* Windows Firefox and Internet Explorer:
* SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?
* Linux Firefox:
* about:config *resolution: Default:96
* (xorg screen dimension in mm and Desktop font dpi settings are ignored)
*
* Take care about extra font/image zoom factor of browser.
*
* In images, <img> size in pixel attribute, img css style, are overriding
* the real image dimension in px for rendering.
*
* @var int
*/
'dpi' => 96,
/**
* Enable embedded PHP
*
* If this setting is set to true then DOMPDF will automatically evaluate embedded PHP contained
* within <script type="text/php"> ... </script> tags.
*
* ==== IMPORTANT ==== Enabling this for documents you do not trust (e.g. arbitrary remote html pages)
* is a security risk.
* Embedded scripts are run with the same level of system access available to dompdf.
* Set this option to false (recommended) if you wish to process untrusted documents.
* This setting may increase the risk of system exploit.
* Do not change this settings without understanding the consequences.
* Additional documentation is available on the dompdf wiki at:
* https://github.com/dompdf/dompdf/wiki
*
* @var bool
*/
'enable_php' => false,
/**
* Enable inline JavaScript
*
* If this setting is set to true then DOMPDF will automatically insert JavaScript code contained
* within <script type="text/javascript"> ... </script> tags as written into the PDF.
* NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
* not browser-based JavaScript executed by Dompdf.
*
* @var bool
*/
'enable_javascript' => true,
/**
* Enable remote file access
*
* If this setting is set to true, DOMPDF will access remote sites for
* images and CSS files as required.
*
* ==== IMPORTANT ====
* This can be a security risk, in particular in combination with isPhpEnabled and
* allowing remote html code to be passed to $dompdf = new DOMPDF(); $dompdf->load_html(...);
* This allows anonymous users to download legally doubtful internet content which on
* tracing back appears to being downloaded by your server, or allows malicious php code
* in remote html pages to be executed by your server with your account privileges.
*
* This setting may increase the risk of system exploit. Do not change
* this settings without understanding the consequences. Additional
* documentation is available on the dompdf wiki at:
* https://github.com/dompdf/dompdf/wiki
*
* @var bool
*/
'enable_remote' => false,
/**
* List of allowed remote hosts
*
* Each value of the array must be a valid hostname.
*
* This will be used to filter which resources can be loaded in combination with
* isRemoteEnabled. If enable_remote is FALSE, then this will have no effect.
*
* Leave to NULL to allow any remote host.
*
* @var array|null
*/
'allowed_remote_hosts' => null,
/**
* A ratio applied to the fonts height to be more like browsers' line height
*/
'font_height_ratio' => 1.1,
/**
* Use the HTML5 Lib parser
*
* @deprecated This feature is now always on in dompdf 2.x
*
* @var bool
*/
'enable_html5_parser' => true,
],
];
+137
View File
@@ -0,0 +1,137 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Broadcasting
|--------------------------------------------------------------------------
|
| By uncommenting the Laravel Echo configuration, you may connect Filament
| to any Pusher-compatible websockets server.
|
| This will allow your users to receive real-time notifications.
|
*/
'broadcasting' => [
// 'echo' => [
// 'broadcaster' => 'pusher',
// 'key' => env('VITE_PUSHER_APP_KEY'),
// 'cluster' => env('VITE_PUSHER_APP_CLUSTER'),
// 'wsHost' => env('VITE_PUSHER_HOST'),
// 'wsPort' => env('VITE_PUSHER_PORT'),
// 'wssPort' => env('VITE_PUSHER_PORT'),
// 'authEndpoint' => '/broadcasting/auth',
// 'disableStats' => true,
// 'encrypted' => true,
// 'forceTLS' => env('VITE_PUSHER_SCHEME', 'https') === 'https',
// ],
],
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| This is the storage disk Filament will use to store files. You may use
| any of the disks defined in the `config/filesystems.php`.
|
*/
'default_filesystem_disk' => env('FILESYSTEM_DISK', 'local'),
/*
|--------------------------------------------------------------------------
| Temporary File URL Expiry
|--------------------------------------------------------------------------
|
| When Filament generates temporary URLs for previewing private files
| (file uploads, image columns, image entries, rich editor attachments,
| etc.), this value controls how many minutes those URLs remain valid.
|
| The generated URL's expiry is rounded up to the end of the hour it
| falls in, so the effective lifetime will be between this value and
| this value plus up to 60 minutes.
|
*/
'temporary_file_url_expiry_minutes' => 30,
/*
|--------------------------------------------------------------------------
| Assets Path
|--------------------------------------------------------------------------
|
| This is the directory where Filament's assets will be published to. It
| is relative to the `public` directory of your Laravel application.
|
| After changing the path, you should run `php artisan filament:assets`.
|
*/
'assets_path' => null,
/*
|--------------------------------------------------------------------------
| Cache Path
|--------------------------------------------------------------------------
|
| This is the directory that Filament will use to store cache files that
| are used to optimize the registration of components.
|
| After changing the path, you should run `php artisan filament:cache-components`.
|
*/
'cache_path' => base_path('bootstrap/cache/filament'),
/*
|--------------------------------------------------------------------------
| Livewire Loading Delay
|--------------------------------------------------------------------------
|
| This sets the delay before loading indicators appear.
|
| Setting this to 'none' makes indicators appear immediately, which can be
| desirable for high-latency connections. Setting it to 'default' applies
| Livewire's standard 200ms delay.
|
*/
'livewire_loading_delay' => 'default',
/*
|--------------------------------------------------------------------------
| File Generation
|--------------------------------------------------------------------------
|
| Artisan commands that generate files can be configured here by setting
| configuration flags that will impact their location or content.
|
| Often, this is useful to preserve file generation behavior from a
| previous version of Filament, to ensure consistency between older and
| newer generated files. These flags are often documented in the upgrade
| guide for the version of Filament you are upgrading to.
|
*/
'file_generation' => [
'flags' => [],
],
/*
|--------------------------------------------------------------------------
| System Route Prefix
|--------------------------------------------------------------------------
|
| This is the prefix used for the system routes that Filament registers,
| such as the routes for downloading exports and failed import rows.
|
*/
'system_route_prefix' => 'filament',
];
+254
View File
@@ -0,0 +1,254 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Horizon Name
|--------------------------------------------------------------------------
|
| This name appears in notifications and in the Horizon UI. Unique names
| can be useful while running multiple instances of Horizon within an
| application, allowing you to identify the Horizon you're viewing.
|
*/
'name' => env('HORIZON_NAME'),
/*
|--------------------------------------------------------------------------
| Horizon Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Horizon will be accessible from. If this
| setting is null, Horizon will reside under the same domain as the
| application. Otherwise, this value will serve as the subdomain.
|
*/
'domain' => env('HORIZON_DOMAIN'),
/*
|--------------------------------------------------------------------------
| Horizon Path
|--------------------------------------------------------------------------
|
| This is the URI path where Horizon will be accessible from. Feel free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/
'path' => env('HORIZON_PATH', 'horizon'),
/*
|--------------------------------------------------------------------------
| Horizon Redis Connection
|--------------------------------------------------------------------------
|
| This is the name of the Redis connection where Horizon will store the
| meta information required for it to function. It includes the list
| of supervisors, failed jobs, job metrics, and other information.
|
*/
'use' => 'default',
/*
|--------------------------------------------------------------------------
| Horizon Redis Prefix
|--------------------------------------------------------------------------
|
| This prefix will be used when storing all Horizon data in Redis. You
| may modify the prefix when you are running multiple installations
| of Horizon on the same server so that they don't have problems.
|
*/
'prefix' => env(
'HORIZON_PREFIX',
Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:'
),
/*
|--------------------------------------------------------------------------
| Horizon Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will get attached onto each Horizon route, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with this list.
|
*/
'middleware' => ['web'],
/*
|--------------------------------------------------------------------------
| Queue Wait Time Thresholds
|--------------------------------------------------------------------------
|
| This option allows you to configure when the LongWaitDetected event
| will be fired. Every connection / queue combination may have its
| own, unique threshold (in seconds) before this event is fired.
|
*/
'waits' => [
'redis:default' => 60,
],
/*
|--------------------------------------------------------------------------
| Job Trimming Times
|--------------------------------------------------------------------------
|
| Here you can configure for how long (in minutes) you desire Horizon to
| persist the recent and failed jobs. Typically, recent jobs are kept
| for one hour while all failed jobs are stored for an entire week.
|
*/
'trim' => [
'recent' => 60,
'pending' => 60,
'completed' => 60,
'recent_failed' => 10080,
'failed' => 10080,
'monitored' => 10080,
],
/*
|--------------------------------------------------------------------------
| Silenced Jobs
|--------------------------------------------------------------------------
|
| Silencing a job will instruct Horizon to not place the job in the list
| of completed jobs within the Horizon dashboard. This setting may be
| used to fully remove any noisy jobs from the completed jobs list.
|
*/
'silenced' => [
// App\Jobs\ExampleJob::class,
],
'silenced_tags' => [
// 'notifications',
],
/*
|--------------------------------------------------------------------------
| Metrics
|--------------------------------------------------------------------------
|
| Here you can configure how many snapshots should be kept to display in
| the metrics graph. This will get used in combination with Horizon's
| `horizon:snapshot` schedule to define how long to retain metrics.
|
*/
'metrics' => [
'trim_snapshots' => [
'job' => 24,
'queue' => 24,
],
],
/*
|--------------------------------------------------------------------------
| Fast Termination
|--------------------------------------------------------------------------
|
| When this option is enabled, Horizon's "terminate" command will not
| wait on all of the workers to terminate unless the --wait option
| is provided. Fast termination can shorten deployment delay by
| allowing a new instance of Horizon to start while the last
| instance will continue to terminate each of its workers.
|
*/
'fast_termination' => false,
/*
|--------------------------------------------------------------------------
| Memory Limit (MB)
|--------------------------------------------------------------------------
|
| This value describes the maximum amount of memory the Horizon master
| supervisor may consume before it is terminated and restarted. For
| configuring these limits on your workers, see the next section.
|
*/
'memory_limit' => 64,
/*
|--------------------------------------------------------------------------
| Queue Worker Configuration
|--------------------------------------------------------------------------
|
| Here you may define the queue worker settings used by your application
| in all environments. These supervisors and settings handle all your
| queued jobs and will be provisioned by Horizon during deployment.
|
*/
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'autoScalingStrategy' => 'time',
'maxProcesses' => 1,
'maxTime' => 0,
'maxJobs' => 0,
'memory' => 128,
'tries' => 1,
'timeout' => 60,
'nice' => 0,
],
],
'environments' => [
'production' => [
'supervisor-1' => [
'maxProcesses' => 10,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
],
],
'local' => [
'supervisor-1' => [
'maxProcesses' => 3,
],
],
],
/*
|--------------------------------------------------------------------------
| File Watcher Configuration
|--------------------------------------------------------------------------
|
| The following list of directories and files will be watched when using
| the `horizon:listen` command. Whenever any directories or files are
| changed, Horizon will automatically restart to apply all changes.
|
*/
'watch' => [
'app',
'bootstrap',
'config/**/*.php',
'database/**/*.php',
'public/**/*.php',
'resources/**/*.php',
'routes',
'composer.lock',
'composer.json',
'.env',
],
];
+81
View File
@@ -0,0 +1,81 @@
<?php
use Laravel\Jetstream\Features;
use Laravel\Jetstream\Http\Middleware\AuthenticateSession;
return [
/*
|--------------------------------------------------------------------------
| Jetstream Stack
|--------------------------------------------------------------------------
|
| This configuration value informs Jetstream which "stack" you will be
| using for your application. In general, this value is set for you
| during installation and will not need to be changed after that.
|
*/
'stack' => 'inertia',
/*
|--------------------------------------------------------------------------
| Jetstream Route Middleware
|--------------------------------------------------------------------------
|
| Here you may specify which middleware Jetstream will assign to the routes
| that it registers with the application. When necessary, you may modify
| these middleware; however, this default value is usually sufficient.
|
*/
'middleware' => ['web'],
'auth_session' => AuthenticateSession::class,
/*
|--------------------------------------------------------------------------
| Jetstream Guard
|--------------------------------------------------------------------------
|
| Here you may specify the authentication guard Jetstream will use while
| authenticating users. This value should correspond with one of your
| guards that is already present in your "auth" configuration file.
|
*/
'guard' => 'sanctum',
/*
|--------------------------------------------------------------------------
| Features
|--------------------------------------------------------------------------
|
| Some of Jetstream's features are optional. You may disable the features
| by removing them from this array. You're free to only remove some of
| these features or you can even remove all of these if you need to.
|
*/
'features' => [
// Features::termsAndPrivacyPolicy(),
// Features::profilePhotos(),
// Features::api(),
// Features::teams(['invitations' => true]),
Features::accountDeletion(),
],
/*
|--------------------------------------------------------------------------
| Profile Photo Disk
|--------------------------------------------------------------------------
|
| This configuration value determines the default disk that will be used
| when storing profile photos for your application's users. Typically
| this will be the "public" disk but you may adjust this if needed.
|
*/
'profile_photo_disk' => 'public',
];
+282
View File
@@ -0,0 +1,282 @@
<?php
return [
/*
|---------------------------------------------------------------------------
| Component Locations
|---------------------------------------------------------------------------
|
| This value sets the root directories that'll be used to resolve view-based
| components like single and multi-file components. The make command will
| use the first directory in this array to add new component files to.
|
*/
'component_locations' => [
resource_path('views/components'),
resource_path('views/livewire'),
],
/*
|---------------------------------------------------------------------------
| Component Namespaces
|---------------------------------------------------------------------------
|
| This value sets default namespaces that will be used to resolve view-based
| components like single-file and multi-file components. These folders'll
| also be referenced when creating new components via the make command.
|
*/
'component_namespaces' => [
'layouts' => resource_path('views/layouts'),
'pages' => resource_path('views/pages'),
],
/*
|---------------------------------------------------------------------------
| Page Layout
|---------------------------------------------------------------------------
| The view that will be used as the layout when rendering a single component as
| an entire page via `Route::livewire('/post/create', 'pages::create-post')`.
| In this case, the content of pages::create-post will render into $slot.
|
*/
'component_layout' => 'layouts::app',
/*
|---------------------------------------------------------------------------
| Lazy Loading Placeholder
|---------------------------------------------------------------------------
| Livewire allows you to lazy load components that would otherwise slow down
| the initial page load. Every component can have a custom placeholder or
| you can define the default placeholder view for all components below.
|
*/
'component_placeholder' => null, // Example: 'placeholders::skeleton'
/*
|---------------------------------------------------------------------------
| Make Command
|---------------------------------------------------------------------------
| This value determines the default configuration for the artisan make command
| You can configure the component type (sfc, mfc, class) and whether to use
| the high-voltage (⚡) emoji as a prefix in the sfc|mfc component names.
|
*/
'make_command' => [
'type' => 'sfc', // Options: 'sfc', 'mfc', 'class'
'emoji' => true, // Options: true, false
'with' => [
'js' => false,
'css' => false,
'test' => false,
],
],
/*
|---------------------------------------------------------------------------
| Class Namespace
|---------------------------------------------------------------------------
|
| This value sets the root class namespace for Livewire component classes in
| your application. This value will change where component auto-discovery
| finds components. It's also referenced by the file creation commands.
|
*/
'class_namespace' => 'App\\Livewire',
/*
|---------------------------------------------------------------------------
| Class Path
|---------------------------------------------------------------------------
|
| This value is used to specify the path where Livewire component class files
| are created when running creation commands like `artisan make:livewire`.
| This path is customizable to match your projects directory structure.
|
*/
'class_path' => app_path('Livewire'),
/*
|---------------------------------------------------------------------------
| View Path
|---------------------------------------------------------------------------
|
| This value is used to specify where Livewire component Blade templates are
| stored when running file creation commands like `artisan make:livewire`.
| It is also used if you choose to omit a component's render() method.
|
*/
'view_path' => resource_path('views/livewire'),
/*
|---------------------------------------------------------------------------
| Temporary File Uploads
|---------------------------------------------------------------------------
|
| Livewire handles file uploads by storing uploads in a temporary directory
| before the file is stored permanently. All file uploads are directed to
| a global endpoint for temporary storage. You may configure this below:
|
*/
'temporary_file_upload' => [
'disk' => env('LIVEWIRE_TEMPORARY_FILE_UPLOAD_DISK'), // Example: 'local', 's3' | Default: 'default'
'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs...
],
/*
|---------------------------------------------------------------------------
| Render On Redirect
|---------------------------------------------------------------------------
|
| This value determines if Livewire will run a component's `render()` method
| after a redirect has been triggered using something like `redirect(...)`
| Setting this to true will render the view once more before redirecting
|
*/
'render_on_redirect' => false,
/*
|---------------------------------------------------------------------------
| Eloquent Model Binding
|---------------------------------------------------------------------------
|
| Previous versions of Livewire supported binding directly to eloquent model
| properties using wire:model by default. However, this behavior has been
| deemed too "magical" and has therefore been put under a feature flag.
|
*/
'legacy_model_binding' => false,
/*
|---------------------------------------------------------------------------
| Auto-inject Frontend Assets
|---------------------------------------------------------------------------
|
| By default, Livewire automatically injects its JavaScript and CSS into the
| <head> and <body> of pages containing Livewire components. By disabling
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
*/
'inject_assets' => true,
/*
|---------------------------------------------------------------------------
| Navigate (SPA mode)
|---------------------------------------------------------------------------
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
| will prevent the default link handling and instead request those pages
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
*/
'navigate' => [
'show_progress_bar' => true,
'progress_bar_color' => '#2299dd',
],
/*
|---------------------------------------------------------------------------
| HTML Morph Markers
|---------------------------------------------------------------------------
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
| after each update. To make this process more reliable, Livewire injects
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
*/
'inject_morph_markers' => true,
/*
|---------------------------------------------------------------------------
| Smart Wire Keys
|---------------------------------------------------------------------------
|
| Livewire uses loops and keys used within loops to generate smart keys that
| are applied to nested components that don't have them. This makes using
| nested components more reliable by ensuring that they all have keys.
|
*/
'smart_wire_keys' => true,
/*
|---------------------------------------------------------------------------
| Pagination Theme
|---------------------------------------------------------------------------
|
| When enabling Livewire's pagination feature by using the `WithPagination`
| trait, Livewire will use Tailwind templates to render pagination views
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
*/
'pagination_theme' => 'tailwind',
/*
|---------------------------------------------------------------------------
| Release Token
|---------------------------------------------------------------------------
|
| This token is stored client-side and sent along with each request to check
| a users session to see if a new release has invalidated it. If there is
| a mismatch it will throw an error and prompt for a browser refresh.
|
*/
'release_token' => 'a',
/*
|---------------------------------------------------------------------------
| CSP Safe
|---------------------------------------------------------------------------
|
| This config is used to determine if Livewire will use the CSP-safe version
| of Alpine in its bundle. This is useful for applications that are using
| strict Content Security Policy (CSP) to protect against XSS attacks.
|
*/
'csp_safe' => false,
/*
|---------------------------------------------------------------------------
| Payload Guards
|---------------------------------------------------------------------------
|
| These settings protect against malicious or oversized payloads that could
| cause denial of service. The default values should feel reasonable for
| most web applications. Each can be set to null to disable the limit.
|
*/
'payload' => [
'max_size' => 1024 * 1024, // 1MB - maximum request payload size in bytes
'max_nesting_depth' => 10, // Maximum depth of dot-notation property paths
'max_calls' => 50, // Maximum method calls per request
'max_components' => 200, // Maximum components per batch request
],
];
+279
View File
@@ -0,0 +1,279 @@
<?php
declare(strict_types=1);
use LaravelLang\Config\Constants\RouteName;
use LaravelLang\LocaleList\Locale;
return [
/*
* Determines what type of files to use when updating language files.
*
* @see https://laravel-lang.com/configuration.html#inline
*
* By default, `false`.
*/
'inline' => (bool) env('LOCALIZATION_INLINE', env('LANG_PUBLISHER_INLINE')),
/*
* Do arrays need to be aligned by keys before processing arrays?
*
* @see https://laravel-lang.com/configuration.html#alignment
*
* By default, true
*/
'align' => (bool) env('LOCALIZATION_ALIGN', env('LANG_PUBLISHER_ALIGN', true)),
/*
* The language codes chosen for the files in this repository may not
* match the preferences for your project.
*
* Specify here mappings of localizations with your project.
*
* @see https://laravel-lang.com/configuration.html#aliases
*/
'aliases' => [
// \LaravelLang\LocaleList\Locale::German->value => 'de-DE',
// \LaravelLang\LocaleList\Locale::GermanSwitzerland->value => 'de-CH',
],
/*
* This option determines the mechanism for converting translation
* keys into a typographic version.
*
* @see https://laravel-lang.com/configuration.html#smart_punctuation
*
* By default, false
*/
'smart_punctuation' => [
'enable' => (bool) env('LOCALIZATION_SMART_ENABLED', false),
'common' => [
'double_quote_opener' => '“',
'double_quote_closer' => '”',
'single_quote_opener' => '‘',
'single_quote_closer' => '’',
],
'locales' => [
Locale::French->value => [
'double_quote_opener' => '«&nbsp;',
'double_quote_closer' => '&nbsp;»',
'single_quote_opener' => '‘',
'single_quote_closer' => '’',
],
Locale::Russian->value => [
'double_quote_opener' => '«',
'double_quote_closer' => '»',
'single_quote_opener' => '‘',
'single_quote_closer' => '’',
],
Locale::Ukrainian->value => [
'double_quote_opener' => '«',
'double_quote_closer' => '»',
'single_quote_opener' => '‘',
'single_quote_closer' => '’',
],
Locale::Belarusian->value => [
'double_quote_opener' => '«',
'double_quote_closer' => '»',
'single_quote_opener' => '‘',
'single_quote_closer' => '’',
],
],
],
/*
* This option defines the application's route settings.
*
* @see https://laravel-lang.com/configuration.html#routes
*/
'routes' => [
/*
* This option defines the settings for the key names used when working with application routing.
*
* Default values:
*
* parameter - locale
* header - Accept-Language
* cookie - Accept-Language
* session - Accept-Language
* column - column
*/
'names' => [
'parameter' => RouteName::Parameter,
'header' => RouteName::Header,
'cookie' => RouteName::Cookie,
'session' => RouteName::Session,
'column' => RouteName::Column,
],
/*
* This option specifies the prefix of route group names.
*
* By default, `localized.`
*/
'name_prefix' => env('LOCALIZATION_NAME_PREFIX', 'localized.'),
/*
* This option specifies the request redirection option when trying to open the default localization.
*
* Applies when using the `LaravelLang\Routes\Facades\LocalizationRoute` facade.
*/
'redirect_default' => (bool) env('LOCALIZATION_REDIRECT_DEFAULT', false),
/*
* This option defines the default localization, when used, the localization parameter will be removed from the URL.
*
* Applies when using the `localizedRoute` helper.
*/
'hide_default' => (bool) env('LOCALIZATION_HIDE_DEFAULT', false),
// This option contains settings for routes.
'group' => [
'middlewares' => [
// This option contains settings for routes without the prefix of the localization code.
'default' => [
LaravelLang\Routes\Middlewares\LocalizationByCookie::class,
LaravelLang\Routes\Middlewares\LocalizationByHeader::class,
LaravelLang\Routes\Middlewares\LocalizationBySession::class,
LaravelLang\Routes\Middlewares\LocalizationByModel::class,
],
// This option contains settings for routes with the prefix of the localization code.
'prefix' => [
LaravelLang\Routes\Middlewares\LocalizationByParameterPrefix::class,
LaravelLang\Routes\Middlewares\LocalizationByCookie::class,
LaravelLang\Routes\Middlewares\LocalizationByHeader::class,
LaravelLang\Routes\Middlewares\LocalizationBySession::class,
LaravelLang\Routes\Middlewares\LocalizationByModel::class,
],
],
],
],
/*
* This option defines settings for working with model translations.
*
* @see https://laravel-lang.com/configuration.html#models
*/
'models' => [
/*
* This option specifies a suffix for models containing translations.
*
* For example,
* main model is `App\Models\Page`
* translation model is `App\Models\PageTranslation`
*
* By default, `Translation`
*/
'suffix' => 'Translation',
/*
* This option determines the need to filter localizations loaded
* in the relay when using eager loading.
*
* By default, true.
*/
'filter' => [
'enabled' => (bool) env('LOCALIZATION_FILTER_ENABLED', true),
],
/*
* This option specifies a folder to store helper files for the IDE.
*
* By default, `vendor/_laravel_lang`
*/
'helpers' => env('VENDOR_PATH', base_path('vendor/_laravel_lang')),
],
/*
* This option contains a list of translators that the Laravel Lang Translator project works with.
*
* Google Translate is enabled by default.
*
* @see https://laravel-lang.com/configuration.html#translators
*/
'translators' => [
/*
* List of channels used for translations.
*
* By default,
*
* Google is enabled
* Deepl is disabled
* Yandex is disabled
*/
'channels' => [
'google' => [
'translator' => '\LaravelLang\Translator\Integrations\Google',
'enabled' => (bool) env('TRANSLATION_GOOGLE_ENABLED', true),
'priority' => (int) env('TRANSLATION_GOOGLE_PRIORITY', 1),
],
'deepl' => [
'translator' => '\LaravelLang\Translator\Integrations\Deepl',
'enabled' => (bool) env('TRANSLATION_DEEPL_ENABLED', false),
'priority' => (int) env('TRANSLATION_DEEPL_PRIORITY', 2),
'credentials' => [
'key' => (string) env('TRANSLATION_DEEPL_KEY'),
],
],
'yandex' => [
'translator' => '\LaravelLang\Translator\Integrations\Yandex',
'enabled' => (bool) env('TRANSLATION_YANDEX_ENABLED', false),
'priority' => (int) env('TRANSLATION_YANDEX_PRIORITY', 3),
'credentials' => [
'key' => (string) env('TRANSLATION_YANDEX_KEY'),
'folder' => (string) env('TRANSLATION_YANDEX_FOLDER_ID'),
],
],
],
'options' => [
/*
* Set a custom pattern for extracting replaceable keywords from the string,
* default to extracting words prefixed with a colon.
*
* Available options:
*
* `true` is a `/:(\w+)/`
* `false` will disable regular expression processing
* `/any regex/` - any regular expression you specify
*
* By default, `true`
*
* @example (e.g. "Hello :name" will extract "name")
*/
'preserve_parameters' => true,
],
],
];
+54
View File
@@ -0,0 +1,54 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Redirect Domains
|--------------------------------------------------------------------------
|
| These domains are the domains that OAuth clients are permitted to use
| for redirect URIs. Each domain should be specified with its scheme
| and host. Domains not in this list will raise validation errors.
|
| An "*" may be used to allow all domains.
|
*/
'redirect_domains' => [
'*',
// 'https://example.com',
// 'http://localhost',
],
/*
|--------------------------------------------------------------------------
| Allowed Custom Schemes
|--------------------------------------------------------------------------
|
| Native desktop OAuth clients like Cursor and VS Code use private-use URI
| schemes (RFC 8252) for redirect callbacks instead of standard schemes
| like HTTPS. Here, you may list which custom schemes you will allow.
|
*/
'custom_schemes' => [
// 'claude',
// 'cursor',
// 'vscode',
],
/*
|--------------------------------------------------------------------------
| Authorization Server
|--------------------------------------------------------------------------
|
| Here you may configure the OAuth authorization server issuer identifier
| per RFC 8414. This value appears in your protected resource and auth
| server metadata endpoints. When null, this defaults to `url('/')`.
|
*/
'authorization_server' => null,
];
+363
View File
@@ -0,0 +1,363 @@
<?php
use Spatie\ImageOptimizer\Optimizers\Avifenc;
use Spatie\ImageOptimizer\Optimizers\Cwebp;
use Spatie\ImageOptimizer\Optimizers\Gifsicle;
use Spatie\ImageOptimizer\Optimizers\Jpegoptim;
use Spatie\ImageOptimizer\Optimizers\Optipng;
use Spatie\ImageOptimizer\Optimizers\Pngquant;
use Spatie\ImageOptimizer\Optimizers\Svgo;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Avif;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Image;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Svg;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Video;
use Spatie\MediaLibrary\Conversions\ImageGenerators\Webp;
use Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob;
use Spatie\MediaLibrary\Downloaders\DefaultDownloader;
use Spatie\MediaLibrary\MediaCollections\FileAdder;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\MediaLibrary\MediaCollections\Models\Observers\MediaObserver;
use Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob;
use Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred;
use Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator;
use Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer;
use Spatie\MediaLibrary\Support\FileRemover\DefaultFileRemover;
use Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator;
use Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator;
use Spatie\MediaLibraryPro\Models\TemporaryUpload;
return [
/*
* The disk on which to store added files and derived images by default. Choose
* one or more of the disks you've configured in config/filesystems.php.
*/
'disk_name' => env('MEDIA_DISK', 'public'),
/*
* The disk on which to store conversions (thumbnails, etc.) and responsive images
* when no disk is specified explicitly on the media collection or via
* `storingConversionsOnDisk()`. When left null, conversions are stored on the
* same disk as the original media — preserving previous behavior.
*
* This is useful when the originals live on a remote disk (e.g. S3) but the
* generated derivatives should stay local for faster access and lower egress.
*/
'conversions_disk_name' => env('MEDIA_CONVERSIONS_DISK', null),
/*
* The maximum file size of an item in bytes.
* Adding a larger file will result in an exception.
*/
'max_file_size' => 1024 * 1024 * 10, // 10MB
/*
* Uploads whose file name contains any of these extensions will be rejected.
* The check looks at every extension in the file name, so a file named
* `malicious.php.jpg` is blocked as well. Matching is case-insensitive
* and a leading dot is optional.
*
* The default list lives on the `FileAdder` class so the shipped config
* and the in-code fallback (used when the config is cached without the
* key) cannot drift. Override here to extend or shrink it.
*/
'disallowed_extensions' => FileAdder::$defaultDisallowedExtensions,
/*
* When this is set to an array of extensions, only uploads whose final
* extension is in the list will be accepted. Matching is case-insensitive
* and a leading dot is optional. The `disallowed_extensions` list above
* is still enforced, so an interior dangerous segment (such as the `php`
* in `shell.php.jpg`) is rejected even if the final extension is allowed.
* Leave `null` to disable allowlisting.
*/
'allowed_extensions' => null,
/*
* This queue connection will be used to generate derived and responsive images.
* Leave empty to use the default queue connection.
*/
'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),
/*
* This queue will be used to generate derived and responsive images.
* Leave empty to use the default queue.
*/
'queue_name' => env('MEDIA_QUEUE', ''),
/*
* By default all conversions will be performed on a queue.
*/
'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),
/*
* Should database transactions be run after database commits?
*/
'queue_conversions_after_database_commit' => env('QUEUE_CONVERSIONS_AFTER_DB_COMMIT', true),
/*
* The fully qualified class name of the media model.
*/
'media_model' => Media::class,
/*
* The fully qualified class name of the media observer.
*/
'media_observer' => MediaObserver::class,
/*
* When enabled, media collections will be serialised using the default
* laravel model serialization behaviour.
*
* Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)
*/
'use_default_collection_serialization' => false,
/*
* The fully qualified class name of the model used for temporary uploads.
*
* This model is only used in Media Library Pro (https://medialibrary.pro)
*/
'temporary_upload_model' => TemporaryUpload::class,
/*
* When enabled, Media Library Pro will only process temporary uploads that were uploaded
* in the same session. You can opt to disable this for stateless usage of
* the pro components.
*/
'enable_temporary_uploads_session_affinity' => true,
/*
* When enabled, Media Library pro will generate thumbnails for uploaded file.
*/
'generate_thumbnails_for_temporary_uploads' => true,
/*
* This is the class that is responsible for naming generated files.
*/
'file_namer' => DefaultFileNamer::class,
/*
* The class that contains the strategy for determining a media file's path.
*/
'path_generator' => DefaultPathGenerator::class,
/*
* The class that contains the strategy for determining how to remove files.
*/
'file_remover_class' => DefaultFileRemover::class,
/*
* Here you can specify which path generator should be used for the given class.
*/
'custom_path_generators' => [
// Model::class => PathGenerator::class
// or
// 'model_morph_alias' => PathGenerator::class
],
/*
* When urls to files get generated, this class will be called. Use the default
* if your files are stored locally above the site root or on s3.
*/
'url_generator' => DefaultUrlGenerator::class,
/*
* Moves media on updating to keep path consistent. Enable it only with a custom
* PathGenerator that uses, for example, the media UUID.
*/
'moves_media_on_update' => false,
/*
* Whether to activate versioning when urls to files get generated.
* When activated, this attaches a ?v=xx query string to the URL.
*/
'version_urls' => false,
/*
* The media library will try to optimize all converted images by removing
* metadata and applying a little bit of compression. These are
* the optimizers that will be used by default.
*/
'image_optimizers' => [
Jpegoptim::class => [
'-m85', // set maximum quality to 85%
'--force', // ensure that progressive generation is always done also if a little bigger
'--strip-all', // this strips out all text information such as comments and EXIF data
'--all-progressive', // this will make sure the resulting image is a progressive one
],
Pngquant::class => [
'--force', // required parameter for this package
],
Optipng::class => [
'-i0', // this will result in a non-interlaced, progressive scanned image
'-o2', // this set the optimization level to two (multiple IDAT compression trials)
'-quiet', // required parameter for this package
],
Svgo::class => [
'--disable=cleanupIDs', // disabling because it is known to cause troubles
],
Gifsicle::class => [
'-b', // required parameter for this package
'-O3', // this produces the slowest but best results
],
Cwebp::class => [
'-m 6', // for the slowest compression method in order to get the best compression.
'-pass 10', // for maximizing the amount of analysis pass.
'-mt', // multithreading for some speed improvements.
'-q 90', // quality factor that brings the least noticeable changes.
],
Avifenc::class => [
'-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).
'-j all', // number of jobs (worker threads, "all" uses all available cores).
'--min 0', // min quantizer for color (0-63).
'--max 63', // max quantizer for color (0-63).
'--minalpha 0', // min quantizer for alpha (0-63).
'--maxalpha 63', // max quantizer for alpha (0-63).
'-a end-usage=q', // rate control mode set to Constant Quality mode.
'-a tune=ssim', // SSIM as tune the encoder for distortion metric.
],
],
/*
* These generators will be used to create an image of media files.
*/
'image_generators' => [
Image::class,
Webp::class,
Avif::class,
Pdf::class,
Svg::class,
Video::class,
],
/*
* The path where to store temporary files while performing image conversions.
* If set to null, storage_path('media-library/temp') will be used.
*/
'temporary_directory_path' => null,
/*
* The engine that should perform the image conversions.
* Should be either `gd`, `imagick` or `vips`.
*/
'image_driver' => env('IMAGE_DRIVER', 'gd'),
/*
* FFMPEG & FFProbe binaries paths, only used if you try to generate video
* thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
* dependency.
*/
'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),
/*
* The timeout (in seconds) that will be used when generating video
* thumbnails via FFMPEG.
*/
'ffmpeg_timeout' => env('FFMPEG_TIMEOUT', 900),
/*
* The number of threads that FFMPEG should use. 0 means that FFMPEG
* may decide itself.
*/
'ffmpeg_threads' => env('FFMPEG_THREADS', 0),
/*
* Here you can override the class names of the jobs used by this package. Make sure
* your custom jobs extend the ones provided by the package.
*/
'jobs' => [
'perform_conversions' => PerformConversionsJob::class,
'generate_responsive_images' => GenerateResponsiveImagesJob::class,
],
/*
* When using the addMediaFromUrl method you may want to replace the default downloader.
* This is particularly useful when the url of the image is behind a firewall and
* need to add additional flags, possibly using curl.
*/
'media_downloader' => DefaultDownloader::class,
/*
* When using the addMediaFromUrl method the SSL is verified by default.
* This is option disables SSL verification when downloading remote media.
* Please note that this is a security risk and should only be false in a local environment.
*/
'media_downloader_ssl' => env('MEDIA_DOWNLOADER_SSL', true),
/*
* The default lifetime in minutes for temporary urls.
* This is used when you call the `getLastTemporaryUrl` or `getLastTemporaryUrl` method on a media item.
*/
'temporary_url_default_lifetime' => env('MEDIA_TEMPORARY_URL_DEFAULT_LIFETIME', 5),
'remote' => [
/*
* Any extra headers that should be included when uploading media to
* a remote disk. Even though supported headers may vary between
* different drivers, a sensible default has been provided.
*
* Supported by S3: CacheControl, Expires, StorageClass,
* ServerSideEncryption, Metadata, ACL, ContentEncoding
*/
'extra_headers' => [
'CacheControl' => 'max-age=604800',
],
],
'responsive_images' => [
/*
* This class is responsible for calculating the target widths of the responsive
* images. By default we optimize for filesize and create variations that each are 30%
* smaller than the previous one. More info in the documentation.
*
* https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
*/
'width_calculator' => FileSizeOptimizedWidthCalculator::class,
/*
* By default rendering media to a responsive image will add some javascript and a tiny placeholder.
* This ensures that the browser can already determine the correct layout.
* When disabled, no tiny placeholder is generated.
*/
'use_tiny_placeholders' => true,
/*
* This class will generate the tiny placeholder used for progressive image loading. By default
* the media library will use a tiny blurred jpg image.
*/
'tiny_placeholder_generator' => Blurred::class,
],
/*
* When enabling this option, a route will be registered that will enable
* the Media Library Pro Vue and React components to move uploaded files
* in a S3 bucket to their right place.
*/
'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),
/*
* When converting Media instances to response the media library will add
* a `loading` attribute to the `img` tag. Here you can set the default
* value of that attribute.
*
* Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
*
* More info: https://css-tricks.com/native-lazy-loading/
*/
'default_loading_attribute_value' => null,
/*
* You can specify a prefix for that is used for storing all media.
* If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
*/
'prefix' => env('MEDIA_PREFIX', ''),
/*
* When forcing lazy loading, media will be loaded even if you don't eager load media and you have
* disabled lazy loading globally in the service provider.
*/
'force_lazy_loading' => env('FORCE_MEDIA_LIBRARY_LAZY_LOADING', true),
];
+224
View File
@@ -0,0 +1,224 @@
<?php
use Laravel\Octane\Contracts\OperationTerminated;
use Laravel\Octane\Events\RequestHandled;
use Laravel\Octane\Events\RequestReceived;
use Laravel\Octane\Events\RequestTerminated;
use Laravel\Octane\Events\TaskReceived;
use Laravel\Octane\Events\TaskTerminated;
use Laravel\Octane\Events\TickReceived;
use Laravel\Octane\Events\TickTerminated;
use Laravel\Octane\Events\WorkerErrorOccurred;
use Laravel\Octane\Events\WorkerStarting;
use Laravel\Octane\Events\WorkerStopping;
use Laravel\Octane\Listeners\CloseMonologHandlers;
use Laravel\Octane\Listeners\CollectGarbage;
use Laravel\Octane\Listeners\DisconnectFromDatabases;
use Laravel\Octane\Listeners\EnsureUploadedFilesAreValid;
use Laravel\Octane\Listeners\EnsureUploadedFilesCanBeMoved;
use Laravel\Octane\Listeners\FlushOnce;
use Laravel\Octane\Listeners\FlushTemporaryContainerInstances;
use Laravel\Octane\Listeners\FlushUploadedFiles;
use Laravel\Octane\Listeners\ReportException;
use Laravel\Octane\Listeners\StopWorkerIfNecessary;
use Laravel\Octane\Octane;
return [
/*
|--------------------------------------------------------------------------
| Octane Server
|--------------------------------------------------------------------------
|
| This value determines the default "server" that will be used by Octane
| when starting, restarting, or stopping your server via the CLI. You
| are free to change this to the supported server of your choosing.
|
| Supported: "roadrunner", "swoole", "frankenphp"
|
*/
'server' => env('OCTANE_SERVER', 'roadrunner'),
/*
|--------------------------------------------------------------------------
| Force HTTPS
|--------------------------------------------------------------------------
|
| When this configuration value is set to "true", Octane will inform the
| framework that all absolute links must be generated using the HTTPS
| protocol. Otherwise your links may be generated using plain HTTP.
|
*/
'https' => env('OCTANE_HTTPS', false),
/*
|--------------------------------------------------------------------------
| Octane Listeners
|--------------------------------------------------------------------------
|
| All of the event listeners for Octane's events are defined below. These
| listeners are responsible for resetting your application's state for
| the next request. You may even add your own listeners to the list.
|
*/
'listeners' => [
WorkerStarting::class => [
EnsureUploadedFilesAreValid::class,
EnsureUploadedFilesCanBeMoved::class,
],
RequestReceived::class => [
...Octane::prepareApplicationForNextOperation(),
...Octane::prepareApplicationForNextRequest(),
//
],
RequestHandled::class => [
//
],
RequestTerminated::class => [
// FlushUploadedFiles::class,
],
TaskReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TaskTerminated::class => [
//
],
TickReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TickTerminated::class => [
//
],
OperationTerminated::class => [
FlushOnce::class,
FlushTemporaryContainerInstances::class,
// DisconnectFromDatabases::class,
// CollectGarbage::class,
],
WorkerErrorOccurred::class => [
ReportException::class,
StopWorkerIfNecessary::class,
],
WorkerStopping::class => [
CloseMonologHandlers::class,
],
],
/*
|--------------------------------------------------------------------------
| Warm / Flush Bindings
|--------------------------------------------------------------------------
|
| The bindings listed below will either be pre-warmed when a worker boots
| or they will be flushed before every new request. Flushing a binding
| will force the container to resolve that binding again when asked.
|
*/
'warm' => [
...Octane::defaultServicesToWarm(),
],
'flush' => [
//
],
/*
|--------------------------------------------------------------------------
| Octane Swoole Tables
|--------------------------------------------------------------------------
|
| While using Swoole, you may define additional tables as required by the
| application. These tables can be used to store data that needs to be
| quickly accessed by other workers on the particular Swoole server.
|
*/
'tables' => [
'example:1000' => [
'name' => 'string:1000',
'votes' => 'int',
],
],
/*
|--------------------------------------------------------------------------
| Octane Swoole Cache Table
|--------------------------------------------------------------------------
|
| While using Swoole, you may leverage the Octane cache, which is powered
| by a Swoole table. You may set the maximum number of rows as well as
| the number of bytes per row using the configuration options below.
|
*/
'cache' => [
'rows' => 1000,
'bytes' => 10000,
],
/*
|--------------------------------------------------------------------------
| File Watching
|--------------------------------------------------------------------------
|
| The following list of files and directories will be watched when using
| the --watch option offered by Octane. If any of the directories and
| files are changed, Octane will automatically reload your workers.
|
*/
'watch' => [
'app',
'bootstrap',
'config/**/*.php',
'database/**/*.php',
'public/**/*.php',
'resources/**/*.php',
'routes',
'composer.lock',
'.env',
],
/*
|--------------------------------------------------------------------------
| Garbage Collection Threshold
|--------------------------------------------------------------------------
|
| When executing long-lived PHP scripts such as Octane, memory can build
| up before being cleared by PHP. You can force Octane to run garbage
| collection if your application consumes this amount of megabytes.
|
*/
'garbage' => 50,
/*
|--------------------------------------------------------------------------
| Maximum Execution Time
|--------------------------------------------------------------------------
|
| The following setting configures the maximum execution time for requests
| being handled by Octane. You may set this value to 0 to indicate that
| there isn't a specific time limit on Octane request execution time.
|
*/
'max_execution_time' => 30,
];
+117
View File
@@ -0,0 +1,117 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Relying Party ID
|--------------------------------------------------------------------------
|
| The relying party ID represents your application in the WebAuthn protocol.
| This is typically your domain (e.g., "example.com"). Passkeys are bound
| to this ID and can only be verified on matching domains.
|
*/
'relying_party_id' => parse_url(config('app.url'), PHP_URL_HOST),
/*
|--------------------------------------------------------------------------
| Allowed Origins
|--------------------------------------------------------------------------
|
| The origins permitted to complete WebAuthn ceremonies. Passkeys bound
| to the relying party ID above will only verify when the browser
| reports one of these origins. Defaults to your application URL.
|
*/
'allowed_origins' => [
config('app.url'),
],
/*
|--------------------------------------------------------------------------
| User Handle Secret
|--------------------------------------------------------------------------
|
| Secret used to derive a stable WebAuthn user handle from each user model.
| Set this explicitly if you rotate your application key.
|
*/
'user_handle_secret' => env('PASSKEYS_USER_HANDLE_SECRET', config('app.key')),
/*
|--------------------------------------------------------------------------
| WebAuthn Timeout
|--------------------------------------------------------------------------
|
| The timeout in milliseconds for WebAuthn operations. This determines
| how long users have to complete passkey registration or verification.
|
*/
'timeout' => 60000,
/*
|--------------------------------------------------------------------------
| Authentication Guard
|--------------------------------------------------------------------------
|
| The authentication guard to use when logging in users with passkeys.
| This should match your application's primary authentication guard.
|
*/
'guard' => 'web',
/*
|--------------------------------------------------------------------------
| Passkeys Routes Middleware
|--------------------------------------------------------------------------
|
| Here you may specify which middleware Passkeys will assign to the routes
| that it registers with the application. If necessary, you may change
| these middleware but typically this provided default is preferred.
|
*/
'middleware' => ['web'],
/*
|--------------------------------------------------------------------------
| Passkeys Management Middleware
|--------------------------------------------------------------------------
|
| Here you may specify the middleware applied to passkey management routes
| that create or delete passkeys. By default, Laravel's password
| confirmation middleware is used.
|
*/
'management_middleware' => ['password.confirm'],
/*
|--------------------------------------------------------------------------
| Passkeys Throttling
|--------------------------------------------------------------------------
|
| Middleware used to throttle passkey endpoints. Set to null to disable.
|
*/
'throttle' => 'throttle:6,1',
/*
|--------------------------------------------------------------------------
| Redirect
|--------------------------------------------------------------------------
|
| The path to redirect to after successful passkey verification.
|
*/
'redirect' => '/',
];
+219
View File
@@ -0,0 +1,219 @@
<?php
use Spatie\Permission\DefaultTeamResolver;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
return [
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
'permission' => Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
'role' => Role::class,
/*
* When using the "Teams" feature from this package, we need to know which
* Eloquent model should be used to retrieve your teams. Of course, it
* is often just the "Team" model but you may use whatever you like.
*/
'team' => null,
/*
* When using the "HasModels" trait and passing raw IDs to syncModels,
* attachModels, or detachModels, this model class will be used to
* resolve those IDs. If null, defaults to the guard's model.
*/
'default_model' => null,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related pivots other than defaults
*/
'role_pivot_key' => null, // default 'role_id',
'permission_pivot_key' => null, // default 'permission_id',
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
/*
* Change this if you want to use the teams feature and your related model's
* foreign key is other than `team_id`.
*/
'team_foreign_key' => 'team_id',
],
/*
* When set to true, the method for checking permissions will be registered on the gate.
* Set this to false if you want to implement custom logic for checking permissions.
*/
'register_permission_check_method' => true,
/*
* When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered
* this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated
* NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it.
*/
'register_octane_reset_listener' => false,
/*
* Events will fire when a role or permission is assigned/unassigned:
* \Spatie\Permission\Events\RoleAttachedEvent
* \Spatie\Permission\Events\RoleDetachedEvent
* \Spatie\Permission\Events\PermissionAttachedEvent
* \Spatie\Permission\Events\PermissionDetachedEvent
*
* To enable, set to true, and then create listeners to watch these events.
*/
'events_enabled' => false,
/*
* Teams Feature.
* When set to true the package implements teams using the 'team_foreign_key'.
* If you want the migrations to register the 'team_foreign_key', you must
* set this to true before doing the migration.
* If you already did the migration then you must make a new migration to also
* add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions'
* (view the latest version of this package's migration file)
*/
'teams' => false,
/*
* The class to use to resolve the permissions team id
*/
'team_resolver' => DefaultTeamResolver::class,
/*
* Passport Client Credentials Grant
* When set to true the package will use Passports Client to check permissions
*/
'use_passport_client_credentials' => false,
/*
* When set to true, the required permission names are added to exception messages.
* This could be considered an information leak in some contexts, so the default
* setting is false here for optimum safety.
*/
'display_permission_in_exception' => false,
/*
* When set to true, the required role names are added to exception messages.
* This could be considered an information leak in some contexts, so the default
* setting is false here for optimum safety.
*/
'display_role_in_exception' => false,
/*
* By default wildcard permission lookups are disabled.
* See documentation to understand supported syntax.
*/
'enable_wildcard_permission' => false,
/*
* The class to use for interpreting wildcard permissions.
* If you need to modify delimiters, override the class and specify its name here.
*/
// 'wildcard_permission' => Spatie\Permission\WildcardPermission::class,
/* Cache-specific settings */
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
];
+200
View File
@@ -0,0 +1,200 @@
<?php
declare(strict_types=1);
use Stancl\Tenancy\Database\Models\Domain;
use Stancl\Tenancy\Database\Models\Tenant;
return [
'tenant_model' => Tenant::class,
'id_generator' => Stancl\Tenancy\UUIDGenerator::class,
'domain_model' => Domain::class,
/**
* The list of domains hosting your central app.
*
* Only relevant if you're using the domain or subdomain identification middleware.
*/
'central_domains' => [
'127.0.0.1',
'localhost',
],
/**
* Tenancy bootstrappers are executed when tenancy is initialized.
* Their responsibility is making Laravel features tenant-aware.
*
* To configure their behavior, see the config keys below.
*/
'bootstrappers' => [
Stancl\Tenancy\Bootstrappers\DatabaseTenancyBootstrapper::class,
Stancl\Tenancy\Bootstrappers\CacheTenancyBootstrapper::class,
Stancl\Tenancy\Bootstrappers\FilesystemTenancyBootstrapper::class,
Stancl\Tenancy\Bootstrappers\QueueTenancyBootstrapper::class,
// Stancl\Tenancy\Bootstrappers\RedisTenancyBootstrapper::class, // Note: phpredis is needed
],
/**
* Database tenancy config. Used by DatabaseTenancyBootstrapper.
*/
'database' => [
'central_connection' => env('DB_CONNECTION', 'central'),
/**
* Connection used as a "template" for the dynamically created tenant database connection.
* Note: don't name your template connection tenant. That name is reserved by package.
*/
'template_tenant_connection' => null,
/**
* Tenant database names are created like this:
* prefix + tenant_id + suffix.
*/
'prefix' => 'tenant',
'suffix' => '',
/**
* TenantDatabaseManagers are classes that handle the creation & deletion of tenant databases.
*/
'managers' => [
'sqlite' => Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager::class,
'mysql' => Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager::class,
'mariadb' => Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager::class,
'pgsql' => Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager::class,
/**
* Use this database manager for MySQL to have a DB user created for each tenant database.
* You can customize the grants given to these users by changing the $grants property.
*/
// 'mysql' => Stancl\Tenancy\TenantDatabaseManagers\PermissionControlledMySQLDatabaseManager::class,
/**
* Disable the pgsql manager above, and enable the one below if you
* want to separate tenant DBs by schemas rather than databases.
*/
// 'pgsql' => Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLSchemaManager::class, // Separate by schema instead of database
],
],
/**
* Cache tenancy config. Used by CacheTenancyBootstrapper.
*
* This works for all Cache facade calls, cache() helper
* calls and direct calls to injected cache stores.
*
* Each key in cache will have a tag applied on it. This tag is used to
* scope the cache both when writing to it and when reading from it.
*
* You can clear cache selectively by specifying the tag.
*/
'cache' => [
'tag_base' => 'tenant', // This tag_base, followed by the tenant_id, will form a tag that will be applied on each cache call.
],
/**
* Filesystem tenancy config. Used by FilesystemTenancyBootstrapper.
* https://tenancyforlaravel.com/docs/v3/tenancy-bootstrappers/#filesystem-tenancy-boostrapper.
*/
'filesystem' => [
/**
* Each disk listed in the 'disks' array will be suffixed by the suffix_base, followed by the tenant_id.
*/
'suffix_base' => 'tenant',
'disks' => [
'local',
'public',
// 's3',
],
/**
* Use this for local disks.
*
* See https://tenancyforlaravel.com/docs/v3/tenancy-bootstrappers/#filesystem-tenancy-boostrapper
*/
'root_override' => [
// Disks whose roots should be overridden after storage_path() is suffixed.
'local' => '%storage_path%/app/',
'public' => '%storage_path%/app/public/',
],
/**
* Should storage_path() be suffixed.
*
* Note: Disabling this will likely break local disk tenancy. Only disable this if you're using an external file storage service like S3.
*
* For the vast majority of applications, this feature should be enabled. But in some
* edge cases, it can cause issues (like using Passport with Vapor - see #196), so
* you may want to disable this if you are experiencing these edge case issues.
*/
'suffix_storage_path' => true,
/**
* By default, asset() calls are made multi-tenant too. You can use global_asset() and mix()
* for global, non-tenant-specific assets. However, you might have some issues when using
* packages that use asset() calls inside the tenant app. To avoid such issues, you can
* disable asset() helper tenancy and explicitly use tenant_asset() calls in places
* where you want to use tenant-specific assets (product images, avatars, etc).
*/
'asset_helper_tenancy' => true,
],
/**
* Redis tenancy config. Used by RedisTenancyBootstrapper.
*
* Note: You need phpredis to use Redis tenancy.
*
* Note: You don't need to use this if you're using Redis only for cache.
* Redis tenancy is only relevant if you're making direct Redis calls,
* either using the Redis facade or by injecting it as a dependency.
*/
'redis' => [
'prefix_base' => 'tenant', // Each key in Redis will be prepended by this prefix_base, followed by the tenant id.
'prefixed_connections' => [ // Redis connections whose keys are prefixed, to separate one tenant's keys from another.
// 'default',
],
],
/**
* Features are classes that provide additional functionality
* not needed for tenancy to be bootstrapped. They are run
* regardless of whether tenancy has been initialized.
*
* See the documentation page for each class to
* understand which ones you want to enable.
*/
'features' => [
// Stancl\Tenancy\Features\UserImpersonation::class,
// Stancl\Tenancy\Features\TelescopeTags::class,
// Stancl\Tenancy\Features\UniversalRoutes::class,
// Stancl\Tenancy\Features\TenantConfig::class, // https://tenancyforlaravel.com/docs/v3/features/tenant-config
// Stancl\Tenancy\Features\CrossDomainRedirect::class, // https://tenancyforlaravel.com/docs/v3/features/cross-domain-redirect
// Stancl\Tenancy\Features\ViteBundler::class,
],
/**
* Should tenancy routes be registered.
*
* Tenancy routes include tenant asset routes. By default, this route is
* enabled. But it may be useful to disable them if you use external
* storage (e.g. S3 / Dropbox) or have a custom asset controller.
*/
'routes' => true,
/**
* Parameters used by the tenants:migrate command.
*/
'migration_parameters' => [
'--force' => true, // This needs to be true to run migrations in production.
'--path' => [database_path('migrations/tenant')],
'--realpath' => true,
],
/**
* Parameters used by the tenants:seed command.
*/
'seeder_parameters' => [
'--class' => 'DatabaseSeeder', // root seeder class
// '--force' => true, // This needs to be true to seed tenant databases in production
],
];
+63
View File
@@ -0,0 +1,63 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Console Commands
|--------------------------------------------------------------------------
|
| This option allows you to add additional Artisan commands that should
| be available within the Tinker environment. Once the command is in
| this array you may execute the command in Tinker using its name.
|
*/
'commands' => [
// App\Console\Commands\ExampleCommand::class,
],
/*
|--------------------------------------------------------------------------
| Auto Aliased Classes
|--------------------------------------------------------------------------
|
| Tinker will not automatically alias classes in your vendor namespaces
| but you may explicitly allow a subset of classes to get aliased by
| adding the names of each of those classes to the following list.
|
*/
'alias' => [
//
],
/*
|--------------------------------------------------------------------------
| Classes That Should Not Be Aliased
|--------------------------------------------------------------------------
|
| Typically, Tinker automatically aliases classes as you require them in
| Tinker. However, you may wish to never alias certain classes, which
| you may accomplish by listing the classes in the following array.
|
*/
'dont_alias' => [
'App\Nova',
],
/*
|--------------------------------------------------------------------------
| Project Trust Mode
|--------------------------------------------------------------------------
|
| PsySH restricts local project features unless your project is trusted.
| Set this to "always" to avoid untrusted project warnings in Tinker.
| Accepted values: "prompt", "always", "never", true, false, null.
|
*/
'trust_project' => env('TINKER_TRUST_PROJECT', 'always'),
];
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTenantsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('tenants', function (Blueprint $table) {
$table->string('id')->primary();
// your custom columns may go here
$table->timestamps();
$table->json('data')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('tenants');
}
}
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDomainsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('domains', function (Blueprint $table) {
$table->increments('id');
$table->string('domain', 255)->unique();
$table->string('tenant_id');
$table->timestamps();
$table->foreign('tenant_id')->references('id')->on('tenants')->onUpdate('cascade')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('domains');
}
}
@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTenantUserImpersonationTokensTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('tenant_user_impersonation_tokens', function (Blueprint $table) {
$table->string('token', 128)->primary();
$table->string('tenant_id');
$table->string('user_id');
$table->string('auth_guard');
$table->string('redirect_url');
$table->timestamp('created_at');
$table->foreign('tenant_id')->references('id')->on('tenants')->onUpdate('cascade')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('tenant_user_impersonation_tokens');
}
}
@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->text('two_factor_secret')
->after('password')
->nullable();
$table->text('two_factor_recovery_codes')
->after('two_factor_secret')
->nullable();
$table->timestamp('two_factor_confirmed_at')
->after('two_factor_recovery_codes')
->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn([
'two_factor_secret',
'two_factor_recovery_codes',
'two_factor_confirmed_at',
]);
});
}
};
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('imports', function (Blueprint $table): void {
$table->id();
$table->timestamp('completed_at')->nullable();
$table->string('file_name');
$table->string('file_path');
$table->string('importer');
$table->unsignedInteger('processed_rows')->default(0);
$table->unsignedInteger('total_rows');
$table->unsignedInteger('successful_rows')->default(0);
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('imports');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('media', function (Blueprint $table) {
$table->id();
$table->morphs('model');
$table->uuid()->nullable()->unique();
$table->string('collection_name');
$table->string('name');
$table->string('file_name');
$table->string('mime_type')->nullable();
$table->string('disk');
$table->string('conversions_disk')->nullable();
$table->unsignedBigInteger('size');
$table->json('manipulations');
$table->json('custom_properties');
$table->json('generated_conversions');
$table->json('responsive_images');
$table->unsignedInteger('order_column')->nullable()->index();
$table->nullableTimestamps();
});
}
};
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('exports', function (Blueprint $table): void {
$table->id();
$table->timestamp('completed_at')->nullable();
$table->string('file_disk');
$table->string('file_name')->nullable();
$table->string('exporter');
$table->unsignedInteger('processed_rows')->default(0);
$table->unsignedInteger('total_rows');
$table->unsignedInteger('successful_rows')->default(0);
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('exports');
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('teams', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->index();
$table->string('name');
$table->boolean('personal_team');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('teams');
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('failed_import_rows', function (Blueprint $table): void {
$table->id();
$table->json('data');
$table->foreignId('import_id')->constrained()->cascadeOnDelete();
$table->text('validation_error')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('failed_import_rows');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('team_user', function (Blueprint $table) {
$table->id();
$table->foreignId('team_id');
$table->foreignId('user_id');
$table->string('role')->nullable();
$table->timestamps();
$table->unique(['team_id', 'user_id']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('team_user');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('team_invitations', function (Blueprint $table) {
$table->id();
$table->foreignId('team_id')->constrained()->cascadeOnDelete();
$table->string('email');
$table->string('role')->nullable();
$table->timestamps();
$table->unique(['team_id', 'email']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('team_invitations');
}
};
+93
View File
@@ -0,0 +1,93 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.0-cli \
php8.0-dev \
php8.0-pgsql \
php8.0-sqlite3 \
php8.0-gd \
php8.0-curl \
php8.0-mongodb \
php8.0-imap \
php8.0-mysql \
php8.0-mbstring \
php8.0-xml \
php8.0-zip \
php8.0-bcmath \
php8.0-soap \
php8.0-intl \
php8.0-readline \
php8.0-ldap \
php8.0-msgpack \
php8.0-igbinary \
php8.0-redis \
php8.0-swoole \
php8.0-memcached \
php8.0-pcov \
php8.0-imagick \
php8.0-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& npm install -g pnpm \
&& npm install -g bun \
&& npx playwright install-deps \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarnkey.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+93
View File
@@ -0,0 +1,93 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.1-cli \
php8.1-dev \
php8.1-pgsql \
php8.1-sqlite3 \
php8.1-gd \
php8.1-curl \
php8.1-mongodb \
php8.1-imap \
php8.1-mysql \
php8.1-mbstring \
php8.1-xml \
php8.1-zip \
php8.1-bcmath \
php8.1-soap \
php8.1-intl \
php8.1-readline \
php8.1-ldap \
php8.1-msgpack \
php8.1-igbinary \
php8.1-redis \
php8.1-swoole \
php8.1-memcached \
php8.1-pcov \
php8.1-imagick \
php8.1-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& npm install -g pnpm \
&& npm install -g bun \
&& npx playwright install-deps \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarnkey.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+90
View File
@@ -0,0 +1,90 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.2-cli \
php8.2-dev \
php8.2-pgsql \
php8.2-sqlite3 \
php8.2-gd \
php8.2-curl \
php8.2-mongodb \
php8.2-imap \
php8.2-mysql \
php8.2-mbstring \
php8.2-xml \
php8.2-zip \
php8.2-bcmath \
php8.2-soap \
php8.2-intl \
php8.2-readline \
php8.2-ldap \
php8.2-msgpack \
php8.2-igbinary \
php8.2-redis \
php8.2-swoole \
php8.2-memcached \
php8.2-pcov \
php8.2-imagick \
php8.2-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm pnpm bun corepack \
&& corepack enable \
&& corepack prepare yarn@stable --activate \
&& npx -y playwright install-deps \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+90
View File
@@ -0,0 +1,90 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.3-cli \
php8.3-dev \
php8.3-pgsql \
php8.3-sqlite3 \
php8.3-gd \
php8.3-curl \
php8.3-mongodb \
php8.3-imap \
php8.3-mysql \
php8.3-mbstring \
php8.3-xml \
php8.3-zip \
php8.3-bcmath \
php8.3-soap \
php8.3-intl \
php8.3-readline \
php8.3-ldap \
php8.3-msgpack \
php8.3-igbinary \
php8.3-redis \
php8.3-swoole \
php8.3-memcached \
php8.3-pcov \
php8.3-imagick \
php8.3-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm pnpm bun corepack \
&& corepack enable \
&& corepack prepare yarn@stable --activate \
&& npx -y playwright install-deps \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+90
View File
@@ -0,0 +1,90 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.4-cli \
php8.4-dev \
php8.4-pgsql \
php8.4-sqlite3 \
php8.4-gd \
php8.4-curl \
php8.4-mongodb \
php8.4-imap \
php8.4-mysql \
php8.4-mbstring \
php8.4-xml \
php8.4-zip \
php8.4-bcmath \
php8.4-soap \
php8.4-intl \
php8.4-readline \
php8.4-ldap \
php8.4-msgpack \
php8.4-igbinary \
php8.4-redis \
php8.4-swoole \
php8.4-memcached \
php8.4-pcov \
php8.4-imagick \
php8.4-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm pnpm bun corepack \
&& corepack enable \
&& corepack prepare yarn@stable --activate \
&& npx -y playwright install-deps \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.4
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.4/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+90
View File
@@ -0,0 +1,90 @@
FROM ubuntu:24.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=24
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=18
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
ENV PLAYWRIGHT_BROWSERS_PATH=0
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt-get update && apt-get upgrade -y \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y \
libgd3 \
php8.5-cli \
php8.5-dev \
php8.5-pgsql \
php8.5-sqlite3 \
php8.5-gd \
php8.5-curl \
php8.5-mongodb \
php8.5-imap \
php8.5-mysql \
php8.5-mbstring \
php8.5-xml \
php8.5-zip \
php8.5-bcmath \
php8.5-soap \
php8.5-intl \
php8.5-readline \
php8.5-ldap \
php8.5-msgpack \
php8.5-igbinary \
php8.5-redis \
php8.5-swoole \
php8.5-memcached \
php8.5-pcov \
php8.5-imagick \
php8.5-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm pnpm bun corepack \
&& corepack enable \
&& corepack prepare yarn@stable --activate \
&& npx -y playwright install-deps \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.5
RUN userdel -r ubuntu
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
RUN git config --global --add safe.directory /var/www/html
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.5/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+14
View File
@@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
/usr/bin/mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
CREATE DATABASE IF NOT EXISTS testing;
EOSQL
if [ -n "$MYSQL_USER" ]; then
/usr/bin/mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%';
EOSQL
fi
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
mysql --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
CREATE DATABASE IF NOT EXISTS testing;
EOSQL
if [ -n "$MYSQL_USER" ]; then
mysql --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%';
EOSQL
fi
+2
View File
@@ -0,0 +1,2 @@
SELECT 'CREATE DATABASE testing'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec
+390
View File
@@ -0,0 +1,390 @@
{
"(and :count more error)": "(und :count weiterer Fehler)",
"(and :count more errors)": "(und :count weiterer Fehler)|(und :count weitere Fehler)|(und :count weitere Fehler)",
"A decryption key is required.": "Ein Entschlüsselungsschlüssel ist nötig.",
"A new verification link has been sent to the email address you provided during registration.": "Ein neuer Bestätigungslink wurde an die E-Mail-Adresse gesendet, die Sie bei der Registrierung angegeben haben.",
"A new verification link has been sent to the email address you provided in your profile settings.": "Ein neuer Bestätigungslink wurde an die E-Mail-Adresse, die in Ihrem Profil hinterlegt ist, gesendet.",
"A new verification link has been sent to your email address.": "Ein neuer Bestätigungslink wurde an Ihre E-Mail-Adresse versendet.",
"A Timeout Occurred": "Eine Zeitüberschreitung ist aufgetreten",
"Accept": "Akzeptieren",
"Accept Invitation": "Einladung annehmen",
"Accepted": "Akzeptiert",
"Action": "Aktion",
"Actions": "Aktionen",
"Add": "Hinzufügen",
"Add :name": ":name hinzufügen",
"Add a new team member to your team, allowing them to collaborate with you.": "Fügen Sie ein neues Teammitglied zu Ihrem Team hinzu und erlauben Sie ihm mit Ihnen zusammenzuarbeiten.",
"Add additional security to your account using two factor authentication.": "Fügen Sie Ihrem Konto zusätzliche Sicherheit hinzu, indem Sie die Zwei-Faktor-Authentifizierung verwenden.",
"Add Team Member": "Teammitglied hinzufügen",
"Added.": "Hinzugefügt.",
"Admin": "Administrator",
"Administrator": "Administrator",
"Administrator users can perform any action.": "Administratoren können jede Aktion durchführen.",
"Agree": "Zustimmen",
"All of the people that are part of this team.": "Alle Personen, die Teil dieses Teams sind.",
"All rights reserved.": "Alle Rechte vorbehalten.",
"Already registered?": "Bereits registriert?",
"Already Reported": "Bereits gemeldet",
"API Token": "API-Token",
"API Token Permissions": "API-Token-Berechtigungen",
"API Tokens": "API-Token",
"API tokens allow third-party services to authenticate with our application on your behalf.": "Mit API-Token können sich Dienste von Drittanbietern in Ihrem Namen bei unserer Anwendung authentifizieren.",
"Archive": "Archiv",
"Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.": "Möchten Sie dieses Team wirklich löschen? Sobald ein Team gelöscht wird, werden alle Ressourcen und Daten dauerhaft gelöscht.",
"Are you sure you want to delete your account?": "Möchten Sie Ihr Konto wirklich löschen?",
"Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Möchten Sie Ihr Konto wirklich löschen? Sobald Ihr Konto gelöscht wurde, werden alle Ressourcen und Daten dauerhaft gelöscht. Bitte geben Sie Ihr Passwort ein, um zu bestätigen, dass Sie Ihr Konto dauerhaft löschen möchten.",
"Are you sure you would like to delete this API token?": "Möchten Sie dieses API-Token wirklich löschen?",
"Are you sure you would like to leave this team?": "Sind Sie sicher, dass Sie dieses Team verlassen möchten?",
"Are you sure you would like to remove this person from the team?": "Sind Sie sicher, dass Sie diese Person aus dem Team entfernen möchten?",
"Assign": "Zuordnen",
"Associate": "Assoziieren",
"Attach": "Anhängen",
"Bad Gateway": "Fehlerhaftes Gateway",
"Bad Request": "Ungültige Anfrage",
"Bandwidth Limit Exceeded": "Bandbreitenlimit überschritten",
"Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Bitte bestätigen Sie Ihre E-Mail-Adresse mit dem zugesandten Link, bevor Sie fortfahren. Sollten Sie keine E-Mail erhalten haben, senden wir Ihnen diese gerne erneut.",
"Browse": "Durchsuchen",
"Browser Sessions": "Browsersitzungen",
"Cancel": "Abbrechen",
"Choose": "Wählen Sie",
"Choose :name": "Wählen Sie :name",
"Choose File": "Datei wählen",
"Choose Image": "Bild wählen",
"Click here to re-send the verification email.": "Klicke hier, um eine neue Verifizierungs-E-Mail zu erhalten.",
"Click to copy": "Klicken Sie zum Kopieren",
"Client Closed Request": "Client hat die Anfrage geschlossen",
"Close": "Schließen",
"Code": "Code",
"Collapse": "Zusammenklappen",
"Collapse All": "Alle zusammenklappen",
"Comment": "Kommentar",
"Confirm": "Bestätigen",
"Confirm Password": "Passwort bestätigen",
"Conflict": "Konflikt",
"Connect": "Verbinden",
"Connection Closed Without Response": "Verbindung ohne Antwort getrennt",
"Connection Timed Out": "Verbindungszeit überschritten",
"Continue": "Weiter",
"Create": "Erstellen",
"Create :name": ":name erstellen",
"Create a new team to collaborate with others on projects.": "Erstellen Sie ein neues Team, um mit anderen an Projekten zusammenzuarbeiten.",
"Create Account": "Neues Konto registrieren",
"Create API Token": "API-Token erstellen",
"Create New Team": "Neues Team erstellen",
"Create Team": "Team erstellen",
"Created": "Erstellt",
"Created.": "Erstellt.",
"Current Password": "Derzeitiges Passwort",
"Dashboard": "Dashboard",
"Delete": "Löschen",
"Delete :name": ":name löschen",
"Delete Account": "Account löschen",
"Delete API Token": "API-Token löschen",
"Delete Team": "Team löschen",
"Detach": "Trennen",
"Details": "Details",
"Disable": "Deaktivieren",
"Discard": "Verwerfen",
"Done": "Erledigt",
"Done.": "Erledigt.",
"Down": "Runter",
"Duplicate": "Duplizieren",
"Duplicate :name": ":name duplizieren",
"Edit": "Bearbeiten",
"Edit :name": ":name bearbeiten",
"Edit Profile": "Profil bearbeiten",
"Editor": "Editor",
"Editor users have the ability to read, create, and update.": "Editor-Benutzer haben die Möglichkeit, zu lesen, zu erstellen und zu aktualisieren.",
"Email": "E-Mail",
"email": ":Attribute muss eine gültige E-Mail-Adresse sein.",
"Email Password Reset Link": "Link zum Zurücksetzen des Passwortes zusenden",
"Enable": "Aktivieren",
"Encrypted environment file already exists.": "Verschlüsselte Umgebungsdatei ist bereits vorhanden.",
"Encrypted environment file not found.": "Verschlüsselte Umgebungsdatei nicht gefunden.",
"Ensure your account is using a long, random password to stay secure.": "Stellen Sie sicher, dass Ihr Konto ein langes, zufälliges Passwort verwendet, um die Sicherheit zu gewährleisten.",
"Environment file already exists.": "Umgebungsdatei ist bereits vorhanden.",
"Environment file not found.": "Umgebungsdatei nicht gefunden.",
"errors": "Fehler",
"Expand": "Erweitern",
"Expand All": "Alle erweitern",
"Expectation Failed": "Erwartung gescheitert",
"Explanation": "Erläuterung",
"Export": "Exportieren",
"Export :name": ":name exportieren",
"Failed Dependency": "Fehlgeschlagene Abhängigkeit",
"File": "Datei",
"Files": "Dateien",
"Finish enabling two factor authentication.": "Aktivierung der Zwei-Faktor-Authentifizierung abschließen.",
"For your security, please confirm your password to continue.": "Um fortzufahren, bestätigen Sie zu Ihrer Sicherheit bitte Ihr Passwort.",
"Forbidden": "Verboten",
"Forgot your password?": "Passwort vergessen?",
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "Haben Sie Ihr Passwort vergessen? Kein Problem. Teilen Sie uns einfach Ihre E-Mail-Adresse mit und wir senden Ihnen per E-Mail einen Link zum Zurücksetzen des Passworts, über den Sie ein Neues auswählen können.",
"Found": "Gefunden",
"Gateway Timeout": "Gateway-Zeitüberschreitung",
"Go Home": "Zur Startseite",
"Go to page :page": "Gehe zur Seite :page",
"Gone": "Nicht mehr verfügbar",
"Great! You have accepted the invitation to join the :team team.": "Großartig! Sie haben die Einladung zur Teilnahme am :team angenommen.",
"Hello!": "Hallo!",
"Hide": "Verstecken",
"Hide :name": ":name ausblenden",
"Home": "Startseite",
"HTTP Version Not Supported": "HTTP Version nicht unterstützt",
"I agree to the :terms_of_service and :privacy_policy": "Ich akzeptiere die :terms_of_service und die :privacy_policy",
"I'm a teapot": "Ich bin eine Teekanne",
"If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.": "Bei Bedarf können Sie sich von allen anderen Browsersitzungen auf allen Ihren Geräten abmelden. Einige Ihrer letzten Sitzungen sind unten aufgelistet, diese Liste ist jedoch möglicherweise nicht vollständig. Wenn Sie der Meinung sind, dass Ihr Konto kompromittiert wurde, sollten Sie auch Ihr Kennwort aktualisieren.",
"If you already have an account, you may accept this invitation by clicking the button below:": "Wenn Sie bereits ein Konto haben, können Sie diese Einladung annehmen, indem Sie auf die Schaltfläche unten klicken:",
"If you did not create an account, no further action is required.": "Wenn Sie kein Konto erstellt haben, sind keine weiteren Handlungen nötig.",
"If you did not expect to receive an invitation to this team, you may discard this email.": "Wenn Sie keine Einladung zu diesem Team erwartet haben, kann die E-Mail gelöscht werden.",
"If you did not request a password reset, no further action is required.": "Wenn Sie kein Zurücksetzen des Passworts beantragt haben, sind keine weiteren Handlungen nötig.",
"If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:": "Wenn Sie kein Konto haben, können Sie ein Konto erstellen, indem Sie auf die Schaltfläche unten klicken. Nach dem Erstellen eines Kontos können Sie in dieser E-Mail auf die Schaltfläche zur Annahme der Einladung klicken, um die Teameinladung anzunehmen:",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Sollten Sie Schwierigkeiten haben, die Schaltfläche \":actionText\" zu klicken, kopieren Sie den nachfolgenden Link\n in Ihre Adresszeile des Browsers.",
"IM Used": "IM verwendet",
"Image": "Bild",
"Impersonate": "Imitieren",
"Impersonation": "Identitätswechsel",
"Import": "Importieren",
"Import :name": "Importieren Sie :name",
"Insufficient Storage": "Nicht genügend Speicherplatz",
"Internal Server Error": "Interner Serverfehler",
"Introduction": "Einführung",
"Invalid credential format.": "Ungültiges Format der Anmeldedaten.",
"Invalid filename.": "Ungültiger Dateiname.",
"Invalid JSON was returned from the route.": "Von der Route wurde ein ungültiger JSON-Code zurückgegeben.",
"Invalid SSL Certificate": "Ungültiges SSL-Zertifikat",
"Last active": "Zuletzt aktiv",
"Last used": "Zuletzt verwendet",
"Leave": "Verlassen",
"Leave Team": "Team verlassen",
"length": "Länge",
"Length Required": "Längenangabe erforderlich",
"Like": "Wie",
"Load": "Belastung",
"Localize": "Lokalisieren",
"Location": "Standort",
"Locked": "Gesperrt",
"Log In": "Einloggen",
"Log in": "Einloggen",
"Log Out": "Abmelden",
"Log Out Other Browser Sessions": "Andere Browser-Sitzungen abmelden",
"Login": "Anmelden",
"Logout": "Abmelden",
"Loop Detected": "Endlosschleife erkannt",
"Maintenance Mode": "Wartungsmodus",
"Manage Account": "Account verwalten",
"Manage and log out your active sessions on other browsers and devices.": "Verwalten und Abmelden Ihrer aktiven Sitzungen in anderen Browsern und auf anderen Geräten.",
"Manage API Tokens": "API-Token verwalten",
"Manage Role": "Rolle verwalten",
"Manage Team": "Team verwalten",
"Method Not Allowed": "Methode nicht erlaubt",
"Misdirected Request": "Fehlgeleitete Anfrage",
"Moved Permanently": "Permanent verschoben",
"Multi-Status": "Multistatus",
"Multiple Choices": "Mehrere Auswahlmöglichkeiten",
"Name": "Name",
"name": "name",
"Network Authentication Required": "Netzwerkauthentifizierung erforderlich",
"Network Connect Timeout Error": "Zeitüberschreitungsfehler bei Netzwerkverbindung",
"Network Read Timeout Error": "Zeitüberschreitungsfehler beim Lesen des Netzwerks",
"New": "Neu",
"New :name": "Neu :name",
"New Password": "Neues Passwort",
"No": "Nein",
"No Content": "Kein Inhalt",
"Non-Authoritative Information": "Nicht maßgebende Informationen",
"Not Acceptable": "Nicht akzeptierbar",
"Not Extended": "Nicht erweitert",
"Not Found": "Nicht gefunden",
"Not Implemented": "Nicht implementiert",
"Not Modified": "Nicht modifiziert",
"of": "von",
"OK": "OK",
"Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.": "Sobald ein Team gelöscht wird, werden alle Ressourcen und Daten dauerhaft gelöscht. Laden Sie vor dem Löschen dieses Teams alle Daten oder Informationen zu diesem Team herunter, die Sie behalten möchten.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Sobald Ihr Konto gelöscht wurde, werden alle Ressourcen und Daten dauerhaft gelöscht. Laden Sie vor dem Löschen Ihres Kontos alle Daten oder Informationen herunter, die Sie behalten möchten.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Sobald Ihr Konto gelöscht wurde, werden alle Ressourcen und Daten dauerhaft gelöscht. Bitte geben Sie Ihr Passwort zur Bestätigung ein, dass Sie Ihr Konto dauerhaft löschen möchten.",
"Open": "Offen",
"Open in a current window": "In einem aktuellen Fenster öffnen",
"Open in a new window": "In einem neuen Fenster öffnen",
"Open in a parent frame": "In einem übergeordneten Frame öffnen",
"Open in the topmost frame": "Im obersten Rahmen öffnen",
"Open on the website": "Auf der Website öffnen",
"Origin Is Unreachable": "Quelle ist nicht erreichbar",
"Page Expired": "Seite abgelaufen",
"Pagination Navigation": "Seiten-Navigation",
"Partial Content": "Teilinhalt",
"Passkey not recognized. It may have been removed from your account.": "Passkey wurde nicht erkannt. Er wurde möglicherweise von Ihrem Konto entfernt.",
"Passkey registration session expired. Please try again.": "Die Sitzung zur Passkey-Registrierung ist abgelaufen. Bitte versuchen Sie es erneut.",
"Passkey verification session expired. Please try again.": "Die Sitzung zur Passkey-Bestätigung ist abgelaufen. Bitte versuchen Sie es erneut.",
"Password": "Passwort",
"password": "Das Passwort ist falsch.",
"Payload Too Large": "Nutzlast zu groß",
"Payment Required": "Zahlung erforderlich",
"Pending Team Invitations": "Ausstehende Team Einladungen",
"Permanent Redirect": "Permanente Weiterleitung",
"Permanently delete this team.": "Löschen Sie dieses Team dauerhaft.",
"Permanently delete your account.": "Löschen Sie Ihren Account dauerhaft.",
"Permissions": "Berechtigungen",
"Photo": "Foto",
"Please click the button below to verify your email address.": "Bitte klicken Sie auf die Schaltfläche, um Ihre E-Mail-Adresse zu bestätigen.",
"Please confirm access to your account by entering one of your emergency recovery codes.": "Bitte bestätigen Sie den Zugriff auf Ihr Konto, indem Sie einen Ihrer Notfall-Wiederherstellungscodes eingeben.",
"Please confirm access to your account by entering the authentication code provided by your authenticator application.": "Bitte bestätigen Sie den Zugriff auf Ihr Konto, indem Sie den von Ihrer Authentifizierungsanwendung bereitgestellten Authentifizierungscode eingeben.",
"Please copy your new API token. For your security, it won't be shown again.": "Bitte kopieren Sie Ihren neuen API-Token. Zu Ihrer Sicherheit wird er nicht mehr angezeigt",
"Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.": "Bitte geben Sie Ihr Passwort ein, um zu bestätigen, dass Sie sich von Ihren anderen Browser-Sitzungen auf allen Ihren Geräten abmelden möchten.",
"Please provide the email address of the person you would like to add to this team.": "Bitte geben Sie die E-Mail-Adresse der Person an, die Sie diesem Team hinzufügen möchten.",
"Precondition Failed": "Vorbedingung fehlgeschlagen",
"Precondition Required": "Voraussetzung erforderlich",
"Preview": "Vorschau",
"Price": "Preis",
"Privacy Policy": "Datenschutzerklärung",
"Processing": "In Bearbeitung",
"Profile": "Profil",
"Profile Information": "Profilinformationen",
"Proxy Authentication Required": "Proxy-Authentifizierung erforderlich",
"Railgun Error": "Railgun-Fehler",
"Range Not Satisfiable": "Bereich nicht erfüllbar",
"Record": "Aufzeichnen",
"Recovery Code": "Wiederherstellungscode",
"Regards,": "Mit freundlichen Grüßen,",
"Regenerate Recovery Codes": "Wiederherstellungscodes neu generieren",
"Register": "Registrieren",
"Remember me": "Angemeldet bleiben",
"Remove": "Entfernen",
"Remove Photo": "Foto entfernen",
"Remove Team Member": "Teammitglied entfernen",
"Request Header Fields Too Large": "Anfrage-Header-Felder zu groß",
"Request Timeout": "Zeitüberschreitung der Anfrage",
"Resend Verification Email": "Bestätigungslink erneut senden",
"Reset Content": "Inhalt zurücksetzen",
"Reset Password": "Passwort zurücksetzen",
"Reset your password": "Setzen Sie Ihr Passwort zurück",
"Restore": "Wiederherstellen",
"Restore :name": ":name wiederherstellen",
"results": "Ergebnissen",
"Retry With": "Wiederhole mit",
"Role": "Rolle",
"Save": "Speichern",
"Save & Close": "Speichern und schließen",
"Save & Return": "Speichern und zurückgeben",
"Save :name": "Sparen Sie :name",
"Saved.": "Gespeichert.",
"Search": "Suchen",
"Search :name": "Suche :name",
"See Other": "Siehe andere Seite",
"Select": "Wählen Sie",
"Select A New Photo": "Wählen Sie ein neues Foto aus",
"Select All": "Wählen Sie Alle",
"Send": "Schicken",
"Server Error": "Interner Fehler",
"Service Unavailable": "Service nicht verfügbar",
"Session Has Expired": "Sitzung ist abgelaufen",
"Settings": "Einstellungen",
"Setup Key": "Einrichtungsschlüssel",
"Show": "Zeigen",
"Show :name": ":name anzeigen",
"Show All": "Zeige alles",
"Show Recovery Codes": "Zeige die Wiederherstellungscodes",
"Showing": "Zeige",
"Sign In": "Anmelden",
"Solve": "Lösen",
"SSL Handshake Failed": "SSL Handshake fehlgeschlagen",
"Start": "Starten",
"Stop": "Stoppen",
"Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.": "Speichern Sie diese Wiederherstellungscodes in einem sicheren Passwortmanager. Sie können verwendet werden, um den Zugriff auf Ihr Konto wiederherzustellen, wenn Ihr Zwei-Faktor-Authentifizierungsgerät verloren geht.",
"Submit": "Einreichen",
"Subscribe": "Abonnieren",
"Switch": "Wechseln",
"Switch Teams": "Teams wechseln",
"Switch To Role": "Zur Rolle wechseln",
"Switching Protocols": "Protokollwechsel",
"Tag": "Stichwort",
"Tags": "Stichworte",
"Team Details": "Teamdetails",
"Team Invitation": "Teameinladung",
"Team Members": "Teammitglieder",
"Team Name": "Teamname",
"Team Owner": "Teambesitzer",
"Team Settings": "Teameinstellungen",
"Temporary Redirect": "Temporäre Weiterleitung",
"Terms of Service": "Nutzungsbedingungen",
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Vielen Dank für Ihre Registrierung! Bevor Sie loslegen, möchten wir Sie bitten Ihre E-Mail-Adresse zu verifizieren, indem Sie auf den Link klicken, den wir Ihnen per E-Mail zugeschickt haben. Wenn Sie die E-Mail nicht erhalten haben, senden wir Ihnen gerne eine weitere zu.",
"The :attribute must be a valid role.": ":Attribute muss eine gültige Rolle sein.",
"The :attribute must be at least :length characters and contain at least one number.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens eine Zahl enthalten.",
"The :attribute must be at least :length characters and contain at least one special character and one number.": ":Attribute muss mindestens :length Zeichen lang sein und mindestens ein Sonderzeichen und eine Zahl enthalten.",
"The :attribute must be at least :length characters and contain at least one special character.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens ein Sonderzeichen enthalten.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one number.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens einen Großbuchstaben und eine Zahl enthalten.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one special character.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens einen Großbuchstaben und ein Sonderzeichen enthalten.",
"The :attribute must be at least :length characters and contain at least one uppercase character, one number, and one special character.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens einen Großbuchstaben, eine Zahl und ein Sonderzeichen enthalten.",
"The :attribute must be at least :length characters and contain at least one uppercase character.": ":Attribute muss aus mindestens :length Zeichen bestehen und mindestens einen Großbuchstaben enthalten.",
"The :attribute must be at least :length characters.": ":Attribute muss aus mindestens :length Zeichen bestehen.",
"The given data was invalid.": "Die gegebenen Daten waren ungültig.",
"The password is incorrect.": "Das Passwort ist falsch.",
"The provided password does not match your current password.": "Das angegebene Passwort stimmt nicht mit Ihrem aktuellen Passwort überein.",
"The provided password was incorrect.": "Das angegebene Passwort war falsch.",
"The provided two factor authentication code was invalid.": "Der angegebene Zwei-Faktor-Authentifizierungscode war ungültig.",
"The provided two factor recovery code was invalid.": "Der angegebene Zwei-Faktor-Wiederherstellungscode war ungültig.",
"The response is not a streamed response.": "Die Antwort ist keine gestreamte Antwort.",
"The response is not a view.": "Die Antwort ist keine Ansicht.",
"The team's name and owner information.": "Teamname und Informationen zum Besitzer.",
"These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.": "Diese Personen wurden zu Ihrem Team eingeladen und haben eine Einladungs-E-Mail erhalten. Sie können dem Team beitreten, indem sie die E-Mail-Einladung annehmen.",
"This action is unauthorized.": "Diese Aktion ist nicht autorisiert.",
"This device": "Dieses Gerät",
"This is a secure area of the application. Please confirm your password before continuing.": "Dies ist ein sicherer Bereich der Anwendung. Bitte geben Sie Ihr Passwort ein, bevor Sie fortfahren.",
"This password does not match our records.": "Dieses Passwort ist uns nicht bekannt.",
"This password reset link will expire in :count minutes.": "Dieser Link zum Zurücksetzen des Passworts läuft in :count Minuten ab.",
"This user already belongs to the team.": "Dieser Benutzer gehört bereits zum Team.",
"This user has already been invited to the team.": "Dieser Benutzer wurde bereits in dieses Team eingeladen.",
"to": "bis",
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "Um die Aktivierung der Zwei-Faktor-Authentifizierung abzuschließen, scannen Sie den folgenden QR-Code mit der Authentifizierungsanwendung Ihres Smartphones oder geben Sie den Einrichtungsschlüssel ein und geben Sie den generierten OTP-Code ein.",
"Toggle navigation": "Navigation umschalten",
"Token Name": "Tokenname",
"Too Early": "Zu früh",
"Too Many Requests": "Zu viele Anfragen",
"Translate": "Übersetzen",
"Translate It": "Übersetze es",
"Two Factor Authentication": "Zwei-Faktor-Authentifizierung",
"Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.": "Die Zwei-Faktor-Authentifizierung ist jetzt aktiviert. Scannen Sie den folgenden QR-Code mit der Authentifizierungsanwendung Ihres Smartphones oder geben Sie den Einrichtungsschlüssel ein.",
"Unable to register passkey. Please try again.": "Passkey konnte nicht registriert werden. Bitte versuchen Sie es erneut.",
"Unable to register this passkey.": "Dieser Passkey kann nicht registriert werden.",
"Unable to sign in with this account.": "Anmeldung mit diesem Konto nicht möglich.",
"Unable to verify passkey. Please try again.": "Passkey konnte nicht verifiziert werden. Bitte versuchen Sie es erneut.",
"Unauthorized": "Nicht autorisiert",
"Unavailable For Legal Reasons": "Aus rechtlichen Gründen nicht verfügbar",
"Unknown": "Unbekannt",
"Unknown Error": "Unbekannter Fehler",
"Unpack": "Auspacken",
"Unprocessable Entity": "Unverarbeitbare Entität",
"Unsubscribe": "Abbestellen",
"Unsupported Media Type": "Nicht unterstützter Medientyp",
"Up": "Hoch",
"Update": "Aktualisieren",
"Update :name": ":name aktualisieren",
"Update Password": "Passwort aktualisieren",
"Update your account's profile information and email address.": "Aktualisieren Sie die Profilinformationen und die E-Mail-Adresse Ihres Kontos.",
"Upgrade Required": "Upgrade erforderlich",
"URI Too Long": "URI ist zu lang",
"Use a recovery code": "Verwenden Sie einen Wiederherstellungscode",
"Use an authentication code": "Verwenden Sie einen Authentifizierungscode",
"Use Proxy": "Proxy verwenden",
"User": "Benutzer",
"Variant Also Negotiates": "Variante verhandelt ebenfalls",
"Verify Email Address": "E-Mail-Adresse bestätigen",
"Verify your email address": "Bestätigen Sie Ihre E-Mail-Adresse",
"View": "Ansicht",
"View :name": "Ansicht :name",
"We were unable to find a registered user with this email address.": "Wir konnten keinen registrierten Benutzer mit dieser E-Mail-Adresse finden.",
"Web Server is Down": "Webserver ist ausgefallen",
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.": "Wenn die Zwei-Faktor-Authentifizierung aktiviert ist, werden Sie während der Authentifizierung zur Eingabe eines sicheren, zufälligen Tokens aufgefordert. Sie können dieses Token in der Google Authenticator-Anwendung Ihres Telefons abrufen.",
"Whoops!": "Ups!",
"Whoops! Something went wrong.": "Ups, etwas ist schief gelaufen.",
"Yes": "Ja",
"You are receiving this email because we received a password reset request for your account.": "Sie erhalten diese E-Mail, weil wir einen Antrag auf eine Zurücksetzung Ihres Passworts bekommen haben.",
"You have been invited to join the :team team!": "Sie wurden eingeladen dem Team :team beizutreten!",
"You have enabled two factor authentication.": "Sie haben die Zwei-Faktor-Authentifizierung aktiviert.",
"You have not enabled two factor authentication.": "Sie haben die Zwei-Faktor-Authentifizierung nicht aktiviert.",
"You may accept this invitation by clicking the button below:": "Sie können diese Einladung annehmen, indem Sie auf die Schaltfläche unten klicken:",
"You may delete any of your existing tokens if they are no longer needed.": "Sie können alle vorhandenen Token löschen, wenn sie nicht mehr benötigt werden.",
"You may not delete your personal team.": "Sie können Ihr persönliches Team nicht löschen.",
"You may not leave a team that you created.": "Sie können ein von Ihnen erstelltes Team nicht verlassen.",
"You're logged in!": "Sie sind eingeloggt!",
"Your email address is unverified.": "Ihre E-Mail-Adresse ist nicht verifiziert."
}
+119
View File
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Akzeptieren',
'action' => 'Aktion',
'actions' => 'Aktionen',
'add' => 'Hinzufügen',
'admin' => 'Administrator',
'agree' => 'Zustimmen',
'archive' => 'Archiv',
'assign' => 'Zuordnen',
'associate' => 'Assoziieren',
'attach' => 'Anfügen',
'browse' => 'Durchsuche',
'cancel' => 'Stornieren',
'choose' => 'Wählen',
'choose_file' => 'Datei wählen',
'choose_image' => 'Wählen Sie Bild',
'click_to_copy' => 'Klicken Sie zum Kopieren',
'close' => 'Schließen',
'collapse' => 'Zusammenbruch',
'collapse_all' => 'Alles reduzieren',
'comment' => 'Kommentar',
'confirm' => 'Bestätigen',
'connect' => 'Verbinden',
'create' => 'Erstellen',
'delete' => 'Löschen',
'detach' => 'Ablösen',
'details' => 'Einzelheiten',
'disable' => 'Deaktivieren',
'discard' => 'Verwerfen',
'done' => 'Erledigt',
'down' => 'Runter',
'duplicate' => 'Duplikat',
'edit' => 'Bearbeiten',
'enable' => 'Aktivieren',
'expand' => 'Expandieren',
'expand_all' => 'Alle erweitern',
'explanation' => 'Erläuterung',
'export' => 'Exportieren',
'file' => 'Datei',
'files' => 'Dateien',
'go_home' => 'Nach Hause gehen',
'hide' => 'Verstecken',
'home' => 'Heim',
'image' => 'Bild',
'impersonate' => 'Imitieren',
'impersonation' => 'Identitätswechsel',
'import' => 'Importieren',
'introduction' => 'Einführung',
'like' => 'Wie',
'load' => 'Belastung',
'localize' => 'Lokalisieren',
'log_in' => 'Anmeldung',
'log_out' => 'Ausloggen',
'named' => [
'add' => ':name hinzufügen',
'choose' => ':name auswählen',
'create' => ':name erstellen',
'delete' => ':name löschen',
'duplicate' => ':name duplizieren',
'edit' => ':name bearbeiten',
'export' => ':name exportieren',
'hide' => ':name ausblenden',
'import' => ':name importieren',
'new' => 'Neu :name',
'restore' => ':name wiederherstellen',
'save' => ':name speichern',
'search' => ':name suchen',
'show' => ':name anzeigen',
'update' => ':name aktualisieren',
'view' => ':name anzeigen',
],
'new' => 'Neu',
'no' => 'Nein',
'open' => 'Öffen',
'open_website' => 'Auf der Website öffnen',
'preview' => 'Vorschau',
'price' => 'Preis',
'record' => 'Aufzeichnen',
'restore' => 'Wiederherstellen',
'save' => 'Speichern',
'save_and_close' => 'Speichern und schließen',
'save_and_return' => 'Speichern und zurückgehen',
'search' => 'Suchen',
'select' => 'Wählen',
'select_all' => 'Alles auswählen',
'send' => 'Absenden',
'settings' => 'Einstellungen',
'show' => 'Anzeigen',
'show_all' => 'Alles anzeigen',
'sign_in' => 'Anmelden',
'solve' => 'Lösen',
'start' => 'Starten',
'stop' => 'Stoppen',
'submit' => 'Absenden',
'subscribe' => 'Abonnieren',
'switch' => 'Umschalten',
'switch_to_role' => 'Zur Rolle wechseln',
'tag' => 'Schlagwort',
'tags' => 'Stichworte',
'target_link' => [
'blank' => 'In einem neuen Fenster öffnen',
'parent' => 'In einem übergeordneten Frame öffnen',
'self' => 'In einem aktuellen Fenster öffnen',
'top' => 'Im obersten Rahmen öffnen',
],
'translate' => 'Übersetzen',
'translate_it' => 'Übersetze es',
'unpack' => 'Entpacken',
'unsubscribe' => 'Abbestellen',
'up' => 'Hoch',
'update' => 'Aktualisieren',
'user' => 'Benutzer',
'view' => 'Ansicht',
'yes' => 'Ja',
];
+9
View File
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Diese Kombination aus Zugangsdaten wurde nicht in unserer Datenbank gefunden.',
'password' => 'Das Passwort ist falsch.',
'throttle' => 'Zu viele Loginversuche. Versuchen Sie es bitte in :seconds Sekunden nochmal.',
];
+84
View File
@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Unbekannter Fehler',
'100' => 'Weiter',
'101' => 'Protokollwechsel',
'102' => 'In Bearbeitung',
'200' => 'OK',
'201' => 'Erstellt',
'202' => 'Akzeptiert',
'203' => 'Nicht verifizierte Information',
'204' => 'Kein Inhalt',
'205' => 'Inhalt zurücksetzen',
'206' => 'Teilinhalt',
'207' => 'Multistatus',
'208' => 'Bereits gemeldet',
'226' => 'IM verwendet',
'300' => 'Mehrere Auswahlmöglichkeiten',
'301' => 'Permanent verschoben',
'302' => 'Gefunden',
'303' => 'Siehe andere Seite',
'304' => 'Nicht modifiziert',
'305' => 'Proxy verwenden',
'307' => 'Temporäre Weiterleitung',
'308' => 'Permanente Weiterleitung',
'400' => 'Ungültige Anfrage',
'401' => 'Nicht autorisiert',
'402' => 'Zahlung erforderlich',
'403' => 'Verboten',
'404' => 'Nicht gefunden',
'405' => 'Methode nicht erlaubt',
'406' => 'Nicht annehmbar',
'407' => 'Proxy-Authentifizierung erforderlich',
'408' => 'Zeitüberschreitung der Anfrage',
'409' => 'Konflikt',
'410' => 'Nicht mehr verfügbar',
'411' => 'Länge erforderlich',
'412' => 'Vorbedingung fehlgeschlagen',
'413' => 'Nutzlast zu groß',
'414' => 'URI zu lang',
'415' => 'Nicht unterstützter Medientyp',
'416' => 'Bereich nicht erfüllbar',
'417' => 'Erwartung gescheitert',
'418' => 'Ich bin eine Teekanne',
'419' => 'Sitzung ist abgelaufen',
'421' => 'Fehlgeleitete Anfrage',
'422' => 'Unverarbeitbare Entität',
'423' => 'Gesperrt',
'424' => 'Fehlgeschlagene Abhängigkeit',
'425' => 'Zu früh',
'426' => 'Upgrade erforderlich',
'428' => 'Voraussetzung erforderlich',
'429' => 'Zu viele Anfragen',
'431' => 'Anfrage-Header-Felder zu groß',
'444' => 'Verbindung ohne Antwort geschlossen',
'449' => 'Wiederhole mit',
'451' => 'Aus rechtlichen Gründen nicht verfügbar',
'499' => 'Client-Closed-Request',
'500' => 'Interner Serverfehler',
'501' => 'Nicht implementiert',
'502' => 'Fehlerhaftes Gateway',
'503' => 'Wartungsmodus',
'504' => 'Gateway-Zeitüberschreitung',
'505' => 'HTTP Version nicht unterstützt',
'506' => 'Variante verhandelt auch',
'507' => 'Nicht genügend Speicherplatz',
'508' => 'Endlosschleife erkannt',
'509' => 'Bandbreitenlimit überschritten',
'510' => 'Nicht erweitert',
'511' => 'Netzwerkauthentifizierung erforderlich',
'520' => 'Unbekannter Fehler',
'521' => 'Webserver ist ausgefallen',
'522' => 'Verbindung abgelaufen',
'523' => 'Quelle ist nicht erreichbar',
'524' => 'Eine Zeitüberschreitung ist aufgetreten',
'525' => 'SSL Handshake fehlgeschlagen',
'526' => 'Ungültiges SSL-Zertifikat',
'527' => 'Railgun-Fehler',
'598' => 'Zeitüberschreitungsfehler beim Lesen des Netzwerks',
'599' => 'Zeitüberschreitungsfehler bei Netzwerkverbindung',
'unknownError' => 'Unbekannter Fehler',
];
+8
View File
@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Weiter &raquo;',
'previous' => '&laquo; Zurück',
];
+11
View File
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Das Passwort wurde zurückgesetzt!',
'sent' => 'E-Mail zum Zurücksetzen des Passworts wurde gesendet!',
'throttled' => 'Bitte warten Sie, bevor Sie es erneut versuchen.',
'token' => 'Der Passwort-Wiederherstellungsschlüssel ist ungültig oder abgelaufen.',
'user' => 'Es konnte leider kein Nutzer mit dieser E-Mail-Adresse gefunden werden.',
];
+288
View File
@@ -0,0 +1,288 @@
<?php
declare(strict_types=1);
return [
'accepted' => ':Attribute muss akzeptiert werden.',
'accepted_if' => ':Attribute muss akzeptiert werden, wenn :other :value ist.',
'active_url' => ':Attribute ist keine gültige Internet-Adresse.',
'after' => ':Attribute muss ein Datum nach :date sein.',
'after_or_equal' => ':Attribute muss ein Datum nach :date oder gleich :date sein.',
'alpha' => ':Attribute darf nur aus Buchstaben bestehen.',
'alpha_dash' => ':Attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen.',
'alpha_num' => ':Attribute darf nur aus Buchstaben und Zahlen bestehen.',
'any_of' => ':Attribute ist ungültig.',
'array' => ':Attribute muss ein Array sein.',
'ascii' => 'Die :attribute darf nur alphanumerische Single-Byte-Zeichen und -Symbole enthalten.',
'before' => ':Attribute muss ein Datum vor :date sein.',
'before_or_equal' => ':Attribute muss ein Datum vor :date oder gleich :date sein.',
'between' => [
'array' => ':Attribute muss zwischen :min & :max Elemente haben.',
'file' => ':Attribute muss zwischen :min & :max Kilobytes groß sein.',
'numeric' => ':Attribute muss zwischen :min & :max liegen.',
'string' => ':Attribute muss zwischen :min & :max Zeichen lang sein.',
],
'boolean' => ':Attribute muss entweder \'true\' oder \'false\' sein.',
'can' => 'Das Feld :attribute enthält einen nicht autorisierten Wert.',
'confirmed' => ':Attribute stimmt nicht mit der Bestätigung überein.',
'contains' => 'Dem Feld :attribute fehlt ein erforderlicher Wert.',
'current_password' => 'Das Passwort ist falsch.',
'date' => ':Attribute muss ein gültiges Datum sein.',
'date_equals' => ':Attribute muss ein Datum gleich :date sein.',
'date_format' => ':Attribute entspricht nicht dem gültigen Format für :format.',
'decimal' => 'Die :attribute muss :decimal Dezimalstellen haben.',
'declined' => ':Attribute muss abgelehnt werden.',
'declined_if' => ':Attribute muss abgelehnt werden wenn :other :value ist.',
'different' => ':Attribute und :other müssen sich unterscheiden.',
'digits' => ':Attribute muss :digits Stellen haben.',
'digits_between' => ':Attribute muss zwischen :min und :max Stellen haben.',
'dimensions' => ':Attribute hat ungültige Bildabmessungen.',
'distinct' => ':Attribute beinhaltet einen bereits vorhandenen Wert.',
'doesnt_contain' => ':Attribute darf keines der folgenden enthalten: :values.',
'doesnt_end_with' => ':Attribute darf nicht mit einem der folgenden enden: :values.',
'doesnt_start_with' => ':Attribute darf nicht mit einem der folgenden beginnen: :values.',
'email' => ':Attribute muss eine gültige E-Mail-Adresse sein.',
'encoding' => ':Attribute muss als :encoding kodiert sein.',
'ends_with' => ':Attribute muss eine der folgenden Endungen aufweisen: :values',
'enum' => 'Der ausgewählte Wert ist ungültig.',
'exists' => 'Der gewählte Wert für :attribute ist ungültig.',
'extensions' => 'Das Feld :attribute muss eine der folgenden Erweiterungen haben: :values.',
'file' => ':Attribute muss eine Datei sein.',
'filled' => ':Attribute muss ausgefüllt sein.',
'gt' => [
'array' => ':Attribute muss mehr als :value Elemente haben.',
'file' => ':Attribute muss größer als :value Kilobytes sein.',
'numeric' => ':Attribute muss größer als :value sein.',
'string' => ':Attribute muss länger als :value Zeichen sein.',
],
'gte' => [
'array' => ':Attribute muss mindestens :value Elemente haben.',
'file' => ':Attribute muss größer oder gleich :value Kilobytes sein.',
'numeric' => ':Attribute muss größer oder gleich :value sein.',
'string' => ':Attribute muss mindestens :value Zeichen lang sein.',
],
'hex_color' => 'Das Feld :attribute muss eine gültige Hexadezimalfarbe sein.',
'image' => ':Attribute muss ein Bild sein.',
'in' => 'Der gewählte Wert für :attribute ist ungültig.',
'in_array' => 'Der gewählte Wert für :attribute kommt nicht in :other vor.',
'in_array_keys' => 'Das Feld :Attribute muss mindestens einen der folgenden Schlüssel enthalten: :Values.',
'integer' => ':Attribute muss eine ganze Zahl sein.',
'ip' => ':Attribute muss eine gültige IP-Adresse sein.',
'ipv4' => ':Attribute muss eine gültige IPv4-Adresse sein.',
'ipv6' => ':Attribute muss eine gültige IPv6-Adresse sein.',
'json' => ':Attribute muss ein gültiger JSON-String sein.',
'list' => ':Attribute muss eine Liste sein.',
'lowercase' => ':Attribute muss in Kleinbuchstaben sein.',
'lt' => [
'array' => ':Attribute muss weniger als :value Elemente haben.',
'file' => ':Attribute muss kleiner als :value Kilobytes sein.',
'numeric' => ':Attribute muss kleiner als :value sein.',
'string' => ':Attribute muss kürzer als :value Zeichen sein.',
],
'lte' => [
'array' => ':Attribute darf maximal :value Elemente haben.',
'file' => ':Attribute muss kleiner oder gleich :value Kilobytes sein.',
'numeric' => ':Attribute muss kleiner oder gleich :value sein.',
'string' => ':Attribute darf maximal :value Zeichen lang sein.',
],
'mac_address' => 'Der Wert muss eine gültige MAC-Adresse sein.',
'max' => [
'array' => ':Attribute darf maximal :max Elemente haben.',
'file' => ':Attribute darf maximal :max Kilobytes groß sein.',
'numeric' => ':Attribute darf maximal :max sein.',
'string' => ':Attribute darf maximal :max Zeichen haben.',
],
'max_digits' => ':Attribute darf maximal :max Ziffern lang sein.',
'mimes' => ':Attribute muss den Dateityp :values haben.',
'mimetypes' => ':Attribute muss den Dateityp :values haben.',
'min' => [
'array' => ':Attribute muss mindestens :min Elemente haben.',
'file' => ':Attribute muss mindestens :min Kilobytes groß sein.',
'numeric' => ':Attribute muss mindestens :min sein.',
'string' => ':Attribute muss mindestens :min Zeichen lang sein.',
],
'min_digits' => ':Attribute muss mindestens :min Ziffern lang sein.',
'missing' => 'Das Feld :attribute muss fehlen.',
'missing_if' => 'Das Feld :attribute muss fehlen, wenn :other gleich :value ist.',
'missing_unless' => 'Das Feld :attribute muss fehlen, es sei denn, :other ist :value.',
'missing_with' => 'Das Feld :attribute muss fehlen, wenn :values vorhanden ist.',
'missing_with_all' => 'Das Feld :attribute muss fehlen, wenn :values vorhanden sind.',
'multiple_of' => ':Attribute muss ein Vielfaches von :value sein.',
'not_in' => 'Der gewählte Wert für :attribute ist ungültig.',
'not_regex' => ':Attribute hat ein ungültiges Format.',
'numeric' => ':Attribute muss eine Zahl sein.',
'password' => [
'letters' => ':Attribute muss mindestens einen Buchstaben beinhalten.',
'mixed' => ':Attribute muss mindestens einen Großbuchstaben und einen Kleinbuchstaben beinhalten.',
'numbers' => ':Attribute muss mindestens eine Zahl beinhalten.',
'symbols' => ':Attribute muss mindestens ein Sonderzeichen beinhalten.',
'uncompromised' => ':Attribute wurde in einem Datenleck gefunden. Bitte wählen Sie ein anderes :attribute.',
],
'present' => ':Attribute muss vorhanden sein.',
'present_if' => 'Das Feld :attribute muss vorhanden sein, wenn :other gleich :value ist.',
'present_unless' => 'Das Feld :attribute muss vorhanden sein, es sei denn, :other ist :value.',
'present_with' => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden ist.',
'present_with_all' => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden sind.',
'prohibited' => ':Attribute ist unzulässig.',
'prohibited_if' => ':Attribute ist unzulässig, wenn :other :value ist.',
'prohibited_if_accepted' => 'Das Feld :attribute ist unzulässig, wenn :other gewählt ist.',
'prohibited_if_declined' => 'Das Feld :attribute ist unzulässig, wenn :other abgelehnt ist.',
'prohibited_unless' => ':Attribute ist unzulässig, wenn :other nicht :values ist.',
'prohibits' => ':Attribute verbietet die Angabe von :other.',
'regex' => ':Attribute Format ist ungültig.',
'required' => ':Attribute muss ausgefüllt werden.',
'required_array_keys' => 'Dieses Feld muss Einträge enthalten für: :values.',
'required_if' => ':Attribute muss ausgefüllt werden, wenn :other den Wert :value hat.',
'required_if_accepted' => ':Attribute muss ausgefüllt werden, wenn :other gewählt ist.',
'required_if_declined' => 'Das Feld :attribute ist erforderlich, wenn :other abgelehnt wird.',
'required_unless' => ':Attribute muss ausgefüllt werden, wenn :other nicht den Wert :values hat.',
'required_with' => ':Attribute muss ausgefüllt werden, wenn :values ausgefüllt wurde.',
'required_with_all' => ':Attribute muss ausgefüllt werden, wenn :values ausgefüllt wurde.',
'required_without' => ':Attribute muss ausgefüllt werden, wenn :values nicht ausgefüllt wurde.',
'required_without_all' => ':Attribute muss ausgefüllt werden, wenn keines der Felder :values ausgefüllt wurde.',
'same' => ':Attribute und :other müssen übereinstimmen.',
'size' => [
'array' => ':Attribute muss genau :size Elemente haben.',
'file' => ':Attribute muss :size Kilobyte groß sein.',
'numeric' => ':Attribute muss gleich :size sein.',
'string' => ':Attribute muss :size Zeichen lang sein.',
],
'starts_with' => ':Attribute muss mit einem der folgenden Anfänge aufweisen: :values',
'string' => ':Attribute muss ein String sein.',
'timezone' => ':Attribute muss eine gültige Zeitzone sein.',
'ulid' => 'Die :attribute muss eine gültige ULID sein.',
'unique' => ':Attribute ist bereits vergeben.',
'uploaded' => ':Attribute konnte nicht hochgeladen werden.',
'uppercase' => ':Attribute muss in Großbuchstaben sein.',
'url' => ':Attribute muss eine URL sein.',
'uuid' => ':Attribute muss ein UUID sein.',
'attributes' => [
'address' => 'Adresse',
'affiliate_url' => 'Affiliate-URL',
'age' => 'Alter',
'amount' => 'Höhe',
'announcement' => 'Bekanntmachung',
'area' => 'Gebiet',
'audience_prize' => 'Publikumspreis',
'audience_winner' => 'Publikumsgewinner',
'available' => 'Verfügbar',
'birthday' => 'Geburtstag',
'body' => 'Körper',
'city' => 'Stadt',
'color' => 'Farbe',
'company' => 'Unternehmen',
'compilation' => 'Zusammenstellung',
'concept' => 'Konzept',
'conditions' => 'Bedingungen',
'content' => 'Inhalt',
'contest' => 'Wettbewerb',
'country' => 'Land',
'cover' => 'Abdeckung',
'created_at' => 'Erstellt am',
'creator' => 'Ersteller',
'currency' => 'Währung',
'current_password' => 'Derzeitiges Passwort',
'customer' => 'Kunde',
'date' => 'Datum',
'date_of_birth' => 'Geburtsdatum',
'dates' => 'Termine',
'day' => 'Tag',
'deleted_at' => 'Gelöscht am',
'description' => 'Beschreibung',
'display_type' => 'Anzeigetyp',
'district' => 'Bezirk',
'duration' => 'Dauer',
'email' => 'E-Mail-Adresse',
'excerpt' => 'Auszug',
'filter' => 'Filter',
'finished_at' => 'fertig um',
'first_name' => 'Vorname',
'gender' => 'Geschlecht',
'grand_prize' => 'Hauptpreis',
'group' => 'Gruppe',
'hour' => 'Stunde',
'image' => 'Bild',
'image_desktop' => 'Desktop-Bild',
'image_main' => 'Hauptbild',
'image_mobile' => 'mobiles Bild',
'images' => 'Bilder',
'is_audience_winner' => 'ist Publikumssieger',
'is_hidden' => 'ist versteckt',
'is_subscribed' => 'ist abonniert',
'is_visible' => 'ist sichtbar',
'is_winner' => 'ist Gewinner',
'items' => 'Artikel',
'key' => 'Schlüssel',
'last_name' => 'Nachname',
'lesson' => 'Lektion',
'line_address_1' => 'Adresszeile 1',
'line_address_2' => 'Adresszeile 2',
'login' => 'Anmeldung',
'message' => 'Nachricht',
'middle_name' => 'Zweitname',
'minute' => 'Minute',
'mobile' => 'Handynummer',
'month' => 'Monat',
'name' => 'Name',
'national_code' => 'Länderkennung',
'number' => 'Nummer',
'password' => 'Passwort',
'password_confirmation' => 'Passwortbestätigung',
'phone' => 'Telefonnummer',
'photo' => 'Foto',
'portfolio' => 'Portfolio',
'postal_code' => 'Postleitzahl',
'preview' => 'Vorschau',
'price' => 'Preis',
'product_id' => 'Produkt ID',
'product_uid' => 'Produkt-UID',
'product_uuid' => 'Produkt-UUID',
'promo_code' => 'Aktionscode',
'province' => 'Provinz',
'quantity' => 'Menge',
'reason' => 'Grund',
'recaptcha_response_field' => 'Captcha-Feld',
'referee' => 'Schiedsrichter',
'referees' => 'Schiedsrichter',
'region' => 'Region',
'reject_reason' => 'Ablehnungsgrund',
'remember' => 'Erinnern',
'restored_at' => 'Wiederhergestellt am',
'result_text_under_image' => 'Ergebnistext unter Bild',
'role' => 'Rolle',
'rule' => 'Regel',
'rules' => 'Regeln',
'second' => 'Sekunde',
'sex' => 'Geschlecht',
'shipment' => 'Sendung',
'short_text' => 'Kurzer Text',
'size' => 'Größe',
'skills' => 'Fähigkeiten',
'slug' => 'Schnecke',
'specialization' => 'Spezialisierung',
'started_at' => 'fing an bei',
'state' => 'Bundesland',
'status' => 'Status',
'street' => 'Straße',
'student' => 'Schüler/Student',
'subject' => 'Gegenstand',
'tag' => 'Etikett',
'tags' => 'Stichworte',
'teacher' => 'Lehrer',
'terms' => 'Bedingungen',
'test_description' => 'Test Beschreibung',
'test_locale' => 'Test Region',
'test_name' => 'Testname',
'text' => 'Text',
'time' => 'Uhrzeit',
'title' => 'Titel',
'type' => 'Typ',
'updated_at' => 'Aktualisiert am',
'user' => 'Benutzer',
'username' => 'Benutzername',
'value' => 'Wert',
'winner' => 'Gewinner',
'work' => 'Arbeit',
'year' => 'Jahr',
],
];
+390
View File
@@ -0,0 +1,390 @@
{
"(and :count more error)": "(and :count more error)",
"(and :count more errors)": "(and :count more error)|(and :count more errors)|(and :count more errors)",
"A decryption key is required.": "A decryption key is required.",
"A new verification link has been sent to the email address you provided during registration.": "A new verification link has been sent to the email address you provided during registration.",
"A new verification link has been sent to the email address you provided in your profile settings.": "A new verification link has been sent to the email address you provided in your profile settings.",
"A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.",
"A Timeout Occurred": "A Timeout Occurred",
"Accept": "Accept",
"Accept Invitation": "Accept Invitation",
"Accepted": "Accepted",
"Action": "Action",
"Actions": "Actions",
"Add": "Add",
"Add :name": "Add :name",
"Add a new team member to your team, allowing them to collaborate with you.": "Add a new team member to your team, allowing them to collaborate with you.",
"Add additional security to your account using two factor authentication.": "Add additional security to your account using two factor authentication.",
"Add Team Member": "Add Team Member",
"Added.": "Added.",
"Admin": "Admin",
"Administrator": "Administrator",
"Administrator users can perform any action.": "Administrator users can perform any action.",
"Agree": "Agree",
"All of the people that are part of this team.": "All of the people that are part of this team.",
"All rights reserved.": "All rights reserved.",
"Already registered?": "Already registered?",
"Already Reported": "Already Reported",
"API Token": "API Token",
"API Token Permissions": "API Token Permissions",
"API Tokens": "API Tokens",
"API tokens allow third-party services to authenticate with our application on your behalf.": "API tokens allow third-party services to authenticate with our application on your behalf.",
"Archive": "Archive",
"Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.": "Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.",
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
"Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.",
"Are you sure you would like to delete this API token?": "Are you sure you would like to delete this API token?",
"Are you sure you would like to leave this team?": "Are you sure you would like to leave this team?",
"Are you sure you would like to remove this person from the team?": "Are you sure you would like to remove this person from the team?",
"Assign": "Assign",
"Associate": "Associate",
"Attach": "Attach",
"Bad Gateway": "Bad Gateway",
"Bad Request": "Bad Request",
"Bandwidth Limit Exceeded": "Bandwidth Limit Exceeded",
"Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.",
"Browse": "Browse",
"Browser Sessions": "Browser Sessions",
"Cancel": "Cancel",
"Choose": "Choose",
"Choose :name": "Choose :name",
"Choose File": "Choose File",
"Choose Image": "Choose Image",
"Click here to re-send the verification email.": "Click here to re-send the verification email.",
"Click to copy": "Click to copy",
"Client Closed Request": "Client Closed Request",
"Close": "Close",
"Code": "Code",
"Collapse": "Collapse",
"Collapse All": "Collapse All",
"Comment": "Comment",
"Confirm": "Confirm",
"Confirm Password": "Confirm Password",
"Conflict": "Conflict",
"Connect": "Connect",
"Connection Closed Without Response": "Connection Closed Without Response",
"Connection Timed Out": "Connection Timed Out",
"Continue": "Continue",
"Create": "Create",
"Create :name": "Create :name",
"Create a new team to collaborate with others on projects.": "Create a new team to collaborate with others on projects.",
"Create Account": "Create Account",
"Create API Token": "Create API Token",
"Create New Team": "Create New Team",
"Create Team": "Create Team",
"Created": "Created",
"Created.": "Created.",
"Current Password": "Current Password",
"Dashboard": "Dashboard",
"Delete": "Delete",
"Delete :name": "Delete :name",
"Delete Account": "Delete Account",
"Delete API Token": "Delete API Token",
"Delete Team": "Delete Team",
"Detach": "Detach",
"Details": "Details",
"Disable": "Disable",
"Discard": "Discard",
"Done": "Done",
"Done.": "Done.",
"Down": "Down",
"Duplicate": "Duplicate",
"Duplicate :name": "Duplicate :name",
"Edit": "Edit",
"Edit :name": "Edit :name",
"Edit Profile": "Edit Profile",
"Editor": "Editor",
"Editor users have the ability to read, create, and update.": "Editor users have the ability to read, create, and update.",
"Email": "Email",
"email": "The :attribute field must be a valid email address.",
"Email Password Reset Link": "Email Password Reset Link",
"Enable": "Enable",
"Encrypted environment file already exists.": "Encrypted environment file already exists.",
"Encrypted environment file not found.": "Encrypted environment file not found.",
"Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.",
"Environment file already exists.": "Environment file already exists.",
"Environment file not found.": "Environment file not found.",
"errors": "errors",
"Expand": "Expand",
"Expand All": "Expand All",
"Expectation Failed": "Expectation Failed",
"Explanation": "Explanation",
"Export": "Export",
"Export :name": "Export :name",
"Failed Dependency": "Failed Dependency",
"File": "File",
"Files": "Files",
"Finish enabling two factor authentication.": "Finish enabling two factor authentication.",
"For your security, please confirm your password to continue.": "For your security, please confirm your password to continue.",
"Forbidden": "Forbidden",
"Forgot your password?": "Forgot your password?",
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.",
"Found": "Found",
"Gateway Timeout": "Gateway Timeout",
"Go Home": "Go Home",
"Go to page :page": "Go to page :page",
"Gone": "Gone",
"Great! You have accepted the invitation to join the :team team.": "Great! You have accepted the invitation to join the :team team.",
"Hello!": "Hello!",
"Hide": "Hide",
"Hide :name": "Hide :name",
"Home": "Home",
"HTTP Version Not Supported": "HTTP Version Not Supported",
"I agree to the :terms_of_service and :privacy_policy": "I agree to the :terms_of_service and :privacy_policy",
"I'm a teapot": "I'm a teapot",
"If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.": "If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.",
"If you already have an account, you may accept this invitation by clicking the button below:": "If you already have an account, you may accept this invitation by clicking the button below:",
"If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.",
"If you did not expect to receive an invitation to this team, you may discard this email.": "If you did not expect to receive an invitation to this team, you may discard this email.",
"If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
"If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:": "If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:",
"IM Used": "IM Used",
"Image": "Image",
"Impersonate": "Impersonate",
"Impersonation": "Impersonation",
"Import": "Import",
"Import :name": "Import :name",
"Insufficient Storage": "Insufficient Storage",
"Internal Server Error": "Internal Server Error",
"Introduction": "Introduction",
"Invalid credential format.": "Invalid credential format.",
"Invalid filename.": "Invalid filename.",
"Invalid JSON was returned from the route.": "Invalid JSON was returned from the route.",
"Invalid SSL Certificate": "Invalid SSL Certificate",
"Last active": "Last active",
"Last used": "Last used",
"Leave": "Leave",
"Leave Team": "Leave Team",
"length": "length",
"Length Required": "Length Required",
"Like": "Like",
"Load": "Load",
"Localize": "Localize",
"Location": "Location",
"Locked": "Locked",
"Log In": "Log In",
"Log in": "Log in",
"Log Out": "Log Out",
"Log Out Other Browser Sessions": "Log Out Other Browser Sessions",
"Login": "Login",
"Logout": "Logout",
"Loop Detected": "Loop Detected",
"Maintenance Mode": "Maintenance Mode",
"Manage Account": "Manage Account",
"Manage and log out your active sessions on other browsers and devices.": "Manage and log out your active sessions on other browsers and devices.",
"Manage API Tokens": "Manage API Tokens",
"Manage Role": "Manage Role",
"Manage Team": "Manage Team",
"Method Not Allowed": "Method Not Allowed",
"Misdirected Request": "Misdirected Request",
"Moved Permanently": "Moved Permanently",
"Multi-Status": "Multi-Status",
"Multiple Choices": "Multiple Choices",
"Name": "Name",
"name": "name",
"Network Authentication Required": "Network Authentication Required",
"Network Connect Timeout Error": "Network Connect Timeout Error",
"Network Read Timeout Error": "Network Read Timeout Error",
"New": "New",
"New :name": "New :name",
"New Password": "New Password",
"No": "No",
"No Content": "No Content",
"Non-Authoritative Information": "Non-Authoritative Information",
"Not Acceptable": "Not Acceptable",
"Not Extended": "Not Extended",
"Not Found": "Not Found",
"Not Implemented": "Not Implemented",
"Not Modified": "Not Modified",
"of": "of",
"OK": "OK",
"Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.": "Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.",
"Open": "Open",
"Open in a current window": "Open in a current window",
"Open in a new window": "Open in a new window",
"Open in a parent frame": "Open in a parent frame",
"Open in the topmost frame": "Open in the topmost frame",
"Open on the website": "Open on the website",
"Origin Is Unreachable": "Origin Is Unreachable",
"Page Expired": "Page Expired",
"Pagination Navigation": "Pagination Navigation",
"Partial Content": "Partial Content",
"Passkey not recognized. It may have been removed from your account.": "Passkey not recognized. It may have been removed from your account.",
"Passkey registration session expired. Please try again.": "Passkey registration session expired. Please try again.",
"Passkey verification session expired. Please try again.": "Passkey verification session expired. Please try again.",
"Password": "Password",
"password": "The provided password is incorrect.",
"Payload Too Large": "Payload Too Large",
"Payment Required": "Payment Required",
"Pending Team Invitations": "Pending Team Invitations",
"Permanent Redirect": "Permanent Redirect",
"Permanently delete this team.": "Permanently delete this team.",
"Permanently delete your account.": "Permanently delete your account.",
"Permissions": "Permissions",
"Photo": "Photo",
"Please click the button below to verify your email address.": "Please click the button below to verify your email address.",
"Please confirm access to your account by entering one of your emergency recovery codes.": "Please confirm access to your account by entering one of your emergency recovery codes.",
"Please confirm access to your account by entering the authentication code provided by your authenticator application.": "Please confirm access to your account by entering the authentication code provided by your authenticator application.",
"Please copy your new API token. For your security, it won't be shown again.": "Please copy your new API token. For your security, it won't be shown again.",
"Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.": "Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.",
"Please provide the email address of the person you would like to add to this team.": "Please provide the email address of the person you would like to add to this team.",
"Precondition Failed": "Precondition Failed",
"Precondition Required": "Precondition Required",
"Preview": "Preview",
"Price": "Price",
"Privacy Policy": "Privacy Policy",
"Processing": "Processing",
"Profile": "Profile",
"Profile Information": "Profile Information",
"Proxy Authentication Required": "Proxy Authentication Required",
"Railgun Error": "Railgun Error",
"Range Not Satisfiable": "Range Not Satisfiable",
"Record": "Record",
"Recovery Code": "Recovery Code",
"Regards,": "Regards,",
"Regenerate Recovery Codes": "Regenerate Recovery Codes",
"Register": "Register",
"Remember me": "Remember me",
"Remove": "Remove",
"Remove Photo": "Remove Photo",
"Remove Team Member": "Remove Team Member",
"Request Header Fields Too Large": "Request Header Fields Too Large",
"Request Timeout": "Request Timeout",
"Resend Verification Email": "Resend Verification Email",
"Reset Content": "Reset Content",
"Reset Password": "Reset Password",
"Reset your password": "Reset your password",
"Restore": "Restore",
"Restore :name": "Restore :name",
"results": "results",
"Retry With": "Retry With",
"Role": "Role",
"Save": "Save",
"Save & Close": "Save & Close",
"Save & Return": "Save & Return",
"Save :name": "Save :name",
"Saved.": "Saved.",
"Search": "Search",
"Search :name": "Search :name",
"See Other": "See Other",
"Select": "Select",
"Select A New Photo": "Select A New Photo",
"Select All": "Select All",
"Send": "Send",
"Server Error": "Server Error",
"Service Unavailable": "Service Unavailable",
"Session Has Expired": "Session Has Expired",
"Settings": "Settings",
"Setup Key": "Setup Key",
"Show": "Show",
"Show :name": "Show :name",
"Show All": "Show All",
"Show Recovery Codes": "Show Recovery Codes",
"Showing": "Showing",
"Sign In": "Sign In",
"Solve": "Solve",
"SSL Handshake Failed": "SSL Handshake Failed",
"Start": "Start",
"Stop": "Stop",
"Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.": "Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.",
"Submit": "Submit",
"Subscribe": "Subscribe",
"Switch": "Switch",
"Switch Teams": "Switch Teams",
"Switch To Role": "Switch To Role",
"Switching Protocols": "Switching Protocols",
"Tag": "Tag",
"Tags": "Tags",
"Team Details": "Team Details",
"Team Invitation": "Team Invitation",
"Team Members": "Team Members",
"Team Name": "Team Name",
"Team Owner": "Team Owner",
"Team Settings": "Team Settings",
"Temporary Redirect": "Temporary Redirect",
"Terms of Service": "Terms of Service",
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.",
"The :attribute must be a valid role.": "The :attribute must be a valid role.",
"The :attribute must be at least :length characters and contain at least one number.": "The :attribute must be at least :length characters and contain at least one number.",
"The :attribute must be at least :length characters and contain at least one special character and one number.": "The :attribute must be at least :length characters and contain at least one special character and one number.",
"The :attribute must be at least :length characters and contain at least one special character.": "The :attribute must be at least :length characters and contain at least one special character.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one number.": "The :attribute must be at least :length characters and contain at least one uppercase character and one number.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one special character.": "The :attribute must be at least :length characters and contain at least one uppercase character and one special character.",
"The :attribute must be at least :length characters and contain at least one uppercase character, one number, and one special character.": "The :attribute must be at least :length characters and contain at least one uppercase character, one number, and one special character.",
"The :attribute must be at least :length characters and contain at least one uppercase character.": "The :attribute must be at least :length characters and contain at least one uppercase character.",
"The :attribute must be at least :length characters.": "The :attribute must be at least :length characters.",
"The given data was invalid.": "The given data was invalid.",
"The password is incorrect.": "The password is incorrect.",
"The provided password does not match your current password.": "The provided password does not match your current password.",
"The provided password was incorrect.": "The provided password was incorrect.",
"The provided two factor authentication code was invalid.": "The provided two factor authentication code was invalid.",
"The provided two factor recovery code was invalid.": "The provided two factor recovery code was invalid.",
"The response is not a streamed response.": "The response is not a streamed response.",
"The response is not a view.": "The response is not a view.",
"The team's name and owner information.": "The team's name and owner information.",
"These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.": "These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.",
"This action is unauthorized.": "This action is unauthorized.",
"This device": "This device",
"This is a secure area of the application. Please confirm your password before continuing.": "This is a secure area of the application. Please confirm your password before continuing.",
"This password does not match our records.": "This password does not match our records.",
"This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
"This user already belongs to the team.": "This user already belongs to the team.",
"This user has already been invited to the team.": "This user has already been invited to the team.",
"to": "to",
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.",
"Toggle navigation": "Toggle navigation",
"Token Name": "Token Name",
"Too Early": "Too Early",
"Too Many Requests": "Too Many Requests",
"Translate": "Translate",
"Translate It": "Translate It",
"Two Factor Authentication": "Two Factor Authentication",
"Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.": "Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.",
"Unable to register passkey. Please try again.": "Unable to register passkey. Please try again.",
"Unable to register this passkey.": "Unable to register this passkey.",
"Unable to sign in with this account.": "Unable to sign in with this account.",
"Unable to verify passkey. Please try again.": "Unable to verify passkey. Please try again.",
"Unauthorized": "Unauthorized",
"Unavailable For Legal Reasons": "Unavailable For Legal Reasons",
"Unknown": "Unknown",
"Unknown Error": "Unknown Error",
"Unpack": "Unpack",
"Unprocessable Entity": "Unprocessable Entity",
"Unsubscribe": "Unsubscribe",
"Unsupported Media Type": "Unsupported Media Type",
"Up": "Up",
"Update": "Update",
"Update :name": "Update :name",
"Update Password": "Update Password",
"Update your account's profile information and email address.": "Update your account's profile information and email address.",
"Upgrade Required": "Upgrade Required",
"URI Too Long": "URI Too Long",
"Use a recovery code": "Use a recovery code",
"Use an authentication code": "Use an authentication code",
"Use Proxy": "Use Proxy",
"User": "User",
"Variant Also Negotiates": "Variant Also Negotiates",
"Verify Email Address": "Verify Email Address",
"Verify your email address": "Verify your email address",
"View": "View",
"View :name": "View :name",
"We were unable to find a registered user with this email address.": "We were unable to find a registered user with this email address.",
"Web Server is Down": "Web Server is Down",
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.": "When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.",
"Whoops!": "Whoops!",
"Whoops! Something went wrong.": "Whoops! Something went wrong.",
"Yes": "Yes",
"You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.",
"You have been invited to join the :team team!": "You have been invited to join the :team team!",
"You have enabled two factor authentication.": "You have enabled two factor authentication.",
"You have not enabled two factor authentication.": "You have not enabled two factor authentication.",
"You may accept this invitation by clicking the button below:": "You may accept this invitation by clicking the button below:",
"You may delete any of your existing tokens if they are no longer needed.": "You may delete any of your existing tokens if they are no longer needed.",
"You may not delete your personal team.": "You may not delete your personal team.",
"You may not leave a team that you created.": "You may not leave a team that you created.",
"You're logged in!": "You're logged in!",
"Your email address is unverified.": "Your email address is unverified."
}
+119
View File
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Accept',
'action' => 'Action',
'actions' => 'Actions',
'add' => 'Add',
'admin' => 'Admin',
'agree' => 'Agree',
'archive' => 'Archive',
'assign' => 'Assign',
'associate' => 'Associate',
'attach' => 'Attach',
'browse' => 'Browse',
'cancel' => 'Cancel',
'choose' => 'Choose',
'choose_file' => 'Choose File',
'choose_image' => 'Choose Image',
'click_to_copy' => 'Click to copy',
'close' => 'Close',
'collapse' => 'Collapse',
'collapse_all' => 'Collapse All',
'comment' => 'Comment',
'confirm' => 'Confirm',
'connect' => 'Connect',
'create' => 'Create',
'delete' => 'Delete',
'detach' => 'Detach',
'details' => 'Details',
'disable' => 'Disable',
'discard' => 'Discard',
'done' => 'Done',
'down' => 'Down',
'duplicate' => 'Duplicate',
'edit' => 'Edit',
'enable' => 'Enable',
'expand' => 'Expand',
'expand_all' => 'Expand All',
'explanation' => 'Explanation',
'export' => 'Export',
'file' => 'File',
'files' => 'Files',
'go_home' => 'Go Home',
'hide' => 'Hide',
'home' => 'Home',
'image' => 'Image',
'impersonate' => 'Impersonate',
'impersonation' => 'Impersonation',
'import' => 'Import',
'introduction' => 'Introduction',
'like' => 'Like',
'load' => 'Load',
'localize' => 'Localize',
'log_in' => 'Log In',
'log_out' => 'Log Out',
'named' => [
'add' => 'Add :name',
'choose' => 'Choose :name',
'create' => 'Create :name',
'delete' => 'Delete :name',
'duplicate' => 'Duplicate :name',
'edit' => 'Edit :name',
'export' => 'Export :name',
'hide' => 'Hide :name',
'import' => 'Import :name',
'new' => 'New :name',
'restore' => 'Restore :name',
'save' => 'Save :name',
'search' => 'Search :name',
'show' => 'Show :name',
'update' => 'Update :name',
'view' => 'View :name',
],
'new' => 'New',
'no' => 'No',
'open' => 'Open',
'open_website' => 'Open on the website',
'preview' => 'Preview',
'price' => 'Price',
'record' => 'Record',
'restore' => 'Restore',
'save' => 'Save',
'save_and_close' => 'Save & Close',
'save_and_return' => 'Save & Return',
'search' => 'Search',
'select' => 'Select',
'select_all' => 'Select All',
'send' => 'Send',
'settings' => 'Settings',
'show' => 'Show',
'show_all' => 'Show All',
'sign_in' => 'Sign In',
'solve' => 'Solve',
'start' => 'Start',
'stop' => 'Stop',
'submit' => 'Submit',
'subscribe' => 'Subscribe',
'switch' => 'Switch',
'switch_to_role' => 'Switch To Role',
'tag' => 'Tag',
'tags' => 'Tags',
'target_link' => [
'blank' => 'Open in a new window',
'parent' => 'Open in a parent frame',
'self' => 'Open in a current window',
'top' => 'Open in the topmost frame',
],
'translate' => 'Translate',
'translate_it' => 'Translate It',
'unpack' => 'Unpack',
'unsubscribe' => 'Unsubscribe',
'up' => 'Up',
'update' => 'Update',
'user' => 'User',
'view' => 'View',
'yes' => 'Yes',
];
+9
View File
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'These credentials do not match our records.',
'password' => 'The provided password is incorrect.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];
+84
View File
@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Unknown Error',
'100' => 'Continue',
'101' => 'Switching Protocols',
'102' => 'Processing',
'200' => 'OK',
'201' => 'Created',
'202' => 'Accepted',
'203' => 'Non-Authoritative Information',
'204' => 'No Content',
'205' => 'Reset Content',
'206' => 'Partial Content',
'207' => 'Multi-Status',
'208' => 'Already Reported',
'226' => 'IM Used',
'300' => 'Multiple Choices',
'301' => 'Moved Permanently',
'302' => 'Found',
'303' => 'See Other',
'304' => 'Not Modified',
'305' => 'Use Proxy',
'307' => 'Temporary Redirect',
'308' => 'Permanent Redirect',
'400' => 'Bad Request',
'401' => 'Unauthorized',
'402' => 'Payment Required',
'403' => 'Forbidden',
'404' => 'Not Found',
'405' => 'Method Not Allowed',
'406' => 'Not Acceptable',
'407' => 'Proxy Authentication Required',
'408' => 'Request Timeout',
'409' => 'Conflict',
'410' => 'Gone',
'411' => 'Length Required',
'412' => 'Precondition Failed',
'413' => 'Payload Too Large',
'414' => 'URI Too Long',
'415' => 'Unsupported Media Type',
'416' => 'Range Not Satisfiable',
'417' => 'Expectation Failed',
'418' => 'I\'m a teapot',
'419' => 'Session Has Expired',
'421' => 'Misdirected Request',
'422' => 'Unprocessable Entity',
'423' => 'Locked',
'424' => 'Failed Dependency',
'425' => 'Too Early',
'426' => 'Upgrade Required',
'428' => 'Precondition Required',
'429' => 'Too Many Requests',
'431' => 'Request Header Fields Too Large',
'444' => 'Connection Closed Without Response',
'449' => 'Retry With',
'451' => 'Unavailable For Legal Reasons',
'499' => 'Client Closed Request',
'500' => 'Internal Server Error',
'501' => 'Not Implemented',
'502' => 'Bad Gateway',
'503' => 'Maintenance Mode',
'504' => 'Gateway Timeout',
'505' => 'HTTP Version Not Supported',
'506' => 'Variant Also Negotiates',
'507' => 'Insufficient Storage',
'508' => 'Loop Detected',
'509' => 'Bandwidth Limit Exceeded',
'510' => 'Not Extended',
'511' => 'Network Authentication Required',
'520' => 'Unknown Error',
'521' => 'Web Server is Down',
'522' => 'Connection Timed Out',
'523' => 'Origin Is Unreachable',
'524' => 'A Timeout Occurred',
'525' => 'SSL Handshake Failed',
'526' => 'Invalid SSL Certificate',
'527' => 'Railgun Error',
'598' => 'Network Read Timeout Error',
'599' => 'Network Connect Timeout Error',
'unknownError' => 'Unknown Error',
];
+8
View File
@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Next &raquo;',
'previous' => '&laquo; Previous',
];
+11
View File
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Your password has been reset.',
'sent' => 'We have emailed your password reset link.',
'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
'user' => 'We can\'t find a user with that email address.',
];
+288
View File
@@ -0,0 +1,288 @@
<?php
declare(strict_types=1);
return [
'accepted' => 'The :attribute field must be accepted.',
'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
'active_url' => 'The :attribute field must be a valid URL.',
'after' => 'The :attribute field must be a date after :date.',
'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
'alpha' => 'The :attribute field must only contain letters.',
'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
'alpha_num' => 'The :attribute field must only contain letters and numbers.',
'any_of' => 'The :attribute field is invalid.',
'array' => 'The :attribute field must be an array.',
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
'before' => 'The :attribute field must be a date before :date.',
'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
'between' => [
'array' => 'The :attribute field must have between :min and :max items.',
'file' => 'The :attribute field must be between :min and :max kilobytes.',
'numeric' => 'The :attribute field must be between :min and :max.',
'string' => 'The :attribute field must be between :min and :max characters.',
],
'boolean' => 'The :attribute field must be true or false.',
'can' => 'The :attribute field contains an unauthorized value.',
'confirmed' => 'The :attribute field confirmation does not match.',
'contains' => 'The :attribute field is missing a required value.',
'current_password' => 'The password is incorrect.',
'date' => 'The :attribute field must be a valid date.',
'date_equals' => 'The :attribute field must be a date equal to :date.',
'date_format' => 'The :attribute field must match the format :format.',
'decimal' => 'The :attribute field must have :decimal decimal places.',
'declined' => 'The :attribute field must be declined.',
'declined_if' => 'The :attribute field must be declined when :other is :value.',
'different' => 'The :attribute field and :other must be different.',
'digits' => 'The :attribute field must be :digits digits.',
'digits_between' => 'The :attribute field must be between :min and :max digits.',
'dimensions' => 'The :attribute field has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'doesnt_contain' => 'The :attribute field must not contain any of the following: :values.',
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
'email' => 'The :attribute field must be a valid email address.',
'encoding' => 'The :attribute field must be encoded in :encoding.',
'ends_with' => 'The :attribute field must end with one of the following: :values.',
'enum' => 'The selected :attribute is invalid.',
'exists' => 'The selected :attribute is invalid.',
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
'file' => 'The :attribute field must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'array' => 'The :attribute field must have more than :value items.',
'file' => 'The :attribute field must be greater than :value kilobytes.',
'numeric' => 'The :attribute field must be greater than :value.',
'string' => 'The :attribute field must be greater than :value characters.',
],
'gte' => [
'array' => 'The :attribute field must have :value items or more.',
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be greater than or equal to :value.',
'string' => 'The :attribute field must be greater than or equal to :value characters.',
],
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
'image' => 'The :attribute field must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field must exist in :other.',
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
'integer' => 'The :attribute field must be an integer.',
'ip' => 'The :attribute field must be a valid IP address.',
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
'json' => 'The :attribute field must be a valid JSON string.',
'list' => 'The :attribute field must be a list.',
'lowercase' => 'The :attribute field must be lowercase.',
'lt' => [
'array' => 'The :attribute field must have less than :value items.',
'file' => 'The :attribute field must be less than :value kilobytes.',
'numeric' => 'The :attribute field must be less than :value.',
'string' => 'The :attribute field must be less than :value characters.',
],
'lte' => [
'array' => 'The :attribute field must not have more than :value items.',
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be less than or equal to :value.',
'string' => 'The :attribute field must be less than or equal to :value characters.',
],
'mac_address' => 'The :attribute field must be a valid MAC address.',
'max' => [
'array' => 'The :attribute field must not have more than :max items.',
'file' => 'The :attribute field must not be greater than :max kilobytes.',
'numeric' => 'The :attribute field must not be greater than :max.',
'string' => 'The :attribute field must not be greater than :max characters.',
],
'max_digits' => 'The :attribute field must not have more than :max digits.',
'mimes' => 'The :attribute field must be a file of type: :values.',
'mimetypes' => 'The :attribute field must be a file of type: :values.',
'min' => [
'array' => 'The :attribute field must have at least :min items.',
'file' => 'The :attribute field must be at least :min kilobytes.',
'numeric' => 'The :attribute field must be at least :min.',
'string' => 'The :attribute field must be at least :min characters.',
],
'min_digits' => 'The :attribute field must have at least :min digits.',
'missing' => 'The :attribute field must be missing.',
'missing_if' => 'The :attribute field must be missing when :other is :value.',
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
'missing_with' => 'The :attribute field must be missing when :values is present.',
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
'multiple_of' => 'The :attribute field must be a multiple of :value.',
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute field format is invalid.',
'numeric' => 'The :attribute field must be a number.',
'password' => [
'letters' => 'The :attribute field must contain at least one letter.',
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
'numbers' => 'The :attribute field must contain at least one number.',
'symbols' => 'The :attribute field must contain at least one symbol.',
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
],
'present' => 'The :attribute field must be present.',
'present_if' => 'The :attribute field must be present when :other is :value.',
'present_unless' => 'The :attribute field must be present unless :other is :value.',
'present_with' => 'The :attribute field must be present when :values is present.',
'present_with_all' => 'The :attribute field must be present when :values are present.',
'prohibited' => 'The :attribute field is prohibited.',
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
'prohibits' => 'The :attribute field prohibits :other from being present.',
'regex' => 'The :attribute field format is invalid.',
'required' => 'The :attribute field is required.',
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
'required_if_declined' => 'The :attribute field is required when :other is declined.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are 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 field must match :other.',
'size' => [
'array' => 'The :attribute field must contain :size items.',
'file' => 'The :attribute field must be :size kilobytes.',
'numeric' => 'The :attribute field must be :size.',
'string' => 'The :attribute field must be :size characters.',
],
'starts_with' => 'The :attribute field must start with one of the following: :values.',
'string' => 'The :attribute field must be a string.',
'timezone' => 'The :attribute field must be a valid timezone.',
'ulid' => 'The :attribute field must be a valid ULID.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'uppercase' => 'The :attribute field must be uppercase.',
'url' => 'The :attribute field must be a valid URL.',
'uuid' => 'The :attribute field must be a valid UUID.',
'attributes' => [
'address' => 'address',
'affiliate_url' => 'affiliate URL',
'age' => 'age',
'amount' => 'amount',
'announcement' => 'announcement',
'area' => 'area',
'audience_prize' => 'audience prize',
'audience_winner' => 'audience winner',
'available' => 'available',
'birthday' => 'birthday',
'body' => 'body',
'city' => 'city',
'color' => 'color',
'company' => 'company',
'compilation' => 'compilation',
'concept' => 'concept',
'conditions' => 'conditions',
'content' => 'content',
'contest' => 'contest',
'country' => 'country',
'cover' => 'cover',
'created_at' => 'created at',
'creator' => 'creator',
'currency' => 'currency',
'current_password' => 'current password',
'customer' => 'customer',
'date' => 'date',
'date_of_birth' => 'date of birth',
'dates' => 'dates',
'day' => 'day',
'deleted_at' => 'deleted at',
'description' => 'description',
'display_type' => 'display type',
'district' => 'district',
'duration' => 'duration',
'email' => 'email',
'excerpt' => 'excerpt',
'filter' => 'filter',
'finished_at' => 'finished at',
'first_name' => 'first name',
'gender' => 'gender',
'grand_prize' => 'grand prize',
'group' => 'group',
'hour' => 'hour',
'image' => 'image',
'image_desktop' => 'desktop image',
'image_main' => 'main image',
'image_mobile' => 'mobile image',
'images' => 'images',
'is_audience_winner' => 'is audience winner',
'is_hidden' => 'is hidden',
'is_subscribed' => 'is subscribed',
'is_visible' => 'is visible',
'is_winner' => 'is winner',
'items' => 'items',
'key' => 'key',
'last_name' => 'last name',
'lesson' => 'lesson',
'line_address_1' => 'line address 1',
'line_address_2' => 'line address 2',
'login' => 'login',
'message' => 'message',
'middle_name' => 'middle name',
'minute' => 'minute',
'mobile' => 'mobile',
'month' => 'month',
'name' => 'name',
'national_code' => 'national code',
'number' => 'number',
'password' => 'password',
'password_confirmation' => 'password confirmation',
'phone' => 'phone',
'photo' => 'photo',
'portfolio' => 'portfolio',
'postal_code' => 'postal code',
'preview' => 'preview',
'price' => 'price',
'product_id' => 'product ID',
'product_uid' => 'product UID',
'product_uuid' => 'product UUID',
'promo_code' => 'promo code',
'province' => 'province',
'quantity' => 'quantity',
'reason' => 'reason',
'recaptcha_response_field' => 'recaptcha response field',
'referee' => 'referee',
'referees' => 'referees',
'region' => 'region',
'reject_reason' => 'reject reason',
'remember' => 'remember',
'restored_at' => 'restored at',
'result_text_under_image' => 'result text under image',
'role' => 'role',
'rule' => 'rule',
'rules' => 'rules',
'second' => 'second',
'sex' => 'sex',
'shipment' => 'shipment',
'short_text' => 'short text',
'size' => 'size',
'skills' => 'skills',
'slug' => 'slug',
'specialization' => 'specialization',
'started_at' => 'started at',
'state' => 'state',
'status' => 'status',
'street' => 'street',
'student' => 'student',
'subject' => 'subject',
'tag' => 'tag',
'tags' => 'tags',
'teacher' => 'teacher',
'terms' => 'terms',
'test_description' => 'test description',
'test_locale' => 'test locale',
'test_name' => 'test name',
'text' => 'text',
'time' => 'time',
'title' => 'title',
'type' => 'type',
'updated_at' => 'updated at',
'user' => 'user',
'username' => 'username',
'value' => 'value',
'winner' => 'winner',
'work' => 'work',
'year' => 'year',
],
];
+390
View File
@@ -0,0 +1,390 @@
{
"(and :count more error)": "(y :count error más)",
"(and :count more errors)": "(y :count error más)|(y :count errores más)|(y :count errores más)",
"A decryption key is required.": "Se requiere una clave de descifrado.",
"A new verification link has been sent to the email address you provided during registration.": "Se ha enviado un nuevo enlace de verificación a la dirección de correo electrónico que proporcionó durante el registro.",
"A new verification link has been sent to the email address you provided in your profile settings.": "Se ha enviado un nuevo enlace de verificación a la dirección de correo electrónico que proporcionó en la configuración de su perfil.",
"A new verification link has been sent to your email address.": "Se ha enviado un nuevo enlace de verificación a su dirección de correo electrónico.",
"A Timeout Occurred": "Se produjo un tiempo de espera",
"Accept": "Aceptar",
"Accept Invitation": "Aceptar invitación",
"Accepted": "Aceptado",
"Action": "Acción",
"Actions": "Acciones",
"Add": "Añadir",
"Add :name": "Agregar :name",
"Add a new team member to your team, allowing them to collaborate with you.": "Agregue un nuevo miembro a su equipo, permitiéndole colaborar con usted.",
"Add additional security to your account using two factor authentication.": "Agregue seguridad adicional a su cuenta mediante la autenticación de dos factores.",
"Add Team Member": "Añadir un nuevo miembro al equipo",
"Added.": "Añadido.",
"Admin": "Administrar",
"Administrator": "Administrador",
"Administrator users can perform any action.": "Los administradores pueden realizar cualquier acción.",
"Agree": "Aceptar",
"All of the people that are part of this team.": "Todas las personas que forman parte de este equipo.",
"All rights reserved.": "Todos los derechos reservados.",
"Already registered?": "¿Ya se registró?",
"Already Reported": "Ya Reportado",
"API Token": "Token API",
"API Token Permissions": "Permisos para el token API",
"API Tokens": "Tokens API",
"API tokens allow third-party services to authenticate with our application on your behalf.": "Los tokens API permiten a servicios de terceros autenticarse con nuestra aplicación en su nombre.",
"Archive": "Archivar",
"Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.": "¿Está seguro que desea eliminar este equipo? Una vez que se elimina un equipo, todos sus recursos y datos se eliminarán de forma permanente.",
"Are you sure you want to delete your account?": "¿Está seguro que desea eliminar su cuenta?",
"Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "¿Está seguro que desea eliminar su cuenta? Una vez que se elimine su cuenta, todos sus recursos y datos se eliminarán de forma permanente. Ingrese su contraseña para confirmar que desea eliminar su cuenta de forma permanente.",
"Are you sure you would like to delete this API token?": "¿Está seguro que desea eliminar este token API?",
"Are you sure you would like to leave this team?": "¿Está seguro que le gustaría abandonar este equipo?",
"Are you sure you would like to remove this person from the team?": "¿Está seguro que desea retirar a esta persona del equipo?",
"Assign": "Asignar",
"Associate": "Asociar",
"Attach": "Adjuntar",
"Bad Gateway": "Mala puerta de enlace",
"Bad Request": "Solicitud incorrecta",
"Bandwidth Limit Exceeded": "Límite de ancho de banda excedido",
"Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Antes de continuar, ¿podría verificar su dirección de correo electrónico haciendo clic en el enlace que le acabamos de enviar? Si no recibió el correo electrónico, con gusto le enviaremos otro.",
"Browse": "Navegar",
"Browser Sessions": "Sesiones del navegador",
"Cancel": "Cancelar",
"Choose": "Elija",
"Choose :name": "Elegir :name",
"Choose File": "Elija archivo",
"Choose Image": "Elegir Imagen",
"Click here to re-send the verification email.": "Haga clic aquí para reenviar el correo de verificación.",
"Click to copy": "Haga clic para copiar",
"Client Closed Request": "Solicitud cerrada del cliente",
"Close": "Cerrar",
"Code": "Código",
"Collapse": "Colapsar",
"Collapse All": "Colapsar todo",
"Comment": "Comentar",
"Confirm": "Confirmar",
"Confirm Password": "Confirmar contraseña",
"Conflict": "Conflicto",
"Connect": "Conectar",
"Connection Closed Without Response": "Conexión cerrada sin respuesta",
"Connection Timed Out": "Tiempo de conexión agotado",
"Continue": "Continuar",
"Create": "Crear",
"Create :name": "Crear :name",
"Create a new team to collaborate with others on projects.": "Cree un nuevo equipo para colaborar con otros en proyectos.",
"Create Account": "Crear cuenta",
"Create API Token": "Crear Token API",
"Create New Team": "Crear nuevo equipo",
"Create Team": "Crear equipo",
"Created": "Creado",
"Created.": "Creado.",
"Current Password": "Contraseña actual",
"Dashboard": "Panel",
"Delete": "Eliminar",
"Delete :name": "Eliminar :name",
"Delete Account": "Borrar cuenta",
"Delete API Token": "Borrar token API",
"Delete Team": "Borrar equipo",
"Detach": "Desvincular",
"Details": "Detalles",
"Disable": "Deshabilitar",
"Discard": "Descartar",
"Done": "Hecho",
"Done.": "Hecho.",
"Down": "Abajo",
"Duplicate": "Duplicar",
"Duplicate :name": "Duplicar :name",
"Edit": "Editar",
"Edit :name": "Editar :name",
"Edit Profile": "Editar perfil",
"Editor": "Editor",
"Editor users have the ability to read, create, and update.": "Los editores están habilitados para leer, crear y actualizar.",
"Email": "Correo electrónico",
"email": "El campo :attribute no es un correo válido.",
"Email Password Reset Link": "Enviar enlace para restablecer contraseña",
"Enable": "Habilitar",
"Encrypted environment file already exists.": "El archivo de entorno cifrado ya existe.",
"Encrypted environment file not found.": "No se encontró el archivo de entorno cifrado.",
"Ensure your account is using a long, random password to stay secure.": "Asegúrese que su cuenta esté usando una contraseña larga y aleatoria para mantenerse seguro.",
"Environment file already exists.": "El archivo de entorno ya existe.",
"Environment file not found.": "Archivo de entorno no encontrado.",
"errors": "errores",
"Expand": "Expandir",
"Expand All": "Expandir todo",
"Expectation Failed": "Expectativa fallida",
"Explanation": "Explicación",
"Export": "Exportar",
"Export :name": "Exportar :name",
"Failed Dependency": "Dependencia fallida",
"File": "Archivo",
"Files": "Archivos",
"Finish enabling two factor authentication.": "Termine de habilitar la autenticación de dos factores.",
"For your security, please confirm your password to continue.": "Por su seguridad, confirme su contraseña para continuar.",
"Forbidden": "Prohibido",
"Forgot your password?": "¿Olvidó su contraseña?",
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "¿Olvidó su contraseña? No hay problema. Simplemente déjenos saber su dirección de correo electrónico y le enviaremos un enlace para restablecer la contraseña que le permitirá elegir una nueva.",
"Found": "Encontrado",
"Gateway Timeout": "Tiempo de espera de puerta de enlace",
"Go Home": "Ir a inicio",
"Go to page :page": "Ir a la página :page",
"Gone": "Recurso no disponible",
"Great! You have accepted the invitation to join the :team team.": "¡Genial! Usted ha aceptado la invitación para unirse al equipo :team.",
"Hello!": "¡Hola!",
"Hide": "Ocultar",
"Hide :name": "Ocultar :name",
"Home": "Inicio",
"HTTP Version Not Supported": "Versión HTTP no compatible",
"I agree to the :terms_of_service and :privacy_policy": "Acepto los :terms_of_service y la :privacy_policy",
"I'm a teapot": "Soy una tetera",
"If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.": "Si es necesario, puede salir de todas las demás sesiones de otros navegadores en todos sus dispositivos. Algunas de sus sesiones recientes se enumeran a continuación; sin embargo, es posible que esta lista no sea exhaustiva. Si cree que su cuenta se ha visto comprometida, también debería actualizar su contraseña.",
"If you already have an account, you may accept this invitation by clicking the button below:": "Si ya tiene una cuenta, puede aceptar esta invitación haciendo clic en el botón de abajo:",
"If you did not create an account, no further action is required.": "Si no ha creado una cuenta, no se requiere ninguna acción adicional.",
"If you did not expect to receive an invitation to this team, you may discard this email.": "Si no esperaba recibir una invitación para este equipo, puede descartar este correo electrónico.",
"If you did not request a password reset, no further action is required.": "Si no ha solicitado el restablecimiento de contraseña, omita este mensaje de correo electrónico.",
"If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:": "Si no tiene una cuenta, puede crear una haciendo clic en el botón de abajo. Después de crear una cuenta, puede hacer clic en el botón de aceptación de la invitación en este correo electrónico para aceptar la invitación del equipo:",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si está teniendo problemas al hacer clic en el botón \":actionText\", copie y pegue la URL de abajo\nen su navegador web:",
"IM Used": "IM usado",
"Image": "Imagen",
"Impersonate": "Personificar",
"Impersonation": "Personificación",
"Import": "Importar",
"Import :name": "Importar :name",
"Insufficient Storage": "Espacio insuficiente",
"Internal Server Error": "Error interno del servidor",
"Introduction": "Introducción",
"Invalid credential format.": "El formato de la credencial no es válido.",
"Invalid filename.": "Nombre de archivo no válido.",
"Invalid JSON was returned from the route.": "Se devolvió un JSON no válido desde la ruta.",
"Invalid SSL Certificate": "Certificado SSL no válido",
"Last active": "Activo por última vez",
"Last used": "Usado por última vez",
"Leave": "Abandonar",
"Leave Team": "Abandonar equipo",
"length": "longitud",
"Length Required": "Longitud requerida",
"Like": "Me gusta",
"Load": "Cargar",
"Localize": "Localizar",
"Location": "Ubicación",
"Locked": "Bloqueado",
"Log In": "Iniciar sesión",
"Log in": "Iniciar sesión",
"Log Out": "Finalizar sesión",
"Log Out Other Browser Sessions": "Cerrar las demás sesiones",
"Login": "Iniciar sesión",
"Logout": "Finalizar sesión",
"Loop Detected": "Bucle detectado",
"Maintenance Mode": "Modo de mantenimiento",
"Manage Account": "Administrar cuenta",
"Manage and log out your active sessions on other browsers and devices.": "Administre y cierre sus sesiones activas en otros navegadores y dispositivos.",
"Manage API Tokens": "Administrar Tokens API",
"Manage Role": "Administrar rol",
"Manage Team": "Administrar equipo",
"Method Not Allowed": "Método no permitido",
"Misdirected Request": "Solicitud mal dirigida",
"Moved Permanently": "Movido permanentemente",
"Multi-Status": "Multiestado",
"Multiple Choices": "Múltiples opciones",
"Name": "Nombre",
"name": "nombre",
"Network Authentication Required": "Se requiere autenticación de red",
"Network Connect Timeout Error": "Error de tiempo de espera de conexión de red",
"Network Read Timeout Error": "Error de tiempo de espera de lectura de red",
"New": "Nuevo",
"New :name": "Nuevo :name",
"New Password": "Nueva Contraseña",
"No": "No",
"No Content": "Sin contenido",
"Non-Authoritative Information": "Información no autorizada",
"Not Acceptable": "Inaceptable",
"Not Extended": "no extendido",
"Not Found": "No encontrado",
"Not Implemented": "No se ha implementado",
"Not Modified": "No modificado",
"of": "de",
"OK": "Correcto",
"Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.": "Una vez que se elimina un equipo, todos sus recursos y datos se eliminarán de forma permanente. Antes de eliminar este equipo, descargue cualquier dato o información sobre este equipo que desee conservar.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Una vez que se elimine su cuenta, todos sus recursos y datos se eliminarán de forma permanente. Antes de borrar su cuenta, por favor descargue cualquier dato o información que desee conservar.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Una vez que se elimine su cuenta, todos sus recursos y datos se eliminarán de forma permanente. Ingrese su contraseña para confirmar que desea eliminar su cuenta de forma permanente.",
"Open": "Abrir",
"Open in a current window": "Abrir en una ventana actual",
"Open in a new window": "Abrir en una ventana nueva",
"Open in a parent frame": "Abrir en un marco principal",
"Open in the topmost frame": "Abrir en el marco superior",
"Open on the website": "Abrir en el sitio web",
"Origin Is Unreachable": "El origen es inalcanzable",
"Page Expired": "Página expirada",
"Pagination Navigation": "Navegación por los enlaces de paginación",
"Partial Content": "Contenido parcial",
"Passkey not recognized. It may have been removed from your account.": "Llave de acceso no reconocida. Es posible que haya sido eliminada de su cuenta.",
"Passkey registration session expired. Please try again.": "La sesión de registro de la llave de acceso ha expirado. Por favor, inténtelo de nuevo.",
"Passkey verification session expired. Please try again.": "La sesión de verificación de la llave de acceso ha expirado. Por favor, inténtelo de nuevo.",
"Password": "Contraseña",
"password": "La contraseña es incorrecta.",
"Payload Too Large": "Solicitud demasiado grande",
"Payment Required": "Pago requerido",
"Pending Team Invitations": "Invitaciones de equipo pendientes",
"Permanent Redirect": "Redirección permanente",
"Permanently delete this team.": "Eliminar este equipo de forma permanente",
"Permanently delete your account.": "Eliminar su cuenta de forma permanente.",
"Permissions": "Permisos",
"Photo": "Foto",
"Please click the button below to verify your email address.": "Por favor, haga clic en el botón de abajo para verificar su dirección de correo electrónico.",
"Please confirm access to your account by entering one of your emergency recovery codes.": "Por favor confirme el acceso a su cuenta ingresando uno de sus códigos de recuperación de emergencia.",
"Please confirm access to your account by entering the authentication code provided by your authenticator application.": "Por favor confirme el acceso a su cuenta digitando el código de autenticación provisto por su aplicación autenticadora.",
"Please copy your new API token. For your security, it won't be shown again.": "Por favor copie su nuevo token API. Por su seguridad, no se volverá a mostrar.",
"Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.": "Por favor ingrese su contraseña para confirmar que desea cerrar las demás sesiones de otros navegadores en todos sus dispositivos.",
"Please provide the email address of the person you would like to add to this team.": "Por favor proporcione la dirección de correo electrónico de la persona que le gustaría agregar a este equipo.",
"Precondition Failed": "Error de condición previa",
"Precondition Required": "Precondición requerida",
"Preview": "Previsualizar",
"Price": "Precio",
"Privacy Policy": "Política de Privacidad",
"Processing": "Procesando",
"Profile": "Perfil",
"Profile Information": "Información de perfil",
"Proxy Authentication Required": "Se requiere autenticación proxy",
"Railgun Error": "Error de cañón de riel",
"Range Not Satisfiable": "Rango no satisfactorio",
"Record": "Registro",
"Recovery Code": "Código de recuperación",
"Regards,": "Saludos,",
"Regenerate Recovery Codes": "Regenerar códigos de recuperación",
"Register": "Registrarse",
"Remember me": "Mantener sesión activa",
"Remove": "Eliminar",
"Remove Photo": "Eliminar foto",
"Remove Team Member": "Eliminar miembro del equipo",
"Request Header Fields Too Large": "Campos de encabezado de solicitud demasiado grandes",
"Request Timeout": "Solicitud de tiempo de espera",
"Resend Verification Email": "Reenviar correo de verificación",
"Reset Content": "Restablecer contenido",
"Reset Password": "Restablecer contraseña",
"Reset your password": "Restablezca su contraseña",
"Restore": "Restaurar",
"Restore :name": "Restaurar :name",
"results": "resultados",
"Retry With": "Reintentar con",
"Role": "Rol",
"Save": "Guardar",
"Save & Close": "Guardar y cerrar",
"Save & Return": "Guardar y volver",
"Save :name": "Guardar :name",
"Saved.": "Guardado.",
"Search": "Buscar",
"Search :name": "Buscar :name",
"See Other": "Ver otros",
"Select": "Seleccione",
"Select A New Photo": "Seleccione una nueva foto",
"Select All": "Seleccionar todo",
"Send": "Enviar",
"Server Error": "Error del servidor",
"Service Unavailable": "Servicio no disponible",
"Session Has Expired": "La sesión ha expirado",
"Settings": "Ajustes",
"Setup Key": "Clave de configuración",
"Show": "Mostrar",
"Show :name": "Mostrar :name",
"Show All": "Mostrar todo",
"Show Recovery Codes": "Mostrar códigos de recuperación",
"Showing": "Mostrando",
"Sign In": "Iniciar sesión",
"Solve": "Resolver",
"SSL Handshake Failed": "Protocolo de enlace SSL fallido",
"Start": "Comenzar",
"Stop": "Detener",
"Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.": "Guarde estos códigos de recuperación en un administrador de contraseñas seguro. Se pueden utilizar para recuperar el acceso a su cuenta si pierde su dispositivo de autenticación de dos factores.",
"Submit": "Enviar",
"Subscribe": "Suscriba",
"Switch": "Cambiar",
"Switch Teams": "Cambiar de equipo",
"Switch To Role": "Cambiar de rol",
"Switching Protocols": "Protocolos de conmutación",
"Tag": "Etiqueta",
"Tags": "Etiquetas",
"Team Details": "Detalles del equipo",
"Team Invitation": "Invitación de equipo",
"Team Members": "Miembros del equipo",
"Team Name": "Nombre del equipo",
"Team Owner": "Propietario del equipo",
"Team Settings": "Ajustes del equipo",
"Temporary Redirect": "Redirección temporal",
"Terms of Service": "Términos del servicio",
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "¡Gracias por registrarse! Antes de comenzar, ¿podría verificar su dirección de correo electrónico haciendo clic en el enlace que le acabamos de enviar? Si no recibió el correo electrónico, con gusto le enviaremos otro.",
"The :attribute must be a valid role.": ":Attribute debe ser un rol válido.",
"The :attribute must be at least :length characters and contain at least one number.": "La :attribute debe tener al menos :length caracteres y contener por lo menos un número.",
"The :attribute must be at least :length characters and contain at least one special character and one number.": "La :attribute debe tener al menos :length caracteres y contener por lo menos un caracter especial y un número.",
"The :attribute must be at least :length characters and contain at least one special character.": "La :attribute debe tener al menos :length caracteres y contener por lo menos un carácter especial.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one number.": "La :attribute debe tener al menos :length caracteres y contener por lo menos una letra mayúscula y un número.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one special character.": "La :attribute debe tener al menos :length caracteres y contener por lo menos una letra mayúscula y un carácter especial.",
"The :attribute must be at least :length characters and contain at least one uppercase character, one number, and one special character.": "La :attribute debe tener al menos :length caracteres y contener por lo menos una letra mayúscula, un número y un carácter especial.",
"The :attribute must be at least :length characters and contain at least one uppercase character.": "La :attribute debe tener al menos :length caracteres y contener por lo menos una letra mayúscula.",
"The :attribute must be at least :length characters.": "La :attribute debe tener al menos :length caracteres.",
"The given data was invalid.": "Los datos proporcionados no son válidos.",
"The password is incorrect.": "La contraseña es incorrecta.",
"The provided password does not match your current password.": "La contraseña proporcionada no coincide con su contraseña actual.",
"The provided password was incorrect.": "La contraseña proporcionada no es correcta.",
"The provided two factor authentication code was invalid.": "El código de autenticación de dos factores proporcionado no es válido.",
"The provided two factor recovery code was invalid.": "El código de recuperación de dos factores proporcionado no es válido.",
"The response is not a streamed response.": "La respuesta no es una respuesta transmitida.",
"The response is not a view.": "La respuesta no es una vista.",
"The team's name and owner information.": "Nombre del equipo e información del propietario.",
"These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.": "Estas personas han sido invitadas a su equipo y se les ha enviado un correo electrónico de invitación. Pueden unirse al equipo aceptando la invitación por correo electrónico.",
"This action is unauthorized.": "Esta acción no está autorizada.",
"This device": "Este dispositivo",
"This is a secure area of the application. Please confirm your password before continuing.": "Esta es un área segura de la aplicación. Confirme su contraseña antes de continuar.",
"This password does not match our records.": "Esta contraseña no coincide con nuestros registros.",
"This password reset link will expire in :count minutes.": "Este enlace de restablecimiento de contraseña expirará en :count minutos.",
"This user already belongs to the team.": "Este usuario ya pertenece al equipo.",
"This user has already been invited to the team.": "Este usuario ya ha sido invitado al equipo.",
"to": "al",
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "Para terminar de habilitar la autenticación de dos factores, escanee el siguiente código QR usando la aplicación de autenticación de su teléfono o ingrese la clave de configuración y proporcione el código OTP generado.",
"Toggle navigation": "Alternar navegación",
"Token Name": "Nombre del token",
"Too Early": "Demasiado temprano",
"Too Many Requests": "Demasiadas peticiones",
"Translate": "Traducir",
"Translate It": "Traducirlo",
"Two Factor Authentication": "Autenticación de dos factores",
"Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.": "La autenticación de dos factores ahora está habilitada. Escanee el siguiente código QR usando la aplicación de autenticación de su teléfono o ingrese la clave de configuración.",
"Unable to register passkey. Please try again.": "No se pudo registrar la llave de acceso. Por favor, inténtelo de nuevo.",
"Unable to register this passkey.": "No se pudo registrar esta llave de acceso.",
"Unable to sign in with this account.": "No se pudo iniciar sesión con esta cuenta.",
"Unable to verify passkey. Please try again.": "No se pudo verificar la llave de acceso. Por favor, inténtelo de nuevo.",
"Unauthorized": "No autorizado",
"Unavailable For Legal Reasons": "No disponible por razones legales",
"Unknown": "Desconocido",
"Unknown Error": "Error desconocido",
"Unpack": "Desglosar",
"Unprocessable Entity": "Entidad no procesable",
"Unsubscribe": "Darse de baja",
"Unsupported Media Type": "Tipo de medio no admitido",
"Up": "Arriba",
"Update": "Actualizar",
"Update :name": "Actualizar :name",
"Update Password": "Actualizar contraseña",
"Update your account's profile information and email address.": "Actualice la información de su cuenta y la dirección de correo electrónico.",
"Upgrade Required": "Se requiere actualización",
"URI Too Long": "URI demasiado largo",
"Use a recovery code": "Use un código de recuperación",
"Use an authentication code": "Use un código de autenticación",
"Use Proxy": "Usa proxy",
"User": "Usuario",
"Variant Also Negotiates": "Variante También Negocia",
"Verify Email Address": "Confirme su correo electrónico",
"Verify your email address": "Verifique su dirección de correo electrónico",
"View": "Ver",
"View :name": "Ver :name",
"We were unable to find a registered user with this email address.": "No pudimos encontrar un usuario registrado con esta dirección de correo electrónico.",
"Web Server is Down": "El servidor web está caído",
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.": "Cuando la autenticación de dos factores esté habilitada, le pediremos un token aleatorio seguro durante la autenticación. Puede recuperar este token desde la aplicación Google Authenticator de su teléfono.",
"Whoops!": "¡Ups!",
"Whoops! Something went wrong.": "¡Ups! Algo salió mal.",
"Yes": "Sí",
"You are receiving this email because we received a password reset request for your account.": "Ha recibido este mensaje porque se solicitó un restablecimiento de contraseña para su cuenta.",
"You have been invited to join the :team team!": "¡Usted ha sido invitado a unirse al equipo :team!",
"You have enabled two factor authentication.": "Ha habilitado la autenticación de dos factores.",
"You have not enabled two factor authentication.": "No ha habilitado la autenticación de dos factores.",
"You may accept this invitation by clicking the button below:": "Puede aceptar esta invitación haciendo clic en el botón de abajo:",
"You may delete any of your existing tokens if they are no longer needed.": "Puede eliminar cualquiera de sus tokens existentes si ya no los necesita.",
"You may not delete your personal team.": "No se puede borrar su equipo personal.",
"You may not leave a team that you created.": "No se puede abandonar un equipo que usted creó.",
"You're logged in!": "¡Usted está conectado!",
"Your email address is unverified.": "Su dirección de correo electrónico no está verificada."
}
+119
View File
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Aceptar',
'action' => 'Acción',
'actions' => 'Acciones',
'add' => 'Agregar',
'admin' => 'Administrar',
'agree' => 'Aceptar',
'archive' => 'Archivar',
'assign' => 'Asignar',
'associate' => 'Asociar',
'attach' => 'Adjuntar',
'browse' => 'Navegar',
'cancel' => 'Cancelar',
'choose' => 'Elegir',
'choose_file' => 'Elegir archivo',
'choose_image' => 'Elegir Imagen',
'click_to_copy' => 'Haga clic para copiar',
'close' => 'Cerrar',
'collapse' => 'Colapsar',
'collapse_all' => 'Colapsar todo',
'comment' => 'Comentar',
'confirm' => 'Confirmar',
'connect' => 'Conectar',
'create' => 'Crear',
'delete' => 'Borrar',
'detach' => 'Desasociar',
'details' => 'Detalles',
'disable' => 'Desactivar',
'discard' => 'Descartar',
'done' => 'Hecho',
'down' => 'Abajo',
'duplicate' => 'Duplicar',
'edit' => 'Editar',
'enable' => 'Permitir',
'expand' => 'Expandir',
'expand_all' => 'Expandir todo',
'explanation' => 'Explicación',
'export' => 'Exportar',
'file' => 'Archivo',
'files' => 'Archivos',
'go_home' => 'Ir a Inicio',
'hide' => 'Ocultar',
'home' => 'Inicio',
'image' => 'Imagen',
'impersonate' => 'Personificar',
'impersonation' => 'Personificación',
'import' => 'Importar',
'introduction' => 'Introducción',
'like' => 'Me gusta',
'load' => 'Cargar',
'localize' => 'Localizar',
'log_in' => 'Acceder',
'log_out' => 'Cerrar sesión',
'named' => [
'add' => 'Agregar :name',
'choose' => 'Elegir :name',
'create' => 'Crear :name',
'delete' => 'Eliminar :name',
'duplicate' => 'Duplicar :name',
'edit' => 'Editar :name',
'export' => 'Exportar :name',
'hide' => 'Ocultar :name',
'import' => 'Importar :name',
'new' => 'Nuevo :name',
'restore' => 'Restaurar :name',
'save' => 'Guardar :name',
'search' => 'Buscar :name',
'show' => 'Mostrar :name',
'update' => 'Actualizar :name',
'view' => 'Ver :name',
],
'new' => 'Nuevo',
'no' => 'No',
'open' => 'Abrir',
'open_website' => 'Abrir en el sitio web',
'preview' => 'Previsualizar',
'price' => 'Precio',
'record' => 'Registro',
'restore' => 'Restaurar',
'save' => 'Guardar',
'save_and_close' => 'Guardar y cerrar',
'save_and_return' => 'Guardar y volver',
'search' => 'Buscar',
'select' => 'Seleccionar',
'select_all' => 'Seleccionar todo',
'send' => 'Enviar',
'settings' => 'Ajustes',
'show' => 'Mostrar',
'show_all' => 'Mostrar todo',
'sign_in' => 'Iniciar sesión',
'solve' => 'Resolver',
'start' => 'Comenzar',
'stop' => 'Detener',
'submit' => 'Enviar',
'subscribe' => 'Suscribir',
'switch' => 'Cambiar',
'switch_to_role' => 'Cambiar de rol',
'tag' => 'Etiqueta',
'tags' => 'Etiquetas',
'target_link' => [
'blank' => 'Abrir en una ventana nueva',
'parent' => 'Abrir en el marco principal',
'self' => 'Abrir en la ventana actual',
'top' => 'Abrir en el marco superior',
],
'translate' => 'Traducir',
'translate_it' => 'Traducirlo',
'unpack' => 'Desglosar',
'unsubscribe' => 'Darse de baja',
'up' => 'Arriba',
'update' => 'Actualizar',
'user' => 'Usuario',
'view' => 'Ver',
'yes' => 'Sí',
];
+9
View File
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
'password' => 'La contraseña es incorrecta.',
'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.',
];
+84
View File
@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Error desconocido',
'100' => 'Continuar',
'101' => 'Protocolos de conmutación',
'102' => 'Procesando',
'200' => 'DE ACUERDO',
'201' => 'Creado',
'202' => 'Aceptado',
'203' => 'Información no autorizada',
'204' => 'Sin contenido',
'205' => 'Restablecer contenido',
'206' => 'Contenido parcial',
'207' => 'Multiestado',
'208' => 'Ya Reportado',
'226' => 'IM usado',
'300' => 'Múltiples opciones',
'301' => 'Movido permanentemente',
'302' => 'Encontrado',
'303' => 'Ver otros',
'304' => 'No modificado',
'305' => 'Usa proxy',
'307' => 'Redirección temporal',
'308' => 'Redirección permanente',
'400' => 'Solicitud incorrecta',
'401' => 'No autorizado',
'402' => 'Pago requerido',
'403' => 'Prohibido',
'404' => 'No encontrado',
'405' => 'Método no permitido',
'406' => 'Inaceptable',
'407' => 'Se requiere autenticación proxy',
'408' => 'Solicitud de tiempo de espera',
'409' => 'Conflicto',
'410' => 'Recurso no disponible',
'411' => 'Longitud requerida',
'412' => 'Error de condición previa',
'413' => 'Solicitud demasiado grande',
'414' => 'URI demasiado largo',
'415' => 'Tipo de medio no admitido',
'416' => 'Rango no satisfactorio',
'417' => 'Expectativa fallida',
'418' => 'Soy una tetera',
'419' => 'La sesión ha expirado',
'421' => 'Solicitud mal dirigida',
'422' => 'Entidad no procesable',
'423' => 'Bloqueado',
'424' => 'Dependencia fallida',
'425' => 'Demasiado temprano',
'426' => 'Se requiere actualización',
'428' => 'Precondición requerida',
'429' => 'Demasiadas solicitudes',
'431' => 'Campos de encabezado de solicitud demasiado grandes',
'444' => 'Conexión cerrada sin respuesta',
'449' => 'Reintentar con',
'451' => 'No disponible por razones legales',
'499' => 'Solicitud cerrada del cliente',
'500' => 'Error interno del servidor',
'501' => 'No se ha implementado',
'502' => 'Mala puerta de enlace',
'503' => 'Modo de mantenimiento',
'504' => 'Tiempo de espera de puerta de enlace',
'505' => 'Versión HTTP no compatible',
'506' => 'Variante También Negocia',
'507' => 'Espacio insuficiente',
'508' => 'Bucle detectado',
'509' => 'Límite de ancho de banda excedido',
'510' => 'no extendido',
'511' => 'Se requiere autenticación de red',
'520' => 'Error desconocido',
'521' => 'El servidor web está caído',
'522' => 'Tiempo de conexión agotado',
'523' => 'El origen es inalcanzable',
'524' => 'Se produjo un tiempo de espera',
'525' => 'Protocolo de enlace SSL fallido',
'526' => 'Certificado SSL no válido',
'527' => 'Error de cañón de riel',
'598' => 'Error de tiempo de espera de lectura de red',
'599' => 'Error de tiempo de espera de conexión de red',
'unknownError' => 'Error desconocido',
];
+8
View File
@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Siguiente &raquo;',
'previous' => '&laquo; Anterior',
];
+11
View File
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Su contraseña ha sido restablecida.',
'sent' => 'Le hemos enviado por correo electrónico el enlace para restablecer su contraseña.',
'throttled' => 'Por favor espere antes de intentar de nuevo.',
'token' => 'El token de restablecimiento de contraseña es inválido.',
'user' => 'No encontramos ningún usuario con ese correo electrónico.',
];
+288
View File
@@ -0,0 +1,288 @@
<?php
declare(strict_types=1);
return [
'accepted' => 'El campo :attribute debe ser aceptado.',
'accepted_if' => 'El campo :attribute debe ser aceptado cuando :other sea :value.',
'active_url' => 'El campo :attribute debe ser una URL válida.',
'after' => 'El campo :attribute debe ser una fecha posterior a :date.',
'after_or_equal' => 'El campo :attribute debe ser una fecha posterior o igual a :date.',
'alpha' => 'El campo :attribute sólo debe contener letras.',
'alpha_dash' => 'El campo :attribute sólo debe contener letras, números, guiones y guiones bajos.',
'alpha_num' => 'El campo :attribute sólo debe contener letras y números.',
'any_of' => 'El campo :attribute no es válido.',
'array' => 'El campo :attribute debe ser un conjunto.',
'ascii' => 'El campo :attribute solo debe contener caracteres alfanuméricos y símbolos de un solo byte.',
'before' => 'El campo :attribute debe ser una fecha anterior a :date.',
'before_or_equal' => 'El campo :attribute debe ser una fecha anterior o igual a :date.',
'between' => [
'array' => 'El campo :attribute tiene que tener entre :min - :max elementos.',
'file' => 'El campo :attribute debe pesar entre :min - :max kilobytes.',
'numeric' => 'El campo :attribute tiene que estar entre :min - :max.',
'string' => 'El campo :attribute tiene que tener entre :min - :max caracteres.',
],
'boolean' => 'El campo :attribute debe tener un valor verdadero o falso.',
'can' => 'El campo :attribute contiene un valor no autorizado.',
'confirmed' => 'La confirmación de :attribute no coincide.',
'contains' => 'Al campo :attribute le falta un valor obligatorio.',
'current_password' => 'La contraseña es incorrecta.',
'date' => 'El campo :attribute debe ser una fecha válida.',
'date_equals' => 'El campo :attribute debe ser una fecha igual a :date.',
'date_format' => 'El campo :attribute debe coincidir con el formato :format.',
'decimal' => 'El campo :attribute debe tener :decimal cifras decimales.',
'declined' => 'El campo :attribute debe ser rechazado.',
'declined_if' => 'El campo :attribute debe ser rechazado cuando :other sea :value.',
'different' => 'El campo :attribute y :other deben ser diferentes.',
'digits' => 'El campo :attribute debe tener :digits dígitos.',
'digits_between' => 'El campo :attribute debe tener entre :min y :max dígitos.',
'dimensions' => 'El campo :attribute tiene dimensiones de imagen no válidas.',
'distinct' => 'El campo :attribute contiene un valor duplicado.',
'doesnt_contain' => 'El campo :attribute no debe contener ninguno de los siguientes valores: :values.',
'doesnt_end_with' => 'El campo :attribute no debe finalizar con uno de los siguientes: :values.',
'doesnt_start_with' => 'El campo :attribute no debe comenzar con uno de los siguientes: :values.',
'email' => 'El campo :attribute no es un correo válido.',
'encoding' => 'El campo :attribute debe estar codificado en :encoding.',
'ends_with' => 'El campo :attribute debe finalizar con uno de los siguientes valores: :values',
'enum' => 'El campo :attribute no está en la lista de valores permitidos.',
'exists' => 'El campo :attribute no existe.',
'extensions' => 'El campo :attribute debe tener una de las siguientes extensiones: :values.',
'file' => 'El campo :attribute debe ser un archivo.',
'filled' => 'El campo :attribute es obligatorio.',
'gt' => [
'array' => 'El campo :attribute debe tener más de :value elementos.',
'file' => 'El campo :attribute debe tener más de :value kilobytes.',
'numeric' => 'El campo :attribute debe ser mayor que :value.',
'string' => 'El campo :attribute debe tener más de :value caracteres.',
],
'gte' => [
'array' => 'El campo :attribute debe tener como mínimo :value elementos.',
'file' => 'El campo :attribute debe tener como mínimo :value kilobytes.',
'numeric' => 'El campo :attribute debe ser como mínimo :value.',
'string' => 'El campo :attribute debe tener como mínimo :value caracteres.',
],
'hex_color' => 'El campo :attribute debe tener un color hexadecimal válido.',
'image' => 'El campo :attribute debe ser una imagen.',
'in' => 'El campo :attribute no está en la lista de valores permitidos.',
'in_array' => 'El campo :attribute debe existir en :other.',
'in_array_keys' => 'El campo :attribute debe contener al menos una de las siguientes claves: :values.',
'integer' => 'El campo :attribute debe ser un número entero.',
'ip' => 'El campo :attribute debe ser una dirección IP válida.',
'ipv4' => 'El campo :attribute debe ser una dirección IPv4 válida.',
'ipv6' => 'El campo :attribute debe ser una dirección IPv6 válida.',
'json' => 'El campo :attribute debe ser una cadena JSON válida.',
'list' => 'El campo :attribute debe ser una lista.',
'lowercase' => 'El campo :attribute debe estar en minúscula.',
'lt' => [
'array' => 'El campo :attribute debe tener menos de :value elementos.',
'file' => 'El campo :attribute debe tener menos de :value kilobytes.',
'numeric' => 'El campo :attribute debe ser menor que :value.',
'string' => 'El campo :attribute debe tener menos de :value caracteres.',
],
'lte' => [
'array' => 'El campo :attribute debe tener como máximo :value elementos.',
'file' => 'El campo :attribute debe tener como máximo :value kilobytes.',
'numeric' => 'El campo :attribute debe ser como máximo :value.',
'string' => 'El campo :attribute debe tener como máximo :value caracteres.',
],
'mac_address' => 'El campo :attribute debe ser una dirección MAC válida.',
'max' => [
'array' => 'El campo :attribute no debe tener más de :max elementos.',
'file' => 'El campo :attribute no debe ser mayor que :max kilobytes.',
'numeric' => 'El campo :attribute no debe ser mayor que :max.',
'string' => 'El campo :attribute no debe ser mayor que :max caracteres.',
],
'max_digits' => 'El campo :attribute no debe tener más de :max dígitos.',
'mimes' => 'El campo :attribute debe ser un archivo con formato: :values.',
'mimetypes' => 'El campo :attribute debe ser un archivo con formato: :values.',
'min' => [
'array' => 'El campo :attribute debe tener al menos :min elementos.',
'file' => 'El tamaño de :attribute debe ser de al menos :min kilobytes.',
'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',
'string' => 'El campo :attribute debe contener al menos :min caracteres.',
],
'min_digits' => 'El campo :attribute debe tener al menos :min dígitos.',
'missing' => 'El campo :attribute no debe estar presente.',
'missing_if' => 'El campo :attribute no debe estar presente cuando :other sea :value.',
'missing_unless' => 'El campo :attribute no debe estar presente a menos que :other sea :value.',
'missing_with' => 'El campo :attribute no debe estar presente si alguno de los campos :values está presente.',
'missing_with_all' => 'El campo :attribute no debe estar presente cuando los campos :values estén presentes.',
'multiple_of' => 'El campo :attribute debe ser múltiplo de :value',
'not_in' => 'El campo :attribute no debe estar en la lista.',
'not_regex' => 'El formato del campo :attribute no es válido.',
'numeric' => 'El campo :attribute debe ser numérico.',
'password' => [
'letters' => 'La :attribute debe contener al menos una letra.',
'mixed' => 'La :attribute debe contener al menos una letra mayúscula y una minúscula.',
'numbers' => 'La :attribute debe contener al menos un número.',
'symbols' => 'La :attribute debe contener al menos un símbolo.',
'uncompromised' => 'La :attribute proporcionada se ha visto comprometida en una filtración de datos (data leak). Elija una :attribute diferente.',
],
'present' => 'El campo :attribute debe estar presente.',
'present_if' => 'El campo :attribute debe estar presente cuando :other es :value.',
'present_unless' => 'El campo :attribute debe estar presente a menos que :other sea :value.',
'present_with' => 'El campo :attribute debe estar presente cuando :values esté presente.',
'present_with_all' => 'El campo :attribute debe estar presente cuando :values estén presentes.',
'prohibited' => 'El campo :attribute está prohibido.',
'prohibited_if' => 'El campo :attribute está prohibido cuando :other es :value.',
'prohibited_if_accepted' => 'El campo :attribute está prohibido cuando se acepta :other.',
'prohibited_if_declined' => 'El campo :attribute está prohibido cuando se rechaza :other.',
'prohibited_unless' => 'El campo :attribute está prohibido a menos que :other sea :values.',
'prohibits' => 'El campo :attribute prohibe que :other esté presente.',
'regex' => 'El formato del campo :attribute no es válido.',
'required' => 'El campo :attribute es obligatorio.',
'required_array_keys' => 'El campo :attribute debe contener entradas para: :values.',
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
'required_if_accepted' => 'El campo :attribute es obligatorio si :other es aceptado.',
'required_if_declined' => 'El campo :attribute es obligatorio si :other es rechazado.',
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values está presente.',
'same' => 'Los campos :attribute y :other deben coincidir.',
'size' => [
'array' => 'El campo :attribute debe contener :size elementos.',
'file' => 'El tamaño de :attribute debe ser :size kilobytes.',
'numeric' => 'El tamaño de :attribute debe ser :size.',
'string' => 'El campo :attribute debe contener :size caracteres.',
],
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',
'string' => 'El campo :attribute debe ser una cadena de caracteres.',
'timezone' => 'El campo :attribute debe ser una zona horaria válida.',
'ulid' => 'El campo :attribute debe ser un ULID válido.',
'unique' => 'El campo :attribute ya ha sido registrado.',
'uploaded' => 'Subir :attribute ha fallado.',
'uppercase' => 'El campo :attribute debe estar en mayúscula.',
'url' => 'El campo :attribute debe ser una URL válida.',
'uuid' => 'El campo :attribute debe ser un UUID válido.',
'attributes' => [
'address' => 'dirección',
'affiliate_url' => 'URL de afiliado',
'age' => 'edad',
'amount' => 'cantidad',
'announcement' => 'anuncio',
'area' => 'área',
'audience_prize' => 'premio del público',
'audience_winner' => 'ganador del público',
'available' => 'disponible',
'birthday' => 'cumpleaños',
'body' => 'contenido',
'city' => 'ciudad',
'color' => 'color',
'company' => 'compañía',
'compilation' => 'compilación',
'concept' => 'concepto',
'conditions' => 'condiciones',
'content' => 'contenido',
'contest' => 'concurso',
'country' => 'país',
'cover' => 'portada',
'created_at' => 'creado el',
'creator' => 'creador',
'currency' => 'moneda',
'current_password' => 'contraseña actual',
'customer' => 'cliente',
'date' => 'fecha',
'date_of_birth' => 'fecha de nacimiento',
'dates' => 'fechas',
'day' => 'día',
'deleted_at' => 'eliminado el',
'description' => 'descripción',
'display_type' => 'tipo de visualización',
'district' => 'distrito',
'duration' => 'duración',
'email' => 'correo electrónico',
'excerpt' => 'extracto',
'filter' => 'filtro',
'finished_at' => 'terminado el',
'first_name' => 'nombre',
'gender' => 'género',
'grand_prize' => 'gran Premio',
'group' => 'grupo',
'hour' => 'hora',
'image' => 'imagen',
'image_desktop' => 'imagen de escritorio',
'image_main' => 'imagen principal',
'image_mobile' => 'imagen móvil',
'images' => 'imágenes',
'is_audience_winner' => 'es ganador de audiencia',
'is_hidden' => 'está oculto',
'is_subscribed' => 'está suscrito',
'is_visible' => 'es visible',
'is_winner' => 'es ganador',
'items' => 'elementos',
'key' => 'clave',
'last_name' => 'apellidos',
'lesson' => 'lección',
'line_address_1' => 'línea de dirección 1',
'line_address_2' => 'línea de dirección 2',
'login' => 'acceso',
'message' => 'mensaje',
'middle_name' => 'segundo nombre',
'minute' => 'minuto',
'mobile' => 'móvil',
'month' => 'mes',
'name' => 'nombre',
'national_code' => 'código nacional',
'number' => 'número',
'password' => 'contraseña',
'password_confirmation' => 'confirmación de la contraseña',
'phone' => 'teléfono',
'photo' => 'foto',
'portfolio' => 'portafolio',
'postal_code' => 'código postal',
'preview' => 'vista preliminar',
'price' => 'precio',
'product_id' => 'ID del producto',
'product_uid' => 'UID del producto',
'product_uuid' => 'UUID del producto',
'promo_code' => 'código promocional',
'province' => 'provincia',
'quantity' => 'cantidad',
'reason' => 'razón',
'recaptcha_response_field' => 'respuesta del recaptcha',
'referee' => 'árbitro',
'referees' => 'árbitros',
'region' => 'región',
'reject_reason' => 'motivo de rechazo',
'remember' => 'recordar',
'restored_at' => 'restaurado el',
'result_text_under_image' => 'texto bajo la imagen',
'role' => 'rol',
'rule' => 'regla',
'rules' => 'reglas',
'second' => 'segundo',
'sex' => 'sexo',
'shipment' => 'envío',
'short_text' => 'texto corto',
'size' => 'tamaño',
'skills' => 'habilidades',
'slug' => 'slug',
'specialization' => 'especialización',
'started_at' => 'comenzado el',
'state' => 'estado',
'status' => 'estado',
'street' => 'calle',
'student' => 'estudiante',
'subject' => 'asunto',
'tag' => 'etiqueta',
'tags' => 'etiquetas',
'teacher' => 'profesor',
'terms' => 'términos',
'test_description' => 'descripción de prueba',
'test_locale' => 'idioma de prueba',
'test_name' => 'nombre de prueba',
'text' => 'texto',
'time' => 'hora',
'title' => 'título',
'type' => 'tipo',
'updated_at' => 'actualizado el',
'user' => 'usuario',
'username' => 'usuario',
'value' => 'valor',
'winner' => 'ganador',
'work' => 'trabajo',
'year' => 'año',
],
];
+390
View File
@@ -0,0 +1,390 @@
{
"(and :count more error)": "(et :count erreur en plus)",
"(and :count more errors)": "(et :count erreur en plus)|(et :count erreurs en plus)|(et :count erreurs en plus)",
"A decryption key is required.": "Une clé de déchiffrement est requise.",
"A new verification link has been sent to the email address you provided during registration.": "Un nouveau lien de vérification a été envoyé à l'adresse e-mail que vous avez indiquée lors de votre inscription.",
"A new verification link has been sent to the email address you provided in your profile settings.": "Un nouveau lien de vérification a été envoyé à l'adresse e-mail que vous avez indiquée dans vos paramètres de profil.",
"A new verification link has been sent to your email address.": "Un nouveau lien de vérification a été envoyé à votre adresse e-mail.",
"A Timeout Occurred": "Temps d'attente dépassé",
"Accept": "Accepter",
"Accept Invitation": "Accepter l'invitation",
"Accepted": "Accepté",
"Action": "Action",
"Actions": "Actions",
"Add": "Ajouter",
"Add :name": "Ajouter :name",
"Add a new team member to your team, allowing them to collaborate with you.": "Ajouter un nouveau membre de l'équipe à votre équipe, lui permettant de collaborer avec vous.",
"Add additional security to your account using two factor authentication.": "Ajouter une sécurité supplémentaire à votre compte en utilisant l'authentification à deux facteurs.",
"Add Team Member": "Ajouter un membre d'équipe",
"Added.": "Ajouté.",
"Admin": "Administrateur",
"Administrator": "Administrateur",
"Administrator users can perform any action.": "Les administrateurs peuvent effectuer n'importe quelle action.",
"Agree": "Accepter",
"All of the people that are part of this team.": "Toutes les personnes faisant partie de cette équipe.",
"All rights reserved.": "Tous droits réservés.",
"Already registered?": "Déjà inscrit ?",
"Already Reported": "Déjà rapporté",
"API Token": "Jeton API",
"API Token Permissions": "Autorisations de jeton API",
"API Tokens": "Jeton API",
"API tokens allow third-party services to authenticate with our application on your behalf.": "Les jetons API permettent à des services tiers de s'authentifier auprès de notre application en votre nom.",
"Archive": "Archive",
"Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.": "Êtes-vous sûr de vouloir supprimer cette équipe ? Lorsqu'une équipe est supprimée, toutes les données associées seront définitivement supprimées.",
"Are you sure you want to delete your account?": "Êtes-vous sûr de vouloir supprimer votre compte ?",
"Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Êtes-vous sûr de vouloir supprimer votre compte ? Une fois que votre compte est supprimé, toutes les données associées seront supprimées définitivement. Pour confirmer que vous voulez supprimer définitivement votre compte, renseignez votre mot de passe.",
"Are you sure you would like to delete this API token?": "Êtes-vous sûr de vouloir supprimer ce jeton API ?",
"Are you sure you would like to leave this team?": "Êtes-vous sûr de vouloir quitter cette équipe ?",
"Are you sure you would like to remove this person from the team?": "Êtes-vous sûr de vouloir supprimer cette personne de cette équipe ?",
"Assign": "Attribuer",
"Associate": "Associé",
"Attach": "Attacher",
"Bad Gateway": "Passerelle invalide",
"Bad Request": "Requête erronée",
"Bandwidth Limit Exceeded": "Limite de bande passante dépassée",
"Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Avant de continuer, pourriez-vous vérifier votre adresse e-mail en cliquant sur le lien de vérification que l'on vient de vous envoyer ? Si vous n'avez pas reçu l'e-mail, nous vous en enverrons un autre avec plaisir.",
"Browse": "Parcourir",
"Browser Sessions": "Sessions de navigateur",
"Cancel": "Annuler",
"Choose": "Choisir",
"Choose :name": "Choisir :name",
"Choose File": "Choisir le fichier",
"Choose Image": "Choisir une image",
"Click here to re-send the verification email.": "Cliquez ici pour renvoyer l'e-mail de vérification.",
"Click to copy": "Cliquer pour copier",
"Client Closed Request": "Demande fermée par le client",
"Close": "Fermer",
"Code": "Code",
"Collapse": "Réduire",
"Collapse All": "Réduire tout",
"Comment": "Commentaire",
"Confirm": "Confirmer",
"Confirm Password": "Confirmer le mot de passe",
"Conflict": "Conflit",
"Connect": "Connecter",
"Connection Closed Without Response": "Connexion fermée sans réponse",
"Connection Timed Out": "La connexion a expiré",
"Continue": "Continuer",
"Create": "Créer",
"Create :name": "Créer :name",
"Create a new team to collaborate with others on projects.": "Créer une nouvelle équipe pour collaborer avec d'autres personnes sur des projets.",
"Create Account": "Créer un compte",
"Create API Token": "Créer un jeton API",
"Create New Team": "Créer une nouvelle équipe",
"Create Team": "Créer l'équipe",
"Created": "Créé",
"Created.": "Créé.",
"Current Password": "Mot de passe actuel",
"Dashboard": "Tableau de bord",
"Delete": "Supprimer",
"Delete :name": "Supprimer :name",
"Delete Account": "Supprimer le compte",
"Delete API Token": "Supprimer le jeton API",
"Delete Team": "Supprimer l'équipe",
"Detach": "Détacher",
"Details": "Détails",
"Disable": "Désactiver",
"Discard": "Jeter",
"Done": "Fait",
"Done.": "Terminé.",
"Down": "Descendre",
"Duplicate": "Dupliquer",
"Duplicate :name": "Dupliquer :name",
"Edit": "Éditer",
"Edit :name": "Modifier :name",
"Edit Profile": "Éditer le profil",
"Editor": "Éditeur",
"Editor users have the ability to read, create, and update.": "Les éditeurs peuvent lire, créer et mettre à jour",
"Email": "E-mail",
"email": "Le champ :attribute doit être une adresse e-mail valide.",
"Email Password Reset Link": "Lien de réinitialisation du mot de passe",
"Enable": "Activer",
"Encrypted environment file already exists.": "Le fichier d'environnement chiffré existe déjà.",
"Encrypted environment file not found.": "Fichier d'environnement chiffré introuvable.",
"Ensure your account is using a long, random password to stay secure.": "Assurez-vous d'utiliser un mot de passe long et aléatoire pour sécuriser votre compte.",
"Environment file already exists.": "Le fichier d'environnement existe déjà.",
"Environment file not found.": "Fichier d'environnement introuvable.",
"errors": "les erreurs",
"Expand": "Développer",
"Expand All": "Développer tout",
"Expectation Failed": "Comportement attendu insatisfaisant",
"Explanation": "Explication",
"Export": "Exporter",
"Export :name": "Exporter :name",
"Failed Dependency": "Dépendance échouée",
"File": "Déposer",
"Files": "Des dossiers",
"Finish enabling two factor authentication.": "Terminez l'activation de l'authentification à deux facteurs.",
"For your security, please confirm your password to continue.": "Par mesure de sécurité, veuillez confirmer votre mot de passe pour continuer.",
"Forbidden": "Interdit",
"Forgot your password?": "Mot de passe oublié ?",
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "Mot de passe oublié ? Pas de soucis. Veuillez nous indiquer votre adresse e-mail et nous vous enverrons un lien de réinitialisation du mot de passe.",
"Found": "Trouvé",
"Gateway Timeout": "Temps d'attente de la passerelle dépassé",
"Go Home": "Aller à l'accueil",
"Go to page :page": "Aller à la page :page",
"Gone": "Disparu",
"Great! You have accepted the invitation to join the :team team.": "Super ! Vous avez accepté l'invitation à rejoindre l'équipe :team",
"Hello!": "Bonjour !",
"Hide": "Cacher",
"Hide :name": "Cacher :name",
"Home": "Accueil",
"HTTP Version Not Supported": "Version HTTP non prise en charge",
"I agree to the :terms_of_service and :privacy_policy": "Je suis d'accord avec les :terms_of_service et la :privacy_policy",
"I'm a teapot": "Je suis une théière",
"If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.": "Si nécessaire, vous pouvez vous déconnecter de toutes vos autres sessions de navigateurs ouvertes sur tous vos appareils. Vos dernières sessions sont listées ci-dessous ; cependant, cette liste peut ne pas être exhaustive. Si vous pensez que votre compte a été compromis, vous devriez également mettre à jour votre mot de passe.",
"If you already have an account, you may accept this invitation by clicking the button below:": "Si vous avez déjà un compte, vous pouvez accepter cette invitation en cliquant sur le bouton ci-dessous :",
"If you did not create an account, no further action is required.": "Si vous n'avez pas créé de compte, vous pouvez ignorer ce message.",
"If you did not expect to receive an invitation to this team, you may discard this email.": "Si vous n'attendiez pas d'invitation de cette équipe, vous pouvez supprimer cet e-mail.",
"If you did not request a password reset, no further action is required.": "Si vous n'avez pas demandé de réinitialisation de mot de passe, vous pouvez ignorer ce message.",
"If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:": "Si vous n'avez pas de compte, vous pouvez en créer un en cliquant sur le bouton ci-dessous. Ensuite, vous pourrez cliquer sur le bouton de cet e-mail pour accepter l'invitation de rejoindre l'équipe :",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si vous avez des difficultés à cliquer sur le bouton \":actionText\", copiez et collez l'URL ci-dessous\ndans votre navigateur Web :",
"IM Used": "IM utilisé",
"Image": "Image",
"Impersonate": "Utiliser un autre compte",
"Impersonation": "Imitation",
"Import": "Importer",
"Import :name": "Importer :name",
"Insufficient Storage": "Espace insuffisant",
"Internal Server Error": "Erreur interne du serveur",
"Introduction": "Introduction",
"Invalid credential format.": "Invalid credential format.",
"Invalid filename.": "Nom de fichier incorrect.",
"Invalid JSON was returned from the route.": "Un JSON non valide a été renvoyé par la route.",
"Invalid SSL Certificate": "Certificat SSL invalide",
"Last active": "Dernier actif",
"Last used": "Dernière utilisation",
"Leave": "Quitter",
"Leave Team": "Quitter l'équipe",
"length": "longueur",
"Length Required": "Longueur requise",
"Like": "Aimer",
"Load": "Charger",
"Localize": "Localiser",
"Location": "Emplacement",
"Locked": "Verrouillé",
"Log In": "Se connecter",
"Log in": "Se connecter",
"Log Out": "Se déconnecter",
"Log Out Other Browser Sessions": "Déconnecter les sessions ouvertes sur d'autres navigateurs",
"Login": "Connexion",
"Logout": "Déconnexion",
"Loop Detected": "Boucle détectée",
"Maintenance Mode": "Mode de maintenance",
"Manage Account": "Gérer le compte",
"Manage and log out your active sessions on other browsers and devices.": "Gérer et déconnecter vos sessions actives sur les autres navigateurs et appareils.",
"Manage API Tokens": "Gérer les jetons API",
"Manage Role": "Gérer le rôle",
"Manage Team": "Gérer l'équipe",
"Method Not Allowed": "Méthode non autorisée",
"Misdirected Request": "Demande mal dirigée",
"Moved Permanently": "Déplacé de façon permanente",
"Multi-Status": "Statut multiple",
"Multiple Choices": "Choix multiples",
"Name": "Nom",
"name": "nom",
"Network Authentication Required": "Authentification réseau requise",
"Network Connect Timeout Error": "Temps d'attente de la connexion réseau dépassé",
"Network Read Timeout Error": "Temps d'attente de la lecture réseau dépassé",
"New": "Nouveau",
"New :name": "Nouveau :name",
"New Password": "Nouveau mot de passe",
"No": "Non",
"No Content": "Pas de contenu",
"Non-Authoritative Information": "Informations non certifiées",
"Not Acceptable": "Pas acceptable",
"Not Extended": "Non prolongé",
"Not Found": "Non trouvé",
"Not Implemented": "Non implémenté",
"Not Modified": "Non modifié",
"of": "de",
"OK": "OK",
"Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.": "Une fois qu'une équipe est supprimée, toutes ses données seront supprimées définitivement. Avant de supprimer cette équipe, veuillez télécharger toutes données ou informations de cette équipe.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Une fois que votre compte est supprimé, toutes vos données sont supprimées définitivement. Avant de supprimer votre compte, veuillez télécharger vos données.",
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Une fois que votre compte est supprimé, toutes les données associées seront supprimées définitivement. Pour confirmer que vous voulez supprimer définitivement votre compte, renseignez votre mot de passe.",
"Open": "Ouvrir",
"Open in a current window": "Ouvrir dans une fenêtre actuelle",
"Open in a new window": "Ouvrir dans une nouvelle fenêtre",
"Open in a parent frame": "Ouvrir dans un cadre parent",
"Open in the topmost frame": "Ouvrir dans le cadre le plus haut",
"Open on the website": "Ouvrir sur le site",
"Origin Is Unreachable": "L'origine est inaccessible",
"Page Expired": "Page expirée",
"Pagination Navigation": "Pagination",
"Partial Content": "Contenu partiel",
"Passkey not recognized. It may have been removed from your account.": "Passkey not recognized. It may have been removed from your account.",
"Passkey registration session expired. Please try again.": "Passkey registration session expired. Please try again.",
"Passkey verification session expired. Please try again.": "Passkey verification session expired. Please try again.",
"Password": "Mot de passe",
"password": "Le mot de passe est incorrect",
"Payload Too Large": "Charge utile trop grande",
"Payment Required": "Paiement requis",
"Pending Team Invitations": "Invitations d'équipe en attente",
"Permanent Redirect": "Redirection permanente",
"Permanently delete this team.": "Supprimer définitivement cette équipe.",
"Permanently delete your account.": "Supprimer définitivement votre compte.",
"Permissions": "Permissions",
"Photo": "Image",
"Please click the button below to verify your email address.": "Veuillez cliquer sur le bouton ci-dessous pour vérifier votre adresse e-mail :",
"Please confirm access to your account by entering one of your emergency recovery codes.": "Veuillez confirmer l'accès à votre compte en entrant l'un des codes de récupération d'urgence.",
"Please confirm access to your account by entering the authentication code provided by your authenticator application.": "Veuillez confirmer l'accès à votre compte en entrant le code d'authentification fourni par votre application d'authentification.",
"Please copy your new API token. For your security, it won't be shown again.": "Veuillez copier votre nouveau token API. Pour votre sécurité, il ne sera pas ré-affiché.",
"Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.": "Veuillez entrer votre mot de passe pour confirmer que vous voulez déconnecter toutes les autres sessions de navigateurs sur l'ensemble de vos appareils.",
"Please provide the email address of the person you would like to add to this team.": "Veuillez indiquer l'adresse e-mail de la personne que vous souhaitez ajouter à cette équipe.",
"Precondition Failed": "La précondition a échoué",
"Precondition Required": "Condition préalable requise",
"Preview": "Aperçu",
"Price": "Prix",
"Privacy Policy": "Politique de confidentialité",
"Processing": "En traitement",
"Profile": "Profil",
"Profile Information": "Informations du profil",
"Proxy Authentication Required": "Authentification proxy requise",
"Railgun Error": "Erreur de Railgun",
"Range Not Satisfiable": "Plage non satisfaisante",
"Record": "Enregistrer",
"Recovery Code": "Code de récupération",
"Regards,": "Cordialement,",
"Regenerate Recovery Codes": "Régénérer les codes de récupération",
"Register": "Inscription",
"Remember me": "Se souvenir de moi",
"Remove": "Supprimer",
"Remove Photo": "Supprimer l'image",
"Remove Team Member": "Supprimer le membre d'équipe",
"Request Header Fields Too Large": "Champs d'en-tête de requête trop grands",
"Request Timeout": "Temps d'attente de la requête dépassé",
"Resend Verification Email": "Renvoyer l'e-mail de vérification",
"Reset Content": "Réinitialiser le contenu",
"Reset Password": "Réinitialisation du mot de passe",
"Reset your password": "Reset your password",
"Restore": "Restaurer",
"Restore :name": "Restaurer :name",
"results": "résultats",
"Retry With": "Réessayer avec",
"Role": "Rôle",
"Save": "Sauvegarder",
"Save & Close": "Sauvegarder et fermer",
"Save & Return": "Sauvegarder et retourner",
"Save :name": "Sauvegarder :name",
"Saved.": "Sauvegardé.",
"Search": "Rechercher",
"Search :name": "Chercher :name",
"See Other": "Voir autre",
"Select": "Sélectionner",
"Select A New Photo": "Sélectionner une nouvelle image",
"Select All": "Tout sélectionner",
"Send": "Envoyer",
"Server Error": "Erreur serveur",
"Service Unavailable": "Service indisponible",
"Session Has Expired": "La session a expiré",
"Settings": "Paramètres",
"Setup Key": "Clé de configuration",
"Show": "Afficher",
"Show :name": "Afficher :name",
"Show All": "Afficher tout",
"Show Recovery Codes": "Afficher les codes de récupération",
"Showing": "Montrant",
"Sign In": "Se connecter",
"Solve": "Résoudre",
"SSL Handshake Failed": "Échec de la prise de contact SSL",
"Start": "Commencer",
"Stop": "Arrêter",
"Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.": "Enregistrez ces codes dans un gestionnaire de mot de passe sécurisé. Ils peuvent être réutilisés pour accéder à votre compte si l'authentification à deux facteurs n'aboutit pas.",
"Submit": "Soumettre",
"Subscribe": "S'abonner",
"Switch": "Changer",
"Switch Teams": "Permuter les équipes",
"Switch To Role": "Passer au rôle",
"Switching Protocols": "Protocoles de commutation",
"Tag": "Mot clé",
"Tags": "Mots clés",
"Team Details": "Détails de l'équipe",
"Team Invitation": "Invitation d'équipe",
"Team Members": "Membres de l'équipe",
"Team Name": "Nom de l'équipe",
"Team Owner": "Propriétaire de l'équipe",
"Team Settings": "Préférences de l'équipe",
"Temporary Redirect": "Redirection temporaire",
"Terms of Service": "Conditions d'utilisation",
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Merci de vous être inscrit(e) ! Avant de commencer, veuillez vérifier votre adresse e-mail en cliquant sur le lien que nous venons de vous envoyer. Si vous n'avez pas reçu cet e-mail, nous vous en enverrons un nouveau avec plaisir.",
"The :attribute must be a valid role.": "Le :attribute doit être un rôle valide.",
"The :attribute must be at least :length characters and contain at least one number.": "Le champ :attribute doit avoir au moins :length caractères et contenir au moins un chiffre.",
"The :attribute must be at least :length characters and contain at least one special character and one number.": "Le champ :attribute doit avoir au moins :length caractères et contenir au moins un caractère spécial et un nombre.",
"The :attribute must be at least :length characters and contain at least one special character.": "Le champ :attribute doit avoir au moins :length caractères et contenir au moins un caractère spécial.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one number.": "Le champ :attribute doit avoir au moins :length caractères et contenir au moins une majuscule et un chiffre.",
"The :attribute must be at least :length characters and contain at least one uppercase character and one special character.": "Le champ :attribute doit avoir au moins :length caractères et contenir au moins une majuscule et un caractère spécial.",
"The :attribute must be at least :length characters and contain at least one uppercase character, one number, and one special character.": "Le champ :attribute doit avoir au moins :length caractères, et contenir au moins une majuscule, un chiffre et un caractère spécial.",
"The :attribute must be at least :length characters and contain at least one uppercase character.": "Le champ :attribute doit avoir au moins :length caractères et au moins une majuscule.",
"The :attribute must be at least :length characters.": "Le champ :attribute doit avoir au moins :length caractères.",
"The given data was invalid.": "La donnée renseignée est incorrecte.",
"The password is incorrect.": "Le mot de passe est incorrect.",
"The provided password does not match your current password.": "Le mot de passe indiqué ne correspond pas à votre mot de passe actuel.",
"The provided password was incorrect.": "Le mot de passé indiqué est incorrect.",
"The provided two factor authentication code was invalid.": "Le code d'authentification à deux facteurs fourni est incorrect.",
"The provided two factor recovery code was invalid.": "Le code de récupération fourni pour l'authentification à deux facteurs est incorrect.",
"The response is not a streamed response.": "La réponse n'est pas une réponse diffusée.",
"The response is not a view.": "La réponse n'est pas une vue.",
"The team's name and owner information.": "Les informations concernant l'équipe et son propriétaire.",
"These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.": "Ces personnes ont été invitées à rejoindre votre équipe et ont été prévenues avec un e-mail d'invitation. Ils peuvent rejoindre l'équipe grâce à l'e-mail d'invitation.",
"This action is unauthorized.": "Cette action n'est pas autorisée.",
"This device": "Cet appareil",
"This is a secure area of the application. Please confirm your password before continuing.": "Ceci est une zone sécurisée de l'application. Veuillez confirmer votre mot de passe avant de continuer.",
"This password does not match our records.": "Ce mot de passe ne correspond pas à nos enregistrements.",
"This password reset link will expire in :count minutes.": "Ce lien de réinitialisation du mot de passe expirera dans :count minutes.",
"This user already belongs to the team.": "Cet utilisateur appartient déjà à l'équipe.",
"This user has already been invited to the team.": "Cet utilisateur a déjà été invité à rejoindre l'équipe.",
"to": "à",
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "Pour terminer l'activation de l'authentification à deux facteurs, scannez le code QR suivant à l'aide de l'application d'authentification de votre téléphone ou entrez la clé de configuration et fournissez le code OTP généré.",
"Toggle navigation": "Afficher / masquer le menu de navigation",
"Token Name": "Nom du jeton",
"Too Early": "Trop tôt",
"Too Many Requests": "Trop de requêtes",
"Translate": "Traduire",
"Translate It": "Traduis le",
"Two Factor Authentication": "Authentification à deux facteurs",
"Two factor authentication is now enabled. Scan the following QR code using your phone's authenticator application or enter the setup key.": "L'authentification à deux facteurs est maintenant activée. Scannez le code QR suivant à l'aide de l'application d'authentification de votre téléphone ou entrez la clé de configuration.",
"Unable to register passkey. Please try again.": "Unable to register passkey. Please try again.",
"Unable to register this passkey.": "Unable to register this passkey.",
"Unable to sign in with this account.": "Unable to sign in with this account.",
"Unable to verify passkey. Please try again.": "Unable to verify passkey. Please try again.",
"Unauthorized": "Non autorisé",
"Unavailable For Legal Reasons": "Indisponible pour des raisons légales",
"Unknown": "Inconnu",
"Unknown Error": "Erreur inconnue",
"Unpack": "Déballer",
"Unprocessable Entity": "Entité non traitable",
"Unsubscribe": "Se désabonner",
"Unsupported Media Type": "Type de média non supporté",
"Up": "Monter",
"Update": "Mettre à jour",
"Update :name": "Mettre à jour :name",
"Update Password": "Mettre à jour le mot de passe",
"Update your account's profile information and email address.": "Modifier le profil associé à votre compte ainsi que votre adresse e-mail.",
"Upgrade Required": "Mise à niveau requise",
"URI Too Long": "URI trop long",
"Use a recovery code": "Utiliser un code de récupération",
"Use an authentication code": "Utiliser un code d'authentification",
"Use Proxy": "Utiliser un proxy",
"User": "Utilisateur",
"Variant Also Negotiates": "La variante négocie également",
"Verify Email Address": "Vérifier l'adresse e-mail",
"Verify your email address": "Verify your email address",
"View": "Vue",
"View :name": "Voir :name",
"We were unable to find a registered user with this email address.": "Nous n'avons pas pu trouver un utilisateur enregistré avec cette adresse e-mail.",
"Web Server is Down": "Le serveur Web est en panne",
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.": "Lorsque l'authentification à deux facteurs est activée, vous serez invité à saisir un jeton aléatoire sécurisé lors de l'authentification. Vous pouvez récupérer ce jeton depuis l'application Google Authenticator de votre téléphone.",
"Whoops!": "Oups !",
"Whoops! Something went wrong.": "Oups ! Un problème est survenu.",
"Yes": "Oui",
"You are receiving this email because we received a password reset request for your account.": "Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.",
"You have been invited to join the :team team!": "Vous avez été invité à rejoindre l'équipe :team !",
"You have enabled two factor authentication.": "Vous avez activé l'authentification à deux facteurs.",
"You have not enabled two factor authentication.": "Vous n'avez pas activé l'authentification à deux facteurs.",
"You may accept this invitation by clicking the button below:": "Vous pouvez accepter cette invitation en cliquant sur le bouton ci-dessous :",
"You may delete any of your existing tokens if they are no longer needed.": "Vous pouvez supprimer n'importe lequel de vos jetons existants s'ils ne sont plus nécessaires.",
"You may not delete your personal team.": "Vous ne pouvez pas supprimer votre équipe personnelle.",
"You may not leave a team that you created.": "Vous ne pouvez pas quitter une équipe que vous avez créée.",
"You're logged in!": "Vous êtes connecté !",
"Your email address is unverified.": "Votre adresse e-mail n'est pas vérifiée."
}
+119
View File
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Accepter',
'action' => 'Action',
'actions' => 'Actions',
'add' => 'Ajouter',
'admin' => 'Administrateur',
'agree' => 'Approuver',
'archive' => 'Archiver',
'assign' => 'Attribuer',
'associate' => 'Associer',
'attach' => 'Attacher',
'browse' => 'Parcourir',
'cancel' => 'Annuler',
'choose' => 'Choisir',
'choose_file' => 'Choisir le fichier',
'choose_image' => 'Choisir une image',
'click_to_copy' => 'Cliquer pour copier',
'close' => 'Fermer',
'collapse' => 'Réduire',
'collapse_all' => 'Réduire tout',
'comment' => 'Commentaire',
'confirm' => 'Confirmer',
'connect' => 'Connecter',
'create' => 'Créer',
'delete' => 'Supprimer',
'detach' => 'Détacher',
'details' => 'Détails',
'disable' => 'Désactiver',
'discard' => 'Jeter',
'done' => 'Fait',
'down' => 'Descendre',
'duplicate' => 'Dupliquer',
'edit' => 'Editer',
'enable' => 'Activer',
'expand' => 'Développer',
'expand_all' => 'Développer tout',
'explanation' => 'Explication',
'export' => 'Exporter',
'file' => 'Déposer',
'files' => 'Fichiers',
'go_home' => 'Aller à l\'accueil',
'hide' => 'Cacher',
'home' => 'Accueil',
'image' => 'Image',
'impersonate' => 'Imiter',
'impersonation' => 'Imitation',
'import' => 'Importer',
'introduction' => 'Introduction',
'like' => 'Aimer',
'load' => 'Charger',
'localize' => 'Localiser',
'log_in' => 'Se connecter',
'log_out' => 'Se déconnecter',
'named' => [
'add' => 'Ajouter :name',
'choose' => 'Choisir :name',
'create' => 'Créer :name',
'delete' => 'Supprimer :name',
'duplicate' => 'Dupliquer :name',
'edit' => 'Editer :name',
'export' => 'Exporter :name',
'hide' => 'Cacher :name',
'import' => 'Importer :name',
'new' => 'Nouveau :name',
'restore' => 'Restaurer :name',
'save' => 'Sauvegarder :name',
'search' => 'Chercher :name',
'show' => 'Afficher :name',
'update' => 'Mettre à jour :name',
'view' => 'Voir :name',
],
'new' => 'Nouveau',
'no' => 'Non',
'open' => 'Ouvrir',
'open_website' => 'Ouvrir sur le site',
'preview' => 'Aperçu',
'price' => 'Prix',
'record' => 'Enregistrer',
'restore' => 'Restaurer',
'save' => 'Sauvegarder',
'save_and_close' => 'Sauvegarder et fermer',
'save_and_return' => 'Sauvegarder et retourner',
'search' => 'Chercher',
'select' => 'Sélectionner',
'select_all' => 'Tout sélectionner',
'send' => 'Envoyer',
'settings' => 'Paramètres',
'show' => 'Montrer',
'show_all' => 'Afficher tout',
'sign_in' => 'Se connecter',
'solve' => 'Résoudre',
'start' => 'Commencer',
'stop' => 'Arrêter',
'submit' => 'Soumettre',
'subscribe' => 'S\'abonner',
'switch' => 'Changer',
'switch_to_role' => 'Passer au rôle',
'tag' => 'Mot clé',
'tags' => 'Mots clés',
'target_link' => [
'blank' => 'Ouvrir dans une nouvelle fenêtre',
'parent' => 'Ouvrir dans la fenêtre parente',
'self' => 'Ouvrir dans la fenêtre actuelle',
'top' => 'Ouvrir dans le cadre le plus haut',
],
'translate' => 'Traduire',
'translate_it' => 'Traduis le',
'unpack' => 'Déballer',
'unsubscribe' => 'Se désabonner',
'up' => 'Monter',
'update' => 'Mettre à jour',
'user' => 'Utilisateur',
'view' => 'Voir',
'yes' => 'Oui',
];
+9
View File
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements.',
'password' => 'Le mot de passe est incorrect',
'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
];
+84
View File
@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Erreur inconnue',
'100' => 'Continuer',
'101' => 'Protocoles de commutation',
'102' => 'En traitement',
'200' => 'OK',
'201' => 'Créé',
'202' => 'Accepté',
'203' => 'Informations non certifiées',
'204' => 'Pas de contenu',
'205' => 'Réinitialiser le contenu',
'206' => 'Contenu partiel',
'207' => 'Statut multiple',
'208' => 'Déjà rapporté',
'226' => 'IM utilisé',
'300' => 'Choix multiples',
'301' => 'Déplacé de façon permanente',
'302' => 'A trouvé',
'303' => 'Voir autre',
'304' => 'Non modifié',
'305' => 'Utiliser un proxy',
'307' => 'Redirection temporaire',
'308' => 'Redirection permanente',
'400' => 'Requête invalide',
'401' => 'Non authentifié',
'402' => 'Paiement requis',
'403' => 'Interdit',
'404' => 'Page non trouvée',
'405' => 'Méthode non autorisée',
'406' => 'Non acceptable',
'407' => 'Authentification proxy requise',
'408' => 'Requête expirée',
'409' => 'Conflit',
'410' => 'Disparu',
'411' => 'Longueur requise',
'412' => 'La précondition a échoué',
'413' => 'Charge utile trop grande',
'414' => 'URI trop long',
'415' => 'Type de média non supporté',
'416' => 'Plage non satisfaisante',
'417' => 'Comportement attendu insatisfaisant',
'418' => 'Je suis une théière',
'419' => 'La session a expiré',
'421' => 'Demande mal dirigée',
'422' => 'Contenu non traitable',
'423' => 'Verrouillé',
'424' => 'Dépendance échouée',
'425' => 'Trop tôt',
'426' => 'Mise à niveau requise',
'428' => 'Condition préalable requise',
'429' => 'Trop de demandes',
'431' => 'Champs d\'en-tête de requête trop grands',
'444' => 'Connexion fermée sans réponse',
'449' => 'Réessayer avec',
'451' => 'Indisponible pour des raisons légales',
'499' => 'Demande fermée par le client',
'500' => 'Erreur interne du serveur',
'501' => 'Non implémenté',
'502' => 'Mauvaise passerelle',
'503' => 'Service non disponible',
'504' => 'Temps d\'attente de la passerelle dépassé',
'505' => 'Version HTTP non prise en charge',
'506' => 'La variante négocie également',
'507' => 'Espace insuffisant',
'508' => 'Boucle détectée',
'509' => 'Limite de bande passante dépassée',
'510' => 'Non prolongé',
'511' => 'Authentification réseau requise',
'520' => 'Erreur inconnue',
'521' => 'Le serveur Web est en panne',
'522' => 'La connexion a expiré',
'523' => 'L\'origine est inaccessible',
'524' => 'Un dépassement de délai s\'est produit',
'525' => 'Échec de la prise de contact SSL',
'526' => 'Certificat SSL invalide',
'527' => 'Erreur de Railgun',
'598' => 'Temps d\'attente de la lecture réseau dépassé',
'599' => 'Temps d\'attente de la connexion réseau dépassé',
'unknownError' => 'Erreur inconnue',
];
+8
View File
@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Suivant &raquo;',
'previous' => '&laquo; Précédent',
];
+11
View File
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Votre mot de passe a été réinitialisé !',
'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !',
'throttled' => 'Veuillez patienter avant de réessayer.',
'token' => 'Ce jeton de réinitialisation du mot de passe n\'est pas valide.',
'user' => 'Aucun utilisateur n\'a été trouvé avec cette adresse email.',
];
+288
View File
@@ -0,0 +1,288 @@
<?php
declare(strict_types=1);
return [
'accepted' => 'Le champ :attribute doit être accepté.',
'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.',
'active_url' => 'Le champ :attribute n\'est pas une URL valide.',
'after' => 'Le champ :attribute doit être une date postérieure au :date.',
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.',
'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.',
'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.',
'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.',
'any_of' => 'Le champ :attribute est invalide.',
'array' => 'Le champ :attribute doit être un tableau.',
'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles codés sur un octet.',
'before' => 'Le champ :attribute doit être une date antérieure au :date.',
'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.',
'between' => [
'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.',
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
],
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
'can' => 'Le champ :attribute contient une valeur non autorisée.',
'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.',
'contains' => 'Le champ :attribute manque une valeur requise.',
'current_password' => 'Le mot de passe est incorrect.',
'date' => 'Le champ :attribute n\'est pas une date valide.',
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
'decimal' => 'Le champ :attribute doit comporter :decimal décimales.',
'declined' => 'Le champ :attribute doit être décliné.',
'declined_if' => 'Le champ :attribute doit être décliné quand :other a la valeur :value.',
'different' => 'Les champs :attribute et :other doivent être différents.',
'digits' => 'Le champ :attribute doit contenir :digits chiffres.',
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.',
'distinct' => 'Le champ :attribute a une valeur en double.',
'doesnt_contain' => 'Le champ :attribute ne doit contenir aucun des éléments suivants : :values.',
'doesnt_end_with' => 'Le champ :attribute ne doit pas finir avec une des valeurs suivantes : :values.',
'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer avec une des valeurs suivantes : :values.',
'email' => 'Le champ :attribute doit être une adresse e-mail valide.',
'encoding' => 'The :attribute field must be encoded in :encoding.',
'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values',
'enum' => 'Le champ :attribute sélectionné est invalide.',
'exists' => 'Le champ :attribute sélectionné est invalide.',
'extensions' => 'Le champ :attribute doit avoir l\'une des extensions suivantes : :values.',
'file' => 'Le champ :attribute doit être un fichier.',
'filled' => 'Le champ :attribute doit avoir une valeur.',
'gt' => [
'array' => 'Le tableau :attribute doit contenir plus de :value éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
],
'gte' => [
'array' => 'Le tableau :attribute doit contenir au moins :value éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
],
'hex_color' => 'Le champ :attribute doit être une couleur hexadécimale valide.',
'image' => 'Le champ :attribute doit être une image.',
'in' => 'Le champ :attribute est invalide.',
'in_array' => 'Le champ :attribute n\'existe pas dans :other.',
'in_array_keys' => 'Le champ :attribute doit contenir au moins l\'une des clés suivantes : :values.',
'integer' => 'Le champ :attribute doit être un entier.',
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
'json' => 'Le champ :attribute doit être un document JSON valide.',
'list' => 'Le champ :attribute doit être une liste.',
'lowercase' => 'Le champ :attribute doit être en minuscules.',
'lt' => [
'array' => 'Le tableau :attribute doit contenir moins de :value éléments.',
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
],
'lte' => [
'array' => 'Le tableau :attribute doit contenir au plus :value éléments.',
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
],
'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.',
'max' => [
'array' => 'Le tableau :attribute ne peut pas contenir plus que :max éléments.',
'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',
'numeric' => 'La valeur de :attribute ne peut pas être supérieure à :max.',
'string' => 'Le texte de :attribute ne peut pas contenir plus de :max caractères.',
],
'max_digits' => 'Le champ :attribute ne doit pas avoir plus de :max chiffres.',
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
'min' => [
'array' => 'Le tableau :attribute doit contenir au moins :min éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :min kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
'string' => 'Le texte de :attribute doit contenir au moins :min caractères.',
],
'min_digits' => 'Le champ :attribute doit avoir au moins :min chiffres.',
'missing' => 'Le champ :attribute doit être manquant.',
'missing_if' => 'Le champ :attribute doit être manquant quand :other a la valeur :value.',
'missing_unless' => 'Le champ :attribute doit être manquant sauf si :other a la valeur :value.',
'missing_with' => 'Le champ :attribute doit être manquant quand :values est présent.',
'missing_with_all' => 'Le champ :attribute doit être manquant quand :values sont présents.',
'multiple_of' => 'La valeur de :attribute doit être un multiple de :value',
'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.',
'not_regex' => 'Le format du champ :attribute n\'est pas valide.',
'numeric' => 'Le champ :attribute doit contenir un nombre.',
'password' => [
'letters' => 'Le champ :attribute doit contenir au moins une lettre.',
'mixed' => 'Le champ :attribute doit contenir au moins une majuscule et une minuscule.',
'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.',
'symbols' => 'Le champ :attribute doit contenir au moins un symbole.',
'uncompromised' => 'La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir une valeur différente.',
],
'present' => 'Le champ :attribute doit être présent.',
'present_if' => 'Le champ :attribute doit être présent lorsque :other est :value.',
'present_unless' => 'Le champ :attribute doit être présent sauf si :other vaut :value.',
'present_with' => 'Le champ :attribute doit être présent lorsque :values est présent.',
'present_with_all' => 'Le champ :attribute doit être présent lorsque :values sont présents.',
'prohibited' => 'Le champ :attribute est interdit.',
'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.',
'prohibited_if_accepted' => 'Le champ :attribute est interdit quand :other a été accepté.',
'prohibited_if_declined' => 'Le champ :attribute est interdit quand :other a été refusé.',
'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.',
'prohibits' => 'Le champ :attribute interdit :other d\'être présent.',
'regex' => 'Le format du champ :attribute est invalide.',
'required' => 'Le champ :attribute est obligatoire.',
'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.',
'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',
'required_if_accepted' => 'Le champ :attribute est obligatoire quand le champ :other a été accepté.',
'required_if_declined' => 'Le champ :attribute est obligatoire quand le champ :other a été refusé.',
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.',
'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.',
'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.',
'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.',
'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.',
'same' => 'Les champs :attribute et :other doivent être identiques.',
'size' => [
'array' => 'Le tableau :attribute doit contenir :size éléments.',
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
'numeric' => 'La valeur de :attribute doit être :size.',
'string' => 'Le texte de :attribute doit contenir :size caractères.',
],
'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
'ulid' => 'Le champ :attribute doit être un ULID valide.',
'unique' => 'La valeur du champ :attribute est déjà utilisée.',
'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.',
'uppercase' => 'Le champ :attribute doit être en majuscules.',
'url' => 'Le format de l\'URL de :attribute n\'est pas valide.',
'uuid' => 'Le champ :attribute doit être un UUID valide',
'attributes' => [
'address' => 'adresse',
'affiliate_url' => 'URL d\'affiliation',
'age' => 'âge',
'amount' => 'montant',
'announcement' => 'annonce',
'area' => 'zone',
'audience_prize' => 'prix du public',
'audience_winner' => 'gagnant du public',
'available' => 'disponible',
'birthday' => 'anniversaire',
'body' => 'corps',
'city' => 'ville',
'color' => 'color',
'company' => 'entreprise',
'compilation' => 'compilation',
'concept' => 'concept',
'conditions' => 'conditions',
'content' => 'contenu',
'contest' => 'contest',
'country' => 'pays',
'cover' => 'couverture',
'created_at' => 'date de création',
'creator' => 'créateur',
'currency' => 'devise',
'current_password' => 'mot de passe actuel',
'customer' => 'client',
'date' => 'date',
'date_of_birth' => 'date de naissance',
'dates' => 'rendez-vous',
'day' => 'jour',
'deleted_at' => 'date de suppression',
'description' => 'description',
'display_type' => 'type d\'affichage',
'district' => 'quartier',
'duration' => 'durée',
'email' => 'adresse e-mail',
'excerpt' => 'extrait',
'filter' => 'filtre',
'finished_at' => 'date de fin',
'first_name' => 'prénom',
'gender' => 'genre',
'grand_prize' => 'grand prix',
'group' => 'groupe',
'hour' => 'heure',
'image' => 'image',
'image_desktop' => 'image de bureau',
'image_main' => 'image principale',
'image_mobile' => 'image mobile',
'images' => 'images',
'is_audience_winner' => 'est le gagnant du public',
'is_hidden' => 'est caché',
'is_subscribed' => 'est abonné',
'is_visible' => 'est visible',
'is_winner' => 'est gagnant',
'items' => 'articles',
'key' => 'clé',
'last_name' => 'nom de famille',
'lesson' => 'leçon',
'line_address_1' => 'ligne d\'adresse 1',
'line_address_2' => 'ligne d\'adresse 2',
'login' => 'identifiant',
'message' => 'message',
'middle_name' => 'deuxième prénom',
'minute' => 'minute',
'mobile' => 'portable',
'month' => 'mois',
'name' => 'nom',
'national_code' => 'code national',
'number' => 'numéro',
'password' => 'mot de passe',
'password_confirmation' => 'confirmation du mot de passe',
'phone' => 'téléphone',
'photo' => 'photo',
'portfolio' => 'portefeuille',
'postal_code' => 'code postal',
'preview' => 'aperçu',
'price' => 'prix',
'product_id' => 'identifiant du produit',
'product_uid' => 'UID du produit',
'product_uuid' => 'UUID du produit',
'promo_code' => 'code promo',
'province' => 'région',
'quantity' => 'quantité',
'reason' => 'raison',
'recaptcha_response_field' => 'champ de réponse reCAPTCHA',
'referee' => 'arbitre',
'referees' => 'arbitres',
'region' => 'region',
'reject_reason' => 'motif de rejet',
'remember' => 'se souvenir',
'restored_at' => 'date de restauration',
'result_text_under_image' => 'texte de résultat sous l\'image',
'role' => 'rôle',
'rule' => 'règle',
'rules' => 'règles',
'second' => 'seconde',
'sex' => 'sexe',
'shipment' => 'expédition',
'short_text' => 'texte court',
'size' => 'taille',
'skills' => 'compétences',
'slug' => 'slug',
'specialization' => 'spécialisation',
'started_at' => 'date de début',
'state' => 'état',
'status' => 'statut',
'street' => 'rue',
'student' => 'étudiant',
'subject' => 'sujet',
'tag' => 'mot clé',
'tags' => 'mots clés',
'teacher' => 'professeur',
'terms' => 'conditions',
'test_description' => 'description du test',
'test_locale' => 'localisation du test',
'test_name' => 'nom du test',
'text' => 'texte',
'time' => 'heure',
'title' => 'titre',
'type' => 'type',
'updated_at' => 'date de mise à jour',
'user' => 'utilisateur',
'username' => 'nom d\'utilisateur',
'value' => 'valeur',
'winner' => 'gagnant',
'work' => 'travail',
'year' => 'année',
],
];
+119
View File
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Accepter',
'action' => 'Action',
'actions' => 'Actions',
'add' => 'Ajouter',
'admin' => 'Administrateur',
'agree' => 'Approuver',
'archive' => 'Archiver',
'assign' => 'Attribuer',
'associate' => 'Associer',
'attach' => 'Attacher',
'browse' => 'Parcourir',
'cancel' => 'Annuler',
'choose' => 'Choisir',
'choose_file' => 'Choisir le fichier',
'choose_image' => 'Choisir une image',
'click_to_copy' => 'Cliquer pour copier',
'close' => 'Fermer',
'collapse' => 'Réduire',
'collapse_all' => 'Réduire tout',
'comment' => 'Commentaire',
'confirm' => 'Confirmer',
'connect' => 'Connecter',
'create' => 'Créer',
'delete' => 'Supprimer',
'detach' => 'Détacher',
'details' => 'Détails',
'disable' => 'Désactiver',
'discard' => 'Jeter',
'done' => 'Fait',
'down' => 'Descendre',
'duplicate' => 'Dupliquer',
'edit' => 'Editer',
'enable' => 'Activer',
'expand' => 'Développer',
'expand_all' => 'Développer tout',
'explanation' => 'Explication',
'export' => 'Exporter',
'file' => 'Déposer',
'files' => 'Fichiers',
'go_home' => 'Aller à l\'accueil',
'hide' => 'Cacher',
'home' => 'Accueil',
'image' => 'Image',
'impersonate' => 'Imiter',
'impersonation' => 'Imitation',
'import' => 'Importer',
'introduction' => 'Introduction',
'like' => 'Aimer',
'load' => 'Charger',
'localize' => 'Localiser',
'log_in' => 'Se connecter',
'log_out' => 'Se déconnecter',
'named' => [
'add' => 'Ajouter :name',
'choose' => 'Choisir :name',
'create' => 'Créer :name',
'delete' => 'Supprimer :name',
'duplicate' => 'Dupliquer :name',
'edit' => 'Editer :name',
'export' => 'Exporter :name',
'hide' => 'Cacher :name',
'import' => 'Importer :name',
'new' => 'Nouveau :name',
'restore' => 'Restaurer :name',
'save' => 'Sauvegarder :name',
'search' => 'Chercher :name',
'show' => 'Afficher :name',
'update' => 'Mettre à jour :name',
'view' => 'Voir :name',
],
'new' => 'Nouveau',
'no' => 'Non',
'open' => 'Ouvrir',
'open_website' => 'Ouvrir sur le site',
'preview' => 'Aperçu',
'price' => 'Prix',
'record' => 'Enregistrer',
'restore' => 'Restaurer',
'save' => 'Sauvegarder',
'save_and_close' => 'Sauvegarder et fermer',
'save_and_return' => 'Sauvegarder et retourner',
'search' => 'Chercher',
'select' => 'Sélectionner',
'select_all' => 'Tout sélectionner',
'send' => 'Envoyer',
'settings' => 'Paramètres',
'show' => 'Montrer',
'show_all' => 'Afficher tout',
'sign_in' => 'Se connecter',
'solve' => 'Résoudre',
'start' => 'Commencer',
'stop' => 'Arrêter',
'submit' => 'Soumettre',
'subscribe' => 'S\'abonner',
'switch' => 'Changer',
'switch_to_role' => 'Passer au rôle',
'tag' => 'Mot clé',
'tags' => 'Mots clés',
'target_link' => [
'blank' => 'Ouvrir dans une nouvelle fenêtre',
'parent' => 'Ouvrir dans la fenêtre parente',
'self' => 'Ouvrir dans la fenêtre actuelle',
'top' => 'Ouvrir dans le cadre le plus haut',
],
'translate' => 'Traduire',
'translate_it' => 'Traduis le',
'unpack' => 'Déballer',
'unsubscribe' => 'Se désabonner',
'up' => 'Monter',
'update' => 'Mettre à jour',
'user' => 'Utilisateur',
'view' => 'Voir',
'yes' => 'Oui',
];
+9
View File
@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements.',
'password' => 'Le mot de passe est incorrect',
'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
];
+84
View File
@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Erreur inconnue',
'100' => 'Continuer',
'101' => 'Protocoles de commutation',
'102' => 'En traitement',
'200' => 'OK',
'201' => 'Créé',
'202' => 'Accepté',
'203' => 'Informations non certifiées',
'204' => 'Pas de contenu',
'205' => 'Réinitialiser le contenu',
'206' => 'Contenu partiel',
'207' => 'Statut multiple',
'208' => 'Déjà rapporté',
'226' => 'IM utilisé',
'300' => 'Choix multiples',
'301' => 'Déplacé de façon permanente',
'302' => 'A trouvé',
'303' => 'Voir autre',
'304' => 'Non modifié',
'305' => 'Utiliser un proxy',
'307' => 'Redirection temporaire',
'308' => 'Redirection permanente',
'400' => 'Requête invalide',
'401' => 'Non authentifié',
'402' => 'Paiement requis',
'403' => 'Interdit',
'404' => 'Page non trouvée',
'405' => 'Méthode non autorisée',
'406' => 'Non acceptable',
'407' => 'Authentification proxy requise',
'408' => 'Requête expirée',
'409' => 'Conflit',
'410' => 'Disparu',
'411' => 'Longueur requise',
'412' => 'La précondition a échoué',
'413' => 'Charge utile trop grande',
'414' => 'URI trop long',
'415' => 'Type de média non supporté',
'416' => 'Plage non satisfaisante',
'417' => 'Comportement attendu insatisfaisant',
'418' => 'Je suis une théière',
'419' => 'La session a expiré',
'421' => 'Demande mal dirigée',
'422' => 'Contenu non traitable',
'423' => 'Verrouillé',
'424' => 'Dépendance échouée',
'425' => 'Trop tôt',
'426' => 'Mise à niveau requise',
'428' => 'Condition préalable requise',
'429' => 'Trop de demandes',
'431' => 'Champs d\'en-tête de requête trop grands',
'444' => 'Connexion fermée sans réponse',
'449' => 'Réessayer avec',
'451' => 'Indisponible pour des raisons légales',
'499' => 'Demande fermée par le client',
'500' => 'Erreur interne du serveur',
'501' => 'Non implémenté',
'502' => 'Mauvaise passerelle',
'503' => 'Service non disponible',
'504' => 'Temps d\'attente de la passerelle dépassé',
'505' => 'Version HTTP non prise en charge',
'506' => 'La variante négocie également',
'507' => 'Espace insuffisant',
'508' => 'Boucle détectée',
'509' => 'Limite de bande passante dépassée',
'510' => 'Non prolongé',
'511' => 'Authentification réseau requise',
'520' => 'Erreur inconnue',
'521' => 'Le serveur Web est en panne',
'522' => 'La connexion a expiré',
'523' => 'L\'origine est inaccessible',
'524' => 'Un dépassement de délai s\'est produit',
'525' => 'Échec de la prise de contact SSL',
'526' => 'Certificat SSL invalide',
'527' => 'Erreur de Railgun',
'598' => 'Temps d\'attente de la lecture réseau dépassé',
'599' => 'Temps d\'attente de la connexion réseau dépassé',
'unknownError' => 'Erreur inconnue',
];
+8
View File
@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Suivant &raquo;',
'previous' => '&laquo; Précédent',
];

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