Compare commits

..

6 Commits

Author SHA1 Message Date
bc56a1824f Add Filament Spatie Laravel Translatable Plugin and update dependencies in composer files
- Added the `filament/spatie-laravel-translatable-plugin` to `composer.json` for enhanced localization support.
- Updated `composer.lock` to reflect the addition of the new plugin and updated versions for several dependencies, including `doctrine/dbal`, `phpstan/phpstan`, and `phpunit/phpunit`.
- Modified `PanelPanelProvider.php` to integrate the translatable plugin with default locales for improved internationalization.
2025-07-29 18:30:32 +05:00
6405150dd2 Remove language files for English, Russian, and Turkmen, streamlining localization resources as part of the ongoing internationalization efforts. 2025-07-29 18:24:17 +05:00
1a3f82b22c Implement language switcher functionality and enhance localization support: add available locales configuration, update SetLocale middleware to handle language selection via query parameters, and integrate language switcher buttons in the settings layout. Additionally, update various views to utilize translation functions for improved internationalization, ensuring consistent language support across the application. 2025-07-29 17:04:13 +05:00
0b6cbc8d9e ok 2025-07-29 16:44:00 +05:00
834822e182 Remove welcome.blade.php and update various views to use translation functions for improved localization support. Changes include updating labels, titles, and alerts across multiple pages to utilize the __('') function, enhancing the application's internationalization capabilities. 2025-07-29 16:39:27 +05:00
e927a912e1 lang 2025-07-29 16:17:32 +05:00
30 changed files with 1023 additions and 647 deletions

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\Response;
class SetLocale
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$locale = $request->query('lang');
if ($locale && in_array($locale, config('app.available_locales'))) {
App::setLocale($locale);
Session::put('locale', $locale);
} elseif (Session::has('locale')) {
App::setLocale(Session::get('locale'));
} else {
App::setLocale(config('app.fallback_locale', 'en'));
}
return $next($request);
}
}

View File

@@ -23,6 +23,7 @@ use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession; use Illuminate\Session\Middleware\StartSession;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\View\Middleware\ShareErrorsFromSession; use Illuminate\View\Middleware\ShareErrorsFromSession;
use Filament\SpatieLaravelTranslatablePlugin;
class PanelPanelProvider extends PanelProvider class PanelPanelProvider extends PanelProvider
{ {
@@ -75,7 +76,11 @@ class PanelPanelProvider extends PanelProvider
->resources([ ->resources([
config('filament-logger.activity_resource'), config('filament-logger.activity_resource'),
ApplicationResource::class, ApplicationResource::class,
]); ])
->plugin(
SpatieLaravelTranslatablePlugin::make()
->defaultLocales(['en', 'ru', 'tk'])
);
} }
public function boot(): void public function boot(): void

View File

@@ -12,6 +12,9 @@ return Application::configure(basePath: dirname(__DIR__))
) )
->withMiddleware(function (Middleware $middleware) { ->withMiddleware(function (Middleware $middleware) {
// //
$middleware->web(append: [
\App\Http\Middleware\SetLocale::class,
]);
}) })
->withExceptions(function (Exceptions $exceptions) { ->withExceptions(function (Exceptions $exceptions) {
// //

View File

@@ -9,8 +9,10 @@
"php": "^8.2", "php": "^8.2",
"filament/filament": "^3.3", "filament/filament": "^3.3",
"filament/spatie-laravel-settings-plugin": "^3.2", "filament/spatie-laravel-settings-plugin": "^3.2",
"filament/spatie-laravel-translatable-plugin": "^3.2",
"laravel/framework": "^12.0", "laravel/framework": "^12.0",
"laravel/tinker": "^2.10.1", "laravel/tinker": "^2.10.1",
"spatie/laravel-translatable": "^6.11",
"z3d0x/filament-logger": "^0.8.0" "z3d0x/filament-logger": "^0.8.0"
}, },
"require-dev": { "require-dev": {

661
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -84,6 +84,19 @@ return [
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
/*
|--------------------------------------------------------------------------
| Application Available Locales
|--------------------------------------------------------------------------
|
| The application locales that are available for your application.
|
*/
'available_locales' => [
'en', 'ru', 'tk'
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Encryption Key | Encryption Key

View File

@@ -3,6 +3,7 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\User; use App\Models\User;
use App\Models\UserRole;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder class UsersTableSeeder extends Seeder
@@ -16,6 +17,7 @@ class UsersTableSeeder extends Seeder
'name' => 'nurmuhammet', 'name' => 'nurmuhammet',
'email' => 'nurmuhammet@mail.com', 'email' => 'nurmuhammet@mail.com',
'password' => bcrypt('payload10'), 'password' => bcrypt('payload10'),
'role' => UserRole::ADMIN,
]); ]);
} }
} }

64
lang/en.json Normal file
View File

@@ -0,0 +1,64 @@
{
"Home": "Home",
"About Us": "About Us",
"Our solutions": "Our solutions",
"News & Stories": "News & Stories",
"News": "News",
"Success Stories": "Success Stories",
"Careers": "Careers",
"Career Opportunities": "Career Opportunities",
"Internships": "Internships",
"Contact": "Contact",
"Get Started": "Get Started",
"Apply for": "Apply for",
"Close": "Close",
"Name": "Name",
"Birthdate": "Birthdate",
"Email": "Email",
"Phone Number": "Phone Number",
"Resume (PDF, DOC, DOCX)": "Resume (PDF, DOC, DOCX)",
"Cover Letter (Optional)": "Cover Letter (Optional)",
"Submit Application": "Submit Application",
"Location": "Location",
"Salary": "Salary",
"Per monthly": "Per monthly",
"Error": "Error",
"An error occurred. Please try again.": "An error occurred. Please try again.",
"Gujurly Inžener logo": "Gujurly Inžener logo",
"Gujurly Inžener": "Gujurly Inžener",
"Address": "Address",
"Quick links": "Quick links",
"Support": "Support",
"Terms & Conditions": "Terms & Conditions",
"Privacy Policy": "Privacy Policy",
"|": "|",
"Mode": "Mode",
"Light": "Light",
"Dark": "Dark",
"Language": "Language",
"Read Our News": "Read Our News",
"Read More": "Read More",
"No news found...": "No news found...",
"Comments": "Comments",
"No comments yet": "No comments yet",
"Post Comment": "Post Comment",
"Required fields are marked": "Required fields are marked",
"Full Name": "Full Name",
"Title": "Title",
"Type your comments....": "Type your comments....",
"Submit Comment": "Submit Comment",
"Recent Blog": "Recent Blog",
"Phone": "Phone",
"Email Address": "Email Address",
"Location:": "Location:",
"Salary:": "Salary:",
"Description": "Description",
"Responsibilities and Qualifications": "Responsibilities and Qualifications",
"Apply for this Career": "Apply for this Career",
"For general application, send your resume at": "For general application, send your resume at",
"Apply Now": "Apply Now",
"No careers found...": "No careers found...",
"Search Here": "Search Here",
"Recent Success Stories": "Recent Success Stories",
"No internships found...": "No internships found..."
}

