Spree Commerce: локализация

Дата публикации:

Команда Jetruby приветствует своих читателей. Сегодня мы открываем цикл заметок о Spree E-commerce. В этой и последующих статьях нами будут описаны всевозможные проблемы, касающиеся разработки и кастомизации Spree, а точнее — проектов, реализованных на этой платформе. Информацию о базовой установке мы опустим, так как она подробно описана в официальной документации.

Spree Commerce — что это?

Spree Commerce (также известное, как просто Spree) — это решение для электронной коммерции под Ruby on Rails. Фреймворк создан Шоном Шофилдом ещё 2007 году. С тех пор у разработчика появилось более 500 последователей по всему миру. В июле 2011 года в Spree было инвестировано $ 1,5 млн AOL и True Ventures, что позволило совершить грандиозный прорыв в развитии стартапа. Количество загрузок Spree растет с каждым днем. По состоянию на 1 апреля 2015 года их около 350 тыс. Кроме того, в мире насчитывается около 45 тыс. проектов, реализованных на платформе Spree Commerce.

Языковая локализация Spree

Итак, приступим. Сегодня речь пойдет о локализации Spree. Базовое ядро фреймворка поддерживает только английскую локаль, однако разработчики позаботились о пользователях со всего мира, создав гем spree_i18n.

Для установки добавим указанный гем в Gemfile

  gem ‘spree_i18n’, github: ‘spree-contrib/spree_i18n’, branch: ‘master’

На практике лучше прописывать в название ветки стабильную версию Spree, ядро которой вы используете:

gem ‘spree_i18n’, github: ‘spree-contrib/spree_i18n’, branch: ‘3-0-stable’

Запускаем:

bundle install

Вы можете использовать генератор для установки миграции и добавления ассетов spree_i18n.

rails g spree_i18n:install

Для применения локализаций из коробки достаточно в файле config/application.rb прописать и перезапустить ваш сервер.

config.i18n.default_locale = :ru

Казалось бы все просто, как дважды два. Однако в процессе разработки могут возникать проблемы с кастомизацией переводов. Простой путь манки патчинга далеко не всегда оказывается эффективным. Особенно если проблема возникла при кастомизации сообщений валидаций Spree. Рассмотрим ситуацию на реальном примере модели Spree::Review (в следующих заметках мы расскажем о ней подробнее).

Модель Spree::Review имеет всего три валидатора:

:name — ActiveRecord::Validations::PresenceValidator

          :review — ActiveRecord::Validations::PresenceValidator

          :rating — ActiveModel::Validations::NumericalityValidator

С первыми двумя все понятно. Простая валидация наличия, никаких дополнительных условий и сообщений. С третьей же дело обстоит значительно интересней:

  :rating —  у него есть @options

          {:only_integer=>true,

          :greater_than_or_equal_to=>1,

          :less_than_or_equal_to=>5,

          :message=> «<span class=»translation_missing» title=»translation missing: ru.spree.you_must_enter_value_for_rating»>You Must Enter Value For Rating</span>»}

Общая картина не изменится, так как у валидаций есть ещё колбэки, которые не знают про существование вашего I18n — файла. В этом случае поможет только удаление старых валидаций и колбэков с последующим переписыванием на новую валидацию (добавляем код в декоратор модели Spree::Review)

Удаляем валидацию:

_validators.delete(:rating)

Чистим колбэки Spree:

_validate_callbacks.each do |callback|

          callback.raw_filter.attributes.reject! { |key| key == :rating } if callback.raw_filter.respond_to?(:attributes)

          end

Перезаписываем новую валидацию и заворачиваем вызов перевода в лямбду, так как наши внешние переводы (переменные) не видны внутри обычного вызова  Spree.t(‘you_must_enter_value_for_rating’):

validates :rating, numericality: {

          only_integer: true,

          greater_than_or_equal_to: 1,

          less_than_or_equal_to: 5,

          message: ->(*args) { Spree.t(‘you_must_enter_value_for_rating’) }  }

Поздравляем! Только что вы познакомились с колбэками Spree. В дальнейшем работа с ними будет проходить по аналогичному сценарию. Только лямбда потребуется вам далеко не всегда. К примеру, для обработки ошибок в валидации будет достаточно прописать:

message: :invalid_phone_number

если в ru.yml прописано так:

ru:

         errors:

          messages:

            Invalid_phone_number: wrong format

Будьте внимательны и у вас все получится. Продолжение следует.

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!