0

index.php

<?php include_once 'lang.php'; ?>

lang.php

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if (isSet($_GET['lang'])) {
    $lang = $_GET['lang'];
    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if (isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if (isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}
switch ($lang) {
    case 'en':
        $lang_file = 'lang.en.php';
        break;
    case 'pl':
        $lang_file = 'lang.pl.php';
        break;
}
include_once 'languages/' . $lang_file;
?>

lang.en.phpと私はlang.pl.phpコンテンツを持つ配列を持っています。

Web サイトを初めて開くと、次の 2 つの警告が表示されます。

警告: include_once(languages/) [function.include-once]: ストリームを開くことができませんでした: 37 行目の blah/blah/blah/lang.php にそのようなファイルまたはディレクトリはありません

警告: include_once() [function.include]: blah/blah/blah/ に含めるための 'languages/' を開くことができませんでした (include_path='.:/usr/local/lib/php-5.2.17/lib/php') lang.php の 37 行目

次に、Webページで言語を選択し、変数「lang」がURLに渡されると(例index.php?lang=en)、すべて正常に機能します。修正方法は?

4

2 に答える 2

1

言語を定義しない場合、'languages/' (ディレクトリ) をロードしようとします。switch ステートメントにはデフォルトが必要です。たとえば、デフォルトの言語を「en」にしたい場合:

switch ($lang) {
  case 'pl':
  $lang_file = 'lang.pl.php';
  break;
  default: // en will fall here, too
  $lang_file = 'lang.en.php';
  break;
}

それ以外の場合$lang_fileは未定義であり、もちろんロードに失敗します。

于 2012-04-24T14:56:21.020 に答える
0

たぶん、次のdefaultセクションを追加するだけですswitch

switch($lang){
  case 'en':
    $lang_file='lang.en.php';
    break;
  case 'pl':
    $lang_file='lang.pl.php';
    break;
  default:
    // This will set a default language file.
    $lang_file='lang.en.php';
}
include_once 'languages/'.$lang_file;

このとき、がまたはに$lang設定されていない場合、スイッチは を に設定して戻ります。ただし、デフォルトで設定したい場合は、それを変更できます。'en''pl'$lang_filelang.en.phppl

于 2012-04-24T14:57:50.440 に答える