Das ist relativ leicht, du hast grundsätzlich eine Datenbank, zu der du dich verbindest, wie wolf oben erklärt hat.
Danach musst du dich entscheiden, ob du in dieser Datenbank nur EINE Tabelle, aber mit MEHREREN Spalten (pro Sprache eine Spalte) haben willst, oder MEHRERE Tabellen (pro Sprache eine), die dann allerdings nur jeweils zwei Spalten haben.
Wie du es machst ist egal, Hauptsache ist, dass die gleichen Phrasen (zB "Ich komme mit dem Auto" - "I'll come by car." ...) die gleiche ID haben.
Danach ist es leicht: Erste Spalte einer/der Tabelle ist die ID, danach kommt die entsprechende Phrase. Bei einer Tabelle sähe es dann ungefähr so aus:
+-----------------+
| id | de | en |
+-----------------+
+-----------------+
| 01 | Auto | Car |
+-----------------+
| 02 | ... | ... |
Wenn du mehrere Tabellen hast, ist in jeder halt nur eine Sprache enthalten, dann heißen die TABELLEN "DE", "EN" usw.
Zuletzt musst du wie gesagt nur noch die ID des Satzes auswählen, dann kannst du den entsprechenden Satz aus jeder verfügbaren Sprache abgreifen, indem du den Ländercode wechselst.
D.h. dass in deiner Templatedatei im Grunde kein Text, sondern nur die IDs der Phrasen sind, der Text wird aus der Tabelle geladen.
Das ist jetzt die Varainte, die mir einfällt, wenn jemand einen leichteren Weg kennt, bitte melden, ich wüsste nicht, was für einen Anfänger sonst in Frage käme.
Um das an einem konkreten Beispiel zu festigen:
Die Tabelle oben heißt jetzt "Languages". Um nun aus "Languages" die Phrase "Auto" zu erhalten, sähe die Abfrage folgendermaßen aus:
SELECT `de` FROM `Languages` WHERE `id` = 01;
Du musst also nur wissen, weche ID die Phrase hat und welche Sprache du haben willst. Um nun anstelle von "Auto" ein "car" zu erhalten, tauschst du einfach nur das `de` gegen ein `en` aus.