web-dev-qa-db-ja.com

ルートフォルダーにインデックスファイルのない多言語Webサイト

私のクライアントは2つの異なる言語の非常にシンプルなWebサイトを持っているので、言語ごとに個別のフォルダーを作成することにしました。たとえば:

domain.com/en/ domain.com/de/

ただし、ルートフォルダにはインデックスファイルはありません。301HTTP:Accept-Languageに基づいてリダイレクトする。htaccessファイルのみです。問題なく動作しますが、問題は、ページがGoogleでインデックス付けされていることですが、スニペットがなく、URLで言語が指定されていないことです。

私の質問は次のとおりです。これは良い習慣ですか、またはルートフォルダーにインデックスファイルを追加する必要がありますか?または、この問題に取り組む他の方法はありますか?

2
Adam

これは本当にあなたの質問に対する答えではないかもしれませんが、多言語を作成する最良の方法は、ほとんどの場合、いくつかの単純なPHPを使用することです。

languagesというフォルダーを作成し、ファイルlang.code.phpを作成します。 codeを、たとえば英語の場合はEN、ドイツ語の場合はDEなどで置き換えます。

次のコードで言語スイッチャーを作成します。

<?php
$lang = "en";
if( isset( $_POST["lang"] ) ) {
    $lang = $_POST["lang"];
    setcookie ( 'lang', $lang, time() + 60*60*24*30, '/', 'YOUR_DOMAIN');
    header( "Location: /" );
}
?>

カスタマイズは必要ありません。

次の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';
}

if( $_COOKIE["lang"] == "en" ) {
$lang = 'en';
}

if( $_COOKIE["lang"] == "nl" ) {
$lang = 'nl';
}

switch ($lang) {
  case 'en':
  $lang_file = 'lang.en.php';
  break;

  default:
  $lang_file = 'lang.en.php';

}

include_once 'languages/'.$lang_file;

すべての言語について、新しいケースを追加します。 defaultをデフォルト言語の値に変更します。

次に、PHPコード^を配置したのと同じページに次のHTMLコードを追加します。

<form action="language_switcher.php" method="post">
    <select name="lang">
        <option value="en"<?php if( $_COOKIE["lang"] == "en" ) { echo " selected"; } ?>>English</option>
    </select>
    <button type="submit" class="btn btn-warning btn-small">Submit</button>
</form>

Webサイトに必要なすべての言語にオプションを追加します。このコードは、PHP言語スイッチャーがlanguage_switcher.phpと呼ばれることを前提としています。

言語ファイルは次のようになります。

/*
------------------
Language: English
------------------
*/

$lang = array();

// Head

$lang['HEADER_TITLE'] = 'Portal';

// Menu

$lang['HOME'] = 'Home';
$lang['ADMIN'] = 'Admin';

次に、Webサイトのすべてのテキストを次のように置き換えます。

<?php echo $lang['VAR']; ?>

VARは、言語ファイルの値を表します。

それはそれよりも難しく見えます。幸運を!

2
William Edwards

私の知る限り、ファイルをルートに置く必要は特にありません。ユーザーがこのプラクティスで利益を得ると思われる場合は、それを試してください。

私のおすすめ:

ルートドメインの既定の言語を保持します。たとえば、主なターゲットオーディエンスはEnであり、英語版をルートのままにします。

他の言語の場合は、サブフォルダーを作成します。

1
Jack