Лучший способ сделать многоязычный веб-сайт codeigniter. вызов из lang-массивов зависит от сеанса lang?

Я изучаю часы и часы, но я не мог найти четкого и эффективного способа сделать это:/

У меня есть базовый сайт codeigniter на английском языке, и теперь я должен добавить польский язык. Каков наилучший способ сделать мой сайт на двух языках в зависимости от выбора посетителя?

Есть ли способ создать файлы массивов для каждого языка и вызвать их в файлах просмотра, зависит от выбора сеанса из lang? Я не хочу использовать базу данных.

Ценить помогает! У меня заканчивается срок:/thanks!!

Ответ 1

Вы видели Библиотеку языков CodeIgniter?

Класс языка предоставляет функции для извлечения языковых файлов и строк текста для целей интернационализации.

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

Языковые файлы обычно хранятся в ваш системный/языковой каталог. вперемежку вы можете создать папку с названием языка внутри папки приложений и хранилища их там. CodeIgniter будет выглядеть первым в вашем каталоге приложений/языков. Если каталог не существует или указанный язык не находится там CI вместо этого посмотрит ваш глобальный system/language.

В вашем случае...

  • вам нужно создать polish_lang.php и english_lang.php внутри application/language/polish
  • затем создайте свои ключи внутри этого файла (например, $lang['hello'] = "Witaj";
  • затем загрузите его в контроллер, например $this->lang->load('polish_lang', 'polish');
  • затем выберите строку, как $this->lang->line('hello'); Просто сохраните возвращаемое значение этой функции в переменной, чтобы вы могли использовать ее в своем представлении.

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

Ответ 2

Также, чтобы добавить язык к сеансу, я бы определил некоторые константы для каждого языка, а затем убедитесь, что у вас есть библиотека сеансов, загружаемая в config/autoload.php, или загружайте ее, когда вам это нужно. Добавьте желаемый язык в сеанс:

$this->session->set_userdata('language', ENGLISH);

Затем вы можете захватить его в любое время следующим образом:

$language = $this->session->userdata('language');

Ответ 3

В контроллере добавьте следующие строки, когда вы создаете cunstructor

i.e, после

Родитель:: Контроллер();

добавить строки ниже

    $this->load->helper('lang_translate');
    $this->lang->load('nl_site', 'nl'); // ('filename', 'directory')

создайте вспомогательный файл lang_translate_helper.php со следующей функцией и поместите его в каталог system\application\helpers

function label($label, $obj)
{
    $return = $obj->lang->line($label);
    if($return)
        echo $return;
    else
        echo $label;
}

для каждого языка, создайте каталог с аббревиатурой языка, например en, nl, fr и т.д., под Система\приложения\Языки

создать языковой файл в каталоге выше (соответствующий), который будет содержать массив $lang, удерживающий пары label = > language_value, как указано ниже

nl_site_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';

en_site_lang.php

$lang['welcome'] = 'Welcome';
$lang['hello word'] = 'Hello Word';

вы можете хранить несколько файлов для одного и того же языка по-разному в соответствии с требованием например, если вы хотите использовать отдельный языковой файл для управления бэкэнд (раздел администратора), вы можете использовать его в контроллере как $this- > lang- > load ('nl_admin', 'nl');

nl_admin_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';

и, наконец, для печати ярлыка на нужном языке, метки доступа, как показано ниже,

label ('welcome', $this);

ИЛИ

label ('hello word', $this);

Обратите внимание на пространство в приветствии и слово, которое вы можете использовать так же, как и так:)

Если в языковом файле нет значка, он просто распечатает его, что вы передали в метку функции.

Ответ 4

Второй ответ Рэнделла.

Однако всегда можно интегрировать GeoIP, например http://www.maxmind.com/app/php или http://www.ipinfodb.com/. Затем вы можете сохранить результаты с помощью класса сеанса codeigniter.

Если вы хотите использовать ipinfodb.com api, вы можете добавить файл ip2locationlite.class.php в папку библиотеки приложений codeigniter, а затем создать модельную функцию для выполнения любой геоинформационной логики, необходимой для вашего приложения, например:

function geolocate()
{
    $ipinfodb = new ipinfodb;
    $ipinfodb->setKey('API KEY');

    //Get errors and locations
    $locations = $ipinfodb->getGeoLocation($this->input->ip_address());
    $errors = $ipinfodb->getError();

   //Set geolocation cookie
   if(empty($errors))
   {
       foreach ($locations as $field => $val):
            if($field === 'CountryCode')
            {
                $place = $val;
            }
       endforeach;
   }
   return $place;
}

Ответ 5

Для упрощения использования CI обновил это, поэтому вы можете просто использовать

$this->load->helper('language');

и перевести текст

lang('language line');

и если вы хотите деформировать его внутри метки, используйте необязательный параметр

lang('language line', 'element id');

Это приведет к выводу

// becomes <label for="form_item_id">language_key</label>

Для хорошего чтения http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html

Ответ 6

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

Вы можете импортировать существующие языковые файлы (в массиве PHP, PHP Define, ini, po или .strings) или создавать свои собственные разделы с нуля и добавлять контент непосредственно через систему.

Строка абсолютно бесплатна, поэтому, пожалуйста, проверьте ее и сообщите нам, что вы думаете.

Он действительно построен на Codeigniter тоже! Проверьте бета-версию на http://mygengo.com/string

Ответ 7

Я использовал Wiredesignz MY_Language класс с большим успехом.

Я только что опубликовал его на github, так как я не могу найти его в любом месте.

https://github.com/meigwilym/CI_Language

Мое единственное изменение - переименовать класс в CI_Lang в соответствии с новыми изменениями v2.

Ответ 9

Я использую такой код в config.php:

$lang = 'ru'; // this language will be used if there is no any lang information from useragent (for example, from command line, wget, etc...

if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
$tmp_value = $_COOKIE['language'];
if (!empty($tmp_value)) $lang = $tmp_value;
switch ($lang)
{
    case 'ru':
        $config['language'] = 'russian';
        setlocale(LC_ALL,'ru_RU.UTF-8'); 
        break;
        case 'uk':
        $config['language'] = 'ukrainian';
        setlocale(LC_ALL,'uk_UA.UTF-8'); 
                break;
        case 'foo':
        $config['language'] = 'foo';
        setlocale(LC_ALL,'foo_FOO.UTF-8'); 
                break;
        default:
        $config['language'] = 'english';
        setlocale(LC_ALL,'en_US.UTF-8'); 
        break;
}

.... а затем я использую обычный внутренний механизм CI

o, почти забыть! в представлениях я использую кнопки, которые устанавливают язык cookie с языком, предпочитаемый пользователем.

Итак, сначала этот код пытается обнаружить "предпочтительный язык", установленный в UserAgent пользователя (браузере). Затем код попытается прочитать язык cookie. И finaly - переключатель устанавливает язык для CI-приложения

Ответ 10

вы можете сделать такую ​​функцию

function translateTo($language, $word) {  
   define('defaultLang','english');  
   if (isset($lang[$language][$word]) == FALSE)  
      return $lang[$language][$word];  
   else  
      return $lang[defaultLang][$word];  
}

Ответ 11

Друг, не волнуйтесь, если у вас установлено какое-либо приложение, встроенное в codeigniter, и вы хотите добавить некоторый языковой пакет, просто выполните следующие действия:

1. Добавить языковые файлы в папке application/language/arabic (я добавляю арабский язык в sma2, встроенный в ci)

2. Перейдите в файл с именем setting.php в приложении /modules/settings/views/setting.php. Здесь вы найдете массив

<?php /*

 $lang = array (
  'english' => 'English',

  'arabic' => 'Arabic',  // i add this here

  'spanish' => 'Español'

Теперь сохраните и запустите приложение. Он работал нормально.