Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2007 08:05:58

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Локализация validator`ов

Собственно, как?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#2 Янв. 9, 2007 12:20:23

Maximbo
От:
Зарегистрирован: 2006-11-04
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

Тоже хотелось бы знать :)



Офлайн

#3 Янв. 9, 2007 17:53:39

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

PooH
Собственно, как?
В FormEncode 6.1 это уже будет “из коробки” - я им русский перевод отправлял.
Пока что можно локализовать сообщения в классах, унаследованных от валидаторов. Но нужен FormEncode не ниже 6.0. Обсуждалось тут: http://groups.google.com/group/turbogears-ru/browse_thread/thread/e4534c551f21d4c1/b475d8d4800543e8



Офлайн

#4 Янв. 10, 2007 07:24:04

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Локализация validator`ов

Хмм… 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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Янв. 10, 2007 10:57:27)

Офлайн

#5 Янв. 10, 2007 10:42:44

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

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 у меня такой подход работает.



Офлайн

#6 Янв. 10, 2007 12:10:25

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Локализация validator`ов

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`вского унаследоватся :)
Интересно почему авторы не захотели это сделать?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Янв. 10, 2007 12:22:41

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

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

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

FormEncode 0.6



Офлайн

#8 Янв. 10, 2007 12:27:45

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Локализация validator`ов

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

Да все, вопрос снят, в первом примере я прокосячился, когда из редактора кусок копировал в ipython.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Янв. 10, 2007 12:38:31

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

насчет 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 *
:(



Офлайн

#10 Янв. 10, 2007 12:44:10

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Локализация validator`ов

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version