У 2009 році ми створили для локалізації «Корпорації 2 CMS» два компоненти: translate підставляв переклади, а lang_bar показував перелік мов для перемикання.
Налаштування мов
У головному класі використовувалися три властивості, які можна було задавати в config_main.php:
public $lang='ru'; // Текущий язык публичной части
public $lang_adm='ru'; // Текущий язык админ-части
public $langs=array('ru','ua', 'en'); // Доступные языкиПозначення ua було внутрішнім ідентифікатором української мови в цій системі: саме з ним пов’язані наведені каталоги й конфігурація.
Словник компонента
Кожен компонент мав каталог lang з файлами масивів перекладу. Наприклад, український словник зберігався у /lang/ua/index.php:
defined( '_VALID_CORP' ) or die( 'Прямой вызов запрещён' );
$this->msg=array(
array('login_label', 'Логін'),
array('password_label' , 'Пароль'),
array('reg_label' , 'Реєстрація'),
array('forg_label' , 'Згадати пароль'),
array('hello_label' , 'Ласкаво просимо'),
array('exit_btn' , 'Вихід')
);Підключення перекладача в компоненті
Далі компонент підключав клас перекладу та завантажував повідомлення для auth:
function CMain()
{
$GLOBALS["c"]->ins_comp_file("translate/main_class.php");
$this->trans=new translate($application);
$this->trans->get_msg('auth');
}Для роботи цього фрагмента потрібен контекст компонента та змінної $application, якого в нотатці немає. У PHP 8 метод з назвою класу більше не є конструктором; для конструктора використовується __construct() (документація PHP).
Маркери в шаблоні
Замість готових підписів шаблон містив маркери на кшталт <%login_label%>. Приклад форми показує, де стояли такі маркери. У ньому залишилися таблична верстка, некоректне значення ширини 100%px та адреси Blogger; завершення PHP-рядка в записі відсутнє. Тому цей фрагмент пояснює розташування підписів, але не є готовою формою для копіювання у проєкт.
// Шаблон формы авторизации
$GLOBALS["myauth"]->auth_form='
<form>
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;"> <tbody>
<tr> <td align="left" valign="top">
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;"> <tbody>
<tr> <td align="left" valign="top">
<table border="0" cellpadding="0" cellspacing="0" style="height: 22px; width: 100%px;"> <tbody>
<tr> <td class="path" width="52"><%login_label%>:</td> <td><label>
<input class="str_001" name="login_corp" type="text" />
</label></td> </tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" style="height: 22px; width: 100%px;"> <tbody>
<tr> <td class="path" width="52"><%password_label%>:</td> <td><label>
<input class="str_001" name="passwd_corp" type="password" />
</label></td> </tr>
</tbody></table>
</td> <td align="right" class="tahoma_18_blue" valign="middle" width="25">
<input class="auth_button" name="sumbit_auth" type="submit" value="" />
</td> </tr>
</tbody></table>
</td> </tr>
<tr> <td align="left" class="path2" height="25" valign="bottom"><a href="https://www.blogger.com/reg/"><%reg_label%></a> | <a href="https://www.blogger.com/rest_pwd/"><%forg_label%></a></td> </tr>
</tbody></table>
</form>Перед виведенням шаблон передавали перекладачеві:
echo $this->trans->tr($this->auth_form);Приклад використання цього механізму містився в компоненті авторизації auth.