title: What's the purpose of ugettext_noop in Django?
body: <p>As mentioned in <a href="https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#marking-strings-as-no-op" rel="nofollow noreferrer">this section of Translation | Django documentation</a>, the function <a href="https://docs.djangoproject.com/en/1.10/ref/utils/#django.utils.translation.ugettext_noop" rel="nofollow noreferrer">ugettext_noop</a> is a utility function for internationalization:</p>
  
  <blockquote>
    <p><strong>ugettext_noop(message) <a href="https://docs.djangoproject.com/en/1.10/ref/utils/#django.utils.translation.ugettext_noop" rel="nofollow noreferrer">¶</a></strong></p>
    
    <p>Marks strings for translation but doesn’t translate them now. This can
    be used to store strings in global variables that should stay in the
    base language (because they might be used externally) and will be
    translated later.</p>
  </blockquote>
  
  <p>Also, <a href="https://stackoverflow.com/a/4164683/5399734">this answer</a> provides an example of its usage:</p>
  
  <pre><code>import logging
  from django.http import HttpResponse
  from django.utils.translation import ugettext as _, ugettext_noop as _noop
  
  def view(request):
      msg = _noop("An error has occurred")
      logging.error(msg)
      return HttpResponse(_(msg))
  </code></pre>
  
  <p>Despite these docs, I still don't understand why should I mark a string as extractable for translation. To me it seems that <code>ugettext_noop</code> is nothing but a reminder, and even so, what's the purpose of reminding programmers that some strings (<code>msg</code> in this case) are to be translated later?</p>