Как изменить удобочитаемые атрибуты в зависимости от контекста в Rails? - PullRequest
0 голосов
/ 19 сентября 2018

Я знаю, что могу изменить имена ActiveRecord в файле локали, но есть ли способ изменить их в зависимости от контекста, а не локали (при этом используя файлы локали в приложении)?

Для простогопример (у меня есть несколько обстоятельств, когда мне нужно выполнить это), если у меня есть форма адреса в мастере, и пользователь выбирает страну, как я могу изменить метку / сообщения об ошибке для атрибута :zipcode, чтобы отобразить "Zipcode"для тех, кто выбрал Соединенные Штаты, и "Postcode" для тех, кто выбрал Соединенное Королевство?

Редактировать: что я имею в виду при изменении атрибута модели (страны), как изменить удобочитаемые атрибуты для (почтовый индекс) на основе выбора страны.Язык пользователей не изменится (я уже использую файлы переводов для переводов).

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я принял другой ответ, так как в конечном итоге использовал файлы локали как часть моего решения.

Однако то, что я сделал, было немного странно:

  1. Установите для локали значение{language}-{selected_country} перед необходимым запросом
  2. При необходимости используйте специальные переопределения в этих файлах YAML, по возможности прибегайте к стандартным атрибутам в файле базового языка.
  3. Используйте alias_attributes в FormObject, чтобы минимизировать необходимость вышеупомянутого взлома.
0 голосов
/ 19 сентября 2018

Лучший способ локализации - использовать I18n, проверьте этот пост: https://guides.rubyonrails.org/i18n.html#setup-the-rails-application-for-internationalization

Базовый I18n

Сначала добавьте локали в свой контроллер application.rb

config.i18n.available_locales = ["en-GB",  "en-US"]
config.i18n.default_locale = "en-US"

Затем создайте 2 файла en-US.yml и en-GB.yml в config/locales

# en-GB.yml
en-Gb:
  zipcode: "PostCode"

# en-US.yml
en-US:
  zipcode: "ZipCode"

Затем в вашем контроллере вам нужно будет установить словарь, который будет использоваться для перевода.Он определяется с помощью переменной I18n.locale.

# example when locale is passing through params
before_action :set_locale

def set_locale
  I18n.locale = I18n.available_locales.include?(params[:locale]) ? params[:locale] : I18n.default_locale
end

И, наконец, в ваших представлениях: <% = t ('zipcode')%>

Или, если вам нужны рубиновые файлы:

I18n.t('zipcode')

Локализация атрибутов ActiveRecord

То же, что и выше, вы можете создать active_record.en-US.yml в config/locales

# active_record.en-US.yml
en-US:
  activerecord:
    attributes:
      your_model_name:
        zipcode: 'ZipCode'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...