Use native language names instead of ISO codes in UI


A severe detriment to current l10n/i18n efforts is that native names aren’t displayed for the languages each Bitwarden tool is available in. Currently that’s just the Desktop and Web Vault, but I’m categorising with app:all as I know this is one of your goals and I have ways to make this a very trivial effort (please read on!).

Most users won’t be aware of the concept of ISO codes. The generally accepted best practice is to list the language’s native name.

A picture is worth a thousand words:

Now for some advice on how to best do this, from someone who’s been in both the web design and l10n game:

  • Hardcode the language names instead of putting them up for translation. Lists of every language’s native name are widely available. I recommend Wikipedia’s list of languages and their corresponding codes from its jQuery selector (visible on every Wikimedia project) because of how extensive and thoroughly researched it is. This is a JS file and can be parsed with code or modified with a macro relatively easily. There is most likely a similar list in the TypeScript universe, but there’s no reason for this not to be static. You can use whatever works for your stack, but a simple key-value file will do you just fine and be more efficient. I don’t think you have a common library, but the list of languages will be final and there’s no reason to ever modify it, so you might as well paste the language list into every UI’s repository and use it when the language selector becomes available.
  • Do not represent languages by country flags. I know Crowdin does this, and it’s not ideal. Countries don’t always reflect who lives in them (e.g. India has many different official languages) and it can get politically messy. Just the native name is enough.
  • It’s both acceptable and commonplace to sort the language list by ISO-639 code as you already do.

I regret to say I don’t have the programming skill (in fact, I’m not a programmer!) to implement this, but would be very grateful if you could look into implementing this fairly straightforward change.

Many thanks!

Added this next version. Includes ISO code and native name: