Найти - Пользователи
Полная версия: Локализация validator`ов
Начало » Pyramid / Pylons / TurboGears » Локализация validator`ов
1 2
PooH
Собственно, как?
Maximbo
Тоже хотелось бы знать :)
OlDer
PooH
Собственно, как?
В FormEncode 6.1 это уже будет “из коробки” - я им русский перевод отправлял.
Пока что можно локализовать сообщения в классах, унаследованных от валидаторов. Но нужен FormEncode не ниже 6.0. Обсуждалось тут: http://groups.google.com/group/turbogears-ru/browse_thread/thread/e4534c551f21d4c1/b475d8d4800543e8
PooH
Хмм… 6.0? Это не опечатка? на cheeseshop.python.org лежит 0.6, с ним у меня не работает :(
from turbogears import validators

class Int(validators.Int):

messages = {
‘integer’: u“Введите целое число”,
}

v = Int()
v .to_python('tt')

>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)

class Number(validators.Number):

messages = {
‘number’: u“Введите число”,
}

v = Number()
v .to_python('tt')

>> Invalid: Please enter a number
OlDer
PooH
Хмм… 6.0? Это не опечатка?
Опечатка, конечно ;-)
PooH
на cheeseshop.python.org лежит 0.6, с ним у меня не работает :(
>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)
Эта ошибка уж точно не имеет ничего общего с валидаторами ;-)
PooH
class Number(validators.Number):

messages = {
‘number’: u“Введите число”,
}

v = Number()
v .to_python('tt')

>> Invalid: Please enter a number
Number и Int я не использовал, сейчас проверять некогда, но с NotEmpty и Email у меня такой подход работает.
PooH
OldDer
PooH
>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)
Эта ошибка уж точно не имеет ничего общего с валидаторами ;-)
Это я действительно маху дал.

А вот с Number все хуже - он описан в turbogears.validators как:

class Number(FancyValidator):

def _to_python(self, value, state):
“”“ parse a string and returns a float or integer ”“”
try:
value = format.parse_decimal(value)
except ValueError:
pass
nb = validators.Number() #вот он косяк, наследоватся безполезно
return nb._to_python(value, state)


Ну да не страшно, можно и от FormEncode`вского унаследоватся :)
Интересно почему авторы не захотели это сделать?
pythonwin
class Int1(validators.Int):
    messages = {'integer': u'Введите целое число'}
v = Int1()
tt=v.to_python('tt')
этот попробуй
с кодировкой проблема - выводит в cp1251 - попробуйте на линухе - может будет нормально выводить в utf-8…

пока просто прописал
# -*- coding: cp1251 -*-

FormEncode 0.6
PooH
pythonwin
этот попробуй
с кодировкой проблема - выводит в cp1251 - попробуйте на линухе - может будет нормально выводить в utf-8…
А у меня кроме линухи и нет ничего ;)

Да все, вопрос снят, в первом примере я прокосячился, когда из редактора кусок копировал в ipython.
pythonwin
насчет Number - может просто переписать?

import turbogears
import formencode
class Number_ru(formencode.validators.Number):
    messages = {
        'number': 'Введите число',
        }
class Number3(turbogears.validators.FancyValidator):
    def _to_python(self, value, state):
        """ parse a string and returns a float or integer """
        try:
            value = turbogears.validators.format.parse_decimal(value)
        except ValueError:
            pass
        nb = Number_ru()
        return nb._to_python(value, state)
    def _from_python(self, value, state):
        """ returns a string using the correct grouping """
        dec_places = turbogears.util.find_precision(value)
        if dec_places > 0:
            return turbogears.validators.format.format_decimal(value, dec_places)
        else:
            return turbogears.validators.format.format_number(value)

PS сильно не нравиться всякие
from имя import *
:(
pythonwin
import turbogears
import formencode
class Number_ru(formencode.validators.Number):
    messages = {
        'number': 'Введите число',
        }
class Number(turbogears.validators.FancyValidator):
    nb_class = formencode.validators.Number
    def _to_python(self, value, state):
        """ parse a string and returns a float or integer """
        try:
            value = turbogears.validators.format.parse_decimal(value)
        except ValueError:
            pass
        nb = self.nb_class()
        return nb._to_python(value, state)
    def _from_python(self, value, state):
        """ returns a string using the correct grouping """
        dec_places = turbogears.util.find_precision(value)
        if dec_places > 0:
            return turbogears.validators.format.format_decimal(value, dec_places)
        else:
            return turbogears.validators.format.format_number(value)
v = Number()
v.nb_class = Number_ru
try:
    tt=v.to_python('tt')
    print tt
    del tt 
except Exception, e:
    print e
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB