Latest posts on Локализация validator`ов topichttps://python.su/forum/topic/340/2007-04-02T12:55:17+03:00Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-04-02T12:55:17+03:00pythonwin4369<blockquote><em>OlDer</em><br/>В FormEncode 6.1 это уже будет “из коробки” - я им русский перевод отправлял.</blockquote><a href="http://python.org/pypi/FormEncode/0.7.1">http://python.org/pypi/FormEncode/0.7.1</a><br/>добавлено :)
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-30T06:42:49+02:00pythonwin2790посидел с локализацией - проблему можно обойти:<br/><div class="code"><pre><span class="k">def</span> <span class="nf">Int_utf</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">kw</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">messages</span><span class="p">):</span>
<span class="n">kw</span><span class="p">[</span><span class="s">'messages'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s">'integer'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s">"Please enter an integer value"</span><span class="p">)}</span>
<span class="k">return</span> <span class="n">formencode</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">Int</span><span class="p">(</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
</pre></div><br/>правда код не очень, но работает
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T13:05:06+02:00PooH2285Да, еще, вдогонку. Стоит еще из value в _to_python перед преобразованием в число пробелы вырезать. Столкнулся недавно, Firefox разделяет ими триплеты в числе для красоты, а потом с ними и постит.
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:57:59+02:00PooH2284Да все уже, все понял :) Всем спасибо :)<br/><br/>from turbogears import validators, util<br/>import formencode<br/><br/>class Number(formencode.validators.Number):<br/><br/> messages = {<br/> ‘number’: ‘Введите число’,<br/> }<br/> <br/> def _to_python(self, value, state):<br/> “”“ parse a string and returns a float or integer ”“”<br/> try:<br/> value = validators.format.parse_decimal(value)<br/> except ValueError:<br/> pass<br/> return super(Number, self)._to_python(value, state)<br/> <br/> def _from_python(self, value, state):<br/> “”“ returns a string using the correct grouping ”“”<br/> dec_places = util.find_precision(value)<br/> if dec_places > 0:<br/> return validators.format.format_decimal(value, dec_places)<br/> else:<br/> return validators.format.format_number(value)<br/> <br/>v = Number()<br/>tt=v.to_python('tt')<br/>
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:44:10+02:00pythonwin2283<div class="code"><pre><span class="kn">import</span> <span class="nn">turbogears</span>
<span class="kn">import</span> <span class="nn">formencode</span>
<span class="k">class</span> <span class="nc">Number_ru</span><span class="p">(</span><span class="n">formencode</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
<span class="n">messages</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'number'</span><span class="p">:</span> <span class="s">'Введите число'</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">class</span> <span class="nc">Number</span><span class="p">(</span><span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">FancyValidator</span><span class="p">):</span>
<span class="n">nb_class</span> <span class="o">=</span> <span class="n">formencode</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">Number</span>
<span class="k">def</span> <span class="nf">_to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="sd">""" parse a string and returns a float or integer """</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">parse_decimal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">nb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nb_class</span><span class="p">()</span>
<span class="k">return</span> <span class="n">nb</span><span class="o">.</span><span class="n">_to_python</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_from_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="sd">""" returns a string using the correct grouping """</span>
<span class="n">dec_places</span> <span class="o">=</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">find_precision</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dec_places</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format_decimal</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dec_places</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format_number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">Number</span><span class="p">()</span>
<span class="n">v</span><span class="o">.</span><span class="n">nb_class</span> <span class="o">=</span> <span class="n">Number_ru</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">tt</span><span class="o">=</span><span class="n">v</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="s">'tt'</span><span class="p">)</span>
<span class="k">print</span> <span class="n">tt</span>
<span class="k">del</span> <span class="n">tt</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">print</span> <span class="n">e</span>
</pre></div>
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:38:31+02:00pythonwin2282насчет Number - может просто переписать?<br/><br/><div class="code"><pre><span class="kn">import</span> <span class="nn">turbogears</span>
<span class="kn">import</span> <span class="nn">formencode</span>
<span class="k">class</span> <span class="nc">Number_ru</span><span class="p">(</span><span class="n">formencode</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
<span class="n">messages</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'number'</span><span class="p">:</span> <span class="s">'Введите число'</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">class</span> <span class="nc">Number3</span><span class="p">(</span><span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">FancyValidator</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="sd">""" parse a string and returns a float or integer """</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">parse_decimal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">nb</span> <span class="o">=</span> <span class="n">Number_ru</span><span class="p">()</span>
<span class="k">return</span> <span class="n">nb</span><span class="o">.</span><span class="n">_to_python</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_from_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="sd">""" returns a string using the correct grouping """</span>
<span class="n">dec_places</span> <span class="o">=</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">find_precision</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dec_places</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format_decimal</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dec_places</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">turbogears</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format_number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
</pre></div><br/>PS сильно не нравиться всякие <br/>from имя import *<br/>:(
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:27:45+02:00PooH2281<blockquote><em>pythonwin</em><br/>этот попробуй<br/>с кодировкой проблема - выводит в cp1251 - попробуйте на линухе - может будет нормально выводить в utf-8…</blockquote>А у меня кроме линухи и нет ничего ;)<br/><br/>Да все, вопрос снят, в первом примере я прокосячился, когда из редактора кусок копировал в ipython.
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:22:41+02:00pythonwin2280<div class="code"><pre><span class="k">class</span> <span class="nc">Int1</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">Int</span><span class="p">):</span>
<span class="n">messages</span> <span class="o">=</span> <span class="p">{</span><span class="s">'integer'</span><span class="p">:</span> <span class="s">u'Введите целое число'</span><span class="p">}</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">Int1</span><span class="p">()</span>
<span class="n">tt</span><span class="o">=</span><span class="n">v</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="s">'tt'</span><span class="p">)</span>
</pre></div>этот попробуй<br/>с кодировкой проблема - выводит в cp1251 - попробуйте на линухе - может будет нормально выводить в utf-8…<br/><br/>пока просто прописал <br/># -*- coding: cp1251 -*-<br/><br/>FormEncode 0.6
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T12:10:25+02:00PooH2279<blockquote><em>OldDer</em><br/><blockquote><em>PooH</em><br/>>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)</blockquote>Эта ошибка уж точно не имеет ничего общего с валидаторами ;-)</blockquote>Это я действительно маху дал.<br/><br/>А вот с Number все хуже - он описан в turbogears.validators как:<br/><br/> class Number(FancyValidator):<br/><br/> def _to_python(self, value, state):<br/> “”“ parse a string and returns a float or integer ”“”<br/> try:<br/> value = format.parse_decimal(value)<br/> except ValueError:<br/> pass<br/> nb = validators.Number() #вот он косяк, наследоватся безполезно <br/> return nb._to_python(value, state)<br/><br/><br/>Ну да не страшно, можно и от FormEncode`вского унаследоватся :)<br/>Интересно почему авторы не захотели это сделать?
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T10:42:44+02:00OlDer2277<blockquote><em>PooH</em><br/>Хмм… 6.0? Это не опечатка?</blockquote>Опечатка, конечно ;-)<br/><blockquote><em>PooH</em><br/>на <a href="http://cheeseshop.python.org" rel="nofollow">cheeseshop.python.org</a> лежит 0.6, с ним у меня не работает :(<br/>>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)</blockquote>Эта ошибка уж точно не имеет ничего общего с валидаторами ;-)<br/><blockquote><em>PooH</em><br/>class Number(validators.Number):<br/><br/> messages = {<br/> ‘number’: u“Введите число”,<br/> }<br/><br/>v = Number()<br/>v .to_python('tt')<br/><br/>>> Invalid: Please enter a number</blockquote>Number и Int я не использовал, сейчас проверять некогда, но с NotEmpty и Email у меня такой подход работает.
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-10T07:24:04+02:00PooH2276Хмм… 6.0? Это не опечатка? на <a href="http://cheeseshop.python.org" rel="nofollow">cheeseshop.python.org</a> лежит 0.6, с ним у меня не работает :(<br/>from turbogears import validators<br/> <br/>class Int(validators.Int):<br/> <br/> messages = {<br/> ‘integer’: u“Введите целое число”,<br/> } <br/><br/>v = Int()<br/>v .to_python('tt')<br/><br/>>> exceptions.UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-13: ordinal not in range(128)<br/><br/>class Number(validators.Number):<br/><br/> messages = {<br/> ‘number’: u“Введите число”,<br/> }<br/><br/>v = Number()<br/>v .to_python('tt')<br/><br/>>> Invalid: Please enter a number
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-09T17:53:39+02:00OlDer2272<blockquote><em>PooH</em><br/>Собственно, как?</blockquote>В FormEncode 6.1 это уже будет “из коробки” - я им русский перевод отправлял.<br/>Пока что можно локализовать сообщения в классах, унаследованных от валидаторов. Но нужен FormEncode не ниже 6.0. Обсуждалось тут: <a href="http://groups.google.com/group/turbogears-ru/browse_thread/thread/e4534c551f21d4c1/b475d8d4800543e8">http://groups.google.com/group/turbogears-ru/browse_thread/thread/e4534c551f21d4c1/b475d8d4800543e8</a>
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-09T12:20:23+02:00Maximbo2260Тоже хотелось бы знать :)
Веб-технологии :: Pyramid / Pylons / TurboGears :: Локализация validator`ов
2007-01-09T08:05:58+02:00PooH2255Собственно, как?