I have a snippet that sets the $lang variable in a cookie whenever one of the main language home pages/folders is entered, and a TV that takes the value from the cookie to use as the $lang variable wherever it’s needed. If somebody comes in from Google or wherever, he gets the default language site. That’s coded into the TV; no lanugage cookie, use site_start document ID; this presumes that your site_start document will be the default language home page/folder.
I edited the login and contact snippets to use variables taken from an included language file. Then I just edit/create a new language file; no need to duplicate and rename the snippets and call a different one for each language. Just call the one, it gets the $lang variable from the TV, and loads the appropriate language file. I name the language files according to the ID of the language home page/folder; 1.php, 16.php, etc. then it’s easy to just include /assets/langs/$lang.php in the snippet. I modify the snippet to accept the $lang variable from the query string, the same as the menu snippets get it.
here it’s in action in a site under construction
http://www.alandaniel.co.uk/index.php?id=1
Further discussion and the relevant snippet and TV here:
http://modxcms.com/forums/index.php/topic,409.0.html