دليل توطين Laravel خطوة بخطوة

ارتقِ بعملك إلى المستوى التالي من خلال التوسع العالمي. نمو الأعمال وتطويرها.
Table of Contents

Laravel localization هي أداة قوية تُمكّن المطورين من إنشاء مواقع متعددة اللغات. من خلال تنفيذ web localization في مشاريع Laravel ، يمكنك تقديم تجربة مستخدم مخصصة للزوار من خلفيات لغوية مختلفة، مما يوسع نطاق وصولك ويحسّن تفاعل المستخدمين.

سنرشدك خلال تنفيذ التوطين في تطبيق Laravel الخاص بك ونعرّفك على أداة يمكنها تبسيط جهود التوطين لديك وتعزيزها!

لماذا يجب عليك توطين موقع Laravel ؟

رجل يرتدي سترة برتقالية يحمل جهازًا لوحيًا عليه خريطة العالم. تظهر أعلام دول مختلفة.

إليك بعض الأسباب المهمة التي تدفعك إلى توطين موقع Laravel الخاص بك.

  • الوصول إلى جمهور عالمي: من خلال توطين موقعك على Laravel ، يمكنك توسيع نطاق وصول تطبيقك إلى جمهور دولي. وهذا يسمح للمستخدمين من مختلف البلدان والخلفيات اللغوية بفهم محتواك والتفاعل معه.
  • يحسّن تجربة المستخدم: تتيح الترجمة للمستخدمين التفاعل مع التطبيق بلغتهم الأم، مما يحسّن تجربة المستخدم بشكل كبير. يمكن أن يؤدي ذلك إلى زيادة معدلات التفاعل، وتقليل معدلات الارتداد، وزيادة التحويلات.
  • ميزة تنافسية: في سوق عالمي تنافسي، يمكن أن يوفر تقديم التطبيقات بلغات متعددة ميزة كبيرة على المنافسين. فهو يُظهر التزامك بالأسواق الدولية ويمكن أن يساعدك على دخول أسواق جديدة بفعالية أكبر.
  • يحسّن تحسين محركات البحث (SEO): تميل المواقع المترجمة جيدًا إلى التصنيف بشكل أفضل في محركات البحث عند البحث بلغة معينة. يمكن لهذا أن يزيد من زيارات مدونتك ويزيد من ظهورك على الإنترنت في أسواق مختلفة من خلال الترجمة متعددة اللغات.

متطلبات توطين Laravel متعدد اللغات

شخصان يتعاونان على شاشة كمبيوتر كبيرة تحتوي على تطبيقات متنوعة. يبدو أنهما يعملان معًا.

هناك بعض المتطلبات والخطوات التي يجب مراعاتها عند تنفيذ التوطين متعدد اللغات في Laravel.

  • للحصول على أحدث ميزات التوطين، تأكد من استخدام أحدث إصدار من Laravel (على سبيل المثال، الإصدار 10.x).
  • إن الفهم الأساسي للغة PHP وإطار عمل Laravel سيكون مفيدًا في عملية التنفيذ.
  • قم بإعداد بيئة تطوير محلية أو خادم يدعم Laravel، بما في ذلك خادم ويب وقاعدة بيانات.
  • حدد اللغات التي سيدعمها تطبيقك منذ البداية.

ترجمات Laravel البسيطة

رجل يعمل على حاسوب محمول. تصفح الويب على الشاشة.

بعد فهم المتطلبات التي يجب تلبيتها قبل ترجمة تطبيق Laravel أو موقع ويب، سنقدم بعض الخطوات لترجمة Laravel ببساطة.

للقيام بذلك، افتح ملف العرض الذي تريد توطينه، على سبيل المثال، resources/views/welcome.blade.php. ثم استبدل وسم body بالكود التالي.

				
					<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                Welcome to Linguise website!
            </div>
        </div>
    </div>
</body>
				
			

كما ترى، النص أعلاه مكتوب حاليًا مباشرة في الكود. هذا أقل كفاءة ويجعل من الصعب ترجمة المواقع الإلكترونية إلى لغات مختلفة (التدويل). 

سنجعل النص أعلاه أكثر مرونة بحيث يمكن تكييفه بسهولة مع لغات مختلفة. يوفر Laravel ميزة مفيدة جدًا لهذا الغرض؛ نظام الترجمة. كخطوة أولى، استبدل النص الحالي بالكود التالي.

				
					{{ __('Welcome to Linguise website!') }}
				
			

سيعرض Laravel النص أعلاه افتراضيًا وسيبحث عن الترجمة إذا اختار المستخدم لغة غير الإنجليزية. في هذه الحالة، ستُستخدم الإنجليزية كلغة التطبيق الافتراضية.

إعداد اللغات المحلية في موقع ويب متعدد اللغات باستخدام Laravel

شخصان يعملان على شاشات الكمبيوتر. يتفاعلان مع شاشات كبيرة.

ولكن كيف يحدد Laravel اللغة الحالية أو يعرف اللغات المتاحة في التطبيق؟ يتحقق من إعدادات اللغة المحلية في ملف config/app.php. افتح هذا الملف وابحث عن المفتاحين التاليين.

				
					/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/

'locale' => 'en',

/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/

'fallback_locale' => 'en',

				
			

يجب أن يكون الشرح الوارد أعلاه بجانب المفاتيح واضحًا. باختصار، يحمل المفتاح locale اللغة الافتراضية لتطبيقك (إذا لم يتم تحديد لغة أخرى في الكود). يتم تفعيل fallback_locale إذا تم طلب لغة غير موجودة في تطبيقك.

الآن، لنضف مفتاحًا جديدًا إلى هذا الملف لتوفير قائمة بجميع اللغات المدعومة.

				
					/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/

'available_locales' => [
  'English' => 'en',
  'Italian' => 'it',
  'French' => 'fr',
],


				
			

في هذه المرحلة، جربنا Laravel web لدعم ثلاث لغات، وهي الإنجليزية والإيطالية والفرنسية.

نظرة عامة على ملفات ترجمة Laravel

امرأة تشير إلى شاشة كمبيوتر كبيرة تعرض أيقونات ملونة متنوعة. تحتوي الشاشة على خلفية بيضاء مع أيقونات زرقاء وبنفسجية.

في Laravel، كما هو الحال في العديد من الأطر الأخرى، تُخزَّن ترجمات اللغات المختلفة في ملفات منفصلة. ويُستخدم أسلوبان لتنظيم ملفات الترجمة هذه.

تخزّن الطريقة الأقدم الملفات في البنية التالية: resources/lang/{en,fr,it}/{myfile.php}. أما الطريقة الأحدث فتستخدم ملفات JSON، مثل resources/lang/{fr.json, it.json}. ستركّز هذه المقالة على الطريقة الأحدث، مع أن المبادئ متشابهة في الطريقة الأقدم، باستثناء الاختلافات في كيفية تسمية مفاتيح الترجمة والوصول إليها.

بالنسبة للغات التي تحتوي على اختلافات إقليمية، يجب عليك تسمية أدلة أو ملفات اللغة وفقًا لمعيار ISO 15897. على سبيل المثال، سيتم تسمية الإنجليزية البريطانية en_GB بدلاً من en-gb.

معلومات عامة

في Laravel، كما هو الحال مع العديد من الأطر، يتم تخزين الترجمات للغات مختلفة في ملفات منفصلة. هناك طريقتان أساسيتان لتنظيم ملفات ترجمة Laravel .

  1. يتضمن النهج القديم تخزين الملفات تحت المسار: resources/lang/{en,fr,it}/{myfile.php}.
  2. يعتمد الأسلوب الحديث على ملفات resources/lang/{fr.json, it.json}.

ستركز هذه المقالة على الطريقة الثانية، على الرغم من أن المبادئ تنطبق على كلتا الطريقتين (مع اختلافات في كيفية تسمية مفاتيح الترجمة والوصول إليها).

بالنسبة للغات التي تختلف حسب المنطقة، يُوصى بتسمية مجلدات/ملفات اللغة وفقًا لمعايير ISO 15897. على سبيل المثال، يُشار إلى الإنجليزية البريطانية بـ en_GB بدلاً من en-gb.

إنشاء ملفات ترجمة Laravel

بعد إعداد اللغات لتطبيقنا، يمكننا المتابعة لترجمة رسالة الترحيب الافتراضية.

لنبدأ بإنشاء ملفات توطين جديدة بصيغة JSON داخل مجلد resources/lang. أولاً، سننشئ ملف resources/lang/it.json ونملؤه بالترجمات المناسبة.

				
					{
  "Welcome to Linguise website!": "Benvenuti nel sito web di Linguise!"
}

				
			

بعد ذلك، أضف ملف resources/lang/fr.json.

				
					{
 "Welcome to Linguise website!": "Bienvenue sur le site de Linguise"
}

				
			

كما ترى، نحن نشير باستمرار إلى الرسالة الافتراضية من ملف welcome.blade.php ({{ __(‘مرحبًا بك في موقع Linguise !’) }}). لا حاجة لإنشاء ملف en.json، لأن Laravel يتعرف تلقائيًا على أن الرسائل الافتراضية باللغة الإنجليزية.

إعداد مبدّل اللغة في تطبيق Laravel متعدد اللغات

أشخاص يتفاعلون مع واجهة بريد إلكتروني كبيرة.

علاوة على ذلك، لم يتم إعداد Laravel بعد لتجاوز اللغة المحلية، لذا في الوقت الحالي، سنتعامل مع الترجمة مباشرة داخل المسار. قم بتعديل مسار الترحيب الافتراضي داخل ملف routes/web.php بهذا الشكل.

				
					Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale) && in_array($locale, config('app.available_locales'))) {
        app()->setLocale($locale);
    }
    
    return view('welcome');
});
				
			

في هذه الحالة، نلتقط معامل GET اختياريًا للغة ونضبط اللغة الحالية بناءً عليه (إذا كانت اللغة المطلوبة مدعومة).

الآن، يمكنك زيارة موقعك الإلكتروني وتضمين أي من اللغات المدعومة كأول جزء في الرابط. على سبيل المثال، الانتقال إلى localhost/it أو localhost/fr سيعرض المحتوى المترجم. إذا لم تحدد لغة معينة أو اخترت لغة غير مدعومة، فسيتم تعيين Laravel افتراضيًا إلى الإنجليزية (en).

برمجية وسيطة لتوطين Laravel

قد لا يكون تضمين اللغة في كل عنوان URL أمرًا مثاليًا وقد يعطّل الجاذبية البصرية للموقع. ولمعالجة ذلك، سنقوم بإعداد مبدّل لغة ونستخدم جلسة المستخدم لعرض المحتوى المترجم. يمكنك إنشاء برمجية وسيطة جديدة في ملف app/Http/Middleware/Localization.php، أو توليدها عن طريق تشغيل الأمر artisan make:middleware Localization.

ثم أضف الكود التالي بالداخل.

				
					<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class Localization
{
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle(Request $request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }
        return $next($request);
    }
}


				
			

سيوجّه هذا الوسيط Laravel لاستخدام الموقع الذي اختاره المستخدم إذا كان هذا الخيار موجودًا في الجلسة.

بما أننا نحتاج إلى تشغيل العملية عند كل طلب، أضِفها إلى حزمة الوسيطات الافتراضية في app/Http/Kernel.php لمجموعة وسيطات الويب.

				
					/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
  'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \App\Http\Middleware\Localization::class, // <--- add this
],


				
			

تعديل المسارات

بعد ذلك، حدّد مسارًا لتغيير اللغة في ملف routes/web.php. نحن نستخدم مسار إغلاق هنا، ولكن يمكنك وضع نفس الكود داخل وحدة تحكم إذا كنت تفضل ذلك.

				
					Route::get('language/{locale}', function ($locale) {
   app()->setLocale($locale);
   session()->put('locale', $locale);
   return redirect()->back();
});

				
			

بالإضافة إلى ذلك، قم بإزالة تبديل اللغة الذي تمت إضافته سابقًا إلى مسار الترحيب الافتراضي. يجب أن يبدو مسار الجذر الخاص بك الآن هكذا.

				
					Route::get('/', function () {
   return view('welcome');
});

				
			

بمجرد الانتهاء من ذلك، يمكن للمستخدم تبديل اللغة النشطة فقط من خلال زيارة localhost/language/{locale}. سيتم حفظ اللغة المحددة في الجلسة، وسيتم إعادة توجيه المستخدمين إلى صفحتهم السابقة (كما تتم معالجته بواسطة برمجية Localization الوسيطة). 

