Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Creating a MySQL multilingual dictionary table that expands horizontally adding/removing columns

The goal is to create a multilingual dictionary MySQL table of words that use a key => value structure for any desired language. Current solutions (and threads) on stackoverflow refer to adding new key => values pairs as rows to an existing table.

The problem is synchronizing keys for every available language. My application uses placeholders %{example} that refer to a specific key in a dictionary. When users switch to a different language that placeholder needs to be present in the dictionary.

Proposed solution:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Rather than adding a key => value pair per language as row, add a column per language and use every row as a unique key.

key (pk) en_EN se_SE
apple apple apple
fish fish fisk

Now we add a new language nl_NL as column, automatically creating every required key with value NULL.

key (pk) en_EN se_SE nl_NL
apple apple apple NULL
fish fish fisk NULL

Retrieving the entire dictionary for a specific language would be as easy as:


SELECT en_EN FROM <table>

Since this approach feels a bit unusual namely dynamically adding/removing columns as opposed to rows, I was wondering if I’m missing something or if there is a better approach. What are your thoughts?

>Solution :

There is a much better approach using joins.

Create one table "terms" with the all the keys/terms and then another table "translations" with the term, locale and translation.

To get all english translation use

select term, translation
  from terms
  join translations using (term)
 where locale = "en_US"

You can use a left join to find the null elements if you need to.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading