Mehrsprachigkeit der Oberfläche (Deutsch Standard, Englisch wählbar)
- Sprache je Benutzer (users.locale), Middleware SetLocale, Auswahl unter Einstellungen → Darstellung; angebotene Sprachen in config/app.php - Übersetzungen über Laravel Lang (lang/de.json, lang/de/*.php), Seitentitel aus #[Title] werden übersetzt - Eigene Texte und Korrekturen in lang/project/de.json, übernommen mit `artisan lang:apply-project` (überstehen `lang:update`) - Tests: jede im Code verwendete Übersetzung ist vorhanden, eigene Übersetzungen sind übernommen, Sprachwahl und Standardsprache; SecurityTest prüft Texte sprachunabhängig über __() - lang/ von Pint ausgenommen (erzeugte Dateien) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
cdd2d5b676
commit
db2d5d6228
@@ -56,6 +56,14 @@ wird nicht umgangen.
|
||||
Begriffe nach Laravel-Konvention englisch (`Controller`, `Policy`, `Job`).
|
||||
- **Länder DE/AT:** gemeinsamer Kern, länderspezifische Logik hinter Schnittstellen in
|
||||
`app/Laender/DE` bzw. `app/Laender/AT`. Fachliche Tabellen bekommen `mandant_id` und `land`.
|
||||
- **Mehrsprachigkeit:** Jeder sichtbare Text über `__('English source text')`, nie fest im
|
||||
Template. Standardsprache Deutsch, angebotene Sprachen in `config('app.available_locales')`,
|
||||
Sprache je Benutzer in `users.locale` (Middleware `SetLocale`).
|
||||
- `lang/de.json` und `lang/de/*.php` erzeugt Laravel Lang – nicht von Hand ändern.
|
||||
- Eigene Texte und Korrekturen gehören nach `lang/project/{locale}.json`, danach
|
||||
`sail artisan lang:apply-project`. Nach `sail artisan lang:update` ebenfalls `lang:apply-project`.
|
||||
- `TranslationCoverageTest` schlägt fehl, wenn ein Text ohne Übersetzung ist.
|
||||
- In Tests Texte über `__()` prüfen statt fest auf Englisch oder Deutsch.
|
||||
- **Tests:** Pest als Runner, Tests im PHPUnit-Klassenstil (`tests/Feature`, `tests/Unit`).
|
||||
Tests laufen gegen die Datenbank `testing`, nie gegen `ki_bauin`.
|
||||
- **Commit-Nachrichten** auf Deutsch.
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
|
||||
/**
|
||||
* Überträgt die eigenen Übersetzungen aus lang/project/{locale}.json in lang/{locale}.json.
|
||||
*
|
||||
* lang/{locale}.json wird von Laravel Lang erzeugt; `lang:update` setzt dabei geänderte Paket-Texte
|
||||
* zurück. Eigene Texte und Korrekturen stehen deshalb in lang/project/ und haben Vorrang.
|
||||
*/
|
||||
class ApplyProjectTranslations extends Command
|
||||
{
|
||||
protected $signature = 'lang:apply-project';
|
||||
|
||||
protected $description = 'Eigene Übersetzungen aus lang/project/ in lang/{locale}.json übernehmen';
|
||||
|
||||
public function handle(Filesystem $files): int
|
||||
{
|
||||
foreach ($files->glob(lang_path('project/*.json')) as $projectFile) {
|
||||
$locale = pathinfo($projectFile, PATHINFO_FILENAME);
|
||||
$target = lang_path("{$locale}.json");
|
||||
|
||||
$translations = $files->exists($target)
|
||||
? json_decode($files->get($target), true, flags: JSON_THROW_ON_ERROR)
|
||||
: [];
|
||||
$project = json_decode($files->get($projectFile), true, flags: JSON_THROW_ON_ERROR);
|
||||
|
||||
$files->put($target, json_encode(
|
||||
array_merge($translations, $project),
|
||||
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR,
|
||||
).PHP_EOL);
|
||||
|
||||
$this->components->info(count($project)." Übersetzungen nach lang/{$locale}.json übernommen.");
|
||||
}
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* Setzt die Sprache der Oberfläche: die des angemeldeten Benutzers, sonst die Standardsprache.
|
||||
*/
|
||||
class SetLocale
|
||||
{
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
/** @var array<string, string> $available */
|
||||
$available = config('app.available_locales');
|
||||
$locale = $request->user()?->locale;
|
||||
|
||||
if (! is_string($locale) || ! array_key_exists($locale, $available)) {
|
||||
$locale = config('app.locale');
|
||||
}
|
||||
|
||||
App::setLocale($locale);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -2,11 +2,36 @@
|
||||
|
||||
namespace App\Livewire\Settings;
|
||||
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Component;
|
||||
|
||||
#[Title('Appearance settings')]
|
||||
class Appearance extends Component
|
||||
{
|
||||
//
|
||||
public string $locale = '';
|
||||
|
||||
/**
|
||||
* Mount the component.
|
||||
*/
|
||||
public function mount(): void
|
||||
{
|
||||
$this->locale = App::getLocale();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the selected interface language and reload the page in that language.
|
||||
*/
|
||||
public function updatedLocale(): void
|
||||
{
|
||||
$this->validate([
|
||||
'locale' => ['required', 'string', Rule::in(array_keys(config('app.available_locales')))],
|
||||
]);
|
||||
|
||||
Auth::user()->update(['locale' => $this->locale]);
|
||||
|
||||
$this->redirectRoute('appearance.edit');
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ use Spatie\Permission\Traits\HasRoles;
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string $email
|
||||
* @property string|null $locale
|
||||
* @property Carbon|null $email_verified_at
|
||||
* @property string $password
|
||||
* @property string|null $two_factor_secret
|
||||
@@ -29,7 +30,7 @@ use Spatie\Permission\Traits\HasRoles;
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
*/
|
||||
#[Fillable(['name', 'email', 'password'])]
|
||||
#[Fillable(['name', 'email', 'password', 'locale'])]
|
||||
#[Hidden(['password', 'two_factor_secret', 'two_factor_recovery_codes', 'remember_token'])]
|
||||
class User extends Authenticatable implements MustVerifyEmail, PasskeyUser
|
||||
{
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Middleware\SetLocale;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
@@ -12,7 +13,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
//
|
||||
$middleware->web(append: SetLocale::class);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions): void {
|
||||
$exceptions->shouldRenderJsonWhen(
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.24",
|
||||
"larastan/larastan": "^3.9",
|
||||
"laravel-lang/common": "^6.8",
|
||||
"laravel/pail": "^1.2.5",
|
||||
"laravel/pao": "^1.0.6",
|
||||
"laravel/pint": "^1.27",
|
||||
|
||||
Generated
+1859
-1
File diff suppressed because it is too large
Load Diff
+12
-1
@@ -78,10 +78,21 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => env('APP_LOCALE', 'en'),
|
||||
'locale' => env('APP_LOCALE', 'de'),
|
||||
|
||||
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
|
||||
|
||||
/*
|
||||
| Sprachen, die Benutzer in den Einstellungen wählen können (Code => Bezeichnung
|
||||
| in der jeweiligen Sprache). Für jede Sprache außer "en" muss lang/{code}.json
|
||||
| alle Texte enthalten, siehe TranslationCoverageTest.
|
||||
*/
|
||||
|
||||
'available_locales' => [
|
||||
'de' => 'Deutsch',
|
||||
'en' => 'English',
|
||||
],
|
||||
|
||||
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
|
||||
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?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) {
|
||||
// Sprache der Oberfläche; null = Standard aus config('app.locale')
|
||||
$table->string('locale', 10)->nullable()->after('email');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('locale');
|
||||
});
|
||||
}
|
||||
};
|
||||
+2
-1
@@ -15,6 +15,7 @@ und benennt, wo KI-BauIN bewusst abweicht und warum.
|
||||
| Tailwind CSS 4 | Gestaltung | gleich |
|
||||
| TallStackUI 4 (Präfix `ts-`) | UI-Komponenten | Version abweichend (Referenz: 3) |
|
||||
| Laravel Fortify | Login, Passwort-Reset, E-Mail-Bestätigung, 2FA, Passkeys | ergänzt |
|
||||
| Mehrsprachigkeit | Deutsch (Standard) und Englisch, Sprache je Benutzer; Übersetzungen über Laravel Lang (nur Entwicklung), eigene Texte in `lang/project/` | ergänzt |
|
||||
| Vite 8, Node.js/npm | Asset-Build | gleich |
|
||||
| Composer | Abhängigkeiten mit Lockfile | gleich |
|
||||
| PhpSpreadsheet | Excel-Export der Bewertungsmatrix | geplant, sobald die Vorlage vorliegt |
|
||||
@@ -102,7 +103,7 @@ Ergänzt bzw. anders als in der Referenz:
|
||||
- Ist 2FA für alle Benutzer Pflicht?
|
||||
- Verlangt die IT des Kunden eine Festplattenverschlüsselung auf der VM?
|
||||
- Speicherort und Aufbewahrungsdauer der Backups.
|
||||
- Deutsche Übersetzung der Oberflächentexte (das Starter-Kit liefert englische Texte).
|
||||
- Weitere Sprachen über Deutsch und Englisch hinaus (technisch vorbereitet, fachlich nicht angefragt).
|
||||
|
||||
## Architekturübersicht
|
||||
|
||||
|
||||
+426
@@ -0,0 +1,426 @@
|
||||
{
|
||||
"(and :count more error)": "(und :count weiterer Fehler)",
|
||||
"(and :count more errors)": "(und :count weiterer Fehler)|(und :count weitere Fehler)|(und :count weitere Fehler)",
|
||||
"2FA recovery codes": "2FA-Wiederherstellungscodes",
|
||||
":action to join the \":team\" team.": ":action to join the \":team\" team.",
|
||||
":inviter invited you to join this team.": ":inviter invited you to join this team.",
|
||||
":inviterName has invited you to join the :teamName team.": ":inviterName hat Sie eingeladen, dem Team :teamName beizutreten.",
|
||||
"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 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 or decline the teams you have been invited to join.": "Nehmen Sie die Einladungen zu den Teams, zu denen Sie eingeladen wurden, an oder lehnen Sie sie ab.",
|
||||
"Accepted": "Akzeptiert",
|
||||
"Action": "Aktion",
|
||||
"Actions": "Aktionen",
|
||||
"Add": "Hinzufügen",
|
||||
"Add :name": ":name hinzufügen",
|
||||
"Add a passkey to sign in without a password": "Fügen Sie einen Passkey hinzu, um sich ohne Passwort anzumelden.",
|
||||
"Add passkey": "Passkey hinzufügen",
|
||||
"Added :time": "Hinzugefügt :time",
|
||||
"Admin": "Administrator",
|
||||
"Agree": "Zustimmen",
|
||||
"All rights reserved.": "Alle Rechte vorbehalten.",
|
||||
"Already have an account?": "Haben Sie bereits ein Konto?",
|
||||
"Already Reported": "Bereits gemeldet",
|
||||
"An invitation has already been sent to this email address.": "An diese E-Mail-Adresse wurde bereits eine Einladung gesendet.",
|
||||
"Appearance": "Darstellung",
|
||||
"Appearance settings": "Darstellungseinstellungen",
|
||||
"Archive": "Archiv",
|
||||
"Are you sure you want to cancel the invitation for :email?": "Möchten Sie die Einladung für :email wirklich abbrechen?",
|
||||
"Are you sure you want to delete your account?": "Möchten Sie Ihr Konto wirklich löschen?",
|
||||
"Are you sure you want to leave :name?": "Sind Sie sicher, dass Sie :name verlassen möchten?",
|
||||
"Are you sure you want to remove :name from this team?": "Möchten Sie :name wirklich aus diesem Team entfernen möchten?",
|
||||
"Are you sure you want to remove the passkey \":name\"? You will no longer be able to use it to sign in.": "Sind Sie sicher, dass Sie den Passkey \":name\" entfernen möchten? Sie werden ihn nicht mehr für die Anmeldung verwenden können.",
|
||||
"Are you sure?": "Sind Sie sicher?",
|
||||
"Assign": "Zuordnen",
|
||||
"Associate": "Assoziieren",
|
||||
"Attach": "Anhängen",
|
||||
"Authenticating...": "Anmeldung läuft …",
|
||||
"Authentication code": "Authentifizierungscode",
|
||||
"Back": "Zurück",
|
||||
"Bad Gateway": "Fehlerhaftes Gateway",
|
||||
"Bad Request": "Ungültige Anfrage",
|
||||
"Bandwidth Limit Exceeded": "Bandbreitenlimit überschritten",
|
||||
"Browse": "Durchsuchen",
|
||||
"Cancel": "Abbrechen",
|
||||
"Cancel invitation": "Einladung 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.": "Klicken Sie hier, um die Bestätigungs-E-Mail erneut zu senden.",
|
||||
"Click to copy": "Klicken Sie zum Kopieren",
|
||||
"Client Closed Request": "Client hat die Anfrage geschlossen",
|
||||
"Close": "Schließen",
|
||||
"Collapse": "Zusammenklappen",
|
||||
"Collapse All": "Alle zusammenklappen",
|
||||
"Comment": "Kommentar",
|
||||
"Confirm": "Bestätigen",
|
||||
"Confirm password": "Passwort bestätigen",
|
||||
"Confirm with passkey": "Mit Passkey bestätigen",
|
||||
"Confirming...": "Bestätigung läuft …",
|
||||
"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": "Neues Team erstellen",
|
||||
"Create account": "Konto erstellen",
|
||||
"Create an account": "Ein Konto erstellen",
|
||||
"Create team": "Team erstellen",
|
||||
"Created": "Erstellt",
|
||||
"Current password": "Aktuelles Passwort",
|
||||
"Dark": "Dunkel",
|
||||
"Dashboard": "Dashboard",
|
||||
"Decline": "Ablehnen",
|
||||
"Delete": "Löschen",
|
||||
"Delete :name": ":name löschen",
|
||||
"Delete account": "Konto löschen",
|
||||
"Delete team": "Team löschen",
|
||||
"Delete your account and all of its resources": "Löschen Sie Ihr Konto und alle zugehörigen Ressourcen",
|
||||
"Detach": "Trennen",
|
||||
"Details": "Details",
|
||||
"Disable": "Deaktivieren",
|
||||
"Disable 2FA": "2FA deaktivieren",
|
||||
"Discard": "Verwerfen",
|
||||
"Documentation": "Dokumentation",
|
||||
"Don't have an account?": "Sie haben noch kein Konto?",
|
||||
"Done": "Erledigt",
|
||||
"Down": "Runter",
|
||||
"Duplicate": "Duplizieren",
|
||||
"Duplicate :name": ":name duplizieren",
|
||||
"e.g., MacBook Pro, iPhone": "z. B. MacBook Pro, iPhone",
|
||||
"Each recovery code can be used once to access your account and will be removed after use. If you need more, click Regenerate codes above.": "Jeder Wiederherstellungscode kann einmal für den Zugriff auf Ihr Konto verwendet werden und wird nach der Verwendung gelöscht. Wenn Sie weitere Codes benötigen, klicken Sie oben auf „Codes neu generieren“.",
|
||||
"Edit": "Bearbeiten",
|
||||
"Edit :name": ":name bearbeiten",
|
||||
"Edit team": "Team bearbeiten",
|
||||
"Email": "E-Mail",
|
||||
"Email address": "E-Mail-Adresse",
|
||||
"Email password reset link": "Link zum Zurücksetzen senden",
|
||||
"Email verification": "E-Mail-Bestätigung",
|
||||
"Enable": "Aktivieren",
|
||||
"Enable 2FA": "2FA aktivieren",
|
||||
"Enable two-factor authentication": "Zwei-Faktor-Authentifizierung 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 sicher zu bleiben",
|
||||
"Enter the 6-digit code from your authenticator app.": "Geben Sie den 6-stelligen Code aus Ihrer Authentifizierungs-App ein.",
|
||||
"Enter the authentication code provided by your authenticator application.": "Geben Sie den von Ihrer Authentifizierungsanwendung bereitgestellten Authentifizierungscode ein.",
|
||||
"Enter your details below to create your account": "Geben Sie unten Ihre Daten ein, um Ihr Konto zu erstellen",
|
||||
"Enter your email and password below to log in": "Geben Sie unten Ihre E-Mail-Adresse und Ihr Passwort ein, um sich anzumelden",
|
||||
"Enter your email to receive a password reset link": "Geben Sie Ihre E-Mail-Adresse ein, um einen Link zum Zurücksetzen des Passworts zu erhalten",
|
||||
"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",
|
||||
"Forbidden": "Verboten",
|
||||
"Forgot password": "Passwort vergessen",
|
||||
"Forgot your password?": "Passwort vergessen?",
|
||||
"Found": "Gefunden",
|
||||
"Full name": "Vollständiger Name",
|
||||
"Gateway Timeout": "Gateway-Zeitüberschreitung",
|
||||
"Give this passkey a name to help you identify it later.": "Geben Sie diesem Passkey einen Namen, damit Sie ihn später leichter identifizieren können.",
|
||||
"Give your team a name to get started.": "Geben Sie Ihrem Team einen Namen, um loszulegen.",
|
||||
"Go Home": "Zur Startseite",
|
||||
"Go to page :page": "Gehe zur Seite :page",
|
||||
"Gone": "Nicht mehr verfügbar",
|
||||
"Hello!": "Hallo!",
|
||||
"Hide": "Verstecken",
|
||||
"Hide :name": ":name ausblenden",
|
||||
"Hide recovery codes": "Wiederherstellungscodes ausblenden",
|
||||
"Home": "Startseite",
|
||||
"HTTP Version Not Supported": "HTTP Version nicht unterstützt",
|
||||
"I'm a teapot": "Ich bin eine Teekanne",
|
||||
"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 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'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",
|
||||
"Invitation accepted.": "Einladung akzeptiert.",
|
||||
"Invitation cancelled.": "Einladung abgebrochen.",
|
||||
"Invitation declined.": "Einladung abgelehnt.",
|
||||
"Invitation sent.": "Einladung gesendet.",
|
||||
"Invitations that have not been accepted yet": "Einladungen, die noch nicht angenommen wurden",
|
||||
"Invite a team member": "Ein Teammitglied einladen",
|
||||
"Invite member": "Mitglied einladen",
|
||||
"Keep invitation": "Einladung behalten",
|
||||
"Language": "Sprache",
|
||||
"Last used :time": "Zuletzt :time verwendet",
|
||||
"Leave team": "Team verlassen",
|
||||
"Length Required": "Längenangabe erforderlich",
|
||||
"Light": "Hell",
|
||||
"Like": "Wie",
|
||||
"Load": "Belastung",
|
||||
"Localize": "Lokalisieren",
|
||||
"Location": "Standort",
|
||||
"Locked": "Gesperrt",
|
||||
"Log In": "Einloggen",
|
||||
"Log in": "Anmelden",
|
||||
"log in": "Anmeldung",
|
||||
"Log in and visit your dashboard to accept or decline this invitation.": "Melden Sie sich an und besuchen Sie Ihr Dashboard, um diese Einladung anzunehmen oder abzulehnen.",
|
||||
"Log in to your account": "Melden Sie sich bei Ihrem Konto an",
|
||||
"Log Out": "Abmelden",
|
||||
"Log out": "Abmelden",
|
||||
"Login": "Anmelden",
|
||||
"login using a recovery code": "sich mit einem Wiederherstellungscode anmelden",
|
||||
"login using an authentication code": "sich mit einem Authentifizierungscode anmelden",
|
||||
"Logout": "Abmelden",
|
||||
"Loop Detected": "Endlosschleife erkannt",
|
||||
"Maintenance Mode": "Wartungsmodus",
|
||||
"Manage who belongs to this team": "Verwalten Sie, wer zu diesem Team gehört",
|
||||
"Manage your passkeys for passwordless sign-in": "Verwalten Sie Ihre Passkeys für die passwortlose Anmeldung",
|
||||
"Manage your profile and account settings": "Verwalten Sie Ihr Profil und Ihre Kontoeinstellungen",
|
||||
"Manage your team settings": "Verwalten Sie Ihre Teameinstellungen",
|
||||
"Manage your teams and team memberships": "Verwalten Sie Ihre Teams und Teamzugehörigkeiten",
|
||||
"Manage your two-factor authentication settings": "Verwalten Sie Ihre Einstellungen für die Zwei-Faktor-Authentifizierung",
|
||||
"Member removed.": "Mitglied entfernt.",
|
||||
"Member role updated.": "Mitgliedsrolle aktualisiert.",
|
||||
"Method Not Allowed": "Methode nicht erlaubt",
|
||||
"Misdirected Request": "Fehlgeleitete Anfrage",
|
||||
"Moved Permanently": "Permanent verschoben",
|
||||
"Multi-Status": "Multistatus",
|
||||
"Multiple Choices": "Mehrere Auswahlmöglichkeiten",
|
||||
"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",
|
||||
"New team": "Neues Team",
|
||||
"No": "Nein",
|
||||
"No Content": "Kein Inhalt",
|
||||
"No passkeys yet": "Noch keine Passkeys",
|
||||
"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 your account is deleted, all of its resources and data will also be permanently deleted. Please confirm you would like to permanently delete your account.": "Sobald Ihr Konto gelöscht ist, werden auch alle zugehörigen Ressourcen und Daten dauerhaft gelöscht. Bitte bestätigen Sie, dass Sie Ihr Konto dauerhaft löschen 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",
|
||||
"Or confirm with password": "Oder mit Passwort bestätigen",
|
||||
"Or continue with email": "Oder mit E-Mail fortfahren",
|
||||
"or you can": "oder Sie können",
|
||||
"or, enter the code manually": "oder geben Sie den Code manuell ein",
|
||||
"Or, return to": "Oder zurück zur",
|
||||
"Origin Is Unreachable": "Quelle ist nicht erreichbar",
|
||||
"Page Expired": "Seite abgelaufen",
|
||||
"Pagination Navigation": "Seiten-Navigation",
|
||||
"Partial Content": "Teilinhalt",
|
||||
"Passkey name": "Name des Passkeys",
|
||||
"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.",
|
||||
"Passkeys": "Passkeys",
|
||||
"Passkeys are not supported in this browser.": "Passkeys werden in diesem Browser nicht unterstützt.",
|
||||
"Password": "Passwort",
|
||||
"Password updated.": "Passwort aktualisiert.",
|
||||
"Payload Too Large": "Nutzlast zu groß",
|
||||
"Payment Required": "Zahlung erforderlich",
|
||||
"Pending invitations": "Ausstehende Einladungen",
|
||||
"Pending team invitations": "Ausstehende Teameinladungen",
|
||||
"Permanent Redirect": "Permanente Weiterleitung",
|
||||
"Permanently delete your team": "Löschen Sie Ihr Team endgültig",
|
||||
"Personal": "Persönlich",
|
||||
"Platform": "Plattform",
|
||||
"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 enter your new password below": "Bitte geben Sie nachstehend Ihr neues Passwort ein.",
|
||||
"Please proceed with caution, this cannot be undone.": "Bitte gehen Sie mit Vorsicht vor, dies kann nicht rückgängig gemacht werden.",
|
||||
"Please verify your email address by clicking on the link we just emailed to you.": "Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf den Link klicken, den wir Ihnen gerade per E-Mail gesendet haben.",
|
||||
"Precondition Failed": "Vorbedingung fehlgeschlagen",
|
||||
"Precondition Required": "Voraussetzung erforderlich",
|
||||
"Preview": "Vorschau",
|
||||
"Price": "Preis",
|
||||
"Processing": "In Bearbeitung",
|
||||
"Profile": "Profil",
|
||||
"Profile settings": "Profileinstellungen",
|
||||
"Profile updated.": "Profil aktualisiert.",
|
||||
"Proxy Authentication Required": "Proxy-Authentifizierung erforderlich",
|
||||
"Railgun Error": "Railgun-Fehler",
|
||||
"Range Not Satisfiable": "Bereich nicht erfüllbar",
|
||||
"Record": "Aufzeichnen",
|
||||
"Recovery code": "Wiederherstellungscode",
|
||||
"Recovery codes": "Wiederherstellungscodes",
|
||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Mit Wiederherstellungscodes können Sie wieder Zugriff erhalten, wenn Sie Ihr 2FA-Gerät verlieren. Speichern Sie diese in einem sicheren Passwort-Manager.",
|
||||
"Regards,": "Mit freundlichen Grüßen,",
|
||||
"Regenerate codes": "Codes neu generieren",
|
||||
"Register": "Registrieren",
|
||||
"Register passkey": "Passkey registrieren",
|
||||
"Registering...": "Registrierung läuft …",
|
||||
"Remember me": "Angemeldet bleiben",
|
||||
"Remove member": "Mitglied entfernen",
|
||||
"Remove passkey": "Passkey entfernen",
|
||||
"Remove team member": "Team Mitglied entfernen",
|
||||
"Repository": "Repository",
|
||||
"Request Header Fields Too Large": "Anfrage-Header-Felder zu groß",
|
||||
"Request Timeout": "Zeitüberschreitung der Anfrage",
|
||||
"Resend verification email": "Bestätigungs-E-Mail erneut senden",
|
||||
"Reset Content": "Inhalt zurücksetzen",
|
||||
"Reset Password": "Passwort 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",
|
||||
"Search": "Suche",
|
||||
"Search :name": "Suche :name",
|
||||
"Security": "Sicherheit",
|
||||
"Security settings": "Sicherheitseinstellungen",
|
||||
"See Other": "Siehe andere Seite",
|
||||
"Select": "Wählen Sie",
|
||||
"Select All": "Wählen Sie Alle",
|
||||
"Select team": "Team auswählen",
|
||||
"Send": "Schicken",
|
||||
"Send an invitation to join this team.": "Eine Einladung für dieses Team verschicken.",
|
||||
"Send invitation": "Einadlung senden",
|
||||
"Server Error": "Interner Fehler",
|
||||
"Service Unavailable": "Service nicht verfügbar",
|
||||
"Session Has Expired": "Sitzung ist abgelaufen",
|
||||
"Settings": "Einstellungen",
|
||||
"Show": "Zeigen",
|
||||
"Show :name": ":name anzeigen",
|
||||
"Show All": "Zeige alles",
|
||||
"Showing": "Zeige",
|
||||
"Sign In": "Anmelden",
|
||||
"Sign in with a passkey": "Mit einem Passkey anmelden",
|
||||
"Sign up": "Registrieren",
|
||||
"Solve": "Lösen",
|
||||
"SSL Handshake Failed": "SSL Handshake fehlgeschlagen",
|
||||
"Start": "Starten",
|
||||
"Stop": "Stoppen",
|
||||
"Submit": "Einreichen",
|
||||
"Subscribe": "Abonnieren",
|
||||
"Switch": "Wechseln",
|
||||
"Switch To Role": "Zur Rolle wechseln",
|
||||
"Switching Protocols": "Protokollwechsel",
|
||||
"System": "System",
|
||||
"Tag": "Stichwort",
|
||||
"Tags": "Stichworte",
|
||||
"Team created.": "Team erstellt.",
|
||||
"Team deleted.": "Team gelöscht.",
|
||||
"Team members": "Teammitglieder",
|
||||
"Team name": "Teamname",
|
||||
"Team updated.": "Team aktualisiert.",
|
||||
"Teams": "Teams",
|
||||
"Temporary Redirect": "Temporäre Weiterleitung",
|
||||
"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 existing encrypted environment file is not in readable format. Use --force to overwrite it.": "Die vorhandene verschlüsselte Umgebungsdatei liegt nicht in einem lesbaren Format vor. Verwenden Sie --force, um sie zu überschreiben.",
|
||||
"The existing encryption key is required to update the encrypted environment file.": "Der vorhandene Verschlüsselungsschlüssel wird benötigt, um die verschlüsselte Umgebungsdatei zu aktualisieren.",
|
||||
"The given data was invalid.": "Die gegebenen Daten waren ungültig.",
|
||||
"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 name does not match.": "Der Teamname stimmt nicht überein.",
|
||||
"Theme": "Farbschema",
|
||||
"This action cannot be undone. This will permanently delete the team \":name\".": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird das Team „:name“ dauerhaft gelöscht.",
|
||||
"This action is unauthorized.": "Diese Aktion ist nicht autorisiert.",
|
||||
"This invitation has already been accepted.": "Diese Einladung wurde bereits angenommen.",
|
||||
"This invitation has expired.": "Diese Einladung ist abgelaufen.",
|
||||
"This invitation was sent to a different email address.": "Diese Einladung wurde an eine andere E-Mail-Adresse gesendet.",
|
||||
"This is a secure area of the application. Please confirm your password before continuing.": "Dies ist ein sicherer Bereich der Anwendung. Bitte bestätigen Sie Ihr Passwort, bevor Sie fortfahren.",
|
||||
"This password reset link will expire in :count minutes.": "Dieser Link zum Zurücksetzen des Passworts läuft in :count Minuten ab.",
|
||||
"This team name is reserved and cannot be used.": "Dieser Teamname ist reserviert und kann nicht verwendet werden.",
|
||||
"This user is already a member of the team.": "Dieser Benutzer ist bereits Mitglied des Teams.",
|
||||
"to": "bis",
|
||||
"To finish enabling two-factor authentication, scan the QR code or enter the setup key in your authenticator app.": "Um die Zwei-Faktor-Authentifizierung zu aktivieren, scannen Sie den QR-Code oder geben Sie den Einrichtungsschlüssel in Ihre Authentifizierungs-App ein.",
|
||||
"Toggle navigation": "Navigation umschalten",
|
||||
"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 enabled": "Zwei-Faktor-Authentifizierung aktiviert",
|
||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Die Zwei-Faktor-Authentifizierung ist nun aktiviert. Scannen Sie den QR-Code oder geben Sie den Setup-Schlüssel in Ihrer Authentifizierungs-App ein.",
|
||||
"Type \":name\" to confirm": "Geben Sie \":name\" ein, um zu bestätigen",
|
||||
"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.",
|
||||
"Unable to write the encrypted environment file.": "Die verschlüsselte Umgebungsdatei konnte nicht geschrieben werden.",
|
||||
"Unauthorized": "Nicht autorisiert",
|
||||
"Unavailable For Legal Reasons": "Aus rechtlichen Gründen nicht verfügbar",
|
||||
"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 the appearance settings for your account": "Aktualisieren Sie die Darstellungseinstellungen für Ihr Konto",
|
||||
"Update your name and email address": "Aktualisieren Sie Ihren Namen und Ihre E-Mail-Adresse",
|
||||
"Upgrade Required": "Upgrade erforderlich",
|
||||
"URI Too Long": "URI ist zu lang",
|
||||
"Use Proxy": "Proxy verwenden",
|
||||
"User": "Benutzer",
|
||||
"Variant Also Negotiates": "Variante verhandelt ebenfalls",
|
||||
"Verify authentication code": "Authentifizierungscode überprüfen",
|
||||
"Verify Email Address": "E-Mail-Adresse bestätigen",
|
||||
"Verify your email address": "Bestätigen Sie Ihre E-Mail-Adresse",
|
||||
"View": "Ansicht",
|
||||
"View :name": ":name anzeigen",
|
||||
"View recovery codes": "Wiederherstellungscodes anzeigen",
|
||||
"View team": "Team anzeigen",
|
||||
"Warning": "Warnung",
|
||||
"Web Server is Down": "Webserver ist ausgefallen",
|
||||
"Welcome": "Willkommen",
|
||||
"When you enable two-factor authentication, you will be prompted for a secure pin during login. This pin can be retrieved from a TOTP-supported application on your phone.": "Wenn Sie die Zwei-Faktor-Authentifizierung aktivieren, werden Sie bei der Anmeldung zur Eingabe einer Sicherheits-PIN aufgefordert. Diese PIN können Sie über eine TOTP-unterstützte Anwendung auf Ihrem Smartphone abrufen.",
|
||||
"Whoops!": "Ups!",
|
||||
"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 don't belong to any teams yet.": "Sie gehören aktuell noch keinem Team an.",
|
||||
"You left the team \":name\"": "Sie haben das Team „:name“ verlassen.",
|
||||
"You will be prompted for a secure, random pin during login, which you can retrieve from the TOTP-supported application on your phone.": "Sie werden beim Anmelden zur Eingabe einer sicheren, zufällig generierten PIN aufgefordert, die Sie über die TOTP-fähige Anwendung auf Ihrem Smartphone abrufen können.",
|
||||
"You've been invited to join :teamName": "Sie wurden zum Team „:teamName“ eingeladen.",
|
||||
"Your email address is unverified.": "Ihre E-Mail-Adresse ist noch nicht bestätigt."
|
||||
}
|
||||
@@ -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',
|
||||
];
|
||||
@@ -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.',
|
||||
];
|
||||
@@ -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',
|
||||
];
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'next' => 'Weiter »',
|
||||
'previous' => '« Zurück',
|
||||
];
|
||||
@@ -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.',
|
||||
];
|
||||
@@ -0,0 +1,290 @@
|
||||
<?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.',
|
||||
'array_keys' => 'Das Feld :Attribute darf nur die folgenden Schlüssel enthalten: :values.',
|
||||
'ascii' => 'Die :attribute darf nur alphanumerische Single-Byte-Zeichen und -Symbole enthalten.',
|
||||
'base64' => 'Das Feld :attribute muss eine gültige Base64-Zeichenfolge sein.',
|
||||
'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',
|
||||
],
|
||||
];
|
||||
+424
@@ -0,0 +1,424 @@
|
||||
{
|
||||
"(and :count more error)": "(and :count more error)",
|
||||
"(and :count more errors)": "(and :count more error)|(and :count more errors)|(and :count more errors)",
|
||||
"2FA recovery codes": "2FA recovery codes",
|
||||
":action to join the \":team\" team.": ":action to join the \":team\" team.",
|
||||
":inviter invited you to join this team.": ":inviter invited you to join this team.",
|
||||
":inviterName has invited you to join the :teamName team.": ":inviterName has invited you to join the :teamName team.",
|
||||
"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 your email address.": "A new verification link has been sent to your email address.",
|
||||
"A Timeout Occurred": "A Timeout Occurred",
|
||||
"Accept": "Accept",
|
||||
"Accept or decline the teams you have been invited to join.": "Accept or decline the teams you have been invited to join.",
|
||||
"Accepted": "Accepted",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Add",
|
||||
"Add :name": "Add :name",
|
||||
"Add a passkey to sign in without a password": "Add a passkey to sign in without a password",
|
||||
"Add passkey": "Add passkey",
|
||||
"Added :time": "Added :time",
|
||||
"Admin": "Admin",
|
||||
"Agree": "Agree",
|
||||
"All rights reserved.": "All rights reserved.",
|
||||
"Already have an account?": "Already have an account?",
|
||||
"Already Reported": "Already Reported",
|
||||
"An invitation has already been sent to this email address.": "An invitation has already been sent to this email address.",
|
||||
"Appearance": "Appearance",
|
||||
"Appearance settings": "Appearance settings",
|
||||
"Archive": "Archive",
|
||||
"Are you sure you want to cancel the invitation for :email?": "Are you sure you want to cancel the invitation for :email?",
|
||||
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
|
||||
"Are you sure you want to leave :name?": "Are you sure you want to leave :name?",
|
||||
"Are you sure you want to remove :name from this team?": "Are you sure you want to remove :name from this team?",
|
||||
"Are you sure you want to remove the passkey \":name\"? You will no longer be able to use it to sign in.": "Are you sure you want to remove the passkey \":name\"? You will no longer be able to use it to sign in.",
|
||||
"Are you sure?": "Are you sure?",
|
||||
"Assign": "Assign",
|
||||
"Associate": "Associate",
|
||||
"Attach": "Attach",
|
||||
"Authenticating...": "Authenticating...",
|
||||
"Authentication code": "Authentication code",
|
||||
"Back": "Back",
|
||||
"Bad Gateway": "Bad Gateway",
|
||||
"Bad Request": "Bad Request",
|
||||
"Bandwidth Limit Exceeded": "Bandwidth Limit Exceeded",
|
||||
"Browse": "Browse",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel invitation": "Cancel invitation",
|
||||
"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",
|
||||
"Collapse": "Collapse",
|
||||
"Collapse All": "Collapse All",
|
||||
"Comment": "Comment",
|
||||
"Confirm": "Confirm",
|
||||
"Confirm password": "Confirm password",
|
||||
"Confirm with passkey": "Confirm with passkey",
|
||||
"Confirming...": "Confirming...",
|
||||
"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": "Create a new team",
|
||||
"Create account": "Create account",
|
||||
"Create an account": "Create an account",
|
||||
"Create team": "Create team",
|
||||
"Created": "Created",
|
||||
"Current password": "Current password",
|
||||
"Dark": "Dark",
|
||||
"Dashboard": "Dashboard",
|
||||
"Decline": "Decline",
|
||||
"Delete": "Delete",
|
||||
"Delete :name": "Delete :name",
|
||||
"Delete account": "Delete account",
|
||||
"Delete team": "Delete team",
|
||||
"Delete your account and all of its resources": "Delete your account and all of its resources",
|
||||
"Detach": "Detach",
|
||||
"Details": "Details",
|
||||
"Disable": "Disable",
|
||||
"Disable 2FA": "Disable 2FA",
|
||||
"Discard": "Discard",
|
||||
"Documentation": "Documentation",
|
||||
"Don't have an account?": "Don't have an account?",
|
||||
"Done": "Done",
|
||||
"Down": "Down",
|
||||
"Duplicate": "Duplicate",
|
||||
"Duplicate :name": "Duplicate :name",
|
||||
"e.g., MacBook Pro, iPhone": "e.g., MacBook Pro, iPhone",
|
||||
"Each recovery code can be used once to access your account and will be removed after use. If you need more, click Regenerate codes above.": "Each recovery code can be used once to access your account and will be removed after use. If you need more, click Regenerate codes above.",
|
||||
"Edit": "Edit",
|
||||
"Edit :name": "Edit :name",
|
||||
"Edit team": "Edit team",
|
||||
"Email": "Email",
|
||||
"Email address": "Email address",
|
||||
"Email password reset link": "Email password reset link",
|
||||
"Email verification": "Email verification",
|
||||
"Enable": "Enable",
|
||||
"Enable 2FA": "Enable 2FA",
|
||||
"Enable two-factor authentication": "Enable two-factor authentication",
|
||||
"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",
|
||||
"Enter the 6-digit code from your authenticator app.": "Enter the 6-digit code from your authenticator app.",
|
||||
"Enter the authentication code provided by your authenticator application.": "Enter the authentication code provided by your authenticator application.",
|
||||
"Enter your details below to create your account": "Enter your details below to create your account",
|
||||
"Enter your email and password below to log in": "Enter your email and password below to log in",
|
||||
"Enter your email to receive a password reset link": "Enter your email to receive a password reset link",
|
||||
"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",
|
||||
"Forbidden": "Forbidden",
|
||||
"Forgot password": "Forgot password",
|
||||
"Forgot your password?": "Forgot your password?",
|
||||
"Found": "Found",
|
||||
"Full name": "Full name",
|
||||
"Gateway Timeout": "Gateway Timeout",
|
||||
"Give this passkey a name to help you identify it later.": "Give this passkey a name to help you identify it later.",
|
||||
"Give your team a name to get started.": "Give your team a name to get started.",
|
||||
"Go Home": "Go Home",
|
||||
"Go to page :page": "Go to page :page",
|
||||
"Gone": "Gone",
|
||||
"Hello!": "Hello!",
|
||||
"Hide": "Hide",
|
||||
"Hide :name": "Hide :name",
|
||||
"Hide recovery codes": "Hide recovery codes",
|
||||
"Home": "Home",
|
||||
"HTTP Version Not Supported": "HTTP Version Not Supported",
|
||||
"I'm a teapot": "I'm a teapot",
|
||||
"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 request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
|
||||
"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",
|
||||
"Invitation accepted.": "Invitation accepted.",
|
||||
"Invitation cancelled.": "Invitation cancelled.",
|
||||
"Invitation declined.": "Invitation declined.",
|
||||
"Invitation sent.": "Invitation sent.",
|
||||
"Invitations that have not been accepted yet": "Invitations that have not been accepted yet",
|
||||
"Invite a team member": "Invite a team member",
|
||||
"Invite member": "Invite member",
|
||||
"Keep invitation": "Keep invitation",
|
||||
"Last used :time": "Last used :time",
|
||||
"Leave team": "Leave team",
|
||||
"Length Required": "Length Required",
|
||||
"Light": "Light",
|
||||
"Like": "Like",
|
||||
"Load": "Load",
|
||||
"Localize": "Localize",
|
||||
"Location": "Location",
|
||||
"Locked": "Locked",
|
||||
"Log In": "Log In",
|
||||
"Log in": "Log in",
|
||||
"log in": "log in",
|
||||
"Log in and visit your dashboard to accept or decline this invitation.": "Log in and visit your dashboard to accept or decline this invitation.",
|
||||
"Log in to your account": "Log in to your account",
|
||||
"Log Out": "Log Out",
|
||||
"Log out": "Log out",
|
||||
"Login": "Login",
|
||||
"login using a recovery code": "login using a recovery code",
|
||||
"login using an authentication code": "login using an authentication code",
|
||||
"Logout": "Logout",
|
||||
"Loop Detected": "Loop Detected",
|
||||
"Maintenance Mode": "Maintenance Mode",
|
||||
"Manage who belongs to this team": "Manage who belongs to this team",
|
||||
"Manage your passkeys for passwordless sign-in": "Manage your passkeys for passwordless sign-in",
|
||||
"Manage your profile and account settings": "Manage your profile and account settings",
|
||||
"Manage your team settings": "Manage your team settings",
|
||||
"Manage your teams and team memberships": "Manage your teams and team memberships",
|
||||
"Manage your two-factor authentication settings": "Manage your two-factor authentication settings",
|
||||
"Member removed.": "Member removed.",
|
||||
"Member role updated.": "Member role updated.",
|
||||
"Method Not Allowed": "Method Not Allowed",
|
||||
"Misdirected Request": "Misdirected Request",
|
||||
"Moved Permanently": "Moved Permanently",
|
||||
"Multi-Status": "Multi-Status",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"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",
|
||||
"New team": "New team",
|
||||
"No": "No",
|
||||
"No Content": "No Content",
|
||||
"No passkeys yet": "No passkeys yet",
|
||||
"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 your account is deleted, all of its resources and data will also be permanently deleted. Please confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will also be permanently deleted. Please 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.": "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",
|
||||
"Or confirm with password": "Or confirm with password",
|
||||
"Or continue with email": "Or continue with email",
|
||||
"or you can": "or you can",
|
||||
"or, enter the code manually": "or, enter the code manually",
|
||||
"Or, return to": "Or, return to",
|
||||
"Origin Is Unreachable": "Origin Is Unreachable",
|
||||
"Page Expired": "Page Expired",
|
||||
"Pagination Navigation": "Pagination Navigation",
|
||||
"Partial Content": "Partial Content",
|
||||
"Passkey name": "Passkey name",
|
||||
"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.",
|
||||
"Passkeys": "Passkeys",
|
||||
"Passkeys are not supported in this browser.": "Passkeys are not supported in this browser.",
|
||||
"Password": "Password",
|
||||
"Password updated.": "Password updated.",
|
||||
"Payload Too Large": "Payload Too Large",
|
||||
"Payment Required": "Payment Required",
|
||||
"Pending invitations": "Pending invitations",
|
||||
"Pending team invitations": "Pending team invitations",
|
||||
"Permanent Redirect": "Permanent Redirect",
|
||||
"Permanently delete your team": "Permanently delete your team",
|
||||
"Personal": "Personal",
|
||||
"Platform": "Platform",
|
||||
"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 enter your new password below": "Please enter your new password below",
|
||||
"Please proceed with caution, this cannot be undone.": "Please proceed with caution, this cannot be undone.",
|
||||
"Please verify your email address by clicking on the link we just emailed to you.": "Please verify your email address by clicking on the link we just emailed to you.",
|
||||
"Precondition Failed": "Precondition Failed",
|
||||
"Precondition Required": "Precondition Required",
|
||||
"Preview": "Preview",
|
||||
"Price": "Price",
|
||||
"Processing": "Processing",
|
||||
"Profile": "Profile",
|
||||
"Profile settings": "Profile settings",
|
||||
"Profile updated.": "Profile updated.",
|
||||
"Proxy Authentication Required": "Proxy Authentication Required",
|
||||
"Railgun Error": "Railgun Error",
|
||||
"Range Not Satisfiable": "Range Not Satisfiable",
|
||||
"Record": "Record",
|
||||
"Recovery code": "Recovery code",
|
||||
"Recovery codes": "Recovery codes",
|
||||
"Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.",
|
||||
"Regards,": "Regards,",
|
||||
"Regenerate codes": "Regenerate codes",
|
||||
"Register": "Register",
|
||||
"Register passkey": "Register passkey",
|
||||
"Registering...": "Registering...",
|
||||
"Remember me": "Remember me",
|
||||
"Remove member": "Remove member",
|
||||
"Remove passkey": "Remove passkey",
|
||||
"Remove team member": "Remove team member",
|
||||
"Repository": "Repository",
|
||||
"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 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",
|
||||
"Search": "Search",
|
||||
"Search :name": "Search :name",
|
||||
"Security": "Security",
|
||||
"Security settings": "Security settings",
|
||||
"See Other": "See Other",
|
||||
"Select": "Select",
|
||||
"Select All": "Select All",
|
||||
"Select team": "Select team",
|
||||
"Send": "Send",
|
||||
"Send an invitation to join this team.": "Send an invitation to join this team.",
|
||||
"Send invitation": "Send invitation",
|
||||
"Server Error": "Server Error",
|
||||
"Service Unavailable": "Service Unavailable",
|
||||
"Session Has Expired": "Session Has Expired",
|
||||
"Settings": "Settings",
|
||||
"Show": "Show",
|
||||
"Show :name": "Show :name",
|
||||
"Show All": "Show All",
|
||||
"Showing": "Showing",
|
||||
"Sign In": "Sign In",
|
||||
"Sign in with a passkey": "Sign in with a passkey",
|
||||
"Sign up": "Sign up",
|
||||
"Solve": "Solve",
|
||||
"SSL Handshake Failed": "SSL Handshake Failed",
|
||||
"Start": "Start",
|
||||
"Stop": "Stop",
|
||||
"Submit": "Submit",
|
||||
"Subscribe": "Subscribe",
|
||||
"Switch": "Switch",
|
||||
"Switch To Role": "Switch To Role",
|
||||
"Switching Protocols": "Switching Protocols",
|
||||
"System": "System",
|
||||
"Tag": "Tag",
|
||||
"Tags": "Tags",
|
||||
"Team created.": "Team created.",
|
||||
"Team deleted.": "Team deleted.",
|
||||
"Team members": "Team members",
|
||||
"Team name": "Team name",
|
||||
"Team updated.": "Team updated.",
|
||||
"Teams": "Teams",
|
||||
"Temporary Redirect": "Temporary Redirect",
|
||||
"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 existing encrypted environment file is not in readable format. Use --force to overwrite it.": "The existing encrypted environment file is not in readable format. Use --force to overwrite it.",
|
||||
"The existing encryption key is required to update the encrypted environment file.": "The existing encryption key is required to update the encrypted environment file.",
|
||||
"The given data was invalid.": "The given data was invalid.",
|
||||
"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 name does not match.": "The team name does not match.",
|
||||
"This action cannot be undone. This will permanently delete the team \":name\".": "This action cannot be undone. This will permanently delete the team \":name\".",
|
||||
"This action is unauthorized.": "This action is unauthorized.",
|
||||
"This invitation has already been accepted.": "This invitation has already been accepted.",
|
||||
"This invitation has expired.": "This invitation has expired.",
|
||||
"This invitation was sent to a different email address.": "This invitation was sent to a different email address.",
|
||||
"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 reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
|
||||
"This team name is reserved and cannot be used.": "This team name is reserved and cannot be used.",
|
||||
"This user is already a member of the team.": "This user is already a member of the team.",
|
||||
"to": "to",
|
||||
"To finish enabling two-factor authentication, scan the QR code or enter the setup key in your authenticator app.": "To finish enabling two-factor authentication, scan the QR code or enter the setup key in your authenticator app.",
|
||||
"Toggle navigation": "Toggle navigation",
|
||||
"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 enabled": "Two-factor authentication enabled",
|
||||
"Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.",
|
||||
"Type \":name\" to confirm": "Type \":name\" to confirm",
|
||||
"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.",
|
||||
"Unable to write the encrypted environment file.": "Unable to write the encrypted environment file.",
|
||||
"Unauthorized": "Unauthorized",
|
||||
"Unavailable For Legal Reasons": "Unavailable For Legal Reasons",
|
||||
"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 the appearance settings for your account": "Update the appearance settings for your account",
|
||||
"Update your name and email address": "Update your name and email address",
|
||||
"Upgrade Required": "Upgrade Required",
|
||||
"URI Too Long": "URI Too Long",
|
||||
"Use Proxy": "Use Proxy",
|
||||
"User": "User",
|
||||
"Variant Also Negotiates": "Variant Also Negotiates",
|
||||
"Verify authentication code": "Verify authentication code",
|
||||
"Verify Email Address": "Verify Email Address",
|
||||
"Verify your email address": "Verify your email address",
|
||||
"View": "View",
|
||||
"View :name": "View :name",
|
||||
"View recovery codes": "View recovery codes",
|
||||
"View team": "View team",
|
||||
"Warning": "Warning",
|
||||
"Web Server is Down": "Web Server is Down",
|
||||
"Welcome": "Welcome",
|
||||
"When you enable two-factor authentication, you will be prompted for a secure pin during login. This pin can be retrieved from a TOTP-supported application on your phone.": "When you enable two-factor authentication, you will be prompted for a secure pin during login. This pin can be retrieved from a TOTP-supported application on your phone.",
|
||||
"Whoops!": "Whoops!",
|
||||
"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 don't belong to any teams yet.": "You don't belong to any teams yet.",
|
||||
"You left the team \":name\"": "You left the team \":name\"",
|
||||
"You will be prompted for a secure, random pin during login, which you can retrieve from the TOTP-supported application on your phone.": "You will be prompted for a secure, random pin during login, which you can retrieve from the TOTP-supported application on your phone.",
|
||||
"You've been invited to join :teamName": "You've been invited to join :teamName",
|
||||
"Your email address is unverified.": "Your email address is unverified."
|
||||
}
|
||||
@@ -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',
|
||||
];
|
||||
@@ -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.',
|
||||
];
|
||||
@@ -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',
|
||||
];
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'next' => 'Next »',
|
||||
'previous' => '« Previous',
|
||||
];
|
||||
@@ -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.',
|
||||
];
|
||||
@@ -0,0 +1,290 @@
|
||||
<?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.',
|
||||
'array_keys' => 'The :attribute field must only contain the following keys: :values.',
|
||||
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
|
||||
'base64' => 'The :attribute field must be a valid Base64 string.',
|
||||
'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',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"Authenticating...": "Anmeldung läuft …",
|
||||
"Click here to re-send the verification email.": "Klicken Sie hier, um die Bestätigungs-E-Mail erneut zu senden.",
|
||||
"Confirming...": "Bestätigung läuft …",
|
||||
"Email password reset link": "Link zum Zurücksetzen senden",
|
||||
"Email verification": "E-Mail-Bestätigung",
|
||||
"Enable two-factor authentication": "Zwei-Faktor-Authentifizierung aktivieren",
|
||||
"Language": "Sprache",
|
||||
"log in": "Anmeldung",
|
||||
"login using a recovery code": "sich mit einem Wiederherstellungscode anmelden",
|
||||
"login using an authentication code": "sich mit einem Authentifizierungscode anmelden",
|
||||
"Or, return to": "Oder zurück zur",
|
||||
"Passkey name": "Name des Passkeys",
|
||||
"Registering...": "Registrierung läuft …",
|
||||
"Sign up": "Registrieren",
|
||||
"Theme": "Farbschema",
|
||||
"Your email address is unverified.": "Ihre E-Mail-Adresse ist noch nicht bestätigt."
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
{
|
||||
"preset": "laravel"
|
||||
"preset": "laravel",
|
||||
"exclude": [
|
||||
"lang"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -4,7 +4,21 @@
|
||||
<x-heading class="sr-only">{{ __('Appearance settings') }}</x-heading>
|
||||
|
||||
<x-settings.layout :heading="__('Appearance')" :subheading="__('Update the appearance settings for your account')">
|
||||
{{-- Hell / Dunkel / System; nutzt den Theme-Zustand aus tallstackui_darkTheme() am <html>-Element. --}}
|
||||
<x-ts-theme-switch />
|
||||
<div class="space-y-8">
|
||||
<div class="space-y-3">
|
||||
<x-heading level="3">{{ __('Theme') }}</x-heading>
|
||||
{{-- Hell / Dunkel / System; nutzt den Theme-Zustand aus tallstackui_darkTheme() am <html>-Element. --}}
|
||||
<x-ts-theme-switch />
|
||||
</div>
|
||||
|
||||
<div class="max-w-xs space-y-3">
|
||||
<x-heading level="3">{{ __('Language') }}</x-heading>
|
||||
{{-- Sprachnamen bewusst in der jeweiligen Sprache, nicht übersetzt. --}}
|
||||
<x-ts-select.native wire:model.live="locale"
|
||||
:options="collect(config('app.available_locales'))->map(fn ($label, $code) => ['label' => $label, 'value' => $code])->values()->all()"
|
||||
select="label:label|value:value"
|
||||
data-test="locale-select" />
|
||||
</div>
|
||||
</div>
|
||||
</x-settings.layout>
|
||||
</section>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<title>
|
||||
{{ filled($title ?? null) ? $title.' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel') }}
|
||||
{{ filled($title ?? null) ? __($title).' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel') }}
|
||||
</title>
|
||||
|
||||
<link rel="icon" href="/favicon.ico" sizes="any">
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Livewire\Settings\Appearance;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Livewire\Livewire;
|
||||
use Tests\TestCase;
|
||||
|
||||
class LocaleTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_german_is_the_default_language(): void
|
||||
{
|
||||
$this->get(route('login'))
|
||||
->assertOk()
|
||||
->assertSee('<html lang="de"', false)
|
||||
->assertSee('Melden Sie sich bei Ihrem Konto an');
|
||||
}
|
||||
|
||||
public function test_the_language_of_the_user_is_used(): void
|
||||
{
|
||||
$user = User::factory()->create(['locale' => 'en']);
|
||||
|
||||
$this->actingAs($user)
|
||||
->get(route('profile.edit'))
|
||||
->assertOk()
|
||||
->assertSee('<html lang="en"', false)
|
||||
->assertSee('Update your name and email address');
|
||||
}
|
||||
|
||||
public function test_an_unknown_stored_language_falls_back_to_the_default(): void
|
||||
{
|
||||
$user = User::factory()->create(['locale' => 'xx']);
|
||||
|
||||
$this->actingAs($user)
|
||||
->get(route('profile.edit'))
|
||||
->assertOk()
|
||||
->assertSee('<html lang="de"', false);
|
||||
}
|
||||
|
||||
public function test_appearance_page_offers_all_languages(): void
|
||||
{
|
||||
$response = $this->actingAs(User::factory()->create())
|
||||
->get(route('appearance.edit'))
|
||||
->assertOk()
|
||||
->assertSee('data-test="locale-select"', false)
|
||||
->assertSee('wire:model.live="locale"', false);
|
||||
|
||||
foreach (config('app.available_locales') as $code => $label) {
|
||||
$response->assertSee('value="'.$code.'"', false)->assertSee($label);
|
||||
}
|
||||
}
|
||||
|
||||
public function test_users_can_change_their_language(): void
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(Appearance::class)
|
||||
->assertSet('locale', 'de')
|
||||
->set('locale', 'en')
|
||||
->assertHasNoErrors()
|
||||
->assertRedirect(route('appearance.edit'));
|
||||
|
||||
$this->assertSame('en', $user->fresh()->locale);
|
||||
}
|
||||
|
||||
public function test_only_offered_languages_can_be_chosen(): void
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(Appearance::class)
|
||||
->set('locale', 'xx')
|
||||
->assertHasErrors('locale');
|
||||
|
||||
$this->assertNull($user->fresh()->locale);
|
||||
}
|
||||
}
|
||||
@@ -39,10 +39,10 @@ class SecurityTest extends TestCase
|
||||
|
||||
$response->assertOk();
|
||||
|
||||
$response->assertSee('Passkeys');
|
||||
$response->assertSee('No passkeys yet');
|
||||
$response->assertSee('Two-factor authentication');
|
||||
$response->assertSee('Enable 2FA');
|
||||
$response->assertSee(__('Passkeys'));
|
||||
$response->assertSee(__('No passkeys yet'));
|
||||
$response->assertSee(__('Two-factor authentication'));
|
||||
$response->assertSee(__('Enable 2FA'));
|
||||
}
|
||||
|
||||
public function test_security_settings_page_requires_password_confirmation_when_enabled(): void
|
||||
@@ -65,10 +65,10 @@ class SecurityTest extends TestCase
|
||||
->withSession(['auth.password_confirmed_at' => time()])
|
||||
->get(route('security.edit'))
|
||||
->assertOk()
|
||||
->assertSee('Update password')
|
||||
->assertDontSee('Manage your passkeys for passwordless sign-in')
|
||||
->assertDontSee('Add a passkey to sign in without a password')
|
||||
->assertDontSee('Two-factor authentication');
|
||||
->assertSee(__('Update password'))
|
||||
->assertDontSee(__('Manage your passkeys for passwordless sign-in'))
|
||||
->assertDontSee(__('Add a passkey to sign in without a password'))
|
||||
->assertDontSee(__('Two-factor authentication'));
|
||||
}
|
||||
|
||||
public function test_two_factor_authentication_disabled_when_confirmation_abandoned_between_requests(): void
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Jeder Text, der im Code über __() bzw. #[Title(...)] verwendet wird, braucht für jede
|
||||
* angebotene Sprache außer der Quellsprache Englisch eine Übersetzung in lang/{code}.json.
|
||||
*/
|
||||
class TranslationCoverageTest extends TestCase
|
||||
{
|
||||
public function test_every_translation_key_used_in_the_code_is_translated(): void
|
||||
{
|
||||
$keys = $this->translationKeysUsedInCode();
|
||||
$this->assertNotEmpty($keys);
|
||||
|
||||
foreach (array_keys(config('app.available_locales')) as $locale) {
|
||||
if ($locale === 'en') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$translations = json_decode(File::get(lang_path("{$locale}.json")), true, flags: JSON_THROW_ON_ERROR);
|
||||
$missing = array_values(array_diff($keys, array_keys($translations)));
|
||||
|
||||
$this->assertSame([], $missing, "Fehlende Übersetzungen in lang/{$locale}.json");
|
||||
}
|
||||
}
|
||||
|
||||
public function test_project_translations_are_applied(): void
|
||||
{
|
||||
foreach (File::glob(lang_path('project/*.json')) as $projectFile) {
|
||||
$locale = pathinfo($projectFile, PATHINFO_FILENAME);
|
||||
|
||||
$project = json_decode(File::get($projectFile), true, flags: JSON_THROW_ON_ERROR);
|
||||
$translations = json_decode(File::get(lang_path("{$locale}.json")), true, flags: JSON_THROW_ON_ERROR);
|
||||
|
||||
$notApplied = array_keys(array_diff_assoc($project, array_intersect_key($translations, $project)));
|
||||
|
||||
$this->assertSame([], $notApplied, "lang/project/{$locale}.json nicht übernommen – `sail artisan lang:apply-project` ausführen");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
private function translationKeysUsedInCode(): array
|
||||
{
|
||||
$patterns = [
|
||||
'/__\(\s*\'((?:[^\'\\\\]|\\\\.)*)\'/',
|
||||
'/__\(\s*"((?:[^"\\\\]|\\\\.)*)"/',
|
||||
'/#\[Title\(\s*\'((?:[^\'\\\\]|\\\\.)*)\'/',
|
||||
];
|
||||
|
||||
$keys = [];
|
||||
|
||||
foreach ([resource_path('views'), app_path()] as $directory) {
|
||||
foreach (File::allFiles($directory) as $file) {
|
||||
if ($file->getExtension() !== 'php') {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($patterns as $pattern) {
|
||||
preg_match_all($pattern, $file->getContents(), $matches);
|
||||
|
||||
foreach ($matches[1] as $key) {
|
||||
$keys[] = stripslashes($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array_values(array_unique($keys));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user