Как правильно организовать мультиязычность?
Галереи тоже вполне могут содержать язык, особенно если изображения содержат текст. Если у какой-то записи не указан язык, устанавливается язык «unknown» или null, который поступает в запросы с другими языками, грубо говоря where lang in ('ru', 'en', 'unknown') или where lang = 'ru' or lang is null. Есть ещё специфическая задача, когда у сущности должно быть несколько языков одновременно, но она сложнее в реализации, особенно на RDBMS. В других БД могут быть расширенные возможности для этого, например в MongoDB запрос всех статей на русском, английском или неопределенном языках в категории 123 будет выглядеть как-то так: find({lang:{$in:['en','ru','unknown']}, category: 123}), при этом исползуется индекс по lang и в выборку попадут как статьи с lang:'en' или lang: 'default', так и например с lang: ['en', 'en-US']
site.com
site.com/eng/

Есть всего 4 способа, и этот №3 по крутости =) Хотя если «интересует для неограниченного количества языков», то выбор правильный, только стоит сразу использовать ISO коды, а не кастомные.

Я сделал специальный дефолтный роутер в Zend FW, чтобы всегда работало как у вас — server.com/ru/