Phát hiện ngôn ngữ trình duyệt trong PHP


144

Tôi sử dụng đoạn mã PHP sau đây làm chỉ mục cho trang web của mình.

Tập lệnh này sẽ bao gồm một trang cụ thể tùy thuộc vào ngôn ngữ của trình duyệt (được phát hiện tự động).

Tập lệnh này không hoạt động tốt với tất cả các trình duyệt, do đó, nó luôn bao gồm index_en.phpmọi ngôn ngữ được phát hiện (nguyên nhân của sự cố có lẽ là vấn đề với một số tiêu đề Ngôn ngữ chấp nhận không được xem xét).

Bạn có thể vui lòng gợi ý cho tôi một giải pháp mạnh mẽ hơn?

<?php
// Open session var
session_start();
// views: 1 = first visit; >1 = second visit

// Detect language from user agent browser
function lixlpixel_get_env_var($Var)
{
     if(empty($GLOBALS[$Var]))
     {
         $GLOBALS[$Var]=(!empty($GLOBALS['_SERVER'][$Var]))?
         $GLOBALS['_SERVER'][$Var] : (!empty($GLOBALS['HTTP_SERVER_VARS'][$Var])) ? $GLOBALS['HTTP_SERVER_VARS'][$Var]:'';
     }
}

function lixlpixel_detect_lang()
{
     // Detect HTTP_ACCEPT_LANGUAGE & HTTP_USER_AGENT.
     lixlpixel_get_env_var('HTTP_ACCEPT_LANGUAGE');
     lixlpixel_get_env_var('HTTP_USER_AGENT');

     $_AL=strtolower($GLOBALS['HTTP_ACCEPT_LANGUAGE']);
     $_UA=strtolower($GLOBALS['HTTP_USER_AGENT']);

     // Try to detect Primary language if several languages are accepted.
     foreach($GLOBALS['_LANG'] as $K)
     {
         if(strpos($_AL, $K)===0)
         return $K;
     }

     // Try to detect any language if not yet detected.
     foreach($GLOBALS['_LANG'] as $K)
     {
         if(strpos($_AL, $K)!==false)
         return $K;
     }
     foreach($GLOBALS['_LANG'] as $K)
     {
         //if(preg_match("/[[( ]{$K}[;,_-)]/",$_UA)) // matching other letters (create an error for seo spyder)
         return $K;
     }

     // Return default language if language is not yet detected.
     return $GLOBALS['_DLANG'];
}

// Define default language.
$GLOBALS['_DLANG']='en';

// Define all available languages.
// WARNING: uncomment all available languages

$GLOBALS['_LANG'] = array(
'af', // afrikaans.
'ar', // arabic.
'bg', // bulgarian.
'ca', // catalan.
'cs', // czech.
'da', // danish.
'de', // german.
'el', // greek.
'en', // english.
'es', // spanish.
'et', // estonian.
'fi', // finnish.
'fr', // french.
'gl', // galician.
'he', // hebrew.
'hi', // hindi.
'hr', // croatian.
'hu', // hungarian.
'id', // indonesian.
'it', // italian.
'ja', // japanese.
'ko', // korean.
'ka', // georgian.
'lt', // lithuanian.
'lv', // latvian.
'ms', // malay.
'nl', // dutch.
'no', // norwegian.
'pl', // polish.
'pt', // portuguese.
'ro', // romanian.
'ru', // russian.
'sk', // slovak.
'sl', // slovenian.
'sq', // albanian.
'sr', // serbian.
'sv', // swedish.
'th', // thai.
'tr', // turkish.
'uk', // ukrainian.
'zh' // chinese.
);

// Redirect to the correct location.
// Example Implementation aff var lang to name file
/*
echo 'The Language detected is: '.lixlpixel_detect_lang(); // For Demonstration
echo "<br />";    
*/
$lang_var = lixlpixel_detect_lang(); //insert lang var system in a new var for conditional statement
/*
echo "<br />";    

echo $lang_var; // print var for trace

echo "<br />";    
*/
// Insert the right page iacoording with the language in the browser
switch ($lang_var){
    case "fr":
        //echo "PAGE DE";
        include("index_fr.php");//include check session DE
        break;
    case "it":
        //echo "PAGE IT";
        include("index_it.php");
        break;
    case "en":
        //echo "PAGE EN";
        include("index_en.php");
        break;        
    default:
        //echo "PAGE EN - Setting Default";
        include("index_en.php");//include EN in all other cases of different lang detection
        break;
}
?>

