title: Advice on multi lingual data storage
body: <p>I find myself struggling with the data model each time I want to do something with a multi lingual app using e.g. Google Maps. When a user for example searches for <code>Berlin</code> that's all fine when the user's language is set to English and German (and possibly more languages), but in Dutch <code>Berlin</code> translates to <code>Berlijn</code>. The same goes for <code>Munich</code> which translates to <code>München</code> in Dutch. And of course these are just two examples of many real world situations. In this illustration storage of a Hotel's location is used to demonstrate. So basically most of the times I end up with a schema like:</p>
  
  <pre><code>hotel
  PK  id 
      other_properties
  
  hotel_location
  FK  hotel_id
  FK  location_id
  
  location
  PK  id
  
  location_translation
  PK  id
  FK  language_id
  FK  location_id
      value
  
  language
  PK  id
      native_name
      system_name
  </code></pre>
  
  <p>Which gets populated like:</p>
  
  <pre><code>    HOTEL
      id      name                no_rooms    ...
      -------------------------------------------
      1       Radison Blu Hotel   16
  
      HOTEL_LOCATION
      hotel_id   location_id
      --------------------------------------------
      1          1
  
      LOCATION
      id
      --
      1
  
      LOCATION_TRANSLATION
      id      language_id     location_id     value
      ---------------------------------------------
      1       1               1               Berlin
      2       2               1               Berlijn
      3       3               1               Berlin
  
      LANGUAGE
      id      native_name     system_name
      -----------------------------------
      1       English         English
      2       Nederlands      Dutch
      3       Deutsch         German
  </code></pre>
  
  <p>But I always find this a bit complex in terms of how many tables are required and was wondering if you guys have better alternatives to store multi lingual data and keeping flexibility to add/remove supported languages.</p>