Обработка грамматического пола с помощью Gettext
Я ищу простой и элегантный способ обработки грамматического пола с Gettext в приложении Rails, так же, как множественные числа обрабатываются с помощью метода n_()
.
Это не интересует английский язык, поскольку слова не меняются в зависимости от пола, но это происходит при переводе на испанский. Его/ее хороший вариант использования на английском языке. Это действительно необходимо при переводе на испанский.
Пример:
Учитывая пользователей Пабло (мужчина) и Марии (женщины).
_('%{user} is tall') & {:user => user.name}
Должно быть переведено на
'Pablo es alto'
'María es alta'
Конечно, у нас есть доступ к user.gender
Любые идеи?
Ура!
Ответы
Ответ 1
Используя стандартные функции gettext, это можно решить с помощью контекстов. Как вызов подходящего:
p_('Male', '%{user} is tall')
или
p_('Female', '%{user} is tall')
Это приведет к созданию двух отдельных строк в каталогах gettext, обозначающих их контекстами "Мужской" и "Женский".
Ответ 2
К сожалению нет. Это ограничение системы gettext - помимо числа, лингвистические функции основаны на языке, который вы отключаете. Если бы вы использовали все свои строки на испанском языке, это сработало бы.
Другим вариантом было бы добавить символ в строку для радиуса трансляции, а затем отключить его.
Я не знаком с Ruby, но основная идея в psuedo-коде будет:
if (user.sex == male) {
strip_last_char(_('%{user} is tall♂') & {:user => user.name})
} else {
strip_last_char(_('%{user} is tall♀') & {:user => user.name})
}
Ответ 3
Как насчет использования множественной формы механизма gettext. Обычно для различения сингулярных и множественных форм используется параметр n.
Теперь представьте, что вы используете n для определения своего пола вместо суммы. Таким образом, p.ex. n = 1 означает женский (а не сингулярный) и n = 2 (или n > 1) означает женский (а не множественный).
n = user.male? ? 1 : 0
n_('%{user} is tall', '%{user} is tall', n) & {:user => user.name}