Как выводятся сообщения в программах

Разумеется, в любой уважающей себя программе, будь-то веб или десктопный продукт, сами сообщения в коде жёстко не вбиты, они берутся из соответствующего файла(ов) сообщений текущего выбранного ланга.

E.g., в шаблонах для CMS Joomla сообщения выводятся так:

<?php echo JText::_('TPL_JOOMLA-SOME_TEXT'); ?>

Код TPL_JOOMLA-SOME_TEXT это уникальный текстовый индекс сообщения в файле сообщений, который может называться, e.g., так «en-GB.tpl_foo_joomla.ini» и выглядеть, e.g., так:

TPL_JOOMLA-SOME_TEXT="Foo"
TPL_JOOMLA-FOOTER_LINK_TEXT="All rights reserved."
TPL_JOOMLA-FIELD_LOGOTEXT_DESC="Logo text"
TPL_JOOMLA-FIELD_LOGOTEXTPOSITION_LABEL="Vertical offset of the logo text in px."
TPL_JOOMLA-FIELD_LOGOTEXTPOSITION_DESC=""
TPL_JOOMLA-FIELD_LOGOFONTSIZE_LABEL="Logo's fontsize in px."
TPL_JOOMLA-FIELD_LOGOFONTSIZE_DESC=""

Как же быть с переменными в сообщениях? Здесь ключевую роль выполняет функция printf и ей подобные, которые позволяют делать вывод текста с подстановкой. Именно через эту функцию перегоняются сообщения интерфейса при их выводе чтобы подставить в сообщение нужные переменные.

Вот, e.g., как выглядит часть текстового файла локализации программы, где каждое сообщение написано на отдельной строке и имеет свой уникальный числовой идентификатор:

5219,"Имя '%1' зарезервировано и не может быть использовано!"
5220,"Имя содержит недопустимый символ '%1'!"
5221,"Имя содержит недопустимый управляющий символ no.%1!"
5227,"Поиск прерван - достигнут заданный максимум дубликатов ( %1 )."
5229,"УДАЛЕН: %1"
5230,"Произошла ошибка при удалении файла '%1' внутри zip-файла '%2': %3"

Функция printf и её аналоги есть во всех языках программирования.

Как видно, единого стандарта оформления файлов сообщений нет и каждый разработчик делает как хочет. Обычно для каждого сообщения используется отдельная строка. Индексы сообщений могут быть просто как числовые, так и текстовые. Проблема лишь в том как потом этот файл парсить и разбирать. Я был рекомендовал не придумывать свои собственные форматы записи текстовых сообщений, а использовать уже имеющиеся и распространённые стандарты записи данных в текстовые файлы, такие как XML, JSON, или хотя бы тот же CSV на худой конец. Такие форматы легко парсить и скорее всего вам даже не придётся писать парсер для них т.к. готовых парсеров для этих стандартов полно.