@vanderv
Ruby on Rails

[Rails] Какой гем выбрать для перевода данных в базке?

Есть необходимость организовать многоязычность сайта. Главной проблемой стала выбор гема, способного организовать перевод атрибутов модели.
Основные требования это быстрота и прямой доступ к атрибутам модели. То беж мне необходимо будет сортировать по этим атрибутам(.order("name DESC")), делать выборку(.select("name")), полнотекстовый поиск.
Для примера:
- hstore_translate. Гем вроде хороший, но не совсем понимаю как мне например сортировать по полю которое имеет перевод?
- globalize. Есть подозрения что по итогу будет очень медленный, т.к. если делать выборку из базы 100 записей, то для каждой он будет пытаться подгрузить перевод... А еще если мы подключим связи так же с переводами - получится под две сотни запросов... Могу ошибаться конечно, поправьте меня.
Есть ли такой гем, который ответит моим требованием "да", или надо что-то свое костылить... На последнее времени совсем нету, к сожалению.
  • Вопрос задан
  • 2787 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Finist
К сожалению готового решения не знаю, решал эту задачу так, хранил переводы в базе, пробрасывал их в redis, а из redis дергал их через стандартный I18n. Если на всю эту кухню времени нет, могу посоветовать что нибудь типа https://phraseapp.com
Ответ написан
Комментировать
sck_v
@sck_v
exflow.io
Есть подозрения что по итогу будет очень медленный, т.к. если делать выборку из базы 100 записей, то для каждой он будет пытаться подгрузить перевод... А еще если мы подключим связи так же с переводами - получится под две сотни запросов... Могу ошибаться конечно, поправьте меня.

N+1 же
Ответ написан
Комментировать
Vakiliy
@Vakiliy
Ну вобщем то и той и у другой есть +/-, пример глабализе хоть и производит joinы и поиск по локалям, сортировку делает по оcновной таблице, покрайне мере так было, как сейчас не проверял, а также оверхед на sql запросы, у hstore `нет` оверхеда зато поиск и сортировка будет выглядеть примерно так:
where("i18n_field @> hstore(:lang, :data)", lang: lang, data: data)

а с FTS
WHERE to_tsvector('russian', i18n_field->'lang') @@ to_tsquery('russain, 'Запрос') 
ORDER BY i18n_field->'lang' ASC

Вобщем то это не страшно. FTS можно, например, и через sunspot производить.
Когда себе выбирал, для жизне упрощения, остановился на этом, в немножко допилином виде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы