Посмотрите в сторону gettext, po-mo файлы.
Посмотрите, как сделаны словари в том же laravel. Там есть возможность иерархии, а не плоского словаря. Вроде:
return [
'menu' => [
'home' => 'Главная',
'about' => 'О нас',
'contacts' => 'Контакты',
],
'content' => [
'what_the_fuck' => 'Вы вас любим!',
'fuck_you' => 'Мы всегда вам рады :)',
'shit' => 'Оставьте нам сообщение!',
],
'footer' => [
'contacts' => [
'info' => 'Контактные данные',
],
'copyright' => 'Все права защищены!'
]
];
Соответственно, обращаетесь:
echo __('menu.about');
echo __('footer.contacts.info');
Но мне gettext больше по нраву.