[eluser]xwero[/eluser]
pyromaniac you hook is based on a query string url, $_GET['lang'], and as the GET global is cleaned by CI you should add an $_SERVER['INFO_PATH'] and related checks to make the hook work with non query string urls.
Nonox like simonmaddox mentioned, it's not because the ip located in some country the language of the country should be the default. I think you better get the user_agent preferred language first and use the country language as a secondary default.
I'm from Belgium and we have three official languages, how would you solve a case like that based on country ip?