Ingame translation system We need a table to hold the different versions of the translations. With each version, we will store the text, who saved it, a changelog-comment and a timestamp. Each entry must belong to a language-id, and we can use the standard shortcodes. use ml; ### Setting up the translator-table. New translators are just added to this list. create table translator_tbl( user_id int ); create table language_tbl( language varchar(30), language_id varchar(2), public tinyint unsigned default 0, primary_responsible int unsigned ); create table translation_tbl ( language_id varchar(2), data mediumtext, timestamp int, editor_id int, changelog text ); create index trans_index on translator_tbl(user_id); ### creating the Languages insert into language_tbl values('Brazilian','br',1,0); insert into language_tbl values('Bulgarian','bg',1,0); insert into language_tbl values('Danish','dk',1,0); insert into language_tbl values('Dutch','nl',1,0); insert into language_tbl values('English','en',1,0); insert into language_tbl values('French','fr',1,0); insert into language_tbl values('German','de',1,0); insert into language_tbl values('Indonesian','id',1,0); insert into language_tbl values('Italian','it',1,0); insert into language_tbl values('Malaysian','my',1,0); insert into language_tbl values('Norwegian','no',1,0); insert into language_tbl values('Romanian','ro',1,0); insert into language_tbl values('Spanish','es',1,0); insert into language_tbl values('Swedish','se',1,0); insert into language_tbl values('Turkish','tr',1,0); insert into language_tbl values('Polish','pl',1,0); insert into language_tbl values('Portuguese','pt',1,0); ### Creating the first version of each file insert into translation_tbl values('br','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('bg','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('dk','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('nl','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('en','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('fr','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('de','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('id','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('it','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('my','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('no','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('ro','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('es','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('se','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('tr','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('pl','',1209304242,475,'Created blank translation file',1); insert into translation_tbl values('pt','',1209304242,475,'Created blank translation file',1); ### Making all admins translators to begin with insert into translator_tbl select user_id from team_tbl where admin_status>0; To select the most current language-file for a given language, you go: ### select * from translation_tbl where language_id='en' order by timestamp desc limit 1; ### to roll back to a given timestamp, we would do: An admin level of 10 will allow for an export to file, which will save the updated files in a special folder for futher processing or copying into the language-folder.