Language Service
The Language service class provides methods for managing languages in your application. It can be used directly or through the Language facade.
Namespace
JobMetric\Language\Language
Facade
JobMetric\Language\Facades\Language
Overview
The Language service provides a clean API for CRUD operations on languages, querying with filters, and managing language data. It uses Spatie QueryBuilder under the hood for flexible querying.
Usage
Using Facade
use JobMetric\Language\Facades\Language;
$language = Language::store([...]);
Using Service
use JobMetric\Language\Language;
$languageService = app(Language::class);
$language = $languageService->store([...]);
Available Methods
Store
Store a new language:
$response = Language::store([
'name' => 'Persian',
'flag' => 'ir',
'locale' => 'fa',
'direction' => 'rtl',
'calendar' => 'jalali',
'first_day_of_week' => 0,
'status' => true,
]);
Parameters:
$input(array): Language data array
Returns: Response - Package core response with language resource
Events:
- Fires
LanguageStoredEventafter creation
Update
Update an existing language:
$response = Language::update($id, [
'name' => 'فارسی',
'status' => true,
]);
Parameters:
$language_id(int): The language ID$input(array): Updated language data
Returns: Response - Package core response with language resource
Events:
- Fires
LanguageUpdatedEventafter update
Delete
Delete a language:
$response = Language::delete($id);
Parameters:
$language_id(int): The language ID
Returns: Response - Package core response with deleted language resource
Events:
- Fires
LanguageDeletingEventbefore deletion - Fires
LanguageDeletedEventafter deletion
All
Get all languages matching the filter:
$languages = Language::all();
// Or with filter
$languages = Language::all(['status' => true]);
Parameters:
$filter(array): Key-value filter conditions (optional)
Returns: Collection<LanguageModel> - Collection of Language models
Paginate
Paginate languages:
$languages = Language::paginate(['status' => true], 15);
Parameters:
$filter(array): Key-value filter conditions (optional)$page_limit(int): Number of results per page (default: 15)
Returns: LengthAwarePaginator - Paginated results
Query
Build a query builder for languages:
$query = Language::query(['status' => true]);
$languages = $query->where('direction', 'rtl')->get();
Parameters:
$filter(array): Key-value filter conditions (optional)
Returns: QueryBuilder - Spatie QueryBuilder instance
Allowed Fields:
name,flag,locale,direction,calendar,first_day_of_week,status,created_at,updated_at
Add Language Data
Add a language from predefined data file:
Language::addLanguageData('fa');
Language::addLanguageData('en');
Parameters:
$locale(string): The locale code (e.g., "en", "fa")
Returns: void
Exceptions:
LanguageDataNotExist: If locale doesn't exist in data fileRuntimeException: If data file not found
Get Flags
Get a list of available flag images:
$flags = Language::getFlags();
// Returns: [
// ['value' => 'ir', 'name' => 'Iran', 'url' => '/path/to/ir.svg'],
// ...
// ]
Returns: array - Array of flag data with value, name, and URL
Complete Examples
Basic CRUD
use JobMetric\Language\Facades\Language;
// Store
$response = Language::store([
'name' => 'English',
'flag' => 'us',
'locale' => 'en',
'direction' => 'ltr',
'calendar' => 'gregorian',
'first_day_of_week' => 1,
'status' => true,
]);
// Update
Language::update($id, [
'name' => 'English (US)',
]);
// Delete
Language::delete($id);
// Get all
$languages = Language::all();
// Get active languages
$active = Language::all(['status' => true]);
Querying
// Using query builder
$languages = Language::query(['status' => true])
->where('direction', 'rtl')
->orderBy('name')
->get();
// Pagination
$languages = Language::paginate(['status' => true], 20);
// With filters and sorts
$languages = Language::query()
->where('calendar', 'jalali')
->sort('name')
->get();
Adding Predefined Languages
// Add languages from data file
Language::addLanguageData('fa');
Language::addLanguageData('en');
Language::addLanguageData('ar');
When to Use Language Service
Use the Language service when you need to:
- CRUD Operations: Create, read, update, or delete languages
- Querying: Filter, sort, and paginate languages
- API Integration: Build API endpoints for language management
- Admin Panels: Manage languages in admin interfaces
- Data Seeding: Add predefined languages to your database