3
PHP 5.3.0+ đi kèm với locale_accept_from_http()ngôn ngữ được ưu tiên từ Accept-Languagetiêu đề. Bạn nên luôn luôn thích phương pháp này hơn một phương pháp tự viết. Kiểm tra kết quả dựa trên danh sách các biểu thức chính quy mà bạn thử và xác định ngôn ngữ trang theo cách đó. Xem PHP-I18N để biết ví dụ.
caw

2
Vấn đề với locale_accept_from_http()là bạn có thể không hỗ trợ kết quả tốt nhất mà nó trả về nên bạn vẫn tự phân tích tiêu đề để tìm ra kết quả tốt nhất tiếp theo .
Xeoncross

Câu trả lời được chấp nhận cho điều này nên được thay đổi thành một trong những ngôn ngữ có nhiều ngôn ngữ.
Pekka

bao gồm và yêu cầu đang xảy ra tại thời điểm biên dịch php, vì vậy về cơ bản, bạn bao gồm tất cả các chỉ mục * .php và chỉ hiển thị một - lãng phí nguồn tài nguyên
Michael

Câu trả lời:


361

tại sao bạn không giữ nó đơn giản và sạch sẽ

<?php
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    $acceptLang = ['fr', 'it', 'en']; 
    $lang = in_array($lang, $acceptLang) ? $lang : 'en';
    require_once "index_{$lang}.php"; 

?>

9
Mã ngôn ngữ của Hà Lan, Hy Lạp và Srilanka là một chữ cái. Có vẻ tốt hơn để phát nổ như thế này: php.net/manual/tr/reserved.variabled.server.php#90293
trante

10
@trante: Tại sao bạn nói họ là một chữ cái? Tiếng Hà Lan ( nl), tiếng Hy Lạp ( el) và tiếng Slovenia ( sl) dường như là hai chữ cái: msdn.microsoft.com/en-us/l Library / ms533052 (v = vs85) .aspx
Peter K.

16
Mã này không nhìn vào toàn bộ danh sách. Điều gì nếu pllà ưu tiên đầu tiên và frlà thứ hai trong danh sách ngôn ngữ của tôi? Tôi sẽ nhận được tiếng Anh thay vì tiếng Pháp.
Kos

24
Điều này thiếu phát hiện các ưu tiên và không tương thích với các mã khác với hai chữ cái
Áxel Costas Pena

3
Không có độ dài nào khác ngoài hai chữ cái! Đi vào trình duyệt yêu thích của bạn và thay đổi mức độ ưu tiên ngôn ngữ và bạn sẽ thấy nó.
Gigala

76

Ngôn ngữ chấp nhận là danh sách các giá trị có trọng số (xemtham số q ). Điều đó có nghĩa là chỉ nhìn vào ngôn ngữ đầu tiên không có nghĩa là nó cũng được ưa thích nhất; trong thực tế,giá trị q bằng 0 có nghĩa là không chấp nhận được.

Vì vậy, thay vì chỉ nhìn vào ngôn ngữ đầu tiên, hãy phân tích danh sách các ngôn ngữ được chấp nhận và các ngôn ngữ có sẵn và tìm kết quả phù hợp nhất:

// parse list of comma separated language tags and sort it by the quality value
function parseLanguageList($languageList) {
    if (is_null($languageList)) {
        if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            return array();
        }
        $languageList = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    }
    $languages = array();
    $languageRanges = explode(',', trim($languageList));
    foreach ($languageRanges as $languageRange) {
        if (preg_match('/(\*|[a-zA-Z0-9]{1,8}(?:-[a-zA-Z0-9]{1,8})*)(?:\s*;\s*q\s*=\s*(0(?:\.\d{0,3})|1(?:\.0{0,3})))?/', trim($languageRange), $match)) {
            if (!isset($match[2])) {
                $match[2] = '1.0';
            } else {
                $match[2] = (string) floatval($match[2]);
            }
            if (!isset($languages[$match[2]])) {
                $languages[$match[2]] = array();
            }
            $languages[$match[2]][] = strtolower($match[1]);
        }
    }
    krsort($languages);
    return $languages;
}

