mirror of https://github.com/django/django.git
Fixed #9523 -- Restart runserver after translation MO files change
Thanks to Krzysztof Kulewski for the initial patch.
This commit is contained in:
parent
090315f5df
commit
c3936c0d79
1
AUTHORS
1
AUTHORS
|
@ -369,6 +369,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
knox <christobzr@gmail.com>
|
knox <christobzr@gmail.com>
|
||||||
David Krauth
|
David Krauth
|
||||||
Kevin Kubasik <kevin@kubasik.net>
|
Kevin Kubasik <kevin@kubasik.net>
|
||||||
|
Krzysztof Kulewski <kulewski@gmail.com>
|
||||||
kurtiss@meetro.com
|
kurtiss@meetro.com
|
||||||
Vladimir Kuzma <vladimirkuzma.ch@gmail.com>
|
Vladimir Kuzma <vladimirkuzma.ch@gmail.com>
|
||||||
Denis Kuzmichyov <kuzmichyov@gmail.com>
|
Denis Kuzmichyov <kuzmichyov@gmail.com>
|
||||||
|
|
|
@ -28,13 +28,13 @@
|
||||||
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
import datetime
|
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.core.signals import request_finished
|
from django.core.signals import request_finished
|
||||||
try:
|
try:
|
||||||
from django.utils.six.moves import _thread as thread
|
from django.utils.six.moves import _thread as thread
|
||||||
|
@ -86,13 +86,28 @@ _win = (sys.platform == "win32")
|
||||||
|
|
||||||
_error_files = []
|
_error_files = []
|
||||||
|
|
||||||
|
|
||||||
def gen_filenames():
|
def gen_filenames():
|
||||||
"""
|
"""
|
||||||
Yields a generator over filenames referenced in sys.modules.
|
Yields a generator over filenames referenced in sys.modules and translation
|
||||||
|
files.
|
||||||
"""
|
"""
|
||||||
filenames = [filename.__file__ for filename in sys.modules.values()
|
filenames = [filename.__file__ for filename in sys.modules.values()
|
||||||
if hasattr(filename, '__file__')]
|
if hasattr(filename, '__file__')]
|
||||||
|
|
||||||
|
# Add the names of the .mo files that can be generated
|
||||||
|
# by compilemessages management command to the list of files watched.
|
||||||
|
basedirs = [os.path.join(os.path.dirname(os.path.dirname(__file__)),
|
||||||
|
'conf', 'locale'),
|
||||||
|
'locale']
|
||||||
|
basedirs.extend(settings.LOCALE_PATHS)
|
||||||
|
basedirs = [os.path.abspath(basedir) for basedir in basedirs
|
||||||
|
if os.path.isdir(basedir)]
|
||||||
|
for basedir in basedirs:
|
||||||
|
for dirpath, dirnames, locale_filenames in os.walk(basedir):
|
||||||
|
for filename in locale_filenames:
|
||||||
|
if filename.endswith('.mo'):
|
||||||
|
filenames.append(os.path.join(dirpath, filename))
|
||||||
|
|
||||||
for filename in filenames + _error_files:
|
for filename in filenames + _error_files:
|
||||||
if not filename:
|
if not filename:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -791,8 +791,12 @@ Django.)
|
||||||
|
|
||||||
The development server automatically reloads Python code for each request, as
|
The development server automatically reloads Python code for each request, as
|
||||||
needed. You don't need to restart the server for code changes to take effect.
|
needed. You don't need to restart the server for code changes to take effect.
|
||||||
However, some actions like adding files or compiling translation files don't
|
However, some actions like adding files don't trigger a restart, so you'll
|
||||||
trigger a restart, so you'll have to restart the server in these cases.
|
have to restart the server in these cases.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.7
|
||||||
|
|
||||||
|
Compiling translation files now also restarts the development server.
|
||||||
|
|
||||||
If you are using Linux and install `pyinotify`_, kernel signals will be used to
|
If you are using Linux and install `pyinotify`_, kernel signals will be used to
|
||||||
autoreload the server (rather than polling file modification timestamps each
|
autoreload the server (rather than polling file modification timestamps each
|
||||||
|
|
|
@ -346,6 +346,9 @@ Management Commands
|
||||||
* The :djadmin:`runserver` command now uses ``inotify`` Linux kernel signals
|
* The :djadmin:`runserver` command now uses ``inotify`` Linux kernel signals
|
||||||
for autoreloading if ``pyinotify`` is installed.
|
for autoreloading if ``pyinotify`` is installed.
|
||||||
|
|
||||||
|
* The :djadmin:`runserver` command is now restarted when a translation file is
|
||||||
|
changed.
|
||||||
|
|
||||||
Models
|
Models
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,17 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2007-09-15 19:15+0200\n"
|
||||||
|
"PO-Revision-Date: 2010-05-12 12:41-0300\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
|
@ -0,0 +1,37 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django import conf
|
||||||
|
from django.test import TestCase, override_settings
|
||||||
|
from django.utils.autoreload import gen_filenames
|
||||||
|
|
||||||
|
LOCALE_PATH = os.path.join(os.path.dirname(__file__), 'locale')
|
||||||
|
|
||||||
|
|
||||||
|
class TestFilenameGenerator(TestCase):
|
||||||
|
def test_django_locales(self):
|
||||||
|
"""
|
||||||
|
Test that gen_filenames() also yields the built-in django locale files.
|
||||||
|
"""
|
||||||
|
filenames = list(gen_filenames())
|
||||||
|
locales = []
|
||||||
|
|
||||||
|
basedir = os.path.join(os.path.dirname(conf.__file__), 'locale')
|
||||||
|
for dirpath, dirnames, locale_filenames in os.walk(basedir):
|
||||||
|
for filename in locale_filenames:
|
||||||
|
if filename.endswith('.mo'):
|
||||||
|
locales.append(os.path.join(dirpath, filename))
|
||||||
|
|
||||||
|
self.assertTrue(len(locales) > 10) # assume a few available locales
|
||||||
|
for filename in locales:
|
||||||
|
self.assertIn(filename, filenames)
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
LOCALE_PATHS=(LOCALE_PATH,)
|
||||||
|
)
|
||||||
|
def test_app_locales(self):
|
||||||
|
"""
|
||||||
|
Test that gen_filenames also yields from LOCALE_PATHS.
|
||||||
|
"""
|
||||||
|
filenames = list(gen_filenames())
|
||||||
|
self.assertIn(os.path.join(LOCALE_PATH, 'nl', 'LC_MESSAGES', 'django.mo'),
|
||||||
|
filenames)
|
Loading…
Reference in New Issue