diff --git a/html/inc/translation.inc b/html/inc/translation.inc
new file mode 100644
index 0000000000..dc3737a446
--- /dev/null
+++ b/html/inc/translation.inc
@@ -0,0 +1,216 @@
+\n";
+ } else { //Else
+ $interface[] = $token; //Store the token and number in array
+ }
+ }
+ }
+ return $interface;
+}
+
+
+/***************************
+ * Builds the lookup arrays from the language interface file
+ * and the language files found in the $dir directory subtree
+ ***************************/
+function buildLanguages($langdir,$transdir,$compdir){
+ //First build the list of defines for the tokens
+ //and place it in an include file in the directory
+ $interface = parseLanguageInterface($langdir."language_interface"); //Get the interface
+ if (!$fh = fopen($langdir.$compdir."language_interface.inc","w")) { echo "ERROR: could not access $langdir $compdir - please check permissions"; exit;};
+ fwrite($fh, "');
+ fclose($fh);
+
+ //Now run trough each language and recompile their
+ //lookup arrays.
+ if (is_dir($langdir.$transdir)) {
+ if ($dh = opendir($langdir.$transdir)) { //If dir exists
+ while (($file = readdir($dh)) !== false) { //read contents
+ if ($file==".." or $file=="."){
+ } else if (substr($file,-3)==".po"){ //only files ending in .po
+///////////////////////////////////////////////////////////////////////////////////////////////////
+ echo "
----------------
\nCompiling $file
\n---------------
\n";
+ $language = parseLanguage($langdir.$transdir.$file, $interface);
+ if (!$fh = fopen($langdir.$compdir.$file.".inc","w")) { echo "ERROR: could not access $langdir $compdir - please check permissions"; exit;};
+ fwrite($fh, "');
+ fclose($fh);
+//////////////////////////////////////////////////////////////////////////////////////////////////
+ } else {
+ //debug("File $file with unknown extension found in $info_dir");
+ }
+ }
+ closedir($dh);
+ } else {
+ //debug("$info_dir could not be opened - check permissions?");
+ }
+ } else {
+ //debug("$info_dir not found or is not a directory");
+ }
+ $fh=fopen($langdir."last_compile_timer","w"); //Toucing compile timer
+ fwrite($fh, time());
+ fclose($fh);
+
+
+}
+
+/***************************
+ * Have some of the files changed?
+ **************************/
+function languagesNeedsRebuild($langdir,$transdir,$compdir){
+ $last_compile = filemtime($langdir."last_compile_timer"); //This file gets touched each time a compile finishes
+ if (filemtime($langdir."language_interface")>$last_compile) return true;
+
+ if (is_dir($langdir.$transdir)) {
+ if ($dh = opendir($langdir.$transdir)) { //If dir exists
+ while (($file = readdir($dh)) !== false) { //read contents
+ if ($file==".." or $file=="."){
+ } else if (substr($file,-3)==".po"){ //only files ending in .po
+ if (filemtime($langdir.$transdir.$file)>$last_compile) return true;
+ }
+ }
+ closedir($dh);
+ }
+ }
+ return false; //All checks say that nothing has changed.
+}
+
+/**************************
+ * Parses a gettext .po-file into an indexed PHP array,
+ * checking for inconsistencies if needed.
+ * The $file is parsed and validated against $interface
+ *************************/
+function parseLanguage($file, $interface){
+ if (sizeof($interface)<2){ echo "
ERROR: No interface defined for 'compileLanguages()'"; exit;}
+ $translation_file = file($file);
+ $first_entry = true;
+ for ($i = 0;$iERROR: above line ".$line.": Language file $file has a token (".$current_token.") that is not defined in the interface.";
+ return false;
+ } else {
+ return $id;
+ }
+}
+
+/*****************
+ * This function prints any missing tokens as errors
+ *****************/
+function checkMissingTokens($language_array, $interface){
+ $diff = array_values(array_diff( array_keys($interface),array_keys($language_array)));
+ for ($i=0; $iERROR: Language file is missing token (".$interface[$diff[$i]].")";
+ }
+}
+
+/***********************
+ * Returns the contents of a line (ie removes "" from start and end)
+ *********************/
+function getPOLineContent($line){
+ $start = strpos($line, '"')+1;
+ $stop = strrpos($line, '"');
+ return substr($line, $start, $stop-$start);
+}
+
+/************************
+ * Translate token
+ * Use the token name as a constant - like echo tr(MENU_ABOUT);
+ ************************/
+function tr($tokennumber){
+ global $language_lookup_array, $default_language_lookup_array;
+ if (strval(intval($tokennumber))!=$tokennumber){
+ echo "Language token used which is not defined in language interface! DEVELOPER: please check your spelling or add the token to the interface.";
+ echo "
If you are a user of this system please contact an administrator right away and tell what URL you got this error on";
+ }
+ if (!array_key_exists($tokennumber,$language_lookup_array)){ //If language hasn't got this token
+ if (!array_key_exists($tokennumber, $default_language_lookup_array)){ //Fallback to a lookup in the project default language
+ return "[MISSING TEXT]"; //If not found there either, display "MISSING TEXT"
+ } else { //If found:
+ return stripslashes($default_language_lookup_array[$tokennumber]); //Return from default language
+ }
+ }
+ return stripslashes($language_lookup_array[$tokennumber]); //If found in client language, return that
+}
+
+
+if (languagesNeedsRebuild($lang_language_dir, $lang_translations_dir, $lang_compiled_dir) || $_GET["compile_languages"]){
+ buildLanguages($lang_language_dir,$lang_translations_dir,$lang_compiled_dir);
+}
+
+// Define some constants that the language files can use in the translation:
+$PROJECT = PROJECT;
+
+
+if (file_exists($lang_language_dir.$lang_compiled_dir."language_interface.inc")){
+ require_once($lang_language_dir.$lang_compiled_dir."language_interface.inc");
+ require_once($lang_language_dir.$lang_compiled_dir.$lang_project_default.".po.inc");
+ $default_language_lookup_array=$language_lookup_array;
+ //Find out which language to use (todo: iterate trough list instead of picking first out:
+ $client_language=strtolower(substr($HTTP_SERVER_VARS["HTTP_ACCEPT_LANGUAGE"],0,2));
+ if ($client_language!=$lang_project_default){
+ if (file_exists($lang_language_dir.$lang_compiled_dir.$client_language.".po.inc")){ //If we have the language
+ require_once($lang_language_dir.$lang_compiled_dir.$client_language.".po.inc"); //Include it
+ }
+ }
+} else {
+ echo "ERROR: Could not load language interface. This is a fatal error, exitting."; flush; exit;
+};
+
+?>
\ No newline at end of file