Ответ 1
Это обычная проблема и на итальянском языке.
Одним из решений, которое не требует плагинов, было бы использование специальных ключей для пола.
it:
presentation_f: "Sig.ra %{customer_name}"
presentation_m: "Sig. %{customer_name}"
Вы можете создать метод в своей модели, который берет ключ ввода и возвращает ключ с измененным полом:
module Genderize
def genderize(key)
"#{key}_#{self.gender}"
end
end
class Customer
include Genderize
def gender
gender_field_from_database_or_wherever || 'm'
end
end
В вашем контроллере или представлениях вы можете сделать что-то вроде:
t(@person.genderize('presentation'), customer_name: @person.name)
Пример немного изобретателен, но вы получаете изображение.
Еще одна вещь, которую вы можете сделать, это написать функцию tg
(значение t-genderized), которая принимает в качестве второго аргумента
модель, где можно получить гендерный метод:
def tg(key, model, options={})
gender_key = "#{key}_#{model.gender}"
I18n.t(gender_key, options)
end
Что в основном такое же, как и выше, без загрязнения моделей, используя вместо этого глобальную функцию.
i18n-inflector-rails выглядит как интересный проект, но, по моему опыту, не так редко передавать файлы ямля нетехническим переводчикам и иметь дополнительную сложность для объяснения:
en:
welcome: "Dear @{f:Lady|m:Sir|n:You|All}"
может быть слишком много для них. Хотя этот:
en:
welcome_f: "Dear Lady"
welcome_m: "Dear Sir"
welcome_n: "Dear You"
Это намного проще прочитать, чтобы объяснить.
Я также хотел бы предложить (это бесплатный совет, не связанный с вопросом), чтобы сохранить файлы yaml как плоские, так как это предпочтительнее использовать строки с именами в качестве ключей, встроенные вложенные структуры. Например, выполните следующие действия:
it:
home_page_welcome: "Welcome to the home page!"
вместо этого:
it:
home_page:
welcome: "Welcome to the home page!"
Вы платите немного больше многословности в контроллерах и представлениях, но в итоге вы получаете код, который вы можете перемещать намного проще, не переставляя древовидную структуру в yaml fies. Будет также намного легче узнать испорченный отступ, когда переведенные файлы вернутся к вам.