// compare two parsed arrays of language tags and find the matches
function findMatches($accepted, $available) {
    $matches = array();
    $any = false;
    foreach ($accepted as $acceptedQuality => $acceptedValues) {
        $acceptedQuality = floatval($acceptedQuality);
        if ($acceptedQuality === 0.0) continue;
        foreach ($available as $availableQuality => $availableValues) {
            $availableQuality = floatval($availableQuality);
            if ($availableQuality === 0.0) continue;
            foreach ($acceptedValues as $acceptedValue) {
                if ($acceptedValue === '*') {
                    $any = true;
                }
                foreach ($availableValues as $availableValue) {
                    $matchingGrade = matchLanguage($acceptedValue, $availableValue);
                    if ($matchingGrade > 0) {
                        $q = (string) ($acceptedQuality * $availableQuality * $matchingGrade);
                        if (!isset($matches[$q])) {
                            $matches[$q] = array();
                        }
                        if (!in_array($availableValue, $matches[$q])) {
                            $matches[$q][] = $availableValue;
                        }
                    }
                }
            }
        }
    }
    if (count($matches) === 0 && $any) {
        $matches = $available;
    }
    krsort($matches);
    return $matches;
}

// compare two language tags and distinguish the degree of matching
function matchLanguage($a, $b) {
    $a = explode('-', $a);
    $b = explode('-', $b);
    for ($i=0, $n=min(count($a), count($b)); $i<$n; $i++) {
        if ($a[$i] !== $b[$i]) break;
    }
    return $i === 0 ? 0 : (float) $i / count($a);
}

$accepted = parseLanguageList($_SERVER['HTTP_ACCEPT_LANGUAGE']);
var_dump($accepted);
$available = parseLanguageList('en, fr, it');
var_dump($available);
$matches = findMatches($accepted, $available);
var_dump($matches);

Nếu findMatchestrả về một mảng trống, không có kết quả khớp nào được tìm thấy và bạn có thể quay lại ngôn ngữ mặc định.


Xin chào, kịch bản đã hoạt động tốt và bây giờ dừng lại. có thể là nếu SESSION trên máy chủ tắt tập lệnh này không hoạt động?
GibboK

@GIbboK: Không, điều này độc lập với các phiên.
Gumbo

Đúng nhưng tôi thích giải pháp @diggersworld hơn ... viết mã ít hơn
lrkwz

Ai đó có thể vui lòng cho tôi biết giá trị của qquyết định như thế nào? Cảm ơn
Phantom007

@ Phantom007 Tùy thuộc vào sở thích: 0 = Tôi không muốn ngôn ngữ này, 1 = Tôi luôn muốn ngôn ngữ này.
Skyost

43

Các câu trả lời hiện tại hơi quá dài dòng nên tôi đã tạo phiên bản nhỏ hơn, tự động khớp này.

function prefered_language(array $available_languages, $http_accept_language) {

    $available_languages = array_flip($available_languages);

    $langs;
    preg_match_all('~([\w-]+)(?:[^,\d]+([\d.]+))?~', strtolower($http_accept_language), $matches, PREG_SET_ORDER);
    foreach($matches as $match) {

        list($a, $b) = explode('-', $match[1]) + array('', '');
        $value = isset($match[2]) ? (float) $match[2] : 1.0;

        if(isset($available_languages[$match[1]])) {
            $langs[$match[1]] = $value;
            continue;
        }

        if(isset($available_languages[$a])) {
            $langs[$a] = $value - 0.1;
        }

    }
    arsort($langs);

    return $langs;
}

Và cách sử dụng mẫu:

//$_SERVER["HTTP_ACCEPT_LANGUAGE"] = 'en-us,en;q=0.8,es-cl;q=0.5,zh-cn;q=0.3';

// Languages we support
$available_languages = array("en", "zh-cn", "es");

$langs = prefered_language($available_languages, $_SERVER["HTTP_ACCEPT_LANGUAGE"]);

/* Result
Array
(
    [en] => 0.8
    [es] => 0.4
    [zh-cn] => 0.3
)*/

Nguồn chính đầy đủ ở đây


