Найти - Пользователи
Полная версия: Организация Многоязычности.
Начало » Web » Организация Многоязычности.
1 2
ofigetitelno
:)
по поводу простого примера с 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
zheromo
Вот кстати gettext на JavaScript

http://habrahabr.ru/blogs/webdev/108348/
iDima
ofigetitelno Спасибо за пример.)
Я вечером попробую из дома.
Хотел узнать а как это реализуется именно в Веб. Как это будет выглядеть в шаблоне. Я хочу перевести весь интерфейс сайта допустим на 2 языка.
ofigetitelno
:)
например для мако
http://www.makotemplates.org/docs/usage.html#babel
iDima
Не я имел ввиду на примере каком нибудь. Извините за настырность.:)

Ну допустим как Ваш выше приведенный пример вывести в .html-е? Это как раз про мой вопрос про пример
iDima
2 кнопки ру и ен
и при нажатии на которые происходит смена языка какой нибуть фразы типа “Привет мир”.
Спасибо Огромное если подскажете.
ofigetitelno
:)
делаем файлик 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
тыркаем по ссылкам и наслаждаемся…
iDima
ofigetitelno Спасибо огромное!!! Я уже немного разобрался при помощи Ваших примеров. :)
o7412369815963
в голову пришел такой вариант: делаем файл main.base
<html><head>
<title>{$my site$} {{title}}</title>
</head><body>...
запускаем скрипт который заменяет {$(.*?)$} на слова из подготовленного словаря (pot файл) и раскладывает по папкам ./en/, ./ru/, ./fr/

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

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

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

Андрей Светлов +1 за http://babel.edgewall.org/
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