It seems that localStorage is indeed client-side, so the answer is "Yes", but I wanted to double check.
Absolutely, localstorage exists within the browser.
The browser operates in a single-threaded and single-user environment.
Therefore, there is no chance of concurrency or race condition occurring within the browser.
Each user has their own browser session, whether on separate machines, virtual machines, etc., so there is no data sharing on the client side. Only one user can work on a system at a time, even if it is shared or has multiple profiles.
Rest assured, localstorage is completely thread-safe :).
But what if the same user has multiple logins on the same browser?
In reality, a user will typically have only one active login session per browsing session. Even if they have multiple accounts, only one can be logged in at any given time.
To account for this scenario, you can prefix the user's ID to the key names you use, like so
localStorage.setItem( user_id+"_preferedLocale" , "en");
Then, retrieve the specific user's data like this
var userLocale = localStorage.getItem( user_id+"_preferedLocale" );