لاختبار ذلك، انتقل إلى localhost/language/it (بافتراض أن ملف تعريف ارتباط الجلسة نشط في متصفحك)، ويجب أن ترى المحتوى المترجم. يمكنك التنقل في الموقع أو تحديث الصفحة، وستظل اللغة المختارة سارية.

تنفيذ مبدّل اللغة

الآن، نحتاج إلى تزويد المستخدم بخيار قابل للنقر لتغيير مبدّل اللغة Laravel ويب بدلاً من مطالبتهم بإدخال رموز اللغة في عنوان URL يدويًا. لتحقيق ذلك، أنشئ مبدّل لغة بسيط. أضف ملفًا جديدًا في resources/views/partials/language_switcher.blade.php وأدرج الكود التالي.

				
					<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
    @foreach($available_locales as $locale_name => $available_locale)
        @if($available_locale === $current_locale)
            <span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
        @else
            <a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
                <span>{{ $locale_name }}</span>
            </a>
        @endif
    @endforeach
</div>


				
			

لتضمين مبدّل اللغة الذي تم إنشاؤه حديثًا في عرض "welcome"، ما عليك سوى إضافة السطر التالي إلى ملف welcome.blade.php في المكان الذي تريد أن يظهر فيه المبدّل.

				
					<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            @include('partials/language_switcher')

            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                {{ __('Welcome to our website!') }}
            </div>
        </div>
    </div>
</body>


				
			

افتح ملف app/Providers/AppServiceProvider.php وأضف الكود التالي في طريقة boot() لمشاركة اللغة الحالية مع جميع العروض عند استخدام مبدل اللغة

				
					* Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    view()->composer('partials.language_switcher', function ($view) {
        $view->with('current_locale', app()->getLocale());
        $view->with('available_locales', config('app.available_locales'));
    });
}


				
			

ميزات الترجمة المتقدمة في Laravel PHP

رسم توضيحي لأشخاص يعملون على مشروع. فريق يتعاون.

في هذه المناقشة، سنتناول بعد ذلك مكونات التوطين الأخرى، وهي التاريخ والأرقام والعملة. إليك الخطوات.

التواريخ المترجمة في Laravel

يُعد التعامل مع التواريخ والأوقات أمرًا بالغ الأهمية في عملية التوطين. يستخدم Laravel مكتبة Carbon لإدارة التواريخ والأوقات. إليك كيفية استخدام Carbon لعرض تاريخ مُوطَّن.

				
					<?php
Route::get('/', function () {
    $today = \Carbon\Carbon::now()
        ->settings(
            [
                'locale' => app()->getLocale(),
            ]
        );

    // LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
    $dateMessage = $today->isoFormat('dddd, LL');

    return view('welcome', [
        'date_message' => $dateMessage
    ]);
});


				
			

يضبط هذا الكود إعدادات اللغة المحلية لـ Carbon بناءً على اللغة المحلية الحالية للتطبيق ويُنسّق التاريخ وفقًا لذلك.

لعرض التاريخ المترجم في العرض:

				
					{{ __('Welcome to our website, :Name', ['name' => ‘Johb’]) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}


				
			

تنسيق الأرقام والعملات

تتبع الدول المختلفة طرقًا متنوعة لتنسيق الأرقام. على سبيل المثال.

  • فرنسا → 123 123,12
  • ألمانيا → 123.123,12
  • اليابان → 123,123

لاستيعاب هذه الاختلافات في تطبيق Laravel الخاص بك، يمكنك استخدام NumberFormatter.

				
					<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);

$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
				
			

يمكنك أيضًا كتابة الأرقام بالحروف في لغة معينة.

				
					<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);

$num2 = NumberFormatter::create('it', NumberFormatter::SPELLOUT);
				
			

إليك العملات. بالنسبة للإعداد المحلي الفرنسي (`fr`)، ستُعرض العملة باليورو (€)، بينما بالنسبة للإعداد المحلي الأمريكي (`en_US`)، ستُعرض بالدولار الأمريكي ($).

				
					<?php
$currency1 = NumberFormatter::create('it', NumberFormatter::CURRENCY);

$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
				
			
تجاوز حواجز اللغة
قل وداعًا للحواجز اللغوية ومرحبًا بالنمو اللامحدود! جرب خدمة الترجمة الآلية لدينا اليوم.

حل بديل لـ Laravel localization مع Linguise

