Нужны ли повторные переводы для одинаковых строк в Globalize3?
Я надеялся использовать Globalize3 для перевода моделей в проект, который я строю. Однако, пробуя это похоже на каждую модель, скажем, Post
лайк:
class Post < ActiveRecord::Base
translates :title, :body
end
будет полностью независимым от других сообщений в том смысле, что заголовок должен переводиться несколько раз, даже если заголовок идентичен уже переведенному. Т.е. система уже знает, что так и должно быть.
Я понимаю, что во многих случаях струны уникальны, поэтому это не проблема, однако представьте модель автомобиля с цветным атрибутом. Если в системе сотни автомобилей одинакового цвета, должен ли я переводить этот цвет много раз? Я хотел бы просто перевести один раз, и все могут использовать один и тот же перевод, если строка одинакова.
Я что-то неправильно понял или это действительно так, как работает Globalize3? Если так, то это действительно звучит так, как будто подходит, когда строки уникальны, как в блоге.
Есть ли другой драгоценный камень, который делает то, что мне нужно?
Спасибо за вашу помощь!
2 ответа
По сути, именно так работает Globalize, что атрибут каждой записи модели переводится и сохраняется в записи перевода.
Ваша проблема может быть решена путем нормализации таблицы, поэтому цвет становится самой моделью, и вы переводите это.
Я бы не стал этого делать, и я не знаю никакой жемчужины для вашего сценария. Я бы вместо этого сделал следующее:
Вместо этого сохраните значения RGB и в контроллере преобразуйте их в имена цветов. Затем вы можете перевести это, используя модуль Rails i18n.
Или как вариант выше, вы используете имена цветов в качестве клавиш i18n, например t("color.#{car.color.parameterize}")
и в en.yml есть
en:
color:
dark-blue: 'Dark Blue'
Это проблема, которую вы не можете легко избежать, если переводимые строки являются "стандартными", вы можете воспользоваться решением, предложенным lulalala (смоделируйте эту информацию).
У меня была похожая проблема (не в Rails, но она такая же), и мы "исправили" ее с помощью задачи, которая периодически и автоматически копирует переводы для дублированного контента.