6
Điều này là tuyệt vời và chính xác những gì tôi cần cho một dự án cụ thể ngày hôm nay. Sự bổ sung duy nhất tôi đã thực hiện là cho phép hàm chấp nhận một ngôn ngữ mặc định và quay lại ngôn ngữ đó nếu không có sự phù hợp giữa các ngôn ngữ có sẵn và HTTP_ACCEPT_LANGUAGE.
Scott

7
Ồ, một ý chính với những thay đổi của tôi là ở đây: gist.github.com/humantorch/d255e39a8ab4ea2e7005 (Tôi cũng đã kết hợp nó thành một tệp để đơn giản)
Scott

2
Phương pháp rất hay! Có lẽ bạn nên kiểm tra xem $ langs đã chứa mục nhập cho ngôn ngữ chưa. đã xảy ra với tôi rằng ngôn ngữ được yêu thích là en-US, 2nd de và 3 en, phương pháp của bạn luôn mang lại cho tôi, vì giá trị đầu tiên của en đã bị ghi đè bởi mục nhập thứ 3
Peter Pint

Nó cũng tạo ra một cảnh báo PHP nếu không tìm thấy kết quả khớp. Sẽ tốt đẹp để xử lý này duyên dáng.
Simon East

26

Cách chính thức để xử lý việc này là sử dụng thư viện PECL HTTP . Không giống như một số câu trả lời ở đây, điều này xử lý chính xác các ưu tiên ngôn ngữ (giá trị q), khớp ngôn ngữ một phần và sẽ trả về kết quả khớp gần nhất hoặc khi không có kết quả khớp nào, nó sẽ rơi trở lại ngôn ngữ đầu tiên trong mảng của bạn.

PECL HTTP:
http://pecl.php.net/package/pecl_http

Cách sử dụng:
http://php.net/manual/fa/feft.http-negotiate-lingu.php

$supportedLanguages = [
    'en-US', // first one is the default/fallback
    'fr',
    'fr-FR',
    'de',
    'de-DE',
    'de-AT',
    'de-CH',
];

// Returns the negotiated language 
// or the default language (i.e. first array entry) if none match.
$language = http_negotiate_language($supportedLanguages, $result);

1
Tôi tìm thấy một liên kết làm việc, vì vậy cập nhật câu trả lời của bạn để bao gồm nó.
Simon East

Tất cả ba liên kết này dường như đã chết và dường như chúng không có bất kỳ hướng dẫn cài đặt nào dễ dàng Googlizable (chức năng này cũng không được chấp nhận theo trang của chúng cho nó)
Brian Leishman

11

Vấn đề với câu trả lời được chọn ở trên là người dùng có thể có lựa chọn đầu tiên của họ là ngôn ngữ không nằm trong cấu trúc trường hợp, nhưng một trong những lựa chọn ngôn ngữ khác của họ được đặt. Bạn nên lặp cho đến khi bạn tìm thấy một trận đấu.

Đây là một giải pháp siêu đơn giản mà hoạt động tốt hơn. Trình duyệt trả về các ngôn ngữ theo thứ tự ưu tiên, để đơn giản hóa vấn đề. Mặc dù người chỉ định ngôn ngữ có thể có nhiều hơn hai ký tự (ví dụ: "EN-US"), thông thường hai ký tự đầu tiên là đủ. Trong ví dụ mã sau đây, tôi đang tìm kiếm sự trùng khớp từ danh sách các ngôn ngữ đã biết mà chương trình của tôi biết.

$known_langs = array('en','fr','de','es');
$user_pref_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

foreach($user_pref_langs as $idx => $lang) {
    $lang = substr($lang, 0, 2);
    if (in_array($lang, $known_langs)) {
        echo "Preferred language is $lang";
        break;
    }
}

Tôi hy vọng bạn tìm thấy đây là một giải pháp nhanh chóng và đơn giản mà bạn có thể dễ dàng sử dụng trong mã của mình. Tôi đã sử dụng điều này trong sản xuất khá lâu.


3
"Trình duyệt trả lại các ngôn ngữ theo thứ tự ưu tiên" - Chúng có thể làm được, nhưng bạn không nên phụ thuộc vào điều đó. Sử dụng qcác giá trị để xác định sở thích, đó là những gì thông số kỹ thuật nói rằng bạn nên làm.
Quentin