20
lang/en/auth.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'password' => 'The provided password is incorrect.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];

19
lang/en/pagination.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

22
lang/en/passwords.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| outcome such as failure due to an invalid password / reset token.
|
*/
'reset' => 'Your password has been reset.',
'sent' => 'We have emailed your password reset link.',
'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that email address.",
];

198
lang/en/validation.php Normal file
View File

@@ -0,0 +1,198 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute field must be accepted.',
'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
'active_url' => 'The :attribute field must be a valid URL.',
'after' => 'The :attribute field must be a date after :date.',
'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
'alpha' => 'The :attribute field must only contain letters.',
'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
'alpha_num' => 'The :attribute field must only contain letters and numbers.',
'any_of' => 'The :attribute field is invalid.',
'array' => 'The :attribute field must be an array.',
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
'before' => 'The :attribute field must be a date before :date.',
'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
'between' => [
'array' => 'The :attribute field must have between :min and :max items.',
'file' => 'The :attribute field must be between :min and :max kilobytes.',
'numeric' => 'The :attribute field must be between :min and :max.',
'string' => 'The :attribute field must be between :min and :max characters.',
],
'boolean' => 'The :attribute field must be true or false.',
'can' => 'The :attribute field contains an unauthorized value.',
'confirmed' => 'The :attribute field confirmation does not match.',
'contains' => 'The :attribute field is missing a required value.',
'current_password' => 'The password is incorrect.',
'date' => 'The :attribute field must be a valid date.',
'date_equals' => 'The :attribute field must be a date equal to :date.',
'date_format' => 'The :attribute field must match the format :format.',
'decimal' => 'The :attribute field must have :decimal decimal places.',
'declined' => 'The :attribute field must be declined.',
'declined_if' => 'The :attribute field must be declined when :other is :value.',
'different' => 'The :attribute field and :other must be different.',
'digits' => 'The :attribute field must be :digits digits.',
'digits_between' => 'The :attribute field must be between :min and :max digits.',
'dimensions' => 'The :attribute field has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
'email' => 'The :attribute field must be a valid email address.',
'ends_with' => 'The :attribute field must end with one of the following: :values.',
'enum' => 'The selected :attribute is invalid.',
'exists' => 'The selected :attribute is invalid.',
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
'file' => 'The :attribute field must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'array' => 'The :attribute field must have more than :value items.',
'file' => 'The :attribute field must be greater than :value kilobytes.',
'numeric' => 'The :attribute field must be greater than :value.',
'string' => 'The :attribute field must be greater than :value characters.',
],
'gte' => [
'array' => 'The :attribute field must have :value items or more.',
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be greater than or equal to :value.',
'string' => 'The :attribute field must be greater than or equal to :value characters.',
],
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
'image' => 'The :attribute field must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field must exist in :other.',
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
'integer' => 'The :attribute field must be an integer.',
'ip' => 'The :attribute field must be a valid IP address.',
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
'json' => 'The :attribute field must be a valid JSON string.',
'list' => 'The :attribute field must be a list.',
'lowercase' => 'The :attribute field must be lowercase.',
'lt' => [
'array' => 'The :attribute field must have less than :value items.',
'file' => 'The :attribute field must be less than :value kilobytes.',
'numeric' => 'The :attribute field must be less than :value.',
'string' => 'The :attribute field must be less than :value characters.',
],
'lte' => [
'array' => 'The :attribute field must not have more than :value items.',
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be less than or equal to :value.',
'string' => 'The :attribute field must be less than or equal to :value characters.',
],
'mac_address' => 'The :attribute field must be a valid MAC address.',
'max' => [
'array' => 'The :attribute field must not have more than :max items.',
'file' => 'The :attribute field must not be greater than :max kilobytes.',
'numeric' => 'The :attribute field must not be greater than :max.',
'string' => 'The :attribute field must not be greater than :max characters.',
],
'max_digits' => 'The :attribute field must not have more than :max digits.',
'mimes' => 'The :attribute field must be a file of type: :values.',
'mimetypes' => 'The :attribute field must be a file of type: :values.',
'min' => [
'array' => 'The :attribute field must have at least :min items.',
'file' => 'The :attribute field must be at least :min kilobytes.',
'numeric' => 'The :attribute field must be at least :min.',
'string' => 'The :attribute field must be at least :min characters.',
],
'min_digits' => 'The :attribute field must have at least :min digits.',
'missing' => 'The :attribute field must be missing.',
'missing_if' => 'The :attribute field must be missing when :other is :value.',
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
'missing_with' => 'The :attribute field must be missing when :values is present.',
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
'multiple_of' => 'The :attribute field must be a multiple of :value.',
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute field format is invalid.',
'numeric' => 'The :attribute field must be a number.',
'password' => [
'letters' => 'The :attribute field must contain at least one letter.',
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
'numbers' => 'The :attribute field must contain at least one number.',
'symbols' => 'The :attribute field must contain at least one symbol.',
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
],
'present' => 'The :attribute field must be present.',
'present_if' => 'The :attribute field must be present when :other is :value.',
'present_unless' => 'The :attribute field must be present unless :other is :value.',
'present_with' => 'The :attribute field must be present when :values is present.',
'present_with_all' => 'The :attribute field must be present when :values are present.',
'prohibited' => 'The :attribute field is prohibited.',
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
'prohibits' => 'The :attribute field prohibits :other from being present.',
'regex' => 'The :attribute field format is invalid.',
'required' => 'The :attribute field is required.',
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
'required_if_declined' => 'The :attribute field is required when :other is declined.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute field must match :other.',
'size' => [
'array' => 'The :attribute field must contain :size items.',
'file' => 'The :attribute field must be :size kilobytes.',
'numeric' => 'The :attribute field must be :size.',
'string' => 'The :attribute field must be :size characters.',
],
'starts_with' => 'The :attribute field must start with one of the following: :values.',
'string' => 'The :attribute field must be a string.',
'timezone' => 'The :attribute field must be a valid timezone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'uppercase' => 'The :attribute field must be uppercase.',
'url' => 'The :attribute field must be a valid URL.',
'ulid' => 'The :attribute field must be a valid ULID.',
'uuid' => 'The :attribute field must be a valid UUID.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

64
lang/ru.json Normal file
View File

