the best way to make codeigniter website multi-language. calling from lang arrays depends on lang session?

后端 未结 11 1011
情深已故
情深已故 2020-11-27 10:34

I\'m researching hours and hours, but I could not find any clear, efficient way to make it :/

I have a codeigniter base website in English and I have to add a Polish

相关标签:
11条回答
  • 2020-11-27 11:08

    you can make a function like this

    function translateTo($language, $word) {  
       define('defaultLang','english');  
       if (isset($lang[$language][$word]) == FALSE)  
          return $lang[$language][$word];  
       else  
          return $lang[defaultLang][$word];  
    }
    
    0 讨论(0)
  • 2020-11-27 11:10

    I second Randell's answer.

    However, one could always integrate a GeoIP such as http://www.maxmind.com/app/php or http://www.ipinfodb.com/. Then you can save the results with the codeigniter session class.

    If you want to use the ipinfodb.com api You can add the ip2locationlite.class.php file to your codeigniter application library folder and then create a model function to do whatever geoip logic you need for your application, such as:

    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;
    }
    
    0 讨论(0)
  • 2020-11-27 11:12

    Also to add the language to the session, I would define some constants for each language, then make sure you have the session library autoloaded in config/autoload.php, or you load it whenever you need it. Add the users desired language to the session:

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

    Then you can grab it anytime like this:

    $language = $this->session->userdata('language');
    
    0 讨论(0)
  • 2020-11-27 11:13

    For easier use CI have updated this so you can just use

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

    and to translate text

    lang('language line');
    

    and if you want to warp it inside label then use optional parameter

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

    This will output

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

    For good reading http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html

    0 讨论(0)
  • 2020-11-27 11:14

    I am using such code in 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;
    }
    

    .... and then i'm using usualy internal mechanizm of CI

    o, almost forget! in views i using buttons, which seting cookie 'language' with language, prefered by user.

    So, first this code try to detect "preffered language" setted in user`s useragent (browser). Then code try to read cookie 'language'. And finaly - switch sets language for CI-application

    0 讨论(0)
  • 2020-11-27 11:15

    I've used Wiredesignz's MY_Language class with great success.

    I've just published it on github, as I can't seem to find a trace of it anywhere.

    https://github.com/meigwilym/CI_Language

    My only changes are to rename the class to CI_Lang, in accordance with the new v2 changes.

    0 讨论(0)
提交回复
热议问题