Я нашел это сообщение : это было очень полезно.Он расширил HashWithIndifferentAccess для работы в качестве LocalizedString.Единственное, что мне не понравилось в этом, - это необходимость явно указывать локаль при каждой установке - я хотел, чтобы она работала больше как строка.конечно, вы не можете перегрузить оператор = (по крайней мере, я так не думаю), поэтому я использовал << и добавил метод to_s, который выводил бы строку текущей локали .... </p>
class LocalizedString < HashWithIndifferentAccess
def self.from_mongo(value)
LocalizedString.new(value || {})
end
def available_locales
symbolize_keys.keys
end
def to_s
self[I18n.locale]
end
def in_current_locale=(value)
self[I18n.locale] = value
end
def << (value)
self[I18n.locale] = value
end
end
и затем у меня есть класс вроде:
class SimpleModel
include MongoMapper::Document
key :test, LocalizedString
end
и я могу делать такие вещи, как
I18n.locale = :en
a = SimpleModel.new
a.test << "English"
I18n.locale = :de
a.test << "German"
puts a.test # access the translation for the current locale
I18n.locale = :en
puts a.test # access the translation for the current locale
puts a.test[:de] # access a translation explicitly
puts a.test[:en]
puts a.test.inspect
и получать
German
English
German
English
{"en"=>"English", "de"=>"German"}
Итак, мы идем - этот, похоже, действительно работает для меня.Комментарии приветствуются, и надеюсь, что это кому-то поможет!