Django internationalisation

47
Internationalisation

description

Speaking about how internationalisation affects web developers, how it works and what can be improved in Django. See http://reinout.vanrees.org/weblog/2014/11/14/4internationalisation.html for a write-up.

Transcript of Django internationalisation

Page 1: Django internationalisation

Internationalisation

Page 2: Django internationalisation
Page 3: Django internationalisation
Page 4: Django internationalisation

56% of the Web is English

Page 5: Django internationalisation

56% of the Web is English

5% native speaker

Page 6: Django internationalisation

56% of the Web is English

5% native speaker

20% basic understanding

Page 7: Django internationalisation

0.8% of the Web is Arabic

Page 8: Django internationalisation

0.8% of the Web is Arabic

4% native speaker

Page 9: Django internationalisation

0.1% of the Web is Hindi

Page 10: Django internationalisation

0.1% of the Web is Hindi

5% native speaker

Page 11: Django internationalisation

Next 4 billion

Page 12: Django internationalisation

Multilingual multicultural

Page 13: Django internationalisation

Long words and their abbreviations

Page 14: Django internationalisation

Internationalisation (i18n)

Page 15: Django internationalisation

Internationalisation (i18n)

{% blocktrans count message_count=messages.count %} {{ message_count }} message{% plural %} {{ message_count }} messages{% endblocktrans %}

Page 16: Django internationalisation

Internationalisation (i18n)

from django.utils.translation import gettext

def home(request): context = { 'page_title': gettext('About Us'), } return render(request, 'home.html', context)

Page 17: Django internationalisation

Translations (t9n)

Page 18: Django internationalisation

Translations (t9n)

#: home.html:5#, python-formatmsgid "%(message_count)s message"msgid_plural "%(message_count)s messages"msgstr[0] "%(message_count)s Nachricht"msgstr[1] "%(message_count)s Nachrichten"

Page 19: Django internationalisation

Translations (t9n)

class Revision(models.Model): # ... language = models.CharField(max_length=7, default=settings.LANGUAGE_CODE, choices=settings.LANGUAGES)

Page 20: Django internationalisation

Localisation (l10n)

Page 21: Django internationalisation

Localisation (l10n)

DATETIME_FORMAT = 'j. F Y H:i'FIRST_DAY_OF_WEEK = 1 # MondayDECIMAL_SEPARATOR = ','THOUSAND_SEPARATOR = '.'

Page 22: Django internationalisation

Localisation (l10n)

USE_L10N = True

Page 23: Django internationalisation
Page 24: Django internationalisation

django.utils.translation

Page 25: Django internationalisation

Language detection

— URL path

— Session data from a previous visit

— Cookie

— Accept-Language request header

— Django setting LANGUAGE_CODE

Page 26: Django internationalisation

gettext

Page 27: Django internationalisation

gettext string extraction workflow

1. add feature

2. run makemessages management command

3. send untranslated PO file to translators

4. receive translated PO file from translators

5. run compilemessages managment command

6. goto 1.

Page 28: Django internationalisation

JavaScript

Page 29: Django internationalisation

Timezones

Page 30: Django internationalisation

Local formats

Page 31: Django internationalisation

Unicode CLDR

Page 32: Django internationalisation

The missing pieces

Page 33: Django internationalisation

CLDR

— more formatting options

Page 34: Django internationalisation

CLDR

— more formatting options

— ability to update locale data

Page 35: Django internationalisation

Translation catalogs

— ability to merge catalogs

Page 36: Django internationalisation

Translation catalogs

— ability to merge catalogs

— visualize which strings require translation

Page 37: Django internationalisation

Translation catalogs

— ability to merge catalogs

— visualize which strings require translation

— show a dashboard for the progress

Page 38: Django internationalisation

Translate content

— specialized model fields and managers for translated content

Page 39: Django internationalisation

Translate content

— specialized model fields and managers for translated content

— add CompositeField for effective per language content

Page 40: Django internationalisation

Translate content

— specialized model fields and managers for translated content

— add CompositeField for effective per language content

— provide form widgets to embedding in user code

Page 41: Django internationalisation

Add helpers

— visual translation with sync to PO files

Page 42: Django internationalisation

Add helpers

— visual translation with sync to PO files

— language selectors for user facing code and admin

Page 43: Django internationalisation

Add helpers

— visual translation with sync to PO files

— language selectors for user facing code and admin

— extend language detection to take HOST into account

Page 44: Django internationalisation

Add helpers

— visual translation with sync to PO files

— language selectors for user facing code and admin

— extend language detection to take HOST into account

— add timezone selectors

Page 45: Django internationalisation

Call for action!

— rewrite on top of Babel

— push the bounderies

— make i18n a first class citizen

Page 46: Django internationalisation

Thanks! Questions?

@jezdez