Я исследую часы и часы, но я не нашел четкого и эффективного способа сделать это: /
У меня есть базовый веб-сайт codeigniter на английском языке, и теперь мне нужно добавить польский язык. Как лучше всего сделать мой сайт на двух языках в зависимости от выбора посетителей?
Есть ли способ создать файлы массивов для каждого языка и вызвать их в файлах просмотра, в зависимости от сеанса от выбора языка? Я не хочу использовать базу данных.
Цените помощь! Срок истекает: / спасибо !!
arrays
session
codeigniter
multilingual
дизайнер пытается-кодировать
источник
источник
Ответы:
Вы видели языковую библиотеку CodeIgniter ?
В твоем случае...
polish_lang.php
иenglish_lang.php
внутриapplication/language/polish
$lang['hello'] = "Witaj";
$this->lang->load('polish_lang', 'polish');
$this->lang->line('hello');
просто сохраните возвращаемое значение этой функции в переменной, чтобы вы могли использовать ее в своем представлении.Повторите шаги для английского языка и всех других языков, которые вам нужны.
источник
Кроме того, чтобы добавить язык в сеанс, я бы определил некоторые константы для каждого языка, а затем убедитесь, что у вас есть библиотека сеанса, автоматически загруженная в config / autoload.php, или вы загружаете ее, когда она вам нужна. Добавьте к сеансу желаемый язык:
$this->session->set_userdata('language', ENGLISH);
Тогда вы можете взять его в любое время вот так:
$language = $this->session->userdata('language');
источник
В контроллере добавьте следующие строки, когда вы сделаете cunstructor
то есть после
родитель :: Контроллер ();
добавить строки ниже
$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 и т. д., в system \ application \ languages
создать языковой файл в указанном выше (соответствующем) каталоге, который будет содержать массив $ 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_admin_lang.php
$lang['welcome'] = 'Welkom'; $lang['hello word'] = 'worde Witaj';
и, наконец, чтобы распечатать этикетку на желаемом языке, откройте этикетки, как показано ниже.
label ('добро пожаловать', $ this);
ИЛИ ЖЕ
label ('привет, слово', $ this);
обратите внимание на пробел в hello & word, вы можете использовать его так же :)
если в языковом файле не определена метка, он просто напечатает то, что вы передали метке функции.
источник
Я второй за ответ Рэнделла.
Однако всегда можно интегрировать GeoIP, например http://www.maxmind.com/app/php или http://www.ipinfodb.com/ . Затем вы можете сохранить результаты с помощью класса сеанса codeigniter.
Если вы хотите использовать api ipinfodb.com, вы можете добавить файл 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; }
источник
Для упрощения использования 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
источник
Я с большим успехом использовал класс MY_Language Wiredesignz.
Я только что опубликовал его на github, так как нигде не могу найти его следов.
https://github.com/meigwilym/CI_Language
Мои единственные изменения - переименовать класс в CI_Lang в соответствии с новыми изменениями v2.
источник
При управлении фактическими файлами все может довольно легко рассинхронизироваться, если вы не проявляете особой бдительности. Итак, мы запустили (бета) бесплатный сервис под названием String которая позволяет вам легко отслеживать свои языковые файлы и сотрудничать с переводчиками.
Вы можете либо импортировать существующие языковые файлы (в форматах PHP array, PHP Define, ini, po или .strings), либо создавать свои собственные разделы с нуля и добавлять контент непосредственно через систему.
String абсолютно бесплатен, поэтому, пожалуйста, проверьте его и расскажите, что вы думаете.
На самом деле он тоже построен на Codeigniter! Ознакомьтесь с бета-версией на http://mygengo.com/string
источник
Следуйте этому https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
это просто и понятно, также ознакомьтесь с документом @ http://ellislab.com/codeigniter/user-guide/libraries/language.html
его путь проще, чем
источник
Я использую такой код в 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
о, почти забыть! в представлениях я использую кнопки, которые устанавливают "язык" cookie с языком, предпочитаемым пользователем.
Итак, сначала этот код пытается определить "предпочтительный язык", установленный в пользовательском агенте (браузере). Затем код пытается прочитать "язык" cookie. И наконец - переключатель устанавливает язык для CI-приложения
источник
вы можете сделать такую функцию
function translateTo($language, $word) { define('defaultLang','english'); if (isset($lang[$language][$word]) == FALSE) return $lang[$language][$word]; else return $lang[defaultLang][$word]; }
источник
isset($lang[$language][$word]) == FALSE
было бы достаточноisset($lang[$language][$word])
, потому что isset возвращает только true и false. И в-третьих, когда вы оцениваете, является ли что-то ложным, ВСЕГДА используйте===
для проверки типа .Друг, не волнуйтесь, если у вас установлено приложение, встроенное в codeigniter, и вы хотите добавить языковой пакет, просто выполните следующие действия:
1. Добавьте языковые файлы в папку application / language / arabic (я добавляю арабский язык в sma2, встроенный в ci)
2. Перейдите к файлу с именем
setting.php
в application / modules / settings / views / setting.php . Здесь вы найдете массив<?php /* $lang = array ( 'english' => 'English', 'arabic' => 'Arabic', // i add this here 'spanish' => 'Español'
Теперь сохраните и запустите приложение. Работает нормально.
источник
setting.php
если вы использовали какую-либо библиотеку или помощник, пожалуйста, сначала поделитесь им.