Add HR resource labels and helper methods for various resources; update locale handling in user model and department factory

This commit is contained in:
Mekan1206
2026-07-31 23:40:35 +05:00
parent 581cb8241c
commit 20d032c4cc
83 changed files with 4386 additions and 39 deletions

View File

@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace App\Filament\Concerns;
trait HasHrResourceLabels
{
/**
* @return array{model: string, plural: string, navigation?: string}
*/
abstract protected static function hrLabelKeys(): array;
public static function getModelLabel(): string
{
return __('hr.resources.'.static::hrLabelKeys()['model']);
}
public static function getPluralModelLabel(): string
{
return __('hr.resources.'.static::hrLabelKeys()['plural']);
}
public static function getNavigationLabel(): string
{
$keys = static::hrLabelKeys();
return __('hr.resources.'.($keys['navigation'] ?? $keys['plural']));
}
}

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\ActivityLogs; namespace App\Filament\Resources\ActivityLogs;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\ActivityLogs\Pages\ListActivityLogs; use App\Filament\Resources\ActivityLogs\Pages\ListActivityLogs;
use App\Filament\Resources\ActivityLogs\Pages\ViewActivityLog; use App\Filament\Resources\ActivityLogs\Pages\ViewActivityLog;
use App\Filament\Resources\ActivityLogs\Schemas\ActivityLogInfolist; use App\Filament\Resources\ActivityLogs\Schemas\ActivityLogInfolist;
@@ -19,8 +20,19 @@ use UnitEnum;
class ActivityLogResource extends Resource class ActivityLogResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Activity::class; protected static ?string $model = Activity::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'activity_log',
'plural' => 'activity_logs',
'navigation' => 'audit_log',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedClipboardDocumentList; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedClipboardDocumentList;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::System; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::System;
@@ -29,21 +41,6 @@ class ActivityLogResource extends Resource
protected static ?string $slug = 'activity-logs'; protected static ?string $slug = 'activity-logs';
public static function getNavigationLabel(): string
{
return __('hr.resources.audit_log');
}
public static function getModelLabel(): string
{
return __('hr.resources.activity_log');
}
public static function getPluralModelLabel(): string
{
return __('hr.resources.activity_logs');
}
public static function form(Schema $schema): Schema public static function form(Schema $schema): Schema
{ {
return $schema; return $schema;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Bonuses; namespace App\Filament\Resources\Bonuses;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Bonuses\Pages\CreateBonus; use App\Filament\Resources\Bonuses\Pages\CreateBonus;
use App\Filament\Resources\Bonuses\Pages\EditBonus; use App\Filament\Resources\Bonuses\Pages\EditBonus;
use App\Filament\Resources\Bonuses\Pages\ListBonuses; use App\Filament\Resources\Bonuses\Pages\ListBonuses;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Bonuses\Schemas\BonusInfolist;
use App\Filament\Resources\Bonuses\Tables\BonusesTable; use App\Filament\Resources\Bonuses\Tables\BonusesTable;
use App\Models\Bonus; use App\Models\Bonus;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class BonusResource extends Resource class BonusResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Bonus::class; protected static ?string $model = Bonus::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'bonus',
'plural' => 'bonuses',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedCurrencyDollar; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedCurrencyDollar;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Departments; namespace App\Filament\Resources\Departments;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Departments\Pages\CreateDepartment; use App\Filament\Resources\Departments\Pages\CreateDepartment;
use App\Filament\Resources\Departments\Pages\EditDepartment; use App\Filament\Resources\Departments\Pages\EditDepartment;
use App\Filament\Resources\Departments\Pages\ListDepartments; use App\Filament\Resources\Departments\Pages\ListDepartments;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Departments\Schemas\DepartmentInfolist;
use App\Filament\Resources\Departments\Tables\DepartmentsTable; use App\Filament\Resources\Departments\Tables\DepartmentsTable;
use App\Models\Department; use App\Models\Department;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class DepartmentResource extends Resource class DepartmentResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Department::class; protected static ?string $model = Department::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'department',
'plural' => 'departments',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedBuildingOffice2; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedBuildingOffice2;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization;

View File

@@ -2,8 +2,8 @@
namespace App\Filament\Resources\Departments\Schemas; namespace App\Filament\Resources\Departments\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea; use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle; use Filament\Forms\Components\Toggle;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
@@ -16,10 +16,6 @@ class DepartmentForm
TextInput::make('name') TextInput::make('name')
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('code')
->required()
->maxLength(50)
->unique(ignoreRecord: true),
Textarea::make('description') Textarea::make('description')
->rows(3) ->rows(3)
->columnSpanFull(), ->columnSpanFull(),

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\DisciplinaryReports; namespace App\Filament\Resources\DisciplinaryReports;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\DisciplinaryReports\Pages\CreateDisciplinaryReport; use App\Filament\Resources\DisciplinaryReports\Pages\CreateDisciplinaryReport;
use App\Filament\Resources\DisciplinaryReports\Pages\EditDisciplinaryReport; use App\Filament\Resources\DisciplinaryReports\Pages\EditDisciplinaryReport;
use App\Filament\Resources\DisciplinaryReports\Pages\ListDisciplinaryReports; use App\Filament\Resources\DisciplinaryReports\Pages\ListDisciplinaryReports;
@@ -14,18 +15,28 @@ use App\Filament\Resources\DisciplinaryReports\Schemas\DisciplinaryReportInfolis
use App\Filament\Resources\DisciplinaryReports\Tables\DisciplinaryReportsTable; use App\Filament\Resources\DisciplinaryReports\Tables\DisciplinaryReportsTable;
use App\Models\DisciplinaryReport; use App\Models\DisciplinaryReport;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class DisciplinaryReportResource extends Resource class DisciplinaryReportResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = DisciplinaryReport::class; protected static ?string $model = DisciplinaryReport::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'disciplinary_report',
'plural' => 'disciplinary_reports',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedExclamationTriangle; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedExclamationTriangle;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\EmployeeDocuments; namespace App\Filament\Resources\EmployeeDocuments;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\EmployeeDocuments\Pages\CreateEmployeeDocument; use App\Filament\Resources\EmployeeDocuments\Pages\CreateEmployeeDocument;
use App\Filament\Resources\EmployeeDocuments\Pages\EditEmployeeDocument; use App\Filament\Resources\EmployeeDocuments\Pages\EditEmployeeDocument;
use App\Filament\Resources\EmployeeDocuments\Pages\ListEmployeeDocuments; use App\Filament\Resources\EmployeeDocuments\Pages\ListEmployeeDocuments;
@@ -14,18 +15,28 @@ use App\Filament\Resources\EmployeeDocuments\Schemas\EmployeeDocumentInfolist;
use App\Filament\Resources\EmployeeDocuments\Tables\EmployeeDocumentsTable; use App\Filament\Resources\EmployeeDocuments\Tables\EmployeeDocumentsTable;
use App\Models\EmployeeDocument; use App\Models\EmployeeDocument;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class EmployeeDocumentResource extends Resource class EmployeeDocumentResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = EmployeeDocument::class; protected static ?string $model = EmployeeDocument::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'employee_document',
'plural' => 'employee_documents',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedDocument; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedDocument;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Employees; namespace App\Filament\Resources\Employees;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Employees\Pages\CreateEmployee; use App\Filament\Resources\Employees\Pages\CreateEmployee;
use App\Filament\Resources\Employees\Pages\EditEmployee; use App\Filament\Resources\Employees\Pages\EditEmployee;
use App\Filament\Resources\Employees\Pages\ListEmployees; use App\Filament\Resources\Employees\Pages\ListEmployees;
@@ -22,7 +23,6 @@ use App\Filament\Resources\Employees\Schemas\EmployeeInfolist;
use App\Filament\Resources\Employees\Tables\EmployeesTable; use App\Filament\Resources\Employees\Tables\EmployeesTable;
use App\Models\Employee; use App\Models\Employee;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
@@ -30,11 +30,22 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class EmployeeResource extends Resource class EmployeeResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Employee::class; protected static ?string $model = Employee::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'employee',
'plural' => 'employees',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedUsers; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedUsers;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Employees; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Employees;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Explanations; namespace App\Filament\Resources\Explanations;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Explanations\Pages\CreateExplanation; use App\Filament\Resources\Explanations\Pages\CreateExplanation;
use App\Filament\Resources\Explanations\Pages\EditExplanation; use App\Filament\Resources\Explanations\Pages\EditExplanation;
use App\Filament\Resources\Explanations\Pages\ListExplanations; use App\Filament\Resources\Explanations\Pages\ListExplanations;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Explanations\Schemas\ExplanationInfolist;
use App\Filament\Resources\Explanations\Tables\ExplanationsTable; use App\Filament\Resources\Explanations\Tables\ExplanationsTable;
use App\Models\Explanation; use App\Models\Explanation;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class ExplanationResource extends Resource class ExplanationResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Explanation::class; protected static ?string $model = Explanation::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'explanation',
'plural' => 'explanations',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedDocumentText; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedDocumentText;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Gifts; namespace App\Filament\Resources\Gifts;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Gifts\Pages\CreateGift; use App\Filament\Resources\Gifts\Pages\CreateGift;
use App\Filament\Resources\Gifts\Pages\EditGift; use App\Filament\Resources\Gifts\Pages\EditGift;
use App\Filament\Resources\Gifts\Pages\ListGifts; use App\Filament\Resources\Gifts\Pages\ListGifts;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Gifts\Schemas\GiftInfolist;
use App\Filament\Resources\Gifts\Tables\GiftsTable; use App\Filament\Resources\Gifts\Tables\GiftsTable;
use App\Models\Gift; use App\Models\Gift;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class GiftResource extends Resource class GiftResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Gift::class; protected static ?string $model = Gift::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'gift',
'plural' => 'gifts',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedGift; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedGift;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Records;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Positions; namespace App\Filament\Resources\Positions;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Positions\Pages\CreatePosition; use App\Filament\Resources\Positions\Pages\CreatePosition;
use App\Filament\Resources\Positions\Pages\EditPosition; use App\Filament\Resources\Positions\Pages\EditPosition;
use App\Filament\Resources\Positions\Pages\ListPositions; use App\Filament\Resources\Positions\Pages\ListPositions;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Positions\Schemas\PositionInfolist;
use App\Filament\Resources\Positions\Tables\PositionsTable; use App\Filament\Resources\Positions\Tables\PositionsTable;
use App\Models\Position; use App\Models\Position;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class PositionResource extends Resource class PositionResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Position::class; protected static ?string $model = Position::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'position',
'plural' => 'positions',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedBriefcase; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedBriefcase;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Shifts; namespace App\Filament\Resources\Shifts;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Shifts\Pages\CreateShift; use App\Filament\Resources\Shifts\Pages\CreateShift;
use App\Filament\Resources\Shifts\Pages\EditShift; use App\Filament\Resources\Shifts\Pages\EditShift;
use App\Filament\Resources\Shifts\Pages\ListShifts; use App\Filament\Resources\Shifts\Pages\ListShifts;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Shifts\Schemas\ShiftInfolist;
use App\Filament\Resources\Shifts\Tables\ShiftsTable; use App\Filament\Resources\Shifts\Tables\ShiftsTable;
use App\Models\Shift; use App\Models\Shift;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class ShiftResource extends Resource class ShiftResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Shift::class; protected static ?string $model = Shift::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'shift',
'plural' => 'shifts',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedClock; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedClock;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::Organization;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\SickLeaves; namespace App\Filament\Resources\SickLeaves;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\SickLeaves\Pages\CreateSickLeave; use App\Filament\Resources\SickLeaves\Pages\CreateSickLeave;
use App\Filament\Resources\SickLeaves\Pages\EditSickLeave; use App\Filament\Resources\SickLeaves\Pages\EditSickLeave;
use App\Filament\Resources\SickLeaves\Pages\ListSickLeaves; use App\Filament\Resources\SickLeaves\Pages\ListSickLeaves;
@@ -14,18 +15,28 @@ use App\Filament\Resources\SickLeaves\Schemas\SickLeaveInfolist;
use App\Filament\Resources\SickLeaves\Tables\SickLeavesTable; use App\Filament\Resources\SickLeaves\Tables\SickLeavesTable;
use App\Models\SickLeave; use App\Models\SickLeave;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class SickLeaveResource extends Resource class SickLeaveResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = SickLeave::class; protected static ?string $model = SickLeave::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'sick_leave',
'plural' => 'sick_leaves',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedHeart; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedHeart;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\UnpaidLeaves; namespace App\Filament\Resources\UnpaidLeaves;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\UnpaidLeaves\Pages\CreateUnpaidLeave; use App\Filament\Resources\UnpaidLeaves\Pages\CreateUnpaidLeave;
use App\Filament\Resources\UnpaidLeaves\Pages\EditUnpaidLeave; use App\Filament\Resources\UnpaidLeaves\Pages\EditUnpaidLeave;
use App\Filament\Resources\UnpaidLeaves\Pages\ListUnpaidLeaves; use App\Filament\Resources\UnpaidLeaves\Pages\ListUnpaidLeaves;
@@ -14,18 +15,28 @@ use App\Filament\Resources\UnpaidLeaves\Schemas\UnpaidLeaveInfolist;
use App\Filament\Resources\UnpaidLeaves\Tables\UnpaidLeavesTable; use App\Filament\Resources\UnpaidLeaves\Tables\UnpaidLeavesTable;
use App\Models\UnpaidLeave; use App\Models\UnpaidLeave;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class UnpaidLeaveResource extends Resource class UnpaidLeaveResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = UnpaidLeave::class; protected static ?string $model = UnpaidLeave::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'unpaid_leave',
'plural' => 'unpaid_leaves',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedCalendarDays; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedCalendarDays;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Users; namespace App\Filament\Resources\Users;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Users\Pages\CreateUser; use App\Filament\Resources\Users\Pages\CreateUser;
use App\Filament\Resources\Users\Pages\EditUser; use App\Filament\Resources\Users\Pages\EditUser;
use App\Filament\Resources\Users\Pages\ListUsers; use App\Filament\Resources\Users\Pages\ListUsers;
@@ -22,8 +23,18 @@ use UnitEnum;
class UserResource extends Resource class UserResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = User::class; protected static ?string $model = User::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'user',
'plural' => 'users',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedUsers; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedUsers;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::System; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::System;

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Filament\Resources\Vacations; namespace App\Filament\Resources\Vacations;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Concerns\HasHrResourceLabels;
use App\Filament\Resources\Vacations\Pages\CreateVacation; use App\Filament\Resources\Vacations\Pages\CreateVacation;
use App\Filament\Resources\Vacations\Pages\EditVacation; use App\Filament\Resources\Vacations\Pages\EditVacation;
use App\Filament\Resources\Vacations\Pages\ListVacations; use App\Filament\Resources\Vacations\Pages\ListVacations;
@@ -14,18 +15,28 @@ use App\Filament\Resources\Vacations\Schemas\VacationInfolist;
use App\Filament\Resources\Vacations\Tables\VacationsTable; use App\Filament\Resources\Vacations\Tables\VacationsTable;
use App\Models\Vacation; use App\Models\Vacation;
use BackedEnum; use BackedEnum;
use UnitEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class VacationResource extends Resource class VacationResource extends Resource
{ {
use HasHrResourceLabels;
protected static ?string $model = Vacation::class; protected static ?string $model = Vacation::class;
protected static function hrLabelKeys(): array
{
return [
'model' => 'vacation',
'plural' => 'vacations',
];
}
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedSun; protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedSun;
protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement; protected static string|UnitEnum|null $navigationGroup = NavigationGroup::LeaveManagement;

25
app/Helpers/helpers.php Normal file
View File

@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
* User function, returns user, if there is no user, returns empty User class
*/
function user(): User|null
{
return Auth::user() ?? new User([
'locale' => config('hr.default_locale'),
'name' => 'Guest',
'email' => 'guest@example.com',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'remember_token' => Str::random(10),
'created_at' => now(),
'updated_at' => now(),
]);
}

View File

@@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
class Department extends Model class Department extends Model
{ {
@@ -30,6 +31,38 @@ class Department extends Model
]; ];
} }
protected static function booted(): void
{
static::saving(function (Department $department): void {
if (blank($department->code) && filled($department->name)) {
$department->code = static::generateUniqueCodeFromName(
$department->name,
$department->id,
);
}
});
}
public static function generateUniqueCodeFromName(string $name, ?int $ignoreId = null): string
{
$base = Str::upper(Str::slug($name));
$query = static::query()
->when($ignoreId, fn ($query) => $query->where('id', '!=', $ignoreId));
if (! $query->clone()->where('code', $base)->exists()) {
return $base;
}
$maxSuffix = $query->clone()
->where('code', 'like', "{$base}-%")
->pluck('code')
->map(fn (string $code): int => (int) Str::after($code, "{$base}-"))
->max();
return "{$base}-".(($maxSuffix ?? 0) + 1);
}
public function employees(): HasMany public function employees(): HasMany
{ {
return $this->hasMany(Employee::class); return $this->hasMany(Employee::class);

View File

@@ -37,6 +37,7 @@ use App\Policies\UserPolicy;
use App\Policies\VacationPolicy; use App\Policies\VacationPolicy;
use BezhanSalleh\LanguageSwitch\Events\LocaleChanged; use BezhanSalleh\LanguageSwitch\Events\LocaleChanged;
use BezhanSalleh\LanguageSwitch\LanguageSwitch; use BezhanSalleh\LanguageSwitch\LanguageSwitch;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
@@ -81,11 +82,11 @@ class AppServiceProvider extends ServiceProvider
->locales(config('hr.supported_locales')) ->locales(config('hr.supported_locales'))
->labels(config('hr.locale_labels')) ->labels(config('hr.locale_labels'))
->displayLocale('native') ->displayLocale('native')
->userPreferredLocale(fn () => auth()->user()?->locale); ->userPreferredLocale(fn () => user()->locale);
}); });
Event::listen(function (LocaleChanged $event): void { Event::listen(function (LocaleChanged $event): void {
auth()->user()?->update(['locale' => $event->locale]); user()->update(['locale' => $event->locale]);
}); });
} }
} }

