code: def op_make_trans(self, locales=None, apps=None):
          
          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)
docs: 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.