Лучший способ сделать многоязычный веб-сайт 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.
Ответ 8
Следуйте этим https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
прост и понятен, также проверьте документ @http://ellislab.com/codeigniter/user-guide/libraries/language.html
его путь проще, чем
Ответ 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'
Теперь сохраните и запустите приложение. Он работал нормально.