Avatar billede weblance Nybegynder
25. september 2007 - 17:52 Der er 16 kommentarer og
1 løsning

Kan man finde ud af hvor brugeren stammer fra?

Jeg kunne godt tænke mig at lave en hjemmeside der automatisk skrifter sprog alt efter om brugeren er dansk, engelsk eller tysk. Kan man det? Måske ved at undersøge hvilket sprog brugerens browser er på eller noget andet??

/Carl
Avatar billede olebole Juniormester
25. september 2007 - 18:00 #1
Avatar billede jakobdo Ekspert
25. september 2007 - 18:04 #2
Enten skal du kigge på noget geoip eller også skal du kigge på get_browser() (dette kræver browsecap.ini) eller kigge på variablen: $_SERVER["HTTP_ACCEPT_LANGUAGE"].
Avatar billede weblance Nybegynder
25. september 2007 - 18:08 #3
Jeg kan faktisk best li' HTTP_ACCEPT_LANGUAGE.

Men hvad med google? Hvilket sprog finder de? Jeg er selvfølgelig interesseret i at en google bruger fra tyskland, england eller frankrig kan finde siden.
Avatar billede weblance Nybegynder
25. september 2007 - 18:11 #4
eller er det bedst at have en index side der finder ud af sproget og videresender til en undermappe med det rigtige sprog?
Avatar billede weblance Nybegynder
25. september 2007 - 18:52 #5
Fandt dette script:

<?php
/*
Script Name: Full Operating system language detection
Author: Harald Hope, Website: http://techpatterns.com/
Script Source URI: http://techpatterns.com/downloads/php_language_detection.php
Version 0.3.4
Copyright (C) 29 June 2007

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Get the full text of the GPL here: http://www.gnu.org/licenses/gpl.txt

Coding conventions:
http://cvs.sourceforge.net/viewcvs.py/phpbb/phpBB2/docs/codingstandards.htm?rev=1.3
*/
/******************************************
this will return an array composed of a 4 item array for each language the os supports
1. full language abbreviation, like en-ca
2. primary language, like en
3. full language string, like English (Canada)
4. primary language string, like English
*******************************************/

// choice of redirection header or just getting language data
// to call this you only need to use the $feature parameter
function get_languages( $feature, $spare='' )
{
    // get the languages
    $a_languages = languages();
    $index = '';
    $complete = '';
    $found = false;// set to default value
    //prepare user language array
    $user_languages = array();

    //check to see if language is set
    if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
    {
        //explode languages into array
        $languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
        $languages = explode( ",", $languages );

        foreach ( $languages as $language_list )
        {
            // pull out the language, place languages into array of full and primary
            // string structure:
            $temp_array = array();
            // slice out the part before ; on first step, the part before - on second, place into array
            $temp_array[0] = substr( $language_list, 0, strcspn( $language_list, ';' ) );//full language
            $temp_array[1] = substr( $language_list, 0, 2 );// cut out primary language
            //place this array into main $user_languages language array
            $user_languages[] = $temp_array;
        }

        //start going through each one
        for ( $i = 0; $i < count( $user_languages ); $i++ )
        {
            foreach ( $a_languages as $index => $complete )
            {
                if ( $index == $user_languages[$i][0] )
                {
                    // complete language, like english (canada)
                    $user_languages[$i][2] = $complete;
                    // extract working language, like english
                    $user_languages[$i][3] = substr( $complete, 0, strcspn( $complete, ' (' ) );
                }
            }
        }
    }
    else// if no languages found
    {
        $user_languages[0] = array( '','','','' ); //return blank array.
    }

    // return parameters
    if ( $feature == 'data' )
    {
        return $user_languages;
    }

    // this is just a sample, replace target language and file names with your own.
    elseif ( $feature == 'header' )
    {
        switch ( $user_languages[0][1] )// get default primary language, the first one in array that is
        {
            case 'da':
                $location = '/dansk';
                $found = true;
                break;
            case 'de':
                $location = '/deutsch';
                $found = true;
                break;
            default:
                break;
        }
        if ( $found )
        {
            header("Location: $location");
        }
        else// make sure you have a default page to send them to
        {
            header("Location: /english");
        }
    }
}

