Параметры локализации веб-приложения

Я работаю на международном веб-сайте (PHP, пользовательская облегченная структура MVC), которая должна показывать контент на родном языке пользователя. Контент будет в основном представлять собой текст, но может быть и изображениями.

Наше текущее решение – это один гигантский файл с отдельными функциями для каждого текста, который нужно перевести, и случай переключения в каждой функции. Это стало ужасным для поддержания и не особенно масштабируемым.

Наши приоритеты – производительность, ремонтопригодность (если нам нужно исправить ошибку или внести изменения, должно произойти как можно меньше мест) и расширяемость (позволяя переводчикам добавлять больше языков). Мы ожидаем, что работаем не менее 10-12 языков. Нам также необходимо рассмотреть содержимое HTML внутри текста, например <p></p> и ссылки. В настоящее время мы имеем встроенный HTML в возвращенном тексте (который, очевидно, не является особенно пригодным для обслуживания). Некоторые из вариантов, которые мы рассмотрели:

Таблица базы данных для переводов, с столбцами для каждого языка
+ Масштабируемость для большого количества контента
– Нелегко для переводчиков добавлять / изменять контент
– Множество транзакций БД, низкая производительность

Один текстовый файл (CSV)
+ Конвертирует в электронные таблицы, чтобы переводчики могли работать с
– Загрузка огромного файла в память может повлиять на производительность (не уверен, сколько из того эффекта, который это действительно сделает)
– Может быть трудно поддерживать

Один текстовый файл на одном языке
+ Легко для переводчиков работать с
? Лучше для производительности (возможно)

Система непрерывной интеграции, которая создает несколько версий каждого (MVC) представления со встроенным локализованным контентом
+ Лучшее для производительности
+ Может комбинироваться с CSV или другим форматом, который легко использовать переводчикам
– Комплекс для настройки
– Может быть трудно поддерживать

Мы искали справочники о том, как доставлять переведенный контент в веб-приложениях, но не нашли ничего полезного. Какой из этих вариантов является лучшим, и какие другие реализации мы не рассматривали?