2014-01-30 5 views
1

Мы строим проект, где нам нужно переводить уведомления на разные языки.Django translation: pick variables

Проблема в том, что, в отличие от стандарта "Hello, %(first_name)s", мы должны иметь "Halo, Herr %(last_name)s" в зависимости от языка.

Другими словами, переменные, которые мы хотим использовать в переведенном блоке, зависят от языка.

Что было бы лучшим способом его реализовать? Я бы очень хотел, чтобы не было необходимости применять различные шаблоны для каждого языка.

Спасибо!

ответ

1

Наличие:

user_data = { 
    'first_name': 'Charlie', 
    'last_name': 'Brown', 
} 

1.

Компиляция _('Hello, %(first_name)s') % user_data при подаче переводу Halo, Herr %(last_name)s результатов в ошибке a format specification for argument 'first_name' doesn't exist in 'msgstr', однако создается файл мо, а перевод работает нормально! (Протестировано с помощью gettext 0.18.1 под Windows).

2.

Вы можете использовать питон новой строки форматирования: _('Hello, {first_name}').format(**user_data) и перевести в Halo, Her, {last_name}

3. хака:

_("Hello %s") % (user_data[_('hello_name_field')]) 

#or uglier but safe: 
_("Hello %s") % (user_data.get(_('hello_name_field'), user_data['first_name'])