Latest posts on Pyramid - simpleform formencode i18n перевод ошибок валидаторов topichttp://python.su/forum/topic/12634/2011-11-08T15:26:15+02:00Веб-технологии :: Pyramid / Pylons / TurboGears :: Pyramid - simpleform formencode i18n перевод ошибок валидаторов
2011-11-08T15:26:15+02:00Solaris79030Появилось решение на stackoverflow<br/><a href="http://stackoverflow.com/questions/7766011/formencode-in-pyramid-and-pyramid-simplefrom-set-fixed-locale">http://stackoverflow.com/questions/7766011/formencode-in-pyramid-and-pyramid-simplefrom-set-fixed-locale</a><br/><br/>Я его немного модифицировал, чтобы использовался текущий язык.<br/><br/>Регистрируем подписчика<br/><div class="code"><pre>config.add_subscriber("myproject.subscribers.add_localizer",<br/> "pyramid.events.NewRequest")</pre></div>Добавляем подписчика<br/><div class="code"><pre>from pyramid import i18n<br/>from formencode import api as formencode_api<br/><br/>def add_localizer(event):<br/> request = event.request<br/> localizer = i18n.get_localizer(request)<br/> if not hasattr(localizer, "old_translate"):<br/> localizer.old_translate = localizer.translate # Backup the default method<br/> request.localizer = localizer<br/> request.translate = lambda x: localizer.translate(i18n.TranslationString(x))<br/><br/> formencode_api.set_stdtranslation(languages=[request.localizer.locale_name])<br/><br/> def multiple_gettext(value, domain=''):<br/> # Try default translation first<br/> t = localizer.old_translate(i18n.TranslationString(value))<br/> if t == value:<br/> # It looks like translation failed, let's try FormEncode<br/> t = formencode_api._stdtrans(value)<br/> return t<br/><br/> localizer.translate = multiple_gettext</pre></div>
Веб-технологии :: Pyramid / Pylons / TurboGears :: Pyramid - simpleform formencode i18n перевод ошибок валидаторов
2011-09-25T01:19:36+03:00Solaris77223Есть приложение Shootout, форкнуть его можно здесь <a href="https://github.com/Pylons/shootout">https://github.com/Pylons/shootout</a><br/>В нем используется pyramid_simpleform и formencode<br/>Там есть форма регистрации<br/><br/>Не могу понять как локализировать ошибки валидаторов из formencode. Чтобы при отправке формы с незаполненным полем оно ругалось, скажем, на русском.<br/><br/>formencode.api.set_stdtranslation(domain=”FormEncode”, languages=)<br/>не помогает или я его не туда вставляю. Он работает только когда библиотека используется отдельно от pyramid.<br/><br/>Варианты со State object наверное не то, что нужно, так как внутри formencode уже есть перевод этих строк и его нужно как-то активировать.<br/><br/>Есть конечно вариант явной перезаписи всех сообщений при определении схемы, но этот вариант кажется мне каким-то “неправильным”.<br/><br/><div class="code"><pre>class EmailForm(formencode.Schema):<br/> allow_extra_fields = True<br/> filter_extra_fields = True<br/> email = formencode.validators.Email(not_empty=True,<br/> messages = {<br/> 'empty': _('Please enter an email address'),<br/> 'noAt': _('An email address must contain a single @'),<br/> 'badUsername': _('The username portion of the email address is<br/>invalid (the portion before the @: %(username)s)'),<br/> 'socketError': _('An error occured when trying to connect to the<br/>server: %(error)s'),<br/> 'badDomain': _('The domain portion of the email address is invalid<br/>(the portion after the @: %(domain)s)'),<br/> 'domainDoesNotExist': _('The domain of the email address does not<br/>exist (the portion after the @: %(domain)s)'),<br/> })</pre></div>