Разделение кода и текста: мысли вслух / Хабр
Код, который большинство из нас пишет, как правило содержит ещё текст – разные элементы интерфейса, описания, содержание имейлов и так далее. Но мы, программисты, не все получали пятёрки в школе за сочинение. Мы хорошо пишем код, но далеко не каждый из нас хорош в прозе.В итоге мы видим тысячи сайтов и приложений, которые говорят с пользователями на неестественном языке вроде: “Использованы запрещенные символы” или “Операция успешно завершена”. Как часто вам в жизни, на улице говорят такие фразы? А что если попробовать разделить код (логику) и текст? Крупные компании, наверняка, уже давно это делают, используя какие-то свои собственные решения, но для всех остальных - нет никакой готовой утилиты или фреймворка.
Реальность
Текущая реальность такова, что программист частично сам пишет тексты (допустим, названия кнопок), частично берет тексты из заданий. Это является частью репозитория - хранится вместе с кодом, а значит если кому-то в команде надо будет что-то поправить - надо делать коммит в репозиторий. Не совсем идеально - это же не логика, это просто кусок текста?@extends('layouts.main')
@section('contents')
Welcome home
We are thrilled to have you back, {{ $user->first_name }}
Download my money
@endsection[/code]
Проблемы
Чтобы исправить текст - надо делать коммит в репозиторий с кодом. Для некоторых членов команды (компании), не программистов, это может быть непросто
Сложно отслеживать в каких местах и как на текущий момент наш продукт общается с пользователями - кусочки текста разбросаны по сотням файлов
Сложно соблюдать единый тон в сообщениях
Невозможно отследить появление новых текстов, когда программисты сами проявили инициативу
Альтернатива
А что если бы каждый новый кусок текста автоматически уходил в какой-то внешний сервис, и дальше содержание этого и других текстов уже контроллировалось напрямую из специального сервиса.Программист добавил одну строку в шаблон home.blade.php (пример на PHP и фреймворке Laravel, но это подходит к любому языку и фреймворку)
Во время билда внешний сервис был извещен, что на такой-то строке в таком-то шаблоне новый кусок текста.
Нетехнические члены команды могут сами редактировать этот текст теперь, без помощи программистов. В код при этом никому лезть не надо.
Во время билда будут загружены все тексты из внешнего сервиса. Если для какого-то текста появился “уточненный” вариант - используется он, иначе по умолчанию - то что ввел программист.
Если проводить параллель с тем же Laravel, то это похоже на использование встроенной функции для переводов __(), но тексты хранятся не в локальных файлах внутри этого же репозитория, а в облаке, что создает целый ряд преимуществ.
Технические аспекты
Гипотетическая реализация могла бы выглядеть следующим образом (за пример опять возьмем фреймворк Laravel на PHP).Обязываем программистов вместо прямой вставки текстов, использовать вспомогательную функцию - оборачивать все тексты. Можно даже добавить проверку автоматическую, что все тексты обернуты, иначе не давать пулл-реквесту пройти.
Реализуем консольную команду, которая отправляет все тексты завернутые в эту функцию по API куда-то во вне, в сервис управления текстами. Помимо текстов отправляются важные данные о контексте - в каком шаблоне текст, на каких строках, в каких маршрутах этот шаблон используется и так далее. Эта команда автоматически запускается в определенных моментах, например во время CI/CD билда.
Реализуем консольную команду, которая загружает новые версии текстов через API. Наша вспомогательная функция будет на лету заменять старый текст от программиста новой версией от других сотрудников компании - сотрудников, которые лучше пишут. Эта команда также может автоматически запускаться во время билда.
Создаем вэб-админку, где можно управлять всеми текстами нашего продукта. Видно что мы говорим и когда. В идеале - с рендерами. Теперь product manager, да и любой другой член команды, может отследить коммуникации от регистрации пользователя до любого действия.
Гипотетическая админка:

@extends('layouts.main')
@section('contents')
@lang('Welcome home')
@lang("We are thrilled to have you back, {$user->first_name}")
@lang('Download my money')
@endsection[/code]
Дополнительные плюсы
Помимо того, что теперь контроллировать наши коммуникации стало намного легче, появляются интересные дополнительные преимущества:Возможность автоматической проверки орфографии - так как тексты аккуратно вынесены, очень просто применять open-source утилиты и находить в текстах ошибки.
Возможность перевода на другие языки - в этот процесс очень легко добавить работу над другими языками, переводы будут загружаться той же командой. Программисты не будут ничего трогать в основном репозитории.
Возможность реализовать альтернативные, параллельные тоны голоса на сайте в зависимости от типа пользователя (тинейджер, молодая мама, дедушка и тд) - можно динамически менять стиль коммуникаций в продукте.
Заключение
Хотелось бы услышать мнения других разработчиков - как позитивные, так и жесточайшую критику. В теории такой SaaS сервис мог бы иметь бесплатную open-source реализацию, где команда хостит всё сама, и опциональный платный сервис, где можно заказывать переводы, проверку орфографии и так далее.It may be interesting