localeSelection.js 651 B

1234567891011121314151617181920212223
  1. export function selectBrowserLocale (availableLocales, browserLanguages) {
  2. for (const candidate of browserLanguages || []) {
  3. const lowerCandidate = candidate.toLowerCase()
  4. const exact = availableLocales.find(locale => locale.toLowerCase() === lowerCandidate)
  5. if (exact) {
  6. return exact
  7. }
  8. const parts = lowerCandidate.split('-')
  9. for (let length = parts.length - 1; length > 0; length--) {
  10. const prefix = `${parts.slice(0, length).join('-')}-`
  11. const match = availableLocales.find(locale => locale.toLowerCase().startsWith(prefix))
  12. if (match) {
  13. return match
  14. }
  15. }
  16. }
  17. return 'en'
  18. }