[Django] #16084: makemessage command doesn't respect LOCALE_PATHS setting at all

28 views
Skip to first unread message

Django

unread,
May 23, 2011, 11:51:25 PM5/23/11
to django-...@googlegroups.com
#16084: makemessage command doesn't respect LOCALE_PATHS setting at all
----------------------+--------------------------------------
Reporter: heylinus | Owner: nobody
Type: Bug | Status: new
Milestone: | Component: Internationalization
Version: SVN | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Easy pickings: 0
----------------------+--------------------------------------
The makemessages command won't check the paths in LOCALE_PATHS as
compilemessages command does.


{{{
core/management/commands/makemessages.py:134-142
}}}

{{{
core/management/commands/compilemessages.py:15-21
}}}



It only generates .po file in the locale folder that is located in project
root.

If a locale folder exists in project root, a deprecation warning will
appear:


{{{
utils/translation/__init__.py:64: DeprecationWarning: Translations in the
project directory aren't supported anymore. Use the LOCALE_PATHS setting
instead.
}}}


If locale folder is removed from project root, makemessage will throw out
command error:


{{{
Error: This script should be run from the Django SVN tree or your project
or app tree. If you did indeed run it from the SVN checkout or your
project or application, maybe you are just missing the conf/locale (in the
django tree) or locale (for project and application) directory? It is not
created automatically, you have to create it by hand if you want to enable
i18n for your project or application.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/16084>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
May 23, 2011, 11:52:04 PM5/23/11
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting at all
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody
Type: Bug | Status: new
Milestone: | Component:
Version: SVN | Internationalization
Resolution: | Severity: Normal
Triage Stage: | Keywords:
Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
-------------------------------------+-------------------------------------
Changes (by anonymous):

* needs_docs: => 0
* needs_better_patch: => 0
* needs_tests: => 0


--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:1>

Django

unread,
May 24, 2011, 9:45:34 PM5/24/11
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting at all
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody
Type: Bug | Status: new
Milestone: | Component:
Version: 1.3 | Internationalization
Resolution: | Severity: Normal
Triage Stage: | Keywords:
Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
-------------------------------------+-------------------------------------
Changes (by anonymous):

* version: SVN => 1.3


--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:2>

Django

unread,
May 27, 2011, 8:53:40 AM5/27/11
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting at all
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody
Type: New | Status: closed
feature | Component:
Milestone: | Internationalization
Version: 1.3 | Severity: Normal
Resolution: invalid | Keywords:
Triage Stage: | Has patch: 0
Unreviewed | Needs tests: 0
Needs documentation: 0 | Easy pickings: 0
Patch needs improvement: 0 |
-------------------------------------+-------------------------------------
Changes (by aaugustin):

* status: new => closed
* type: Bug => New feature
* resolution: => invalid


Comment:

Currently, `makemessages` doesn't handle multiple `locale` folders at all.
It is hardcoded to run:

- from django's source tree: it will gather all translations in
`./conf/locale`, except those from the contrib apps,
- from a project's or an app's source tree: it will gather all
translations in `./locale`, and it requires this directory to exist, so
you must create it manually before you run `makemessages` for the first
language.

The proper way to run `makemessages` is : `cd yourapp; django-admin.py
makemessages ...`. That raises no warnings

I agree it's a bit tedious if you maintain one set of translation set per
app, like I do.

But it works as documented on
https://docs.djangoproject.com/en/1.3/howto/i18n/ (search for "To create
message files..."). So we can't count this as a bug.

----

Let's imagine an improved `makemessages` that would look for `locale`
directories in the whole subtree, and for each of them, run the equivalent
of the current `makemessages` from the containing directory. There are
some edge cases: what if you have `foo/locale/bar/locale`?. And this still
doesn't handle `LOCALE_PATHS`, because when django just gets a catalog
from `LOCALE_PATHS`, it has no way to know where the corresponding source
files are.

To sum up, there is no bug, and making `makemessages` smarter would be
hard, enough to require a discussion on the django-developers mailing
list. As a consequence, I will close the ticket. If you want to improve
`makemessages`, could you elaborate your proposal on the mailing list?

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:3>

Django

unread,
May 30, 2011, 7:30:26 AM5/30/11
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody
Type: New | Status: reopened
feature | Component:
Milestone: | Internationalization
Version: 1.3 | Severity: Normal
Resolution: | Keywords:
Triage Stage: Accepted | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
-------------------------------------+-------------------------------------
Changes (by ramiro):

* status: closed => reopened
* stage: Unreviewed => Accepted
* resolution: invalid =>


Comment:

agree this is something that isn't completely eas to use after the changes
that start deprecation of a locale/ subdir of the ''project dir''. We need
to give users the ability to specify an output directory when running
`makemessages`, or similar solution. Reopening.

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:4>

Django

unread,
May 2, 2012, 8:03:56 PM5/2/12
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody
Type: New feature | Status: reopened
Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by anonymous):

* version: 1.3 => 1.4


--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:6>

Django

unread,
Aug 31, 2012, 5:13:02 AM8/31/12
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody
Type: New feature | Status: reopened
Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by EmilStenstrom):

* cc: em@… (added)


Comment:

I would characterize this as a bug, not a new feature.

Reason: These are the options a 1.4 user has:

'''1)''' Use a directory called "locale", without a __init__.py, like you
did with Django 1.3. You will now get a DeprecationWarning each time you
use manage.py. '''Annoying'''.

'''2)''' Use a directory with a non-locale name, such as "translations",
and reference that path with the new LOCALE_PATHS setting. Now the
makemessages command won't work. '''Unacceptable'''.

'''3)''' Use a directory called "locale" and point to it using the
LOCALE_PATHS setting. Now you'll get an ImportWarning that the locale
directory is missing a __init__.py file. But if you add a file like this
you get other import errors, since
[http://stackoverflow.com/questions/10874945/importerror-cannot-import-
name-normalize gettext imports a package called locale], and stops working
if there's a local importable directory called locale. '''Unacceptable'''.

So unless I'm missing something basic (I have before, so please point it
if so), it seems we're stuck with an annoying DeprecationWarning until
this bug is fixed.

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:7>

Django

unread,
Sep 17, 2012, 8:56:26 AM9/17/12
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: reopened
Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------

Comment (by rivolaks@…):

I'm having the same problem.
I'm overriding some of Django's builtin date/time formats for different
locales and at first put the formats.py files under ''locale/XX/''. And
that of course gave me the gettext import errors described in Emil's 3rd
point. So I renamed my 'locale' dir to 'locales' and now I have the
problem number 2.
I don't want two subdirs for the same thing either ('locale' for
translations and e.g. 'locales' for the custom formats). So I'm probably
going to have to duplicate the makemessages cmd and change the hardcoded
path until the proper fix.

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:8>

Django

unread,
Jan 19, 2013, 11:27:34 AM1/19/13
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: reopened
Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------

Comment (by claudep):

I have a patch that allows you to always run `makemessages` at project
level, and which dispatches strings in various pot files depending on
their file location.

For example, strings from `myapp/myfile.txt` will go to
`myapp/locale/....po` if `myapp/locale` exists, else they will go to
`LOCALE_PATHS[0]`, and if `LOCALE_PATHS` is empty, a `CommandError` is
raised. Backwards compatibility should be kept, unless I missed a use
case.

For Django itself, we could simply remove the line `self.ignore_patterns
+= ['contrib/*']` and all contrib po files would be handled with a single
`makemessages` call. I'd vote for it.

https://github.com/claudep/django/compare/16084

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:9>

Django

unread,
Jan 19, 2013, 5:06:21 PM1/19/13
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: reopened
Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------

Comment (by aaugustin):

Sounds great!

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:10>

Django

unread,
Oct 3, 2013, 11:38:40 AM10/3/13
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
--------------------------------------+------------------------------------
Reporter: heylinus | Owner: nobody
Type: New feature | Status: new

Component: Internationalization | Version: 1.4
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------

Comment (by claudep):

I've just updated the patch to current master and created a pull request:
https://github.com/django/django/pull/1706

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:12>

Django

unread,
Nov 13, 2013, 4:44:36 PM11/13/13
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: new
Component: | Version: 1.4
Internationalization | Resolution:
Severity: Normal | Triage Stage: Ready for
Keywords: | checkin

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by claudep):

* stage: Accepted => Ready for checkin


Comment:

I plan to commit the patch in the next days.

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:13>

Django

unread,
Nov 30, 2013, 5:01:41 AM11/30/13
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody
Type: New feature | Status: closed
Component: | Version: 1.4
Internationalization | Resolution: fixed

Severity: Normal | Triage Stage: Ready for
Keywords: | checkin
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Claude Paroz <claude@…>):

* status: new => closed

* resolution: => fixed


Comment:

In [changeset:"50a8ab7cd1e611e6422a148becaec02218577d67"]:
{{{
#!CommitTicketReference repository=""
revision="50a8ab7cd1e611e6422a148becaec02218577d67"
Enabled makemessages to support several translation directories

Thanks Rémy Hubscher, Ramiro Morales, Unai Zalakain and
Tim Graham for the reviews.
Also fixes #16084.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:14>

Django

unread,
Nov 18, 2015, 6:17:43 AM11/18/15
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: closed
Component: | Version: 1.4
Internationalization |
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for

| checkin
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by termopetteri):

Hello, commenting an old fixed ticket.

If an app has 'locale' named folder under its static folder
(/app_name/static/app_name/locale/foobar.js), makemessages does not pick
the files in that folder (here foobar.js). Is that intentional?

Here's the relevant code:
https://github.com/django/django/blob/master/django/core/management/commands/makemessages.py#L413

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:15>

Django

unread,
Nov 18, 2015, 1:56:30 PM11/18/15
to django-...@googlegroups.com
#16084: makemessages command doesn't respect LOCALE_PATHS setting
-------------------------------------+-------------------------------------
Reporter: heylinus | Owner: nobody

Type: New feature | Status: closed
Component: | Version: 1.4
Internationalization |
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by claudep):

It's probably not intentional. We would need to find some heuristics to
detect if dirname is a 'locale' directory containing translations or any
other sort of 'locale'-named directory. Please open a new ticket for this
issue.

--
Ticket URL: <https://code.djangoproject.com/ticket/16084#comment:16>

Reply all
Reply to author
Forward
0 new messages