Najczęstszym sposobem, w jaki to robiłem, jest użycie dwóch tabel, membership
i membership_ml
, z jedną przechowującą wartości podstawowe i tabelą ml przechowującą zlokalizowane ciągi. To jest podobne do twojej drugiej opcji. Większość systemów, które widzę w ten sposób, jest wykonanych w ten sposób, ponieważ nie zostały zaprojektowane z myślą o internacjonalizacji od samego początku, więc dodatkowe tabele _ml zostały „doczepione” później.
To, co moim zdaniem jest lepszą opcją, jest podobne do pierwszej, ale trochę inne. Mógłbyś mieć centralną tabelę do przechowywania wszystkich tłumaczeń, ale zamiast umieszczać tam nazwę tabeli i nazwę pola, użyjesz tokenów i centralnej tabeli „Zawartość” do przechowywania wszystkich tłumaczeń. W ten sposób możesz wymusić pewien rodzaj RI między tokenami w tabeli bazowej a tłumaczeniami w tabeli Content, jeśli chcesz.
Właściwie zadałem pytanie na ten temat jakiś czas temu, więc możesz rzucić okiem na to, aby uzyskać więcej informacji (zamiast ponownie wklejać przykłady schematów tutaj).