Auto detect language and redirect user

后端 未结 5 1448
孤街浪徒
孤街浪徒 2020-12-13 21:05

I am doing my own website and I managed to write some code that makes directs user to the language version according to the browser\'s language. Here is the script:

相关标签:
5条回答
  • 2020-12-13 21:41

    That should work fine. You could also use http_negotiate_language and discusses here

    0 讨论(0)
  • 2020-12-13 21:44

    PHP 5.3.0+ comes with locale_accept_from_http() which gets the preferred language from the Accept-Language header.

    You should always prefer this method to a self-written method as the header field is more complicated than one might think. (It's a list of weighted preferences.)

    You should retrieve the language like this:

    $lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

    But even then, you won't just have en for every English user and es for Spanish ones. It can become much more difficult than that, and things like es-ES and es-US are standard.

    This means you should iterate over a list of regular expressions that you try and determine the page language that way. See PHP-I18N for an example.

    0 讨论(0)
  • 2020-12-13 21:50

    I think your idea is great. May be help you shortest code:

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    header("location: ".$lang."/index.php");
    
    0 讨论(0)
  • 2020-12-13 21:59

    Well, I came across some problems with my code which is no surprise due to I am not a PHP expert. I kept therefore on searching for a possible solution and I found the following code on another website:

    <?php
        // Initialize the language code variable
    $lc = ""; 
        // Check to see that the global language server variable isset()
        // If it is set, we cut the first two characters from that string
    if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
        $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    
        // Now we simply evaluate that variable to detect specific languages
    if($lc == "fr"){
        header("location: index_french.php");
        exit();
    } else if($lc == "de"){
        header("location: index_german.php");
        exit();
    }
    else{ // don't forget the default case if $lc is empty
        header("location: index_english.php");
        exit();
    }
    ?>
    

    This did the job perfectly! I only had a problem left. There was no way to change language, even with direct links into another language because as soon as the page was loading, the php block would redirect me to the borwser's language. This can be a problem if you are living in another country and have for instance Swedish as a mother language but you have your browser in English because you bought your computer in the UK.

    So my solution for this issue was to create folders with a duplicate version for every language (even the one for the main language) without this php code on the index.html (and therefore not index.php). So now my website is auto detecting the language and the user also has the option to change it manually in case of they want!

    Hope it will help out someone else with the same problem!

    0 讨论(0)
  • 2020-12-13 22:01

    Most useful this code

        $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    if(file_exists('system/lang/'.$lang.'.php'))
    {
        include('system/lang/'.$lang.'.php');
    }else{
        include('system/lang/en.php'); //set default lang here if not exists translated language in ur system
        }
    
    0 讨论(0)
提交回复
热议问题