Opened 10 months ago

Closed 8 months ago

#23196 closed Cleanup/optimization (fixed)

Don't translate empty string as gettext metadata

Reported by: nedbatchelder Owned by: yrik
Component: Internationalization Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

(this is very similar to #11363)

If you pass an empty string to django.utils.translation.ugettext, it returns the metadata from the translations file. I know that this is the GNU gettext behavior, but honestly, I can't imagine a use for it.

This is a problem when you have a string which can be overridden by a user, but usually is not, and the default value for the string is translated. If the user enters an empty string, ugettext returns the metadata. Surprise!

Of course, an option is to check the string before calling ugettext, but this is an easy step to overlook, especially because it is conceptually unnecessary. It would be great if Django's wrappers for gettext would do the obvious thing and return an empty string if asked to translate an empty string.

For a low-level library, it could make sense to get the metadata with gettext(""), but how would you reasonably use that in Django? And ffs, why didn't they just make a function to get the metadata if people wanted metadata? :)

Change History (5)

comment:1 Changed 10 months ago by apollo13

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

Accepting based on the fact that there are valid usecases and the current behavior can be really really annoying :)

comment:2 Changed 10 months ago by timo

  • Type changed from Uncategorized to Cleanup/optimization

comment:3 Changed 9 months ago by yrik

  • Owner changed from nobody to yrik
  • Status changed from new to assigned

comment:4 Changed 9 months ago by yrik

Handled case with empty string by returning empty string of corresponding type.

Here is pull request:
https://github.com/django/django/pull/3192

comment:5 Changed 8 months ago by Claude Paroz <claude@…>

  • Resolution set to fixed
  • Status changed from assigned to closed

In 11f307a5a8fa66605652e0496c7385e584bfcad7:

Fixed #23196 -- Short-circuited empty string translation

Translating an empty string used to return the gettext catalog
metadata instead of the empty string.
Thanks Ned Batchelder for the suggestion, Tim Graham for the review
and Anton Berezin and Claude Paroz for contributions to the patch.

Note: See TracTickets for help on using tickets.
Back to Top