function languages()
{
// pack abbreviation/language array
// important note: you must have the default language as the last item in each major language, after all the
// en-ca type entries, so en would be last in that case
    $a_languages = array(
    'af' => 'Afrikaans',
    'sq' => 'Albanian',
    'ar-dz' => 'Arabic (Algeria)',
    'ar-bh' => 'Arabic (Bahrain)',
    'ar-eg' => 'Arabic (Egypt)',
    'ar-iq' => 'Arabic (Iraq)',
    'ar-jo' => 'Arabic (Jordan)',
    'ar-kw' => 'Arabic (Kuwait)',
    'ar-lb' => 'Arabic (Lebanon)',
    'ar-ly' => 'Arabic (libya)',
    'ar-ma' => 'Arabic (Morocco)',
    'ar-om' => 'Arabic (Oman)',
    'ar-qa' => 'Arabic (Qatar)',
    'ar-sa' => 'Arabic (Saudi Arabia)',
    'ar-sy' => 'Arabic (Syria)',
    'ar-tn' => 'Arabic (Tunisia)',
    'ar-ae' => 'Arabic (U.A.E.)',
    'ar-ye' => 'Arabic (Yemen)',
    'ar' => 'Arabic',
    'hy' => 'Armenian',
    'as' => 'Assamese',
    'az' => 'Azeri',
    'eu' => 'Basque',
    'be' => 'Belarusian',
    'bn' => 'Bengali',
    'bg' => 'Bulgarian',
    'ca' => 'Catalan',
    'zh-cn' => 'Chinese (China)',
    'zh-hk' => 'Chinese (Hong Kong SAR)',
    'zh-mo' => 'Chinese (Macau SAR)',
    'zh-sg' => 'Chinese (Singapore)',
    'zh-tw' => 'Chinese (Taiwan)',
    'zh' => 'Chinese',
    'hr' => 'Croatian',
    'cs' => 'Czech',
    'da' => 'Danish',
    'div' => 'Divehi',
    'nl-be' => 'Dutch (Belgium)',
    'nl' => 'Dutch (Netherlands)',
    'en-au' => 'English (Australia)',
    'en-bz' => 'English (Belize)',
    'en-ca' => 'English (Canada)',
    'en-ie' => 'English (Ireland)',
    'en-jm' => 'English (Jamaica)',
    'en-nz' => 'English (New Zealand)',
    'en-ph' => 'English (Philippines)',
    'en-za' => 'English (South Africa)',
    'en-tt' => 'English (Trinidad)',
    'en-gb' => 'English (United Kingdom)',
    'en-us' => 'English (United States)',
    'en-zw' => 'English (Zimbabwe)',
    'en' => 'English',
    'us' => 'English (United States)',
    'et' => 'Estonian',
    'fo' => 'Faeroese',
    'fa' => 'Farsi',
    'fi' => 'Finnish',
    'fr-be' => 'French (Belgium)',
    'fr-ca' => 'French (Canada)',
    'fr-lu' => 'French (Luxembourg)',
    'fr-mc' => 'French (Monaco)',
    'fr-ch' => 'French (Switzerland)',
    'fr' => 'French (France)',
    'mk' => 'FYRO Macedonian',
    'gd' => 'Gaelic',
    'ka' => 'Georgian',
    'de-at' => 'German (Austria)',
    'de-li' => 'German (Liechtenstein)',
    'de-lu' => 'German (lexumbourg)',
    'de-ch' => 'German (Switzerland)',
    'de' => 'German (Germany)',
    'el' => 'Greek',
    'gu' => 'Gujarati',
    'he' => 'Hebrew',
    'hi' => 'Hindi',
    'hu' => 'Hungarian',
    'is' => 'Icelandic',
    'id' => 'Indonesian',
    'it-ch' => 'Italian (Switzerland)',
    'it' => 'Italian (Italy)',
    'ja' => 'Japanese',
    'kn' => 'Kannada',
    'kk' => 'Kazakh',
    'kok' => 'Konkani',
    'ko' => 'Korean',
    'kz' => 'Kyrgyz',
    'lv' => 'Latvian',
    'lt' => 'Lithuanian',
    'ms' => 'Malay',
    'ml' => 'Malayalam',
    'mt' => 'Maltese',
    'mr' => 'Marathi',
    'mn' => 'Mongolian (Cyrillic)',
    'ne' => 'Nepali (India)',
    'nb-no' => 'Norwegian (Bokmal)',
    'nn-no' => 'Norwegian (Nynorsk)',
    'no' => 'Norwegian (Bokmal)',
    'or' => 'Oriya',
    'pl' => 'Polish',
    'pt-br' => 'Portuguese (Brazil)',
    'pt' => 'Portuguese (Portugal)',
    'pa' => 'Punjabi',
    'rm' => 'Rhaeto-Romanic',
    'ro-md' => 'Romanian (Moldova)',
    'ro' => 'Romanian',
    'ru-md' => 'Russian (Moldova)',
    'ru' => 'Russian',
    'sa' => 'Sanskrit',
    'sr' => 'Serbian',
    'sk' => 'Slovak',
    'ls' => 'Slovenian',
    'sb' => 'Sorbian',
    'es-ar' => 'Spanish (Argentina)',
    'es-bo' => 'Spanish (Bolivia)',
    'es-cl' => 'Spanish (Chile)',
    'es-co' => 'Spanish (Colombia)',
    'es-cr' => 'Spanish (Costa Rica)',
    'es-do' => 'Spanish (Dominican Republic)',
    'es-ec' => 'Spanish (Ecuador)',
    'es-sv' => 'Spanish (El Salvador)',
    'es-gt' => 'Spanish (Guatemala)',
    'es-hn' => 'Spanish (Honduras)',
    'es-mx' => 'Spanish (Mexico)',
    'es-ni' => 'Spanish (Nicaragua)',
    'es-pa' => 'Spanish (Panama)',
    'es-py' => 'Spanish (Paraguay)',
    'es-pe' => 'Spanish (Peru)',
    'es-pr' => 'Spanish (Puerto Rico)',
    'es-us' => 'Spanish (United States)',
    'es-uy' => 'Spanish (Uruguay)',
    'es-ve' => 'Spanish (Venezuela)',
    'es' => 'Spanish (Traditional Sort)',
    'sx' => 'Sutu',
    'sw' => 'Swahili',
    'sv-fi' => 'Swedish (Finland)',
    'sv' => 'Swedish',
    'syr' => 'Syriac',
    'ta' => 'Tamil',
    'tt' => 'Tatar',
    'te' => 'Telugu',
    'th' => 'Thai',
    'ts' => 'Tsonga',
    'tn' => 'Tswana',
    'tr' => 'Turkish',
    'uk' => 'Ukrainian',
    'ur' => 'Urdu',
    'uz' => 'Uzbek',
    'vi' => 'Vietnamese',
    'xh' => 'Xhosa',
    'yi' => 'Yiddish',
    'zu' => 'Zulu' );

    return $a_languages;
}
?>

