Upload
mikaelmoutakis
View
1.253
Download
2
Embed Size (px)
DESCRIPTION
Presentation om hur man förbereder ett djangoprojekt för översättning, hur man designar projektet för att underlätta för översättaren, hur man översätter med poEdit och hur översättning av ett djangoprogram fungerar.
Citation preview
Översättning i DjangoMikael Moutakis
Internationalizationi18n
LocalizationL10n
Vad?
Varför?
Det minst viktiga först ...
. . . mjukvaran!
Hur funkar tekniken?
1. Märk ut pythonkod och templatekod
2. Extrahera
3. Översätt
4. Kompilera och installera
5. Starta om server
... Steg 0. use_I18N=True
MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware',)
TEMPLATE_CONTEXT_PROCESSORS += ( “django.core.context_processors.i18n”,)
LANGUAGE_COOKIE_NAME="django_language"LANGUAGE_CODE = 'sv'
1.a Märk ut pythonkod
from django.utils.translation import ugettext_lazy as _
class Calendar(models.Model):
color = models.CharField(_("color"))
1.a Märk ut pythonkod
• ugettext_noop
• ugettext
• ugettext_lazy
• ungettext
• ungettext_lazy
Vara lat?
• ugettext_lazy för model.py
• När textvärdet hämtas
• ugettext för resten
• När funktionen anropas
ungettext och ungettext_lazy
from django.utils.translation import ungettext
def hello_world(request, count):
page = ungettext('there is %(count)d object', 'there are %(count)d objects', count) % {
'count': count,
}
return HttpResponse(page)
1.b templatekod{% load i18n %}
...
<h1>{% trans “Kanelbulle” %}</h1>
<p>{% blocktrans %}Hej, tomtegubbar slå i glasen, \n
och låt oss lustiga vara.
{% endblocktrans %}</p>
1.b templatekod
<h1>{% trans “Kanelbulle” %}</h1>
<h1>{% trans “Kanelbulle” noop %}</h1>
1.b templatekod
<p>{% blocktrans with publ_date|date as local_date %}
Idag är det {{local_date}}. Mac rular fett.
{% endblocktrans%}</p>
1.b templatekod
<p>{% blocktrans with publ_date|date as local_date and spam as skinka%}
Idag är det den {{local_date}}. Mac rular fett.
{{skinka}}, {{skinka}}, {{skinka}}
{% endblocktrans%}</p>
1.b templatekod{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}
2. Extrahera texten
cd /path/to/myproject
(cd /path/to/myapp)
django-admin.py makemessages -l sv
django-admin.py makemessages -l en
django-admin.py makemessages -l de
Mappstruktur
2. Extrahera texten
cd /path/to/myproject
(cd /path/to/myapp)
mkdir -p locale/sv/LC_MESSAGES
django-admin.py makemessages -l sv
django.pomsgid ""msgstr """Project-Id-Version: \n""Report-Msgid-Bugs-To: \n""POT-Creation-Date: 2008-10-12 19:21+0200\n""PO-Revision-Date: 2009-04-18 19:25+0100\n""Last-Translator: Mikael Moutakis <[email protected]>\n""Language-Team: \n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=UTF-8\n""Content-Transfer-Encoding: 8bit\n"
#: django_admin_overrides/admin/base.html:25msgid "Welcome,"msgstr "Välkommen,"
#: django_admin_overrides/admin/base.html:25#: templates/kousaiadmin/docs/index.html:3#: templates/kousaiadmin/docs/index.html:4msgid "Documentation"msgstr "Dokumentation"
#: django_admin_overrides/admin/base.html:25msgid "Change password"msgstr "Ändra lösenord"
poEdit
Vilket språk?
1. Nyckeln django_language i user session
2. Cookie django_language
3. Accept-Language HTTP header
4. LANGUAGE_CODE i settings.py
Vilket språk? (2)
ugettext = lambda s: sLANGUAGES = ( ('sv', ugettext('Swedish')), ('en', ugettext('English')),)
Vad har jag missat?
• olika sajter för olika länder
• string_concat
• @allow_lazy
• set_language redirect view
• översättning av javascript
• Windows
RTFM
!
Nu den svåra biten . . .
Nu den svåra biten . . .pillig
a
Tänk på sammanhanget!
Kom ihåg denna bild!
Vad fan menar han?
Tillbaka till Google Docs
Men vad ser översättaren?
New
Upload
All itemsOwned by me
Opened by meStarred
Hidden
Trash
Men vad ser översättaren?
New Ny/Nytt/Nya/Färsk/Färska?
Upload Ladda upp/Uppladdning?
All items Alla saker/punkter/nummer Owned by me Ägd/ägda av mig
Opened by me Öppnad/öppnade av migStarred Stjärnad? Framträdde?
Hidden Gömd/Gömda
Trash Smörja/struntprat/slödder
Lösning? Ge tips!
New [document]
Upload [a document]
All items [ie documents][documents] Owned by me
[documents] Opened by meStarred [documents]
Hidden [documents]
Trash [trashcan]
Datum, typografi, mm
• Idag är det 2009-04-20. Känner ni till “Django”?
• Today is 20/04/09. Do you know “Django”?
• Today is 04/20/09. Do you know “Django”?
Datum, typografi, mm
• Heute ist 20.04.09. Kennt ihr „Django”?
• Σήμερα είναι 20.04.09. Γνωρίζετε το «Django»;
• 今日は2009年04月20日です。「ドジャんゴ』をしりませんか。
Datum, typografi, mm
{% blocktrans with publ_date.year as year and publ_date.month as month and publ_date.day as day%}
Idag är det {{year}}-{{month}}-{{day}}.
{% endblocktrans %}
Skrivriktning?
Sammanfattning
• Tänk på sammanhanget
• Tänk på typografin
• Olika sätt att skriva datum
• Olika längd på texten
• Skrivriktning
Länkar
• http://www.norstedtsord.se/oversattning/engelska/
• http://docs.djangoproject.com/en/dev/topics/i18n/#topics-i18n
• http://en.wikipedia.org/wiki/Internationalization_and_localization
• http://en.wikipedia.org/wiki/Calendar_date
Fler länkar
• http://www.onemanga.com/Bakuman/
• http://www.mangakailund.org/
Tack för uppmärksamheten