Как и в большинстве общих вопросов программирования, это зависит от ваших потребностей.
Для статического текста я бы использовал файлы RESX. Для меня, программиста .Net, они просты в использовании, и .Net Framework имеет хорошую поддержку для них.
Для любого динамического текста я склонен хранить такую информацию в базе данных, особенно если разработчик сайта не является разработчиком. В прошлом я использовал два подхода: добавление языкового столбца и создание разных записей для разных языков или создание отдельной таблицы для хранения текста для конкретного языка.
Таблица для первого подхода может выглядеть примерно так:
Идентификатор статьи | Идентификатор языка | Текст статьи для конкретного языка | Создано | Дата создания
Это работает для ситуаций, когда вы можете создавать разные записи для данной статьи, и вам не нужно синхронизировать какие-либо данные, связанные с этими разными записями (например, обновленную метку времени).
Другой подход состоит в том, чтобы иметь две отдельные таблицы: одну для неязыкового текста (идентификатор, дата создания, созданный пользователь, дата обновления и т. Д.) И другую таблицу, содержащую текст для конкретного языка. Таким образом, таблицы могут выглядеть примерно так:
Первая таблица: Идентификатор статьи | Создано | Дата создания | Обновлено | Дата обновления
Вторая таблица: Идентификатор статьи | Идентификатор языка | Текст статьи для конкретного языка
Для меня вопрос сводится к обновлению данных, не зависящих от языка. Если вы обновляете эти данные, то я склоняюсь ко второму подходу, в противном случае я бы выбрал первый подход, поскольку считаю его более простым (не могу забыть принцип KISS).