Men det virker åbenbart kun i IE - kan det laves om til at virke i andre browsere?
Avatar billede weblance Nybegynder
25. september 2007 - 19:25 #6
Øhh . . . nu virker det slet ikke mere, men det har det. Hvordan kan det være?
Avatar billede jakobdo Ekspert
25. september 2007 - 19:39 #7
Når du skriver ikke virker?
Hvad mener du så?
Avatar billede weblance Nybegynder
25. september 2007 - 19:56 #8
Blank skærm.Det virkede til at starte med...

Men jeg har omskrevet og forenklet så det virker - også i forefox:

<?php

$findsprog = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]);

$sprog = explode(",", $findsprog);

switch ($sprog[0]) {
    case "da":
        header("Location: /dansk");
        break;
    case 'de':
        header("Location: /deutsch/");
        break;
    default:
        header("Location: /english/");
        break;
}
       
?>
Avatar billede olebole Juniormester
25. september 2007 - 19:59 #9
Man kan sagtens som ægypter sidde med software (browser og/eller styresystem), der påstår man er engelsktalende, så deeeeeeeet .......  :)
Avatar billede weblance Nybegynder
25. september 2007 - 20:15 #10
Ja, men jeg tror at det kommer til at virke efter hensigten. Er der nogen måde at checke det på? Eller skal jeg sidde med en maskine på et andet sprog?
Avatar billede jakobdo Ekspert
25. september 2007 - 20:23 #11
Du kan sætte det op i firefox!
Der kan man tilføje sprog f.eks. og slette andre.
Avatar billede weblance Nybegynder
25. september 2007 - 20:29 #12
Tak for hjælpen.

jakobde - send et svar så får du point. Det var din $_SERVER["HTTP_ACCEPT_LANGUAGE"] der ledte mig på rette spor!
Avatar billede weblance Nybegynder
07. marts 2008 - 21:49 #13
Send et svar jakobdo så jeg kan lukke tråden!
Avatar billede jakobdo Ekspert
08. marts 2008 - 07:44 #14
Svar!
Avatar billede weblance Nybegynder
08. marts 2008 - 13:36 #15
Takker
Avatar billede olebole Juniormester
08. marts 2008 - 14:28 #16
- tjah, så må jeg jo finde mig i, du ikke identificerer mig som værende dansker  :o|
Avatar billede jakobdo Ekspert
08. marts 2008 - 18:46 #17
takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB