diff --git a/Flask_Babel.egg-info/PKG-INFO b/Flask_Babel.egg-info/PKG-INFO
index e22289e..39d9c82 100644
--- a/Flask_Babel.egg-info/PKG-INFO
+++ b/Flask_Babel.egg-info/PKG-INFO
@@ -8,24 +8,6 @@ Author-email: armin.ronacher@active-4.com
 Maintainer: Tyler Kennedy
 Maintainer-email: tk@tkte.ch
 License: BSD
-Description: # Flask Babel
-        
-        ![Tests](https://github.com/python-babel/flask-babel/workflows/Tests/badge.svg?branch=master)
-        [![PyPI](https://img.shields.io/pypi/v/flask-babel.svg?maxAge=2592000)](https://pypi.python.org/pypi/Flask-Babel)
-        
-        Implements i18n and l10n support for Flask.  This is based on the Python
-        [babel][] module as well as [pytz][] both of which are installed automatically
-        for you if you install this library.
-        
-        # Documention
-        
-        The latest documentation is available [here][docs].
-        
-        [babel]: https://github.com/python-babel/babel
-        [pytz]: https://pypi.python.org/pypi/pytz/
-        [docs]: https://flask-babel.tkte.ch/
-        [semver]: https://semver.org/
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Web Environment
@@ -43,3 +25,24 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Description-Content-Type: text/markdown
 Provides-Extra: dev
+License-File: LICENSE
+
+# Flask Babel
+
+![Tests](https://github.com/python-babel/flask-babel/workflows/Tests/badge.svg?branch=master)
+[![PyPI](https://img.shields.io/pypi/v/flask-babel.svg?maxAge=2592000)](https://pypi.python.org/pypi/Flask-Babel)
+
+Implements i18n and l10n support for Flask.  This is based on the Python
+[babel][] module as well as [pytz][] both of which are installed automatically
+for you if you install this library.
+
+# Documention
+
+The latest documentation is available [here][docs].
+
+[babel]: https://github.com/python-babel/babel
+[pytz]: https://pypi.python.org/pypi/pytz/
+[docs]: https://flask-babel.tkte.ch/
+[semver]: https://semver.org/
+
+
diff --git a/Flask_Babel.egg-info/SOURCES.txt b/Flask_Babel.egg-info/SOURCES.txt
index 51bac7c..5ea1a1d 100644
--- a/Flask_Babel.egg-info/SOURCES.txt
+++ b/Flask_Babel.egg-info/SOURCES.txt
@@ -29,6 +29,7 @@ tests/translations/de/LC_MESSAGES/messages.mo
 tests/translations/de/LC_MESSAGES/messages.po
 tests/translations/de/LC_MESSAGES/test.mo
 tests/translations/de/LC_MESSAGES/test.po
+tests/translations/fr/LC_MESSAGES/.keep
 tests/translations_different_domain/myapp.pot
 tests/translations_different_domain/de/LC_MESSAGES/myapp.mo
 tests/translations_different_domain/de/LC_MESSAGES/myapp.po
\ No newline at end of file
diff --git a/Flask_Babel.egg-info/requires.txt b/Flask_Babel.egg-info/requires.txt
index a8349da..a446dfb 100644
--- a/Flask_Babel.egg-info/requires.txt
+++ b/Flask_Babel.egg-info/requires.txt
@@ -1,12 +1,12 @@
-pytz
-Flask
 Babel>=2.3
+Flask
 Jinja2>=2.5
+pytz
 
 [dev]
-pytest
-pytest-mock
+Pallets-Sphinx-Themes
 bumpversion
 ghp-import
+pytest
+pytest-mock
 sphinx
-Pallets-Sphinx-Themes
diff --git a/PKG-INFO b/PKG-INFO
index e22289e..39d9c82 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -8,24 +8,6 @@ Author-email: armin.ronacher@active-4.com
 Maintainer: Tyler Kennedy
 Maintainer-email: tk@tkte.ch
 License: BSD
-Description: # Flask Babel
-        
-        ![Tests](https://github.com/python-babel/flask-babel/workflows/Tests/badge.svg?branch=master)
-        [![PyPI](https://img.shields.io/pypi/v/flask-babel.svg?maxAge=2592000)](https://pypi.python.org/pypi/Flask-Babel)
-        
-        Implements i18n and l10n support for Flask.  This is based on the Python
-        [babel][] module as well as [pytz][] both of which are installed automatically
-        for you if you install this library.
-        
-        # Documention
-        
-        The latest documentation is available [here][docs].
-        
-        [babel]: https://github.com/python-babel/babel
-        [pytz]: https://pypi.python.org/pypi/pytz/
-        [docs]: https://flask-babel.tkte.ch/
-        [semver]: https://semver.org/
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Web Environment
@@ -43,3 +25,24 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Description-Content-Type: text/markdown
 Provides-Extra: dev
+License-File: LICENSE
+
+# Flask Babel
+
+![Tests](https://github.com/python-babel/flask-babel/workflows/Tests/badge.svg?branch=master)
+[![PyPI](https://img.shields.io/pypi/v/flask-babel.svg?maxAge=2592000)](https://pypi.python.org/pypi/Flask-Babel)
+
+Implements i18n and l10n support for Flask.  This is based on the Python
+[babel][] module as well as [pytz][] both of which are installed automatically
+for you if you install this library.
+
+# Documention
+
+The latest documentation is available [here][docs].
+
+[babel]: https://github.com/python-babel/babel
+[pytz]: https://pypi.python.org/pypi/pytz/
+[docs]: https://flask-babel.tkte.ch/
+[semver]: https://semver.org/
+
+
diff --git a/docs/index.rst b/docs/index.rst
index 442932f..b4ee14a 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -297,6 +297,21 @@ out if a translation matched a changed key).  If you have fuzzy entries,
 make sure to check them by hand and remove the fuzzy flag before
 compiling.
 
+Reloading Translations
+----------------------
+
+The compiled translations will only be loaded initially. This means you have
+to restart the server whenever you compile translations and want to see
+those changes. To automatically reload translations you can tell the reloader
+to watch the compiled ``.mo`` files::
+
+    $ flask run --extra-files app/translations/en_GB/LC_MESSAGES/messages.mo
+    # or
+    $ export FLASK_RUN_EXTRA_FILES=app/translations/en_GB/LC_MESSAGES/messages.mo
+    $ flask run
+
+See `reloader`_ for more details.
+
 Troubleshooting
 ---------------
 
@@ -389,3 +404,4 @@ Low-Level API
 .. _babel: http://babel.edgewall.org/
 .. _pytz: http://pytz.sourceforge.net/
 .. _speaklater: http://pypi.python.org/pypi/speaklater
+.. _reloader: https://flask.palletsprojects.com/en/1.1.x/cli/#watch-extra-files-with-the-reloader
diff --git a/flask_babel/__init__.py b/flask_babel/__init__.py
index c51b2ef..7319667 100644
--- a/flask_babel/__init__.py
+++ b/flask_babel/__init__.py
@@ -1,6 +1,6 @@
 """
-    flaskext.babel
-    ~~~~~~~~~~~~~~
+    flask_babel
+    ~~~~~~~~~~~
 
     Implements i18n/l10n support for Flask applications based on Babel.
 
@@ -151,7 +151,7 @@ class Babel(object):
                 if not os.path.isdir(locale_dir):
                     continue
 
-                if filter(lambda x: x.endswith('.mo'), os.listdir(locale_dir)):
+                if any(x.endswith('.mo') for x in os.listdir(locale_dir)):
                     result.append(Locale.parse(folder))
 
         # If not other translations are found, add the default locale.
@@ -329,7 +329,7 @@ def to_user_timezone(datetime):
     """Convert a datetime object to the user's timezone.  This automatically
     happens on all date formatting unless rebasing is disabled.  If you need
     to convert a :class:`datetime.datetime` object at any time to the user's
-    timezone (as returned by :func:`get_timezone` this function can be used).
+    timezone (as returned by :func:`get_timezone`) this function can be used.
     """
     if datetime.tzinfo is None:
         datetime = datetime.replace(tzinfo=UTC)
@@ -355,7 +355,7 @@ def format_datetime(datetime=None, format=None, rebase=True):
     time.
 
     The format parameter can either be ``'short'``, ``'medium'``,
-    ``'long'`` or ``'full'`` (in which cause the language's default for
+    ``'long'`` or ``'full'`` (in which case the language's default for
     that setting is used, or the default from the :attr:`Babel.date_formats`
     mapping is used) or a format string as documented by Babel.
 
@@ -375,7 +375,7 @@ def format_date(date=None, format=None, rebase=True):
     of a :class:`~datetime.datetime` object.
 
     The format parameter can either be ``'short'``, ``'medium'``,
-    ``'long'`` or ``'full'`` (in which cause the language's default for
+    ``'long'`` or ``'full'`` (in which case the language's default for
     that setting is used, or the default from the :attr:`Babel.date_formats`
     mapping is used) or a format string as documented by Babel.
 
@@ -397,7 +397,7 @@ def format_time(time=None, format=None, rebase=True):
     time.
 
     The format parameter can either be ``'short'``, ``'medium'``,
-    ``'long'`` or ``'full'`` (in which cause the language's default for
+    ``'long'`` or ``'full'`` (in which case the language's default for
     that setting is used, or the default from the :attr:`Babel.date_formats`
     mapping is used) or a format string as documented by Babel.
 
diff --git a/tests/test_integration.py b/tests/test_integration.py
index 2cd6f6c..5ada968 100644
--- a/tests/test_integration.py
+++ b/tests/test_integration.py
@@ -22,6 +22,9 @@ def test_no_request_context():
 def test_multiple_directories():
     """
     Ensure we can load translations from multiple directories.
+
+    This also ensures that directories without any translation files
+    are not taken into account.
     """
     b = babel.Babel()
     app = flask.Flask(__name__)
diff --git a/tests/translations/fr/LC_MESSAGES/.keep b/tests/translations/fr/LC_MESSAGES/.keep
new file mode 100644
index 0000000..e69de29