@@ -0,0 +1,64 @@
{
"Home": "Главная",
"About Us": "О нас",
"Our solutions": "Наши решения",
"News & Stories": "Новости и Истории",
"News": "Новости",
"Success Stories": "Истории успеха",
"Careers": "Карьера",
"Career Opportunities": "Карьерные возможности",
"Internships": "Стажировки",
"Contact": "Контакты",
"Get Started": "Начать",
"Apply for": "Подать заявку на",
"Close": "Закрыть",
"Name": "Имя",
"Birthdate": "Дата рождения",
"Email": "Электронная почта",
"Phone Number": "Номер телефона",
"Resume (PDF, DOC, DOCX)": "Резюме (PDF, DOC, DOCX)",
"Cover Letter (Optional)": "Сопроводительное письмо (необязательно)",
"Submit Application": "Отправить заявку",
"Location": "Местоположение",
"Salary": "Зарплата",
"Per monthly": "В месяц",
"Error": "Ошибка",
"An error occurred. Please try again.": "Произошла ошибка. Пожалуйста, попробуйте еще раз.",
"Gujurly Inžener logo": "Логотип Gujurly Inžener",
"Gujurly Inžener": "Gujurly Inžener",
"Address": "Адрес",
"Quick links": "Быстрые ссылки",
"Support": "Поддержка",
"Terms & Conditions": "Условия и положения",
"Privacy Policy": "Политика конфиденциальности",
"|": "|",
"Mode": "Режим",
"Light": "Светлый",
"Dark": "Темный",
"Language": "Язык",
"Read Our News": "Читайте наши новости",
"Read More": "Читать далее",
"No news found...": "Новости не найдены...",
"Comments": "Комментарии",
"No comments yet": "Пока нет комментариев",
"Post Comment": "Оставить комментарий",
"Required fields are marked": "Обязательные поля помечены",
"Full Name": "Полное имя",
"Title": "Заголовок",
"Type your comments....": "Напишите свои комментарии....",
"Submit Comment": "Отправить комментарий",
"Recent Blog": "Недавний блог",
"Phone": "Телефон",
"Email Address": "Адрес электронной почты",
"Location:": "Местоположение:",
"Salary:": "Зарплата:",
"Description": "Описание",
"Responsibilities and Qualifications": "Обязанности и квалификация",
"Apply for this Career": "Подать заявку на эту карьеру",
"For general application, send your resume at": "Для общего заявления отправьте свое резюме по адресу",
"Apply Now": "Подать сейчас",
"No careers found...": "Вакансии не найдены...",
"Search Here": "Искать здесь",
"Recent Success Stories": "Недавние истории успеха",
"No internships found...": "Стажировки не найдены..."
}

64
lang/tk.json Normal file
View File

@@ -0,0 +1,64 @@
{
"Home": "Baş sahypa",
"About Us": "Biz barada",
"Our solutions": "Biziň çözgütlerimiz",
"News & Stories": "Täzelikler we Hekaýalar",
"News": "Täzelikler",
"Success Stories": "Üstünlik hekaýalary",
"Careers": "Kariýera",
"Career Opportunities": "Kariýera mümkinçilikleri",
"Internships": "Hünär öwrenmek",
"Contact": "Habarlaşmak",
"Get Started": "Başlamak",
"Apply for": "Üçin ýüz tutmak",
"Close": "Ýapmak",
"Name": "Ady",
"Birthdate": "Doglan senesi",
"Email": "Elektron poçta",
"Phone Number": "Telefon belgisi",
"Resume (PDF, DOC, DOCX)": "Rezüme (PDF, DOC, DOCX)",
"Cover Letter (Optional)": "Goşmaça hat (islege görä)",
"Submit Application": "Arza ibermek",
"Location": "Ýerleşýän ýeri",
"Salary": "Aýlyk",
"Per monthly": "Aýda",
"Error": "Ýalňyşlyk",
"An error occurred. Please try again.": "Ýalňyşlyk ýüze çykdy. Haýyş edýäris, täzeden synanyşyň.",
"Gujurly Inžener logo": "Gujurly Inžener nyşany",
"Gujurly Inžener": "Gujurly Inžener",
"Address": "Salgy",
"Quick links": "Çalt baglanyşyklar",
"Support": "Goldaw",
"Terms & Conditions": "Şertler we Düzgünler",
"Privacy Policy": "Gizlinlik syýasaty",
"|": "|",
"Mode": "Režim",
"Light": "Ýagty",
"Dark": "Garaňky",
"Language": "Dil",
"Read Our News": "Täzeliklerimizi okaň",
"Read More": "Doly okaň",
"No news found...": "Täzelik tapylmady...",
"Comments": "Teswirler",
"No comments yet": "Heniz teswir ýok",
"Post Comment": "Teswir goýmak",
"Required fields are marked": "Zerur meýdanlar bellendi",
"Full Name": "Doly ady",
"Title": "Ady",
"Type your comments....": "Teswirleriňizi ýazyň....",
"Submit Comment": "Teswir ibermek",
"Recent Blog": "Soňky blog",
"Phone": "Telefon",
"Email Address": "Elektron poçta salgysy",
"Location:": "Ýerleşýän ýeri:",
"Salary:": "Aýlyk:",
"Description": "Beýany",
"Responsibilities and Qualifications": "Jogapkärçilikler we Hünärler",
"Apply for this Career": "Bu kariýera ýüz tutuň",
"For general application, send your resume at": "Umumy arza üçin rezyumeňizi şu salga iberiň",
"Apply Now": "Häzir ýüz tutuň",
"No careers found...": "Kariýera tapylmady...",
"Search Here": "Şu ýerde gözle",
"Recent Success Stories": "Soňky üstünlik hekaýalary",
"No internships found...": "Hünär öwrenmek tapylmady..."
}

View File

@@ -492,6 +492,15 @@
} }
}); });
// Language Switcher
$('#language-switcher button').on('click', function (e) {
$(this).addClass('active').siblings().removeClass('active');
var lang = $(this).attr('data-lang');
var currentUrl = new URL(window.location.href);
currentUrl.searchParams.set('lang', lang);
window.location.href = currentUrl.toString();
});
///============= * Custom Cursor =============\\\ ///============= * Custom Cursor =============\\\
var ball = document.getElementById("cursor-ball"); var ball = document.getElementById("cursor-ball");
var cursorText = document.getElementById("cursor-text"); var cursorText = document.getElementById("cursor-text");

View File