فريق يعمل معًا على مشروع رقمي. يحيط بهم العديد من الأدوات والرموز الرقمية.

بعد فهم خطوات توطين Laravel كما هو موضح في المقال، تتضمن هذه العملية العديد من الخطوات التي تتطلب من المستخدمين فهم كود برنامج Laravel بعمق.

قد يجعل هذا الأمر صعبًا بالتأكيد على المستخدمين المبتدئين الذين يرغبون في توطين تطبيقاتهم. لذلك، هناك حاجة إلى حل أكثر ابتكارًا قادر على الترجمة السريعة، ويدعم التوطين، ولا يتطلب سوى بضع خطوات بسيطة للتنفيذ.

أحد الحلول الواعدة هو Linguise. يقدم Linguise نهجًا أسهل وأكثر كفاءة لترجمة Laravel دون الحاجة إلى معرفة برمجية متعمقة. تشمل الميزات الرئيسية لـ Linguise .

  • سهولة التكامل مع Laravel
  • خصّص مبدّل اللغة دون كتابة كود
  • ترجمة الصورة
  • محرر مباشر لتخصيص الترجمات وفقًا للسياق المحلي
  • ترجمة ديناميكية للمحتوى المُنشأ ديناميكيًا
  • تحسين محركات البحث (SEO) للإصدارات متعددة اللغات

يمكن أيضًا تنفيذ خطوات تثبيت Linguise على مواقع Laravel بسهولة. إليك شرحًا موجزًا.

  1. أنشئ حساب Linguise (استخدم النسخة التجريبية المجانية لمدة 30 يومًا مجانًا)
  2. سجّل نطاق الويب Laravel الخاص بك وأدخل بعض المعلومات. ستحصل على مفتاح API.
  3. قم بتحميل وتوصيل نص برمجي للترجمة Linguise بمجلد Laravel الذي حصلت عليه.
  4. قم بإعداد روابط URL للغات في ملف htaccess.
  5. أدرج نص مبدّل اللغة في رأس HTML الخاص بك.
  6. خصّص مبدّل اللغة حسب الحاجة
  7. سيظهر مبدّل اللغة على موقع Laravel الإلكتروني، ويمكن ترجمة المحتوى تلقائيًا.

كيف؟ مع Linguise، ما عليك سوى التسجيل والتفعيل، وسيظهر مبدل اللغة. بعد ذلك، لك الحرية في الترجمة المحلية، على سبيل المثال، من خلال المحرر المباشر، وترجمة الوسائط والصور، إلخ.

هل أنت مستعد لاستكشاف أسواق جديدة؟ جرّب خدمة الترجمة الآلية لدينا مجانًا مع تجربة مجانية لمدة شهر دون مخاطر. لا حاجة لبطاقة ائتمان!

الخلاصة

تُعد ترجمة Laravel ميزة قوية تتيح للمطورين إنشاء مواقع وتطبيقات متعددة اللغات. وكما رأينا، تتضمن عملية ترجمة Laravel المدمجة خطوات متعددة وتتطلب فهمًا جيدًا لإطار العمل. قد يكون الأمر صعبًا على المبتدئين أو أولئك الذين يبحثون عن حل أسرع.

أدوات مثل Linguise توفر بديلاً مبتكراً لمن يبحثون عن نهج أكثر سلاسة. تقدم هذه الحلول قدرات ترجمة سريعة، وتكامل سهل، وميزات سهلة الاستخدام مثل مبدلات اللغة القابلة للتخصيص وترجمة الصور. الآن، أنشئ حسابك على Linguise واستمتع بميزتنا لتوطين Laravel!

قد تكون مهتمًا أيضًا بالقراءة

لا تفوّت الفرصة!
Subscribe to our Newsletter

احصل على أخبار حول الترجمة الآلية للمواقع، وتحسين محركات البحث الدولية، والمزيد!

Invalid email address
جرّبه. رسالة واحدة شهريًا، ويمكنك إلغاء الاشتراك في أي وقت.

Don't leave without sharing your email!

لا يمكننا ضمان فوزك باليانصيب، لكن يمكننا أن نعدك بأخبار معلوماتية مثيرة للاهتمام حول الترجمة وخصومات عرضية.

لا تفوّت الفرصة!
Invalid email address