Jump to content
  • entry
    1
  • comment
    1
  • views
    246

Языковые константы


freelancer

666 views

 Share

Если открыть практически любой контроллер opencart, можно увидеть

как после загрузки языка

$this->load->language('catalog/product');

подгружаются языковые константы

 $data['text_list'] = $this->language->get('text_list');
 $data['text_no_results'] = $this->language->get('text_no_results');
 $data['text_confirm'] = $this->language->get('text_confirm');

 $data['column_name'] = $this->language->get('column_name');
 $data['column_attribute_group'] = $this->language->get('column_attribute_group');
 $data['column_sort_order'] = $this->language->get('column_sort_order');
 $data['column_action'] = $this->language->get('column_action');

и так для каждой константы.

 

что бы не прописывать каждый перевод можно было сделать такой трюк

 $data = array(); // тут мы инициируем переменную $data если она не задана ранее
 $data += $this->load->language('catalog/attribute'); // а тут копируем в неё все языковые константы

 

 

но это имело смысл только до версии 3.0

потому как с версии 3.0 добавили такую интересную штуку controller\event\language.php

	public function index(&$route, &$args) {
		foreach ($this->language->all() as $key => $value) {
			if (!isset($args[$key])) {
				$args[$key] = $value;
			}
		}
	}	

сами event'ы были и раньше, но language event добавили только в 3.0

 

а как же это работает? довольно просто:

всё начинается с того что в файле framework.php создается и регистрируется event, который в свою очередь регистрирует все ивенты из конфига

// Event
$event = new Event($registry);
$registry->set('event', $event);

// Event Register
if ($config->has('action_event')) {
	foreach ($config->get('action_event') as $key => $value) {
		foreach ($value as $priority => $action) {
			$event->register($key, new Action($action), $priority);
		}
	}
}

в конфиге среди прочих есть такие строчки
 

$_['action_event'] = array(

...
    'view/*/before' => array(
        999  => 'event/language',

...

таким образом перед каждым вызовом $this->load->view загружаются соответствующие языковые константы

 Share

1 Comment


Recommended Comments

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...