تعداد بازدید: 1467

Localization

مسیر فایل های ترجمه لاراول در resources/lang قرار دارد. به صورتی که به ازای هر زبان ما یک directory داریم به طور مثال برای زبان en یک directory داریم که در درون آن فایل های ترجمه بر اساس دسته بندی در آن قرار دارند.

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

فایل های ترجمه با فرمت php یک آرایه را برمی گرداند :

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

Application Locale Configuration

در فایل تنظیمات Application واقع در مسیر config/app.php به دنبال پارامتر locale باشید که مقدار آن مربوط به زبان Application شما خواهد بود.

در صورتی که زبان اصلی (locale) در مسیر پوشه شما وجود نداشت به دنبال مقدار پارامتر fallback_locale می گردد که همان زبان پشتیبان شماست.

'locale' => 'en',
'fallback_locale' => 'en'

مثلا در مثال بالا برابر en است که نشانگر همان زبان انگلیسی است . به ازای زبان فارسی می توانید آن را بر روی fa قرار دهید.

نکته : دقت داشته باشید مقداری که به locale در تنظیمات می دهید باید در مسیر resource/lang پوشه مربوط به آن وجود داشته باشد.

Default Language At Runtime

یه سری متد ها وجود داره که میشه در زمان اجرای برنامه متدهای اون رو تعیین کرد. مثلا زبان برنامه رو عوض کرد یا زبان جاری برنامه رو از تنظیمات گرفت.

<?php
$locale = App::getLocale();
App::setLocale('en');
App::isLocale('fa');

Defining Translation Strings

به دو شکل ما می توانیم فایل ترجمه برای نرم افزامان بسازیم:

  • Using Short Keys : در این روش یک کلید داریم و یک متن . با استفاده از کلید و فایل ترجمه می توانیم به متن دسترسی پیدا کنیم .
  • Using Translation Strings : در این مورد یک فایل ترجمه json داریم که تمامی ترجمه ها را در خود داراست. با استفاده از رشته مستقیم می توانیم به رشته ترجمه دسترسی پیدا کنیم.

Using Short Keys

در این روش ما می توانیم به فایل های ترجمه را دسته بندی کنیم و در فولدر های متفاوت قرار دهیم به شکلی که دسترسی به رشته ترجمه از طریق فایل ترجمه به همراه کلید آن قابل دسترسی خواهد بود . انتخاب کلید بر اساس رشته ترجمه کمی کار گیج کننده ای خواهد بود.

مثلا ما در مسیر resources/lang/en/messages.php فایل message.php را داریم و در درون آن آرایه ای از کلید های هر ترجمه موجود می باشد.

<?php
// resources/lang/en/messages.php

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

در نهایت در برنامه جایی که می خواهیم به رشته ترجمه دسترسی پیدا کنیم از طریق نام فایل و کلید به رشته دسترسی پیدا می کنیم:

__('messages.welcome');

می بینید که با استفاده از تابع __ و مسیر فایل (که همان طور که در بالاتر گفته بودیم برابر message بود) و همچنین کلید (همان کلید موجود در آرایه که در مثال بالا برابر welcome بود) به متن Welcome to our application دسترسی پیدا کنیم.

نکته : نحوه دسترسی به رشته ترجمه با استفاده از توابع مختلف و بسته به مکانی که در آن هستیم (controller ها و یا Blade Template engin) متفاوت است.

نکته : شروع مسیر از فولدر فایل های ترجمه شروع می شود که در مثال ما برابر با resources/lang/en بود(زیرا Locale ما برابر en می باشد). از آن جا به بعد ما برای navigate در میان دایرکتوری ها از . به جای / استفاده می کنیم.

Using Translation Strings

ما می توانیم یک فایل با فرمت JSON در مسیر ترجمه خودمان قرار دهیم که محتوای آن یک شی است که کلید هر یک از المان های شئ برابر با متن شاخص و مقدار آن برابر ترجمه باشد. به این ترتیب اصل متن را به عنوان کلید قرار می دهیم و از سختی های انتخاب کلید راحت می شویم.

به طور مثال ما فایلی با نام زبان محلی مد نظرمان در مسیر resources/lang/fa.json قرار می دهیم و در آن متون ترجمه را می گذاریم.

{
    "I love programming.": "من برنامه نویسی را دوست دارم."
}

در زمان فراخوانی نیز به طور مستقیم متن کلید را فراخوانی می کنیم و بر اساس زبان محلی موجود در تنظیمات فایل مورد نظر مسیرش مشخص خواهد بود .

__('I love programming.');

اگر در view قصد فراخوانی ترجمه دارید چون در Blade Template engin قرار داریم باید به شکل زیر آن را فراخوانی کنیم :

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

@lang('messages.welcome')

دو تابع بالا کار فراخوانی ترجمه و چاپ آن را انجام می دهند.

Replacing Parameters In Translation Strings

اگر قصد داشتید در متن ترجمه خودتون پارامتری تعیین کنید باید هم در رشته ترجمه نامی برای پارامتر تعیین کنید و هم در زمان فراخوانی با تابع کمکی __ پارامتر را مقدار دهی کنید.

دقت داشته باشید که هر رشته ترجمه می تواند پارامتر های زیادی بگیرد . پس در زمان فراخوانی ترجمه به عنوان پارامتر می توان یک آرایه را به آن داد.

تعریف رشته در مسیر ترجمه :

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

فراخوانی ترجمه به همراه پارامتر :

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

مفرد و جمع بودن پارامتر – Pluralization

بوسیله کاراکتر | (پایپ – pipe) در رشته می توان به ازای جمع یا مفرد بودن هدف رشته جمع و یا مفرد به آن داد. همچنین در زمان فراخوانی می توان تعیین کرد که منظور ما مفرد بوده یا جمع

تعریف رشته در مسیر ترجمه :

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

فراخوانی ترجمه به همراه پارامتر با استفاده از تابع trans_choice:

<?php
echo trans_choice('messages.apples', 10);

روال کار در زمان فراخوانی ترجمه به این شکل خواهد بود که اگر مقدار 1 را به عنوان پارامتر دوم به تابع trans_choice بدهیم مفرد در نظر می گیرد و اگر عدد بیشتر از 1 بدهیم جمع.

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

یک دیدگاه برای Localization

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *