کلاس زبان

مجتبی پاکزاد کدایگنایتر 3.1.9 در حال تکمیل رایگان

کلاس Language، فانکشن‌هایی را برای دریافت فایل‌های زبان و خطوط متن آن‌ها، برای اهداف بین‌المللی‌سازی (چندزبانه ساختن اپلیکیشن) ارائه می‌دهد.

در دایرکتوری system کدایگنایتر، می‌توانید یک ساب‌دایرکتوری با نام language را بیابید که حاوی مجموعه‌ای از فایل‌های زبان برای اصطلاحات زبان انگلیسی (english) است. فایل‌های داخل این دایرکتوری (system/language/english/)، پیام‌های معمولی، پیام‌های خطا و سایر عبارات و اصطلاحات عمومی خروجی را برای بخش‌های مختلف فریمورک کدایگنایتر تعریف می‌کنند.

به منظور ارائه خطاهای مخصوص برنامه و پیام‌های دیگر، یا ارائه ترجمه‌ای برای پیام‌های مربوط به هسته فریمورک به زبانی دیگر، در صورت نیاز می‌توانید فایل‌های زبان خود را ایجاد یا ترکیب کنید. این ترجمه‌ها یا پیام‌های اضافی باید داخل دایرکتوری application/language/ قرار بگیرند، هر زبان باید دارای ساب‌دایرکتوری مخصوص خود باشد. (برای مثال، french یا german یا persian).

فریمورک کدایگنایتر با مجموعه‌ای از فایل‌های زبان برای اصطلاحات انگلیسی همراه است. ترجمه‌های تایید شده اضافی را می‌توانید در ریپازیتوری ترجمه‌های کدایگنایتر 3 پیدا کنید.

هنگامی که کدایگنایتر فایل‌های زبان را لود می‌کند، ابتدا فایل‌های داخل دایرکتوری system/language/ را لود می‌کند، سپس به دنبال فایل‌های موجود در دایرکتوری application/language/ می‌گردد و ترجمه‌های تکراری را جایگزین نسخه موجود در دایرکتوری system می‌کند.

توجه

هر زبان باید در پوشه مربوط به خودش ذخیره شود. برای مثال، فایل‌های زبان انگلیسی باید در محل system/language/english قرار گیرند.

هندل کردن چندین زبان

اگر می‌خواهید چندین زبان را در اپلیکیشن خود پشتیبانی کنید، باید برای هر کدام یک پوشه در دایرکتوری application/language/ ایجاد کنید و زبان پیش‌فرض را نیز باید در application/config/config.php مشخص کنید.

دایرکتوری application/language/english/ باید حاوی هر فایل زبانی باشد که در اپلیکیشن خود نیاز دارید، برای مثال پیام‌‎های خطا.

هر دایرکتوری اصطلاحات اختصاصی دیگری باید حاوی فایل‌های زبان مربوط به هسته باشد که از ریپازیتوری ترجمه‌ها دریافت کرده و یا خودتان ترجمه کرده‌اید و همچنین هر مورد اضافی دیگری که در اپلیکیشن‌تان به آن نیاز دارید. 

زبانی که کاربر در حال حاضر در حال استفاده از آن است را نیز باید ذخیره کنید، برای مثال در یک متغییر سشن.

نمونه ساختار فایل‌های زبان

system/
        language/
                english/
                        ...
                        email_lang.php
                        form_validation_lang.php
                        ...

application/
        language/
                english/
                        error_messages_lang.php
                french/
                        ...
                        email_lang.php
                        error_messages_lang.php
                        form_validation_lang.php
                        ...

مثالی از سوئیچ بین زبان‌ها

$idiom = $this->session->get_userdata('language');
$this->lang->load('error_messages', $idiom);
$oops = $this->lang->line('message_key');

بین‌المللی‌سازی (چندزبانه‌سازی)

هدف از کلاس زبان در کدایگنایتر، ارائه شیوه‌ای ساده و سبک برای ساپورت چندین زبان در اپلیکیشن شما است. هدف پیاده‌سازی کامل آن چیزی که معمولا به آن بین‌المللی‌سازی و محلی‌سازی می‌گویند، نیست.

به جای استفاده از استانداردهای بین‌المللی، مانند en و en-US یا en-CA-x-ca برای انگلیسی و انواع آن، از نام متداول یک زبان برای ارجاع به آن استفاده می‌کنیم.

توجه

هیچ چیزی مانع شما در استفاده از حالت اختصاری کلمات و عبارات رنیست!

استفاده از کلاس زبان

