Най-често срещаният начин, по който съм виждал това да се прави, е с две таблици, membership
и membership_ml
, като едната съхранява базовите стойности, а таблицата ml съхранява локализираните низове. Това е подобно на втория ви вариант. Повечето от системите, които виждам като тази, са направени по този начин, защото не са били проектирани с оглед на интернационализацията от самото начало, така че допълнителните _ml таблици бяха „залепени“ по-късно.
Това, което мисля, че е по-добър вариант, е подобно на първия ви вариант, но малко по-различен. Ще имате централна таблица за съхраняване на всички преводи, но вместо да поставяте името на таблицата и името на полето там, ще използвате токени и централна таблица "Съдържание", за да съхранявате всички преводи. По този начин можете да наложите някакъв вид RI между токените в основната таблица и преводите в таблицата със съдържание, ако също искате.
Всъщност зададох въпрос точно за това нещо преди известно време, така че можете да го разгледате за малко повече информация (вместо да поставяте отново примерите за схеми тук).