@@ -2,8 +2,8 @@
<div class="modal-dialog modal-lg"> <div class="modal-dialog modal-lg">
<div class="modal-content rounded-3"> <div class="modal-content rounded-3">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="applicationModalLabel">Apply for <span id="jobTitle"></span></h5> <h5 class="modal-title" id="applicationModalLabel">{{ __('Apply for') }} <span id="jobTitle"></span></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{{ __('Close') }}"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<h6 id="jobLocation"></h6> <h6 id="jobLocation"></h6>
@@ -18,33 +18,33 @@
@endif @endif
<div class="row"> <div class="row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label for="name" class="form-label">Name <span> *</span></label> <label for="name" class="form-label">{{ __('Name') }} <span> *</span></label>
<input type="text" class="form-control" id="name" name="name" required> <input type="text" class="form-control" id="name" name="name" required>
</div> </div>
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label for="birthdate" class="form-label">Birthdate <span> *</span></label> <label for="birthdate" class="form-label">{{ __('Birthdate') }} <span> *</span></label>
<input type="date" class="form-control" id="birthdate" name="birthdate" required> <input type="date" class="form-control" id="birthdate" name="birthdate" required>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label for="email" class="form-label">Email <span> *</span></label> <label for="email" class="form-label">{{ __('Email') }} <span> *</span></label>
<input type="email" class="form-control" id="email" name="email" required> <input type="email" class="form-control" id="email" name="email" required>
</div> </div>
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label for="phone_number" class="form-label">Phone Number <span> *</span></label> <label for="phone_number" class="form-label">{{ __('Phone Number') }} <span> *</span></label>
<input type="text" class="form-control" id="phone_number" name="phone_number" required> <input type="text" class="form-control" id="phone_number" name="phone_number" required>
</div> </div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="resume_file" class="form-label">Resume (PDF, DOC, DOCX) <span> *</span></label> <label for="resume_file" class="form-label">{{ __('Resume (PDF, DOC, DOCX)') }} <span> *</span></label>
<input type="file" class="form-control" id="resume_file" name="resume_file" accept=".pdf,.doc,.docx" required> <input type="file" class="form-control" id="resume_file" name="resume_file" accept=".pdf,.doc,.docx" required>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="cover_letter" class="form-label">Cover Letter (Optional)</label> <label for="cover_letter" class="form-label">{{ __('Cover Letter (Optional)') }}</label>
<textarea class="form-control" id="cover_letter" name="cover_letter" rows="5"></textarea> <textarea class="form-control" id="cover_letter" name="cover_letter" rows="5"></textarea>
</div> </div>
<button type="submit" class="btn btn-primary">Submit Application</button> <button type="submit" class="btn btn-primary">{{ __('Submit Application') }}</button>
</form> </form>
</div> </div>
</div> </div>
@@ -70,8 +70,8 @@
// Set dynamic values // Set dynamic values
modalTitle.textContent = button.getAttribute('data-' + jobType + '-title'); modalTitle.textContent = button.getAttribute('data-' + jobType + '-title');
modalLocation.textContent = 'Location: ' + button.getAttribute('data-' + jobType + '-location'); modalLocation.textContent = '{{ __('Location') }}: ' + button.getAttribute('data-' + jobType + '-location');
modalSalary.textContent = 'Salary: ' + button.getAttribute('data-' + jobType + '-salary') + ' / Per monthly'; modalSalary.textContent = '{{ __('Salary') }}: ' + button.getAttribute('data-' + jobType + '-salary') + ' / {{ __('Per monthly') }}';
modalDescription.textContent = button.getAttribute('data-' + jobType + '-description'); modalDescription.textContent = button.getAttribute('data-' + jobType + '-description');
jobIdInput.value = jobId; jobIdInput.value = jobId;
@@ -108,12 +108,12 @@
modal.hide(); modal.hide();
form.reset(); form.reset();
} else { } else {
alert('Error: ' + data.message); alert('{{ __('Error') }}: ' + data.message);
} }
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('{{ __('Error') }}:', error);
alert('An error occurred. Please try again.'); alert('{{ __('An error occurred. Please try again.') }}');
}); });
}); });
} }

View File

@@ -5,7 +5,7 @@
@include('web.layouts.meta-tags') @include('web.layouts.meta-tags')
<!-- Title of Site --> <!-- Title of Site -->
<title>@isset($title) {{ "{$title} |" }} @endisset {{ $settings->name }}</title> <title>@isset($title) {{ "{$title} " . __('|') . " " }} @endisset {{ $settings->name }}</title>
<!-- Favicons --> <!-- Favicons -->
@include('web.layouts.favicons') @include('web.layouts.favicons')

View File

@@ -8,8 +8,8 @@
<div class="col-lg-4 col-sm-6"> <div class="col-lg-4 col-sm-6">
<div class="footer__four-widget mr-40"> <div class="footer__four-widget mr-40">
<a href="/" class="logo align-items-center d-flex gap-2"> <a href="/" class="logo align-items-center d-flex gap-2">
<img src="/web/assets/img/logo-small.png" style="height: 35px;" alt="Gujurly Inžener logo"> <img src="/web/assets/img/logo-small.png" style="height: 35px;" alt="{{ __('Gujurly Inžener logo') }}">
<span style="font-size: 2em;color: var(--text-heading-color);">Gujurly Inžener</span> <span style="font-size: 2em;color: var(--text-heading-color);">{{ __('Gujurly Inžener') }}</span>
</a> </a>
<h5>{{ $settings->footer_company_header }}</h5> <h5>{{ $settings->footer_company_header }}</h5>
</div> </div>
@@ -32,7 +32,7 @@
<li><a href="{{ route('about-us.index') }}">{{ __('About Us') }}</a></li> <li><a href="{{ route('about-us.index') }}">{{ __('About Us') }}</a></li>
<li><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a></li> <li><a href="{{ route('our-solutions.index') }}">{{ __('Our solutions') }}</a></li>
<li><a href="{{ route('career.index') }}">{{ __('Career Opportunities') }}</a></li> <li><a href="{{ route('career.index') }}">{{ __('Career Opportunities') }}</a></li>
<li><a href="{{ route('success.index') }}">{{ __('Success stories') }}</a></li> <li><a href="{{ route('success.index') }}">{{ __('Success Stories') }}</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -43,7 +43,7 @@
<div class="footer-widget-menu"> <div class="footer-widget-menu">
<ul> <ul>
<li><a href="{{ route('terms') }}">{{ __('Terms & Conditions') }}</a></li> <li><a href="{{ route('terms') }}">{{ __('Terms & Conditions') }}</a></li>
<li><a href="{{ route('privacy') }}">{{ __('Privacy policy') }}</a></li> <li><a href="{{ route('privacy') }}">{{ __('Privacy Policy') }}</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -8,8 +8,16 @@
<div class="switch__tab-area-item"> <div class="switch__tab-area-item">
<h5>{{ __('Mode') }}</h5> <h5>{{ __('Mode') }}</h5>
<div class="switch__tab-area-item-button type-dark-mode"> <div class="switch__tab-area-item-button type-dark-mode">
<button class="active" data-mode="light">{{ __('light') }}</button> <button class="active" data-mode="light">{{ __('Light') }}</button>
<button data-mode="dark-mode">{{ __('dark') }}</button> <button data-mode="dark-mode">{{ __('Dark') }}</button>
</div>
</div>
<div class="switch__tab-area-item">
<h5>{{ __('Language') }}</h5>
<div class="switch__tab-area-item-button type-language" id="language-switcher">
<button class="{{ app()->getLocale() == 'en' ? 'active' : '' }}" data-lang="en">EN</button>
<button class="{{ app()->getLocale() == 'ru' ? 'active' : '' }}" data-lang="ru">RU</button>
<button class="{{ app()->getLocale() == 'tk' ? 'active' : '' }}" data-lang="tk">TK</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -295,10 +295,10 @@ body {
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>About Us</h2> <h2>{{ __('About Us') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>About Us</li> <li>{{ __('About Us') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -345,7 +345,7 @@ body {
<div class="aspect-video relative"> <div class="aspect-video relative">
<video class="w-full h-full object-cover" controls="" poster="{{ asset('storage/' . $aboutSettings->our_story_video_poster) }}"> <video class="w-full h-full object-cover" controls="" poster="{{ asset('storage/' . $aboutSettings->our_story_video_poster) }}">
<source type="video/mp4" src="{{ asset('storage/' . $aboutSettings->our_story_video_source) }}" /> <source type="video/mp4" src="{{ asset('storage/' . $aboutSettings->our_story_video_source) }}" />
Your browser does not support the video tag. {{ __('Your browser does not support the video tag.') }}
</video> </video>
</div> </div>
</div> </div>
@@ -396,14 +396,14 @@ body {
<div class="org-chart"> <div class="org-chart">
<div class="flex justify-center mb-16"> <div class="flex justify-center mb-16">
<div class="org-box org-box-director"> <div class="org-box org-box-director">
<h3 class="font-bold text-lg">Director</h3> <h3 class="font-bold text-lg">{{ __('Director') }}</h3>
<p class="text-sm text-gray-500">{{ $aboutSettings->company_structure_director_name }}</p> <p class="text-sm text-gray-500">{{ $aboutSettings->company_structure_director_name }}</p>
</div> </div>
</div> </div>
<div class="flex justify-center mb-16 relative"> <div class="flex justify-center mb-16 relative">
<div class="absolute top-[-60px] w-px h-[60px] bg-gray-300"></div> <div class="absolute top-[-60px] w-px h-[60px] bg-gray-300"></div>
<div class="org-box org-box-advisor"> <div class="org-box org-box-advisor">
<h3 class="font-bold text-lg">Technical Advisor</h3> <h3 class="font-bold text-lg">{{ __('Technical Advisor') }}</h3>
<p class="text-sm text-gray-500">{{ $aboutSettings->company_structure_advisor_name }}</p> <p class="text-sm text-gray-500">{{ $aboutSettings->company_structure_advisor_name }}</p>
</div> </div>
</div> </div>
@@ -426,8 +426,8 @@ body {
</section> </section>
<section class="mb-24"> <section class="mb-24">
<div class="text-center max-w-3xl mx-auto mb-12"> <div class="text-center max-w-3xl mx-auto mb-12">
<h2 class="text-3xl md:text-4xl font-bold tracking-tight mb-4 bg-clip-text text-transparent bg-gradient-to-r from-teal-500 to-purple-600">Our Management</h2> <h2 class="text-3xl md:text-4xl font-bold tracking-tight mb-4 bg-clip-text text-transparent bg-gradient-to-r from-teal-500 to-purple-600">{{ __('Our Management') }}</h2>
<p class="text-lg text-gray-600">Meet the leadership team driving our vision forward</p> <p class="text-lg text-gray-600">{{ __('Meet the leadership team driving our vision forward') }}</p>
</div> </div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
@foreach (App\Models\TeamMember::all() as $member) @foreach (App\Models\TeamMember::all() as $member)

View File

@@ -15,10 +15,10 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>Careers</h2> <h2>{{ __('Careers') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>Careers</li> <li>{{ __('Careers') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -31,7 +31,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-xl-12 mb-25 text-center"> <div class="col-xl-12 mb-25 text-center">
<h3 class="section-title">For general application, send your resume at career@gujurly.com</h3> <h3 class="section-title">{{ __('For general application, send your resume at') }} career@gujurly.com</h3>
</div> </div>
@forelse ($careers as $career) @forelse ($careers as $career)
<div class="col-xl-4 col-md-6 xl-mb-25 wow fadeInUp" data-wow-delay=".4s"> <div class="col-xl-4 col-md-6 xl-mb-25 wow fadeInUp" data-wow-delay=".4s">
@@ -40,7 +40,7 @@
<span>{{ $career->title }}</span> <span>{{ $career->title }}</span>
<h3>{{ $career->location }}</h3> <h3>{{ $career->location }}</h3>
<h2>{{ $career->salary_per_month }} {{ $career->salary_currency }}</h2> <h2>{{ $career->salary_per_month }} {{ $career->salary_currency }}</h2>
<span>Per monthly</span> <span>{{ __('Per monthly') }}</span>
</div> </div>
<div class="price__area-item-list"> <div class="price__area-item-list">
<ul> <ul>
@@ -50,12 +50,12 @@
</ul> </ul>
</div> </div>
<div class="price__area-item-btn"> <div class="price__area-item-btn">
<button type="button" class="build_button apply-now-button" data-bs-toggle="modal" data-bs-target="#applyInternshipModal" data-job-id="{{ $career->id }}" data-job-type="career" data-career-title="{{ $career->title }}" data-career-location="{{ $career->location }}" data-career-salary="{{ $career->salary_per_month }}" data-career-description="{{ $career->title_description }}">Apply Now<i class="flaticon-right-up"></i></button> <button type="button" class="build_button apply-now-button" data-bs-toggle="modal" data-bs-target="#applyInternshipModal" data-job-id="{{ $career->id }}" data-job-type="career" data-career-title="{{ $career->title }}" data-career-location="{{ $career->location }}" data-career-salary="{{ $career->salary_per_month }}" data-career-description="{{ $career->title_description }}">{{ __('Apply Now') }}<i class="flaticon-right-up"></i></button>
</div> </div>
</div> </div>
</div> </div>
@empty @empty
<span>No careers found...</span> <span>{{ __('No careers found...') }}</span>
@endforelse @endforelse
</div> </div>
</div> </div>
@@ -86,8 +86,8 @@
// Set dynamic values // Set dynamic values
modalTitle.textContent = button.getAttribute('data-' + jobType + '-title'); modalTitle.textContent = button.getAttribute('data-' + jobType + '-title');
modalLocation.textContent = 'Location: ' + button.getAttribute('data-' + jobType + '-location'); modalLocation.textContent = '{{ __('Location') }}: ' + button.getAttribute('data-' + jobType + '-location');
modalSalary.textContent = 'Salary: ' + button.getAttribute('data-' + jobType + '-salary') + ' / Per monthly'; modalSalary.textContent = '{{ __('Salary') }}: ' + button.getAttribute('data-' + jobType + '-salary') + ' / {{ __('Per monthly') }}';
modalDescription.textContent = button.getAttribute('data-' + jobType + '-description'); modalDescription.textContent = button.getAttribute('data-' + jobType + '-description');
jobIdInput.value = jobId; jobIdInput.value = jobId;
@@ -124,12 +124,12 @@
modal.hide(); modal.hide();
form.reset(); form.reset();
} else { } else {
alert('Error: ' + data.message); alert('{{ __('Error') }}: ' + data.message);
} }
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('{{ __('Error') }}:', error);
alert('An error occurred. Please try again.'); alert('{{ __('An error occurred. Please try again.') }}');
}); });
}); });
} }

