الفرق بين المراجعتين لصفحة: «Laravel/localization»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:التوطين في Laravel}}</noinclude>
<noinclude>{{DISPLAYTITLE:التوطين في Laravel}}</noinclude>
=== مقدمة ===
== مقدمة ==
تُقدِّم خاصيّة التوطين في Laravel طريقةً مريحةً وسهلةً لإعطاء ترجمات للكلمة في عدّة لغات، ممّا يسمح للتطبيق بدعم لغات متعدّدة. تُحفظ سلاسل المحارف الخاصّة بكل لغة يدعمها التطبيق في المجلد resources/lang. يحتوي هذا الملف على مجلدٍ فرعي لكل للغة يدعمها التطبيق:<syntaxhighlight>
تُقدِّم خاصيّة التوطين في Laravel طريقةً مريحةً وسهلةً لإعطاء ترجمات للكلمة في عدّة لغات، ممّا يسمح للتطبيق بدعم لغات متعدّدة. تُحفظ سلاسل المحارف الخاصّة بكل لغة يدعمها التطبيق في المجلد resources/lang. يحتوي هذا الملف على مجلدٍ فرعي لكل للغة يدعمها التطبيق:<syntaxhighlight>
/resources
/resources
سطر 15: سطر 15:
];
];
</syntaxhighlight>
</syntaxhighlight>
ضبط المحليّة


=== ضبط المحليّة ===
تُحفظ اللغة الأولى للتطبيق في ملف الضبط config/app.php. يمكن بالطبع تغيير اللغة الأولى لتتناسب مع ما يحتاجه التطبيق. يمكن أيضا تغيير اللغة النشيطة للتطبيق في زمن التشغيل باستعمال التابع setLocale من الواجهة الساكنة App.<syntaxhighlight lang="php">
تُحفظ اللغة الأولى للتطبيق في ملف الضبط config/app.php. يمكن بالطبع تغيير اللغة الأولى لتتناسب مع ما يحتاجه التطبيق. يمكن أيضا تغيير اللغة النشيطة للتطبيق في زمن التشغيل باستعمال التابع setLocale من الواجهة الساكنة App.<syntaxhighlight lang="php">
Route::get('welcome/{locale}', function ($locale) {
Route::get('welcome/{locale}', function ($locale) {
سطر 22: سطر 22:
  //
  //
});
});
</syntaxhighlight>تحديد المحليّة الحالية
</syntaxhighlight>


=== تحديد المحليّة الحالية ===
يُستعمَل التابعان getLocale و isLocale من الواجهة App لتحديد ما هي المحليّة (locale) أو التحقق أنها تساوي قيمةً معطاة:<syntaxhighlight lang="php">
يُستعمَل التابعان getLocale و isLocale من الواجهة App لتحديد ما هي المحليّة (locale) أو التحقق أنها تساوي قيمةً معطاة:<syntaxhighlight lang="php">
$locale = App::getLocale();
$locale = App::getLocale();
سطر 30: سطر 31:
}
}
</syntaxhighlight>
</syntaxhighlight>
تعريف سلاسل الترجمة


استعمال مفاتيح قصيرة
== تعريف سلاسل الترجمة ==


=== استعمال مفاتيح قصيرة ===
في العادة، تُحفظ سلاسل الترجمة في ملفّات في المجلد resources/lang. وفيه مجلدٌ فرعي لكل لغة مدعومة من التطبيق:<syntaxhighlight lang="php">
في العادة، تُحفظ سلاسل الترجمة في ملفّات في المجلد resources/lang. وفيه مجلدٌ فرعي لكل لغة مدعومة من التطبيق:<syntaxhighlight lang="php">
/resources
/resources
سطر 50: سطر 51:
];
];
</syntaxhighlight>
</syntaxhighlight>
استعمال سلاسل الترجمة كمفاتيح


=== استعمال سلاسل الترجمة كمفاتيح ===
إنّ استعمال مفاتيح قصيرة في تطبيقات تتطلب الكثير من الترجمة يصبح مربكًا عند استعمالها في الواجهات (views). لهذا السبب يوفّر Laravel دعمًا لتعريف سلاسل ترجمة باستعمال سلسلة الترجمة الأصلية كمفتاح.
إنّ استعمال مفاتيح قصيرة في تطبيقات تتطلب الكثير من الترجمة يصبح مربكًا عند استعمالها في الواجهات (views). لهذا السبب يوفّر Laravel دعمًا لتعريف سلاسل ترجمة باستعمال سلسلة الترجمة الأصلية كمفتاح.


سطر 62: سطر 63:
</syntaxhighlight>
</syntaxhighlight>


استرجاع سلاسل الترجمة
== استرجاع سلاسل الترجمة ==
 
