کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Localization در لاراول

Localization (بومی سازی و چند زبانه کردن)

  1. مقدمه
  2. نحوه ی استفاده
    • pluralization (جمع بندی رشته ها)
  3. بازنویسی فایل های language اصلی پکیج ها

مقدمه

امکان localization در فریم ورک Laravel به شما این اجازه را می دهد تا رشته ها را به زبان های مختلف در اپلیکیشن خود ترجمه و بازیابی کنید.
متغیرهای رشته ای language داخل فایل هایی در پوشه ی resources/lang ذخیره می شود. در این پوشه بایستی به ازای هر زبان که اپلیکیشن پشتیبانی می کند، یک subdirectory وجود داشته باشد:

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

تمامی فایل های language صرفا یک آرایه از رشته های با کلید (keyed strings) را به عنوان خروجی برمی گردانند. مثال:

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

تنظیم زبان جاری (locale)

زبان پیش فرض اپلیکیشن داخل فایل تنظیمات config/app.php ذخیره می شود. البته شما می توانید این مقدار را مطابق نیازهای اپلیکیشن خود ویرایش نمایید. همچنین می توانید با فراخوانی متد setLocale در App facade زبان فعلی برنامه را در زمان اجرا (runtime) تغییر دهید:

Route::get('welcome/{locale}', function ($locale) {
   App::setLocale($locale);
  //
});

همچنین می توانید یک زبان جایگزین (fallback) تنظیم کنید. این زبان جایگزین زمانی بکار می رود که زبان فعلی دربردارنده ی رشته مورد نظر نباشد. زبان جایگزین نیز مانند زبان فعلی برنامه در فایل تنظیمات config/app.php قابل دسترسی و تنظیم می باشد:

                    'fallback_locale' => 'en',

نحوه ی استفاده

می توانید با بهره گیری از تابع کمکی trans رشته هایی را از فایل های language بازیابی کنید. متد trans فایل و کلید مربوط به رشته ی زبان مورد نظر را به عنوان آرگوامان اول می پذیرد. در زیر با فراخوانی تابع مذکور رشته ی welcome را از فایل مربوط به زبانresources/lang/messages.php خوانده و بازیابی می کنیم.

                    echo trans('messages.welcome');

البته در صورتی که از موتور تولید قالب Blade استفاده می کنید، می توانید از سینتکس{{ }} برای چاپ رشته مورد نظر به زبان معین استفاده نمایید:

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

در صورتی که رشته ی مورد نظر در فایل language وجود نداشت، تابع trans کلید آن رشته را برمی گرداند. حال با توجه به مثال قبلی می توان نتیجه گرفت که در صورت عدم وجود رشته ی مورد نظر تابع نام برده messages.welcome را به عنوان خروجی برمی گرداند.

جایگزین کردن پارامترها در رشته های زبان (language lines)

placeholder ها (مکان نگهدارها) ابزاری کارامدی هستند که می توانید در رشته های متنی زبان خود نیز از آن ها استفاده کنید. برای درجplaceholder کافی است ابتدا کاراکتر دو نقطه و سپس اسم مکان نگهدار دلخواه را مشخص نمایید. در زیر با استفاده از placeholder ای به نامname یک پیغام خوش آمدگویی نمایش می دهیم:

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

به منظور جایگذاری مقدار مورد نظر در مکان نگهدار تعریف شده، در زمان بازیابی خط زبان (رشته ی متنی زبان)، آرایه ای از مقادیر جایگزین را به عنوان آرگومان دوم به تابع trans ارسال نمایید:

                    echo trans('messages.welcome', ['name' => 'Dayle']);

pluralization (جمع بندی رشته ها)

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

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

پس از آن می توانید به وسیله ی تابع trans choice رشته مورد نظر را با توجه به آرگومان دوم (تعداد کلمات مشخص شده) ترجمه و بازیابی کنید. در این مثال، از آنجایی که مقدار آرگومان دوم از 1 بزرگتر است، فرم جمع رشته برگردانده می شود:

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

مترجم Laravel توسط کامپوننت ترجمه ی Symphony طراحی و پشتیبانی می شود، بنابراین می توانید قواعد پیچیده تری برای جمع بندی رشته ها تعریف کنید:

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

بازنویسی فایل های language اولیه ی پکیج ها

برخی از پکیج ها همراه با فایل های language اختصاصی خود ارائه می شوند. بجای اینکه فایل های اصلی پکیج را هک کرده و اقدام به ویرایش خط ها و رشته های متنی زبان کنید، می توانید با قرار دادن فایل های خود در پوشه ی resources/lang/vendor/{package}/{locale} به طور کامل آن ها را بازنویسی یا به اصطلاح override نمایید.
برای مثال اگر بخواهید متن های زبان انگلیسی را در فایل messages.php پکیج ای به نام skyrim/hearthfire بازنویسی کنید، در آن صورت بایستی فایل language دلخواه را در آدرس resources/lang/vendor/hearthfire/en/messages.php جایگذاری نمایید. یادآور می شویم که در این فایل فقط می بایست آن دسته از رشته های متنی (خط های زبان) که می خواهید بازنویسی شوند را تعریف کنید. هر رشته ی متنی یا خط زبانی (language line) که بازنویسی نکنید، از فایل های language اصلی پکیج خوانده و لود می شوند.

1395/03/17 5362 1643
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...