В настоящее время я оцениваю SQLAlchemy для проекта. Вот моя схема:
- таблица ЯЗЫК, со строкой для каждого поддерживаемого языка
- таблица перевода с (ID, LANGUAGE_ID, STR)
- различные таблицы вместо хранения текста будут хранить TRANSLATION_IDs, например, BOOK (ID, TITLE_TRANSLATION_ID, ABSTRACT_TRANSLATION_ID)
Теперь, предполагая, что у каждого запроса есть текущий идентификатор языка (например, через переменную потока ...), мне понадобится SQLAlchemy, чтобы автоматически присоединиться к таблице TRANSLATION и, таким образом, иметь текстовые поля на текущем языке. Что-то вроде:
class Book(Base):
id = Column(Integer, primary_key=True)
title = TranslatableText()
abstract = TranslatableText()
При извлечении ORM автоматически присоединится к таблице ПЕРЕВОД с текущим языковым идентификатором, а my_book.title выдаст мне заголовок на текущем языке.
Мне также нужно это для работы с отношениями: если класс содержит внешние ключи к другим классам, которые также содержат переводимые текстовые поля, я в идеале хотел бы, чтобы они также были получены.
Наконец, мне также необходимо иметь возможность получить TRANSLATION_ID для каждого поля, например, через my_book.title_translation_id.
Я не ожидаю полного решения, но я хотел бы знать, возможно ли что-то подобное и с чего начать.