register file watchers for mo files in potential locale paths from django conf import settings if settings usei18n directories pathlocale directories extend pathconfig path locale for config in apps getappconfigs if not isdjangomoduleconfig module directories extendpathp for p in settings localepaths for path in directories sender watchdirpath mo def translationfilechangedsender filepath kwargs register file watchers for mo files in potential locale paths clear the internal translations cache if a mo file is modified
from pathlib import Path

from asgiref.local import Local

from django.apps import apps
from django.utils.autoreload import is_django_module


def watch_for_translation_changes(sender, **kwargs):
    
    from django.conf import settings

    if settings.USE_I18N:
        directories = [Path("locale")]
        directories.extend(
            Path(config.path) / "locale"
            for config in apps.get_app_configs()
            if not is_django_module(config.module)
        )
        directories.extend(Path(p) for p in settings.LOCALE_PATHS)
        for path in directories:
            sender.watch_dir(path, "**/*.mo")


def translation_file_changed(sender, file_path, **kwargs):
    
    if file_path.suffix == ".mo":
        import gettext

        from django.utils.translation import trans_real

        gettext._translations = {}
        trans_real._translations = {}
        trans_real._default = None
        trans_real._active = Local()
        return True