تُسترجع سطور من ملفات اللغة باستعمال دالة المساعدة __ .تقبل الدالة __ اسم الملف و المفتاح كمعامل أول. على سبيل المثال، لنبحث عن ترجمة السلسلة welcome في ملف اللغة <syntaxhighlight lang="php">
تُسترجع سطور من ملفات اللغة باستعمال دالة المساعدة __ .تقبل الدالة __ اسم الملف و المفتاح كمعامل أول. على سبيل المثال، لنبحث عن ترجمة السلسلة welcome في ملف اللغة <syntaxhighlight lang="php">
resources/lang/messages.php
resources/lang/messages.php
سطر 76: سطر 76:
إن كانت سلسلة الترجمة غير موجودة، فستعيد الدالة __ مفتاح الترجمة. لذا في المثال السابق، إن كانت سلسلة الترجمة غير موجودة،فستعيد الدالة __ النتيجة messages.welcome.
إن كانت سلسلة الترجمة غير موجودة، فستعيد الدالة __ مفتاح الترجمة. لذا في المثال السابق، إن كانت سلسلة الترجمة غير موجودة،فستعيد الدالة __ النتيجة messages.welcome.


تعويض المعاملات في سلاسل الترجمة
=== تعويض المعاملات في سلاسل الترجمة ===
 
إن أردت، بإمكانك تعريف نص بديل (place-holder) في سلسلة الترجمة. يُسبق كل نص بديل بالرمز :. مثلًا يمكن تعريف نص بديل لاسم في رسالة الترحيب:<syntaxhighlight lang="php">
إن أردت، بإمكانك تعريف نص بديل (place-holder) في سلسلة الترجمة. يُسبق كل نص بديل بالرمز :. مثلًا يمكن تعريف نص بديل لاسم في رسالة الترحيب:<syntaxhighlight lang="php">
'welcome' => 'Welcome, :name',
'welcome' => 'Welcome, :name',
سطر 92: سطر 91:
</syntaxhighlight>
</syntaxhighlight>


الجمع
=== الجمع ===
 
الجمع مشكلة معقّدة إذ تملك كل لغة العديد من القواعد المعقّدة للقيام بالجمع. نُفرّق بين الصيغة الفردية و صيغة الجمع للسلسلة باستخدام رمز "خط عمودي":<syntaxhighlight lang="php">
الجمع مشكلة معقّدة إذ تملك كل لغة العديد من القواعد المعقّدة للقيام بالجمع. نُفرّق بين الصيغة الفردية و صيغة الجمع للسلسلة باستخدام رمز "خط عمودي":<syntaxhighlight lang="php">
'apples' => 'There is one apple|There are many apples',
'apples' => 'There is one apple|There are many apples',
سطر 112: سطر 110:
</syntaxhighlight>
</syntaxhighlight>


تجاوز حزم اللغات
== تجاوز حزم اللغات ==
 
قد تُشحن بعض الحزم بملفات لغاتها الخاصّة. بدل تغيير ملفات الحزمة لتعديل بعض هذه الترجمات، يمكن تجاوزها بصنع ملفات ترجمتك الخاصّة في الملف:<syntaxhighlight lang="php">
قد تُشحن بعض الحزم بملفات لغاتها الخاصّة. بدل تغيير ملفات الحزمة لتعديل بعض هذه الترجمات، يمكن تجاوزها بصنع ملفات ترجمتك الخاصّة في الملف:<syntaxhighlight lang="php">
resources/lang/vendor/{package}/{locale}
resources/lang/vendor/{package}/{locale}

مراجعة 13:21، 3 أغسطس 2018

مقدمة

تُقدِّم خاصيّة التوطين في Laravel طريقةً مريحةً وسهلةً لإعطاء ترجمات للكلمة في عدّة لغات، ممّا يسمح للتطبيق بدعم لغات متعدّدة. تُحفظ سلاسل المحارف الخاصّة بكل لغة يدعمها التطبيق في المجلد resources/lang. يحتوي هذا الملف على مجلدٍ فرعي لكل للغة يدعمها التطبيق:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

تتمثل القيمة المعادة لكل ملف لغة في مصفوفة لسلاسل المحارف مرفقةً بمفاتيح:

<?php

return [
    'welcome' => 'Welcome to our application'
];

ضبط المحليّة

تُحفظ اللغة الأولى للتطبيق في ملف الضبط config/app.php. يمكن بالطبع تغيير اللغة الأولى لتتناسب مع ما يحتاجه التطبيق. يمكن أيضا تغيير اللغة النشيطة للتطبيق في زمن التشغيل باستعمال التابع setLocale من الواجهة الساكنة App.

Route::get('welcome/{locale}', function ($locale) {
   App::setLocale($locale);
  //
});

تحديد المحليّة الحالية

يُستعمَل التابعان getLocale و isLocale من الواجهة App لتحديد ما هي المحليّة (locale) أو التحقق أنها تساوي قيمةً معطاة:

