Welcome Guest, Not a member yet? Register   Sign In
URI Language Identifier with default language
#1

[eluser]Unknown[/eluser]
So I've put up this multilang site with URI Language Identifier (https://github.com/EllisLab/CodeIgniter/...Identifier) and it is working great. I have one problem though. Default language is finnish (fi) and I don't want it to show in the URI. This is how I'd like it to work:

domain.com/contact
AND
domain.com/en/contact

I know there is $config['lang_ignore'] but it applies to both languages so it is not working in my case. Can anybody help with this?
#2

[eluser]Unknown[/eluser]
OK. Here is how I got this working:

MY_Lang.php
Code:
<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
/**
* Language Identifier
*
* Adds a language identifier prefix to all site_url links
*
* @copyright     Copyright (c) 2011 Wiredesignz
* @version         0.29
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
class MY_Lang extends CI_Lang
{
    function __construct()
    {

        global $URI, $CFG, $IN;

        $config =& $CFG->config;

        $index_page = $config['index_page'];
        $default_abbr = $config['language_abbr'];
        $lang_uri_abbr = $config['lang_uri_abbr'];

        /* get the language abbreviation from uri */
        $uri_abbr = $URI->segment(1);

        /* adjust the uri string leading slash */
        $URI->uri_string = preg_replace("|^\/?|", '/', $URI->uri_string);

        if (isset($lang_uri_abbr[$uri_abbr])) {

            /* set the language_abbreviation cookie */
            $IN->set_cookie('user_lang', $uri_abbr, $config['sess_expiration']);

        } else {

            /* get the language_abbreviation from cookie */
            $lang_abbr = $IN->cookie($config['cookie_prefix'] . 'user_lang');

        }

        if (strlen($uri_abbr) == 2) {

            /* reset the uri identifier */
            $index_page .= empty($index_page) ? '' : '/';

            /* remove the invalid abbreviation */
            if($uri_abbr == $config['language_abbr'])
            {
                $URI->uri_string = preg_replace("|^\/?$uri_abbr\/?|", '', $URI->uri_string);
                /* 301 redirect for default lang */
                header('Location: ' . $config['base_url'] . $index_page . $URI->uri_string, TRUE, 301);

                exit;
            }
            else
            {
                /* set the language abbreviation */
                $lang_abbr = $uri_abbr;
            }
        }

        /* check validity against config array */
        if (isset($lang_uri_abbr[$uri_abbr])) {

            /* reset uri segments and uri string */
            $URI->_reindex_segments(array_shift($URI->segments));
            $URI->uri_string = preg_replace("|^\/?$lang_abbr|", '', $URI->uri_string);

            /* set config language values to match the user language */
            $config['language'] = $lang_uri_abbr[$lang_abbr];
            $config['language_abbr'] = $lang_abbr;

            /* set the language_abbreviation cookie */
            $IN->set_cookie('user_lang', $lang_abbr, $config['sess_expiration']);

        } else {

            /* set the language_abbreviation cookie */
            $IN->set_cookie('user_lang', $default_abbr, $config['sess_expiration']);
        }

        log_message('debug', "Language_Identifier Class Initialized");
    }
}

/* translate helper */
function t($line)
{
    global $LANG;
    return ($t = $LANG->line($line)) ? $t : $line;
}

config.php (only the relevant part of it)
Code:
$config['language'] = "finnish";

/* default language abbreviation */
$config['language_abbr'] = "fi";

/* set available language abbreviations */
$config['lang_uri_abbr'] = array("fi" => "finnish", "en" => "english");

/* this is not used so you can leave it out */
$config['lang_ignore'] = TRUE;

Now the default language won't be displayed in the URI.

EDIT: Fixed the code




Theme © iAndrew 2016 - Forum software by © MyBB