def op_make_trans(self, locales=None, apps=None):
        """Generates/updates localization (.po, .mo) files for applications.

        :param list|None locales: Locales to generate files for. If `None` all available locales in apps are updated.
        :param list|None apps: Target applications filter. If `None` all available apps are processed.
        """
        self.logger.info('Making translations ...')
        apps = self.get_apps(only=apps)
        self.get_venvs()  # Sentinel.
        venv_path = self._get_venv_path(DJANGO_DEFAULT_VERSION)
        if locales is None:
            locales = []

        for app_name in apps:
            self.logger.info('Application: %s' % app_name)
            app_path = self._get_app_path(app_name)
            locales_path = os.path.join(app_path, 'locale')

            if not locales and os.path.exists(locales_path):  # Getting all existing locales.
                locales = os.listdir(locales_path)

            for lang in locales:
                self.logger.info('Locale: %s' % lang)
                locale_path = os.path.join(locales_path, '%s/LC_MESSAGES' % lang)
                self._make_dirs(locale_path)
                old_wd = os.getcwd()
                os.chdir(app_path)
                self.run_manage_command('makemessages -l %s' % lang, venv_path)
                self.run_manage_command('compilemessages -l %s' % lang, venv_path)
                os.chdir(old_wd)
Generates/updates localization (.po, .mo) files for applications.

        :param list|None locales: Locales to generate files for. If `None` all available locales in apps are updated.
        :param list|None apps: Target applications filter. If `None` all available apps are processed.