2013-10-11 4 views
0

Я просто застрял немного, пытаясь поднять языковой настрой.Как настроить поддержку нескольких языков Codeigniter?

Я пытаюсь понять, правильно ли это?

В моем Язык/английском папке у меня есть папка с названием общим в том, что это файл с именем header.php

Я не уверен, если это правильный способ ввода данных там.

<?php 
// Text 
$_['text_home']   = 'Home'; 
$_['text_search']   = 'Search'; 
?> 

А на папку контроллера общего/header.php

$this->language->load('common/header'); 
$this->data['text_home'] = $this->language->get('text_home'); 
$this->data['text_search'] = $this->language->get('text_search'); 
$this->data['home'] = $this->url->link('common/home'); 

А на общих взглядов/header.php

<div class="links"><a href="<?php echo $home; ?>"><?php echo $text_home; ?></a></div> 

Что плохого не уверен, что я пробовал.

ответ

0

# Языки

языки/ен/site_lang.php

$lang['site_title'] = "English Title"; 

языки/мл/site_lang.php

$lang['site_title'] = "Malayalam Title"; 

# Контроллер

// Load the language helper to get lang() method in view 
$this->load->helper('language'); 

// Change the 'en' key to 'ml' for change the language 
$this->lang->load("site", 'en'); 

# Просмотр

// This will echo 'English Title' 
<?php echo lang('site_title'); ?> 
+0

Что я могу положить What goes in here user2814461

+0

Dino

+0

Отправлено, – user2814461

0

Поддержка нескольких языков, также известный как интернационализации, является ключевым элементом современных веб-приложений. Большинство фреймворков Full-stack PHP поддерживают многоязычную поддержку, что позволяет нам динамически представлять интерфейс нашего приложения на разных языках без дублирования существующего исходного кода для каждого языка. Сегодня мы обсудим, как мы можем включать несколько языков с помощью CodeIgniter, а также несколько трюков для настройки основных функций.

Настройка Многоязычная поддержка

Сначала нам нужно настроить необходимые файлы прежде чем мы сможем начать использовать языковую поддержку. Файл конфигурации CodeIgniter, расположенный в каталоге application/config, содержит параметр, называемый языком, который определяет язык по умолчанию приложения.

<?php 
$config['language'] = 'english'; 

Нам также необходимо создать фактические файлы, содержащие наши сообщения на разных языках. Эти файлы должны быть помещены в каталог приложения/языка с отдельным каталогом для каждого языка. Например, файлы на английском языке должны находиться в каталоге application/language/english, а файлы на французском языке должны быть расположены в application/language/french.

Давайте создадим языковые файлы, содержащие сообщения об ошибках для образца приложения. Создайте файл english/message_lang.php (важно, чтобы все языковые файлы имели суффикс _lang.php).Следующий код содержит некоторые примеры записей для содержания нашего языкового файла:

<?php 
$lang["msg_first_name"] = "First Name"; 
$lang["msg_last_name"] = "Last Name"; 
$lang["msg_dob"] = "Date of Birth"; 
$lang["msg_address"] = "Address"; 

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

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

Загрузка языковых файлов

Даже если мы создаем языковые файлы, они не являются эффективными, пока мы не загружать их внутри контроллеров. Следующий код показывает, как мы можем загрузить файлы внутри контроллера:

<?php 
class TestLanguage extends CI_Controller 
{ 
    public function __construct() { 
     parent::__construct();  
     $this->lang->load("message","english"); 
    } 

    function index() { 
     $data["language_msg"] = $this->lang->line("msg_hello_english"); 
     $this->load->view('language_view', $data); 
    } 
} 

Мы обычно работаем с языковыми файлами внутри контроллеров и представлений (используя языковые файлы внутри модели не такая хорошая вещь). Здесь мы использовали конструктор контроллера для загрузки языкового файла, чтобы его можно было использовать во всем классе, а затем ссылаемся на него в методе класса (index).

Первым параметром метода lang-> load() будет имя файла языка без суффикса _lang. Второй параметр, который является необязательным, - это языковой каталог. Он укажет на язык по умолчанию в вашем конфиге, если он здесь не указан.

Мы можем напрямую ссылаться на записи языкового файла с помощью метода lang-> line() и назначать его для возврата к данным, переданным в шаблоны представления. Внутри представления мы можем использовать вышеуказанное языковое сообщение в виде $ language_msg.