7

Hãy thử cái này:

#########################################################
# Copyright © 2008 Darrin Yeager                        #
# https://www.dyeager.org/                               #
# Licensed under BSD license.                           #
#   https://www.dyeager.org/downloads/license-bsd.txt    #
#########################################################

function getDefaultLanguage() {
   if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
      return parseDefaultLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
   else
      return parseDefaultLanguage(NULL);
   }

function parseDefaultLanguage($http_accept, $deflang = "en") {
   if(isset($http_accept) && strlen($http_accept) > 1)  {
      # Split possible languages into array
      $x = explode(",",$http_accept);
      foreach ($x as $val) {
         #check for q-value and create associative array. No q-value means 1 by rule
         if(preg_match("/(.*);q=([0-1]{0,1}.\d{0,4})/i",$val,$matches))
            $lang[$matches[1]] = (float)$matches[2];
         else
            $lang[$val] = 1.0;
      }

      #return default language (highest q-value)
      $qval = 0.0;
      foreach ($lang as $key => $value) {
         if ($value > $qval) {
            $qval = (float)$value;
            $deflang = $key;
         }
      }
   }
   return strtolower($deflang);
}

Hey bạn có thể giải thích regex nên bắt giá trị q[0-1]{0,1}.\d{0,4} không? Đầu tiên tôi đoán bạn có nghĩa là \.thay vì .phải không? Và không phải q luôn luôn có hình thức 0.1324hay cái gì đó? Nó sẽ không đủ để viết 0\.?\d{0,4}? Nếu bạn có q=1.0thì bạn có thể đi trong phần khác.
Adam

Sẽ là tuyệt vời để xem một ví dụ sử dụng ở đây.
Simon East

2
@SimonEast var_dump( getDefaultLanguage());
jirarium

4

Kịch bản sau đây là phiên bản sửa đổi của mã Xeoncross (cảm ơn bạn vì Xeoncross đó) quay lại cài đặt ngôn ngữ mặc định nếu không có ngôn ngữ nào khớp với ngôn ngữ được hỗ trợ hoặc nếu tìm thấy kết quả khớp, nó sẽ thay thế cài đặt ngôn ngữ mặc định bằng ngôn ngữ mới theo ưu tiên ngôn ngữ.

Trong trường hợp này, trình duyệt của người dùng được đặt theo thứ tự ưu tiên cho tiếng Tây Ban Nha, tiếng Hà Lan, tiếng Anh và tiếng Anh và ứng dụng chỉ hỗ trợ tiếng Anh và tiếng Hà Lan mà không có biến thể khu vực và tiếng Anh là ngôn ngữ mặc định. Thứ tự của các giá trị trong chuỗi "HTTP_ACCEPT_LANGUAGE" không quan trọng nếu vì lý do nào đó trình duyệt không sắp xếp chính xác các giá trị.

$supported_languages = array("en","nl");
$supported_languages = array_flip($supported_languages);
var_dump($supported_languages); // array(2) { ["en"]=> int(0) ["nl"]=> int(1) }

$http_accept_language = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // es,nl;q=0.8,en-us;q=0.5,en;q=0.3

preg_match_all('~([\w-]+)(?:[^,\d]+([\d.]+))?~', strtolower($http_accept_language), $matches, PREG_SET_ORDER);

$available_languages = array();

foreach ($matches as $match)
{
    list($language_code,$language_region) = explode('-', $match[1]) + array('', '');

    $priority = isset($match[2]) ? (float) $match[2] : 1.0;

    $available_languages[][$language_code] = $priority;
}

var_dump($available_languages);

/*
array(4) {
    [0]=>
    array(1) {
        ["es"]=>
        float(1)
    }
    [1]=>
    array(1) {
        ["nl"]=>
        float(0.8)
    }
    [2]=>
    array(1) {
        ["en"]=>
        float(0.5)
    }
    [3]=>
    array(1) {
        ["en"]=>
        float(0.3)
    }
}
*/

$default_priority = (float) 0;
$default_language_code = 'en';

