code: def ungettext_min_max(singular, plural, range_text, min_val, max_val):
      
      if min_val is None and max_val is None:
          return None
      if min_val == max_val or min_val is None or max_val is None:
          # pylint: disable=translation-of-non-string
          return ungettext(singular, plural, min_val or max_val).format(min_val or max_val)
      return range_text.format(min_val, max_val)
docs: Return grammatically correct, translated text based off of a minimum and maximum value.
  
      Example:
          min = 1, max = 1, singular = '{} hour required for this course', plural = '{} hours required for this course'
          output = '1 hour required for this course'
  
          min = 2, max = 2, singular = '{} hour required for this course', plural = '{} hours required for this course'
          output = '2 hours required for this course'
  
          min = 2, max = 4, range_text = '{}-{} hours required for this course'
          output = '2-4 hours required for this course'
  
          min = None, max = 2, plural = '{} hours required for this course'
          output = '2 hours required for this course'
  
      Expects ``range_text`` to already have a translation function called on it.
  
      Returns:
          ``None`` if both of the input values are ``None``.
          ``singular`` formatted if both are equal or one of the inputs, but not both, are ``None``, and the value is 1.
          ``plural`` formatted if both are equal or one of its inputs, but not both, are ``None``, and the value is > 1.
          ``range_text`` formatted if min != max and both are valid values.