Den måde jeg har gjort det på i et fritidsprojekt (dog .net og ikke php) er at jeg har lavet en xml fil som ser ud som denne (uddrag af filen):
- <Language id="DK">
- <Terms>
- <Term id="General.Sure" phrase="Er du sikker?" />
- <Term id="General.ButtonSave" phrase="Gem" />
- <Term id="General.ButtonCancel" phrase="Fortryd" />
- <Term id="General.ErrorNotification" phrase="Der skete en fejl og programmet lukker" />
- <Term id="MainWindow.StartDateTime" phrase="Indlæsningsdato/tid" />
- <Term id="MainWindow.UpdateDateTime" phrase="Opdater tid" />
- <Term id="MainWindow.DriveName" phrase="Drev/Sti" />
- <Term id="MainWindow.LockDateTime" phrase="Lås dato/tid" />
- </Terms>
- </Language>
I den engelske version er alle phrases så oversat til Engelsk og i den tyske oversat til Tysk, etc.
Jeg har så en shared metode som henter oversættelsen fra XML filerne:
- public static String Translate(string termToTranslate)
- {
- String translatedTerm;
-
- XmlDocument XmlTranslations = new System.Xml.XmlDocument();
- try
- {
- XmlTranslations.Load(Shared.ConfigApplicationPath + @"TranslationFiles\Language_" + ConfigLanguage + ".xml"); // Load our translations
- XmlNode termNode = XmlTranslations.SelectSingleNode("Language/Terms/Term[@id='"+termToTranslate+"']");
- translatedTerm = termNode.Attributes["phrase"].Value;
- }
- catch
- {
- translatedTerm = "Translation error";
- }
-
- return translatedTerm;
- }
Den modtager så den term der skal oversættes og returnere den fundne phrase.
Så kan jeg rundt omkring i systemet bruge det, ved at skrive:
- this.labelDrive.Text = Shared.Translate("MainWindow.DriveName");
Det man skal være opmærksom på, er om man som i mit program har performancemæssig råd til at åbne/lukke XML filen hver gang, eller om man en gang for alle (når applikationen startes) skal loade alle oversættelser ind i memory.
Jeg tror dog at 5000 oversættelser vil fylde meget i memory, men det er en beregning i selv må lave.
Selve teknikken bag bør også kunne bruges i PHP. Og ønsker du at bruge en database/tabel i stedet for XML filen, er det meget nemt at udskifte.
Desuden bør må udvikle et oversættelsesværktøj, hvor man kan vedligeholde oversættelserne i stedet for at skulle rode direkte i XML filerne / databasetabellerne.
Indlæg senest redigeret d. 08.05.2011 15:42 af Bruger #9814