آموزش لاراول 7 برای مبتدیان - Localization

  • Introduction
    • پیکربندی Locale
  • تعریف Translation Strings
    • استفاده از Short Key ها
    • استفاده از Translation String ها به عنوان Keys
  • بازیابی Translation Strings
    • جایگزینی پارامترها در Translation Strings
    • Pluralization
  • Overriding Package Language Files

مقدمه

در این آموزش برخی از مباحث مهم در زمینه localization را بررسی می کنیم. ویژگی های محلی سازی لاراول یا Laravel's localization راهی مناسب برای بازیابی رشته ها به زبان های مختلف فراهم می کند ، به شما امکان می دهد به راحتی از چندین زبان درون برنامه خود پشتیبانی کنید. Language string ها در فایلهای موجود در دایرکتوری resources/lang ذخیره می شوند. در این دایرکتوری باید زیر شاخه ای برای هر زبان پشتیبانی شده توسط برنامه وجود داشته باشد:


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

تمام فایل های language آرایه ای از key strings برمیگردانند. به عنوان مثال:

 'Welcome to our application'
];

برای زبانهایی که از نظر کشور متفاوت هستند ، باید فهرست های زبان را مطابق با ISO 15897 نامگذاری کنید. به عنوان مثال ، "en_GB" باید برای انگلیسی بریتانیایی استفاده شود نه "en-gb".

پیکربندی Locale

در این بخش از مقاله آموزش مفاهیم لاراول، به پیکربندی locale می پردازیم. زبان پیش فرض برنامه شما در فایل پیکربندی config / app.php ذخیره شده است. شما می توانید این مقدار را متناسب با نیازهای برنامه خود تغییر دهید. همچنین می توانید زبان فعال را در زمان اجرا با استفاده از متد setLocale در facade برنامه تغییر دهید:


Route::get('welcome/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'es', 'fr'])) {
        abort(400);
    }

    App::setLocale($locale);
    //
});

شما می توانید یک "fallback language" را پیکربندی کنید ، که وقتی active شامل یک رشته ترجمه داده شده نباشد ، استفاده می شود. مانند زبان پیش فرض ، fallback language نیز در فایل پیکربندی config / app.php تنطیم می شود:

'fallback_locale' => 'en',

تعیین Locale جاری

شما می توانید از متد getLocale و isLocale در نمای facade استفاده کنید برای تعیین locale جاری و یا بررسی مقدار داده شده به آن :


$locale = App::getLocale();

if (App::isLocale('en')) {
    //
}

تعریف Translation Strings

استفاده از Short Key ها

به طور معمول ، translation strings در فایل های دایرکتوری resources/lang ذخیره می شوند. در این دایرکتوری باید زیر شاخه ای برای هر زبان پشتیبانی شده توسط برنامه وجود داشته باشد:


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

تمام فایل های language آرایه ای از key strings برمیگردانند. به عنوان مثال:


 'Welcome to our application'
];

استفاده از Translation String ها به عنوان Keys

برای برنامه هایی با مقررات ترجمه، تعریف هر رشته با "short key" هنگام مراجعه به آنها در view ، می تواندگیج کننده شود. به همین دلیل ، لاراول پشتیبانی از تعریف translation strings را با استفاده از default" translation" رشته به عنوان key نیز فراهم می کند.

فایل های translation که از translation string ها به عنوان key استفاده می کنند به عنوان فایل های JSON در دایرکتوری resources/lang ذخیره می شوند. به عنوان مثال ، اگر برنامه شما ترجمه اسپانیایی دارد ، باید یک فایل resources/lang/es.json ایجاد کنید:


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

بازیابی Translation Strings

با استفاده از تابع  __ helper می توانید خطوط را از فایل های language بازیابی کنید. متد__ فایل و key را از translation string به عنوان اولین آرگومان خود قبول می کند. به عنوان مثال ، بیایید welcome translation string را از فایل resources/lang/messages.php بازیابی کنیم:


echo __('messages.welcome');

echo __('I love programming.');

اگر از انجین Blade templating استفاده می کنید، می توانید از {{ }} syntax برای echo و یا دستور @lang استفاده کنید:


{{ __('messages.welcome') }}

@lang('messages.welcome')

اگر translation string مشخص شده وجود نداشته باشد ، تابع __ translation string key را برمی گرداند. بنابراین ، با استفاده از مثال بالا ، تابع __ پیام های welcome را برمی گرداند.

دستور @lang هیچ خروجی را escape نمی کند. شما در هنگام استفاده از این دستور مسئول escape از خروجی خود هستید.

جایگزینی پارامترها در Translation Strings

در صورت تمایل ، می توانید placeholder هایی را در translation string خود تعریف کنید. تمام placeholder ها با پیشوند : هستند. به عنوان مثال ، میتوانید یک پیام خوش آمدگویی با placeholder تعریف کنید:


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

برای جایگزینی placeholder ها هنگام بازیابی translation string ، آرایه ای از placeholder ها را به عنوان آرگومان دوم به تابع __ ارسال کنید:


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

اگر placeholder شما شامل تمام حروف بزرگ شود یا فقط حرف اول آن را بزرگ باشد ، مقدار translate بر این اساس بزرگ می شود:


'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

Pluralization

Pluralization یک مسئله پیچیده است ، زیرا زبانهای مختلف قوانین پیچیده متنوعی برای Pluralization دارند. با استفاده از کارکتر"pipe" یا "|" می توانید حالت های مجزا و جمع یک رشته را تشخیص دهید:


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

حتی می توانید قوانین pluralization پیچیده تری ایجاد کنید که translation string ها را برای چندین رنج عددی مشخص کند:


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

پس از تعریف یک translation string که دارای گزینه های pluralization است ، می توانید از تابع trans_choice برای بازیابی خط که "count" می دهد استفاده کنید. در این مثال ، از آنجا که تعداد از یک بیشتر است ، شکل جمع translation string برگردانده می شود:


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

شما همچنین می توانید ویژگی های placeholder را در رشته هایpluralization تعریف کنید. این placeholder ها می توانند با ارسال یک آرایه به عنوان آرگومان سوم به تابع trans_choice جایگزین شوند:


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

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

اگر می خواهید مقدار عددی را که به تابع trans_choice منتقل شده است نمایش دهید ، می توانید از: count placeholder استفاده کنید:


'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',

Overriding Package Language Files

برخی از پکیج ها می توانند با فایل های زبان خاص خود ارسال شوند. به جای تغییر دادن فایل های اصلی پکیج، می توانید با قرار دادن فایل ها در دایرکتوری {resources/lang/vendor/{package}/{locale آنها را override کنید.

 به عنوان مثال ، اگر English translation strings را در messages.php برای پکیجی به نام skyrim/hearthfire، نیاز دارید override کنید، باید یک language فایل را در این آدرس resources/lang/vendor/hearthfire/en/messages.php قرار دهید. در این فایل ، شما باید translation string هایی را که می خواهید override کنید ، تعریف کنید. هر translation string را که override نمی کنید ، همچنان از فایل های original language پکیج لود می شود.

امیدوارم این مقاله آموزشی در بخش آموزش مفاهیم laravel برای شما مفید واقع شده باشد.