View File

@@ -36,7 +36,10 @@
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {
"Tests\\": "tests/" "Tests\\": "tests/"
} },
"files": [
"app/Helpers/helpers.php"
]
}, },
"scripts": { "scripts": {
"setup": [ "setup": [

View File

@@ -19,9 +19,11 @@ class DepartmentFactory extends Factory
*/ */
public function definition(): array public function definition(): array
{ {
$name = fake()->unique()->company();
return [ return [
'name' => fake()->unique()->company(), 'name' => $name,
'code' => strtoupper(fake()->unique()->bothify('??##')), 'code' => Department::generateUniqueCodeFromName($name),
'description' => fake()->optional()->sentence(), 'description' => fake()->optional()->sentence(),
'is_active' => true, 'is_active' => true,
]; ];

View File

@@ -12,7 +12,7 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::table('users', function (Blueprint $table) { Schema::table('users', function (Blueprint $table) {
$table->string('locale', 5)->default('en')->after('email'); $table->string('locale', 5)->default('tk')->after('email');
}); });
} }

View File

@@ -15,7 +15,7 @@ class AdminUserSeeder extends Seeder
public function run(): void public function run(): void
{ {
$admin = User::query()->updateOrCreate( $admin = User::query()->updateOrCreate(
['email' => 'admin@example.com'], ['email' => 'admin@company.com'],
[ [
'name' => 'Admin', 'name' => 'Admin',
'password' => Hash::make('password'), 'password' => Hash::make('password'),

View File

@@ -0,0 +1,45 @@
<?php
return [
'single' => [
'label' => 'Bagla',
'modal' => [
'heading' => ':label bagla',
'fields' => [
'record_id' => [
'label' => 'Ýazgy',
],
],
'actions' => [
'associate' => [
'label' => 'Bagla',
],
'associate_another' => [
'label' => 'Bagla we ýene bagla',
],
],
],
'notifications' => [
'associated' => [
'title' => 'Baglandy',
],
],
],
];

View File

@@ -0,0 +1,45 @@
<?php
return [
'single' => [
'label' => 'Goş',
'modal' => [
'heading' => ':label goş',
'fields' => [
'record_id' => [
'label' => 'Ýazgy',
],
],
'actions' => [
'attach' => [
'label' => 'Goş',
],
'attach_another' => [
'label' => 'Goş we ýene goş',
],
],
],
'notifications' => [
'attached' => [
'title' => 'Goşuldy',
],
],
],
];

View File

@@ -0,0 +1,37 @@
<?php
return [
'single' => [
'label' => 'Döret',
'modal' => [
'heading' => ':label döret',
'actions' => [
'create' => [
'label' => 'Döret',
],
'create_another' => [
'label' => 'Döret we ýene döret',
],
],
],
'notifications' => [
'created' => [
'title' => 'Döredildi',
],
],
],
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'single' => [
'label' => 'Poz',
'modal' => [
'heading' => ':label poz',
'actions' => [
'delete' => [
'label' => 'Poz',
],
],
],
'notifications' => [
'deleted' => [
'title' => 'Pozuldy',
],
],
],
'multiple' => [
'label' => 'Saýlanany poz',
'modal' => [
'heading' => 'Saýlanan :label poz',
'actions' => [
'delete' => [
'label' => 'Poz',
],
],
],
'notifications' => [
'deleted' => [
'title' => 'Pozuldy',
],
'deleted_partial' => [
'title' => ':total-dan :count pozuldy',
'missing_authorization_failure_message' => ':count pozmak üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count pozup bolmady.',
],
'deleted_none' => [
'title' => 'Pozmak şowsuz boldy',
'missing_authorization_failure_message' => ':count pozmak üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count pozup bolmady.',
],
],
],
];

View File

@@ -0,0 +1,61 @@
<?php
return [
'single' => [
'label' => 'Aýyr',
'modal' => [
'heading' => ':label aýyr',
'actions' => [
'detach' => [
'label' => 'Aýyr',
],
],
],
'notifications' => [
'detached' => [
'title' => 'Aýryldy',
],
],
],
'multiple' => [
'label' => 'Saýlanany aýyr',
'modal' => [
'heading' => 'Saýlanan :label aýyr',
'actions' => [
'detach' => [
'label' => 'Aýyr',
],
],
],
'notifications' => [
'detached' => [
'title' => 'Aýryldy',
],
],
],
];

View File

@@ -0,0 +1,61 @@
<?php
return [
'single' => [
'label' => 'Baglanyşygy kes',
'modal' => [
'heading' => ':label baglanyşygy kes',
'actions' => [
'dissociate' => [
'label' => 'Baglanyşygy kes',
],
],
],
'notifications' => [
'dissociated' => [
'title' => 'Baglanyşyk kesildi',
],
],
],
'multiple' => [
'label' => 'Saýlananyň baglanyşygyny kes',
'modal' => [
'heading' => 'Saýlanan :label baglanyşygy kes',
'actions' => [
'dissociate' => [
'label' => 'Baglanyşygy kes',
],
],
],
'notifications' => [
'dissociated' => [
'title' => 'Baglanyşyk kesildi',
],
],
],
];

View File

@@ -0,0 +1,33 @@
<?php
return [
'single' => [
'label' => 'Üýtget',
'modal' => [
'heading' => ':label üýtget',
'actions' => [
'save' => [
'label' => 'Üýtgeşmeleri sakla',
],
],
],
'notifications' => [
'saved' => [
'title' => 'Saklandy',
],
],
],
];

View File

@@ -0,0 +1,94 @@
<?php
return [
'label' => ':label eksport',
'modal' => [
'heading' => ':label eksport',
'form' => [
'columns' => [
'label' => 'Sütünler',
'actions' => [
'select_all' => [
'label' => 'Hemmesini saýla',
],
'deselect_all' => [
'label' => 'Hemmesini aýyr',
],
],
'form' => [
'is_enabled' => [
'label' => ':column açyk',
],
'label' => [
'label' => ':column ýazgysy',
],
],
],
],
'actions' => [
'export' => [
'label' => 'Eksport',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Eksport tamamlandy',
'actions' => [
'download_csv' => [
'label' => '.csv göçürip al',
],
'download_xlsx' => [
'label' => '.xlsx göçürip al',
],
],
],
'max_rows' => [
'title' => 'Eksport gaty uly',
'body' => 'Bir gezekde 1-den köp setir eksport edip bolmaýar.|Bir gezekde :count-dan köp setir eksport edip bolmaýar.',
],
'no_columns' => [
'title' => 'Sütün saýlanmady',
'body' => 'Eksport etmek üçin azyndan bir sütün saýlaň.',
],
'started' => [
'title' => 'Eksport başlandy',
'body' => 'Eksportyňyz başlandy we 1 setir fon režiminde işlener. Tamamlananda göçürip almak baglanyşygy bilen bildiriş alarsyňyz.|Eksportyňyz başlandy we :count setir fon režiminde işlener. Tamamlananda göçürip almak baglanyşygy bilen bildiriş alarsyňyz.',
],
],
'file_name' => 'export-:export_id-:model',
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'single' => [
'label' => 'Görkezmesiz poz',
'modal' => [
'heading' => ':label görkezmesiz poz',
'actions' => [
'delete' => [
'label' => 'Poz',
],
],
],
'notifications' => [
'deleted' => [
'title' => 'Pozuldy',
],
],
],
'multiple' => [
'label' => 'Saýlanany görkezmesiz poz',
'modal' => [
'heading' => 'Saýlanan :label görkezmesiz poz',
'actions' => [
'delete' => [
'label' => 'Poz',
],
],
],
'notifications' => [
'deleted' => [
'title' => 'Pozuldy',
],
'deleted_partial' => [
'title' => ':total-dan :count pozuldy',
'missing_authorization_failure_message' => ':count pozmak üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count pozup bolmady.',
],
'deleted_none' => [
'title' => 'Pozmak şowsuz boldy',
'missing_authorization_failure_message' => ':count pozmak üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count pozup bolmady.',
],
],
],
];

View File

@@ -0,0 +1,9 @@
<?php
return [
'trigger' => [
'label' => 'Hereketler',
],
];

View File

@@ -0,0 +1,85 @@
<?php
return [
'label' => ':label import',
'modal' => [
'heading' => ':label import',
'form' => [
'file' => [
'label' => 'Faýl',
'placeholder' => 'CSV faýl ýükle',
'rules' => [
'duplicate_columns' => '{0} Faýlda bir sütünden köp boş sütün başlygy bolmaly däl.|{1,*} Faýlda dublikat sütün başlyklary bolmaly däl: :columns.',
],
],
'columns' => [
'label' => 'Sütünler',
'placeholder' => 'Sütün saýla',
],
],
'actions' => [
'download_example' => [
'label' => 'Mysal CSV faýly göçürip al',
],
'import' => [
'label' => 'Import',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Import tamamlandy',
'actions' => [
'download_failed_rows_csv' => [
'label' => 'Şowsuz setir barada maglumaty göçürip al|Şowsuz setirler barada maglumaty göçürip al',
],
],
],
'max_rows' => [
'title' => 'Ýüklenen CSV faýl gaty uly',
'body' => 'Bir gezekde 1-den köp setir import edip bolmaýar.|Bir gezekde :count-dan köp setir import edip bolmaýar.',
],
'started' => [
'title' => 'Import başlandy',
'body' => 'Importyňyz başlandy we 1 setir fon režiminde işlener.|Importyňyz başlandy we :count setir fon režiminde işlener.',
],
],
'example_csv' => [
'file_name' => ':importer-example',
],
'failure_csv' => [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'ýalňyşlyk',
'system_error' => 'Ulgam ýalňyşlygy, goldaw bilen habarlaşyň.',
'column_mapping_required_for_new_record' => ':attribute sütüni faýldaky sütün bilen deňleşdirilmedi, ýöne täze ýazgylar döretmek üçin zerur.',
],
];

View File

@@ -0,0 +1,23 @@
<?php
return [
'confirmation' => 'Muny hakykatdanam etmek isleýärsiňizmi?',
'actions' => [
'cancel' => [
'label' => 'Ýatyr',
],
'confirm' => [
'label' => 'Tassykla',
],
'submit' => [
'label' => 'Iber',
],
],
];

View File

@@ -0,0 +1,10 @@
<?php
return [
'throttled' => [
'title' => 'Gaty köp synanyşyk',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
];

View File

@@ -0,0 +1,33 @@
<?php
return [
'single' => [
'label' => 'Köpelt',
'modal' => [
'heading' => ':label köpelt',
'actions' => [
'replicate' => [
'label' => 'Köpelt',
],
],
],
'notifications' => [
'replicated' => [
'title' => 'Köpeldildi',
],
],
],
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'single' => [
'label' => 'Dikelt',
'modal' => [
'heading' => ':label dikelt',
'actions' => [
'restore' => [
'label' => 'Dikelt',
],
],
],
'notifications' => [
'restored' => [
'title' => 'Dikeldildi',
],
],
],
'multiple' => [
'label' => 'Saýlanany dikelt',
'modal' => [
'heading' => 'Saýlanan :label dikelt',
'actions' => [
'restore' => [
'label' => 'Dikelt',
],
],
],
'notifications' => [
'restored' => [
'title' => 'Dikeldildi',
],
'restored_partial' => [
'title' => ':total-dan :count dikeldildi',
'missing_authorization_failure_message' => ':count dikeltmek üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count dikeldip bolmady.',
],
'restored_none' => [
'title' => 'Dikeltmek şowsuz boldy',
'missing_authorization_failure_message' => ':count dikeltmek üçin ygtyýaryňyz ýok.',
'missing_processing_failure_message' => ':count dikeldip bolmady.',
],
],
],
];

View File

@@ -0,0 +1,25 @@
<?php
return [
'single' => [
'label' => 'Gör',
'modal' => [
'heading' => ':label gör',
'actions' => [
'close' => [
'label' => 'Ýap',
],
],
],
],
];

View File

@@ -0,0 +1,854 @@
<?php
return [
'builder' => [
'actions' => [
'clone' => [
'label' => 'Göçür',
],
'add' => [
'label' => ':label goş',
'modal' => [
'heading' => ':label goş',
'actions' => [
'add' => [
'label' => 'Goş',
],
],
],
],
'add_between' => [
'label' => 'Bloklaryň arasynda goý',
'modal' => [
'heading' => ':label goş',
'actions' => [
'add' => [
'label' => 'Goş',
],
],
],
],
'delete' => [
'label' => 'Poz',
],
'edit' => [
'label' => 'Üýtget',
'modal' => [
'heading' => 'Bloky üýtget',
'actions' => [
'save' => [
'label' => 'Üýtgeşmeleri sakla',
],
],
],
],
'reorder' => [
'label' => 'Göçür',
],
'move_down' => [
'label' => 'Aşak göçür',
],
'move_up' => [
'label' => 'Ýokary göçür',
],
'collapse' => [
'label' => 'Ýygna',
],
'expand' => [
'label' => 'Giňelt',
],
'collapse_all' => [
'label' => 'Hemmesini ýygna',
],
'expand_all' => [
'label' => 'Hemmesini giňelt',
],
],
],
'checkbox_list' => [
'actions' => [
'deselect_all' => [
'label' => 'Hemmesini aýyr',
],
'select_all' => [
'label' => 'Hemmesini saýla',
],
],
],
'color_picker' => [
'panel_label' => 'Reňk saýlaýjy',
],
'date_time_picker' => [
'month_select' => [
'label' => 'Aý',
],
'year_input' => [
'label' => 'Ýyl',
],
'hour_input' => [
'label' => 'Sagat',
],
'minute_input' => [
'label' => 'Minut',
],
'second_input' => [
'label' => 'Sekunt',
],
],
'file_upload' => [
'actions' => [
'download' => [
'label' => 'Göçürip al',
],
'open' => [
'label' => 'Täze goýmalyda aç',
],
],
'editor' => [
'label' => 'Surat redaktory',
'actions' => [
'cancel' => [
'label' => 'Ýatyr',
],
'drag_crop' => [
'label' => 'Süýräp kesmek režimi',
],
'drag_move' => [
'label' => 'Süýräp göçürmek režimi',
],
'flip_horizontal' => [
'label' => 'Suraty gorizontal çevir',
],
'flip_vertical' => [
'label' => 'Suraty wertikal çevir',
],
'move_down' => [
'label' => 'Suraty aşak göçür',
],
'move_left' => [
'label' => 'Suraty çepe göçür',
],
'move_right' => [
'label' => 'Suraty saga göçür',
],
'move_up' => [
'label' => 'Suraty ýokary göçür',
],
'reset' => [
'label' => 'Täzeden',
],
'rotate_left' => [
'label' => 'Suraty çepe aýla',
],
'rotate_right' => [
'label' => 'Suraty saga aýla',
],
'set_aspect_ratio' => [
'label' => 'Gatnaşygy :ratio belle',
],
'save' => [
'label' => 'Sakla',
],
'zoom_100' => [
'label' => 'Suraty 100% ulalt',
],
'zoom_in' => [
'label' => 'Ulalt',
],
'zoom_out' => [
'label' => 'Kiçelt',
],
],
'fields' => [
'height' => [
'label' => 'Beýiklik',
'unit' => 'px',
],
'rotation' => [
'label' => 'Aýlanma',
'unit' => 'deg',
],
'width' => [
'label' => 'Giňlik',
'unit' => 'px',
],
'x_position' => [
'label' => 'X',
'unit' => 'px',
],
'y_position' => [
'label' => 'Y',
'unit' => 'px',
],
],
'aspect_ratios' => [
'label' => 'Gatnaşyklar',
'no_fixed' => [
'label' => 'Erkin',
],
],
'svg' => [
'messages' => [
'confirmation' => 'SVG faýllaryny redaktirlemek maslahat berilmeýär, sebäbi ulaltmakda hil ýitgisi bolup biler.\n Dowam etmek isleýärsiňizmi?',
'disabled' => 'SVG faýllaryny redaktirlemek ýapyk, sebäbi ulaltmakda hil ýitgisi bolup biler.',
],
],
],
],
'key_value' => [
'actions' => [
'add' => [
'label' => 'Setir goş',
],
'delete' => [
'label' => 'Setiri poz',
],
'reorder' => [
'label' => 'Setiri saýla',
],
],
'columns' => [
'actions' => [
'label' => 'Hereketler',
],
'reorder' => [
'label' => 'Saýla',
],
],
'fields' => [
'key' => [
'label' => 'Açar',
],
'value' => [
'label' => 'Baha',
],
],
],
'markdown_editor' => [
'file_attachments_accepted_file_types_message' => 'Ýüklenen faýllar şu görnüşde bolmaly: :values.',
'file_attachments_max_size_message' => 'Ýüklenen faýllar :max kilobaýtdan uly bolmaly däl.',
'tools' => [
'attach_files' => 'Faýl goş',
'blockquote' => 'Sitata',
'bold' => 'Galyň',
'bullet_list' => 'Marker sanawy',
'code_block' => 'Kod bloky',
'heading' => 'Başlyk',
'italic' => 'Egri',
'link' => 'Baglanyşyk',
'ordered_list' => 'Sanly sanaw',
'redo' => 'Gaýtala',
'strike' => 'Üsti çyzykly',
'table' => 'Tablisa',
'undo' => 'Yza al',
],
],
'modal_table_select' => [
'actions' => [
'select' => [
'label' => 'Saýla',
'actions' => [
'select' => [
'label' => 'Saýla',
],
],
],
],
],
'radio' => [
'boolean' => [
'true' => 'Hawa',
'false' => 'Ýok',
],
],
'repeater' => [
'columns' => [
'actions' => [
'label' => 'Hereketler',
],
'reorder' => [
'label' => 'Saýla',
],
],
'actions' => [
'add' => [
'label' => ':label goş',
],
'add_between' => [
'label' => 'Arasynda goý',
],
'delete' => [
'label' => 'Poz',
],
'clone' => [
'label' => 'Göçür',
],
'reorder' => [
'label' => 'Göçür',
],
'move_down' => [
'label' => 'Aşak göçür',
],
'move_up' => [
'label' => 'Ýokary göçür',
],
'collapse' => [
'label' => 'Ýygna',
],
'expand' => [
'label' => 'Giňelt',
],
'collapse_all' => [
'label' => 'Hemmesini ýygna',
],
'expand_all' => [
'label' => 'Hemmesini giňelt',
],
],
],
'rich_editor' => [
'actions' => [
'attach_files' => [
'label' => 'Faýl ýükle',
'modal' => [
'heading' => 'Faýl ýükle',
'form' => [
'file' => [
'label' => [
'new' => 'Faýl',
'existing' => 'Faýly çalyş',
],
],
'alt' => [
'label' => [
'new' => 'Alt tekst',
'existing' => 'Alt teksti üýtget',
],
],
],
],
],
'custom_block' => [
'modal' => [
'actions' => [
'insert' => [
'label' => 'Goý',
],
'save' => [
'label' => 'Sakla',
],
],
],
],
'grid' => [
'label' => 'Tor',
'modal' => [
'heading' => 'Tor',
'form' => [
'preset' => [
'label' => 'Deslapky sazlanma',
'placeholder' => 'Ýok',
'options' => [
'two' => 'Iki',
'three' => 'Üç',
'four' => 'Dört',
'five' => 'Bäş',
'two_start_third' => 'Iki (Üçdende başla)',
'two_end_third' => 'Iki (Üçde tamamla)',
'two_start_fourth' => 'Iki (Dörtten başla)',
'two_end_fourth' => 'Iki (Dörtde tamamla)',
],
],
'columns' => [
'label' => 'Sütünler',
],
'from_breakpoint' => [
'label' => 'Kesme nokadyndan',
'options' => [
'default' => 'Hemmesi',
'sm' => 'Kiçi',
'md' => 'Orta',
'lg' => 'Uly',
'xl' => 'Has uly',
'2xl' => 'Iki has uly',
],
],
'is_asymmetric' => [
'label' => 'Iki asimmetrik sütün',
],
'start_span' => [
'label' => 'Başlangyç aralygy',
],
'end_span' => [
'label' => 'Soňky aralygy',
],
],
],
],
'link' => [
'label' => 'Baglanyşyk',
'modal' => [
'heading' => 'Baglanyşyk',
'form' => [
'url' => [
'label' => 'URL',
],
'should_open_in_new_tab' => [
'label' => 'Täze goýmalyda aç',
],
],
],
],
'text_color' => [
'label' => 'Tekst reňki',
'modal' => [
'heading' => 'Tekst reňki',
'form' => [
'color' => [
'label' => 'Reňk',
'options' => [
'slate' => 'Arag',
'gray' => 'Çal',
'zinc' => 'Sink',
'neutral' => 'Neýtral',
'stone' => 'Daş',
'mauve' => 'Mauve',
'olive' => 'Zeýtun',
'mist' => 'Duman',
'taupe' => 'Taupe',
'red' => 'Gyzyl',
'orange' => 'Mämişi',
'amber' => 'Amber',
'yellow' => 'Sary',
'lime' => 'Laým',
'green' => 'Ýaşyl',
'emerald' => 'Zümrüt',
'teal' => 'Teal',
'cyan' => 'Gök',
'sky' => 'Asman',
'blue' => 'Gök',
'indigo' => 'Indigo',
'violet' => 'Menekşe',
'purple' => 'Gyrmyzy',
'fuchsia' => 'Fuşýa',
'pink' => 'Gülgüne',
'rose' => 'Gül',
],
],
'custom_color' => [
'label' => 'Aýratyn reňk',
],
],
],
],
],
'file_attachments_accepted_file_types_message' => 'Ýüklenen faýllar şu görnüşde bolmaly: :values.',
'file_attachments_max_size_message' => 'Ýüklenen faýllar :max kilobaýtdan uly bolmaly däl.',
'no_merge_tag_search_results_message' => 'Birleşdirme bellik netijesi ýok.',
'mentions' => [
'no_options_message' => 'Saýlaw ýok.',
'no_search_results_message' => 'Gözlegiňize laýyk netije tapylmady.',
'search_prompt' => 'Gözleg etmek üçin ýazyň...',
'searching_message' => 'Gözleg...',
],
'toolbar' => [
'label' => 'Redaktor paneli',
],
'tools' => [
'align_center' => 'Merkeze deňle',
'align_end' => 'Soňuna deňle',
'align_justify' => 'Doly deňle',
'align_start' => 'Başyna deňle',
'attach_files' => 'Faýl goş',
'blockquote' => 'Sitata',
'bold' => 'Galyň',
'bullet_list' => 'Marker sanawy',
'clear_formatting' => 'Formaty arassala',
'code' => 'Kod',
'code_block' => 'Kod bloky',
'custom_blocks' => 'Bloklar',
'details' => 'Jikme-jiklikler',
'h1' => 'Sarlavha',
'h2' => 'Başlyk 2',
'h3' => 'Başlyk 3',
'h4' => 'Başlyk 4',
'h5' => 'Başlyk 5',
'h6' => 'Başlyk 6',
'grid' => 'Tor',
'grid_delete' => 'Tory poz',
'highlight' => 'Belli et',
'horizontal_rule' => 'Gorizontal çyzgy',
'italic' => 'Egri',
'lead' => 'Esasy tekst',
'link' => 'Baglanyşyk',
'merge_tags' => 'Birleşdirme bellikler',
'ordered_list' => 'Sanly sanaw',
'paragraph' => 'Abzas',
'redo' => 'Gaýtala',
'small' => 'Kiçi tekst',
'strike' => 'Üsti çyzykly',
'subscript' => 'Aşaky indeks',
'superscript' => 'Ýokarky indeks',
'table' => 'Tablisa',
'table_delete' => 'Tablisany poz',
'table_add_column_before' => 'Öň sütün goş',
'table_add_column_after' => 'Soň sütün goş',
'table_delete_column' => 'Sütüni poz',
'table_add_row_before' => 'Ýokarda setir goş',
'table_add_row_after' => 'Aşakda setir goş',
'table_delete_row' => 'Setiri poz',
'table_merge_cells' => 'Öýjükleri birleşdir',
'table_split_cell' => 'Öýjügi böl',
'table_toggle_header_row' => 'Başlyk setirini aç/ýap',
'table_toggle_header_cell' => 'Başlyk öýjügini aç/ýap',
'text_color' => 'Tekst reňki',
'underline' => 'Alty çyzyk',
'undo' => 'Yza al',
],
'uploading_file_message' => 'Faýl ýüklenýär...',
],
'select' => [
'actions' => [
'create_option' => [
'label' => 'Döret',
'modal' => [
'heading' => 'Döret',
'actions' => [
'create' => [
'label' => 'Döret',
],
'create_another' => [
'label' => 'Döret we ýene döret',
],
],
],
],
'edit_option' => [
'label' => 'Üýtget',
'modal' => [
'heading' => 'Üýtget',
'actions' => [
'save' => [
'label' => 'Sakla',
],
],
],
],
],
'boolean' => [
'true' => 'Hawa',
'false' => 'Ýok',
],
'loading_message' => 'Ýüklenýär...',
'max_items_message' => 'Diňe :count saýlap bolýar.',
'no_options_message' => 'Saýlaw ýok.',
'no_search_results_message' => 'Gözlegiňize laýyk saýlaw tapylmady.',
'placeholder' => 'Saýlaw saýla',
'searching_message' => 'Gözleg...',
'search_prompt' => 'Gözleg etmek üçin ýazyň...',
],
'tags_input' => [
'actions' => [
'delete' => [
'label' => 'Poz',
],
],
'placeholder' => 'Täze bellik',
'tag_added' => 'Goşuldy: :tag',
'tag_removed' => 'Aýryldy: :tag',
],
'text_input' => [
'actions' => [
'copy' => [
'label' => 'Göçür',
'message' => 'Göçürildi',
],
'hide_password' => [
'label' => 'Açar sözüni gizle',
],
'show_password' => [
'label' => 'Açar sözüni görkez',
],
],
],
'toggle_buttons' => [
'boolean' => [
'true' => 'Hawa',
'false' => 'Ýok',
],
],
];

View File

@@ -0,0 +1,12 @@
<?php
return [
'distinct' => [
'must_be_selected' => 'Azyndan bir :attribute meýdany saýlanmaly.',
'only_one_must_be_selected' => 'Diňe bir :attribute meýdany saýlanmaly.',
],
'tampered_file_path' => ':attribute meýdanynda rugsat berilmeýän faýl ýoly bar.',
];

View File

@@ -0,0 +1,43 @@
<?php
return [
'entries' => [
'text' => [
'actions' => [
'collapse_list' => ':count az görkez',
'expand_list' => ':count köp görkez',
],
'more_list_items' => 'we ýene :count',
],
'icon' => [
'true' => 'Hawa',
'false' => 'Ýok',
],
'key_value' => [
'columns' => [
'key' => [
'label' => 'Açar',
],
'value' => [
'label' => 'Baha',
],
],
'placeholder' => 'Ýazgy ýok',
],
],
];

View File

@@ -0,0 +1,30 @@
<?php
return [
'modal' => [
'heading' => 'Bildirişler',
'unread_label' => 'Okalmadyk bildiriş',
'actions' => [
'clear' => [
'label' => 'Arassala',
],
'mark_all_as_read' => [
'label' => 'Hemmesini okaldy diýip belle',
],
],
'empty' => [
'heading' => 'Bildiriş ýok',
'description' => 'Soňra gaýtadan barlaň.',
],
],
];

View File

@@ -0,0 +1,13 @@
<?php
return [
'actions' => [
'close' => [
'label' => 'Bildirişi ýap',
],
],
];

View File

@@ -0,0 +1,19 @@
<?php
return [
'notifications' => [
'blocked' => [
'title' => 'Email salgysyny üýtgetmek bloklandy',
'body' => ':email salgysyna email üýtgetmek synanyşygyny üstünlikli bloklanyňyz. Başlangyç soragy siz etmedik bolsaňyz, derrew biz bilen habarlaşyň.',
],
'failed' => [
'title' => 'Email salgysyny üýtgetmegi bloklap bolmady',
'body' => 'Gynansak, :email salgysyna email üýtgemegiň öňünden tassyklanmagy sebäpli bloklap bilmediňiz. Başlangyç soragy siz etmedik bolsaňyz, derrew biz bilen habarlaşyň.',
],
],
];

View File

@@ -0,0 +1,19 @@
<?php
return [
'notifications' => [
'unavailable' => [
'title' => 'Bu email salgysy indi elýeterli däl.',
'body' => 'Tassyklama baglanyşygyňyz garaşylýan wagty başga hasap tarapyndan alnypdy.',
],
'verified' => [
'title' => 'Email salgysy üýtgedildi',
'body' => 'Email salgysyňyz üstünlikli :email salgysyna üýtgedildi.',
],
],
];

View File

@@ -0,0 +1,75 @@
<?php
return [
'label' => 'Ýap',
'modal' => [
'heading' => 'Tassyklama programmasyny ýap',
'description' => 'Tassyklama programmasyny ulanymagy bes etmek isleýärsiňizmi? Muny ýapmak hasabyňyzdan goşmaça howpsuzlyk gatlagyny aýyrar.',
'form' => [
'code' => [
'label' => 'Tassyklama programmasyndan 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'actions' => [
'use_recovery_code' => [
'label' => 'Oňa ýerine dikeltme koduny ulanyň',
],
],
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
'recovery_code' => [
'label' => 'Ýa-da dikeltme kody giriziň',
'validation_attribute' => 'dikeltme kody',
'messages' => [
'invalid' => 'Giren dikeltme kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
],
'actions' => [
'submit' => [
'label' => 'Tassyklama programmasyny ýap',
],
],
],
'notifications' => [
'disabled' => [
'title' => 'Tassyklama programmasy ýapyldy',
],
],
];

View File

@@ -0,0 +1,79 @@
<?php
return [
'label' => 'Dikeltme kodlaryny täzeden döret',
'modal' => [
'heading' => 'Tassyklama programmasy dikeltme kodlaryny täzeden döret',
'description' => 'Dikeltme kodlaryňyzy ýitirseňiz, olary bu ýerde täzeden döredip bilersiňiz. Köne dikeltme kodlaryňyz derrew ýaramaz bolar.',
'form' => [
'code' => [
'label' => 'Tassyklama programmasyndan 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
'password' => [
'label' => 'Ýa-da häzirki açar sözüňizi giriziň',
'validation_attribute' => 'açar sözi',
],
],
'actions' => [
'submit' => [
'label' => 'Dikeltme kodlaryny täzeden döret',
],
],
],
'notifications' => [
'regenerated' => [
'title' => 'Täze tassyklama programmasy dikeltme kodlary döredildi',
],
],
'show_new_recovery_codes' => [
'modal' => [
'heading' => 'Täze dikeltme kodlary',
'description' => 'Aşakdaky dikeltme kodlaryny howpsuz ýerde saklaň. Olary diňe bir gezek görkezerler, ýöne tassyklama programmasyna girip bilmez ýagdaýyňyzda zerur bolar:',
'actions' => [
'submit' => [
'label' => 'Ýap',
],
],
],
],
];

View File

@@ -0,0 +1,83 @@
<?php
return [
'label' => 'Sazla',
'modal' => [
'heading' => 'Tassyklama programmasyny sazla',
'description' => <<<'BLADE'
Bu prosesi tamamlamak üçin Google Authenticator (<x-filament::link href="https://itunes.apple.com/us/app/google-authenticator/id388497605" target="_blank">iOS</x-filament::link>, <x-filament::link href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" target="_blank">Android</x-filament::link>) ýaly programma gerek bolar.
BLADE,
'content' => [
'qr_code' => [
'instruction' => 'Bu QR koduny tassyklama programmaňyz bilen skanirläň:',
'alt' => 'Tassyklama programmasy bilen skanirlemek üçin QR kod',
],
'text_code' => [
'instruction' => 'Ýa-da bu kody el bilen giriziň:',
'messages' => [
'copied' => 'Göçürildi',
],
],
'recovery_codes' => [
'instruction' => 'Aşakdaky dikeltme kodlaryny howpsuz ýerde saklaň. Olary diňe bir gezek görkezerler, ýöne tassyklama programmasyna girip bilmez ýagdaýyňyzda zerur bolar:',
],
],
'form' => [
'code' => [
'label' => 'Tassyklama programmasyndan 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'below_content' => 'Her gezek giriş edeniňizde ýa-da duýguly hereket edeniňizde tassyklama programmaňyzdan 6 sanly kody girizmeli bolar.',
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
],
'actions' => [
'submit' => [
'label' => 'Tassyklama programmasyny aç',
],
],
],
'notifications' => [
'enabled' => [
'title' => 'Tassyklama programmasy açyldy',
],
],
];

View File

@@ -0,0 +1,64 @@
<?php
return [
'management_schema' => [
'actions' => [
'label' => 'Tassyklama programmasy',
'below_content' => 'Giriş tassyklamasy üçin wagtlaýyn kod döretmek üçin howpsuz programma ulanyň.',
'messages' => [
'enabled' => 'Açyk',
'disabled' => 'Ýapyk',
],
],
],
'login_form' => [
'label' => 'Tassyklama programmaňyzdan kody ulanyň',
'code' => [
'label' => 'Tassyklama programmasyndan 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'actions' => [
'use_recovery_code' => [
'label' => 'Oňa ýerine dikeltme koduny ulanyň',
],
],
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
],
],
'recovery_code' => [
'label' => 'Ýa-da dikeltme kody giriziň',
'validation_attribute' => 'dikeltme kody',
'messages' => [
'invalid' => 'Giren dikeltme kodyňyz nädogry.',
],
],
],
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'label' => 'Ýap',
'modal' => [
'heading' => 'Email tassyklama kodlaryny ýap',
'description' => 'Email tassyklama kodlaryny almagy bes etmek isleýärsiňizmi? Muny ýapmak hasabyňyzdan goşmaça howpsuzlyk gatlagyny aýyrar.',
'form' => [
'code' => [
'label' => 'Email bilen iberen 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'actions' => [
'resend' => [
'label' => 'Email bilen täze kod iber',
'notifications' => [
'resent' => [
'title' => 'Email bilen täze kod iberdik',
],
'throttled' => [
'title' => 'Gaty köp gaýtadan ibermek synanyşygy. Başga kod soramakdan öň garaşyň.',
],
],
],
],
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
],
'actions' => [
'submit' => [
'label' => 'Email tassyklama kodlaryny ýap',
],
],
],
'notifications' => [
'disabled' => [
'title' => 'Email tassyklama kodlary ýapyldy',
],
],
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'label' => 'Sazla',
'modal' => [
'heading' => 'Email tassyklama kodlaryny sazla',
'description' => 'Her gezek giriş edeniňizde ýa-da duýguly hereket edeniňizde email bilen iberen 6 sanly kody girizmeli bolar. Sazlamagy tamamlamak üçin emailiňizi 6 sanly kod üçin barlaň.',
'form' => [
'code' => [
'label' => 'Email bilen iberen 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'actions' => [
'resend' => [
'label' => 'Email bilen täze kod iber',
'notifications' => [
'resent' => [
'title' => 'Email bilen täze kod iberdik',
],
'throttled' => [
'title' => 'Gaty köp gaýtadan ibermek synanyşygy. Başga kod soramakdan öň garaşyň.',
],
],
],
],
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
'rate_limited' => 'Gaty köp synanyşyk. Soňra gaýtadan synanyşyň.',
],
],
],
'actions' => [
'submit' => [
'label' => 'Email tassyklama kodlaryny aç',
],
],
],
'notifications' => [
'enabled' => [
'title' => 'Email tassyklama kodlary açyldy',
],
],
];

View File

@@ -0,0 +1,12 @@
<?php
return [
'subject' => 'Giriş kodyňyz',
'lines' => [
'Giriş kodyňyz: :code',
'Bu kod bir minutdan soň möhleti gutarar.|Bu kod :minutes minutdan soň möhleti gutarar.',
],
];

View File

@@ -0,0 +1,64 @@
<?php
return [
'management_schema' => [
'actions' => [
'label' => 'Email tassyklama kodlary',
'below_content' => 'Giriş wagtynda kimligiňizi tassyklamak üçin email salgysyňyza wagtlaýyn kod alyň.',
'messages' => [
'enabled' => 'Açyk',
'disabled' => 'Ýapyk',
],
],
],
'login_form' => [
'label' => 'Email salgysyňyza kod iber',
'code' => [
'label' => 'Email bilen iberen 6 sanly kody giriziň',
'validation_attribute' => 'kod',
'actions' => [
'resend' => [
'label' => 'Email bilen täze kod iber',
'notifications' => [
'resent' => [
'title' => 'Email bilen täze kod iberdik',
],
'throttled' => [
'title' => 'Gaty köp gaýtadan ibermek synanyşygy. Başga kod soramakdan öň garaşyň.',
],
],
],
],
'messages' => [
'invalid' => 'Giren kodyňyz nädogry.',
],
],
],
];

View File

@@ -0,0 +1,19 @@
<?php
return [
'title' => 'Iki faktorly tassyklamany (2FA) sazla',
'heading' => 'Iki faktorly tassyklamany sazla',
'subheading' => '2FA giriş edeniňizde tassyklamak üçin goşmaça barlag talap edip, hasabyňyza goşmaça howpsuzlyk goşýar.',
'actions' => [
'continue' => [
'label' => 'Dowam et',
],
],
];

View File

@@ -0,0 +1,27 @@
<?php
return [
'actions' => [
'Click to',
'copy' => [
'label' => 'göçür',
],
'or',
'download' => [
'label' => 'göçürip al',
],
'all the codes at once.',
],
'messages' => [
'copied' => 'Göçürildi',
],
];

View File

@@ -0,0 +1,16 @@
<?php
return [
'subject' => 'Email salgysyňyz üýtgeşdirilýär',
'lines' => [
'Hasabyňyz bilen baglanyşykly email salgysyny üýtgetmek soragy aldyk. Bu üýtgeşmäni tassyklamak üçin açar sözüňiz ulanyldy.',
'Tassyklanandan soň hasabyňyzyň täze email salgysy: :email.',
'Tassyklanmazdan öň aşakdaky düwmä basyp üýtgeşmäni blokirläp bilersiňiz.',
'Bu soragy siz etmedik bolsaňyz, derrew biz bilen habarlaşyň.',
],
'action' => 'Email üýtgeşmesini blokla',
];

View File

@@ -0,0 +1,73 @@
<?php
return [
'label' => 'Profil',
'form' => [
'email' => [
'label' => 'Email salgysy',
],
'name' => [
'label' => 'Ady',
],
'password' => [
'label' => 'Täze açar sözi',
'validation_attribute' => 'açar sözi',
],
'password_confirmation' => [
'label' => 'Täze açar sözüni tassykla',
'validation_attribute' => 'açar sözi tassyklama',
],
'current_password' => [
'label' => 'Häzirki açar sözi',
'below_content' => 'Howpsuzlyk üçin dowam etmek üçin açar sözüňizi tassyklaň.',
'validation_attribute' => 'häzirki açar sözi',
],
'actions' => [
'save' => [
'label' => 'Üýtgeşmeleri sakla',
],
],
],
'multi_factor_authentication' => [
'label' => 'Iki faktorly tassyklama (2FA)',
],
'notifications' => [
'email_change_verification_sent' => [
'title' => 'Email salgysyny üýtgetmek soragy iberildi',
'body' => 'Email salgysyny üýtgetmek soragy :email salgysyna iberildi. Üýtgeşmäni tassyklamak üçin emailiňizi barlaň.',
],
'saved' => [
'title' => 'Saklandy',
],
'throttled' => [
'title' => 'Gaty köp sorag. :seconds sekuntdan soň gaýtadan synanyşyň.',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
'actions' => [
'cancel' => [
'label' => 'Ýatyr',
],
],
];

View File

@@ -0,0 +1,35 @@
<?php
return [
'title' => 'Email salgysyny tassyklaň',
'heading' => 'Email salgysyny tassyklaň',
'actions' => [
'resend_notification' => [
'label' => 'Gaýtadan iber',
],
],
'messages' => [
'notification_not_received' => 'Iberen emailimizi almadyňyzmy?',
'notification_sent' => 'Email salgysyny nädip tassyklamalydygy barada görkezmeler bilen :email salgysyna email iberdik.',
],
'notifications' => [
'notification_resent' => [
'title' => 'Emaili gaýtadan iberdik.',
],
'notification_resend_throttled' => [
'title' => 'Gaty köp gaýtadan ibermek synanyşygy',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
];

View File

@@ -0,0 +1,85 @@
<?php
return [
'title' => 'Giriş',
'heading' => 'Giriş',
'actions' => [
'register' => [
'before' => 'ýa-da',
'label' => 'hasap aç',
],
'request_password_reset' => [
'label' => 'Açar sözüni ýatdan çykardyňyzmy?',
],
],
'form' => [
'email' => [
'label' => 'Email salgysy',
],
'password' => [
'label' => 'Açar sözi',
],
'remember' => [
'label' => 'Meni ýatda sakla',
],
'actions' => [
'authenticate' => [
'label' => 'Giriş',
],
],
],
'multi_factor' => [
'heading' => 'Kimligiňizi tassyklaň',
'subheading' => 'Girişe dowam etmek üçin kimligiňizi tassyklamaly.',
'form' => [
'provider' => [
'label' => 'Nädip tassyklamak isleýärsiňiz?',
],
'actions' => [
'authenticate' => [
'label' => 'Girişi tassykla',
],
],
],
],
'messages' => [
'failed' => 'Bu maglumatlar ýazgylarymyz bilen gabat gelmeýär.',
],
'notifications' => [
'throttled' => [
'title' => 'Gaty köp giriş synanyşygy',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
];

View File

@@ -0,0 +1,46 @@
<?php
return [
'title' => 'Açar sözüni täzeden belle',
'heading' => 'Açar sözüni ýatdan çykardyňyzmy?',
'actions' => [
'login' => [
'label' => 'girişe gaýt',
],
],
'form' => [
'email' => [
'label' => 'Email salgysy',
],
'actions' => [
'request' => [
'label' => 'Email iber',
],
],
],
'notifications' => [
'sent' => [
'body' => 'Hasabyňyz ýok bolsa, email almarsyňyz.',
],
'throttled' => [
'title' => 'Gaty köp sorag',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
];

View File

@@ -0,0 +1,43 @@
<?php
return [
'title' => 'Açar sözüni täzeden belle',
'heading' => 'Açar sözüni täzeden belle',
'form' => [
'email' => [
'label' => 'Email salgysy',
],
'password' => [
'label' => 'Açar sözi',
'validation_attribute' => 'açar sözi',
],
'password_confirmation' => [
'label' => 'Açar sözüni tassykla',
],
'actions' => [
'reset' => [
'label' => 'Açar sözüni täzeden belle',
],
],
],
'notifications' => [
'throttled' => [
'title' => 'Gaty köp täzeden bellemek synanyşygy',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
];

View File

@@ -0,0 +1,56 @@
<?php
return [
'title' => 'Hasaba al',
'heading' => 'Hasaba al',
'actions' => [
'login' => [
'before' => 'ýa-da',
'label' => 'hasaba gir',
],
],
'form' => [
'email' => [
'label' => 'Email salgysy',
],
'name' => [
'label' => 'Ady',
],
'password' => [
'label' => 'Açar sözi',
'validation_attribute' => 'açar sözi',
],
'password_confirmation' => [
'label' => 'Açar sözüni tassykla',
],
'actions' => [
'register' => [
'label' => 'Hasaba al',
],
],
],
'notifications' => [
'throttled' => [
'title' => 'Gaty köp hasaba almak synanyşygy',
'body' => ':seconds sekuntdan soň gaýtadan synanyşyň.',
],
],
];

View File

@@ -0,0 +1,9 @@
<?php
return [
'title' => 'Sahypany ýüklemekde ýalňyşlyk',
'body' => 'Bu sahypany ýüklemek synanyşylanda ýalňyşlyk ýüze çykdy. Soňra gaýtadan synanyşyň.',
];

View File

@@ -0,0 +1,12 @@
<?php
return [
'field' => [
'label' => 'Global gözleg',
'placeholder' => 'Gözleg',
],
'no_results_message' => 'Gözleg netijesi tapylmady.',
];

View File

@@ -0,0 +1,87 @@
<?php
return [
'direction' => 'ltr',
'skip_to_content' => [
'label' => 'Mazmuna geç',
],
'actions' => [
'billing' => [
'label' => 'Abunalygy dolandyr',
],
'logout' => [
'label' => 'Çykyş',
],
'open_database_notifications' => [
'label' => 'Bildirişler',
'label_with_unread_count' => '{1} Bildirişler, :count okalmadyk bildiriş|[2,*] Bildirişler, :count okalmadyk bildiriş',
],
'open_user_menu' => [
'label' => 'Ulanyjy menýusy',
],
'sidebar' => [
'collapse' => [
'label' => 'Gapdal paneli ýygna',
],
'expand' => [
'label' => 'Gapdal paneli giňelt',
],
],
'theme_switcher' => [
'label' => 'Tema',
'dark' => [
'label' => 'Garaňky temany aç',
],
'light' => [
'label' => 'Ýagty temany aç',
],
'system' => [
'label' => 'Ulgam temasyny aç',
],
],
],
'navigation' => [
'label' => 'Gapdal panel navigasiýasy',
],
'topbar' => [
'label' => 'Ýokarky panel',
],
'avatar' => [
'alt' => ':name awatary',
],
'logo' => [
'alt' => ':name logotipy',
],
'tenant_menu' => [
'search_field' => [
'label' => 'Kirýeçi gözlegi',
'placeholder' => 'Gözleg',
],
],
];

View File

@@ -0,0 +1,33 @@
<?php
return [
'title' => 'Dolandyryş paneli',
'actions' => [
'filter' => [
'label' => 'Filtr',
'modal' => [
'heading' => 'Filtr',
'actions' => [
'apply' => [
'label' => 'Ulany',
],
],
],
],
],
];

View File

@@ -0,0 +1,25 @@
<?php
return [
'form' => [
'actions' => [
'save' => [
'label' => 'Üýtgeşmeleri sakla',
],
],
],
'notifications' => [
'saved' => [
'title' => 'Saklandy',
],
],
];

View File

@@ -0,0 +1,37 @@
<?php
return [
'title' => ':label döret',
'breadcrumb' => 'Döret',
'form' => [
'actions' => [
'cancel' => [
'label' => 'Ýatyr',
],
'create' => [
'label' => 'Döret',
],
'create_another' => [
'label' => 'Döret we ýene döret',
],
],
],
'notifications' => [
'created' => [
'title' => 'Döredildi',
],
],
];

View File

@@ -0,0 +1,43 @@
<?php
return [
'title' => ':label üýtget',
'breadcrumb' => 'Üýtget',
'navigation_label' => 'Üýtget',
'form' => [
'actions' => [
'cancel' => [
'label' => 'Ýatyr',
],
'save' => [
'label' => 'Üýtgeşmeleri sakla',
],
],
],
'content' => [
'tab' => [
'label' => 'Üýtget',
],
],
'notifications' => [
'saved' => [
'title' => 'Saklandy',
],
],
];

View File

@@ -0,0 +1,7 @@
<?php
return [
'breadcrumb' => 'Sanaw',
];

View File

@@ -0,0 +1,7 @@
<?php
return [
'title' => ':label :relationship dolandyr',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
'title' => ':label gör',
'breadcrumb' => 'Gör',
'navigation_label' => 'Gör',
'content' => [
'tab' => [
'label' => 'Gör',
],
],
];

View File

@@ -0,0 +1,7 @@
<?php
return [
'body' => 'Saklanmadyk üýtgeşmeleriňiz bar. Bu sahypadan çykmaga ynanýarsyňyzmy?',
];

View File

@@ -0,0 +1,15 @@
<?php
return [
'actions' => [
'logout' => [
'label' => 'Çykyş',
],
],
'welcome' => 'Hoş geldiňiz',
];

View File

@@ -0,0 +1,17 @@
<?php
return [
'actions' => [
'open_documentation' => [
'label' => 'Resminamalar',
],
'open_github' => [
'label' => 'GitHub',
],
],
];

View File

@@ -0,0 +1,566 @@
<?php
return [
'label' => 'Sorag gurluşy',
'form' => [
'operator' => [
'label' => 'Operator',
],
'or_groups' => [
'label' => 'Toparlar',
'group' => [
'label' => 'Topar',
],
'block' => [
'label' => 'ÝA-DA şert',
'or' => 'ÝA-DA',
],
],
'rules' => [
'label' => 'Düzgünler',
'item' => [
'and' => 'WE',
],
],
],
'no_rules' => '(Düzgün ýok)',
'max_rules_reached_tooltip' => ':count düzgüniň maksimumyna ýetdiňiz.',
'item_separators' => [
'and' => 'WE',
'or' => 'ÝA-DA',
],
'operators' => [
'is_filled' => [
'label' => [
'direct' => 'Doldurylan',
'inverse' => 'Boş',
],
'summary' => [
'direct' => ':attribute doldurylan',
'inverse' => ':attribute boş',
],
],
'boolean' => [
'is_true' => [
'label' => [
'direct' => 'Dogry',
'inverse' => 'Ýalňyş',
],
'summary' => [
'direct' => ':attribute dogry',
'inverse' => ':attribute ýalňyş',
],
],
],
'date' => [
'is_after' => [
'label' => [
'direct' => 'Soň',
'inverse' => 'Soň däl',
],
'summary' => [
'direct' => ':attribute :date-dan soň',
'inverse' => ':attribute :date-dan soň däl',
],
],
'is_before' => [
'label' => [
'direct' => 'Öň',
'inverse' => 'Öň däl',
],
'summary' => [
'direct' => ':attribute :date-dan öň',
'inverse' => ':attribute :date-dan öň däl',
],
],
'is_date' => [
'label' => [
'direct' => 'Sene',
'inverse' => 'Sene däl',
],
'summary' => [
'direct' => ':attribute :date',
'inverse' => ':attribute :date däl',
],
],
'is_month' => [
'label' => [
'direct' => 'Aý',
'inverse' => 'Aý däl',
],
'summary' => [
'direct' => ':attribute :month',
'inverse' => ':attribute :month däl',
],
],
'is_year' => [
'label' => [
'direct' => 'Ýyl',
'inverse' => 'Ýyl däl',
],
'summary' => [
'direct' => ':attribute :year',
'inverse' => ':attribute :year däl',
],
],
'unit_labels' => [
'second' => 'Sekunt',
'minute' => 'Minut',
'hour' => 'Sagat',
'day' => 'Gün',
'week' => 'Hepde',
'month' => 'Aý',
'quarter' => 'Çärýek',
'year' => 'Ýyl',
],
'presets' => [
'past_decade' => 'Geçen onýyllyk',
'past_5_years' => 'Geçen 5 ýyl',
'past_2_years' => 'Geçen 2 ýyl',
'past_year' => 'Geçen ýyl',
'past_6_months' => 'Geçen 6 aý',
'past_quarter' => 'Geçen çärýek',
'past_month' => 'Geçen aý',
'past_2_weeks' => 'Geçen 2 hepde',
'past_week' => 'Geçen hepde',
'past_hour' => 'Geçen sagat',
'past_minute' => 'Geçen minut',
'this_decade' => 'Bu onýyllyk',
'this_year' => 'Bu ýyl',
'this_quarter' => 'Bu çärýek',
'this_month' => 'Bu aý',
'today' => 'Şu gün',
'this_hour' => 'Bu sagat',
'this_minute' => 'Bu minut',
'next_minute' => 'Indiki minut',
'next_hour' => 'Indiki sagat',
'next_week' => 'Indiki hepde',
'next_2_weeks' => 'Indiki 2 hepde',
'next_month' => 'Indiki aý',
'next_quarter' => 'Indiki çärýek',
'next_6_months' => 'Indiki 6 aý',
'next_year' => 'Indiki ýyl',
'next_2_years' => 'Indiki 2 ýyl',
'next_5_years' => 'Indiki 5 ýyl',
'next_decade' => 'Indiki onýyllyk',
'custom' => 'Aýratyn',
],
'form' => [
'date' => [
'label' => 'Sene',
],
'month' => [
'label' => 'Aý',
],
'year' => [
'label' => 'Ýyl',
],
'mode' => [
'label' => 'Sene görnüşi',
'options' => [
'absolute' => 'Anyk sene',
'relative' => 'Göçýän aralyk',
],
],
'preset' => [
'label' => 'Wagt aralygy',
],
'relative_value' => [
'label' => 'Näçe',
],
'relative_unit' => [
'label' => 'Wagt birligi',
],
'tense' => [
'label' => 'Zaman',
'options' => [
'past' => 'Geçen',
'future' => 'Geljek',
],
],
],
],
'number' => [
'equals' => [
'label' => [
'direct' => 'Deň',
'inverse' => 'Deň däl',
],
'summary' => [
'direct' => ':attribute :number-a deň',
'inverse' => ':attribute :number-a deň däl',
],
],
'is_max' => [
'label' => [
'direct' => 'Maksimum',
'inverse' => 'Uly',
],
'summary' => [
'direct' => ':attribute maksimum :number',
'inverse' => ':attribute :number-dan uly',
],
],
'is_min' => [
'label' => [
'direct' => 'Minimum',
'inverse' => 'Kiçi',
],
'summary' => [
'direct' => ':attribute minimum :number',
'inverse' => ':attribute :number-dan kiçi',
],
],
'aggregates' => [
'average' => [
'label' => 'Ortaça',
'summary' => ':attribute ortaçasy',
],
'max' => [
'label' => 'Maks',
'summary' => ':attribute maksimumy',
],
'min' => [
'label' => 'Min',
'summary' => ':attribute minimumy',
],
'sum' => [
'label' => 'Jemi',
'summary' => ':attribute jemi',
],
],
'form' => [
'aggregate' => [
'label' => 'Jemleme',
],
'number' => [
'label' => 'San',
],
],
],
'relationship' => [
'equals' => [
'label' => [
'direct' => 'Bar',
'inverse' => 'Ýok',
],
'summary' => [
'direct' => ':count :relationship bar',
'inverse' => ':count :relationship ýok',
],
],
'has_max' => [
'label' => [
'direct' => 'Maksimum bar',
'inverse' => 'Köp bar',
],
'summary' => [
'direct' => 'Maksimum :count :relationship bar',
'inverse' => ':count :relationship-dan köp bar',
],
],
'has_min' => [
'label' => [
'direct' => 'Minimum bar',
'inverse' => 'Az bar',
],
'summary' => [
'direct' => 'Minimum :count :relationship bar',
'inverse' => ':count :relationship-dan az bar',
],
],
'is_empty' => [
'label' => [
'direct' => 'Boş',
'inverse' => 'Boş däl',
],
'summary' => [
'direct' => ':relationship boş',
'inverse' => ':relationship boş däl',
],
],
'is_related_to' => [
'label' => [
'single' => [
'direct' => 'Bu',
'inverse' => 'Bu däl',
],
'multiple' => [
'direct' => 'Goşýar',
'inverse' => 'Goşmaýar',
],
],
'summary' => [
'single' => [
'direct' => ':relationship :values',
'inverse' => ':relationship :values däl',
],
'multiple' => [
'direct' => ':relationship :values goşýar',
'inverse' => ':relationship :values goşmaýar',
],
'values_glue' => [
0 => ', ',
'final' => ' ýa-da ',
],
],
'form' => [
'value' => [
'label' => 'Baha',
],
'values' => [
'label' => 'Bahalar',
],
],
],
'form' => [
'count' => [
'label' => 'Sany',
],
],
],
'select' => [
'is' => [
'label' => [
'direct' => 'Bu',
'inverse' => 'Bu däl',
],
'summary' => [
'direct' => ':attribute :values',
'inverse' => ':attribute :values däl',
'values_glue' => [
', ',
'final' => ' ýa-da ',
],
],
'form' => [
'value' => [
'label' => 'Baha',
],
'values' => [
'label' => 'Bahalar',
],
],
],
],
'text' => [
'contains' => [
'label' => [
'direct' => 'Goşýar',
'inverse' => 'Goşmaýar',
],
'summary' => [
'direct' => ':attribute :text goşýar',
'inverse' => ':attribute :text goşmaýar',
],
],
'ends_with' => [
'label' => [
'direct' => 'Bilen tamamlanýar',
'inverse' => 'Bilen tamamlanmaýar',
],
'summary' => [
'direct' => ':attribute :text bilen tamamlanýar',
'inverse' => ':attribute :text bilen tamamlanmaýar',
],
],
'equals' => [
'label' => [
'direct' => 'Deň',
'inverse' => 'Deň däl',
],
'summary' => [
'direct' => ':attribute :text-a deň',
'inverse' => ':attribute :text-a deň däl',
],
],
'starts_with' => [
'label' => [
'direct' => 'Bilen başlanýar',
'inverse' => 'Bilen başlanmaýar',
],
'summary' => [
'direct' => ':attribute :text bilen başlanýar',
'inverse' => ':attribute :text bilen başlanmaýar',
],
],
'form' => [
'text' => [
'label' => 'Tekst',
],
],
],
],
'actions' => [
'add_rule' => [
'label' => 'Düzgün goş',
],
'add_rule_group' => [
'label' => 'ÝA-DA goş',
],
],
];

View File

@@ -0,0 +1,61 @@
<?php
return [
'callout' => [
'statuses' => [
'danger' => 'Ýalňyşlyk:',
'info' => 'Bellik:',
'success' => 'Üstünlik:',
'warning' => 'Duýduryş:',
],
],
'section' => [
'actions' => [
'collapse' => [
'label' => 'Bölümi ýygna',
],
'expand' => [
'label' => 'Bölümi giňelt',
],
],
],
'wizard' => [
'actions' => [
'previous_step' => [
'label' => 'Yza',
],
'next_step' => [
'label' => 'Indiki',
],
],
'header' => [
'step' => [
'statuses' => [
'completed' => 'Tamamlandy',
'upcoming' => 'Tamamlanmady',
],
],
],
],
];

View File

@@ -0,0 +1,85 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| Table Columns
|--------------------------------------------------------------------------
*/
'column.name' => 'Ady',
'column.guard_name' => 'Gorag ady',
'column.team' => 'Topar',
'column.roles' => 'Rollar',
'column.permissions' => 'Ygtyýarlar',
'column.updated_at' => 'Täzelenen wagty',
/*
|--------------------------------------------------------------------------
| Form Fields
|--------------------------------------------------------------------------
*/
'field.name' => 'Ady',
'field.guard_name' => 'Gorag ady',
'field.permissions' => 'Ygtyýarlar',
'field.team' => 'Topar',
'field.team.placeholder' => 'Topar saýla ...',
'field.select_all.name' => 'Hemmesini saýla',
'field.select_all.message' => 'Bu rol üçin ähli ygtyýarlar açylýar/ýapylýar',
/*
|--------------------------------------------------------------------------
| Navigation & Resource
|--------------------------------------------------------------------------
*/
'nav.group' => 'Filament Shield',
'nav.role.label' => 'Rollar',
'nav.role.icon' => 'heroicon-o-shield-check',
'resource.label.role' => 'Rol',
'resource.label.roles' => 'Rollar',
/*
|--------------------------------------------------------------------------
| Section & Tabs
|--------------------------------------------------------------------------
*/
'section' => 'Obýektler',
'resources' => 'Resurslar',
'widgets' => 'Widjetler',
'pages' => 'Sahypalar',
'custom' => 'Aýratyn ygtyýarlar',
/*
|--------------------------------------------------------------------------
| Messages
|--------------------------------------------------------------------------
*/
'forbidden' => 'Girmek üçin ygtyýaryňyz ýok',
/*
|--------------------------------------------------------------------------
| Resource Permissions' Labels
|--------------------------------------------------------------------------
*/
'resource_permission_prefixes_labels' => [
'view' => 'Gör',
'view_any' => 'Islendik gör',
'create' => 'Döret',
'update' => 'Täzele',
'delete' => 'Poz',
'delete_any' => 'Islendik poz',
'force_delete' => 'Görkezmesiz poz',
'force_delete_any' => 'Islendik görkezmesiz poz',
'restore' => 'Dikelt',
'reorder' => 'Saýla',
'restore_any' => 'Islendik dikelt',
'replicate' => 'Köpelt',
],
];

292
lang/vendor/filament-tables/tk/table.php vendored Normal file
View File

@@ -0,0 +1,292 @@
<?php
return [
'column_manager' => [
'heading' => 'Sütünler',
'actions' => [
'apply' => [
'label' => 'Sütünleri ulany',
],
'reorder' => [
'label' => 'Sütüni saýla',
],
'reset' => [
'label' => 'Täzeden',
],
],
],
'columns' => [
'actions' => [
'label' => 'Hereket|Hereketler',
],
'icon' => [
'boolean' => [
'true' => 'Hawa',
'false' => 'Ýok',
],
],
'select' => [
'loading_message' => 'Ýüklenýär...',
'no_options_message' => 'Saýlaw ýok.',
'no_search_results_message' => 'Gözlegiňize laýyk saýlaw tapylmady.',
'placeholder' => 'Saýlaw saýla',
'searching_message' => 'Gözleg...',
'search_prompt' => 'Gözleg etmek üçin ýazyň...',
],
'text' => [
'actions' => [
'collapse_list' => ':count az görkez',
'expand_list' => ':count köp görkez',
],
'more_list_items' => 'we ýene :count',
],
],
'fields' => [
'bulk_select_page' => [
'label' => 'Topar hereketleri üçin ähli elementleri saýla/aýyr.',
],
'bulk_select_record' => [
'label' => 'Topar hereketleri üçin :key elementini saýla/aýyr.',
],
'bulk_select_group' => [
'label' => 'Topar hereketleri üçin :title toparyny saýla/aýyr.',
],
'search' => [
'label' => 'Gözleg',
'placeholder' => 'Gözleg',
'indicator' => 'Gözleg',
],
],
'summary' => [
'heading' => 'Jemleme',
'subheadings' => [
'all' => 'Ähli :label',
'group' => ':group jemlemesi',
'page' => 'Bu sahypa',
],
'summarizers' => [
'average' => [
'label' => 'Ortaça',
],
'count' => [
'label' => 'Sany',
],
'sum' => [
'label' => 'Jemi',
],
],
],
'actions' => [
'disable_reordering' => [
'label' => 'Ýazgylary saýlamagy tamamla',
],
'enable_reordering' => [
'label' => 'Ýazgylary saýla',
],
'reorder_record' => [
'label' => ':key elementini saýla',
],
'filter' => [
'label' => 'Filtr',
],
'group' => [
'label' => 'Topar',
],
'open_bulk_actions' => [
'label' => 'Topar hereketleri',
],
'column_manager' => [
'label' => 'Sütün dolandyryjy',
],
'toggle_record_content' => [
'label' => ':key elementini giňelt/ýygna',
],
],
'empty' => [
'heading' => ':model ýok',
'description' => 'Başlamak üçin :model döret.',
],
'filters' => [
'actions' => [
'apply' => [
'label' => 'Filtrleri ulany',
],
'remove' => [
'label' => 'Filtr aýyr',
],
'remove_all' => [
'label' => 'Ähli filtrleri aýyr',
'tooltip' => 'Ähli filtrleri aýyr',
],
'reset' => [
'label' => 'Täzeden',
],
],
'heading' => 'Filtrler',
'indicator' => 'Işjeň filtrler',
'multi_select' => [
'placeholder' => 'Ähli',
],
'select' => [
'placeholder' => 'Ähli',
'relationship' => [
'empty_option_label' => 'Ýok',
],
],
'trashed' => [
'label' => 'Pozulan ýazgylar',
'only_trashed' => 'Diňe pozulan ýazgylar',
'with_trashed' => 'Pozulan ýazgylar bilen',
'without_trashed' => 'Pozulan ýazgylarsyz',
],
],
'grouping' => [
'fields' => [
'group' => [
'label' => 'Topar boýunça',
],
'direction' => [
'label' => 'Topar ugry',
'options' => [
'asc' => 'Artýan',
'desc' => 'Kemelýän',
],
],
],
],
'loading' => 'Ýüklenýär...',
'reorder_indicator' => 'Ýazgylary saýlamak üçin süýräp taşlaň.',
'result_count' => '{0} Netije ýok|{1} :count netije|[2,*] :count netije',
'selection_indicator' => [
'selected_count' => '1 ýazgy saýlandy|:count ýazgy saýlandy',
'actions' => [
'select_all' => [
'label' => 'Hemmesini saýla :count',
],
'deselect_all' => [
'label' => 'Hemmesini aýyr',
],
],
],
'sorting' => [
'fields' => [
'column' => [
'label' => 'Tertiple',
],
'direction' => [
'label' => 'Tertip ugry',
'options' => [
'asc' => 'Artýan',
'desc' => 'Kemelýän',
],
],
],
],
'default_model_label' => 'ýazgy',
];

View File

@@ -0,0 +1,37 @@
<?php
return [
'actions' => [
'filter' => [
'label' => 'Filtr',
],
],
'filter' => [
'label' => 'Diagramma maglumatyny filtrle',
],
'filters' => [
'actions' => [
'apply' => [
'label' => 'Ulany',
],
'reset' => [
'label' => 'Täzeden',
],
],
],
'empty' => [
'heading' => 'Görkezmek üçin maglumat ýok',
],
];

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
use App\Enums\Gender; use App\Enums\Gender;
use App\Enums\NavigationGroup; use App\Enums\NavigationGroup;
use App\Filament\Resources\ActivityLogs\ActivityLogResource; use App\Filament\Resources\ActivityLogs\ActivityLogResource;
use App\Filament\Resources\Departments\DepartmentResource;
use App\Models\User; use App\Models\User;
use BezhanSalleh\LanguageSwitch\Events\LocaleChanged; use BezhanSalleh\LanguageSwitch\Events\LocaleChanged;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
@@ -44,6 +45,26 @@ it('returns translated filament resource navigation labels', function (): void {
expect(ActivityLogResource::getNavigationLabel())->toBe('Журнал аудита'); expect(ActivityLogResource::getNavigationLabel())->toBe('Журнал аудита');
}); });
it('returns translated filament resource model labels', function (): void {
App::setLocale('tk');
expect(DepartmentResource::getPluralModelLabel())->toBe('Bölümler');
expect(DepartmentResource::getModelLabel())->toBe('Bölüm');
App::setLocale('ru');
expect(DepartmentResource::getPluralModelLabel())->toBe('Отделы');
expect(DepartmentResource::getModelLabel())->toBe('Отдел');
});
it('returns translated filament panel strings for turkmen locale', function (): void {
App::setLocale('tk');
expect(__('filament-panels::global-search.field.placeholder'))->toBe('Gözleg');
expect(__('filament-panels::resources/pages/list-records.breadcrumb'))->toBe('Sanaw');
expect(__('filament-actions::create.single.label', ['label' => 'Bölüm']))->toBe('Döret');
});
it('persists locale when locale changed event fires', function (): void { it('persists locale when locale changed event fires', function (): void {
$user = User::factory()->create(['locale' => 'en']); $user = User::factory()->create(['locale' => 'en']);

View File

@@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
use App\Models\Department;
it('generates an uppercase slug code from name', function (): void {
expect(Department::generateUniqueCodeFromName('Human Resources'))
->toBe('HUMAN-RESOURCES');
});
it('generates code on save when code is blank', function (): void {
$department = Department::factory()->create([
'name' => 'Human Resources',
'code' => '',
]);
expect($department->code)->toBe('HUMAN-RESOURCES');
});
it('does not overwrite an existing code on update', function (): void {
$department = Department::factory()->create([
'name' => 'Human Resources',
'code' => 'HR',
]);
$department->update(['name' => 'People Operations']);
expect($department->fresh()->code)->toBe('HR');
});
it('appends a suffix when the generated code already exists', function (): void {
Department::factory()->create([
'name' => 'Sales Team',
'code' => 'SALES',
]);
$department = Department::factory()->create([
'name' => 'Sales',
'code' => '',
]);
expect($department->code)->toBe('SALES-1');
});