Абстрактно - переклади мають зберігатися в окремому файлі (чи файлах) локалізації (1), а в коді згадка про мову має бути максимум один раз(2), на початку, а тому:
Має за логікою бути визначеним в класі, тобто кожен клас міститиме всі переклади - порушує (1)
$post->getTitle('en');
$post->en->title;
$post->en()->title;
Сотня згадок про одну мову в коді, порушено (2)
Так що з названих
Можу ще рекомендувати таке. Є:
- глобальна змінна (чи функція, що повертає) - поточна мова.
- глобальний асоціативний масив перекладів (на кшталт translations["en"]["Заголовок"]="Title" і т.д.)
- функція, що повертає потрібний рядок, із простим іменем, наприклад _().
Тоді
_("Заголовок") підставить "Title" чи "Заглавие" залежно від поточного перекладу (чи фолбек).