) {
9 | return (state = action.payload);
10 | },
11 | },
12 | });
13 |
14 | export const translationActions = translationSlice.actions;
15 | export default translationSlice.reducer;
16 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import AppbarLayout from "./components/AppbarLayout/";
2 | import Footer from "./components/AppbarLayout/Footer";
3 | import Router from "./routes";
4 | import Intl18Provider from "./translations";
5 | import ThemeProvider from "./components/ThemeProvider";
6 |
7 | function App() {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | );
17 | }
18 |
19 | export default App;
20 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import "./index.css";
2 | import React from "react";
3 | import ReactDOM from "react-dom/client";
4 | import { BrowserRouter } from "react-router-dom";
5 | import { Provider } from "react-redux";
6 | import store from "./store";
7 | import App from "./App";
8 |
9 | const root = ReactDOM.createRoot(
10 | document.getElementById("root") as HTMLElement
11 | );
12 |
13 | root.render(
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "esModuleInterop": true,
8 | "allowSyntheticDefaultImports": true,
9 | "strict": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "noFallthroughCasesInSwitch": true,
12 | "module": "ESNext",
13 | "moduleResolution": "Node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src"]
20 | }
21 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/src/components/DarkModeToggle.tsx:
--------------------------------------------------------------------------------
1 | import { useTheme } from "../hooks";
2 | import styles from "../styles/themeToggle.module.css";
3 | type Props = {};
4 |
5 | export default function DarkModeToggle(props: Props) {
6 | const { isDark, toggleTheme } = useTheme();
7 | return (
8 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/Reciters/RecitersList.tsx:
--------------------------------------------------------------------------------
1 | import { Reciter } from "../../types/reciter";
2 | import RecitersItem from "./RecitersItem";
3 | import { sort } from "fast-sort";
4 | type Props = {
5 | reciters: Reciter[];
6 | };
7 |
8 | export default function RecitersList({ reciters }: Props) {
9 | const sortedReciters = sort(reciters).asc(({ identifier }) => identifier);
10 | return (
11 |
12 | {sortedReciters.map((reciter) => (
13 |
14 | ))}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/ThemeProvider.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode, useEffect } from "react";
2 | import { useTheme } from "../hooks";
3 |
4 | type Props = {
5 | children: ReactNode;
6 | };
7 |
8 | export default function ThemeProvider({ children }: Props) {
9 | const { isDark } = useTheme();
10 | useEffect(() => {
11 | const root = window.document.documentElement;
12 | if (isDark) {
13 | root.classList.remove("light");
14 | root.classList.add("dark");
15 | } else {
16 | root.classList.remove("dark");
17 | root.classList.add("light");
18 | }
19 | }, [isDark]);
20 | return <>{children}>;
21 | }
22 |
--------------------------------------------------------------------------------
/src/hooks/useTranslation.ts:
--------------------------------------------------------------------------------
1 | import { Locale } from "../types/translations";
2 | import { AppDispatch, RootState } from "../store/index";
3 | import { useSelector } from "react-redux";
4 | import { useDispatch } from "react-redux";
5 | import { translationActions } from "../store/translation";
6 |
7 | export default function useTranslation() {
8 | const translation = useSelector((state: RootState) => state.translation);
9 | const dispatch: AppDispatch = useDispatch();
10 | const setTranslation = (locale: Locale) => {
11 | dispatch(translationActions.setTranslation(locale));
12 | };
13 | return { translation, setTranslation };
14 | }
15 |
--------------------------------------------------------------------------------
/src/components/Reciters/RecitersItem.tsx:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 | import { Reciter } from "../../types/reciter";
3 |
4 | type Props = {
5 | reciter: Reciter;
6 | };
7 |
8 | export default function RecitersItem({ reciter }: Props) {
9 | return (
10 |
14 | {reciter.name}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/types/translations.ts:
--------------------------------------------------------------------------------
1 | export type Locale = "en-US" | "fr" | "ar";
2 |
3 | export type TranslationMessage =
4 | | "app.holy-quran"
5 | | "app.search-label"
6 | | "app.search"
7 | | "app.network-issues"
8 | | "app.not-found"
9 | | "sidebar.choose-language"
10 | | "sidebar.home"
11 | | "sidebar.reciters"
12 | | "sidebar.about"
13 | | "sidebar.feedback"
14 | | "sourate.edition-label"
15 | | "footer.title"
16 | | "footer.description"
17 | | "footer.paragraph"
18 | | "footer.contact-us"
19 | | "footer.your-name"
20 | | "footer.email"
21 | | "footer.your-message"
22 | | "footer.send-message"
23 | | "feedback.give-feedback"
24 | | "feedback.send";
25 |
--------------------------------------------------------------------------------
/src/libs/quranApi.ts:
--------------------------------------------------------------------------------
1 | async function getResponse(url: string, method = "GET", body: any = {}) {
2 | const response = await fetch("restcountries.com/v3.1/all" + url, {
3 | method: method,
4 | headers: { "Content-Type": "application/json" },
5 | body: body,
6 | });
7 | return await response.json();
8 | }
9 |
10 | class QuranApi {
11 | async getMeta() {
12 | return await getResponse("/meta");
13 | }
14 | async getSourate({
15 | sourateID,
16 | translation,
17 | }: {
18 | sourateID: string | number;
19 | translation: string;
20 | }) {
21 | return await getResponse(`/surah/${sourateID}${translation}`);
22 | }
23 | }
24 |
25 | export default new QuranApi();
26 |
--------------------------------------------------------------------------------
/src/types/sourate.ts:
--------------------------------------------------------------------------------
1 | export type Ayah = {
2 | number: number;
3 | text: string;
4 | numberInSurah: number;
5 | juz: number;
6 | manzil: number;
7 | page: number;
8 | ruku: number;
9 | hizbQuarter: number;
10 | sajda: boolean;
11 | };
12 |
13 | export type Sourate = {
14 | number: number;
15 | name: string;
16 | englishName: string;
17 | englishNameTranslation: string;
18 | revelationType: string;
19 | numberOfAyahs: number;
20 | ayahs: Ayah[];
21 | edition: Edition;
22 | };
23 |
24 | export type Edition = {
25 | identifier: string;
26 | language: string;
27 | name: string;
28 | englishName: string;
29 | format: string;
30 | type: string;
31 | direction: string;
32 | };
33 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 | Holy Quran
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/components/AppbarLayout/Footer.tsx:
--------------------------------------------------------------------------------
1 | import translate from "../../translations/translate";
2 | import Form from "../Form";
3 |
4 | export default function Footer(props: {}) {
5 | return (
6 |
10 |
14 |
{translate("footer.contact-us")}
15 |
{translate("footer.description")}
16 |
{translate("footer.paragraph")}
17 |
18 |
19 |
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/AppbarLayout/index.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { AnimatePresence } from "framer-motion";
3 | import Header from "./Header";
4 | import Drawer from "./Drawer";
5 | export default function Layout(props: {}) {
6 | const [drawerOpen, setDrawerOpen] = useState(false);
7 | const openSidebar = () => {
8 | setDrawerOpen(true);
9 | };
10 | const closeSidebar = () => {
11 | setDrawerOpen(false);
12 | };
13 | if (drawerOpen) {
14 | document.body.style.overflow = "hidden";
15 | } else {
16 | document.body.style.overflow = "unset";
17 | }
18 | return (
19 | <>
20 |
21 |
22 | {drawerOpen && }
23 |
24 | >
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/src/translations/index.tsx:
--------------------------------------------------------------------------------
1 | import { Fragment, ReactNode } from "react";
2 | import { IntlProvider } from "react-intl";
3 | import { useTranslation } from "../hooks/";
4 | import Arabic from "./ar.json";
5 | import English from "./en.json";
6 | import French from "./fr.json";
7 |
8 | type Props = {
9 | children: ReactNode;
10 | };
11 |
12 | export default function Intl18Provider({ children }: Props) {
13 | const { translation } = useTranslation();
14 | return (
15 |
20 | {children}
21 |
22 | );
23 | }
24 |
25 | const LOCALES_KEYS = {
26 | arabic: "ar",
27 | english: "en-US",
28 | french: "fr",
29 | };
30 |
31 | const locales = {
32 | [LOCALES_KEYS.arabic]: Arabic,
33 | [LOCALES_KEYS.english]: English,
34 | [LOCALES_KEYS.french]: French,
35 | };
36 |
--------------------------------------------------------------------------------
/src/components/SearchInput.tsx:
--------------------------------------------------------------------------------
1 | import { ChangeEventHandler } from "react";
2 | import { useIntl } from "react-intl";
3 | import { useTranslation } from "../hooks";
4 |
5 | type Props = {
6 | updateSearch: ChangeEventHandler;
7 | };
8 |
9 | export default function SearchInput(props: Props) {
10 | const intl = useIntl();
11 | const { translation } = useTranslation();
12 | return (
13 |
14 |
23 |
24 | );
25 | }
26 |
--------------------------------------------------------------------------------
/src/pages/reciters/index.tsx:
--------------------------------------------------------------------------------
1 | import RecitersList from "../../components/Reciters/RecitersList";
2 | import data from "../../libs/vocalsEditions.json";
3 |
4 | export default function Reciters() {
5 | const dataByLang = (lang: string) =>
6 | [...data].filter(({ identifier }) => identifier.startsWith(lang));
7 |
8 | return (
9 |
10 |
Quran Reciters
11 |
12 |
13 | Arabic
14 |
15 |
16 |
17 | English
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/src/translations/ar.json:
--------------------------------------------------------------------------------
1 | {
2 | "app.holy-quran": "القرآن الكريم",
3 | "app.search-label": "ماذا تريد أن تقرأ؟",
4 | "app.search": "إبحث",
5 | "app.network-issues": "مشكلة اتصال",
6 | "app.not-found": "غير موجود",
7 |
8 | "sidebar.choose-language": "تغيير اللغة",
9 | "sidebar.home": "الصفحة الرئيسية",
10 | "sidebar.reciters": "القراء",
11 | "sidebar.about": "من نحن",
12 | "sidebar.feedback": "آرائكم",
13 |
14 | "sourate.edition-label": "الإصدار",
15 | "footer.title": "القرآن الكريم",
16 | "footer.description": "اقرأ وادرس وتعلم القرآن الكريم. القرآن الكريم هو صدقة جارية.",
17 | "footer.paragraph": " نتمنى أن نسهل على الجميع قراءة القرآن الكريم ودراسته وتعلمه ، وله مسميات عديدة من القرآن الكريم ، والكتاب ، والفرقان ، والقرآن الكريم. مويثة والذكر والنور.",
18 | "footer.contact-us": "اتصل بنا",
19 | "footer.your-name": "إسمك",
20 | "footer.email": "بريدك الإلكتروني",
21 | "footer.your-message": "رسالتك",
22 | "footer.send-message": "رسالتك",
23 |
24 | "feedback.give-feedback": "قدم ملاحظاتك",
25 | "feedback.send": "إرسال"
26 | }
27 |
--------------------------------------------------------------------------------
/src/translations/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "app.holy-quran": "Noble Quran",
3 | "app.search-label": "What do you want to read?",
4 | "app.search": "Search",
5 | "app.not-found": "Not found.",
6 | "app.network-issues": "Network Issues",
7 |
8 | "sidebar.choose-language": "Change the language",
9 | "sidebar.home": "Home",
10 | "sidebar.reciters": "Reciters",
11 | "sidebar.about": "About",
12 | "sidebar.feedback": "Feedback",
13 |
14 | "sourate.edition-label": "Choose Edition",
15 | "footer.title": "The Noble Quran",
16 | "footer.description": "Read, study, and learn The Noble Quran. Quran.com is a Sadaqah Jariyah.",
17 | "footer.paragraph": "We hope to make it easy for everyone to read, study, and learn The Noble Quran. The Noble Quran has many names including Al-Quran Al-Kareem, Al-Ketab, Al-Furqan, Al-Maw'itha, Al-Thikr, and Al-Noor.",
18 | "footer.contact-us": "Contact Us",
19 | "footer.your-name": "Your name",
20 | "footer.email": "Email",
21 | "footer.your-message": "Your message",
22 | "footer.send-message": "SEND A MESSAGE",
23 |
24 | "feedback.give-feedback": "Give your feedback",
25 | "feedback.send": "Send"
26 | }
27 |
--------------------------------------------------------------------------------
/src/translations/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "app.holy-quran": "Saint Coran",
3 | "app.search-label": "Que voulez vous lire?",
4 | "app.search": "Recherche",
5 | "app.network-issues": "Problems de connexion",
6 | "app.not-found": "Non existant.",
7 |
8 | "sidebar.choose-language": "Changer la langue",
9 | "sidebar.home": "Accueil",
10 | "sidebar.reciters": "Recitateurs",
11 | "sidebar.about": "À propos",
12 | "sidebar.feedback": "Avis",
13 |
14 | "sourate.edition-label": "Choisir L'édition",
15 | "footer.title": "Le Saint Coran",
16 | "footer.description": "Lisez, étudiez et apprenez Le Noble Coran. Quran.com est une Sadaqah Jariyah.",
17 | "footer.paragraph": "Nous espérons faciliter la lecture, l'étude et l'apprentissage du Noble Coran pour tous. Le Noble Coran porte de nombreux noms, notamment Al-Quran Al-Kareem, Al-Ketab, Al-Furqan, Al- Maw'itha, Al-Thikr et Al-Noor.",
18 | "footer.contact-us": "Contactez nous",
19 | "footer.your-name": "Votre nom",
20 | "footer.email": "Email",
21 | "footer.your-message": "votre message",
22 | "footer.send-message": "ENVOYEZ UN MESSAGE",
23 |
24 | "feedback.give-feedback": "Donner votre avis",
25 | "feedback.send": "Envoyez"
26 | }
27 |
--------------------------------------------------------------------------------
/src/types/quran.ts:
--------------------------------------------------------------------------------
1 | export type QuranMetaData = {
2 | ayahs: Ayahs;
3 | surahs: Surahs;
4 | sajdas: Sajdas;
5 | rukus: HizbQuarters;
6 | pages: HizbQuarters;
7 | manzils: HizbQuarters;
8 | hizbQuarters: HizbQuarters;
9 | juzs: HizbQuarters;
10 | };
11 |
12 | export type Ayahs = {
13 | count: number;
14 | };
15 |
16 | export type HizbQuarters = {
17 | count: number;
18 | references: HizbQuartersReference[];
19 | };
20 |
21 | export type HizbQuartersReference = {
22 | surah: number;
23 | ayah: number;
24 | };
25 |
26 | export type Sajdas = {
27 | count: number;
28 | references: SajdasReference[];
29 | };
30 |
31 | export type SajdasReference = {
32 | surah: number;
33 | ayah: number;
34 | recommended: boolean;
35 | obligatory: boolean;
36 | };
37 |
38 | export type Surahs = {
39 | count: number;
40 | references: SurahsReference[];
41 | };
42 |
43 | export type SurahsReference = {
44 | number: number;
45 | name: string;
46 | englishName: string;
47 | englishNameTranslation: string;
48 | numberOfAyahs: number;
49 | revelationType: RevelationType;
50 | };
51 |
52 | export enum RevelationType {
53 | Meccan = "Meccan",
54 | Medinan = "Medinan",
55 | }
56 |
--------------------------------------------------------------------------------
/src/routes.tsx:
--------------------------------------------------------------------------------
1 | import { useLayoutEffect } from "react";
2 | import { useLocation, useRoutes } from "react-router-dom";
3 | import Home from "./pages";
4 | import Sourate from "./pages/[sourateID]";
5 | import About from "./pages/about";
6 | import Feedback from "./pages/feedback";
7 | import Reciters from "./pages/reciters/";
8 | import ReciterPage from "./pages/reciters/[reciter]";
9 |
10 | export default function Router() {
11 | const routes = useRoutes([
12 | {
13 | path: "/",
14 | element: ,
15 | },
16 |
17 | {
18 | path: "/:sourateID",
19 | element: ,
20 | },
21 | {
22 | path: "/about",
23 | element: ,
24 | },
25 | {
26 | path: "/feedback",
27 | element: ,
28 | },
29 | {
30 | path: "/reciters",
31 | element: ,
32 | },
33 | {
34 | path: "/reciters/:reciterIdentifier",
35 | element: ,
36 | },
37 | ]);
38 |
39 | const location = useLocation();
40 | useLayoutEffect(() => {
41 | document.documentElement.scrollTo({
42 | top: 0,
43 | left: 0,
44 | behavior: "smooth",
45 | });
46 | }, [location.pathname]);
47 |
48 | return routes;
49 | }
50 |
--------------------------------------------------------------------------------
/src/components/Home/SourateLists.tsx:
--------------------------------------------------------------------------------
1 | import { SurahsReference } from "../../types/quran";
2 | import LoadingSpinner from "../LoadingSpinner";
3 | import SourateItem from "./SourateItem";
4 |
5 | type Props = {
6 | isLoading: boolean;
7 | isError: boolean;
8 | MetaQueryData: SurahsReference[];
9 | };
10 |
11 | export default function SourateLists({
12 | isLoading,
13 | isError,
14 | MetaQueryData,
15 | }: Props) {
16 | if (isLoading) {
17 | return (
18 |
19 |
20 |
21 | );
22 | }
23 | if (isError) {
24 | return (
25 |
26 |
Network Issues.
27 |
28 | );
29 | }
30 | if (MetaQueryData.length === 0) {
31 | return (
32 |
33 |
Not found.
34 |
35 | );
36 | }
37 |
38 | return (
39 |
40 | {MetaQueryData?.map((sourate) => (
41 |
42 | ))}
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/src/components/Home/SourateItem.tsx:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 | import { useTranslation } from "../../hooks";
3 | import { SurahsReference } from "../../types/quran";
4 |
5 | type Props = {
6 | sourate: SurahsReference;
7 | };
8 |
9 | export default function SourateItem({ sourate }: Props) {
10 | const { translation } = useTranslation();
11 | const isRtl = translation !== "ar";
12 | return (
13 |
18 |
19 |
25 | {sourate.number}
26 |
27 |
28 | {isRtl ? sourate.englishName : sourate.name}
29 |
30 |
31 |
32 | {sourate.numberOfAyahs}
33 |
34 |
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/src/components/AppbarLayout/Header.tsx:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 | import QuranLogo from "../../assets/quran.png";
3 | import translate from "../../translations/translate";
4 | import { HiOutlineViewList } from "react-icons/hi";
5 | import { motion } from "framer-motion";
6 | import DarkModeToggle from "../DarkModeToggle";
7 | type Props = {
8 | openSidebar: () => void;
9 | };
10 |
11 | export default function Header(props: Props) {
12 | return (
13 |
18 |
19 |
24 |
25 |

32 |
33 |
34 | {translate("app.holy-quran")}
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/src/hooks/useQueryApi.ts:
--------------------------------------------------------------------------------
1 | import { Sourate } from "./../types/sourate";
2 | import { QuranMetaData } from "./../types/quran";
3 | import { useEffect, useState } from "react";
4 | export function useGetMetaQuranData() {
5 | const [data, setData] = useState();
6 | const [isLoading, setLoading] = useState(true);
7 | const [isError, setError] = useState(false);
8 |
9 | useEffect(() => {
10 | fetch("http://api.alquran.cloud/v1/meta")
11 | .then((res) => res.json())
12 | .then((result) => {
13 | setData(result.data);
14 | })
15 | .catch(() => {
16 | setError(true);
17 | })
18 | .finally(() => {
19 | setLoading(false);
20 | });
21 | }, []);
22 | return { data, isLoading, isError };
23 | }
24 |
25 | export function useGetSourates(sourateID: string, translation: string) {
26 | const [data, setData] = useState();
27 | const [isLoading, setLoading] = useState(true);
28 | const [isError, setError] = useState(false);
29 |
30 | useEffect(() => {
31 | fetch(`http://api.alquran.cloud/v1/surah/${sourateID}${translation}`)
32 | .then((res) => res.json())
33 | .then((result) => {
34 | setData(result.data);
35 | })
36 | .catch(() => {
37 | setError(true);
38 | })
39 | .finally(() => {
40 | setLoading(false);
41 | });
42 | }, [sourateID, translation]);
43 | return { data, isLoading, isError };
44 | }
45 |
--------------------------------------------------------------------------------
/src/components/Sourate/Editions.tsx:
--------------------------------------------------------------------------------
1 | import { ChangeEventHandler } from "react";
2 | import { useTranslation } from "../../hooks";
3 | import editions from "../../libs/edition.json";
4 | import translate from "../../translations/translate";
5 |
6 | type Props = {
7 | updateEdition: ChangeEventHandler;
8 | };
9 |
10 | export default function Editions(props: Props) {
11 | const { translation } = useTranslation();
12 | return (
13 |
14 |
20 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/src/components/LoadingSpinner.tsx:
--------------------------------------------------------------------------------
1 | type Props = {
2 | size?: number | string;
3 | className?: string;
4 | };
5 |
6 | export default function LoadingSpinner({ className = "w-16 h-16" }: Props) {
7 | return (
8 |
9 |
24 |
Loading...
25 |
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@reduxjs/toolkit": "^1.8.5",
7 | "@tailwindcss/line-clamp": "^0.4.2",
8 | "@testing-library/jest-dom": "^5.16.5",
9 | "@testing-library/react": "^13.4.0",
10 | "@testing-library/user-event": "^13.5.0",
11 | "@types/jest": "^27.5.2",
12 | "@types/node": "^16.11.58",
13 | "@types/react": "^18.0.18",
14 | "@types/react-dom": "^18.0.6",
15 | "@types/react-infinite-scroller": "^1.2.3",
16 | "@types/react-router-dom": "^5.3.3",
17 | "autoprefixer": "^10.4.11",
18 | "fast-sort": "^3.2.0",
19 | "framer-motion": "^7.3.2",
20 | "postcss": "^8.4.16",
21 | "react": "^18.2.0",
22 | "react-audio-player": "^0.17.0",
23 | "react-click-away-listener": "^2.2.2",
24 | "react-dom": "^18.2.0",
25 | "react-icons": "^4.4.0",
26 | "react-intl": "^6.1.1",
27 | "react-redux": "^8.0.2",
28 | "react-router-dom": "^6.4.0",
29 | "react-scripts": "5.0.1",
30 | "tailwindcss": "^3.1.8",
31 | "typescript": "^4.8.2",
32 | "web-vitals": "^2.1.4"
33 | },
34 | "scripts": {
35 | "start": "react-scripts start",
36 | "build": "react-scripts build",
37 | "test": "react-scripts test",
38 | "eject": "react-scripts eject"
39 | },
40 | "eslintConfig": {
41 | "extends": [
42 | "react-app",
43 | "react-app/jest"
44 | ]
45 | },
46 | "browserslist": {
47 | "production": [
48 | ">0.2%",
49 | "not dead",
50 | "not op_mini all"
51 | ],
52 | "development": [
53 | "last 1 chrome version",
54 | "last 1 firefox version",
55 | "last 1 safari version"
56 | ]
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/components/Sourate/Aya.tsx:
--------------------------------------------------------------------------------
1 | import { Ayah } from "../../types/sourate";
2 | import { GiSoundOff, GiSoundOn } from "react-icons/gi";
3 | import LoadingSpinner from "../LoadingSpinner";
4 |
5 | type Props = {
6 | sourateID: string | undefined;
7 | aya: Ayah;
8 | translatedAya: Ayah;
9 | isTranslatedLoading: boolean;
10 | audio: HTMLAudioElement;
11 | };
12 |
13 | export default function Aya(props: Props) {
14 | const setAudio = () => {
15 | props.audio.src = `https://cdn.islamic.network/quran/audio/128/ar.alafasy/${props.aya.number}.mp3 `;
16 | props.audio.play();
17 | };
18 |
19 | const clearAudio = () => {
20 | props.audio.pause();
21 | props.audio.currentTime = 0;
22 | };
23 |
24 | const translated = props.isTranslatedLoading ? (
25 |
26 |
27 |
28 | ) : (
29 |
30 | {props.translatedAya.text}
31 |
32 | );
33 |
34 | return (
35 |
36 |
37 |

42 |
43 | {translated}
44 |
45 |
50 |
55 |
56 |
57 | );
58 | }
59 |
--------------------------------------------------------------------------------
/src/pages/[sourateID].tsx:
--------------------------------------------------------------------------------
1 | import { ChangeEvent, useState } from "react";
2 | import { useParams } from "react-router-dom";
3 | import LoadingSpinner from "../components/LoadingSpinner";
4 | import Aya from "../components/Sourate/Aya";
5 | import Editions from "../components/Sourate/Editions";
6 | import { useGetSourates } from "../hooks/useQueryApi";
7 | import { Ayah } from "../types/sourate";
8 |
9 | type Props = {};
10 |
11 | export default function Sourate(props: Props) {
12 | const { sourateID } = useParams();
13 | const [edition, setEdition] = useState("/en.asad");
14 | const audio = new Audio();
15 |
16 | const arabic = useGetSourates(sourateID as string, "");
17 | const translated = useGetSourates(sourateID as string, "/" + edition);
18 | console.log(arabic);
19 | const updateEdition = (e: ChangeEvent) => {
20 | setEdition("/" + e.target.value);
21 | };
22 |
23 | if (arabic.isLoading) {
24 | return (
25 |
26 |
27 |
28 | );
29 | }
30 | if (arabic.isError || translated.isError) {
31 | return (
32 |
33 |
Network Issues.
34 |
35 | );
36 | }
37 |
38 | return (
39 |
40 |
41 |
42 | {arabic.data?.ayahs.map((aya, index) => (
43 |
51 | ))}
52 |
53 |
54 | );
55 | }
56 |
--------------------------------------------------------------------------------
/src/styles/themeToggle.module.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --color-toggle-light: yellow;
3 | --color-toggle-dark: bisque;
4 | }
5 |
6 | .container {
7 | cursor: pointer;
8 | margin: 0 1.5rem;
9 | }
10 |
11 | .container input {
12 | display: none;
13 | }
14 |
15 | .container input + div {
16 | border-radius: 50%;
17 | width: 36px;
18 | height: 36px;
19 | position: relative;
20 | box-shadow: inset 14px -14px 0 0 var(--color-toggle-dark, #000);
21 | transform: scale(1) rotate(-2deg);
22 | transition: box-shadow 0.5s ease 0s, transform 0.4s ease 0.1s;
23 | }
24 |
25 | .container input + div::before {
26 | content: "";
27 | width: inherit;
28 | height: inherit;
29 | border-radius: inherit;
30 | position: absolute;
31 | left: 0;
32 | top: 0;
33 | transition: background 0.3s ease;
34 | }
35 |
36 | .container input + div::after {
37 | content: "";
38 | width: 8px;
39 | height: 8px;
40 | border-radius: 50%;
41 | margin: -4px 0 0 -4px;
42 | position: absolute;
43 | top: 50%;
44 | left: 50%;
45 | box-shadow: 0 -23px 0 var(--color-toggle-light, #eee),
46 | 0 23px 0 var(--color-toggle-light, #eee),
47 | 23px 0 0 var(--color-toggle-light, #eee),
48 | -23px 0 0 var(--color-toggle-light, #eee),
49 | 15px 15px 0 var(--color-toggle-light, #eee),
50 | -15px 15px 0 var(--color-toggle-light, #eee),
51 | 15px -15px 0 var(--color-toggle-light, #eee),
52 | -15px -15px 0 var(--color-toggle-light, #eee);
53 | transform: scale(0);
54 | transition: all 0.3s ease;
55 | }
56 |
57 | .container input:checked + div {
58 | box-shadow: inset 32px -32px 0 0 #fff;
59 | transform: scale(0.5) rotate(0deg);
60 | transition: transform 0.3s ease 0.1s, box-shadow 0.2s ease 0s;
61 | }
62 |
63 | .container input:checked + div::before {
64 | background: var(--color-toggle-light, #eee);
65 | transition: background 0.3s ease 0.1s;
66 | }
67 |
68 | .container input:checked + div::after {
69 | transform: scale(1.5);
70 | transition: transform 0.5s ease 0.15s;
71 | }
72 |
--------------------------------------------------------------------------------
/src/pages/feedback.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { AiOutlineStar, AiFillStar } from "react-icons/ai";
3 |
4 | export default function Feedback() {
5 | const [starHovered, setStarHovered] = useState();
6 | return (
7 |
8 |
Give your feedback
9 |
10 |
14 |
15 |
16 |
17 | {Array(5)
18 | .fill(0)
19 | .map((_, i) => {
20 | if (!starHovered) {
21 | return (
22 |
setStarHovered(i)}
28 | />
29 | );
30 | } else {
31 | if (starHovered < i) {
32 | return (
33 | setStarHovered(i)}
39 | />
40 | );
41 | } else {
42 | return (
43 | setStarHovered(i)}
49 | />
50 | );
51 | }
52 | }
53 | })}
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/src/pages/reciters/[reciter].tsx:
--------------------------------------------------------------------------------
1 | import { useParams } from "react-router-dom";
2 | import AudioPlayer from "react-audio-player";
3 | import LoadingSpinner from "../../components/LoadingSpinner";
4 | import translate from "../../translations/translate";
5 | import { useGetMetaQuranData } from "../../hooks/useQueryApi";
6 |
7 | type Props = {};
8 |
9 | export default function ReciterPage(props: Props) {
10 | const { reciterIdentifier } = useParams();
11 | const id = reciterIdentifier?.trim();
12 | const { data: sourates, isLoading, isError } = useGetMetaQuranData();
13 |
14 | if (isLoading) {
15 | return (
16 |
17 |
18 |
19 | );
20 | }
21 |
22 | if (isError) {
23 | return (
24 |
25 |
26 | {translate("app.network-issues")}
27 |
28 |
29 | );
30 | }
31 | if (sourates?.surahs.references.length === 0) {
32 | return (
33 |
34 |
{translate("app.not-found")}
35 |
36 | );
37 | }
38 | return (
39 |
40 | {sourates?.surahs.references.map((sourate) => (
41 |
45 |
46 |
{sourate.englishName}
47 |
48 |
53 |
54 | ))}
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/src/components/Form.tsx:
--------------------------------------------------------------------------------
1 | import { FormEvent } from "react";
2 | import { useIntl } from "react-intl";
3 | import translate from "../translations/translate";
4 |
5 | export default function Form() {
6 | const handleSubmit = (e: FormEvent) => {
7 | e.preventDefault();
8 | };
9 | const intl = useIntl();
10 | return (
11 |
12 |
13 | {translate("footer.contact-us")}
14 |
15 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/src/components/AppbarLayout/Drawer.tsx:
--------------------------------------------------------------------------------
1 | import { CgClose, CgHome } from "react-icons/cg";
2 | import { HiQuestionMarkCircle } from "react-icons/hi";
3 | import { GiSoundWaves } from "react-icons/gi";
4 | import { MdOutlineFeedback } from "react-icons/md";
5 | import { Link } from "react-router-dom";
6 | import { motion, Variants } from "framer-motion";
7 | import ClickAwayListener from "react-click-away-listener";
8 | import translate from "../../translations/translate";
9 | import { useTranslation } from "../../hooks";
10 | import { Locale } from "../../types/translations";
11 | import { ChangeEvent } from "react";
12 | type Props = {
13 | closeSidebar: () => void;
14 | };
15 |
16 | const Drawer = motion((props: Props) => {
17 | const { setTranslation, translation } = useTranslation();
18 | const onTranslate = (e: ChangeEvent) => {
19 | setTranslation(e.target.value as Locale);
20 | };
21 |
22 | const isRtl = translation === "ar";
23 |
24 | const DrawerVariants: Variants = {
25 | initial: { x: isRtl ? "20rem" : "-20rem" },
26 | animate: { x: 0, transition: { duration: 0.3 } },
27 | exit: { x: isRtl ? "20rem" : "-20rem", transition: { duration: 0.3 } },
28 | };
29 |
30 | const OpacityVariants: Variants = {
31 | initial: { opacity: 0 },
32 | animate: { opacity: 0.8 },
33 | exit: { opacity: 0 },
34 | };
35 |
36 | return (
37 | <>
38 |
47 |
48 |
57 |
58 | {translate("app.holy-quran")}
59 |
60 |
63 |
64 |
70 |
80 |
81 |
82 | {links.map((link, key) => (
83 | -
84 |
98 | {link.icon}
99 | {link.name}
100 |
101 |
102 | ))}
103 |
104 |
105 |
106 | >
107 | );
108 | });
109 |
110 | const FramerLink = motion(Link);
111 |
112 | const links = [
113 | {
114 | name: translate("sidebar.home"),
115 | icon: ,
116 | path: "/",
117 | },
118 | {
119 | name: translate("sidebar.reciters"),
120 | icon: ,
121 | path: "/reciters",
122 | },
123 | {
124 | name: translate("sidebar.about"),
125 | icon: ,
126 | path: "/about",
127 | },
128 | {
129 | name: translate("sidebar.feedback"),
130 | icon: ,
131 | path: "/feedback",
132 | },
133 | ];
134 |
135 | export default Drawer;
136 |
--------------------------------------------------------------------------------
/src/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import { ChangeEvent, useState } from "react";
2 | import SourateLists from "../components/Home/SourateLists";
3 | import SearchInput from "../components/SearchInput";
4 | import { useTheme } from "../hooks";
5 | import { useGetMetaQuranData } from "../hooks/useQueryApi";
6 | import { SurahsReference } from "../types/quran";
7 |
8 | type Props = {};
9 |
10 | export default function Home(props: Props) {
11 | const { isDark } = useTheme();
12 | const [search, setSearch] = useState("");
13 | const updateSearch = (e: ChangeEvent) => {
14 | setSearch(e.target.value);
15 | };
16 | const { data: QuranMetaData, isLoading, isError } = useGetMetaQuranData();
17 | const filtredMetaData = QuranMetaData?.surahs.references.filter((surah) =>
18 | surah.englishName.toLowerCase().includes(search.toLowerCase())
19 | );
20 | return (
21 |
22 |
23 |
35 |
36 |
37 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/src/libs/vocalsEditions.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "identifier": "ar.abdulazizazzahrani",
4 | "language": "ar",
5 | "name": "Abdulaziz Az-Zahrani",
6 | "englishName": "Abdulaziz Az-Zahrani",
7 | "format": "audio",
8 | "type": "surahbysurah"
9 | },
10 | {
11 | "identifier": "ar.abdulbariaththubaity",
12 | "language": "ar",
13 | "name": "AbdulBari ath-Thubaity",
14 | "englishName": "AbdulBari ath-Thubaity",
15 | "format": "audio",
16 | "type": "surahbysurah"
17 | },
18 | {
19 | "identifier": "ar.abdulbarimohammed",
20 | "language": "ar",
21 | "name": "Abdul Bari Mohammed",
22 | "englishName": "Abdul Bari Mohammed",
23 | "format": "audio",
24 | "type": "surahbysurah"
25 | },
26 | {
27 | "identifier": "ar.abdulbasitmujawwad",
28 | "language": "ar",
29 | "name": "AbdulBaset AbdulSamad [Mujawwad]",
30 | "englishName": "AbdulBaset AbdulSamad [Mujawwad]",
31 | "format": "audio",
32 | "type": "surahbysurah"
33 | },
34 | {
35 | "identifier": "ar.abdulbasitmurattal",
36 | "language": "ar",
37 | "name": "AbdulBaset AbdulSamad [Murattal]",
38 | "englishName": "AbdulBaset AbdulSamad [Murattal]",
39 | "format": "audio",
40 | "type": "surahbysurah"
41 | },
42 | {
43 | "identifier": "ar.abdulkareemalhazmi",
44 | "language": "ar",
45 | "name": "Abdul-Kareem al-Hazmi",
46 | "englishName": "Abdul-Kareem al-Hazmi",
47 | "format": "audio",
48 | "type": "surahbysurah"
49 | },
50 | {
51 | "identifier": "ar.abdullahalmatrood",
52 | "language": "ar",
53 | "name": "Abdullah al-Matrood",
54 | "englishName": "Abdullah al-Matrood",
55 | "format": "audio",
56 | "type": "surahbysurah"
57 | },
58 | {
59 | "identifier": "ar.abdullahawadaljuhani",
60 | "language": "ar",
61 | "name": "Abdullah Juhany",
62 | "englishName": "Abdullah Juhany",
63 | "format": "audio",
64 | "type": "surahbysurah"
65 | },
66 | {
67 | "identifier": "ar.abdullahbasfar",
68 | "language": "ar",
69 | "name": "Abdullah Basfar",
70 | "englishName": "Abdullah Basfar",
71 | "format": "audio",
72 | "type": "surahbysurah"
73 | },
74 | {
75 | "identifier": "ar.abdullahkhayat",
76 | "language": "ar",
77 | "name": "Abdullah Khayat",
78 | "englishName": "Abdullah Khayat",
79 | "format": "audio",
80 | "type": "surahbysurah"
81 | },
82 | {
83 | "identifier": "ar.abdullahkhulaifi",
84 | "language": "ar",
85 | "name": "Abdullah Khulayfee",
86 | "englishName": "Abdullah Khulayfee",
87 | "format": "audio",
88 | "type": "surahbysurah"
89 | },
90 | {
91 | "identifier": "ar.abdulmohsenalharthy",
92 | "language": "ar",
93 | "name": "Abdulmohsen Al-Harthy",
94 | "englishName": "Abdulmohsen Al-Harthy",
95 | "format": "audio",
96 | "type": "surahbysurah"
97 | },
98 | {
99 | "identifier": "ar.abdulmuhsinalqasim",
100 | "language": "ar",
101 | "name": "AbdulMuhsin al-Qasim",
102 | "englishName": "AbdulMuhsin al-Qasim",
103 | "format": "audio",
104 | "type": "surahbysurah"
105 | },
106 | {
107 | "identifier": "ar.abdulmunimabdulmubdi",
108 | "language": "ar",
109 | "name": "Abdul-Mun'im Abdul-Mubdi'",
110 | "englishName": "Abdul-Mun'im Abdul-Mubdi'",
111 | "format": "audio",
112 | "type": "surahbysurah"
113 | },
114 | {
115 | "identifier": "ar.abdulwadoodhaneef",
116 | "language": "ar",
117 | "name": "AbdulWadood Haneef",
118 | "englishName": "AbdulWadood Haneef",
119 | "format": "audio",
120 | "type": "surahbysurah"
121 | },
122 | {
123 | "identifier": "ar.abdurrasheedsufiabialhaarithanalkasaaee",
124 | "language": "ar",
125 | "name": "Abdur-Rashid Sufi [Abi al-Haarith an al-Kasaa\u2019ee]",
126 | "englishName": "Abdur-Rashid Sufi [Abi al-Haarith an al-Kasaa\u2019ee]",
127 | "format": "audio",
128 | "type": "surahbysurah"
129 | },
130 | {
131 | "identifier": "ar.abdurrasheedsufiaddoorianabiamr",
132 | "language": "ar",
133 | "name": "Abdur-Rashid Sufi [ad-Doori an Abi Amr]",
134 | "englishName": "Abdur-Rashid Sufi [ad-Doori an Abi Amr]",
135 | "format": "audio",
136 | "type": "surahbysurah"
137 | },
138 | {
139 | "identifier": "ar.abdurrasheedsufishubahanasim",
140 | "language": "ar",
141 | "name": "Abdur-Rashid Sufi [Shu'bah an Asim]",
142 | "englishName": "Abdur-Rashid Sufi [Shu'bah an Asim]",
143 | "format": "audio",
144 | "type": "surahbysurah"
145 | },
146 | {
147 | "identifier": "ar.abdurrasheedsufisoosi",
148 | "language": "ar",
149 | "name": "Abdurrashid Sufi [Soosi]",
150 | "englishName": "Abdurrashid Sufi [Soosi]",
151 | "format": "audio",
152 | "type": "surahbysurah"
153 | },
154 | {
155 | "identifier": "ar.abdurrazaqbinabtanaldulaimi",
156 | "language": "ar",
157 | "name": "Abdur Razaq Bin Abtan Al Dulaimi",
158 | "englishName": "Abdur Razaq Bin Abtan Al Dulaimi",
159 | "format": "audio",
160 | "type": "surahbysurah"
161 | },
162 | {
163 | "identifier": "ar.abuabdullahmuniraltounsi",
164 | "language": "ar",
165 | "name": "Abu Abdullah Munir Al Tounsi",
166 | "englishName": "Abu Abdullah Munir Al Tounsi",
167 | "format": "audio",
168 | "type": "surahbysurah"
169 | },
170 | {
171 | "identifier": "ar.abubakraldhabi",
172 | "language": "ar",
173 | "name": "Abu Bakr al Dhabi",
174 | "englishName": "Abu Bakr al Dhabi",
175 | "format": "audio",
176 | "type": "surahbysurah"
177 | },
178 | {
179 | "identifier": "ar.adilkalbani",
180 | "language": "ar",
181 | "name": "Adel Kalbani",
182 | "englishName": "Adel Kalbani",
183 | "format": "audio",
184 | "type": "surahbysurah"
185 | },
186 | {
187 | "identifier": "ar.ahmadalhawashy",
188 | "language": "ar",
189 | "name": "Ahmad Al Hawashy",
190 | "englishName": "Ahmad Al Hawashy",
191 | "format": "audio",
192 | "type": "surahbysurah"
193 | },
194 | {
195 | "identifier": "ar.ahmadalnufais",
196 | "language": "ar",
197 | "name": "Ahmad Alnufais",
198 | "englishName": "Ahmad Alnufais",
199 | "format": "audio",
200 | "type": "surahbysurah"
201 | },
202 | {
203 | "identifier": "ar.ahmadkhaderaltarabulsi",
204 | "language": "ar",
205 | "name": "Ahmad Khader Al-Tarabulsi",
206 | "englishName": "Ahmad Khader Al-Tarabulsi",
207 | "format": "audio",
208 | "type": "surahbysurah"
209 | },
210 | {
211 | "identifier": "ar.ahmadsulaiman",
212 | "language": "ar",
213 | "name": "Ahmad Suleiman",
214 | "englishName": "Ahmad Suleiman",
215 | "format": "audio",
216 | "type": "surahbysurah"
217 | },
218 | {
219 | "identifier": "ar.ahmedalajmi",
220 | "language": "ar",
221 | "name": "Ahmed ibn Ali al-Ajamy",
222 | "englishName": "Ahmed ibn Ali al-Ajamy",
223 | "format": "audio",
224 | "type": "surahbysurah"
225 | },
226 | {
227 | "identifier": "ar.ahmedalhammad",
228 | "language": "ar",
229 | "name": "Ahmed Al Hammad",
230 | "englishName": "Ahmed Al Hammad",
231 | "format": "audio",
232 | "type": "surahbysurah"
233 | },
234 | {
235 | "identifier": "ar.ahmedalmisbahi",
236 | "language": "ar",
237 | "name": "Ahmed Al Misbahi",
238 | "englishName": "Ahmed Al Misbahi",
239 | "format": "audio",
240 | "type": "surahbysurah"
241 | },
242 | {
243 | "identifier": "ar.ahmedamir",
244 | "language": "ar",
245 | "name": "Ahmed Amir",
246 | "englishName": "Ahmed Amir",
247 | "format": "audio",
248 | "type": "surahbysurah"
249 | },
250 | {
251 | "identifier": "ar.ahmedmohamedsalama",
252 | "language": "ar",
253 | "name": "Ahmed Mohamed Salama",
254 | "englishName": "Ahmed Mohamed Salama",
255 | "format": "audio",
256 | "type": "surahbysurah"
257 | },
258 | {
259 | "identifier": "ar.ahmedsaber",
260 | "language": "ar",
261 | "name": "Ahmed Saber",
262 | "englishName": "Ahmed Saber",
263 | "format": "audio",
264 | "type": "surahbysurah"
265 | },
266 | {
267 | "identifier": "ar.alafasy",
268 | "language": "ar",
269 | "name": "Mishary Rashid Alafasy",
270 | "englishName": "Mishary Rashid Alafasy",
271 | "format": "audio",
272 | "type": "surahbysurah"
273 | },
274 | {
275 | "identifier": "ar.alashryomran",
276 | "language": "ar",
277 | "name": "Al Ashry Omran",
278 | "englishName": "Al Ashry Omran",
279 | "format": "audio",
280 | "type": "surahbysurah"
281 | },
282 | {
283 | "identifier": "ar.alfatehmuhammadzubair",
284 | "language": "ar",
285 | "name": "Al Fateh Muhammad Zubair",
286 | "englishName": "Al Fateh Muhammad Zubair",
287 | "format": "audio",
288 | "type": "surahbysurah"
289 | },
290 | {
291 | "identifier": "ar.alhusaynialazazi",
292 | "language": "ar",
293 | "name": "Al Husayni Al Azazi",
294 | "englishName": "Al Husayni Al Azazi",
295 | "format": "audio",
296 | "type": "surahbysurah"
297 | },
298 | {
299 | "identifier": "ar.alhusaynialazazichildren",
300 | "language": "ar",
301 | "name": "Al Husayni Al Azazi - Children",
302 | "englishName": "Al Husayni Al Azazi - Children",
303 | "format": "audio",
304 | "type": "surahbysurah"
305 | },
306 | {
307 | "identifier": "ar.aliabdurrahmanalhuthaify",
308 | "language": "ar",
309 | "name": "Ali Abdur-Rahman al-Huthaify",
310 | "englishName": "Ali Abdur-Rahman al-Huthaify",
311 | "format": "audio",
312 | "type": "surahbysurah"
313 | },
314 | {
315 | "identifier": "ar.aliabdurrahmanalhuthaifyqaloon",
316 | "language": "ar",
317 | "name": "Ali al-Huthaify [Qaaloon]",
318 | "englishName": "Ali al-Huthaify [Qaaloon]",
319 | "format": "audio",
320 | "type": "surahbysurah"
321 | },
322 | {
323 | "identifier": "ar.alihajjajsouissi",
324 | "language": "ar",
325 | "name": "Ali Hajjaj Souissi",
326 | "englishName": "Ali Hajjaj Souissi",
327 | "format": "audio",
328 | "type": "surahbysurah"
329 | },
330 | {
331 | "identifier": "ar.alzainmohamedahmed",
332 | "language": "ar",
333 | "name": "Alzain Mohammad Ahmad",
334 | "englishName": "Alzain Mohammad Ahmad",
335 | "format": "audio",
336 | "type": "surahbysurah"
337 | },
338 | {
339 | "identifier": "ar.aymanswed",
340 | "language": "ar",
341 | "name": "Ayman Swed",
342 | "englishName": "Ayman Swed",
343 | "format": "audio",
344 | "type": "surahbysurah"
345 | },
346 | {
347 | "identifier": "ar.azizalili",
348 | "language": "ar",
349 | "name": "Aziz Alili",
350 | "englishName": "Aziz Alili",
351 | "format": "audio",
352 | "type": "surahbysurah"
353 | },
354 | {
355 | "identifier": "ar.bandarbalila",
356 | "language": "ar",
357 | "name": "Bandar Balila",
358 | "englishName": "Bandar Balila",
359 | "format": "audio",
360 | "type": "surahbysurah"
361 | },
362 | {
363 | "identifier": "ar.basselabdulrahmanraoui",
364 | "language": "ar",
365 | "name": "Bassel Abdul Rahman Raoui",
366 | "englishName": "Bassel Abdul Rahman Raoui",
367 | "format": "audio",
368 | "type": "surahbysurah"
369 | },
370 | {
371 | "identifier": "ar.benkirane",
372 | "language": "ar",
373 | "name": "\u0639\u0628\u062f \u0627\u0644\u0645\u062c\u064a\u0628 \u0628\u0646 \u0643\u064a\u0631\u0627\u0646",
374 | "englishName": "\u0639\u0628\u062f \u0627\u0644\u0645\u062c\u064a\u0628 \u0628\u0646 \u0643\u064a\u0631\u0627\u0646",
375 | "format": "audio",
376 | "type": "surahbysurah"
377 | },
378 | {
379 | "identifier": "ar.darwishfarajdarwishalattar",
380 | "language": "ar",
381 | "name": "Darwish Faraj Darwish Al Attar",
382 | "englishName": "Darwish Faraj Darwish Al Attar",
383 | "format": "audio",
384 | "type": "surahbysurah"
385 | },
386 | {
387 | "identifier": "ar.eidhassanabuaachra",
388 | "language": "ar",
389 | "name": "Eid Hassan Abu Aachra",
390 | "englishName": "Eid Hassan Abu Aachra",
391 | "format": "audio",
392 | "type": "surahbysurah"
393 | },
394 | {
395 | "identifier": "ar.emadalmansary",
396 | "language": "ar",
397 | "name": "Emad Al Mansary",
398 | "englishName": "Emad Al Mansary",
399 | "format": "audio",
400 | "type": "surahbysurah"
401 | },
402 | {
403 | "identifier": "ar.ezzatsabri",
404 | "language": "ar",
405 | "name": "Ezzat Sabri",
406 | "englishName": "Ezzat Sabri",
407 | "format": "audio",
408 | "type": "surahbysurah"
409 | },
410 | {
411 | "identifier": "ar.faresabbad",
412 | "language": "ar",
413 | "name": "Fares Abbad",
414 | "englishName": "Fares Abbad",
415 | "format": "audio",
416 | "type": "surahbysurah"
417 | },
418 | {
419 | "identifier": "ar.fouadalkhamiri",
420 | "language": "ar",
421 | "name": "Fouad Al Khamiri",
422 | "englishName": "Fouad Al Khamiri",
423 | "format": "audio",
424 | "type": "surahbysurah"
425 | },
426 | {
427 | "identifier": "ar.hamadsinan",
428 | "language": "ar",
429 | "name": "Hamad Sinan",
430 | "englishName": "Hamad Sinan",
431 | "format": "audio",
432 | "type": "surahbysurah"
433 | },
434 | {
435 | "identifier": "ar.hamdyalsayedtolbasaad",
436 | "language": "ar",
437 | "name": "Hamdy Al Sayed Tolba Saad",
438 | "englishName": "Hamdy Al Sayed Tolba Saad",
439 | "format": "audio",
440 | "type": "surahbysurah"
441 | },
442 | {
443 | "identifier": "ar.haniarrifai",
444 | "language": "ar",
445 | "name": "Hani ar-Rifai",
446 | "englishName": "Hani ar-Rifai",
447 | "format": "audio",
448 | "type": "surahbysurah"
449 | },
450 | {
451 | "identifier": "ar.hasanhashem",
452 | "language": "ar",
453 | "name": "Hasan Hashem",
454 | "englishName": "Hasan Hashem",
455 | "format": "audio",
456 | "type": "surahbysurah"
457 | },
458 | {
459 | "identifier": "ar.hassansaleh",
460 | "language": "ar",
461 | "name": "Hasan Saleh",
462 | "englishName": "Hasan Saleh",
463 | "format": "audio",
464 | "type": "surahbysurah"
465 | },
466 | {
467 | "identifier": "ar.hatemfarid",
468 | "language": "ar",
469 | "name": "hatemfarid",
470 | "englishName": "hatemfarid",
471 | "format": "audio",
472 | "type": "surahbysurah"
473 | },
474 | {
475 | "identifier": "ar.ibrahimalakhdar",
476 | "language": "ar",
477 | "name": "Ibrahim Al Akhdar",
478 | "englishName": "Ibrahim Al Akhdar",
479 | "format": "audio",
480 | "type": "surahbysurah"
481 | },
482 | {
483 | "identifier": "ar.ibrahimaldossari",
484 | "language": "ar",
485 | "name": "Ibrahim Al Dossari",
486 | "englishName": "Ibrahim Al Dossari",
487 | "format": "audio",
488 | "type": "surahbysurah"
489 | },
490 | {
491 | "identifier": "ar.ibrahimaljormy",
492 | "language": "ar",
493 | "name": "Ibrahim Aljormy",
494 | "englishName": "Ibrahim Aljormy",
495 | "format": "audio",
496 | "type": "surahbysurah"
497 | },
498 | {
499 | "identifier": "ar.ilhantok",
500 | "language": "ar",
501 | "name": "Ilhan Tok",
502 | "englishName": "Ilhan Tok",
503 | "format": "audio",
504 | "type": "surahbysurah"
505 | },
506 | {
507 | "identifier": "ar.imadzuhairhafez",
508 | "language": "ar",
509 | "name": "Imad Zuhair Hafez",
510 | "englishName": "Imad Zuhair Hafez",
511 | "format": "audio",
512 | "type": "surahbysurah"
513 | },
514 | {
515 | "identifier": "ar.jaberabdulhameed",
516 | "language": "ar",
517 | "name": "Jaber Abdul Hameed",
518 | "englishName": "Jaber Abdul Hameed",
519 | "format": "audio",
520 | "type": "surahbysurah"
521 | },
522 | {
523 | "identifier": "ar.jamaanalosaimi",
524 | "language": "ar",
525 | "name": "Jamaan Alosaimi",
526 | "englishName": "Jamaan Alosaimi",
527 | "format": "audio",
528 | "type": "surahbysurah"
529 | },
530 | {
531 | "identifier": "ar.jamalshakerabdullah",
532 | "language": "ar",
533 | "name": "Jamal Shaker Abdullah",
534 | "englishName": "Jamal Shaker Abdullah",
535 | "format": "audio",
536 | "type": "surahbysurah"
537 | },
538 | {
539 | "identifier": "ar.jazzaalswaileh",
540 | "language": "ar",
541 | "name": "Jazza Alswaileh",
542 | "englishName": "Jazza Alswaileh",
543 | "format": "audio",
544 | "type": "surahbysurah"
545 | },
546 | {
547 | "identifier": "ar.kamel",
548 | "language": "ar",
549 | "name": "Abdallah Kamel",
550 | "englishName": "Abdallah Kamel",
551 | "format": "audio",
552 | "type": "surahbysurah"
553 | },
554 | {
555 | "identifier": "ar.karimmansouri",
556 | "language": "ar",
557 | "name": "Karim Mansouri",
558 | "englishName": "Karim Mansouri",
559 | "format": "audio",
560 | "type": "surahbysurah"
561 | },
562 | {
563 | "identifier": "ar.khaledalqahtani",
564 | "language": "ar",
565 | "name": "Khaalid Abdullaah al-Qahtaanee",
566 | "englishName": "Khaalid Abdullaah al-Qahtaanee",
567 | "format": "audio",
568 | "type": "surahbysurah"
569 | },
570 | {
571 | "identifier": "ar.khaledbarakat",
572 | "language": "ar",
573 | "name": "Khaled Barakat",
574 | "englishName": "Khaled Barakat",
575 | "format": "audio",
576 | "type": "surahbysurah"
577 | },
578 | {
579 | "identifier": "ar.khalidabdulkafi",
580 | "language": "ar",
581 | "name": "Khalid Abdulkhafi",
582 | "englishName": "Khalid Abdulkhafi",
583 | "format": "audio",
584 | "type": "surahbysurah"
585 | },
586 | {
587 | "identifier": "ar.khalidaljalil",
588 | "language": "ar",
589 | "name": "Khalid Al Jalil",
590 | "englishName": "Khalid Al Jalil",
591 | "format": "audio",
592 | "type": "surahbysurah"
593 | },
594 | {
595 | "identifier": "ar.khalidalmohanna",
596 | "language": "ar",
597 | "name": "Khalid Al-Moh'n'na",
598 | "englishName": "Khalid Al-Moh'n'na",
599 | "format": "audio",
600 | "type": "surahbysurah"
601 | },
602 | {
603 | "identifier": "ar.khalifaaltunaiji",
604 | "language": "ar",
605 | "name": "Khalifah At-Tonaeijy",
606 | "englishName": "Khalifah At-Tonaeijy",
607 | "format": "audio",
608 | "type": "surahbysurah"
609 | },
610 | {
611 | "identifier": "ar.laayounelkouchi",
612 | "language": "ar",
613 | "name": "Laayoun El Kouchi",
614 | "englishName": "Laayoun El Kouchi",
615 | "format": "audio",
616 | "type": "surahbysurah"
617 | },
618 | {
619 | "identifier": "ar.lesaintcorantraduitenfrancais",
620 | "language": "ar",
621 | "name": "Le Saint Coran Traduit En Francais",
622 | "englishName": "Le Saint Coran Traduit En Francais",
623 | "format": "audio",
624 | "type": "surahbysurah"
625 | },
626 | {
627 | "identifier": "ar.mahershakhashiro",
628 | "language": "ar",
629 | "name": "Maher Shakhashero",
630 | "englishName": "Maher Shakhashero",
631 | "format": "audio",
632 | "type": "surahbysurah"
633 | },
634 | {
635 | "identifier": "ar.mahmoodalrifai",
636 | "language": "ar",
637 | "name": "Mahmod Alrifai",
638 | "englishName": "Mahmod Alrifai",
639 | "format": "audio",
640 | "type": "surahbysurah"
641 | },
642 | {
643 | "identifier": "ar.mahmoudalialbanna",
644 | "language": "ar",
645 | "name": "Mahmud Ali Al Banna",
646 | "englishName": "Mahmud Ali Al Banna",
647 | "format": "audio",
648 | "type": "surahbysurah"
649 | },
650 | {
651 | "identifier": "ar.mahmoudelsheimy",
652 | "language": "ar",
653 | "name": "Mahmoud El Sheimy",
654 | "englishName": "Mahmoud El Sheimy",
655 | "format": "audio",
656 | "type": "surahbysurah"
657 | },
658 | {
659 | "identifier": "ar.mahmoudsaaddarouich",
660 | "language": "ar",
661 | "name": "Mahmoud Saad Darouich",
662 | "englishName": "Mahmoud Saad Darouich",
663 | "format": "audio",
664 | "type": "surahbysurah"
665 | },
666 | {
667 | "identifier": "ar.mahmoudsayedeltayeb",
668 | "language": "ar",
669 | "name": "Mahmoud Sayed Eltayeb",
670 | "englishName": "Mahmoud Sayed Eltayeb",
671 | "format": "audio",
672 | "type": "surahbysurah"
673 | },
674 | {
675 | "identifier": "ar.misharyrashidalafasy",
676 | "language": "ar",
677 | "name": "Mishary Rashid Alafasy",
678 | "englishName": "Mishary Rashid Alafasy",
679 | "format": "audio",
680 | "type": "surahbysurah"
681 | },
682 | {
683 | "identifier": "ar.moeedhalharthi",
684 | "language": "ar",
685 | "name": "Moeedh Al-Harthi",
686 | "englishName": "Moeedh Al-Harthi",
687 | "format": "audio",
688 | "type": "surahbysurah"
689 | },
690 | {
691 | "identifier": "ar.mohamedabdelaziz",
692 | "language": "ar",
693 | "name": "Mohamed Abdelaziz",
694 | "englishName": "Mohamed Abdelaziz",
695 | "format": "audio",
696 | "type": "surahbysurah"
697 | },
698 | {
699 | "identifier": "ar.mohamedabdelhakimsaadalabdullah",
700 | "language": "ar",
701 | "name": "Mohamed Abdel Hakim Saad Al Abdullah",
702 | "englishName": "Mohamed Abdel Hakim Saad Al Abdullah",
703 | "format": "audio",
704 | "type": "surahbysurah"
705 | },
706 | {
707 | "identifier": "ar.mohamedaljaberyalheyani",
708 | "language": "ar",
709 | "name": "Mohamed Aljabery Al Heyani",
710 | "englishName": "Mohamed Aljabery Al Heyani",
711 | "format": "audio",
712 | "type": "surahbysurah"
713 | },
714 | {
715 | "identifier": "ar.mohamedalmohisni",
716 | "language": "ar",
717 | "name": "Mohamed Al Mohisni",
718 | "englishName": "Mohamed Al Mohisni",
719 | "format": "audio",
720 | "type": "surahbysurah"
721 | },
722 | {
723 | "identifier": "ar.mohamedelkantaoui",
724 | "language": "ar",
725 | "name": "Mohamed El Kantaoui",
726 | "englishName": "Mohamed El Kantaoui",
727 | "format": "audio",
728 | "type": "surahbysurah"
729 | },
730 | {
731 | "identifier": "ar.mohamedhassan",
732 | "language": "ar",
733 | "name": "Muhammad Hassan",
734 | "englishName": "Muhammad Hassan",
735 | "format": "audio",
736 | "type": "surahbysurah"
737 | },
738 | {
739 | "identifier": "ar.mohamedmaabad",
740 | "language": "ar",
741 | "name": "Mohamed Maabad",
742 | "englishName": "Mohamed Maabad",
743 | "format": "audio",
744 | "type": "surahbysurah"
745 | },
746 | {
747 | "identifier": "ar.mohamedosmankhan",
748 | "language": "ar",
749 | "name": "Mohammed Osman Khan (from India)",
750 | "englishName": "Mohammed Osman Khan (from India)",
751 | "format": "audio",
752 | "type": "surahbysurah"
753 | },
754 | {
755 | "identifier": "ar.mohamedshaabanabuqarn",
756 | "language": "ar",
757 | "name": "Mohamed Shaaban Abu Qarn",
758 | "englishName": "Mohamed Shaaban Abu Qarn",
759 | "format": "audio",
760 | "type": "surahbysurah"
761 | },
762 | {
763 | "identifier": "ar.mohamedtablawi",
764 | "language": "ar",
765 | "name": "Mohamed Al-Tablawi",
766 | "englishName": "Mohamed Al-Tablawi",
767 | "format": "audio",
768 | "type": "surahbysurah"
769 | },
770 | {
771 | "identifier": "ar.mohammadismaeelalmuqaddim",
772 | "language": "ar",
773 | "name": "Mohammad Ismaeel Al-Muqaddim",
774 | "englishName": "Mohammad Ismaeel Al-Muqaddim",
775 | "format": "audio",
776 | "type": "surahbysurah"
777 | },
778 | {
779 | "identifier": "ar.mohammadrachadalshareef",
780 | "language": "ar",
781 | "name": "Mohammad Rachad Al Shareef",
782 | "englishName": "Mohammad Rachad Al Shareef",
783 | "format": "audio",
784 | "type": "surahbysurah"
785 | },
786 | {
787 | "identifier": "ar.mohammedbinsalehabuzaid",
788 | "language": "ar",
789 | "name": "Mohammed Bin Saleh Abu Zaid",
790 | "englishName": "Mohammed Bin Saleh Abu Zaid",
791 | "format": "audio",
792 | "type": "surahbysurah"
793 | },
794 | {
795 | "identifier": "ar.muftahalsaltany",
796 | "language": "ar",
797 | "name": "Moftah AlSultany",
798 | "englishName": "Moftah AlSultany",
799 | "format": "audio",
800 | "type": "surahbysurah"
801 | },
802 | {
803 | "identifier": "ar.muhammadabdulkareem",
804 | "language": "ar",
805 | "name": "Muhammad AbdulKareem",
806 | "englishName": "Muhammad AbdulKareem",
807 | "format": "audio",
808 | "type": "surahbysurah"
809 | },
810 | {
811 | "identifier": "ar.muhammadalaalimaldokali",
812 | "language": "ar",
813 | "name": "Muhammad Al Aalim Al Dokali",
814 | "englishName": "Muhammad Al Aalim Al Dokali",
815 | "format": "audio",
816 | "type": "surahbysurah"
817 | },
818 | {
819 | "identifier": "ar.muhammadalluhaidan",
820 | "language": "ar",
821 | "name": "Mohammad Al-Haid'an",
822 | "englishName": "Mohammad Al-Haid'an",
823 | "format": "audio",
824 | "type": "surahbysurah"
825 | },
826 | {
827 | "identifier": "ar.muhammadalmehysni",
828 | "language": "ar",
829 | "name": "Muhammad al-Muhaisny",
830 | "englishName": "Muhammad al-Muhaisny",
831 | "format": "audio",
832 | "type": "surahbysurah"
833 | },
834 | {
835 | "identifier": "ar.muhammadalsubayyil",
836 | "language": "ar",
837 | "name": "Muhammad Subbayil",
838 | "englishName": "Muhammad Subbayil",
839 | "format": "audio",
840 | "type": "surahbysurah"
841 | },
842 | {
843 | "identifier": "ar.muhammadanwarshahat",
844 | "language": "ar",
845 | "name": "Muhammad Anwar Shahat",
846 | "englishName": "Muhammad Anwar Shahat",
847 | "format": "audio",
848 | "type": "surahbysurah"
849 | },
850 | {
851 | "identifier": "ar.muhammadayyub",
852 | "language": "ar",
853 | "name": "Mohammad Ayyub",
854 | "englishName": "Mohammad Ayyub",
855 | "format": "audio",
856 | "type": "surahbysurah"
857 | },
858 | {
859 | "identifier": "ar.muhammadsalehalimshah",
860 | "language": "ar",
861 | "name": "Mohammad Saleh Shah",
862 | "englishName": "Mohammad Saleh Shah",
863 | "format": "audio",
864 | "type": "surahbysurah"
865 | },
866 | {
867 | "identifier": "ar.muhammadsiddiqalminshawimujawwad",
868 | "language": "ar",
869 | "name": "Muhammad Siddeeq al-Minshawi [Mujawwad]",
870 | "englishName": "Muhammad Siddeeq al-Minshawi [Mujawwad]",
871 | "format": "audio",
872 | "type": "surahbysurah"
873 | },
874 | {
875 | "identifier": "ar.muhammadsulaimanpatel",
876 | "language": "ar",
877 | "name": "Muhammad Sulaiman Patel",
878 | "englishName": "Muhammad Sulaiman Patel",
879 | "format": "audio",
880 | "type": "surahbysurah"
881 | },
882 | {
883 | "identifier": "ar.musabilal",
884 | "language": "ar",
885 | "name": "Musa Bilal",
886 | "englishName": "Musa Bilal",
887 | "format": "audio",
888 | "type": "surahbysurah"
889 | },
890 | {
891 | "identifier": "ar.mustafaallahouni",
892 | "language": "ar",
893 | "name": "Mustafa Al-Lahoni",
894 | "englishName": "Mustafa Al-Lahoni",
895 | "format": "audio",
896 | "type": "surahbysurah"
897 | },
898 | {
899 | "identifier": "ar.mustafaismail",
900 | "language": "ar",
901 | "name": "Mostafa Ismaeel",
902 | "englishName": "Mostafa Ismaeel",
903 | "format": "audio",
904 | "type": "surahbysurah"
905 | },
906 | {
907 | "identifier": "ar.mustafaraadalazzawi",
908 | "language": "ar",
909 | "name": "Mustafa Ra'ad Al-Azawi",
910 | "englishName": "Mustafa Ra'ad Al-Azawi",
911 | "format": "audio",
912 | "type": "surahbysurah"
913 | },
914 | {
915 | "identifier": "ar.mustaphagharbi",
916 | "language": "ar",
917 | "name": "Mustapha Gharbi",
918 | "englishName": "Mustapha Gharbi",
919 | "format": "audio",
920 | "type": "surahbysurah"
921 | },
922 | {
923 | "identifier": "ar.nabilarrifai",
924 | "language": "ar",
925 | "name": "Nabil Ar-Rifa'i",
926 | "englishName": "Nabil Ar-Rifa'i",
927 | "format": "audio",
928 | "type": "surahbysurah"
929 | },
930 | {
931 | "identifier": "ar.nasseralqatami",
932 | "language": "ar",
933 | "name": "Nasser Alqatami",
934 | "englishName": "Nasser Alqatami",
935 | "format": "audio",
936 | "type": "surahbysurah"
937 | },
938 | {
939 | "identifier": "ar.neamahalhassan",
940 | "language": "ar",
941 | "name": "N'amah Alhassan",
942 | "englishName": "N'amah Alhassan",
943 | "format": "audio",
944 | "type": "surahbysurah"
945 | },
946 | {
947 | "identifier": "ar.obeikan",
948 | "language": "ar",
949 | "name": "Abdul Mohsen Al Obeikan",
950 | "englishName": "Abdul Mohsen Al Obeikan",
951 | "format": "audio",
952 | "type": "surahbysurah"
953 | },
954 | {
955 | "identifier": "ar.oimaoqataris",
956 | "language": "ar",
957 | "name": "Oimao Qataris",
958 | "englishName": "Oimao Qataris",
959 | "format": "audio",
960 | "type": "surahbysurah"
961 | },
962 | {
963 | "identifier": "ar.omaralkazabri",
964 | "language": "ar",
965 | "name": "Omar Al Kazabri",
966 | "englishName": "Omar Al Kazabri",
967 | "format": "audio",
968 | "type": "surahbysurah"
969 | },
970 | {
971 | "identifier": "ar.osamabinalialghanim",
972 | "language": "ar",
973 | "name": "Osama Bin Ali Al Ghanim",
974 | "englishName": "Osama Bin Ali Al Ghanim",
975 | "format": "audio",
976 | "type": "surahbysurah"
977 | },
978 | {
979 | "identifier": "ar.rachidbelalia",
980 | "language": "ar",
981 | "name": "Rachid Belalia",
982 | "englishName": "Rachid Belalia",
983 | "format": "audio",
984 | "type": "surahbysurah"
985 | },
986 | {
987 | "identifier": "ar.saberabdulhakam",
988 | "language": "ar",
989 | "name": "Saber Abdul-hakam",
990 | "englishName": "Saber Abdul-hakam",
991 | "format": "audio",
992 | "type": "surahbysurah"
993 | },
994 | {
995 | "identifier": "ar.sadaqatali",
996 | "language": "ar",
997 | "name": "Sadaqat Ali",
998 | "englishName": "Sadaqat Ali",
999 | "format": "audio",
1000 | "type": "surahbysurah"
1001 | },
1002 | {
1003 | "identifier": "ar.sahlyasin",
1004 | "language": "ar",
1005 | "name": "Sahl Yaaseen",
1006 | "englishName": "Sahl Yaaseen",
1007 | "format": "audio",
1008 | "type": "surahbysurah"
1009 | },
1010 | {
1011 | "identifier": "ar.saidalshaalan",
1012 | "language": "ar",
1013 | "name": "Said Al Shaalan",
1014 | "englishName": "Said Al Shaalan",
1015 | "format": "audio",
1016 | "type": "surahbysurah"
1017 | },
1018 | {
1019 | "identifier": "ar.salahalbudair",
1020 | "language": "ar",
1021 | "name": "Salah Al-Budair",
1022 | "englishName": "Salah Al-Budair",
1023 | "format": "audio",
1024 | "type": "surahbysurah"
1025 | },
1026 | {
1027 | "identifier": "ar.salahalhashem",
1028 | "language": "ar",
1029 | "name": "Salah Alhashim",
1030 | "englishName": "Salah Alhashim",
1031 | "format": "audio",
1032 | "type": "surahbysurah"
1033 | },
1034 | {
1035 | "identifier": "ar.salahbaothman",
1036 | "language": "ar",
1037 | "name": "Salah Baothman",
1038 | "englishName": "Salah Baothman",
1039 | "format": "audio",
1040 | "type": "surahbysurah"
1041 | },
1042 | {
1043 | "identifier": "ar.samirbelaachya",
1044 | "language": "ar",
1045 | "name": "Samir Belaachya",
1046 | "englishName": "Samir Belaachya",
1047 | "format": "audio",
1048 | "type": "surahbysurah"
1049 | },
1050 | {
1051 | "identifier": "ar.saudalshuraim",
1052 | "language": "ar",
1053 | "name": "Sa'ud al-Shuraym",
1054 | "englishName": "Sa'ud al-Shuraym",
1055 | "format": "audio",
1056 | "type": "surahbysurah"
1057 | },
1058 | {
1059 | "identifier": "ar.sayedramadan",
1060 | "language": "ar",
1061 | "name": "Sheikh Syed Ramadan",
1062 | "englishName": "Sheikh Syed Ramadan",
1063 | "format": "audio",
1064 | "type": "surahbysurah"
1065 | },
1066 | {
1067 | "identifier": "ar.shahriarparhizgar",
1068 | "language": "ar",
1069 | "name": "Shahriar Parhizgar",
1070 | "englishName": "Shahriar Parhizgar",
1071 | "format": "audio",
1072 | "type": "surahbysurah"
1073 | },
1074 | {
1075 | "identifier": "ar.sudaisshuraymnaeemsultan",
1076 | "language": "ar",
1077 | "name": "Shaykh Sudais and Shaykh Shuraim with Naeem Sultan [Pickthall]",
1078 | "englishName": "Shaykh Sudais and Shaykh Shuraim with Naeem Sultan [Pickthall]",
1079 | "format": "audio",
1080 | "type": "surahbysurah"
1081 | },
1082 | {
1083 | "identifier": "ar.tamerislam",
1084 | "language": "ar",
1085 | "name": "Tamer Islam",
1086 | "englishName": "Tamer Islam",
1087 | "format": "audio",
1088 | "type": "surahbysurah"
1089 | },
1090 | {
1091 | "identifier": "ar.tareqabdulganidaawob",
1092 | "language": "ar",
1093 | "name": "Tareq Daawob",
1094 | "englishName": "Tareq Daawob",
1095 | "format": "audio",
1096 | "type": "surahbysurah"
1097 | },
1098 | {
1099 | "identifier": "ar.tawfeeqassayegh",
1100 | "language": "ar",
1101 | "name": "Tawfeeq As-Sayegh",
1102 | "englishName": "Tawfeeq As-Sayegh",
1103 | "format": "audio",
1104 | "type": "surahbysurah"
1105 | },
1106 | {
1107 | "identifier": "ar.turkiebeidalmarri",
1108 | "language": "ar",
1109 | "name": "Turki Ebeid Al Marri",
1110 | "englishName": "Turki Ebeid Al Marri",
1111 | "format": "audio",
1112 | "type": "surahbysurah"
1113 | },
1114 | {
1115 | "identifier": "ar.waeldesouky",
1116 | "language": "ar",
1117 | "name": "Wael Desouky",
1118 | "englishName": "Wael Desouky",
1119 | "format": "audio",
1120 | "type": "surahbysurah"
1121 | },
1122 | {
1123 | "identifier": "ar.waelradwanqureshi",
1124 | "language": "ar",
1125 | "name": "Wael Radwan Qureshi",
1126 | "englishName": "Wael Radwan Qureshi",
1127 | "format": "audio",
1128 | "type": "surahbysurah"
1129 | },
1130 | {
1131 | "identifier": "ar.waleedidreesalmaneese",
1132 | "language": "ar",
1133 | "name": "Waleed Idrees Al Maneese",
1134 | "englishName": "Waleed Idrees Al Maneese",
1135 | "format": "audio",
1136 | "type": "surahbysurah"
1137 | },
1138 | {
1139 | "identifier": "ar.waleednaehi",
1140 | "language": "ar",
1141 | "name": "Waleed AlNa'ehi",
1142 | "englishName": "Waleed AlNa'ehi",
1143 | "format": "audio",
1144 | "type": "surahbysurah"
1145 | },
1146 | {
1147 | "identifier": "ar.waleedsamiraliabdulmajidsorour",
1148 | "language": "ar",
1149 | "name": "Waleed Samir Ali Abdul Majid Sorour",
1150 | "englishName": "Waleed Samir Ali Abdul Majid Sorour",
1151 | "format": "audio",
1152 | "type": "surahbysurah"
1153 | },
1154 | {
1155 | "identifier": "ar.walidalshatti",
1156 | "language": "ar",
1157 | "name": "Walid Al Shatti",
1158 | "englishName": "Walid Al Shatti",
1159 | "format": "audio",
1160 | "type": "surahbysurah"
1161 | },
1162 | {
1163 | "identifier": "ar.walidfathibashta",
1164 | "language": "ar",
1165 | "name": "Walid Fathi Bashta",
1166 | "englishName": "Walid Fathi Bashta",
1167 | "format": "audio",
1168 | "type": "surahbysurah"
1169 | },
1170 | {
1171 | "identifier": "ar.yahyahawwa",
1172 | "language": "ar",
1173 | "name": "Yahya Hawwa",
1174 | "englishName": "Yahya Hawwa",
1175 | "format": "audio",
1176 | "type": "surahbysurah"
1177 | },
1178 | {
1179 | "identifier": "ar.yassenaljazairi",
1180 | "language": "ar",
1181 | "name": "Yassen Al Jazairi",
1182 | "englishName": "Yassen Al Jazairi",
1183 | "format": "audio",
1184 | "type": "surahbysurah"
1185 | },
1186 | {
1187 | "identifier": "ar.yasseraldossari",
1188 | "language": "ar",
1189 | "name": "Yasser Al_Dosari",
1190 | "englishName": "Yasser Al_Dosari",
1191 | "format": "audio",
1192 | "type": "surahbysurah"
1193 | },
1194 | {
1195 | "identifier": "ar.yasseralmazroyee",
1196 | "language": "ar",
1197 | "name": "Yasser Al-Mazroey",
1198 | "englishName": "Yasser Al-Mazroey",
1199 | "format": "audio",
1200 | "type": "surahbysurah"
1201 | },
1202 | {
1203 | "identifier": "ar.yasserqureshi",
1204 | "language": "ar",
1205 | "name": "Yasser AlKurashy",
1206 | "englishName": "Yasser AlKurashy",
1207 | "format": "audio",
1208 | "type": "surahbysurah"
1209 | },
1210 | {
1211 | "identifier": "ar.yassersalama",
1212 | "language": "ar",
1213 | "name": "Yasser Salama",
1214 | "englishName": "Yasser Salama",
1215 | "format": "audio",
1216 | "type": "surahbysurah"
1217 | },
1218 | {
1219 | "identifier": "ar.yassersarhaneldeeb",
1220 | "language": "ar",
1221 | "name": "Yasser Sarhan Eldeeb",
1222 | "englishName": "Yasser Sarhan Eldeeb",
1223 | "format": "audio",
1224 | "type": "surahbysurah"
1225 | },
1226 | {
1227 | "identifier": "ar.yousufalshoaey",
1228 | "language": "ar",
1229 | "name": "Yousef Al-Shoowayie'e",
1230 | "englishName": "Yousef Al-Shoowayie'e",
1231 | "format": "audio",
1232 | "type": "surahbysurah"
1233 | },
1234 | {
1235 | "identifier": "ar.yousufbinnoahahmad",
1236 | "language": "ar",
1237 | "name": "Yusuf Bin Noah Ahmed",
1238 | "englishName": "Yusuf Bin Noah Ahmed",
1239 | "format": "audio",
1240 | "type": "surahbysurah"
1241 | },
1242 | {
1243 | "identifier": "en.misharyrashidalafasyenglishtranslationsaheehibrahimwalk",
1244 | "language": "ar",
1245 | "name": "Mishaari Raashid with Ibrahim Walk [Saheeh Intl]",
1246 | "englishName": "Mishaari Raashid with Ibrahim Walk [Saheeh Intl]",
1247 | "format": "audio",
1248 | "type": "surahbysurah"
1249 | },
1250 | {
1251 | "identifier": "en.muhammadayyubenglishtranslationmuhsinkhanmikaalwaters",
1252 | "language": "ar",
1253 | "name": "Muhammad Ayoob with Mikaal Waters [Muhsin Khan]",
1254 | "englishName": "Muhammad Ayoob with Mikaal Waters [Muhsin Khan]",
1255 | "format": "audio",
1256 | "type": "surahbysurah"
1257 | },
1258 | {
1259 | "identifier": "en.sudaisandshuraymenglishtranslationpickthallaslamathar",
1260 | "language": "ar",
1261 | "name": "Sodais and Shuraim with Aslam Athar [Pickthall]",
1262 | "englishName": "Sodais and Shuraim with Aslam Athar [Pickthall]",
1263 | "format": "audio",
1264 | "type": "surahbysurah"
1265 | }
1266 | ]
1267 |
--------------------------------------------------------------------------------
/src/libs/edition.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 200,
3 | "status": "OK",
4 | "data": [
5 | {
6 | "identifier": "ar.muyassar",
7 | "language": "ar",
8 | "name": "\u062a\u0641\u0633\u064a\u0631 \u0627\u0644\u0645\u06cc\u0633\u0631",
9 | "englishName": "King Fahad Quran Complex",
10 | "format": "text",
11 | "type": "tafsir",
12 | "direction": "rtl"
13 | },
14 | {
15 | "identifier": "az.mammadaliyev",
16 | "language": "az",
17 | "name": "M\u0259mm\u0259d\u0259liyev & B\u00fcnyadov",
18 | "englishName": "Vasim Mammadaliyev and Ziya Bunyadov",
19 | "format": "text",
20 | "type": "translation",
21 | "direction": "ltr"
22 | },
23 | {
24 | "identifier": "az.musayev",
25 | "language": "az",
26 | "name": "Musayev",
27 | "englishName": "Alikhan Musayev",
28 | "format": "text",
29 | "type": "translation",
30 | "direction": "ltr"
31 | },
32 | {
33 | "identifier": "bn.bengali",
34 | "language": "bn",
35 | "name": "\u09ae\u09c1\u09b9\u09bf\u0989\u09a6\u09cd\u09a6\u09c0\u09a8 \u0996\u09be\u09a8",
36 | "englishName": "Muhiuddin Khan",
37 | "format": "text",
38 | "type": "translation",
39 | "direction": "ltr"
40 | },
41 | {
42 | "identifier": "cs.hrbek",
43 | "language": "cs",
44 | "name": "Hrbek",
45 | "englishName": "Preklad I. Hrbek",
46 | "format": "text",
47 | "type": "translation",
48 | "direction": "ltr"
49 | },
50 | {
51 | "identifier": "cs.nykl",
52 | "language": "cs",
53 | "name": "Nykl",
54 | "englishName": "A. R. Nykl",
55 | "format": "text",
56 | "type": "translation",
57 | "direction": "ltr"
58 | },
59 | {
60 | "identifier": "de.aburida",
61 | "language": "de",
62 | "name": "Abu Rida",
63 | "englishName": "Abu Rida Muhammad ibn Ahmad ibn Rassoul",
64 | "format": "text",
65 | "type": "translation",
66 | "direction": "ltr"
67 | },
68 | {
69 | "identifier": "de.bubenheim",
70 | "language": "de",
71 | "name": "Bubenheim & Elyas",
72 | "englishName": "A. S. F. Bubenheim and N. Elyas",
73 | "format": "text",
74 | "type": "translation",
75 | "direction": "ltr"
76 | },
77 | {
78 | "identifier": "de.khoury",
79 | "language": "de",
80 | "name": "Khoury",
81 | "englishName": "Adel Theodor Khoury",
82 | "format": "text",
83 | "type": "translation",
84 | "direction": "ltr"
85 | },
86 | {
87 | "identifier": "de.zaidan",
88 | "language": "de",
89 | "name": "Zaidan",
90 | "englishName": "Amir Zaidan",
91 | "format": "text",
92 | "type": "translation",
93 | "direction": "ltr"
94 | },
95 | {
96 | "identifier": "dv.divehi",
97 | "language": "dv",
98 | "name": "\u078b\u07a8\u0788\u07ac\u0780\u07a8",
99 | "englishName": "Office of the President of Maldives",
100 | "format": "text",
101 | "type": "translation",
102 | "direction": "rtl"
103 | },
104 | {
105 | "identifier": "en.ahmedali",
106 | "language": "en",
107 | "name": "Ahmed Ali",
108 | "englishName": "Ahmed Ali",
109 | "format": "text",
110 | "type": "translation",
111 | "direction": "ltr"
112 | },
113 | {
114 | "identifier": "en.ahmedraza",
115 | "language": "en",
116 | "name": "Ahmed Raza Khan",
117 | "englishName": "Ahmed Raza Khan",
118 | "format": "text",
119 | "type": "translation",
120 | "direction": "ltr"
121 | },
122 | {
123 | "identifier": "en.arberry",
124 | "language": "en",
125 | "name": "Arberry",
126 | "englishName": "A. J. Arberry",
127 | "format": "text",
128 | "type": "translation",
129 | "direction": "ltr"
130 | },
131 | {
132 | "identifier": "en.asad",
133 | "language": "en",
134 | "name": "Asad",
135 | "englishName": "Muhammad Asad",
136 | "format": "text",
137 | "type": "translation",
138 | "direction": "ltr"
139 | },
140 | {
141 | "identifier": "en.daryabadi",
142 | "language": "en",
143 | "name": "Daryabadi",
144 | "englishName": "Abdul Majid Daryabadi",
145 | "format": "text",
146 | "type": "translation",
147 | "direction": "ltr"
148 | },
149 | {
150 | "identifier": "en.hilali",
151 | "language": "en",
152 | "name": "Hilali & Khan",
153 | "englishName": "Muhammad Taqi-ud-Din al-Hilali and Muhammad Muhsin Khan",
154 | "format": "text",
155 | "type": "translation",
156 | "direction": "ltr"
157 | },
158 | {
159 | "identifier": "en.pickthall",
160 | "language": "en",
161 | "name": "Pickthall",
162 | "englishName": "Mohammed Marmaduke William Pickthall",
163 | "format": "text",
164 | "type": "translation",
165 | "direction": "ltr"
166 | },
167 | {
168 | "identifier": "en.qaribullah",
169 | "language": "en",
170 | "name": "Qaribullah & Darwish",
171 | "englishName": "Hasan al-Fatih Qaribullah and Ahmad Darwish",
172 | "format": "text",
173 | "type": "translation",
174 | "direction": "ltr"
175 | },
176 | {
177 | "identifier": "en.sahih",
178 | "language": "en",
179 | "name": "Saheeh International",
180 | "englishName": "Saheeh International",
181 | "format": "text",
182 | "type": "translation",
183 | "direction": "ltr"
184 | },
185 | {
186 | "identifier": "en.sarwar",
187 | "language": "en",
188 | "name": "Sarwar",
189 | "englishName": "Muhammad Sarwar",
190 | "format": "text",
191 | "type": "translation",
192 | "direction": "ltr"
193 | },
194 | {
195 | "identifier": "en.yusufali",
196 | "language": "en",
197 | "name": "Yusuf Ali",
198 | "englishName": "Abdullah Yusuf Ali",
199 | "format": "text",
200 | "type": "translation",
201 | "direction": "ltr"
202 | },
203 | {
204 | "identifier": "fa.ayati",
205 | "language": "fa",
206 | "name": "\u0622\u06cc\u062a\u06cc",
207 | "englishName": "AbdolMohammad Ayati",
208 | "format": "text",
209 | "type": "translation",
210 | "direction": "rtl"
211 | },
212 | {
213 | "identifier": "fa.fooladvand",
214 | "language": "fa",
215 | "name": "\u0641\u0648\u0644\u0627\u062f\u0648\u0646\u062f",
216 | "englishName": "Mohammad Mahdi Fooladvand",
217 | "format": "text",
218 | "type": "translation",
219 | "direction": "rtl"
220 | },
221 | {
222 | "identifier": "fa.ghomshei",
223 | "language": "fa",
224 | "name": "\u0627\u0644\u0647\u06cc \u0642\u0645\u0634\u0647\u200c\u0627\u06cc",
225 | "englishName": "Mahdi Elahi Ghomshei",
226 | "format": "text",
227 | "type": "translation",
228 | "direction": "rtl"
229 | },
230 | {
231 | "identifier": "fa.makarem",
232 | "language": "fa",
233 | "name": "\u0645\u06a9\u0627\u0631\u0645 \u0634\u06cc\u0631\u0627\u0632\u06cc",
234 | "englishName": "Naser Makarem Shirazi",
235 | "format": "text",
236 | "type": "translation",
237 | "direction": "rtl"
238 | },
239 | {
240 | "identifier": "fr.hamidullah",
241 | "language": "fr",
242 | "name": "Hamidullah",
243 | "englishName": "Muhammad Hamidullah",
244 | "format": "text",
245 | "type": "translation",
246 | "direction": "ltr"
247 | },
248 | {
249 | "identifier": "ha.gumi",
250 | "language": "ha",
251 | "name": "Gumi",
252 | "englishName": "Abubakar Mahmoud Gumi",
253 | "format": "text",
254 | "type": "translation",
255 | "direction": "ltr"
256 | },
257 | {
258 | "identifier": "hi.hindi",
259 | "language": "hi",
260 | "name": "\u095e\u093e\u0930\u0942\u0958 \u0959\u093e\u0928 & \u0928\u0926\u0935\u0940",
261 | "englishName": "Suhel Farooq Khan and Saifur Rahman Nadwi",
262 | "format": "text",
263 | "type": "translation",
264 | "direction": "ltr"
265 | },
266 | {
267 | "identifier": "id.indonesian",
268 | "language": "id",
269 | "name": "Bahasa Indonesia",
270 | "englishName": "Unknown",
271 | "format": "text",
272 | "type": "translation",
273 | "direction": "ltr"
274 | },
275 | {
276 | "identifier": "it.piccardo",
277 | "language": "it",
278 | "name": "Piccardo",
279 | "englishName": "Hamza Roberto Piccardo",
280 | "format": "text",
281 | "type": "translation",
282 | "direction": "ltr"
283 | },
284 | {
285 | "identifier": "ja.japanese",
286 | "language": "ja",
287 | "name": "Japanese",
288 | "englishName": "Unknown",
289 | "format": "text",
290 | "type": "translation",
291 | "direction": "ltr"
292 | },
293 | {
294 | "identifier": "ko.korean",
295 | "language": "ko",
296 | "name": "Korean",
297 | "englishName": "Unknown",
298 | "format": "text",
299 | "type": "translation",
300 | "direction": "ltr"
301 | },
302 | {
303 | "identifier": "ku.asan",
304 | "language": "ku",
305 | "name": "\u062a\u0647\u200c\u0641\u0633\u06cc\u0631\u06cc \u0626\u0627\u0633\u0627\u0646",
306 | "englishName": "Burhan Muhammad-Amin",
307 | "format": "text",
308 | "type": "translation",
309 | "direction": "ltr"
310 | },
311 | {
312 | "identifier": "ml.abdulhameed",
313 | "language": "ml",
314 | "name": "\u0d05\u0d2c\u0d4d\u0d26\u0d41\u0d32\u0d4d\u200d \u0d39\u0d2e\u0d40\u0d26\u0d4d & \u0d2a\u0d31\u0d2a\u0d4d\u0d2a\u0d42\u0d30\u0d4d\u200d",
315 | "englishName": "Cheriyamundam Abdul Hameed and Kunhi Mohammed Parappoor",
316 | "format": "text",
317 | "type": "translation",
318 | "direction": "ltr"
319 | },
320 | {
321 | "identifier": "nl.keyzer",
322 | "language": "nl",
323 | "name": "Keyzer",
324 | "englishName": "Salomo Keyzer",
325 | "format": "text",
326 | "type": "translation",
327 | "direction": "ltr"
328 | },
329 | {
330 | "identifier": "no.berg",
331 | "language": "no",
332 | "name": "Einar Berg",
333 | "englishName": "Einar Berg",
334 | "format": "text",
335 | "type": "translation",
336 | "direction": "ltr"
337 | },
338 | {
339 | "identifier": "pl.bielawskiego",
340 | "language": "pl",
341 | "name": "Bielawskiego",
342 | "englishName": "J\u00f3zefa Bielawskiego",
343 | "format": "text",
344 | "type": "translation",
345 | "direction": "ltr"
346 | },
347 | {
348 | "identifier": "pt.elhayek",
349 | "language": "pt",
350 | "name": "El-Hayek",
351 | "englishName": "Samir El-Hayek",
352 | "format": "text",
353 | "type": "translation",
354 | "direction": "ltr"
355 | },
356 | {
357 | "identifier": "ro.grigore",
358 | "language": "ro",
359 | "name": "Grigore",
360 | "englishName": "George Grigore",
361 | "format": "text",
362 | "type": "translation",
363 | "direction": "ltr"
364 | },
365 | {
366 | "identifier": "ru.kuliev",
367 | "language": "ru",
368 | "name": "\u041a\u0443\u043b\u0438\u0435\u0432",
369 | "englishName": "Elmir Kuliev",
370 | "format": "text",
371 | "type": "translation",
372 | "direction": "ltr"
373 | },
374 | {
375 | "identifier": "ru.osmanov",
376 | "language": "ru",
377 | "name": "\u041e\u0441\u043c\u0430\u043d\u043e\u0432",
378 | "englishName": "Magomed-Nuri Osmanovich Osmanov",
379 | "format": "text",
380 | "type": "translation",
381 | "direction": "ltr"
382 | },
383 | {
384 | "identifier": "ru.porokhova",
385 | "language": "ru",
386 | "name": "\u041f\u043e\u0440\u043e\u0445\u043e\u0432\u0430",
387 | "englishName": "V. Porokhova",
388 | "format": "text",
389 | "type": "translation",
390 | "direction": "ltr"
391 | },
392 | {
393 | "identifier": "sd.amroti",
394 | "language": "sd",
395 | "name": "\u0627\u0645\u0631\u0648\u067d\u064a",
396 | "englishName": "Taj Mehmood Amroti",
397 | "format": "text",
398 | "type": "translation",
399 | "direction": "rtl"
400 | },
401 | {
402 | "identifier": "so.abduh",
403 | "language": "so",
404 | "name": "Abduh",
405 | "englishName": "Mahmud Muhammad Abduh",
406 | "format": "text",
407 | "type": "translation",
408 | "direction": "ltr"
409 | },
410 | {
411 | "identifier": "sq.ahmeti",
412 | "language": "sq",
413 | "name": "Sherif Ahmeti",
414 | "englishName": "Sherif Ahmeti",
415 | "format": "text",
416 | "type": "translation",
417 | "direction": "ltr"
418 | },
419 | {
420 | "identifier": "sq.mehdiu",
421 | "language": "sq",
422 | "name": "Feti Mehdiu",
423 | "englishName": "Feti Mehdiu",
424 | "format": "text",
425 | "type": "translation",
426 | "direction": "ltr"
427 | },
428 | {
429 | "identifier": "sq.nahi",
430 | "language": "sq",
431 | "name": "Efendi Nahi",
432 | "englishName": "Hasan Efendi Nahi",
433 | "format": "text",
434 | "type": "translation",
435 | "direction": "ltr"
436 | },
437 | {
438 | "identifier": "sv.bernstrom",
439 | "language": "sv",
440 | "name": "Bernstr\u00f6m",
441 | "englishName": "Knut Bernstr\u00f6m",
442 | "format": "text",
443 | "type": "translation",
444 | "direction": "ltr"
445 | },
446 | {
447 | "identifier": "sw.barwani",
448 | "language": "sw",
449 | "name": "Al-Barwani",
450 | "englishName": "Ali Muhsin Al-Barwani",
451 | "format": "text",
452 | "type": "translation",
453 | "direction": "ltr"
454 | },
455 | {
456 | "identifier": "ta.tamil",
457 | "language": "ta",
458 | "name": "\u0b9c\u0bbe\u0ba9\u0bcd \u0b9f\u0bbf\u0bb0\u0bb8\u0bcd\u0b9f\u0bcd",
459 | "englishName": "Jan Turst Foundation",
460 | "format": "text",
461 | "type": "translation",
462 | "direction": "ltr"
463 | },
464 | {
465 | "identifier": "tg.ayati",
466 | "language": "tg",
467 | "name": "\u041e\u044f\u0442\u04e3",
468 | "englishName": "AbdolMohammad Ayati",
469 | "format": "text",
470 | "type": "translation",
471 | "direction": "ltr"
472 | },
473 | {
474 | "identifier": "th.thai",
475 | "language": "th",
476 | "name": "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22",
477 | "englishName": "King Fahad Quran Complex",
478 | "format": "text",
479 | "type": "translation",
480 | "direction": "ltr"
481 | },
482 | {
483 | "identifier": "tr.ates",
484 | "language": "tr",
485 | "name": "S\u00fcleyman Ate\u015f",
486 | "englishName": "Suleyman Ates",
487 | "format": "text",
488 | "type": "translation",
489 | "direction": "ltr"
490 | },
491 | {
492 | "identifier": "tr.bulac",
493 | "language": "tr",
494 | "name": "Al\u0130 Bula\u00e7",
495 | "englishName": "Al\u0130 Bula\u00e7",
496 | "format": "text",
497 | "type": "translation",
498 | "direction": "ltr"
499 | },
500 | {
501 | "identifier": "tr.diyanet",
502 | "language": "tr",
503 | "name": "Diyanet \u0130\u015fleri",
504 | "englishName": "Diyanet Isleri",
505 | "format": "text",
506 | "type": "translation",
507 | "direction": "ltr"
508 | },
509 | {
510 | "identifier": "tr.golpinarli",
511 | "language": "tr",
512 | "name": "Abdulbak\u00ee G\u00f6lp\u0131narl\u0131",
513 | "englishName": "Abdulbaki Golpinarli",
514 | "format": "text",
515 | "type": "translation",
516 | "direction": "ltr"
517 | },
518 | {
519 | "identifier": "tr.ozturk",
520 | "language": "tr",
521 | "name": "\u00d6zt\u00fcrk",
522 | "englishName": "Yasar Nuri Ozturk",
523 | "format": "text",
524 | "type": "translation",
525 | "direction": "ltr"
526 | },
527 | {
528 | "identifier": "tr.transliteration",
529 | "language": "tr",
530 | "name": "\u00c7eviriyaz\u0131",
531 | "englishName": "Muhammet Abay",
532 | "format": "text",
533 | "type": "transliteration",
534 | "direction": "ltr"
535 | },
536 | {
537 | "identifier": "tr.vakfi",
538 | "language": "tr",
539 | "name": "Diyanet Vakf\u0131",
540 | "englishName": "Diyanet Vakfi",
541 | "format": "text",
542 | "type": "translation",
543 | "direction": "ltr"
544 | },
545 | {
546 | "identifier": "tr.yazir",
547 | "language": "tr",
548 | "name": "Elmal\u0131l\u0131 Hamdi Yaz\u0131r",
549 | "englishName": "Elmalili Hamdi Yazir",
550 | "format": "text",
551 | "type": "translation",
552 | "direction": "ltr"
553 | },
554 | {
555 | "identifier": "tr.yildirim",
556 | "language": "tr",
557 | "name": "Suat Y\u0131ld\u0131r\u0131m",
558 | "englishName": "Suat Yildirim",
559 | "format": "text",
560 | "type": "translation",
561 | "direction": "ltr"
562 | },
563 | {
564 | "identifier": "tr.yuksel",
565 | "language": "tr",
566 | "name": "Edip Y\u00fcksel",
567 | "englishName": "Edip Y\u00fcksel",
568 | "format": "text",
569 | "type": "translation",
570 | "direction": "ltr"
571 | },
572 | {
573 | "identifier": "tt.nugman",
574 | "language": "tt",
575 | "name": "Yakub Ibn Nugman",
576 | "englishName": "Yakub Ibn Nugman",
577 | "format": "text",
578 | "type": "translation",
579 | "direction": "ltr"
580 | },
581 | {
582 | "identifier": "ug.saleh",
583 | "language": "ug",
584 | "name": "\u0645\u062d\u0645\u062f \u0635\u0627\u0644\u062d",
585 | "englishName": "Muhammad Saleh",
586 | "format": "text",
587 | "type": "translation",
588 | "direction": "rtl"
589 | },
590 | {
591 | "identifier": "ur.ahmedali",
592 | "language": "ur",
593 | "name": "\u0627\u062d\u0645\u062f \u0639\u0644\u06cc",
594 | "englishName": "Ahmed Ali",
595 | "format": "text",
596 | "type": "translation",
597 | "direction": "rtl"
598 | },
599 | {
600 | "identifier": "ur.jalandhry",
601 | "language": "ur",
602 | "name": "\u062c\u0627\u0644\u0646\u062f\u06c1\u0631\u06cc",
603 | "englishName": "Fateh Muhammad Jalandhry",
604 | "format": "text",
605 | "type": "translation",
606 | "direction": "rtl"
607 | },
608 | {
609 | "identifier": "ur.jawadi",
610 | "language": "ur",
611 | "name": "\u0639\u0644\u0627\u0645\u06c1 \u062c\u0648\u0627\u062f\u06cc",
612 | "englishName": "Syed Zeeshan Haider Jawadi",
613 | "format": "text",
614 | "type": "translation",
615 | "direction": "rtl"
616 | },
617 | {
618 | "identifier": "ur.kanzuliman",
619 | "language": "ur",
620 | "name": "\u0627\u062d\u0645\u062f \u0631\u0636\u0627 \u062e\u0627\u0646",
621 | "englishName": "Ahmed Raza Khan",
622 | "format": "text",
623 | "type": "translation",
624 | "direction": "rtl"
625 | },
626 | {
627 | "identifier": "ur.qadri",
628 | "language": "ur",
629 | "name": "\u0637\u0627\u06c1\u0631 \u0627\u0644\u0642\u0627\u062f\u0631\u06cc",
630 | "englishName": "Tahir ul Qadri",
631 | "format": "text",
632 | "type": "translation",
633 | "direction": "rtl"
634 | },
635 | {
636 | "identifier": "uz.sodik",
637 | "language": "uz",
638 | "name": "\u041c\u0443\u0445\u0430\u043c\u043c\u0430\u0434 \u0421\u043e\u0434\u0438\u043a",
639 | "englishName": "Muhammad Sodik Muhammad Yusuf",
640 | "format": "text",
641 | "type": "translation",
642 | "direction": "ltr"
643 | },
644 | {
645 | "identifier": "en.maududi",
646 | "language": "en",
647 | "name": "Maududi",
648 | "englishName": "Abul Ala Maududi",
649 | "format": "text",
650 | "type": "translation",
651 | "direction": "ltr"
652 | },
653 | {
654 | "identifier": "en.shakir",
655 | "language": "en",
656 | "name": "Shakir",
657 | "englishName": "Mohammad Habib Shakir",
658 | "format": "text",
659 | "type": "translation",
660 | "direction": "ltr"
661 | },
662 | {
663 | "identifier": "en.transliteration",
664 | "language": "en",
665 | "name": "Transliteration",
666 | "englishName": "English Transliteration",
667 | "format": "text",
668 | "type": "transliteration",
669 | "direction": "ltr"
670 | },
671 | {
672 | "identifier": "es.cortes",
673 | "language": "es",
674 | "name": "Cortes",
675 | "englishName": "Julio Cortes",
676 | "format": "text",
677 | "type": "translation",
678 | "direction": "ltr"
679 | },
680 | {
681 | "identifier": "fa.ansarian",
682 | "language": "fa",
683 | "name": "\u0627\u0646\u0635\u0627\u0631\u06cc\u0627\u0646",
684 | "englishName": "Hussain Ansarian",
685 | "format": "text",
686 | "type": "translation",
687 | "direction": "rtl"
688 | },
689 | {
690 | "identifier": "quran-simple",
691 | "language": "ar",
692 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0627\u0644\u0645\u0628\u0633\u0637 (\u062a\u0634\u0643\u064a\u0644 \u0628\u0633\u064a\u0637)",
693 | "englishName": "Simple",
694 | "format": "text",
695 | "type": "quran",
696 | "direction": "rtl"
697 | },
698 | {
699 | "identifier": "quran-simple-clean",
700 | "language": "ar",
701 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0627\u0644\u0645\u0628\u0633\u0637 (\u0628\u062f\u0648\u0646 \u062a\u0634\u0643\u064a\u0644)",
702 | "englishName": "Simple Clean",
703 | "format": "text",
704 | "type": "quran",
705 | "direction": "rtl"
706 | },
707 | {
708 | "identifier": "quran-simple-enhanced",
709 | "language": "ar",
710 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0627\u0644\u0645\u0628\u0633\u0637 (\u0628\u062f\u0648\u0646 \u062a\u0634\u0643\u064a\u0644)",
711 | "englishName": "Simple Enhanced",
712 | "format": "text",
713 | "type": "quran",
714 | "direction": "rtl"
715 | },
716 | {
717 | "identifier": "quran-simple-min",
718 | "language": "ar",
719 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0627\u0644\u0645\u0628\u0633\u0637 (\u0628\u062f\u0648\u0646 \u062a\u0634\u0643\u064a\u0644)",
720 | "englishName": "Simple Minimal",
721 | "format": "text",
722 | "type": "quran",
723 | "direction": "rtl"
724 | },
725 | {
726 | "identifier": "quran-uthmani-min",
727 | "language": "ar",
728 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0628\u0631\u0633\u0645 \u0627\u0644\u0639\u062b\u0645\u0627\u0646\u064a (\u062a\u0634\u0643\u064a\u0644 \u0628\u0633\u064a\u0637)",
729 | "englishName": "Uthmani Minimal",
730 | "format": "text",
731 | "type": "quran",
732 | "direction": "rtl"
733 | },
734 | {
735 | "identifier": "quran-uthmani",
736 | "language": "ar",
737 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0628\u0631\u0633\u0645 \u0627\u0644\u0639\u062b\u0645\u0627\u0646\u064a",
738 | "englishName": "Uthmani",
739 | "format": "text",
740 | "type": "quran",
741 | "direction": "rtl"
742 | },
743 | {
744 | "identifier": "bg.theophanov",
745 | "language": "bg",
746 | "name": "\u0422\u0435\u043e\u0444\u0430\u043d\u043e\u0432",
747 | "englishName": "Tzvetan Theophanov",
748 | "format": "text",
749 | "type": "translation",
750 | "direction": "ltr"
751 | },
752 | {
753 | "identifier": "bs.mlivo",
754 | "language": "bs",
755 | "name": "Mlivo",
756 | "englishName": "Mustafa Mlivo",
757 | "format": "text",
758 | "type": "translation",
759 | "direction": "ltr"
760 | },
761 | {
762 | "identifier": "fa.bahrampour",
763 | "language": "fa",
764 | "name": "\u0628\u0647\u0631\u0627\u0645 \u067e\u0648\u0631",
765 | "englishName": "Abolfazl Bahrampour",
766 | "format": "text",
767 | "type": "translation",
768 | "direction": "rtl"
769 | },
770 | {
771 | "identifier": "es.asad",
772 | "language": "es",
773 | "name": "Asad",
774 | "englishName": "Muhammad Asad - Abdurrasak P\u00e9rez",
775 | "format": "text",
776 | "type": "translation",
777 | "direction": "ltr"
778 | },
779 | {
780 | "identifier": "fa.khorramshahi",
781 | "language": "fa",
782 | "name": "\u062e\u0631\u0645\u0634\u0627\u0647\u06cc",
783 | "englishName": "Baha'oddin Khorramshahi",
784 | "format": "text",
785 | "type": "translation",
786 | "direction": "rtl"
787 | },
788 | {
789 | "identifier": "fa.mojtabavi",
790 | "language": "fa",
791 | "name": "\u0645\u062c\u062a\u0628\u0648\u06cc",
792 | "englishName": "Sayyed Jalaloddin Mojtabavi",
793 | "format": "text",
794 | "type": "translation",
795 | "direction": "rtl"
796 | },
797 | {
798 | "identifier": "hi.farooq",
799 | "language": "hi",
800 | "name": "\u095e\u093e\u0930\u0942\u0958 \u0959\u093e\u0928 & \u0905\u0939\u092e\u0926",
801 | "englishName": "Muhammad Farooq Khan and Muhammad Ahmed",
802 | "format": "text",
803 | "type": "translation",
804 | "direction": "ltr"
805 | },
806 | {
807 | "identifier": "id.muntakhab",
808 | "language": "id",
809 | "name": "Quraish Shihab",
810 | "englishName": "Muhammad Quraish Shihab et al.",
811 | "format": "text",
812 | "type": "translation",
813 | "direction": "ltr"
814 | },
815 | {
816 | "identifier": "ms.basmeih",
817 | "language": "ms",
818 | "name": "Basmeih",
819 | "englishName": "Abdullah Muhammad Basmeih",
820 | "format": "text",
821 | "type": "translation",
822 | "direction": "ltr"
823 | },
824 | {
825 | "identifier": "ru.abuadel",
826 | "language": "ru",
827 | "name": "\u0410\u0431\u0443 \u0410\u0434\u0435\u043b\u044c",
828 | "englishName": "Abu Adel",
829 | "format": "text",
830 | "type": "translation",
831 | "direction": "ltr"
832 | },
833 | {
834 | "identifier": "ru.krachkovsky",
835 | "language": "ru",
836 | "name": "\u041a\u0440\u0430\u0447\u043a\u043e\u0432\u0441\u043a\u0438\u0439",
837 | "englishName": "Ignaty Yulianovich Krachkovsky",
838 | "format": "text",
839 | "type": "translation",
840 | "direction": "ltr"
841 | },
842 | {
843 | "identifier": "ru.muntahab",
844 | "language": "ru",
845 | "name": "\u0410\u043b\u044c-\u041c\u0443\u043d\u0442\u0430\u0445\u0430\u0431",
846 | "englishName": "Ministry of Awqaf, Egypt",
847 | "format": "text",
848 | "type": "translation",
849 | "direction": "ltr"
850 | },
851 | {
852 | "identifier": "ru.sablukov",
853 | "language": "ru",
854 | "name": "\u0421\u0430\u0431\u043b\u0443\u043a\u043e\u0432",
855 | "englishName": "Gordy Semyonovich Sablukov",
856 | "format": "text",
857 | "type": "translation",
858 | "direction": "ltr"
859 | },
860 | {
861 | "identifier": "ur.junagarhi",
862 | "language": "ur",
863 | "name": "\u0645\u062d\u0645\u062f \u062c\u0648\u0646\u0627\u06af\u0691\u06be\u06cc",
864 | "englishName": "Muhammad Junagarhi",
865 | "format": "text",
866 | "type": "translation",
867 | "direction": "rtl"
868 | },
869 | {
870 | "identifier": "ur.maududi",
871 | "language": "ur",
872 | "name": "\u0627\u0628\u0648\u0627\u0644\u0627\u0639\u0644\u06cc \u0645\u0648\u062f\u0648\u062f\u06cc",
873 | "englishName": "Abul A'ala Maududi",
874 | "format": "text",
875 | "type": "translation",
876 | "direction": "rtl"
877 | },
878 | {
879 | "identifier": "zh.jian",
880 | "language": "zh",
881 | "name": "Ma Jian",
882 | "englishName": "Ma Jian",
883 | "format": "text",
884 | "type": "translation",
885 | "direction": "ltr"
886 | },
887 | {
888 | "identifier": "zh.majian",
889 | "language": "zh",
890 | "name": "Ma Jian (Traditional)",
891 | "englishName": "Ma Jian",
892 | "format": "text",
893 | "type": "translation",
894 | "direction": "ltr"
895 | },
896 | {
897 | "identifier": "fa.khorramdel",
898 | "language": "fa",
899 | "name": "\u062e\u0631\u0645\u062f\u0644",
900 | "englishName": "Mostafa Khorramdel",
901 | "format": "text",
902 | "type": "translation",
903 | "direction": "rtl"
904 | },
905 | {
906 | "identifier": "fa.moezzi",
907 | "language": "fa",
908 | "name": "\u0645\u0639\u0632\u06cc",
909 | "englishName": "Mohammad Kazem Moezzi",
910 | "format": "text",
911 | "type": "translation",
912 | "direction": "rtl"
913 | },
914 | {
915 | "identifier": "bs.korkut",
916 | "language": "bs",
917 | "name": "Korkut",
918 | "englishName": "Besim Korkut",
919 | "format": "text",
920 | "type": "translation",
921 | "direction": "ltr"
922 | },
923 | {
924 | "identifier": "ar.jalalayn",
925 | "language": "ar",
926 | "name": "\u062a\u0641\u0633\u064a\u0631 \u0627\u0644\u062c\u0644\u0627\u0644\u064a\u0646",
927 | "englishName": "Jalal ad-Din al-Mahalli and Jalal ad-Din as-Suyuti",
928 | "format": "text",
929 | "type": "tafsir",
930 | "direction": "rtl"
931 | },
932 | {
933 | "identifier": "quran-tajweed",
934 | "language": "ar",
935 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0627\u0644\u0645\u062c\u0648\u062f (\u0645\u0644\u0648\u0646)",
936 | "englishName": "Tajweed",
937 | "format": "text",
938 | "type": "quran",
939 | "direction": "rtl"
940 | },
941 | {
942 | "identifier": "quran-wordbyword",
943 | "language": "ar",
944 | "name": "\u0645\u0639\u0627\u0646\u064a \u0645\u0641\u0631\u062f\u0627\u062a \u0627\u0644\u0642\u0631\u0622\u0646",
945 | "englishName": "Word By Word",
946 | "format": "text",
947 | "type": "quran",
948 | "direction": "rtl"
949 | },
950 | {
951 | "identifier": "ar.abdulbasitmurattal",
952 | "language": "ar",
953 | "name": "\u0639\u0628\u062f \u0627\u0644\u0628\u0627\u0633\u0637 \u0639\u0628\u062f \u0627\u0644\u0635\u0645\u062f \u0627\u0644\u0645\u0631\u062a\u0644",
954 | "englishName": "Abdul Basit",
955 | "format": "audio",
956 | "type": "translation",
957 | "direction": null
958 | },
959 | {
960 | "identifier": "ar.abdullahbasfar",
961 | "language": "ar",
962 | "name": "\u0639\u0628\u062f \u0627\u0644\u0644\u0647 \u0628\u0635\u0641\u0631",
963 | "englishName": "Abdullah Basfar",
964 | "format": "audio",
965 | "type": "versebyverse",
966 | "direction": null
967 | },
968 | {
969 | "identifier": "ar.abdurrahmaansudais",
970 | "language": "ar",
971 | "name": "\u0639\u0628\u062f\u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0633\u062f\u064a\u0633",
972 | "englishName": "Abdurrahmaan As-Sudais",
973 | "format": "audio",
974 | "type": "versebyverse",
975 | "direction": null
976 | },
977 | {
978 | "identifier": "ar.abdulsamad",
979 | "language": "ar",
980 | "name": "\u0639\u0628\u062f\u0627\u0644\u0628\u0627\u0633\u0637 \u0639\u0628\u062f\u0627\u0644\u0635\u0645\u062f",
981 | "englishName": "Abdul Samad",
982 | "format": "audio",
983 | "type": "versebyverse",
984 | "direction": null
985 | },
986 | {
987 | "identifier": "ar.shaatree",
988 | "language": "ar",
989 | "name": "\u0623\u0628\u0648 \u0628\u0643\u0631 \u0627\u0644\u0634\u0627\u0637\u0631\u064a",
990 | "englishName": "Abu Bakr Ash-Shaatree",
991 | "format": "audio",
992 | "type": "versebyverse",
993 | "direction": null
994 | },
995 | {
996 | "identifier": "ar.ahmedajamy",
997 | "language": "ar",
998 | "name": "\u0623\u062d\u0645\u062f \u0628\u0646 \u0639\u0644\u064a \u0627\u0644\u0639\u062c\u0645\u064a",
999 | "englishName": "Ahmed ibn Ali al-Ajamy",
1000 | "format": "audio",
1001 | "type": "versebyverse",
1002 | "direction": null
1003 | },
1004 | {
1005 | "identifier": "ar.alafasy",
1006 | "language": "ar",
1007 | "name": "\u0645\u0634\u0627\u0631\u064a \u0627\u0644\u0639\u0641\u0627\u0633\u064a",
1008 | "englishName": "Alafasy",
1009 | "format": "audio",
1010 | "type": "versebyverse",
1011 | "direction": null
1012 | },
1013 | {
1014 | "identifier": "ar.hanirifai",
1015 | "language": "ar",
1016 | "name": "\u0647\u0627\u0646\u064a \u0627\u0644\u0631\u0641\u0627\u0639\u064a",
1017 | "englishName": "Hani Rifai",
1018 | "format": "audio",
1019 | "type": "versebyverse",
1020 | "direction": null
1021 | },
1022 | {
1023 | "identifier": "ar.husary",
1024 | "language": "ar",
1025 | "name": "\u0645\u062d\u0645\u0648\u062f \u062e\u0644\u064a\u0644 \u0627\u0644\u062d\u0635\u0631\u064a",
1026 | "englishName": "Husary",
1027 | "format": "audio",
1028 | "type": "versebyverse",
1029 | "direction": null
1030 | },
1031 | {
1032 | "identifier": "ar.husarymujawwad",
1033 | "language": "ar",
1034 | "name": "\u0645\u062d\u0645\u0648\u062f \u062e\u0644\u064a\u0644 \u0627\u0644\u062d\u0635\u0631\u064a (\u0627\u0644\u0645\u062c\u0648\u062f)",
1035 | "englishName": "Husary (Mujawwad)",
1036 | "format": "audio",
1037 | "type": "versebyverse",
1038 | "direction": null
1039 | },
1040 | {
1041 | "identifier": "ar.hudhaify",
1042 | "language": "ar",
1043 | "name": "\u0639\u0644\u064a \u0628\u0646 \u0639\u0628\u062f\u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u062d\u0630\u064a\u0641\u064a",
1044 | "englishName": "Hudhaify",
1045 | "format": "audio",
1046 | "type": "versebyverse",
1047 | "direction": null
1048 | },
1049 | {
1050 | "identifier": "ar.ibrahimakhbar",
1051 | "language": "ar",
1052 | "name": "\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u062e\u0636\u0631",
1053 | "englishName": "Ibrahim Akhdar",
1054 | "format": "audio",
1055 | "type": "versebyverse",
1056 | "direction": null
1057 | },
1058 | {
1059 | "identifier": "ar.mahermuaiqly",
1060 | "language": "ar",
1061 | "name": "\u0645\u0627\u0647\u0631 \u0627\u0644\u0645\u0639\u064a\u0642\u0644\u064a",
1062 | "englishName": "Maher Al Muaiqly",
1063 | "format": "audio",
1064 | "type": "versebyverse",
1065 | "direction": null
1066 | },
1067 | {
1068 | "identifier": "ar.minshawi",
1069 | "language": "ar",
1070 | "name": "\u0645\u062d\u0645\u062f \u0635\u062f\u064a\u0642 \u0627\u0644\u0645\u0646\u0634\u0627\u0648\u064a",
1071 | "englishName": "Minshawi",
1072 | "format": "audio",
1073 | "type": "translation",
1074 | "direction": null
1075 | },
1076 | {
1077 | "identifier": "ar.minshawimujawwad",
1078 | "language": "ar",
1079 | "name": "\u0645\u062d\u0645\u062f \u0635\u062f\u064a\u0642 \u0627\u0644\u0645\u0646\u0634\u0627\u0648\u064a (\u0627\u0644\u0645\u062c\u0648\u062f)",
1080 | "englishName": "Minshawy (Mujawwad)",
1081 | "format": "audio",
1082 | "type": "translation",
1083 | "direction": null
1084 | },
1085 | {
1086 | "identifier": "ar.muhammadayyoub",
1087 | "language": "ar",
1088 | "name": "\u0645\u062d\u0645\u062f \u0623\u064a\u0648\u0628",
1089 | "englishName": "Muhammad Ayyoub",
1090 | "format": "audio",
1091 | "type": "versebyverse",
1092 | "direction": null
1093 | },
1094 | {
1095 | "identifier": "ar.muhammadjibreel",
1096 | "language": "ar",
1097 | "name": "\u0645\u062d\u0645\u062f \u062c\u0628\u0631\u064a\u0644",
1098 | "englishName": "Muhammad Jibreel",
1099 | "format": "audio",
1100 | "type": "versebyverse",
1101 | "direction": null
1102 | },
1103 | {
1104 | "identifier": "ar.saoodshuraym",
1105 | "language": "ar",
1106 | "name": "\u0633\u0639\u0648\u062f \u0627\u0644\u0634\u0631\u064a\u0645",
1107 | "englishName": "Saood bin Ibraaheem Ash-Shuraym",
1108 | "format": "audio",
1109 | "type": "versebyverse",
1110 | "direction": null
1111 | },
1112 | {
1113 | "identifier": "en.walk",
1114 | "language": "en",
1115 | "name": "Ibrahim Walk",
1116 | "englishName": "Ibrahim Walk",
1117 | "format": "audio",
1118 | "type": "versebyverse",
1119 | "direction": null
1120 | },
1121 | {
1122 | "identifier": "fa.hedayatfarfooladvand",
1123 | "language": "fa",
1124 | "name": "Fooladvand - Hedayatfar",
1125 | "englishName": "Fooladvand - Hedayatfar",
1126 | "format": "audio",
1127 | "type": "translation",
1128 | "direction": null
1129 | },
1130 | {
1131 | "identifier": "ar.parhizgar",
1132 | "language": "ar",
1133 | "name": "\u0634\u0647\u0631\u06cc\u0627\u0631 \u067e\u0631\u0647\u06cc\u0632\u06af\u0627\u0631",
1134 | "englishName": "Parhizgar",
1135 | "format": "audio",
1136 | "type": "versebyverse",
1137 | "direction": null
1138 | },
1139 | {
1140 | "identifier": "ur.khan",
1141 | "language": "ur",
1142 | "name": "Shamshad Ali Khan",
1143 | "englishName": "Shamshad Ali Khan",
1144 | "format": "audio",
1145 | "type": "versebyverse",
1146 | "direction": null
1147 | },
1148 | {
1149 | "identifier": "zh.chinese",
1150 | "language": "zh",
1151 | "name": "\u4e2d\u6587",
1152 | "englishName": "Chinese",
1153 | "format": "audio",
1154 | "type": "versebyverse",
1155 | "direction": null
1156 | },
1157 | {
1158 | "identifier": "fr.leclerc",
1159 | "language": "fr",
1160 | "name": "Youssouf Leclerc",
1161 | "englishName": "Youssouf Leclerc",
1162 | "format": "audio",
1163 | "type": "versebyverse",
1164 | "direction": null
1165 | },
1166 | {
1167 | "identifier": "quran-kids",
1168 | "language": "ar",
1169 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0644\u0644\u0623\u0637\u0641\u0627\u0644",
1170 | "englishName": "Kids",
1171 | "format": "text",
1172 | "type": "quran",
1173 | "direction": "rtl"
1174 | },
1175 | {
1176 | "identifier": "quran-corpus-qd",
1177 | "language": "ar",
1178 | "name": "Corpus",
1179 | "englishName": "Corpus",
1180 | "format": "text",
1181 | "type": "quran",
1182 | "direction": "rtl"
1183 | },
1184 | {
1185 | "identifier": "si.naseemismail",
1186 | "language": "si",
1187 | "name": "Naseem Ismail",
1188 | "englishName": "Naseem Isamil and Masoor Maulana, Kaleel",
1189 | "format": "text",
1190 | "type": "translation",
1191 | "direction": "ltr"
1192 | },
1193 | {
1194 | "identifier": "quran-buck",
1195 | "language": "ar",
1196 | "name": "Buck",
1197 | "englishName": "Buck",
1198 | "format": "text",
1199 | "type": "translation",
1200 | "direction": "rtl"
1201 | },
1202 | {
1203 | "identifier": "zh.mazhonggang",
1204 | "language": "zh",
1205 | "name": "Ma Zhong Gang",
1206 | "englishName": "\u9a6c\u4ef2\u521a",
1207 | "format": "text",
1208 | "type": "translation",
1209 | "direction": "ltr"
1210 | },
1211 | {
1212 | "identifier": "ar.aymanswoaid",
1213 | "language": "ar",
1214 | "name": "\u0623\u064a\u0645\u0646 \u0633\u0648\u064a\u062f",
1215 | "englishName": "Ayman Sowaid",
1216 | "format": "audio",
1217 | "type": "versebyverse",
1218 | "direction": null
1219 | },
1220 | {
1221 | "identifier": "quran-wordbyword-2",
1222 | "language": "ar",
1223 | "name": "\u0645\u0639\u0627\u0646\u064a \u0645\u0641\u0631\u062f\u0627\u062a \u0627\u0644\u0642\u0631\u0622\u0646 \u0648\u0644\u0641\u0638\u0647\u0627",
1224 | "englishName": "Word by Word Transaltion by Dr. Shehnaz Shaikh",
1225 | "format": "text",
1226 | "type": "quran",
1227 | "direction": "rtl"
1228 | },
1229 | {
1230 | "identifier": "quran-unicode",
1231 | "language": "ar",
1232 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0628\u0631\u0633\u0645 \u0627\u0644\u0639\u062b\u0645\u0627\u0646\u064a",
1233 | "englishName": "Unicode Quran text from Khaled Hosny",
1234 | "format": "text",
1235 | "type": "quran",
1236 | "direction": "rtl"
1237 | },
1238 | {
1239 | "identifier": "quran-uthmani-quran-academy",
1240 | "language": "ar",
1241 | "name": "\u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645 \u0628\u0631\u0633\u0645 \u0627\u0644\u0639\u062b\u0645\u0627\u0646\u064a",
1242 | "englishName": "Modified Quran Uthmani Text from the Quran Academy to work with the Kitab font",
1243 | "format": "text",
1244 | "type": "quran",
1245 | "direction": "rtl"
1246 | },
1247 | {
1248 | "identifier": "ba.mehanovic",
1249 | "language": "ba",
1250 | "name": "Kur'an - sa prevodom (zna\u010denja) na bosanski jezik, utemeljen na Ibn Kesirovom tuma\u010denju, i kratki komentar",
1251 | "englishName": "Quran translation by Muhamed Mehanovic",
1252 | "format": "text",
1253 | "type": "translation",
1254 | "direction": "ltr"
1255 | },
1256 | {
1257 | "identifier": "ru.kuliev-audio",
1258 | "language": "ru",
1259 | "name": "Elmir Kuliev by 1MuslimApp",
1260 | "englishName": "Elmir Kuliev by 1MuslimApp",
1261 | "format": "audio",
1262 | "type": "versebyverse",
1263 | "direction": null
1264 | },
1265 | {
1266 | "identifier": "en.itani",
1267 | "language": "en",
1268 | "name": "Clear Qur'an - Talal Itani",
1269 | "englishName": "Clear Qur'an by Talal Itani",
1270 | "format": "text",
1271 | "type": "translation",
1272 | "direction": "ltr"
1273 | },
1274 | {
1275 | "identifier": "ar.waseet",
1276 | "language": "ar",
1277 | "name": "\u0627\u0644\u0640\u062a\u0640\u0641\u0640\u0633\u0640\u064a\u0640\u0631 \u0627\u0644\u0640\u0648\u0633\u0640\u064a\u0640\u0637",
1278 | "englishName": "Tafsir Al Waseet",
1279 | "format": "text",
1280 | "type": "tafsir",
1281 | "direction": "rtl"
1282 | },
1283 | {
1284 | "identifier": "ar.baghawi",
1285 | "language": "ar",
1286 | "name": "\u062a\u0641\u0633\u064a\u0631 \u0627\u0644\u0628\u063a\u0648\u064a\u200e",
1287 | "englishName": "Tafsir Al Baghawi",
1288 | "format": "text",
1289 | "type": "tafsir",
1290 | "direction": "rtl"
1291 | },
1292 | {
1293 | "identifier": "ar.miqbas",
1294 | "language": "ar",
1295 | "name": "\u062a\u0646\u0648\u064a\u0631 \u0627\u0644\u0645\u0642\u0628\u0627\u0633 \u0645\u0646 \u062a\u0641\u0633\u064a\u0631 \u0628\u0646 \u0639\u0628\u0627\u0633",
1296 | "englishName": "Tafsir Tanwir al-Miqbas",
1297 | "format": "text",
1298 | "type": "tafsir",
1299 | "direction": "rtl"
1300 | },
1301 | {
1302 | "identifier": "ar.qurtubi",
1303 | "language": "ar",
1304 | "name": "\u062a\u0641\u0633\u064a\u0631 \u0627\u0644\u0642\u0631\u0637\u0628\u064a",
1305 | "englishName": "Tafsir Al Qurtubi",
1306 | "format": "text",
1307 | "type": "tafsir",
1308 | "direction": "rtl"
1309 | },
1310 | {
1311 | "identifier": "my.ghazi",
1312 | "language": "my",
1313 | "name": "Ghazi Muhammed Hashim",
1314 | "englishName": "Translation by Ghazi Muhammed Hashim",
1315 | "format": "text",
1316 | "type": "translation",
1317 | "direction": "ltr"
1318 | }
1319 | ]
1320 | }
1321 |
--------------------------------------------------------------------------------