При переходе на другую страницу "ru/en" сразу становится ru.
Ну так ведь тут так и написано:
$checkLang = (isset($_GET['lang']) and in_array($_GET['lang'], array ('ru', 'en'))) ? $_GET['lang'] : 'ru';
А следующее условие никогда не будет true:
if(!$checkLang){
$checkLang = $_SESSION['lang'];
}
Потому что $checkLang всегда есть и содержит строку.
Попробуйте что то типа такого:
$changeLang = isset($_GET['lang'] and in_array($_GET['lang'], ['ru', 'en']);
$lang = $changeLang ? $_GET['lang'] : $_SESSION['lang'];
в $lang должно быть искомое значение
И да, если сохранения в сессию у вас нигде нет, то это естественно тоже должно быть добавлено.