- جمعه 12 مرداد 1397 ساعت 16:56
- 5.6.29
- در حال تکمیل
- منقضی شده
مقدمه
فیچرهای محلیسازی لاراول، روش مناسبی برای بازآوری (retrieve) استرینگها در زبانهای مختلف را ارائه میدهند که به شما این امکان را میدهد تا به راحتی از چندین زبان در اپلیکیشن خود پشتیبانی کنید. استرینگهای زبان در فایلهایی در دایرکتوری 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);
//
});
میتوانید یک زبان جایگزین را کانفیگ کنید که زمانی که زبان فعال، فاقد استرینگ ترجمه مشخصی باشد، از آن استفاده میشود. مشابه زبان پیشفرض، زبان جایگزین نیز در فایل config/app.php کانفیگ میشود.
'fallback_locale' => 'en',
مشخص کردن زبان فعلی
از متدهای getLocale
و isLocale
در فساد App
میتوانید برای مشخص کردن زبان جاری یا بررسی اینکه آیا زبان مورد نظر شما سِت شده است، استفاده کنید.
$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'
];
استفاده از استرینگهای ترجمه در نقش کلید
برای اپلیکیشنهایی که نیاز به ترجمه سنگین دارند، تعریف هر استرینگ با یک کلید کوتاه، در هنگام رفرنس به آنها در فایلهای ویو، میتواند کمی گیج کننده به نظر آید. به همین دلیل، لاراول از تعریف استرینگهای ترجمه با استفاده از ترجمه پیشفرض استرینگها به عنوان کلید، نیز پشتیبانی میکند.
فایلهای ترجمه که از استرینگهای زبان به عنوان کلید استفاده میکنند، به شکل فایلهای 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 message را با پلیسهولدر name
میتوانید به شکل زیر تعریف کنید:
'welcome' => 'Welcome, :name',
برای جایگذاری پلیسهولدرها هنگام دریافت استرینگ ترجمه، مقادیری که میخواهید در استرینگ ترجمه با پلیسهولدرها جایگزین شوند را به شکل یک آرایه به آرگومان دوم فانکشن __
پاس دهید:
echo __('messages.welcome', ['name' => 'dayle']);
اگر پلیسهولدر تماما به شکل حروف بزرگ باشد، یا به شکل کپیتال (اولین حرف بزرگ) باشد، مقدار ترجمه شده نیز به همان شکل نوشته میشود:
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
جمع بستن
پلورالیزاسیون (Pluralization) یا جمع بستن، موضع پیچیدهای است، زیرا زبانهای مختلف، قوانین پیچیده گوناگونی برای جمع بستن دارند. با استفاده از کاراکتر پایپ (|
)، میتوانید شکلهای مفرد و جمع استرینگ را مشخص کنید:
'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 قرار دهید. داخل این فایل، فقط باید استرینگهای ترجمهای که میخواهید بازنویسی شوند را قرار دهید. هر استرینگ ترجمهای که بازنویسی نشود، هنوز از فایلهای زبان اصلی پکیج لود میشوند.
سایر پستهای داکیومنت
- پیشگفتار
- Release Notes ترجمه در ورژنهای بعدی
- راهنمای آپگرید ترجمه در ورژنهای بعدی
- Contribution Guide ترجمه در ورژنهای بعدی
- شروع
- نصب
- پیکربندی
- ساختار دایرکتوری ترجمه در ورژنهای بعدی
- Laravel Homestead ترجمه در ورژنهای بعدی
- Laravel Valet ترجمه در ورژنهای بعدی
- دپلویمنت ترجمه در ورژنهای بعدی
- مفاهیم معماری
- چرخه کار ریکوئستها
- Service Container ترجمه در ورژنهای بعدی
- سرویس پرووایدرها
- فسادها ترجمه در ورژنهای بعدی
- Contracts ترجمه در ورژنهای بعدی
- اصول اولیه
- مسیریابی
- میدلور
- حفاظت در مقابل حملات CSRF
- کنترلرها
- HTTP Requests ترجمه در ورژنهای بعدی
- HTTP Responses ترجمه در ورژنهای بعدی
- ویوها
- تولید URL
- HTTP Session ترجمه در ورژنهای بعدی
- Validation ترجمه در ورژنهای بعدی
- Error Handling ترجمه در ورژنهای بعدی
- Logging ترجمه در ورژنهای بعدی
- فرانتاند
- تمپلتهای Blade
- محلیسازی
- JavaScript & CSS Scaffolding ترجمه در ورژنهای بعدی
- Compiling Assets (Laravel Mix) ترجمه در ورژنهای بعدی
- امنیت
- Authentication ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Authorization ترجمه در ورژنهای بعدی
- Encryption ترجمه در ورژنهای بعدی
- Hashing ترجمه در ورژنهای بعدی
- Resetting Passwords ترجمه در ورژنهای بعدی
- مباحث عمیقتر
- Artisan Console ترجمه در ورژنهای بعدی
- Broadcasting ترجمه در ورژنهای بعدی
- Cache ترجمه در ورژنهای بعدی
- Collections ترجمه در ورژنهای بعدی
- Events ترجمه در ورژنهای بعدی
- File Storage ترجمه در ورژنهای بعدی
- Helpers ترجمه در ورژنهای بعدی
- Mail ترجمه در ورژنهای بعدی
- Notifications ترجمه در ورژنهای بعدی
- Package Development ترجمه در ورژنهای بعدی
- Queues ترجمه در ورژنهای بعدی
- Task Scheduling ترجمه در ورژنهای بعدی
- دیتابیس
- دیتابیس: شروع ترجمه در ورژنهای بعدی
- Database: Query Builder ترجمه در ورژنهای بعدی
- دیتابیس: صفحهبندی
- دیتابیس: مایگریشن
- دیتابیس: سیدینگ
- Redis ترجمه در ورژنهای بعدی
- Eloquent ORM
- Eloquent: Getting Started ترجمه در ورژنهای بعدی
- Eloquent: Relationships ترجمه در ورژنهای بعدی
- Eloquent: Collections ترجمه در ورژنهای بعدی
- Eloquent: Mutators ترجمه در ورژنهای بعدی
- Eloquent: API Resources ترجمه در ورژنهای بعدی
- Eloquent: Serialization ترجمه در ورژنهای بعدی
- Testing
- Testing: Getting Started ترجمه در ورژنهای بعدی
- HTTP Tests ترجمه در ورژنهای بعدی
- Browser Tests (Laravel Dusk) ترجمه در ورژنهای بعدی
- Database Testing ترجمه در ورژنهای بعدی
- Mocking ترجمه در ورژنهای بعدی
- Official Packages
- Laravel Cashier ترجمه در ورژنهای بعدی
- Envoy Task Runner ترجمه در ورژنهای بعدی
- Laravel Horizon ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Laravel Scout ترجمه در ورژنهای بعدی
- Laravel Socialite ترجمه در ورژنهای بعدی