اذهب إلى المحتوى
  • 0

كيف يتم تطوير موقع Laravel باللغتين : العربية والإنجليزية ؟

عبد الواحد الحدادي

السؤال

مرحبا إخواني وأخواتي؛

للنِقاش من فضلكم؛

  • كيف يتم تطوير Laravel باللغة العربية والإنجليزية؟
  • كيف يتم قلب اتجاهات القالب في حال كانت اللغة العربية أو إنجليزية ؟ 
  • هل من الواجب تصميم قالب بالإنجليزية و آخر بالعربية ؟ 

| تحياتي لكم جميعاً .

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

مرحبًا @عبد الواحد الحدادي

تطوير المواقع متعددة اللغات أصبح أسهل عن ذي قبل خصوصًا مع زيادة الدعم للغات RTLـ وسأخذ بوتستراب 5 على سبيل المثال، فقد أصبح يدعم اللغة العربية بكفأة الآن، لذلك كل ما ستحتاج تغيره هو فقط رابط ملف css الخاص ببوتستراب 

<!-- LTR languages -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- RTL language -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.rtl.min.css" rel="stylesheet">

مع إضافة الخاصية dir واللغة في وسم html

<html lang="ar" dir="rtl">

وستجد أن الواجهة تحولت بالكامل إلى الإتجاه الصحيح.

إن كنت تستخدم الإصدار 4 من بوتستراب فيمكنك الإطلاع على نسخة RTL من هنا.

هذا بالنسبة لواجهة المستخدم أم بالنسبة إلى الـ Backend ففي Laravel توجد مكتبة mcamara التي ستسهل عليك عملية تطوير موقع متتعد اللغات.

عند تثبيت هذه المكتبة بشكل صحيح، سيتم وضع اللغة في أول كل رابط داخل الموقع بالشكل التالي:

// صفحة التواصل باللغة الإنجليزية
http://example.com/en/contact

// صفحة التواصل باللغة العربية
http://example.com/ar/contact

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

https://example.com/

فسيتم توجيهه تلقائيُا إلى الرابط التالي علي سبيل المثال:

https://example.com/ar

ويمكن أيضًا تغير النصوص الخاصة بالصفحة حسب اللغة من خلال ملفات lang التي يقدمها laravel، ستجد في المجلد resources/lang مجلد بإسم en خاص باللغة الإنجليزية ويمكنك أن تصنع مثل هذا المجلد لأي لغة تريد بنفس الطريقة (مجلد ar في حالة اللغة العربية) وداخل هذا المجلد توجد ملفات الترجمة نفسها، كل ملف من هذه الملفات عبارة عن مصفوفة تحتوي على مفتاح وقيمة، كملف auth على سبيل المثال:

<?php

return [
    'failed'   => 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.',
    'password' => 'كلمة المرور المستخدمة غير صحيحة.',
    'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.',
];

ولكي تظهر المحتوى الخاص بلغة معينه عليك إستخدام دالة الترجمة __()  وتمرير اسم الملف والمفتاح (بينهما نقطة dot فقط) كالتالي:

<!--           filename.key       -->
<a href="#">{{ __('auth.failed') }}</a>

بهذه الطريقة ستظهر جملة 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.' في الصفحة العربية وجملة 'These credentials do not match our records.' في الصفحة الإنجليزية.

 

بتاريخ 33 دقائق مضت قال عبد الواحد الحدادي:
  • هل من الواجب تصميم قالب بالإنجليزية و آخر بالعربية ؟ 

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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

يمكنك في مسار المجلد الرئيسي ثم تختار مجلد resources ومن ثم مجلد lang ستجد في هذا المسار مجلد en وبداخله ملفات مثل: 

  1. auth.php
  2. pagination.php
  3. passwords.php
  4. validation.php

لو قمت بالدخول لهذه الملفات ستجد أنه يوجد في كل ملف array تحتوي على key, value 

بحيث key مفتاح الذي سيعبر عن القيمة value في اللغة فمثلاُ: 

<?php

return [
    'failed' => 'These credentials do not match our records.',
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
    'users' => 'users',
];
?>

بحيث المفتاح failed قيمته وهي These credentials do not match our records. هذا للغة الأنجليزية, فماذا لو أردنا أن نعمل لغة عربية للموقع بكل سهولة سنذهب إلى مجلد lang ونقوم بإنشاء مجلد جديد باسم ar ونضع به الملفات المذكورة كما في مجلد en للغة الأنجليزية مع الإبقاء على المفاتيح و تغيير القيمة, فمثلاً

<?php

return [
    'failed' => 'أوراق الاعتماد هذه لا تتطابق مع سجلاتنا.',
    'throttle' => 'محاولات تسجيل دخول كثيرة جدًا. يرجى المحاولة مرة أخرى في: ثواني.',
    'users' => 'الأعضاء',
];

هكذا قمنا بإنشاء ملف auth.php ولكن بداخل مجلد ar في مجلد lang. 

ولكن لم ننتهي بعد الأن يجب علينا استخدام قيمة المفاتيح keys لأنها متشابهة في كل لغة مع الأختلاف بقيمة values فمثلا لو أردنا جلب المفتاح failed, 

سنقوم بالتالي: 

<p>{{ trans('auth.failed') }}</p>