$locale = App::getLocale();
if (App::isLocale('en')) {
  //
}

تعريف سلاسل الترجمة

استعمال مفاتيح قصيرة

في العادة، تُحفظ سلاسل الترجمة في ملفّات في المجلد resources/lang. وفيه مجلدٌ فرعي لكل لغة مدعومة من التطبيق:

/resources
   /lang
       /en
           messages.php
       /es
           messages.php

تتمثل القيمة المعادة لكل ملف لغة في مصفوفة لسلاسل نصية مرفقةً بمفاتيح:

<?php
// resources/lang/en/messages.php
return 
   'welcome' => 'Welcome to our application'
];

استعمال سلاسل الترجمة كمفاتيح

إنّ استعمال مفاتيح قصيرة في تطبيقات تتطلب الكثير من الترجمة يصبح مربكًا عند استعمالها في الواجهات (views). لهذا السبب يوفّر Laravel دعمًا لتعريف سلاسل ترجمة باستعمال سلسلة الترجمة الأصلية كمفتاح.

تُحفظ ملفات الترجمة التي تستعمل سلاسل الترجمة كمفاتيح على شكل ملفّات JSON في المجلد resources/lang. مثلا، إن أردت ترجمة إسبانية يجب أن تصنع الملف resources/lang/es.json

{

   "I love programming.": "Me encanta programar."

}

استرجاع سلاسل الترجمة

تُسترجع سطور من ملفات اللغة باستعمال دالة المساعدة __ .تقبل الدالة __ اسم الملف و المفتاح كمعامل أول. على سبيل المثال، لنبحث عن ترجمة السلسلة welcome في ملف اللغة

resources/lang/messages.php

echo __('messages.welcome');

echo __('I love programming.');

بالطبع إن كنت تستعمل محرك القولبة Blade يمكنك استعمال {{ }} لعرض سلسلة الترجمة أو استعمال التعليمة ‎@lang:قالب:('messages.welcome')@lang('messages.welcome')

إن كانت سلسلة الترجمة غير موجودة، فستعيد الدالة __ مفتاح الترجمة. لذا في المثال السابق، إن كانت سلسلة الترجمة غير موجودة،فستعيد الدالة __ النتيجة messages.welcome.

تعويض المعاملات في سلاسل الترجمة

إن أردت، بإمكانك تعريف نص بديل (place-holder) في سلسلة الترجمة. يُسبق كل نص بديل بالرمز :. مثلًا يمكن تعريف نص بديل لاسم في رسالة الترحيب:

'welcome' => 'Welcome, :name',

لتعويض النص البديل عند عادة سلسلة الترجمة، أدخل مصفوفة للبدائل كمعامل ثاني للدالة __:

echo __('messages.welcome', ['name' => 'dayle']);

إن كان النص البديل مكتوبًا بحروف كبيرة، أو إن كان الحرف الأول فقط كبيرا فإن الصيغة المحوَّلة ستُكتب بنفس الطريقة:

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE

'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

الجمع

الجمع مشكلة معقّدة إذ تملك كل لغة العديد من القواعد المعقّدة للقيام بالجمع. نُفرّق بين الصيغة الفردية و صيغة الجمع للسلسلة باستخدام رمز "خط عمودي":

'apples' => 'There is one apple|There are many apples',

يمكن أيضا تعريف صيغ جمع أكثر تعقيدًا بتعريف صيغة جمع لكل نطاق أو مجال:

'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',

بعد تعريف سلسلة ترجمة بعدّة صيغ جمع، تُستعمل الدالة trans_choice لاسترجاع سطر الترجمة بعدد معيّن. في المثال التالي، لأن العدد أكبر من واحد، صيغة الجمع هي التي تُعاد:

echo trans_choice('messages.apples', 10);

يمكن أيضًا تعريف نص بديل لسلاسل ترجمة في صيغة الجمع. تعوَّض النصوص البديلة تلك بتمرير مصفوفة كمعامل ثالث للدالة trans_choice:

'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago',

echo trans_choice('time.minutes_ago', 5, ['value' => 5]);

تجاوز حزم اللغات

قد تُشحن بعض الحزم بملفات لغاتها الخاصّة. بدل تغيير ملفات الحزمة لتعديل بعض هذه الترجمات، يمكن تجاوزها بصنع ملفات ترجمتك الخاصّة في الملف:

resources/lang/vendor/{package}/{locale}

على سبيل المثال، إن أردت تجاوز سلاسل الترجمة الإنجليزية في messages.php من الحزمة skyrim/hearthfire، يجب عليك وضع ملفات الترجمة الجديدة في:

resources/lang/vendor/hearthfire/en/messages.php.

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

مصادر

صفحة Localization في توثيق Laravel الرسمي.