1. $result = mysql_query ("SELECT id,title,date,description,author FROM courses",$db);
Сделайте mysql_connect, а еще лучше new mysqli
2. $myrow = mysql_fetch_array ($result);
так как нету коннекта с базой то й результата нету
используйте mysql_feach_assoc()
3. </table><br><br>", $myrow['title'], $myrow['date'], $myrow['author']);
Вы используете mysql_fetch_array, она возвращает нумерованый массив(причем в данном случае false так как нету коннекта с базой)
4. насколько я помню printf в качестве замены принимает %s а не %$
можёт всё-таки поймёшь, что private не заменит global в этом случаи?
А я и не спорю с Вами. поэтому и написал пример с использованием класса, где есть protected $_lang;, который заполняеться с файла в конструкторе и глобальной переменной не существует.
В Zend framework'e есть класс Zend_Translate. Он работает с разными вариантами представления данных, начиная от php-массива и csv-файла с разделителями и заканчивая ini-файлами, xml и файлами формата GetText.
Рекомендую для локализации именно последний вариант. Все локализационные данные обрамляются определенным образом в коде, специальная утилита (например, POEdit) сканирует файлы проекта на предмет появления новых значений и изменения старых, после чего появляется удобная таблица для ввода перевода. Таким образом, с помощью такой тулзы локализацию можно перепоручить переводчику вообще не имеющему отношение к проекту, коду и т.д.
Zend, Yii, Symfony используют классы. Так почему класс локализации плохо?
Моя цитата.
В моем посте 2 примера. Тот, что вверху не мой пример, а пользователя DelphinPRO, который привел свой пример реализации. Ниже мой класс который я сделал для сравнения. Думаю тепер понятно обяснил.