Страница мультиязык HTML PHP

я работаю в Вебе, который должен быть мультиязыком (я делаю ее без какого-либо framework), и мне хотелось бы знать, который - лучший метод для haver это.

Я попытался делания этого таким:

if (!isset($_GET['lang']) && !isset($_SESSION['lang'])){
        $_SESSION['lang']="language/es.php";
        include ($_SESSION['lang']);
    } else {
        $_SESSION['lang']="language/".$_GET['lang'].".php";
        include ($_SESSION['lang']);
    }

Но если загрузил страницу без изменчивая $ _GET ['lang']; это "заседание" не охраняет мне, так как каждый раз, когда Вы загружаете и Вы не переменная в url вновь помещает язык из-за недостатка, который является испанцем...

Как я могу решать это?

0
задан 18.10.2016, 13:50
5 ответов

Способ реализовывать страницу мульти-язык состоит в том, чтобы иметь все strings, отделенные во внешнем файле, содержавшем в arrays.

Ты можешь разделять эти arrays с keyсо стоимостью языка браузера или отборного, и в value array string с соответствующим языком.

Поскольку он прокомментировал тебе @Ramon-san в Вашем ответе, его состояло бы сначала в том, чтобы он загрузил язык браузера, и потом в том, чтобы он смог выбирать того, которого желает пользователь.

Пример:

$lang = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
$landingPageString = array(
    "es" => "Bienvenidos a nuestra página",
    "en" => "Welcome to hour site"
);
echo $landingPageString[$lang];

Это очень основной и сжатый пример. Таким образом, ты предотвращаешь себя создавать два или более раз ту же страницу с отличными языками, и у тебя было бы все на той же странице.

2
ответ дан 24.11.2019, 13:03

Ты можешь получать язык браузера пользователя, который соглашается на Веб посредством $_SERVER["HTTP_ACCEPT_LANGUAGE"]:

$lang =substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
$_SESSION['lang']="language/".$lang.".php";
include ($_SESSION['lang']);
0
ответ дан 24.11.2019, 13:03
  • 1
    Я только что не понял как функция $ _SERVER [" HTTP_ACCEPT_LANGUAGE"] –  Pavlo B. 18.10.2016, 13:59
  • 2
    Когда пользователь соглашается на Веб env и # 237; в petici и # 243; n HTTP GET в сервер, чтобы получать ее p и # 225; gina. В заголовке этого petici и # 243; n включи язык, который он считает конфигурировавшим в Вашем браузере. Например, если я соглашаюсь на твой Веб с моим chrome в espa и # 241; ol, быть посланным и # 225; c и # 243; я говорю языка в HTTP_ACCEPT_LANGUAGE. Поскольку он дает тебе c и # 243; я говорю целое число, включенный вариант, например он - co для Колумбии или en-us для ingl и # 233; s Соединенных Штатов, мы используем substr, чтобы получать s и # 243; это две буквы, которые мы будем использовать. –  Ramon-san 18.10.2016, 14:04

Обычно обычно имеет "базовый" файл, например, textos.xml, что содержит первоначальную версию цепей, которые обычно представляет английский язык, и потом, из-за каждого языка, файла с переведенными версиями: textos_es.xml, textos_fr.xml, и т.д.

Потом, мысль иметь базовый файл - для того, чтобы он служил как назначенный по умолчанию язык.

Возможная методология была бы:

  • PHP читает файл textos.xml (первоначальные переводы), и сторож в структуре твоей целесообразности (словарь или то, что ты хочешь).

  • Через $_SERVER["HTTP_ACCEPT_LANGUAGE], читается файл соответствующего языка (_es например), и sobreescribir, в твоем словаре, цепи, которые появляются в новом файле.

Таким образом, textos.xml оно будет функционировать как fallback для тех не переведенных цепей.

Если ты изменяешь мнение, каковым должен быть fallback-language, сделай, что textos.xml его было один soft link избранного языка, например:

ln -s textos_en.xml textos.xml

Таким образом, ты можешь менять назначенный по умолчанию язык, не называя ничего, только меняясь, на кого указывает ссылка.

Если вместо единственного файла у тебя хотят быть некоторые, чтобы организовывать цепи, немножко, тогда ты можешь использовать различные каталоги вместо различных имен файла, например.

Хотя то, что я сделал бы, состояло бы в том, чтобы иметь все файлы всех языков в единственной папке, из-за удобства, и через какой-то файл конфигурации, показывать различные базовые файлы (например, все ссылки).

0
ответ дан 24.11.2019, 13:03

Помни что инициализируй сеанс перед тем, как использовать переменную $_SESSION

// Iniciamos la sesión
session_start();

if (!isset($_GET['lang']) && !isset($_SESSION['lang'])){
    $_SESSION['lang']="language/es.php";
    include ($_SESSION['lang']);
} else {
    $_SESSION['lang']="language/".$_GET['lang'].".php";
    include ($_SESSION['lang']);
}

И помни, что ты должен использовать session_start() во всех scripts перед тем, как использовать переменную $_SESSION

0
ответ дан 24.11.2019, 13:03

Чтобы приносить и поддерживать язык на протяжении твоего приложения, используй переменную сеанса в начало каждого файла, например $_SESSION['lang']='it' для твоего файла it.php. В зависимости от переменной сеанса lang, ты можешь делать то, что лучше ты располагается: звонить в другие файлы или функции, как меню на итальянском языке, или звонить xml с контентами согласно языку, что ты желал. Если пользователь ничего не выбрал, ты можешь оставлять пустую переменную и назначенный по умолчанию язык.

0
ответ дан 24.11.2019, 13:03