UNPKG

react-intlayer

Version:

Easily internationalize i18n your React applications with type-safe multilingual content management.

173 lines 6.37 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var getBrowserLocale_exports = {}; __export(getBrowserLocale_exports, { LanguageDetector: () => LanguageDetector, getBrowserLocale: () => getBrowserLocale }); module.exports = __toCommonJS(getBrowserLocale_exports); var import_built = __toESM(require("@intlayer/config/built")); var import_client = require("@intlayer/config/client"); var LanguageDetector = /* @__PURE__ */ ((LanguageDetector2) => { LanguageDetector2["Querystring"] = "querystring"; LanguageDetector2["Cookie"] = "cookie"; LanguageDetector2["LocalStorage"] = "localStorage"; LanguageDetector2["SessionStorage"] = "sessionStorage"; LanguageDetector2["Navigator"] = "navigator"; LanguageDetector2["HtmlTag"] = "htmlTag"; return LanguageDetector2; })(LanguageDetector || {}); const getDefaultsOptions = () => { const { middleware } = import_built.default; return { order: [ "querystring" /* Querystring */, "cookie" /* Cookie */, "navigator" /* Navigator */, "htmlTag" /* HtmlTag */ ], lookupQuerystring: "locale", lookupCookie: middleware?.cookieName, htmlTag: document.documentElement }; }; const isLocalStorageAvailable = () => { try { if (typeof window === "undefined") return false; const testKey = "intlayer.translate.boo"; window.localStorage.setItem(testKey, "foo"); window.localStorage.removeItem(testKey); return true; } catch { return false; } }; const isSessionStorageAvailable = () => { try { if (typeof window === "undefined") return false; const testKey = "intlayer.translate.boo"; window.sessionStorage.setItem(testKey, "foo"); window.sessionStorage.removeItem(testKey); return true; } catch { return false; } }; const detectLanguage = (order, options) => { const detected = {}; const queryStringDetector = () => { if (typeof window === "undefined") return; const search = window.location.search || ""; const params = new URLSearchParams(search); const value = params.get(options.lookupQuerystring ?? ""); if (value) { detected["querystring" /* Querystring */] = value; } }; const cookieDetector = () => { if (typeof document === "undefined") return; const cookies = document.cookie.split(";"); const cookieName = `${options.lookupCookie ?? ""}=`; const cookie = cookies.find((c) => c.trim().startsWith(cookieName)); if (cookie) { const value = cookie.split("=")[1].trim(); detected["cookie" /* Cookie */] = value; } }; const localStorageDetector = () => { if (!isLocalStorageAvailable()) return; const value = window.localStorage.getItem(options.lookupLocalStorage ?? ""); if (value) { detected["localStorage" /* LocalStorage */] = value; } }; const sessionStorageDetector = () => { if (!isSessionStorageAvailable()) return; const value = window.sessionStorage.getItem( options.lookupSessionStorage ?? "" ); if (value) { detected["sessionStorage" /* SessionStorage */] = value; } }; const navigatorDetector = () => { if (typeof navigator === "undefined") return; if (navigator.language) { detected["navigator" /* Navigator */] = navigator.language; } }; const htmlTagDetector = () => { const htmlTag = options.htmlTag; if (htmlTag && typeof htmlTag.getAttribute === "function") { const lang = htmlTag.getAttribute("lang"); if (lang) { detected["htmlTag" /* HtmlTag */] = lang; } } }; const detectors = { ["querystring" /* Querystring */]: queryStringDetector, ["cookie" /* Cookie */]: cookieDetector, ["localStorage" /* LocalStorage */]: localStorageDetector, ["sessionStorage" /* SessionStorage */]: sessionStorageDetector, ["navigator" /* Navigator */]: navigatorDetector, ["htmlTag" /* HtmlTag */]: htmlTagDetector }; order.forEach((detectorName) => { detectors[detectorName]?.(); }); return detected; }; const getFirstAvailableLocale = (locales, order) => { const { internationalization } = import_built.default; for (const detector of order) { const localesArray = [locales[detector]].flat(); for (const locale of localesArray) { if (locale && (internationalization?.locales).includes(locale)) { return locale; } else if (locale?.includes("-") && (internationalization?.locales).includes( locale.split("-")[0] )) { return locale.split("-")[0]; } } } return internationalization?.defaultLocale ?? import_client.Locales.ENGLISH; }; const getBrowserLocale = (userOptions = {}) => { const options = { ...getDefaultsOptions(), ...userOptions }; const locales = detectLanguage(options.order ?? [], options); return getFirstAvailableLocale(locales, options.order ?? []); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { LanguageDetector, getBrowserLocale }); //# sourceMappingURL=getBrowserLocale.cjs.map