46
Översättning i Django Mikael Moutakis [email protected]

Översättning av django-program

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

Page 1: Översättning av django-program

Översättning i DjangoMikael Moutakis

[email protected]

Page 2: Översättning av django-program

Internationalizationi18n

Page 3: Översättning av django-program

LocalizationL10n

Page 4: Översättning av django-program

Vad?

Page 5: Översättning av django-program

Varför?

Page 6: Översättning av django-program

Det minst viktiga först ...

Page 7: Översättning av django-program

. . . mjukvaran!

Page 8: Översättning av django-program

Hur funkar tekniken?

1. Märk ut pythonkod och templatekod

2. Extrahera

3. Översätt

4. Kompilera och installera

5. Starta om server

Page 9: Översättning av django-program

... 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'

Page 10: Översättning av django-program

1.a Märk ut pythonkod

from django.utils.translation import ugettext_lazy as _

class Calendar(models.Model):

color = models.CharField(_("color"))

Page 11: Översättning av django-program

1.a Märk ut pythonkod

• ugettext_noop

• ugettext

• ugettext_lazy

• ungettext

• ungettext_lazy

Page 12: Översättning av django-program

Vara lat?

• ugettext_lazy för model.py

• När textvärdet hämtas

• ugettext för resten

• När funktionen anropas

Page 13: Översättning av django-program

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)

Page 14: Översättning av django-program

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>

Page 15: Översättning av django-program

1.b templatekod

<h1>{% trans “Kanelbulle” %}</h1>

<h1>{% trans “Kanelbulle” noop %}</h1>

Page 16: Översättning av django-program

1.b templatekod

<p>{% blocktrans with publ_date|date as local_date %}

Idag är det {{local_date}}. Mac rular fett.

{% endblocktrans%}</p>

Page 17: Översättning av django-program

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>

Page 18: Översättning av django-program

1.b templatekod{% blocktrans count list|length as counter %}

There is only one {{ name }} object.

{% plural %}

There are {{ counter }} {{ name }} objects.

{% endblocktrans %}

Page 19: Översättning av django-program

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

Page 20: Översättning av django-program

Mappstruktur

Page 21: Översättning av django-program

2. Extrahera texten

cd /path/to/myproject

(cd /path/to/myapp)

mkdir -p locale/sv/LC_MESSAGES

django-admin.py makemessages -l sv

Page 22: Översättning av django-program

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"

Page 23: Översättning av django-program

poEdit

Page 24: Översättning av django-program

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

Page 25: Översättning av django-program

Vilket språk? (2)

ugettext = lambda s: sLANGUAGES = ( ('sv', ugettext('Swedish')), ('en', ugettext('English')),)

Page 26: Översättning av django-program

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

!

Page 27: Översättning av django-program

Nu den svåra biten . . .

Page 28: Översättning av django-program

Nu den svåra biten . . .pillig

a

Page 29: Översättning av django-program

Tänk på sammanhanget!

Page 30: Översättning av django-program

Kom ihåg denna bild!

Page 31: Översättning av django-program

Vad fan menar han?

Page 32: Översättning av django-program
Page 33: Översättning av django-program
Page 34: Översättning av django-program
Page 35: Översättning av django-program

Tillbaka till Google Docs

Page 36: Översättning av django-program

Men vad ser översättaren?

New

Upload

All itemsOwned by me

Opened by meStarred

Hidden

Trash

Page 37: Översättning av django-program

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

Page 38: Översättning av django-program

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]

Page 39: Översättning av django-program

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”?

Page 40: Översättning av django-program

Datum, typografi, mm

• Heute ist 20.04.09. Kennt ihr „Django”?

• Σήμερα είναι 20.04.09. Γνωρίζετε το «Django»;

• 今日は2009年04月20日です。「ドジャんゴ』をしりませんか。

Page 41: Översättning av django-program

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 %}

Page 42: Översättning av django-program

Skrivriktning?

Page 43: Översättning av django-program

Sammanfattning

• Tänk på sammanhanget

• Tänk på typografin

• Olika sätt att skriva datum

• Olika längd på texten

• Skrivriktning

Page 44: Översättning av django-program

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

Page 45: Översättning av django-program

Fler länkar

• http://www.onemanga.com/Bakuman/

• http://www.mangakailund.org/

Page 46: Översättning av django-program

Tack för uppmärksamheten