Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2010 18:52:02

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

:)
по поводу простого примера с gettext
сделаем файл test.py с таким содержимым:

import gettext
lang1 = gettext.translation('messages', 'i18n', languages=['en'])
lang2 = gettext.translation('messages', 'i18n', languages=['ru'])
lang1.install()
print _(u'This is a translatable string.')
lang2.install()
print _(u'This is a translatable string.')
получаем pot файл
pygettext.py test.py
у нас появляется файл messages.pot
правим в нем CHARSET на utf-8
создаем директорию i18n/ru/LC_MESSAGES и i18n/en/LC_MESSAGES
копируем в них файлик messages.pot под именем messages.po
нас интересует файлик в директории i18n/ru/LC_MESSAGES
открываем файлик messages.po (кодировка utf-8) и в строке msgstr пишем русскую фразу
для файлов messages.po формируем mo файлы
msgfmt.py messages.po
пробуем запустить файл test.py



Офлайн

#2 Ноя. 24, 2010 21:47:48

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Организация Многоязычности.

Вот кстати gettext на JavaScript

http://habrahabr.ru/blogs/webdev/108348/



Офлайн

#3 Ноя. 25, 2010 14:04:59

iDima
От:
Зарегистрирован: 2010-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

ofigetitelno Спасибо за пример.)
Я вечером попробую из дома.
Хотел узнать а как это реализуется именно в Веб. Как это будет выглядеть в шаблоне. Я хочу перевести весь интерфейс сайта допустим на 2 языка.



Офлайн

#4 Ноя. 25, 2010 14:49:14

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

:)
например для мако
http://www.makotemplates.org/docs/usage.html#babel



Офлайн

#5 Ноя. 25, 2010 15:14:25

iDima
От:
Зарегистрирован: 2010-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

Не я имел ввиду на примере каком нибудь. Извините за настырность.:)

Ну допустим как Ваш выше приведенный пример вывести в .html-е? Это как раз про мой вопрос про пример

iDima
2 кнопки ру и ен
и при нажатии на которые происходит смена языка какой нибуть фразы типа “Привет мир”.
Спасибо Огромное если подскажете.



Офлайн

#6 Ноя. 26, 2010 00:03:41

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

:)
делаем файлик test0.py

from gettext import translation
from paste import urlmap, httpserver
from mako.template import Template

LANGUAGES = {
'en': translation('messages', 'i18n', languages=['en']),
'ru': translation('messages', 'i18n', languages=['ru'])}

TEMPLATE = Template(filename='test0.mako', output_encoding='utf-8')

def render(language='en'):
kwargs = {
'_': LANGUAGES[language].ugettext}
return TEMPLATE.render(**kwargs)

def en_app(environ, start_response):
start_response('200 OK', [('Content-type', 'text/html')])
return render()

def ru_app(environ, start_response):
start_response('200 OK', [('Content-type', 'text/html')])
return render('ru')

mapping = urlmap.URLMap()
mapping['/'] = en_app
mapping['/en'] = en_app
mapping['/ru'] = ru_app

httpserver.serve(mapping, host='127.0.0.1', port=5000)
делаем ещё один файлик test0.mako
<body>
<a href="/ru">russian</a><br/>
<a href="/en">english</a><br/>
${_(u'This is a translatable string.')}
перевод используем из предыдущего примера
запускаем:
python test0.py
заходим в броузере на http://127.0.0.1:5000
тыркаем по ссылкам и наслаждаемся…



Офлайн

#7 Ноя. 26, 2010 10:34:50

iDima
От:
Зарегистрирован: 2010-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

ofigetitelno Спасибо огромное!!! Я уже немного разобрался при помощи Ваших примеров. :)



Офлайн

#8 Дек. 19, 2010 09:01:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Организация Многоязычности.

в голову пришел такой вариант: делаем файл main.base

<html><head>
<title>{$my site$} {{title}}</title>
</head><body>...
запускаем скрипт который заменяет {$(.*?)$} на слова из подготовленного словаря (pot файл) и раскладывает по папкам ./en/, ./ru/, ./fr/

в движковом скрипте надо будет просто выбрать path для текущего запроса.
отличие от gettext - нет лишних преобразований.

а вообще, этот вариант я рассматриваю для проекта у которого на каждый язык свое wsgi приложение и отдельная БД, и язык для текущего wsgi задается в конфиге.

Офлайн

#9 Дек. 19, 2010 10:07:33

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Организация Многоязычности.

Боюсь, что по мере совершенствования вашего варианта получите тот же gettext - только при этом затратите дополнительное время на разработку.
Оправданием может послужить то, что изобретать колесо - весело и интересно, как мне подсказали.

Если уж следовать вашей идее (готовим локализацию в самом шаблоне) - то проще сделать “общие шаблоны для gettext”, а потом один раз выгнать из них локализации для нужных языков. Их и подключать. Что, кстати, делают сплошь и рядом.



Офлайн

#10 Дек. 20, 2010 00:49:24

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация Многоязычности.

o7412369815963 Я так понял, что предлагается иметь кучу одинаковых шаблонов (для каждого языка)? А как быть с множественной формой? К примеру “1 яйцо”, “2 яйца”, “5 яиц”. Тем более, что в разных языках их разное количество (форм).

Андрей Светлов +1 за http://babel.edgewall.org/



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version