1. Watch out for dict-based string interpolation examples which look like this:

    'Hello, %(name)s' % {'name': 'Otter'}

    That s after the brackets isn’t pluralising one adorable aquatic mammal into a whole bunch of them, it’s actually part of the interpolation placeholder — the equivalent of

    'Hello, %s' % 'Otter'

    Note also that for some reason, python lets you put spaces between the closing bracket and the type signifying character. This can cause extremely weird bugs when the string being interpolated is also being translated. For example:

    _('%(customer) shared a thing') % {'customer': 'Mr. Bean'}

    If not translated, this will produce this confusing but fairly easy to debug output

    'Mr. Beanhared a thing'

    But if 'shared' is translated into a word beginning with, for example, d, you’ll just get an exception like TypeError: A float is required

  2. One fail I’m seeing more and more is the “we’ve got a different version of this site for your locality! Would you like to go to it?” whole-page overlay on permalink pages. So many problems:

    • Why do you have multiple versions of the same site if the content is equally valuable on either one (e.g. recipe sites)?
    • If language is the reason (I have never seen this) exactly why can’t you internationalize the UI and offer some sort of auto-translation of the content? Or leave the translation to me/my browser whilst having a small, unobtrusive banner letting me know I might be able to find similar content in my native language.
    • If I’ve followed a permalink, I want to see that content. Offering me a redirect to a generic homepage is useless