ساخت فایل‌های زبان

نام فایل‌های زبان باید با _lang.php به پایان برسد. برای مثال، فرض کنیم می‌خواهید فایلی بسازید که حاوی پیام‌های خطا باشد. بهتر است نام آن را error_lang.php بگذارید.

داخل فایل، برای هر خط متن را به یک اندیس از آرایه $lang با الگوی زیر نسبت دهید:

$lang['language_key'] = 'The actual message to be shown';

برای جلوگیری از تداخل اصطلاحات شبیه به هم در چندین فایل مروبط به یک زبان، یک راهکار خوب این است که برای تمامی پیام‌ها در یک فایل مشخص از یک پیشوند مشترک استفاده کنیم. برای مثال، اگر دارید پیام‌های خطا را می‌سازید، بهتر است برای آن‌ها از پیشوند error استفاده کنید.

$lang['error_email_missing'] = 'You must submit an email address';
$lang['error_url_missing'] = 'You must submit a URL';
$lang['error_username_missing'] = 'You must submit a username';

لود یک فایل زبان

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

$this->lang->load('filename', 'language');

در کد بالا، filename نام فایل مورد نظرتان (بدون اکستنشن فایل) برای لود است و language نام زبانی است که فایل در آن قرار دارد (برای مثال english). اگر پارامتر دوم وجود نداشته باشد، زبان پیش‌فرض که در application/config/config.php مشخص شده، استفاده خواهد شد.

همچنین با ارسال، فایل‌های زبان به شکل یک آرایه به پارامتر اول، می‌توانید چندین فایل را به صورت همزمان لود کنید.

$this->lang->load(array('filename1', 'filename2'));

توجه

پارامتر language فقط می‌تواند از حروف تشکیل شده باشد.

دریافت یک خط از متن

هنگامی که فایل زبان مورد نظرتان لود شد، می‌توانید با استفاده از فانکشن زیر به هر خط از آن دسترسی داشته باشید:

$this->lang->line('language_key');

که در کد بالا، language_key کلید آرایه مربوط به خطی است که می‌خواهید نمایش دهید.

اگر از وجود یک خط مطمئن نیستید، برای غیرفعال کردن لاگ کردن خطاها، مقدار اختیاری FALSE را می‌توانید به عنوان آرگومان دوم متد بالا قرار دهید.

$this->lang->line('misc_key', FALSE);

توجه

این متد در واقع مقدار خط را return می‌کند و آن را چاپ نمی‌کند.

استفاده از خطوط زبان به عنوان لیبل‌های فرم

این فیچر از لایبرری زبان حذف شده و به فانکشن lang() هلپرفانکشن Language منتقل شده است.

لود خودکار زبان‌ها

اگر متوجه شدید که نیاز دارید تا یک زبان خاص به صورت گلوبال در کل اپلیکیشن شما لود شود، می‌توانید به کدایگنایتر بگویید تا در هنگام آغاز به کار سیستم، آن را به صورت خودکار لود کند. اینکار را با باز کردن فایل application/config/autoload.php و افزودن زبان‌ها به آرایه autoload می‌توانید انجام دهید.

رفرنس کلاس

کلاس CI_Lang

load($langfile[, $idiom = ''[, $return = FALSE[, $add_suffix = TRUE[, $alt_path = '']]]])
پارامترها
  • $langfile نوع استرینگ - فایل زبان برای لود یا آرایه‌ای از چندین فایل
  • $idiom نوع استرینگ - نام زبان (برای مثال english)
  • $return نوع بولین - آیا آرایه ترجمه‌های لود شده را برگرداند
  • $add_suffix نوع بولین - آیا پسوند _lang را به نام فایل زبان اضافه کند
  • $alt_path نوع استرینگ - یک مسیر جایگزین برای گشتن دنبال فایل زبان
مقدار بازگشتی اگر $return دارای مقدار TRUE باشد، آرایه‌ای از خطوط زبان را برمی‌گرداند، درغیراینصورت void (مقدار بازگشتی ندارد)
نوع مقدار بازگشتی mixed (بیش از یک نوع می‌تواند باشد)

یک فایل زبان را لود می‌کند.

line($line[, $log_errors = TRUE])
پارامترها
  • $line نوع استرینگ - نام کلید مربوط به خط زبان
  • $log_errors نوع بولین - آیا اگر خطی یافت نشد، یک خطا لاگ کند
مقدار بازگشتی ترجمه خط درخواست شده یا FALSE در صورت عدم موفقیت
نوع مقدار بازگشتی استرینگ

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

منبع
Language Class