Gettext.put_locale/1
sets the locale only for the current process. After the redirect, the process handling the request will be a different one, hence the redirect loop.
Is the user redirected to the correct path? How do you set the locale for a request?