localeForBrowserLanguage.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. // Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. import { LocalesQuery, TextDirection } from '@common/graphql/types'
  3. import type { LastArrayElement } from 'type-fest'
  4. export default function localeForBrowserLanguage(
  5. locales: LocalesQuery['locales'],
  6. ): LastArrayElement<LocalesQuery['locales']> {
  7. const userLanguages = window.navigator.languages || [
  8. window.navigator.language,
  9. ]
  10. for (const userLanguage of userLanguages.values()) {
  11. const directMatch = locales.find((elem) => {
  12. return userLanguage.toLowerCase() === elem.locale
  13. })
  14. if (directMatch) return directMatch
  15. const alias = userLanguage.substr(0, 2).toLowerCase()
  16. const aliasMatch = locales.find((elem) => {
  17. return alias === elem.alias
  18. })
  19. if (aliasMatch) return aliasMatch
  20. }
  21. return {
  22. locale: 'en-us',
  23. alias: 'en',
  24. // eslint-disable-next-line zammad/zammad-detect-translatable-string
  25. name: 'English (United States)',
  26. dir: TextDirection.Ltr,
  27. active: true,
  28. }
  29. }