Может случиться так, что нам нужно загрузить языковые файлы непосредственно из представлений. Например, использование элементов языка для ярлыков форм может считаться хорошей причиной для прямой загрузки и доступа к сообщениям внутри представлений. Можно использовать один и тот же метод доступа для этих файлов внутри представлений как внутри контроллеров.

<?php 
$this->lang->line("msg_hello_english"); 

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

<?php 
lang("msg_view_english"); 

Это в основном все, что вам нужно знать, чтобы начать работу с языковыми файлами CodeIgniter. Но даже если это достаточно просто, ненужно и дублировать усилия для загрузки необходимых языковых файлов в каждый из контроллеров, особенно если ваш проект содержит сотни классов. К счастью, мы можем использовать перехватчики CodeIgniter для создания быстрого и эффективного решения для загрузки языковых файлов автоматически для каждого контроллера.

Назначение Язык Загрузка Ответственность перед Крюки

CodeIgniter называет несколько встроенных крюков, как часть процесса исполнения. Полный список крючков можно найти в руководстве пользователя. Мы будем использовать hook post_controller_constructor, который вызывается сразу после создания нашего контроллера и перед любыми другими вызовами метода.

Включить перехваты в нашем приложении, установив параметр enable_hooks в основной файл конфигурации.

<?php 
$config['enable_hooks'] = TRUE; 

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

<?php 
    $hook['post_controller_constructor'] = array(
     'class' => 'LanguageLoader', 
     'function' => 'initialize', 
     'filename' => 'LanguageLoader.php', 
     'filepath' => 'hooks' 
    ); 

Это определяет крючок и предоставляет информацию, необходимую для выполнения Это. Фактическая реализация будет создана в пользовательском классе внутри каталога application/hooks.

<?php 
class LanguageLoader 
{ 
    function initialize() { 
     $ci =& get_instance(); 
     $ci->load->helper('language'); 
     $ci->lang->load('message','english'); 
    } 
} 

В здесь мы не имеем доступа к библиотеке языка, используя $ this-> Ланг, так что нам нужно, чтобы получить экземпляр объекта CI с помощью функции get_instance(), а затем мы загружаем язык как мы сделали это раньше. Теперь языковой файл будет доступен для каждого контроллера нашего приложения без необходимости вручную загружать его внутри контроллеров.

Переключения между различными языками

После того, как мы установили поддержку нескольких языков, ссылка для каждого языка может быть предоставлена ​​пользователем, как правило, в одном из меню нашего приложения, которые пользователи могут нажать и переключатель язык. Значение сеанса или файла cookie может использоваться для отслеживания активного языка.

Давайте посмотрим, как мы можем управлять переключением языков, используя класс крючков, который мы создали ранее. Сначала нам нужно создать класс для переключения языка; мы будем использовать отдельный контроллер для этого, как показано ниже:

<?php 
class LangSwitch extends CI_Controller 
{ 
    public function __construct() { 
     parent::__construct(); 
     $this->load->helper('url'); 
    } 

    function switchLanguage($language = "") { 
     $language = ($language != "") ? $language : "english"; 
     $this->session->set_userdata('site_lang', $language); 
     redirect(base_url()); 
    } 
} 

Затем нам нужно определить ссылки для переключения каждого из доступных языков.

<a href='<?php echo $base_url; ?>langswitch/switchLanguage/english'>English</a> 
<a href='<?php echo $base_url; ?>langswitch/switchLanguage/french'>French</a> 

Всякий раз, когда пользователь выбирает конкретный язык, метод switchLanguage() класса LangSwitch задаст выбранные языки сессии и перенаправляет пользователя на главную страницу.

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

<?php 
class LanguageLoader 
{ 
    function initialize() { 
     $ci =& get_instance(); 
     $ci->load->helper('language'); 

     $site_lang = $ci->session->userdata('site_lang'); 
     if ($site_lang) { 
      $ci->lang->load('message',$ci->session->userdata('site_lang')); 
     } else { 
      $ci->lang->load('message','english'); 
     } 
    } 
} 

Внутри класса LanguageLoader мы получаем активный язык и загрузить необходимые языковые файлы, или мы загружаем язык по умолчанию, если ключ сеанса отсутствует. Мы можем загружать несколько языковых файлов одного языка внутри этого класса. ref: http://www.sitepoint.com/multi-language-support-in-codeigniter/

Смежные вопросы