foreach ($available_languages as $key => $value)
{
    $language_code = key($value);
    $priority = $value[$language_code];

    if ($priority > $default_priority && array_key_exists($language_code,$supported_languages))
    {
        $default_priority = $priority;
        $default_language_code = $language_code;

        var_dump($default_priority); // float(0.8)
        var_dump($default_language_code); // string(2) "nl"
    }
}

var_dump($default_language_code); // string(2) "nl" 

1

Tôi nghĩ rằng cách sạch nhất là đây!

 <?php
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
  $supportedLanguages=['en','fr','gr'];
  if(!in_array($lang,$supportedLanguages)){
     $lang='en';
  }
    require("index_".$lang.".php");

Điều này không giải thích cho các ưu tiên ngôn ngữ trong tiêu đề.
Simon East

0

Tất cả những điều trên với dự phòng cho 'en':

$lang = substr(explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE'])[0],0,2)?:'en';

... hoặc với dự phòng ngôn ngữ mặc định và mảng ngôn ngữ đã biết:

function lang( $l = ['en'], $u ){
    return $l[
        array_keys(
            $l,
            substr(
                explode(
                    ',',
                    $u ?: $_SERVER['HTTP_ACCEPT_LANGUAGE']
                )[0],
                0,
                2
            )
        )[0]
    ] ?: $l[0];
}

Một đường thẳng:

function lang($l=['en'],$u){return $l[array_keys($l,substr(explode(',',$u?:$_SERVER['HTTP_ACCEPT_LANGUAGE'])[0],0,2))[0]]?:$l[0];}

Ví dụ:

// first known lang is always default
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en-us';
lang(['de']); // 'de'
lang(['de','en']); // 'en'

// manual set accept-language
lang(['de'],'en-us'); // 'de'
lang(['de'],'de-de, en-us'); // 'de'
lang(['en','fr'],'de-de, en-us'); // 'en'
lang(['en','fr'],'fr-fr, en-us'); // 'fr'
lang(['de','en'],'fr-fr, en-us'); // 'de'

0

Thử,

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);

if ($lang == 'tr') {
include_once('include/language/tr.php');
}elseif ($lang == 'en') {
include_once('include/language/en.php');
}elseif ($lang == 'de') {
include_once('include/language/de.php');
}elseif ($lang == 'fr') {
include_once('include/language/fr.php');
}else{
include_once('include/language/tr.php');
}

Nhờ vào


0

Nhanh chóng và đơn giản:

$language = trim(substr( strtok(strtok($_SERVER['HTTP_ACCEPT_LANGUAGE'], ','), ';'), 0, 5));

LƯU Ý: Mã ngôn ngữ đầu tiên là những gì đang được trình duyệt sử dụng, phần còn lại là các ngôn ngữ khác mà người dùng đã thiết lập trong trình duyệt.

Một số ngôn ngữ có mã vùng, vd. en-GB, những người khác chỉ có mã ngôn ngữ, vd. sk.

Nếu bạn chỉ muốn ngôn ngữ chứ không phải khu vực (ví dụ: en, fr, es, v.v.), bạn có thể sử dụng:

$language =substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

-1

Tôi đã có cái này, cái mà đặt một cái bánh quy. Và như bạn có thể thấy, đầu tiên nó sẽ kiểm tra xem ngôn ngữ có được đăng bởi người dùng hay không. Bởi vì ngôn ngữ trình duyệt không phải lúc nào cũng nói về người dùng.

<?php   
    $lang = getenv("HTTP_ACCEPT_LANGUAGE");
    $set_lang = explode(',', $lang);
    if (isset($_POST['lang'])) 
        {
            $taal = $_POST['lang'];
            setcookie("lang", $taal);
            header('Location: /p/');
        }
    else 
        {
            setcookie("lang", $set_lang[0]);
            echo $set_lang[0];
            echo '<br>';
            echo $set_lang[1];
            header('Location: /p/');
        } 
?>

11
Tôi đoán bạn không thể gửi tiêu đề khi bạn đã lặp lại công cụ?

2
Tôi nghĩ rằng sự chú ý đằng sau bài đăng này có ý nghĩa, đó là cung cấp cho người dùng cách chuyển đổi ngôn ngữ và ghi nhớ quyết định này. Phát hiện ngôn ngữ chỉ nên được thực hiện một lần để đoán tốt nhất lựa chọn đầu tiên.
danijar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.