Доста
странно (да не използвам други думички) предложение за отстраняване на бъга.
Използването на единични кавички в PHP означава: стрингът да НЕ се обработва за променливи и специални символи (прим. \n ,\r и т.н.).
Т.е., изходът от този фрагмент:
GeSHi (PHP):
$var = 'value';
е точно
$var, а не
value.
С други думи, използването на това решение (array_key_exists('$category', $categories)) ще води ВИНАГИ до търсенето на ключ, който е '$category', а не '{стойността на $category}' ...
По-скоро направи малко дебъг, сложи един var_dump($language) преди if-a с array_key_exists и виж за какво става въпрос когато излиза тази грешка.
Най-вероятно е да се окаже, че $language е празен стринг.