title: Good way to provide Rails-way i18n support in Django
body: <p>There's one thing in (new) Rails I envy: internationalization support (Django has one too, but I prefer Rails' flavour).</p>
  
  <p>The key difference between Rails' and Django's approaches is what kind of string behaves like keys in key-value translation mapping, i.e.</p>
  
  <p>Django version (keys - strings in "main" language, for example english):</p>
  
  <pre><code>msgid "Save and quit"
  msgstr "Zapisz i wyjdź"
  </code></pre>
  
  <p>Rails version equivalent (keys - abstract strings; standalone unusable - one need to provide at least 1 "translation") - actually, Rails uses YAML format, but following example present the idea:</p>
  
  <pre><code>// english translation file
  
  msgid "SAVE_QUIT_MESSAGE"
  msgstr "Save and quit"
  </code></pre>
  
  <p>and</p>
  
  <pre><code>// polish translation file
  
  msgid "SAVE_QUIT_MESSAGE"
  msgstr "Zapisz i wyjdź"
  </code></pre>
  
  <p>Rails' way of supporting i18n is IMHO much better (think of key immutability - resistant to grammar/spelling corrections; language agnosticism etc).</p>
  
  <p>One way to utilize this schema in Django would be to use some abstract language for the sole purpose of being translated (strings in that language would make immutable keys), but Django support only fixed set of languages. Another solution - sacrifice one of the supported (unused) languages to play this role - but this is just bad :P</p>
  
  <p><strong>Any ideas/third-party apps/techniques to solve this issue?</strong></p>
  
  <hr>
  
  <p>Sidenote: extending i18n support for artibrary languages would give funny opportunities:</p>
  
  <pre><code>// slang translation file
  
  msgid "SAVE_QUIT_MESSAGE"
  msgstr "Save shit 'n' quit, bro"
  </code></pre>