This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TranslatedString | |
def initialize(owner, key) | |
@owner, @key = owner, key | |
end | |
def [](lang) | |
@owner.get_translated_value(@key, lang) | |
end | |
def to_h | |
@owner.translated_values[@key] | |
end | |
def []=(lang, value) | |
@owner.set_translated_value(@key, value, lang) | |
end | |
end | |
class Product | |
module Translatable | |
def translated_values | |
@translated_values ||= {} | |
end | |
def value_of_translated(key) | |
translated_values[key] ||= {} | |
end | |
def get_translated_value(key, lang = default_locale) | |
value_of_translated(key)[lang] | |
end | |
def set_translated_value(key, value, lang = default_locale) | |
if value.is_a? Hash | |
value.each {|lang, value| value_of_translated(key)[lang] = value} | |
else | |
value_of_translated(key)[lang] = value | |
end | |
end | |
def get_translated_string(key) | |
instance_variable_set("@#{key}", TranslatedString.new(self, key)) unless instance_variable_get("@#{key}") | |
instance_variable_get("@#{key}") | |
end | |
def set_translated_string(key, value) | |
get_translated_string(key)[default_locale] = value | |
end | |
end | |
end | |
class Product | |
include Translatable | |
def default_locale | |
:en_AU | |
end | |
def description | |
get_translated_string(:description) | |
end | |
def description=(value) | |
set_translated_string(:description, value) | |
end | |
end | |
product = Product.new | |
product.description[:en] = 'foo' | |
product.description = "foo" | |
product.description = {en_AU: "description", el_GR: "περιγραφή"} | |
product.description.to_h |
No comments:
Post a Comment