بومی سازی
معرفی
به طور پیش فرض، اسکلت برنامه لاراول شامل
lang
دایرکتوری نمی شود. اگر می خواهید فایل های زبان لاراول را شخصی سازی کنید، می توانید آنها را از طریقlang:publish
دستور Artisan منتشر کنید.
ویژگیهای محلیسازی لاراول راه مناسبی برای بازیابی رشتهها در زبانهای مختلف فراهم میکند و به شما این امکان را میدهد تا به راحتی از چندین زبان در برنامه خود پشتیبانی کنید.
لاراول دو راه برای مدیریت رشته های ترجمه ارائه می دهد. اول، رشته های زبان ممکن است در فایل های داخل فهرست برنامه ذخیره شوند
lang
. در این دایرکتوری، ممکن است برای هر زبانی که برنامه پشتیبانی می کند، زیر شاخه هایی وجود داشته باشد. این رویکردی است که لاراول برای مدیریت رشته های ترجمه برای ویژگی های داخلی لاراول مانند پیام های خطای اعتبارسنجی استفاده می کند:
/lang /en messages.php /es messages.php
یا ممکن است رشته های ترجمه در فایل های JSON که در
lang
دایرکتوری قرار می گیرند، تعریف شوند. هنگام اتخاذ این رویکرد، هر زبانی که توسط برنامه شما پشتیبانی می شود، یک فایل JSON مربوطه در این فهرست خواهد داشت. این رویکرد برای برنامه هایی که دارای تعداد زیادی رشته قابل ترجمه هستند توصیه می شود:
/lang en.json es.json
ما در مورد هر رویکرد برای مدیریت رشته های ترجمه در این مستندات بحث خواهیم کرد.
انتشار فایل های زبان
به طور پیش فرض، اسکلت برنامه لاراول شامل
lang
دایرکتوری نمی شود. اگر می خواهید فایل های زبان لاراول را سفارشی کنید یا فایل های خود را ایجاد کنید، باید
lang
دایرکتوری را از طریق
lang:publish
دستور Artisan داربست کنید. این
lang:publish
دستور دایرکتوری را در برنامه شما ایجاد می کند
lang
و مجموعه پیش فرض فایل های زبان مورد استفاده لاراول را منتشر می کند:
php artisan lang:publish
پیکربندی Locale
زبان پیشفرض برنامه شما در گزینه پیکربندی
config/app.php
فایل پیکربندی ذخیره میشود
locale
که معمولاً با استفاده از
APP_LOCALE
متغیر محیط تنظیم میشود. شما آزاد هستید که این مقدار را مطابق با نیازهای برنامه خود تغییر دهید.
همچنین میتوانید یک "زبان بازگشتی" را پیکربندی کنید، که زمانی استفاده میشود که زبان پیشفرض شامل رشته ترجمه معینی نباشد. مانند زبان پیشفرض، زبان بازگشتی نیز در
config/app.php
فایل پیکربندی پیکربندی شده است و مقدار آن معمولاً با استفاده از
APP_FALLBACK_LOCALE
متغیر محیط تنظیم میشود.
می توانید زبان پیش فرض را برای یک درخواست HTTP در زمان اجرا با استفاده از
setLocale
روش ارائه شده توسط
App
نما تغییر دهید:
use Illuminate\Support\Facades\App; Route::get('/greeting/{locale}', function (string $locale) { if (! in_array($locale, ['en', 'es', 'fr'])) { abort(400); } App::setLocale($locale); // ...});
تعیین محل فعلی
میتوانید از روشهای
currentLocale
و
isLocale
روی
App
نما برای تعیین محلی فعلی استفاده کنید یا بررسی کنید که آیا منطقه یک مقدار داده شده است:
use Illuminate\Support\Facades\App; $locale = App::currentLocale(); if (App::isLocale('en')) { // ...}
زبان کثرت سازی
میتوانید به «پلورالیزر» لاراول، که توسط Eloquent و سایر بخشهای چارچوب برای تبدیل رشتههای مفرد به رشتههای جمع استفاده میشود، دستور دهید که از زبانی غیر از انگلیسی استفاده کند. این ممکن است با فراخوانی
useLanguage
روش در
boot
روش یکی از ارائه دهندگان خدمات برنامه شما انجام شود. زبانهای پشتیبانیکننده در حال حاضر عبارتند از:
french
,
norwegian-bokmal
,
portuguese
,
spanish
و
turkish
:
use Illuminate\Support\Pluralizer; /** * Bootstrap any application services. */public function boot(): void{ Pluralizer::useLanguage('spanish'); // ...}
اگر زبان متکثر را سفارشی کنید، باید نام جدول مدل Eloquent خود را به صراحت تعریف کنید .
تعریف رشته های ترجمه
استفاده از کلیدهای کوتاه
به طور معمول، رشته های ترجمه در فایل های داخل
lang
دایرکتوری ذخیره می شوند. در این دایرکتوری، برای هر زبانی که برنامه شما پشتیبانی می کند باید یک زیر شاخه وجود داشته باشد. این رویکردی است که لاراول برای مدیریت رشته های ترجمه برای ویژگی های داخلی لاراول مانند پیام های خطای اعتبارسنجی استفاده می کند:
/lang /en messages.php /es messages.php
همه فایل های زبان آرایه ای از رشته های کلیددار را برمی گرداند. مثلا:
<?php // lang/en/messages.php return [ 'welcome' => 'Welcome to our application!',];
برای زبانهایی که برحسب قلمرو متفاوت هستند، باید فهرست راهنمای زبانها را طبق ISO 15897 نامگذاری کنید. برای مثال، "en_GB" باید برای انگلیسی بریتانیایی به جای "en-gb" استفاده شود.
استفاده از رشته های ترجمه به عنوان کلید
برای برنامههایی که تعداد رشتههای قابل ترجمه زیادی دارند، تعریف هر رشته با یک «کلید کوتاه» میتواند هنگام ارجاع به کلیدها در نماهای شما گیجکننده باشد و اختراع مداوم کلیدها برای هر رشته ترجمه که توسط برنامه شما پشتیبانی میشود، دشوار است.
به همین دلیل، لاراول همچنین برای تعریف رشته های ترجمه با استفاده از ترجمه "پیش فرض" رشته به عنوان کلید، پشتیبانی می کند. فایل های زبانی که از رشته های ترجمه به عنوان کلید استفاده می کنند به عنوان فایل های JSON در
lang
فهرست ذخیره می شوند. به عنوان مثال، اگر برنامه شما دارای ترجمه اسپانیایی است، باید یک
lang/es.json
فایل ایجاد کنید:
{ "I love programming.": "Me encanta programar."}
تضاد کلید / فایل
شما نباید کلیدهای رشته ترجمه را تعریف کنید که با نام فایل های ترجمه دیگر تضاد دارند. به عنوان مثال، ترجمه
__('Action')
برای محلی "NL" در حالی که یک
nl/action.php
فایل وجود دارد اما
nl.json
فایلی وجود ندارد، منجر به بازگرداندن کل محتویات توسط مترجم می شود
nl/action.php
.
بازیابی رشته های ترجمه
می توانید رشته های ترجمه را با استفاده از
__
تابع کمکی از فایل های زبان خود بازیابی کنید. اگر از "کلیدهای کوتاه" برای تعریف رشته های ترجمه خود استفاده می کنید، باید فایل حاوی کلید و خود کلید را
__
با استفاده از نحو "نقطه" به تابع منتقل کنید. به عنوان مثال، بیایید
welcome
رشته ترجمه را از
lang/en/messages.php
فایل زبان بازیابی کنیم:
echo __('messages.welcome');
اگر رشته ترجمه مشخص شده وجود نداشته باشد،
__
تابع کلید رشته ترجمه را برمی گرداند. بنابراین، با استفاده از مثال بالا،
اگر رشته ترجمه وجود نداشته باشد،
__
تابع برمی گردد .
messages.welcome
اگر از رشته های ترجمه پیش فرض
خود به عنوان کلیدهای ترجمه استفاده می کنید
، باید ترجمه پیش فرض رشته خود را به
__
تابع ارسال کنید.
echo __('I love programming.');
مجدداً، اگر رشته ترجمه وجود نداشته باشد،
__
تابع کلید رشته ترجمه را که داده شده برمی گرداند.
اگر از موتور قالب سازی Blade
استفاده می کنید
، می توانید از
{{ }}
نحو echo برای نمایش رشته ترجمه استفاده کنید:
{{ __('messages.welcome') }}
جایگزینی پارامترها در رشته های ترجمه
در صورت تمایل، می توانید متغیرهایی را در رشته های ترجمه خود تعریف کنید. همه جایبانها با یک پیشوند هستند
:
. برای مثال، ممکن است پیام خوشامدگویی را با نام مکاننما تعریف کنید:
'welcome' => 'Welcome, :name',
برای جایگزینی نگهدارندهها هنگام بازیابی یک رشته ترجمه، میتوانید آرایهای از جایگزینها را به عنوان آرگومان دوم به تابع ارسال کنید
__
:
echo __('messages.welcome', ['name' => 'dayle']);
اگر مکاننمای شما حاوی تمام حروف بزرگ باشد یا فقط حرف اول آن بزرگ باشد، مقدار ترجمه شده بر این اساس بزرگ میشود:
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
قالب بندی جایگزینی شی
اگر بخواهید یک شی را بهعنوان مکاننمای ترجمه ارائه کنید،
__toString
روش شیء فراخوانی میشود. این
__toString
متد یکی از «روشهای جادویی» داخلی PHP است. با این حال، گاهی اوقات ممکن است روی روش یک کلاس خاص کنترل نداشته باشید
__toString
، مانند زمانی که کلاسی که با آن در تعامل هستید متعلق به یک کتابخانه شخص ثالث است.
در این موارد، لاراول به شما این امکان را می دهد که یک کنترل کننده قالب بندی سفارشی برای آن نوع شی خاص ثبت کنید. برای انجام این کار، باید از روش مترجم استفاده کنید
stringable
. این
stringable
روش یک بسته را میپذیرد، که باید نوع شیئی که مسئول قالببندی آن است را تایپ کند. به طور معمول، متد باید در
متد کلاس برنامه شما
stringable
فراخوانی شود
:
boot
AppServiceProvider
use Illuminate\Support\Facades\Lang;use Money\Money; /** * Bootstrap any application services. */public function boot(): void{ Lang::stringable(function (Money $money) { return $money->formatTo('en_GB'); });}
کثرت سازی
کثرتسازی مشکل پیچیدهای است، زیرا زبانهای مختلف قواعد پیچیدهای برای کثرت دارند. با این حال، لاراول میتواند به شما کمک کند تا رشتهها را بر اساس قوانین کثرتسازی که تعریف میکنید، متفاوت ترجمه کنید. با استفاده از یک
|
کاراکتر، می توانید اشکال مفرد و جمع یک رشته را تشخیص دهید:
'apples' => 'There is one apple|There are many apples',
البته، هنگام استفاده از رشته های ترجمه به عنوان کلید، کثرت سازی نیز پشتیبانی می شود :
{ "There is one apple|There are many apples": "Hay una manzana|Hay muchas manzanas"}
حتی ممکن است قوانین جمعسازی پیچیدهتری ایجاد کنید که رشتههای ترجمه را برای چندین محدوده مقادیر مشخص میکند:
'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]);
اگر می خواهید مقدار صحیحی را که به
trans_choice
تابع ارسال شده است نمایش دهید، می توانید از مکان نگهدار داخلی استفاده کنید
:count
:
'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',
لغو فایل های زبان بسته
برخی از بسته ها ممکن است با فایل های زبان خود ارسال شوند. بهجای تغییر فایلهای هسته بسته برای تغییر دادن این خطوط، ممکن است با قرار دادن فایلها در
lang/vendor/{package}/{locale}
فهرست، آنها را لغو کنید.
messages.php
بنابراین، برای مثال، اگر برای بسته ای با نام
نیاز به لغو رشته های ترجمه انگلیسی در آن دارید
skyrim/hearthfire
، باید یک فایل زبان در این آدرس قرار دهید
lang/vendor/hearthfire/en/messages.php
: در این فایل، شما فقط باید رشته های ترجمه ای را که می خواهید لغو کنید، تعریف کنید. هر رشته ترجمه ای که لغو نکنید همچنان از فایل های زبان اصلی بسته بارگیری می شود.