I cannot really find a solution to my problem and the question is: do I really have to create a primary key here?
id | lang | text
01 | 01 | hello
01 | 02 | ciao
01 | 03 | salut
02 | 01 | surname
02 | 02 | cognome
02 | 03 | nom
SELECT text FROM tablename WHERE id = ? AND lang = ?
If you want to keep your table structure and you have just one translation per language for each word, then you can use
lang as primary key
CREATE TABLE translations ( id int, lang int, text varchar(150) NOT NULL, PRIMARY KEY (id, lang) );