View File

@@ -10,10 +10,10 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>Contact Us</h2> <h2>{{ __('Contact Us') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>Contact Us</li> <li>{{ __('Contact Us') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -38,7 +38,7 @@
<i class="flaticon-phone"></i> <i class="flaticon-phone"></i>
</div> </div>
<div class="contact__area-left-contact-item-content"> <div class="contact__area-left-contact-item-content">
<span>Phone:</span> <span>{{ __('Phone') }}:</span>
<h6><a href="tel:{{ $contactSettings->phone_number }}">{{ $contactSettings->phone_number }}</a></h6> <h6><a href="tel:{{ $contactSettings->phone_number }}">{{ $contactSettings->phone_number }}</a></h6>
</div> </div>
</div> </div>
@@ -47,7 +47,7 @@
<i class="flaticon-email-3"></i> <i class="flaticon-email-3"></i>
</div> </div>
<div class="contact__area-left-contact-item-content"> <div class="contact__area-left-contact-item-content">
<span>Email Address:</span> <span>{{ __('Email Address') }}:</span>
<h6><a href="mailto:{{ $contactSettings->email_address }}">{{ $contactSettings->email_address }}</a></h6> <h6><a href="mailto:{{ $contactSettings->email_address }}">{{ $contactSettings->email_address }}</a></h6>
</div> </div>
</div> </div>
@@ -56,7 +56,7 @@
<i class="flaticon-location-1"></i> <i class="flaticon-location-1"></i>
</div> </div>
<div class="contact__area-left-contact-item-content"> <div class="contact__area-left-contact-item-content">
<span>Location:</span> <span>{{ __('Location') }}:</span>
<h6><a href="https://google.com/maps" target="_blank">{{ $contactSettings->location_address }}</a></h6> <h6><a href="https://google.com/maps" target="_blank">{{ $contactSettings->location_address }}</a></h6>
</div> </div>
</div> </div>
@@ -65,32 +65,32 @@
</div> </div>
<div class="col-lg-7 wow fadeInRight" data-wow-delay=".4s"> <div class="col-lg-7 wow fadeInRight" data-wow-delay=".4s">
<div class="contact__area-form"> <div class="contact__area-form">
<h4>Send Message</h4> <h4>{{ __('Send Message') }}</h4>
<form action="#"> <form action="#">
<div class="row"> <div class="row">
<div class="col-md-6 mb-25"> <div class="col-md-6 mb-25">
<div class="contact__form-area-item"> <div class="contact__form-area-item">
<input type="text" name="name" placeholder="Full Name" required="required"> <input type="text" name="name" placeholder="{{ __('Full Name') }}" required="required">
</div> </div>
</div> </div>
<div class="col-md-6 md-mb-25"> <div class="col-md-6 md-mb-25">
<div class="contact__form-area-item"> <div class="contact__form-area-item">
<input type="email" name="email" placeholder="Email Address" required="required"> <input type="email" name="email" placeholder="{{ __('Email Address') }}" required="required">
</div> </div>
</div> </div>
<div class="col-md-12 mb-25"> <div class="col-md-12 mb-25">
<div class="contact__form-area-item"> <div class="contact__form-area-item">
<input type="text" name="subject" placeholder="Subject"> <input type="text" name="subject" placeholder="{{ __('Subject') }}">
</div> </div>
</div> </div>
<div class="col-md-12 mb-25"> <div class="col-md-12 mb-25">
<div class="contact__form-area-item"> <div class="contact__form-area-item">
<textarea name="message" placeholder="Message"></textarea> <textarea name="message" placeholder="{{ __('Message') }}"></textarea>
</div> </div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<div class="contact__form-area-item"> <div class="contact__form-area-item">
<button class="build_button" type="submit">Submit Message <i class="flaticon-right-up"></i></button> <button class="build_button" type="submit">{{ __('Submit Message') }} <i class="flaticon-right-up"></i></button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -146,14 +146,14 @@
</div> </div>
<div class="row mt-70 wow fadeInUp" data-wow-delay=".5s"> <div class="row mt-70 wow fadeInUp" data-wow-delay=".5s">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="swiper services_four_slide data_cursor" data-cursor-text="Drag"> <div class="swiper services_four_slide data_cursor" data-cursor-text="{{ __('Drag') }}">
<div class="swiper-wrapper"> <div class="swiper-wrapper">
@foreach($solutionSettings->solution_items as $item) @foreach($solutionSettings->solution_items as $item)
<div class="swiper-slide"> <div class="swiper-slide">
<div class="services__one-item"> <div class="services__one-item">
<i class="{{ $item['icon_class'] }}"></i> <i class="{{ $item['icon_class'] }}"></i>
<h4><a href="{{ $item['link'] }}">{{ $item['title'] }}</a></h4> <h4><a href="{{ $item['link'] }}">{{ $item['title'] }}</a></h4>
<a class="more_btn" href="{{ $item['link'] }}">Read More<i class="flaticon-right-up"></i></a> <a class="more_btn" href="{{ $item['link'] }}">{{ __('Read More') }}<i class="flaticon-right-up"></i></a>
</div> </div>
</div> </div>
@endforeach @endforeach
@@ -315,8 +315,8 @@
<div class="row mb-30"> <div class="row mb-30">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="blog__four-title t-center"> <div class="blog__four-title t-center">
<span class="subtitle wow fadeInLeft" data-wow-delay=".4s">News & Blog</span> <span class="subtitle wow fadeInLeft" data-wow-delay=".4s">{{ __('News & Blog') }}</span>
<h2 class="title_split_anim">News</h2> <h2 class="title_split_anim">{{ __('News') }}</h2>
</div> </div>
</div> </div>
</div> </div>
@@ -334,8 +334,8 @@
<div class="blog__four-item-content"> <div class="blog__four-item-content">
<div class="meta"> <div class="meta">
<ul> <ul>
<li><a href="#"><i class="far fa-user"></i>{{ $news->author->name ?? 'Admin' }}</a></li> <li><a href="#"><i class="far fa-user"></i>{{ $news->author->name ?? __('Admin') }}</a></li>
<li><a href="#"><i class="far fa-comment-dots"></i>Comments ({{ $news->comments->count() }})</a></li> <li><a href="#"><i class="far fa-comment-dots"></i>{{ __('Comments') }} ({{ $news->comments->count() }})</a></li>
</ul> </ul>
</div> </div>
<h4><a href="{{ route('news.show', $news->slug) }}">{{ $news->title }}</a></h4> <h4><a href="{{ route('news.show', $news->slug) }}">{{ $news->title }}</a></h4>

View File

@@ -15,10 +15,10 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>Internships</h2> <h2>{{ __('Internships') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>Internships</li> <li>{{ __('Internships') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -31,7 +31,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-xl-12 mb-25 text-center"> <div class="col-xl-12 mb-25 text-center">
<h3 class="section-title">For general application, send your resume at career@gujurly.com</h3> <h3 class="section-title">{{ __('For general application, send your resume at') }} career@gujurly.com</h3>
</div> </div>
@forelse ($internships as $internship) @forelse ($internships as $internship)
<div class="col-xl-4 col-md-6 xl-mb-25 wow fadeInUp" data-wow-delay=".4s"> <div class="col-xl-4 col-md-6 xl-mb-25 wow fadeInUp" data-wow-delay=".4s">
@@ -40,7 +40,7 @@
<span>{{ $internship->title }}</span> <span>{{ $internship->title }}</span>
<h3>{{ $internship->location }}</h3> <h3>{{ $internship->location }}</h3>
<h2>{{ $internship->salary_per_month }} {{ $internship->salary_currency }}</h2> <h2>{{ $internship->salary_per_month }} {{ $internship->salary_currency }}</h2>
<span>Per monthly</span> <span>{{ __('Per monthly') }}</span>
</div> </div>
<div class="price__area-item-list"> <div class="price__area-item-list">
<ul> <ul>
@@ -50,12 +50,12 @@
</ul> </ul>
</div> </div>
<div class="price__area-item-btn"> <div class="price__area-item-btn">
<button type="button" class="build_button apply-now-button" data-bs-toggle="modal" data-bs-target="#applyInternshipModal" data-job-id="{{ $internship->id }}" data-job-type="internship" data-internship-title="{{ $internship->title }}" data-internship-location="{{ $internship->location }}" data-internship-salary="{{ $internship->salary_per_month }}" data-internship-description="{{ $internship->title_description }}">Apply Now<i class="flaticon-right-up"></i></button> <button type="button" class="build_button apply-now-button" data-bs-toggle="modal" data-bs-target="#applyInternshipModal" data-job-id="{{ $internship->id }}" data-job-type="internship" data-internship-title="{{ $internship->title }}" data-internship-location="{{ $internship->location }}" data-internship-salary="{{ $internship->salary_per_month }}" data-internship-description="{{ $internship->title_description }}">{{ __('Apply Now') }}<i class="flaticon-right-up"></i></button>
</div> </div>
</div> </div>
</div> </div>
@empty @empty
<span>No internships found...</span> <span>{{ __('No internships found...') }}</span>
@endforelse @endforelse
</div> </div>
</div> </div>
@@ -86,8 +86,8 @@
// Set dynamic values // Set dynamic values
modalTitle.textContent = button.getAttribute('data-' + jobType + '-title'); modalTitle.textContent = button.getAttribute('data-' + jobType + '-title');
modalLocation.textContent = 'Location: ' + button.getAttribute('data-' + jobType + '-location'); modalLocation.textContent = '{{ __('Location') }}: ' + button.getAttribute('data-' + jobType + '-location');
modalSalary.textContent = 'Salary: ' + button.getAttribute('data-' + jobType + '-salary') + ' / Per monthly'; modalSalary.textContent = '{{ __('Salary') }}: ' + button.getAttribute('data-' + jobType + '-salary') + ' / {{ __('Per monthly') }}';
modalDescription.textContent = button.getAttribute('data-' + jobType + '-description'); modalDescription.textContent = button.getAttribute('data-' + jobType + '-description');
jobIdInput.value = jobId; jobIdInput.value = jobId;
@@ -124,12 +124,12 @@
modal.hide(); modal.hide();
form.reset(); form.reset();
} else { } else {
alert('Error: ' + data.message); alert('{{ __('Error') }}: ' + data.message);
} }
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('{{ __('Error') }}:', error);
alert('An error occurred. Please try again.'); alert('{{ __('An error occurred. Please try again.') }}');
}); });
}); });
} }

