У нас реализована двойная система. везде где нужно вставить текст, вызывается функция, которая определяет текущий язык, и по переданному ключу ищет текст. Все короткие фразы подтягиваются из отдельного файлика(по файлу на каждый язык) где хранятся пары ключ\значение. Все длинные фразы(тексты) берутся уже из бд, где так же хранятся пары ключ\значение + параметр lang.
подключение стилей по идее происходит в лэйауте, если у вас два лэйаута(для админки и для фронта) то во втором просто убираете соответствующую строчку. Если лэйаут один... Нужно разделять)
Возможно, наследование используется по классической причине? Где-то нужно чтобы контроллер определялся как ActiveController или соответствовал его интерфейсу. Это имхо, я не претендую на верный ответ)