نسخه:

بومی سازی

معرفی

به طور پیش فرض، اسکلت برنامه لاراول شامل 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 : در این فایل، شما فقط باید رشته های ترجمه ای را که می خواهید لغو کنید، تعریف کنید. هر رشته ترجمه ای که لغو نکنید همچنان از فایل های زبان اصلی بسته بارگیری می شود.