8
votes

Comment créer une simple baguette de la langue PHP Cookie?

J'essaie de mettre en place, ce que je pensais être, un simple commutateur de langue. Je pensais utiliser des biscuits PHP, mais ils ne se comportent pas comme prévu.

J'ai lu quelques tutoriels de cookie et j'ai regardé quelques exemples similaires ici sur Stackoverflow, mais je dois manquer quelque chose parce que cela peut " t vous faire fonctionner correctement.

Je définit la langue en le transmettant en tant que variable d'URL (Lang = EN ou LANG = RU). Que tout semble aller bien. Cependant, le code que j'ai à l'heure actuelle qui définit le cookie semble être un pas en arrière, donc au départ, il n'a pas de valeur (j'aimerais que ce soit 'EN' par défaut), puis si l'utilisateur clique sur le 'eng' Bouton Il n'a toujours aucune valeur, puis si l'utilisateur clique sur Russe, la valeur indique comme "EN", puis si je clique à nouveau sur le bouton "ENG", la valeur montre "ru '.

Voici le code que j'ai cobblé ensemble: xxx

Une fois que cela fonctionne, j'avais l'intention d'utiliser la valeur de la cookie pour afficher le menu anglais ou russe à l'aide d'un peu de php conditionnel.

merci.


4 commentaires

Ce n'est pas une bonne idée d'utiliser des cookies pour déterminer la langue. Les URL séparées sont un meilleur pari, les gens peuvent se connecter directement au contenu de la même langue que sur la page, ils placent le lien et les moteurs de recherche voient deux pages distinctes.


@Quentin un point bien fait. Cependant, je travaille à un budget serré de sorte qu'une solution simple et rapide est requise. Fondamentalement, il y a (ou sera) deux menus principaux, un pour l'anglais et un pour le russe. L'éditeur de site créera des articles dans les deux langues, puis les attribuera au menu correspondant. Basé sur le choix de l'utilisateur et en utilisant des instructions conditionnelles, un seul de ces menus sera affiché. C'est la façon la plus simple que je puisse penser à le faire ...


@Quentin Si des URL distinctes sont effectuées, comment le site devrait-il se rappeler qu'une page en français ne devrait être un lien vers une autre page sur le site en français également?


@Quentin, car sur ce modèle, le texte doit être identique pour toutes les langues, de sorte que les liens ne font que pointer sur le contenu, la langue peut être ajoutée de différentes manières différentes.


5 Réponses :


0
votes

Essayez celui-ci,

if ( !isset( $_GET['lang'] ) ) { 
    if ( isset( $_COOKIE['lang'] ) ) { 
        $lang = $_COOKIE['lang']; 
    } 
    else { 
        $lang = 'en'; 
    } 
} 
else { 
    $lang = (string)$_GET['lang']; 
    setcookie( 'lang', $lang, time() + 60*60*24*30 ); 
}


2 commentaires

Merci d'cela, mais il semble faire la même chose, c'est-à-dire que c'est un pas en arrière. Il y avait quelques fautes de frappe que j'ai corrigées ici: si (! Isset ($ _GET ['LANG']))) {ivesset ($ _Cookie ['Lang'])) {$ lang = $ _cookie ['Lang']; } else {$ lang = 'fr'; }} else {$ lang = (string) $ _ obtenir ['Lang']; Setcookie ('Lang', $ Lang, Time () + 60 * 60 * 24 * 30); }


En effet, j'ai raté quelques parenthèses



3
votes

Un cookie n'est pas accessible tant que la page de réglage a été rechargée ou une autre page a été accédée (en d'autres termes, vous ne pouvez pas définir et accéder à un cookie dans la même page).

Vérifiez ce code: P >

if( $_GET['lang'] ) {
    $lang = (string)$_GET['lang'];
    setcookie( 'lang', $lang, time() + 60*60*24*30,'/' );
} elseif(  !$_GET['lang']) ) {
    $lang = 'en';
} else {
    $lang = $_GET['lang'];
}
header("Location: redirect_file.php")


1 commentaires

Je comprends ça, mais c'est ce que j'essaie de ne pas pouvoir ne pas être possible? Voici le flux: l'utilisateur clique sur le bouton "ENG", la page recharge de la page Envoi de la variable URL 'lang = fr' et de la valeur de la cookie.



8
votes

Merci pour toutes les suggestions - @MOB m'a mis dans la bonne direction, c'est-à-dire traiter le cookie sur une autre page, puis vous renvoyer au premier.

J'ai fait un peu plus de pensée et d'expérimentation et j'ai enfin résolu. Je posterai le code ci-dessous en cas d'autre que quelqu'un d'autre souhaite utiliser ceci. P>

sur votre page principale Mettez ceci: p> xxx pré>

puis dans un autre fichier appelé " Language_switcher.php 'Mettez le code suivant: P>

$lang = "en";
if( isset( $_POST["lang"] ) ) {
    $lang = $_POST["lang"];
    setcookie ( 'language', $lang, time() + 60*60*24*30, '/', 'mydomain.com');
    header( "Location: /previous_page_url.php" );
}


0 commentaires

3
votes
if ( !empty($_GET['language']) ) {
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'nl';
} else if ( empty($_COOKIE['language']) ) {
    $_COOKIE['language'] = 'nl';
}
setcookie('language', $_COOKIE['language']);

0 commentaires

0
votes

J'ai utilisé php $ _server ['php_self'] pour rafraîchir la page en cours et prendre en compte la langue sélectionnée.

exemple de code ci-joint. Nom du fichier: Commutateur de langue.php P>

<?php

    error_reporting(E_ERROR);

    $lang = "en";

    if( isset( $_COOKIE["language"] ) ) { 
       $lang = $_COOKIE["language"]; 
    }

    if( isset( $_POST["lang"] ) ) {
       $lang = $_POST["lang"];
       setcookie ( 'language', $lang, time() + 60*60*24*30, '/','localhost');
       $refresh = $_SERVER['PHP_SELF'];
       header( "Location: $refresh");
    }
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Test Page Language Toggle</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>

    <?php 
      // Text definitions
      $text = array(
      'en' => array(
            'selectlang' => 'Select Language',
            'lingua' => 'Language: ',
            'filename' => 'You are in this location: '
          ),
      'fr' => array(
            'selectlang' => 'Séléctionner',
            'lingua' => 'Langue: ',
            'filename' => 'Vous lisez ce fichier: '
          )
      );

    ?>

    <form action="language_switcher.php" method="post">
        <select name="lang">
            <option value="en"<?php if( $_COOKIE["language"] == "en" ) { echo "selected"; } ?>>English</option>
            <option value="fr"<?php if( $_COOKIE["language"] == "fr" ) { echo " selected"; } ?>>Français</option>
        </select>
        <input type="submit" value="<?php echo $text[$lang][selectlang]; ?>">
    </form>

    <p><?php echo $text[$lang][lingua]; if( isset( $_COOKIE["language"] ) ) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p>

    <br>
    <p><?php echo $text[$lang][filename] . $_SERVER['PHP_SELF']; ?></p>

</body>
</html>


0 commentaires