Название приложения на русском... как?

599 views
Skip to first unread message

ivankin

unread,
Jun 21, 2010, 2:00:44 PM6/21/10
to Django russian
Доброго времени суток!

Есть бешенно желание руссифицировать админку django до конца... Упёрся
в локализацию имён приложений. Погуглил. Нашёл кучу костылей:

http://habrahabr.ru/blogs/django/46087/
http://djangosnippets.org/snippets/1882/
кто-т писал ещё что использует django-admin-tools и там допиливает
руссификацию...

Сам я использую для админки django-grappelli (http://code.google.com/p/
django-grappelli/)
Какие способы Вы используете для того чтобы название приложения было
написано по русски?
Буду рад любым (адекватным) предложениям ;)

Заранее спасибо!

ivankin

unread,
Jun 21, 2010, 2:02:29 PM6/21/10
to Django russian
Кстати эта тема уже поднималась (http://groups.google.com/group/django-
russian/browse_thread/thread/97c0f1412946dbe6), но кроме стёба
результатов не дала)

spacenergy

unread,
Jun 21, 2010, 2:39:54 PM6/21/10
to Django russian
Вчера кстати бился над этим вопросом. И практически можно сказать что
нашел решение.

Суть его в app_label.
Предположим что у нас есть модель Game.

class Game(models.Model):
...
class Meta:
db_table='casino_games'
app_label='games'
verbose_name = u'игра'
verbose_name_plural = u'Список игр'
...

В данном случае создастся таблица casino_games и игра попадет в
админку в раздел Games
Стоит только переименовать app_label='games' в app_label=u'игры', как
в админке модель перенесется в раздел "Игры", но таблица не будет
создана. Просто 'manage.py syncdb' поведет себя так, как будто этой
модели не существует. Я решил проблему следующим путем - сначала все
app_name написал латиницей, сделал 'manage.py syncdb', а потом все
переименовал на русский.

Кстати, не пробовал еще сделать через gettext. Возможно прокатит такой
вариант:

from django.utils.translation import ugettext as _
...
app_label=_('games')
...

А потом все перевести.

И еще - я хотел поправить атрибут прямо перед регистрацией в админке:

User._meta.app_label=u'юзвери'
admin.site.register(User)

Но при попытке открыть или создать конкретного юзера в админке, я
вывалился в AttributeError:
'NoneType' object has no attribute '_meta',
хотя с первого взгляда все работало как нужно.

Я думаю если пошаманить немного, то последний вариант можно сделать
вполне работоспособным.

On 21 июн, 14:00, ivankin <lukyanets.i...@gmail.com> wrote:
> Доброго времени суток!
>
> Есть бешенно желание руссифицировать админку django до конца... Упёрся
> в локализацию имён приложений. Погуглил. Нашёл кучу костылей:
>

> http://habrahabr.ru/blogs/django/46087/http://djangosnippets.org/snippets/1882/

ivankin

unread,
Jun 22, 2010, 9:06:15 AM6/22/10
to Django russian
Спасибо за ответ!

Следующая схема:


> from django.utils.translation import ugettext as _
> ...
> app_label=_('games')

работает, но к сожалению меняется и url приложения в админке...
поэтому прибегнул к Вашему 1му варианту... он работает как часы)))
спасибо!

> >http://habrahabr.ru/blogs/django/46087/http://djangosnippets.org/snip...

ivankin

unread,
Jul 12, 2010, 8:57:16 AM7/12/10
to Django russian
Кстати... выплыла проблемка...
Способ с app_label=u'название приложения' работает только для
локальной отладки ... т.е. закинул проект сейчас на свой сервак для
теста и получил следуюшее:

Request Method: GET
Request URL: http://test.local/admin/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F/audioblog/
Django Version: 1.2.1
Exception Type: UnicodeEncodeError
Exception Value:

('ascii', u'/var/www/test/templates/admin/\u0413\u043b
\u0430\u0432\u043d\u0430\u044f/audioblog/change_list.html', 42, 49,
'ordinal not in range(128)')

Есть ли способ это побороть?

On 22 июн, 00:39, spacenergy <spacene...@gmail.com> wrote:

> >http://habrahabr.ru/blogs/django/46087/http://djangosnippets.org/snip...

ivankin

unread,
Jul 12, 2010, 9:26:50 AM7/12/10
to Django russian
Так... Нашёл ошибку в настройке Apache2...
Данная проблема решается добавление в /etc/apache2/envvars строчки:

export LANG="ru_RU.UTF-8"

On 12 июл, 18:57, ivankin <lukyanets.i...@gmail.com> wrote:
> Кстати... выплыла проблемка...
> Способ с app_label=u'название приложения' работает только для
> локальной отладки ... т.е. закинул проект сейчас на свой сервак для
> теста и получил следуюшее:
>
> Request Method:         GET

> Request URL:    http://test.local/admin/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F/au...

Reply all
Reply to author
Forward
0 new messages