1 |
- {"version":3,"file":"24709.js","mappings":"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","sources":["webpack://quran.com/./src/utils/locale.ts","webpack://quran.com/./src/utils/url.ts"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable import/prefer-default-export */\nimport findKey from 'lodash/findKey';\nimport { MetaTag } from 'next-seo/lib/types';\n\nimport i18nConfig from '../../i18n.json';\n\nimport { getBasePath } from './url';\n\nconst RTL_LOCALES = ['ar', 'fa', 'ur'];\nconst LOCALE_NAME = {\n en: 'English',\n ar: 'العربية',\n bn: 'বাংলা',\n fa: 'فارسی',\n fr: 'Français',\n id: 'Indonesia',\n it: 'Italiano',\n nl: 'Dutch',\n pt: 'Português',\n ru: 'русский',\n sq: 'Shqip',\n th: 'ภาษาไทย',\n tr: 'Türkçe',\n ur: 'اردو',\n zh: '简体中文',\n ms: 'Melayu',\n de: 'Deutsch',\n inh: 'ʁəlʁɑj mot',\n ta: 'தமிழ்', // tamil\n hi: 'हिन्दी',\n ku: 'Kurdî',\n};\n\nconst LOCALE_NAME_TO_CODE = {\n bengali: 'bn',\n english: 'en',\n arabic: 'ar',\n russian: 'ru',\n urdu: 'ur',\n Kurdish: 'ku',\n};\n\nexport const LANG_LOCALE_MAP = {\n en: 'en-US',\n ar: 'ar-EG',\n bn: 'bn-BD',\n fa: 'fa-IR',\n fr: 'fr-FR',\n id: 'id-ID',\n it: 'it-IT',\n nl: 'nl-NL',\n pt: 'pt-BR',\n ru: 'ru-RU',\n sq: 'sq-AL',\n th: 'th-TH',\n tr: 'tr-TR',\n ur: 'ur-PK',\n zh: 'zh-CN',\n ms: 'ms-MY',\n};\n\nexport enum Direction {\n LTR = 'ltr',\n RTL = 'rtl',\n}\n\nexport const Languages = {\n 9: {\n // Arabic,\n dir: Direction.RTL,\n locale: 'ar',\n },\n 20: {\n // Bengali\n locale: 'bn',\n },\n 34: {\n font: 'divehi',\n locale: 'dv',\n dir: Direction.RTL,\n },\n 38: {\n // English\n locale: 'en',\n },\n 43: {\n // Persian/Farsi\n dir: Direction.RTL,\n locale: 'fa',\n },\n 49: {\n // French\n locale: 'fr',\n },\n 59: {\n // Hebrew\n dir: Direction.RTL,\n locale: 'he',\n },\n 67: {\n // Indonesian\n locale: 'id',\n },\n 74: {\n // Italian\n locale: 'it',\n },\n 89: {\n font: 'kurdish',\n locale: 'ku',\n dir: Direction.RTL,\n },\n 133: {\n // Portuguese\n locale: 'pt',\n },\n 118: {\n // Dutch\n locale: 'nl',\n },\n 138: {\n // Russian\n locle: 'ru',\n },\n 151: {\n // Albanian\n locale: 'sq',\n },\n 161: {\n // Thai\n locale: 'th',\n },\n 172: {\n // Uyghur/Uighur\n dir: Direction.RTL,\n locale: 'ug',\n },\n 174: {\n font: 'urdu',\n dir: Direction.RTL,\n locale: 'ur',\n },\n 185: {\n // Chinese\n locale: 'zh',\n },\n};\n\ninterface LinkLanguageAlternate {\n hrefLang: string;\n href: string;\n}\n\ninterface LanguageData {\n direction: string;\n font: string;\n code: string;\n}\n\n/**\n * Check whether the locale should have a minimalLayout. This will be reflect in\n * certain components like ChapterHeader or SurahPreviewRow and the reason we need\n * this is that for Arabic for example, we the transliteratedName and translatedName\n * have the same value which will result in redundant UI.\n *\n * @param {string} lang\n * @returns {boolean}\n */\nexport const shouldUseMinimalLayout = (lang: string): boolean => {\n return lang === 'ar';\n};\n\n/**\n * Check whether the current locale is RTL.\n *\n * @param {string} locale\n * @returns {boolean}\n */\nexport const isRTLLocale = (locale: string): boolean => RTL_LOCALES.includes(locale);\n\n/**\n * Gir the dir of the element based on the locale.\n *\n * @param {string} locale\n * @returns {string}\n */\nexport const getDir = (locale: string): Direction =>\n isRTLLocale(locale) ? Direction.RTL : Direction.LTR;\n\n/**\n * Get direction and font name of language by language id\n *\n * @param {number} languageId\n * @returns {LanguageData}\n */\nexport const getLanguageDataById = (languageId: number): LanguageData => {\n const lang = Languages[languageId];\n\n return {\n font: lang?.font,\n direction: lang?.dir || Direction.LTR,\n code: lang?.locale || 'en',\n };\n};\n\n/**\n * Get direction of language by language id\n *\n * @param {number} languageId\n * @returns {string}\n */\nexport const getLanguageDirectionById = (languageId: number): string => {\n const mapping = Languages[languageId];\n\n return mapping?.dir || Direction.LTR;\n};\n\n/**\n * Get font face name of language by language id\n *\n * @param {number} languageId\n * @returns {string}\n */\nexport const getLanguageFontById = (languageId: number): string => {\n const mapping = Languages[languageId];\n return mapping?.font;\n};\n\n/**\n * Find language Id by its locale\n *\n * @param {string} locale\n * @returns {number} language id\n */\nexport const findLanguageIdByLocale = (locale: string): number => {\n return Number(findKey(Languages, { locale }));\n};\n\n/**\n * Generate the language alternates of a given path so that Search Engines can\n * recommend the alternate page to the users based on their region/locale.\n *\n * @see https://developers.google.com/search/docs/advanced/crawling/localized-versions\n * @param {string} path\n * @returns {LinkLanguageAlternate[]}\n */\nexport const getLanguageAlternates = (path: string): LinkLanguageAlternate[] => {\n const { locales } = i18nConfig;\n const basePath = getBasePath();\n return locales\n .map((locale) => ({\n hrefLang: locale,\n href: `${basePath}/${locale}${path === '/' ? '' : path}`,\n }))\n .concat({\n hrefLang: 'x-default', // used when no other language/region matches the user's browser setting @see https://developers.google.com/search/docs/advanced/crawling/localized-versions#xdefault\n href: `${basePath}${path}`,\n });\n};\n\n/**\n * Get the locale name.\n *\n * @param {string} locale\n * @returns {string}\n */\nexport const getLocaleName = (locale: string): string => LOCALE_NAME[locale];\n\n/**\n * Converts a locale name e.g. 'english' to its code e.g. 'en'.\n *\n * @param {string} fullName\n * @returns {string}\n */\nexport const getLocaleNameByFullName = (fullName: string): string =>\n LOCALE_NAME[LOCALE_NAME_TO_CODE[fullName]];\n\n/**\n * Takes a number and returns a localized string based on the provided locale.\n *\n * @param {number} value\n * @param {string} locale\n * @param {boolean} showLeadingZero\n * @param {Intl.NumberFormatOptions} options\n * @returns {string}\n */\n// Intl.NumberFormat is performance heavy so we are caching the formatter.\nconst numberFormatters: Map<Intl.NumberFormatOptions | string, Intl.NumberFormat> = new Map();\nlet currentLanguageLocale: string = null;\n\nexport const toLocalizedNumber = (\n value: number,\n locale: string,\n showLeadingZero = false,\n options: Intl.NumberFormatOptions = undefined,\n) => {\n // we do this because an empty object will result in a new formatter being created everytime since we don't have it's reference.\n const formatterKey = options ?? 'DEFAULT_OPTIONS';\n\n if (numberFormatters.has(formatterKey) && currentLanguageLocale === locale) {\n return getFormattedNumber(numberFormatters.get(formatterKey), value, showLeadingZero);\n }\n\n currentLanguageLocale = locale;\n const fullLocale = LANG_LOCALE_MAP[locale];\n\n const newNumberFormatter = new Intl.NumberFormat(fullLocale, options);\n numberFormatters.set(formatterKey, newNumberFormatter);\n return getFormattedNumber(newNumberFormatter, value, showLeadingZero);\n};\n\n/**\n * Get the formatted localized number. This either returns\n * the original value or prepends a leading 0 to the beginning\n * of the string if it's allowed and the value is below 10.\n *\n * @param {Intl.NumberFormat} formatter\n * @param {number} value\n * @param {boolean} showLeadingZero\n * @returns {string}\n */\nconst getFormattedNumber = (\n formatter: Intl.NumberFormat,\n value: number,\n showLeadingZero: boolean,\n): string => {\n const formattedNumber = formatter.format(value);\n if (!showLeadingZero || value >= 10) {\n return formattedNumber;\n }\n return `${formatter.format(0)}${formattedNumber}`;\n};\n\n/**\n * Get the full locale name with lang + country e.g. ar-SA or en-US.\n *\n * @param {string} locale\n * @returns {string}\n */\nexport const getLangFullLocale = (locale: string): string => LANG_LOCALE_MAP[locale];\n\n/**\n * Takes a date and returns a localized string based on the provided locale and options.\n *\n * @param {number} value\n * @param {string} locale\n * @param {Intl.DateTimeFormatOptions} options\n * @returns {string}\n */\nexport const toLocalizedDate = (\n value: number | Date,\n locale: string,\n options: Intl.DateTimeFormatOptions = {},\n): string => {\n const fullLocale = LANG_LOCALE_MAP[locale];\n return new Intl.DateTimeFormat(fullLocale, options).format(value);\n};\n\n/**\n * Localize a string that contains 2 numbers with a splitter in between\n * e.g. \"2:55\" or \"2-5\".\n *\n * @param {string} string\n * @param {string} lang\n * @param {string} splitter\n * @returns {string}\n */\nexport const localizeNumericalStringWithSplitter = (\n string: string,\n lang: string,\n splitter = ':',\n): string =>\n string\n .split(splitter)\n .map((value: string) => toLocalizedNumber(Number(value), lang))\n .join(splitter);\n\n/**\n * Get the localized value of the verse key.\n *\n * @param {string} verseKey\n * @param {string} lang\n * @returns {string}\n */\nexport const toLocalizedVerseKey = (verseKey: string, lang: string): string =>\n localizeNumericalStringWithSplitter(verseKey, lang);\n\n/**\n * Get the localized value of a range e.g. \"1-20\"\n *\n * @param {string} range\n * @param {string} lang\n * @returns {string}\n */\nexport const toLocalizedVersesRange = (range: string, lang: string): string =>\n localizeNumericalStringWithSplitter(range, lang, '-');\n\n/**\n * Generate the locale by mapping the current iso language to\n * the format that Facebook accepts @see https://developers.facebook.com/docs/javascript/internationalization#locales .\n * Since LANG_LOCALE_MAP has the following format LL-CC, we need to convert it into LL_CC\n * be replacing \"-\" with \"_\".\n *\n * @param {string} currentLocale\n * @returns {string}\n */\nexport const getOpenGraphLocale = (currentLocale: string): string =>\n `${LANG_LOCALE_MAP[currentLocale]}`.replace('-', '_');\n\n/**\n * Generate the alternate locales that the current content can be served in.\n * When Facebook needs to render an object in one of the specified locales,\n * it will make a request to the URL with the fb_locale URL parameter.\n *\n * @see https://developers.facebook.com/blog/post/2013/11/11/605/\n *\n * @param {string} currentLocale\n * @returns {MetaTag[]}\n */\nexport const getOpenGraphAlternateLocales = (currentLocale: string): MetaTag[] => {\n return Object.keys(LANG_LOCALE_MAP)\n .filter((languageCode) => languageCode !== currentLocale)\n .map((languageCode) => ({\n name: 'og:locale:alternate',\n content: `${LANG_LOCALE_MAP[languageCode]}`.replace('-', '_'),\n }));\n};\n\n/**\n * Convert a month number to the corresponding localized month name.\n *\n * @param {number} monthNumber\n * @param {string} locale\n * @returns {string}\n */\nexport const toLocalizedMonthName = (monthNumber: number, locale: string): string => {\n const objDate = new Date();\n objDate.setDate(1);\n objDate.setMonth(monthNumber - 1);\n\n return objDate.toLocaleString(locale, { month: 'long' });\n};\n","const getLocalePostfix = (locale: string) => (locale !== 'en' ? `/${locale}` : '');\n\nexport const getCurrentPath = () => {\n if (typeof window !== 'undefined') {\n return window.location.href;\n }\n return '';\n};\n\nexport const getWindowOrigin = (locale: string) => {\n if (typeof window !== 'undefined') {\n return `${window.location.origin}${getLocalePostfix(locale)}`;\n }\n return '';\n};\n\n/**\n * Navigate programmatically to an external url. we will try to open\n * the url in a new tab and if it doesn't work due to pop-ups being blocked,\n * we will open the url in the current tab.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/open#return_value\n *\n * @param {string} url\n */\nexport const navigateToExternalUrl = (url: string) => {\n if (typeof window !== 'undefined') {\n // if it's being blocked\n if (!window.open(url, '_blank')) {\n window.location.replace(url);\n }\n }\n};\n\n/**\n * Get the base path of the current deployment on Vercel/local machine\n * e.g. http://localhost\n * or https://quran-com-ebqc5a2d5-qurancom.vercel.app this is needed\n * if we want to construct a full path e.g. when we add alternate languages\n * meta tags.\n *\n * @see https://vercel.com/docs/concepts/projects/environment-variables\n * @returns {string}\n */\nexport const getBasePath = (): string =>\n `${process.env.NEXT_PUBLIC_VERCEL_ENV === 'development' ? 'http' : 'https'}://${\n process.env.NEXT_PUBLIC_VERCEL_URL\n }`;\n\n/**\n * Get the auth api path.\n *\n * @param {string} path\n * @returns {string}\n */\nexport const getAuthApiPath = (path: string): string =>\n `${process.env.NEXT_PUBLIC_AUTH_BASE_URL}/${path}`;\n"],"names":["findKey","i18nConfig","getBasePath","RTL_LOCALES","LOCALE_NAME","en","ar","bn","fa","fr","id","it","nl","pt","ru","sq","th","tr","ur","zh","ms","de","inh","ta","hi","ku","LOCALE_NAME_TO_CODE","bengali","english","arabic","russian","urdu","Kurdish","LANG_LOCALE_MAP","Direction","LTR","RTL","Languages","dir","locale","font","locle","shouldUseMinimalLayout","lang","isRTLLocale","includes","getDir","getLanguageDataById","languageId","direction","code","getLanguageDirectionById","mapping","getLanguageFontById","findLanguageIdByLocale","Number","getLanguageAlternates","path","locales","basePath","map","hrefLang","href","concat","getLocaleName","getLocaleNameByFullName","fullName","numberFormatters","Map","currentLanguageLocale","toLocalizedNumber","value","showLeadingZero","options","undefined","formatterKey","has","getFormattedNumber","get","fullLocale","newNumberFormatter","Intl","NumberFormat","set","formatter","formattedNumber","format","getLangFullLocale","toLocalizedDate","DateTimeFormat","localizeNumericalStringWithSplitter","string","splitter","split","join","toLocalizedVerseKey","verseKey","toLocalizedVersesRange","range","getOpenGraphLocale","currentLocale","replace","getOpenGraphAlternateLocales","Object","keys","filter","languageCode","name","content","toLocalizedMonthName","monthNumber","objDate","Date","setDate","setMonth","toLocaleString","month","getLocalePostfix","getCurrentPath","window","location","getWindowOrigin","origin","navigateToExternalUrl","url","open","process","env","NEXT_PUBLIC_VERCEL_ENV","NEXT_PUBLIC_VERCEL_URL","getAuthApiPath","NEXT_PUBLIC_AUTH_BASE_URL"],"sourceRoot":""}
|