Как лучше всего реализовать мультиязычность?
Вырасти из фреймворков это на самом деле странно слышать, но дело ваше. Странно тогда почему вы задаете такие вопросы.
donem.com/en/new?id1
это ваш маршрут "en" идентификатор языка. Определите хранилище для переводов. Это может быть база, это могут быть файлы. У WP как ни странно отличная реализация на данный счет, они хранят переводы в .po файлах, которые даже такие моменты как 1 слон (elephant), 2 слона (elephants), 5 слонов (elephants) учитывают. Напишите один класс, который на основе идентификатора языка и оригинального слова будет выводить перевод. У вашей CMS же есть жизненный цикл, шаблоны? Вот вызывайте этот класс переводов в момент компиляции шаблона. А выглядеть это будет как то так -  t("elephant"), а там внутри уже найдется соответствие исходной строки и перевода.
Если вам не только интерфейс, но и содержимое (например статьи) переводить хочется, то определите структуру в базе (вы же в базе материалы храните?) которая бы позволяла одни те же данные хранить на разных языках и пусть ваш класс переводов отдает шаблонам данные на нужном языке на основе идентификатора языка.
1. Просто php файлы:
+ С ними, таки да, просто работать
- В случае, когда переводов реально много - будете вызалить по памяти
- Правки обязан вносить прогер
2. PO -> MO файлы:
+ Есть куча тулзовин для работы с ними
+ Работает с php довольно таки быстро и памяти кушает не так много
- Обязательная перегенирация MO
- В случае, если переводы делает 3-е лицо, мерджить бывает - не самое приятное занятие
3. БД:
+ Переводы может делать вообще левый человек, не вторгаясь в процесс
- Повышенные требования к миграциям
- Обязательное разделение на части и кэширование
З.Ы. Оригинальный язык для переводов НЕ рекомендую делать нейтивным. Лучше использовать специфические строки в стиле: '{moduleName}:{controllerName}:{actionName}:{blockName}:frase'. В противном случае есть вероятность склейки переводов и может возникнуть ситуация:
В блоке удаления заменили текстовку "ОК" на "Удалить", и магически не постижимым образом на странице регистрации под формой ввода появится одноименная клавиша.