View File

@@ -7,10 +7,10 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>News</h2> <h2>{{ __('News') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>News</li> <li>{{ __('News') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -24,7 +24,7 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="section-title text-center pb-50"> <div class="section-title text-center pb-50">
<h2 class="pb-3">Read Our News</h2> <h2 class="pb-3">{{ __('Read Our News') }}</h2>
</div> </div>
</div> </div>
</div> </div>
@@ -40,13 +40,13 @@
</div> </div>
<div class="blog__one-item-content"> <div class="blog__one-item-content">
<h4><a href="{{ route('news.show', $news->slug) }}">{{ $news->title }}</a></h4> <h4><a href="{{ route('news.show', $news->slug) }}">{{ $news->title }}</a></h4>
<a class="more_btn" href="{{ route('news.show', $news->slug) }}">Read More<i class="flaticon-right-up"></i></a> <a class="more_btn" href="{{ route('news.show', $news->slug) }}">{{ __('Read More') }}<i class="flaticon-right-up"></i></a>
</div> </div>
</div> </div>
</div> </div>
@empty @empty
<div class="col-12"> <div class="col-12">
<div class="alert alert-info">No news found...</div> <div class="alert alert-info">{{ __('No news found...') }}</div>
</div> </div>
@endforelse @endforelse
</div> </div>

View File

@@ -9,8 +9,8 @@
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>{{ $news->title }}</h2> <h2>{{ $news->title }}</h2>
<ul> <ul>
<li><a href="{{ route('home') }}">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="{{ route('home') }}">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li><a href="{{ route('news.index') }}">News</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="{{ route('news.index') }}">{{ __('News') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>{{ $news->title }}</li> <li>{{ $news->title }}</li>
</ul> </ul>
</div> </div>
@@ -39,7 +39,7 @@
</div> </div>
</div> </div>
<div class="blog__details-area-comment mt-40"> <div class="blog__details-area-comment mt-40">
<h3 class="mb-30">Comments ({{ $news->comments->count() }})</h3> <h3 class="mb-30">{{ __('Comments') }} ({{ $news->comments->count() }})</h3>
@forelse ($news->comments as $comment) @forelse ($news->comments as $comment)
<div class="blog__details-area-comment-item"> <div class="blog__details-area-comment-item">
<div class="blog__details-area-comment-item-comment"> <div class="blog__details-area-comment-item-comment">
@@ -54,35 +54,35 @@
</div> </div>
</div> </div>
@empty @empty
<p>No comments yet</p> <p>{{ __('No comments yet') }}</p>
@endforelse @endforelse
</div> </div>
<div class="blog__details-area-contact mt-60"> <div class="blog__details-area-contact mt-60">
<h3>Post Comment</h3> <h3>{{ __('Post Comment') }}</h3>
<p>Required fields are marked</p> <p>{{ __('Required fields are marked') }}</p>
<div class="blog__details-area-contact-form"> <div class="blog__details-area-contact-form">
<form action="{{ route('comments.store', $news->slug) }}" method="POST"> <form action="{{ route('comments.store', $news->slug) }}" method="POST">
@csrf @csrf
<div class="row"> <div class="row">
<div class="col-sm-6 mt-25"> <div class="col-sm-6 mt-25">
<div class="blog__details-area-contact-form-item contact-item"> <div class="blog__details-area-contact-form-item contact-item">
<input type="text" name="author_name" placeholder="Full Name" required="required"> <input type="text" name="author_name" placeholder="{{ __('Full Name') }}" required="required">
</div> </div>
</div> </div>
<div class="col-sm-6 mt-25"> <div class="col-sm-6 mt-25">
<div class="blog__details-area-contact-form-item contact-item"> <div class="blog__details-area-contact-form-item contact-item">
<input type="text" name="title" placeholder="Title" required="required"> <input type="text" name="title" placeholder="{{ __('Title') }}" required="required">
</div> </div>
</div> </div>
<div class="col-sm-12 mt-25"> <div class="col-sm-12 mt-25">
<div class="blog__details-area-contact-form-item contact-item"> <div class="blog__details-area-contact-form-item contact-item">
<textarea name="message" placeholder="Type your comments...."></textarea> <textarea name="message" placeholder="{{ __('Type your comments....') }}"></textarea>
<input type="hidden" name="news_id" value="{{ $news->id }}"> <input type="hidden" name="news_id" value="{{ $news->id }}">
</div> </div>
</div> </div>
<div class="col-lg-12 mt-25"> <div class="col-lg-12 mt-25">
<div class="blog__details-area-contact-form-item"> <div class="blog__details-area-contact-form-item">
<button class="build_button" type="submit">Submit Comment<i class="flaticon-right-up"></i></button> <button class="build_button" type="submit">{{ __('Submit Comment') }}<i class="flaticon-right-up"></i></button>
</div> </div>
</div> </div>
</div> </div>
@@ -95,7 +95,7 @@
<div class="all__sidebar"> <div class="all__sidebar">
<div class="all__sidebar-item"> <div class="all__sidebar-item">
<h4>Recent Blog</h4> <h4>{{ __('Recent Blog') }}</h4>
<div class="all__sidebar-item-post dark_image"> <div class="all__sidebar-item-post dark_image">
@foreach($recentNews as $news) @foreach($recentNews as $news)
<div class="post__item"> <div class="post__item">

View File

@@ -7,10 +7,10 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>Success Stories</h2> <h2>{{ __('Success Stories') }}</h2>
<ul> <ul>
<li><a href="/">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="/">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>Success Stories</li> <li>{{ __('Success Stories') }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -24,8 +24,8 @@
<div class="row"> <div class="row">
<div class="col-xl-12"> <div class="col-xl-12">
<div class="section-title text-center pb-50"> <div class="section-title text-center pb-50">
<h2 class="pb-3">Our Success Stories</h2> <h2 class="pb-3">{{ __('Our Success Stories') }}</h2>
<p>Discover inspiring narratives of triumph, growth, and achievement through our curated collection of success stories. Each story is a testament to dedication and hard work.</p> <p>{{ __('Discover inspiring narratives of triumph, growth, and achievement through our curated collection of success stories. Each story is a testament to dedication and hard work.') }}</p>
</div> </div>
</div> </div>
@forelse ($allSuccesses as $success) @forelse ($allSuccesses as $success)
@@ -39,13 +39,13 @@
</div> </div>
<div class="blog__one-item-content"> <div class="blog__one-item-content">
<h4><a href="{{ route('success.show', $success->slug) }}">{{ $success->title }}</a></h4> <h4><a href="{{ route('success.show', $success->slug) }}">{{ $success->title }}</a></h4>
<a class="more_btn" href="{{ route('success.show', $success->slug) }}">Read More<i class="flaticon-right-up"></i></a> <a class="more_btn" href="{{ route('success.show', $success->slug) }}">{{ __('Read More') }}<i class="flaticon-right-up"></i></a>
</div> </div>
</div> </div>
</div> </div>
@empty @empty
<div class="col-12"> <div class="col-12">
<div class="alert alert-info">No success stories found...</div> <div class="alert alert-info">{{ __('No success stories found...') }}</div>
</div> </div>
@endforelse @endforelse
</div> </div>

View File

@@ -9,8 +9,8 @@
<div class="breadcrumb__area-content"> <div class="breadcrumb__area-content">
<h2>{{ $success->title }}</h2> <h2>{{ $success->title }}</h2>
<ul> <ul>
<li><a href="{{ route('home') }}">Home</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="{{ route('home') }}">{{ __('Home') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li><a href="{{ route('success.index') }}">Success Stories</a><i class="fa-regular fa-angle-right"></i></li> <li><a href="{{ route('success.index') }}">{{ __('Success Stories') }}</a><i class="fa-regular fa-angle-right"></i></li>
<li>{{ $success->title }}</li> <li>{{ $success->title }}</li>
</ul> </ul>
</div> </div>
@@ -34,7 +34,7 @@
<div class="all__sidebar"> <div class="all__sidebar">
<div class="all__sidebar-item"> <div class="all__sidebar-item">
<h4>Recent Success Stories</h4> <h4>{{ __('Recent Success Stories') }}</h4>
<div class="all__sidebar-item-post dark_image"> <div class="all__sidebar-item-post dark_image">
@foreach($recentSuccesses as $success) @foreach($recentSuccesses as $success)
<div class="post__item"> <div class="post__item">

File diff suppressed because one or more lines are too long

View File

@@ -11,6 +11,7 @@ use App\Http\Controllers\NewsPageController;
use App\Http\Controllers\OurSolutionPageController; use App\Http\Controllers\OurSolutionPageController;
use App\Http\Controllers\Web\SuccessPageController; use App\Http\Controllers\Web\SuccessPageController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Session;
// Homepage... // Homepage...
Route::get('/', [HomePageController::class, 'index'])->name('home'); Route::get('/', [HomePageController::class, 'index'])->name('home');
@@ -48,3 +49,10 @@ Route::post('contact', [ContactPageController::class, 'store'])->name('contact.s
// Legal pages... // Legal pages...
Route::get('terms-and-conditions', [LegalPageController::class, 'terms'])->name('terms'); Route::get('terms-and-conditions', [LegalPageController::class, 'terms'])->name('terms');
Route::get('privacy-and-policy', [LegalPageController::class, 'privacy'])->name('privacy'); Route::get('privacy-and-policy', [LegalPageController::class, 'privacy'])->name('privacy');
// Language Switcher
Route::get('locale/{locale}', function ($locale) {
Session::put('locale', $locale);
return redirect()->back();
})->name('locale.switch');