Создание многоязычного меню навигации в CodeIgniter

Я пытаюсь создать функцию, которая строит и отображает меню навигации, сохраняя при этом MVC как можно больше (хотя я новичок в этом, поэтому я не понимаю его полностью).

Мой скрипт умирает без сообщения об ошибке. Давайте расследовать!

На мой взгляд, я вызываю функцию, которая строит содержимое меню и посылает имена страниц, которые должны существовать в меню:

// application/views/templates/header.php <ul class="navigation"> <?php // Send in the English name, which also becomes the slug. // Function should return the name in the appropriate language, // plus the slug in English. $args = ['home','compete','gallery','finalists','about']; build_navigation($args); ?> </ul> 

Теперь идея состоит в том, чтобы перебирать эти аргументы и создавать элемент списка для каждого аргумента, содержащего имя файла, которое также является URL-адресом, и отображаемое имя на соответствующем языке.

 // application/helpers/navigation_helper.php // This is loaded in autoload.php — confirmed working <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); if ( ! function_exists('build_navigation')) { function build_navigation($args) { foreach ($args as $token) echo "<li><a href=\"{$token}\">{$this->lang->line($token)}</a></li>\n"; } } ?> 

Когда я смотрю на это, это имеет смысл в моей голове, но в то же время вызывает такие вопросы, как «что такое $this в данном контексте?»

Если я изменил $this->lang->line($token) на $token , скрипт будет работать (хотя я не получу многоязычную функциональность).

У меня есть файлы языков, которые мне нужны …

 // application/language/english/en_lang.php <?php $lang['home'] = "Home"; $lang['compete'] = "Compete"; $lang['gallery'] = "Gallery"; $lang['finalists'] = "Finalists"; $lang['about'] = "About"; ?> // application/language/swedish/sv_lang.php <?php $lang['home'] = "Hem"; $lang['compete'] = "Tävla"; $lang['gallery'] = "Galleri"; $lang['finalists'] = "Finalister"; $lang['about'] = "Info"; ?> 

… И здесь вы можете видеть, что я загружаю свои языковые файлы в свой контроллер (что почти точно отражает контроллер страниц в документах CI):

 <?php /** * Pages * * Class for building static pages. * */ class Pages extends CI_Controller { public function view ($page = 'home') { if (!file_exists('application/views/pages/'.$page.'.php')) show_404(); $data['title'] = ucfirst($page); // Capitalise first letter of title $this->lang->load('en','english'); $this->lang->load('sv','swedish'); $this->load->view('templates/header', $data); $this->load->view('pages/'.$page, $data); $this->load->view('templates/footer', $data); } } ?> 

В вашем build_navigation($args)

пытаться

$ ci = & get_instance ();

и вместо $this-> используйте $ci->lang

Als0,

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

Где filename – это имя файла, который вы хотите загрузить (без расширения файла), а язык – это набор языков, содержащий его (например, английский). Если второй параметр отсутствует, будет использоваться язык по умолчанию, указанный в вашем файле application / config / config.php.

Вам нужно всего лишь загрузить требуемый язык не для обоих.