لو لاحظت جيداً اننا قمنا بكتابة الأقواس المعكوفة ثم دالة trans لجلب وطباعة القيمة حسب اللغة, 

دعنا نفصل أكثر هذا auth يعني اسم الملف , failed يعني المفتاح failed في ملف auth.php حسب كل لغة.

ولكن الأن يجب علينا تحديد لغة الموقع الرئيسية من خلال ملف config.php داخل مجلد config في المجلد الرئيسي للمشروع عن طريق تغيير 

'locale' => 'ar',

او 

'locale' => 'en',

ويمكنك من وضع عنصر select باستخدام html لتغيير اللغة

<select class="form-control changeLang">
  <option value="en" {{ session()->get('locale') == 'en' ? 'selected' : '' }}>English</option>
  <option value="ar" {{ session()->get('locale') == 'ar' ? 'selected' : '' }}>Arabic</option>
</select>

وأيضا سنضع كود جافا سكربت للقيام بتغيير اللغة حسب route نحدده و نعمل تحديث للصفحة حسب اللغة المختارة مثل

<script type="text/javascript">
  
  var url = "{{ route('changeLang') }}";

  $(".changeLang").change(function(){
    window.location.href = url + "?lang="+ $(this).val();
  });

</script>

سيكون route في ملف web.php 

Route::get('lang/change', 'IndexController@change')->name('changeLang');

مع وضع في دالة index في ملف IndexController.

public function index(Request $request)
{
	App::setLocale($request->lang);
	session()->put('locale', $request->lang);

	return redirect()->back();
}
اقتباس

كيف يتم قلب اتجاهات القالب في حال كانت اللغة العربية أو إنجليزية ؟ 

يتم قلب ذلك باستخدام html وتغيير اتجاه الصفحة عن طريق 

<!DOCTYPE>
<html lang="ar" dir="rtl">
<html lang="en" dir="ltr">

بحيث rtl - right to left,  ltr - left to right.

أو يمكن استخدام مكتبة بوتستراب.

اقتباس

هل من الواجب تصميم قالب بالإنجليزية و آخر بالعربية ؟ 

لا, الأغلب نفس التصميم مع قلب الأتجاهات إلا إذا كان الموقع يختلف بالواجهات من اللغة العربية إلى اللغة الأنجليزية.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مرحباً عبد الواحد،

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

<?php

Route::group(['prefix' => LaravelLocalization::setLocale()], function()
{
  
  // وضع كافة المسارات التي تحتوي على تعدد لغات هنا
  // على سبيل المثال
  // صفحة إتصل بنا
  Route::get('/contact', function()
  {
   		return view('contact');
  });

});

فإن أردنا التوجه لصفحة إتصل بنا الخاصة باللغة الإنجليزية نذهب الى الرابط:

http://url-to-website/en/contact

أما إن أردنا التوجه لصفحة إتصل بنا باللغة العربية نذهب الى الرابط:

http://url-to-website/ar/contact

أما عند الذهاب إلى الرابط:

 

http://url-to-website/contact

فسيتم عرض الصفحة باللغة الإفتراضية للموقع.

يُمكن عمل publish لملف إعدادات الحزمة لتحديد اللغات التي نريدها في موقعنا.

في صفحات العرض نستعمل دوال الترجمة التي يُوفرها الإطار ك ()trans او ()__ أو التوجيه الخاص بُمحرك القوالب blade 

@lang()

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

أما بخصوص تغير الإتجاه فيُمكن إستخدام خاصية dir في لغة html لتحديد الإتجاه حسب اللغة المُخزنة في الجلسة (يُمكن في أي وقت جلب هذه القيمة عن طريق بعض توابع اللغة):

LaravelLocalization::getCurrentLocale() // جلب مفتاح اللغة الحالي
LaravelLocalization::getCurrentLocaleDirection() // جلب الإتجاه الحالي rtl or ltr
LaravelLocalization::getSupportedLocales() // جلب مصفوفة تضم كل اللغات المدعومة في التطبيق

بإستخدام هذه الدوال يُمكننا تحميل ملف التنسيقات الموافق إن وُجد لكل إتجاه ملف تنسيقات خاص به

@if(LaravelLocalization::getCurrentLocaleDirection() == 'rtl')
	<!-- عمل بعض التنسيقات التي نريدها في الإتجاه من اليمين إلى اليسار -->
	<!-- يُمكن تضمين ملف لتنسيقات هذا الإتجاه -->
@else
	<!-- الإتجاه المُعاكس -->
@endif

أما بخصوص المُحتوى الغير ثابت أي الذي يأتي من قاعدة البيانات فيُمكنك إستخدام هذه الحزمة: laravel-translatable بحيث لكل نموذج و جدول به أعمدة نريد تخزينها بعدة لغات نُنشئ نموذج آخر و جدول بيانات آخر نضع فيه الأعمدة التي به ترجمة بعدة لغات على سبيل المثال نريد حفظ مقالات بعدة لغات سيكون لدينا نموذج Post و نموذج آخر PostTranslation و كل منهما مربوط مع جدول في قاعدة البيانات ستجد في التوثيق الرسمي للحزمة إضغط هنا للذهاب للتوثيق الرسمي و ستجد أمثلة بالشرح.

بالتوفيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...