I've put up a locale class on BitBucket that uses best practices to determine a client's locale and return the "best" one based on a list of possible locales configured in the application. It can also do URL redirection if you include a call in your bootstrap file. It uses the intl extension and optionally the geoip extension to go figure stuff out.
Right now the README is pretty sparse, but I will be working on that over the weekend along with a composer.json file. In the meantime the code itself is pretty well documented. I will be happy to look over any issues that are submitted.