ترجمة تطبيقات لارافيل

بسم الله الرحمن الرحيم

والصلاة والسلام علي أشرف المرسلين سيدنا محمد عليه أفضل الصلاة والسلام وأحمد الله جل وعلا الذي وفقني لهذا العمل

يتناول هذا الكتاب شرح ترجمة تطبيقات لارافيل

لمتابعة هذا الكتاب يجب أن يكون لديك معرفة مسبقة بلارافيل و php

لقراءة كتاب أسود أساسيات لغة php


laravel-image-placeholder

عند العمل علي تطبيقات لارافيل لابد لك من أن تقوم بترجمة موقعك الي لغة أخري فلنفرض في هذا المثال اللغة العربية ويتم ذلك عبر 3 خطوات هم الأولي : الذهاب الي مجلد config/app.php وتغيير أعدادات الملف كالتالي للحقلين التاليين

'locale' => 'en', الي 'locale' => 'ar' هذا الحقل يعني اللغة الافتراضية للتطبيق

'fallback_locale' => 'en', الي 'fallback_locale' => 'ar',في حالة لم يتم العثور علي اللغة أعرض هذه اللغة

local image files local image files-2

الخطوة الثانية

الذهاب الي مجلدresources/lang/en ونسخ المحتوي الذي بداخلة الي مجلد جديد بنفس الاسم(ar) الذي تم تغييرة في الخطوة السابقة وسوف تجد بهذا المجلد أربعة ملفات وهم كالتالي


(auth) رسائل المصادقة التي تعرض للمستخدم

(pagination) في حال كان هناك محتوي يلزم التنقل بين الصفحات

(passwords) كلمات المرور

(validation)التحقق من المدخلات ورسائل الخطأ

local image files local image files-2

الخطوة الثالثة


ترجمة محتوي الملفات مع مراعاة قاعدة وهي أنه أي كلمة تبدا

: النقتطين

سواء كنت تعمل في ملفات لارافيل الافتراضية التي يتم تحميلها مع التطبيق لاول مرة أو أي سكربت أخر لا يتم ترجمتها لانها تحمل قيمة متغير .

لترجمه رسائل النجاح والخطأ الموجوده بداخل المتحكمات او class base files

session()->flash('message_key',trans('رسالة الخطأ أو النجاح مثلا'));
session()->flash('message_key',trans('site.message_success'));
local image files-3

خطوات أنشاء مبدل اللغات language switcher

قم بانشاء برمجية وسيطة جديدة middleware

				php artisan make:middleware Language
			
				<?php
				namespace App\Http\Middleware;
				use Closure;
				use Illuminate\Http\Request;
				use Illuminate\Support\Facades\App;
				class Language
				{
					/**
					* Handle an incoming request.
					*
					* @param  \Illuminate\Http\Request  $request
					* @param  \Closure  $next
					* @return mixed
					*/
					public function handle($request, Closure $next)
					{ 
						//
						if (Session()->has('applocale') AND array_key_exists(Session()->get('applocale'), config('languages'))) {
							App::setLocale(Session()->get('applocale'));
						}
						else { // This is optional as Laravel will automatically set the fallback language if there is none specified
							App::setLocale(config('app.fallback_locale'));
						}
						return $next($request);
					}
				}
			

يجب تسجيل ال midleware بداخل ملف Kernel.php

				protected $middlewareGroups = [
				'web' => [
					\App\Http\Middleware\EncryptCookies::class,
					\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
					\Illuminate\Session\Middleware\StartSession::class,
					// \Illuminate\Session\Middleware\AuthenticateSession::class,
					\Illuminate\View\Middleware\ShareErrorsFromSession::class,
					\App\Http\Middleware\VerifyCsrfToken::class,
					\Illuminate\Routing\Middleware\SubstituteBindings::class,
					\App\Http\Middleware\Language::class,
				],
			

ثم أنشاء ملف باسم language.php اضافه مصفوفه تحتوي علي قيم ومفاتيح اللغات

					<?php
					return [
						'en' => 'English',
						'fr' => 'Français',
						'es' => 'Spanish'
					];
			

قم بانشاء متحكم جديد باسم LanguageController

php artisan make:controller LanguageController

ثم كتباه الكود التالي بداخل المتحكم

				<?php
				namespace App\Http\Controllers;
				use Illuminate\Http\Request;
				use Illuminate\Support\Facades\Config;
				use Illuminate\Support\Facades\Session;
				use Illuminate\Support\Facades\Redirect;
				class LanguageController extends Controller
				{
					public function switchLang($lang)
					{
						if (array_key_exists($lang, Config::get('languages'))) {
							Session::put('applocale', $lang);
						}
						return Redirect::back();
					}
				}
				

قم بانشاء مسار جديد وبداخله سوف يكون هذا الكود

					Route::get('lang/{lang}', ['as' => 'lang.switch', 'uses' => 'App\Http\Controllers\LanguageController@switchLang']);
				

هذا الكود هو المسؤول عن عرض مبدل اللغات بداخل ملف العرض

							<li class="nav-item dropdown">
							<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
								{{ Config::get('languages')[App::getLocale()] }}
								</a>
								<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
							@foreach (Config::get('languages') as $lang => $language)
								@if ($lang != App::getLocale())
								<a class="dropdown-item" href="{{ route('lang.switch', $lang) }}"> {{$language}}</a>
								@endif
							@endforeach
							</div>
							</li>
				

لترجمة رسائل التحقق

				@error('أسم رسالة التحقق') <p class="tex-danger"> {{$message}} </p> @enderror
			

توجة الي ملف lang/ar/validation.php

local image files-2

وقم باضافه محتوي الرسائل الذي تريدة بداخل المصفوفة المفتاحية <='attributes'

أوامر الترجمة المختلفة

أي محتوي نصي تريد ترجمته بداخل ملف بالأسم site مثلا

{{__('site.any_string_you_want_to_translate')}}