and you don't have to put the user to choose which language the program use. If you have a translation for program and the system language match translation language my program will use that language else it will use the default one (which is passed to t_() and which is english). You may provide external translation files *.tr and use them without changing any line of code. I think a good application should not let the user choose which language to use and instead get the language from system and use that language and if you don't have a translation file for the chosen language, use english.