как RoR local дает вам такой хороший API, как: layout.side.title? - PullRequest
0 голосов
/ 03 октября 2010

Как механизм локализации RoR берет файл .yaml и создает такой хороший API для доступа к локализованному тексту, как: layout.side.title

Какой класс это, что вы можете просто создатьрекурсивный стиль методов доступа к свойству?

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

Вы должны посмотреть на реализацию.В основном, ключи хранятся в файле yaml, который загружается через YAML. Load эта операция возвращает хеш.При поиске «layout.side.title» строка нормализуется с помощью normalize_key , которые возвращают массив символов [: layout,: side,: title] и normalized_keys добавляют локальк нему [: en,: layout,: side,: title].Затем каждый уровень хэша ключей, загруженных ранее, проверяется, чтобы найти, соответствует ли каждый соответствующий элемент ранее созданного массива совпадению в этом цикле ввода

1 голос
/ 03 октября 2010

Я думаю, что @hellvinz отлично ответил на первую часть вашего вопроса - как реализована локализация.

Но если вы хотите использовать динамические вложенные средства доступа в общем виде, и вы использовали i18n только в качестве примера,тогда OpenStruct может быть классом для вас.

x = OpenStruct.new
x.foo = 10
x.bar = OpenStruct.new
x.bar.blee = "hello"
x.bar.whatever = "xx"

puts x.foo          # => 10
puts x.bar.blee     # => "hello"
puts x.bar.whatever # => "xx"

Он реализован всеми возможными method_missing - для получения дополнительной информации вы можете взглянуть на вашу реализацию ruby ​​(ostruct.Р.Б.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...