-
Notifications
You must be signed in to change notification settings - Fork 0
i18n Multi language Library Helper
Not finished yet!!!
[b]Multi-domain:[/b] http://domain.nl (dutch = nl) http://domain.com (english = en)
[b]Multi-language:[/b] http://domain.nl/en (default dutch = nl, override english = en) http://domain.com/nl (default english = en, override dutch = nl)
[b]Multi-segments:[/b] http://domain.nl/en/news (default dutch = nl, override english = en, english segments) http://domain.com/nl/nieuws (default english = en, override dutch = nl, dutch segments)
In this tutorial I use libraries, helpers, routes, configs, hooks, etc.
HMVC proof to use modules...
[b]Used ideas:[/b]
[url=http://maestric.com/doc/php/codeigniter_i18n]Internationalization (i18n) library by Jérôme Jaglale[/url] [url=http://codeigniter.com/wiki/URI_Language_Identifier/]URI Language Identifier by Wiredesignz[/url]
This library / helper uses the usual way CI stores language-files. Inside the [b]application[/b] folder a folder named [b]languages[/b]. Inside laguages the language folders (dutch english etc.) and inside the language folders the language-files. application/languages/dutch/urls_lang.php
[b]application/config/routes.php[/b]
[code]
// Urls start
$route['^mobiel|^handy|^movil|^cell(/:any)?'] = "mobile$1";
// Urls end
[/code]
The part "Urls" is only for the controllers. In my case I have a database with three tables:
Table "url_languages" > columns: lang_id, lang_ci, lang_cc Table "url_segments" > columns: urlseg_id, urlsec_first (bool), urlsec_line, urlsec_text Table "url_languages" > columns: urllang_id, urlseg_id, lang_id, urllang_text
And I will generate the routes and language-files automaticaly. Later more on this...
[b]application/config/config.php[/b]
[code]
[/code]
[b]application/languages/dutch/urls_lang.php[/b]
[code]
$lang['url_forum'] = "prikbord"; $lang['url_general'] = "algemeen";
[/code]
[b]application/languages/english/urls_lang.php[/b]
[code]
$lang['url_forum'] = "forum"; $lang['url_general'] = "general";
[/code]
When you begin coding the line "url_forum" without url_ is the same as text "forum". But later in your project when the line is used everywhere you can still change the text by simply change it in the language-file.
[b]application/helper/i18n_helper.php[/b]
[code]
function i18n_url ($item, $param = null) { $CI =& get_instance();
if (is_array($item))
{
$items = $item;
$segments = array();
foreach ($items as $item)
{
$line = $CI->lang->line('url_' . $item);
$segments[] = ($line == null) ? $item : $line;
}
$line = implode('/', $segments);
}
else if (stripos($item, '/'))
{
$items = explode('/', $item);
foreach ($items as $item)
{
$line = $CI->lang->line('url_' . $item);
$segments[] = ($line == null) ? $item : $line;
}
$line = implode('/', $segments);
}
else
{
$line = $CI->lang->line('url_' . $item);
if ($line == null)
{
$line = $item;
}
}
$line = site_url($line);
if ($param == null)
{
return $line;
}
else
{
if (is_array($param)) return vsprintf($line, $param); else return sprintf($line, $param);
}
}
[/code]
- i18n_url('forum')
- i18n_url('forum/general')
- i18n_url(array('forum','general'))
In dutch produces same as:
- site_url('prikbord')
- site_url('prikbord/algemeen')
- site_url('prikbord/algemeen')
In english produces same as:
- site_url('forum')
- site_url('forum/general')
- site_url('forum/general')
If a "segment" does not exist, the name used to call the segment is used.
- Original author: Derek Jones
- How to extend helpers: See User Guide
- Modified by: Thomas Stapleton (id, classes, selected country option and all option)
- Modified by: Bradley De-Lar (construct, setLayout example)