diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b883a32..5fb7281 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,7 +6,7 @@ on: jobs: tests: - runs-on: macOS-latest + runs-on: macos-11 steps: - uses: actions/checkout@v2 diff --git a/App/Generated/SwiftGen/Assets.swift b/App/Generated/SwiftGen/Assets.swift index 9108f0d..0dbdd10 100644 --- a/App/Generated/SwiftGen/Assets.swift +++ b/App/Generated/SwiftGen/Assets.swift @@ -14,14 +14,10 @@ internal typealias Images = Asset.Images internal enum Asset { internal enum Colors { - internal enum Theme { - internal static let accent = UIColor(named: "Theme/Accent", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - internal static let barBackground = UIColor(named: "Theme/BarBackground", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - internal static let contentBackground = UIColor(named: "Theme/ContentBackground", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - internal static let contentBackgroundElevated = UIColor(named: "Theme/ContentBackgroundElevated", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - internal static let primary = UIColor(named: "Theme/Primary", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - internal static let secondary = UIColor(named: "Theme/Secondary", in: Bundle(for: BundleToken.self), compatibleWith: nil)! - } + internal static let accentColor = UIColor(named: "AccentColor", in: Bundle(for: BundleToken.self), compatibleWith: nil)! + internal static let contentBackground = UIColor(named: "ContentBackground", in: Bundle(for: BundleToken.self), compatibleWith: nil)! + internal static let primary = UIColor(named: "Primary", in: Bundle(for: BundleToken.self), compatibleWith: nil)! + internal static let secondary = UIColor(named: "Secondary", in: Bundle(for: BundleToken.self), compatibleWith: nil)! } internal enum Images { internal static let background = UIImage(named: "Background", in: Bundle(for: BundleToken.self), compatibleWith: nil)! diff --git a/App/Generated/SwiftGen/Storyboards.swift b/App/Generated/SwiftGen/Storyboards.swift index 33e06d6..c012cb9 100644 --- a/App/Generated/SwiftGen/Storyboards.swift +++ b/App/Generated/SwiftGen/Storyboards.swift @@ -20,7 +20,7 @@ internal enum StoryboardScene { internal enum Settings: StoryboardType { internal static let storyboardName = "Settings" - internal static let faqNavigationController = SceneType(storyboard: Settings.self, identifier: "FAQNavigationController") + internal static let faqNavigationController = SceneType(storyboard: Settings.self, identifier: "FAQNavigationController") } } // swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name diff --git a/App/Generated/SwiftGen/Strings.swift b/App/Generated/SwiftGen/Strings.swift index 7e54f4f..2bf7b22 100644 --- a/App/Generated/SwiftGen/Strings.swift +++ b/App/Generated/SwiftGen/Strings.swift @@ -19,6 +19,10 @@ internal enum L10n { } internal enum RakahComponent { + /// %1$@ – part %2$d of %3$d + internal static func splitRecitationTitle(_ p1: Any, _ p2: Int, _ p3: Int) -> String { + return L10n.tr("Localizable", "RAKAH_COMPONENT.SPLIT_RECITATION_TITLE", String(describing: p1), p2, p3) + } internal enum OpeningSupplication { /// Opening Supplication internal static let name = L10n.tr("Localizable", "RAKAH_COMPONENT.OPENING_SUPPLICATION.NAME") @@ -66,10 +70,18 @@ internal enum L10n { /// al-Ma'Un (Assistance) internal static let name = L10n.tr("Localizable", "RECITATION.ASSISTANCE.NAME") } + internal enum Destiny { + /// Al-Qadr (Destiny) + internal static let name = L10n.tr("Localizable", "RECITATION.DESTINY.NAME") + } internal enum GoodInAbundance { /// al-Kawthar (Good in Abundance) internal static let name = L10n.tr("Localizable", "RECITATION.GOOD_IN_ABUNDANCE.NAME") } + internal enum GreedForMoreAndMore { + /// At-Takathur (Greed For More And More) + internal static let name = L10n.tr("Localizable", "RECITATION.GREED_FOR_MORE_AND_MORE.NAME") + } internal enum Men { /// an-Nas (Men) internal static let name = L10n.tr("Localizable", "RECITATION.MEN.NAME") @@ -82,22 +94,58 @@ internal enum L10n { /// an-Nasr (Succour) internal static let name = L10n.tr("Localizable", "RECITATION.SUCCOUR.NAME") } + internal enum TheBrightMorningHours { + /// Ad-Duha (The Bright Morning Hours) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_BRIGHT_MORNING_HOURS.NAME") + } + internal enum TheChargers { + /// Al-Adiyat (The Chargers) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_CHARGERS.NAME") + } internal enum TheDecleratiionOfGodsPerfection { /// al-Ikhlas (The Decleration Of [God's] Perfection) internal static let name = L10n.tr("Localizable", "RECITATION.THE_DECLERATIION_OF_GODS_PERFECTION.NAME") } + internal enum TheEarthquake { + /// Al-Zalzalah (The Earthquake) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_EARTHQUAKE.NAME") + } internal enum TheElephant { /// al-Fil (The Elephant) internal static let name = L10n.tr("Localizable", "RECITATION.THE_ELEPHANT.NAME") } + internal enum TheEvidenceOfTheTruth { + /// Al-Bayyinah (The Evidence Of The Truth) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_EVIDENCE_OF_THE_TRUTH.NAME") + } + internal enum TheFig { + /// At-Tin (The Fig) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_FIG.NAME") + } internal enum TheFlightOfTime { /// al-'Asr (The Flight Of Time) internal static let name = L10n.tr("Localizable", "RECITATION.THE_FLIGHT_OF_TIME.NAME") } + internal enum TheGermCell { + /// Al-Alaq (The Germ-Cell) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_GERM_CELL.NAME") + } + internal enum TheLand { + /// Al-Balad (The Land) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_LAND.NAME") + } + internal enum TheNight { + /// Al-Layl (The Night) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_NIGHT.NAME") + } internal enum TheOpening { /// al-Fatiha (The Opening) internal static let name = L10n.tr("Localizable", "RECITATION.THE_OPENING.NAME") } + internal enum TheOpeningUpOfTheHeart { + /// Ash-Sharh (The Opening-Up Of The Heart) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_OPENING_UP_OF_THE_HEART.NAME") + } internal enum TheRisingDawn { /// al-Falaq (The Rising Dawn) internal static let name = L10n.tr("Localizable", "RECITATION.THE_RISING_DAWN.NAME") @@ -106,6 +154,14 @@ internal enum L10n { /// al-Humaza (The Slanderer) internal static let name = L10n.tr("Localizable", "RECITATION.THE_SLANDERER.NAME") } + internal enum TheSuddenCalamity { + /// Al-Qariah (The Sudden Calamity) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_SUDDEN_CALAMITY.NAME") + } + internal enum TheSun { + /// Ash-Shams (The Sun) + internal static let name = L10n.tr("Localizable", "RECITATION.THE_SUN.NAME") + } internal enum TheTwistedStrands { /// al-Masad (The Twisted Strands) internal static let name = L10n.tr("Localizable", "RECITATION.THE_TWISTED_STRANDS.NAME") @@ -141,7 +197,13 @@ internal enum L10n { } internal enum FaqEntries { internal enum AppMotivation { - /// This App currently has two goals:\n1. Becoming aware of what you are actually saying when you pray.\n2. Use the regular prayers to read the Quran.\n\nCurrently the app contains only the last twelve surahs of the Quran and randomly selects between them while one is staying during a prayer, but this is only the first step. With updates we are to follow all the missing surahs, and we also have a planned solution for longer surahs so that you can read them bit by bit to be able to pray and understand them without losing context.\n\nSpecifically NOT the purpose of this app is to teach praying from the ground up. Knowledge of the fundamentals of the prayers is already assumed, the app is intended primarily to move from doing your prayers in a foreign language (Arabic) to a language which you already mastered (currently: English, German and Turkish). + /// This App currently has two goals: + /// 1. Becoming aware of what you are actually saying when you pray. + /// 2. Use the regular prayers to read the Quran. + /// + /// Currently the app contains only the last twelve surahs of the Quran and randomly selects between them while one is staying during a prayer, but this is only the first step. With updates we are to follow all the missing surahs, and we also have a planned solution for longer surahs so that you can read them bit by bit to be able to pray and understand them without losing context. + /// + /// Specifically NOT the purpose of this app is to teach praying from the ground up. Knowledge of the fundamentals of the prayers is already assumed, the app is intended primarily to move from doing your prayers in a foreign language (Arabic) to a language which you already mastered (currently: English, German and Turkish). internal static let answer = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.APP_MOTIVATION.ANSWER") /// What is the purpose of this app? internal static let question = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.APP_MOTIVATION.QUESTION") @@ -153,7 +215,9 @@ internal enum L10n { internal static let question = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.IPAD_READING.QUESTION") } internal enum Language { - /// We are convinced that the Quran prescribes regular prayers above all to be aware of God and to remember his guidance. Words that can not be understood neither warn against the wrong path, nor show the right path which is, at the end, what the Quran aims to do.\n\nIn any case, we can not imagine that God wants us to merely admire the beauty of the sound of his lyrics five times a day. The Arabic in the Quran may be perfect and supreme in its meaning, but as long as the person doing the prayer has not mastered the Arabic language, his prayers in Arabic are imperfect. Moreover, we do not know a Quran verse which requires prayers to be done in Arabic. + /// We are convinced that the Quran prescribes regular prayers above all to be aware of God and to remember his guidance. Words that can not be understood neither warn against the wrong path, nor show the right path which is, at the end, what the Quran aims to do. + /// + /// In any case, we can not imagine that God wants us to merely admire the beauty of the sound of his lyrics five times a day. The Arabic in the Quran may be perfect and supreme in its meaning, but as long as the person doing the prayer has not mastered the Arabic language, his prayers in Arabic are imperfect. Moreover, we do not know a Quran verse which requires prayers to be done in Arabic. internal static let answer = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.LANGUAGE.ANSWER") /// Do prayers not have to be spoken in Arabic, the original language of the Koran? internal static let question = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.LANGUAGE.QUESTION") @@ -165,7 +229,9 @@ internal enum L10n { internal static let question = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.LANGUAGE_MIX.QUESTION") } internal enum TranslationProblem { - /// We understand that regular prayers are something so important that you want to do everything as correct as possible. We also understand that in religion many different opinions about the meaning of the same text prevail, and it is important that you remain as close as possible to the original text.\n\nThis is why we absolutely want you to read the Quran yourself, not the narratives and traditions of those who have studied the Quran for years and try to enlighten you (supposedly), and above all not those who try to teach you about "the real message of the Koran". We are convinced that this distinction is only possible if you read the Quran for yourself what this App tries to help with. + /// We understand that regular prayers are something so important that you want to do everything as correct as possible. We also understand that in religion many different opinions about the meaning of the same text prevail, and it is important that you remain as close as possible to the original text. + /// + /// This is why we absolutely want you to read the Quran yourself, not the narratives and traditions of those who have studied the Quran for years and try to enlighten you (supposedly), and above all not those who try to teach you about "the real message of the Koran". We are convinced that this distinction is only possible if you read the Quran for yourself what this App tries to help with. internal static let answer = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.TRANSLATION_PROBLEM.ANSWER") /// Do translations not necessarily change the meaning of the original text? internal static let question = L10n.tr("Localizable", "SETTINGS.FAQ_ENTRIES.TRANSLATION_PROBLEM.QUESTION") @@ -178,16 +244,26 @@ internal enum L10n { internal enum PrayerSection { /// Prayer Settings internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.TITLE") + internal enum AllowLongerRecitations { + /// Current position in split Surah was cleared. + internal static let resetMessage = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.RESET_MESSAGE") + /// Allow longer recitations + internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.TITLE") + } + internal enum AllowSplittingRecitations { + /// Include long surah by splitting them + internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.ALLOW_SPLITTING_RECITATIONS.TITLE") + } internal enum ChangingText { - /// Changing text speed + /// Quran sura speed internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE") } internal enum ChangingTextName { - /// Changing text name + /// Quran sura name internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE") } internal enum FixedTexts { - /// Fixed texts speed + /// Other texts speed internal static let title = L10n.tr("Localizable", "SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE") } internal enum MovementSoundInstrument { diff --git a/App/Resources/Colors.xcassets/Theme/Accent.colorset/Contents.json b/App/Resources/Colors.xcassets/AccentColor.colorset/Contents.json similarity index 88% rename from App/Resources/Colors.xcassets/Theme/Accent.colorset/Contents.json rename to App/Resources/Colors.xcassets/AccentColor.colorset/Contents.json index 4f4b3d0..dc611af 100644 --- a/App/Resources/Colors.xcassets/Theme/Accent.colorset/Contents.json +++ b/App/Resources/Colors.xcassets/AccentColor.colorset/Contents.json @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x85", - "red" : "0x4D" + "blue" : "0.600", + "green" : "0.522", + "red" : "0.302" } }, "idiom" : "universal" diff --git a/App/Resources/Colors.xcassets/Theme/Primary.colorset/Contents.json b/App/Resources/Colors.xcassets/ContentBackground.colorset/Contents.json similarity index 84% rename from App/Resources/Colors.xcassets/Theme/Primary.colorset/Contents.json rename to App/Resources/Colors.xcassets/ContentBackground.colorset/Contents.json index b540bdc..b6af6af 100644 --- a/App/Resources/Colors.xcassets/Theme/Primary.colorset/Contents.json +++ b/App/Resources/Colors.xcassets/ContentBackground.colorset/Contents.json @@ -5,9 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x1A", - "green" : "0x0B", - "red" : "0x00" + "blue" : "0xF1", + "green" : "0xEB", + "red" : "0xE6" } }, "idiom" : "universal" @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xEB", - "red" : "0xE6" + "blue" : "0.102", + "green" : "0.043", + "red" : "0.000" } }, "idiom" : "universal" diff --git a/App/Resources/Colors.xcassets/Theme/BarBackground.colorset/Contents.json b/App/Resources/Colors.xcassets/Primary.colorset/Contents.json similarity index 76% rename from App/Resources/Colors.xcassets/Theme/BarBackground.colorset/Contents.json rename to App/Resources/Colors.xcassets/Primary.colorset/Contents.json index 0df0ba9..efb106e 100644 --- a/App/Resources/Colors.xcassets/Theme/BarBackground.colorset/Contents.json +++ b/App/Resources/Colors.xcassets/Primary.colorset/Contents.json @@ -5,9 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0xDE", - "green" : "0xD0", - "red" : "0xBA" + "blue" : "0.102", + "green" : "0.043", + "red" : "0.000" } }, "idiom" : "universal" @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x21", - "green" : "0x12", - "red" : "0x00" + "blue" : "0.949", + "green" : "0.922", + "red" : "0.902" } }, "idiom" : "universal" diff --git a/App/Resources/Colors.xcassets/Theme/ContentBackground.colorset/Contents.json b/App/Resources/Colors.xcassets/Secondary.colorset/Contents.json similarity index 76% rename from App/Resources/Colors.xcassets/Theme/ContentBackground.colorset/Contents.json rename to App/Resources/Colors.xcassets/Secondary.colorset/Contents.json index 1687593..59288dd 100644 --- a/App/Resources/Colors.xcassets/Theme/ContentBackground.colorset/Contents.json +++ b/App/Resources/Colors.xcassets/Secondary.colorset/Contents.json @@ -5,9 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xF3", - "red" : "0xF3" + "blue" : "0.502", + "green" : "0.392", + "red" : "0.090" } }, "idiom" : "universal" @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x0C", - "green" : "0x05", - "red" : "0x00" + "blue" : "0.600", + "green" : "0.522", + "red" : "0.302" } }, "idiom" : "universal" diff --git a/App/Resources/Colors.xcassets/Theme/ContentBackgroundElevated.colorset/Contents.json b/App/Resources/Colors.xcassets/Theme/ContentBackgroundElevated.colorset/Contents.json deleted file mode 100644 index a639a6f..0000000 --- a/App/Resources/Colors.xcassets/Theme/ContentBackgroundElevated.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.953", - "green" : "0.953", - "red" : "0.953" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x24", - "green" : "0x1D", - "red" : "0x19" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/App/Resources/Colors.xcassets/Theme/Contents.json b/App/Resources/Colors.xcassets/Theme/Contents.json deleted file mode 100644 index 6e96565..0000000 --- a/App/Resources/Colors.xcassets/Theme/Contents.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "provides-namespace" : true - } -} diff --git a/App/Resources/Colors.xcassets/Theme/Secondary.colorset/Contents.json b/App/Resources/Colors.xcassets/Theme/Secondary.colorset/Contents.json deleted file mode 100644 index 4f4b3d0..0000000 --- a/App/Resources/Colors.xcassets/Theme/Secondary.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x80", - "green" : "0x64", - "red" : "0x17" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x85", - "red" : "0x4D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/App/Resources/Recitations/de.lproj/090_The-Land.txt b/App/Resources/Recitations/de.lproj/090_The-Land.txt new file mode 100644 index 0000000..c0f93e0 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/090_The-Land.txt @@ -0,0 +1,22 @@ +Nein! Ich rufe zum Zeugen dieses Land +– dieses Land, in dem du frei bist zu wohnen +– und (Ich rufe zum Zeugen) Eltern und Nachkommen: +Wahrlich, Wir haben den Menschen erschaffen (zu einem Leben) in Schmerz, Mühsal und Prüfung. +Denkt er denn, dass keiner Macht über ihn hat? +Er prahlt: »Ich habe Reichtum in Fülle ausgegeben!« +Denkt er denn, dass keiner ihn sieht? +Haben Wir ihm nicht zwei Augen gegeben, +und eine Zunge und ein Paar Lippen, +und ihm die beiden Höhenwege (von Gut und Übel) gezeigt? +Aber er will nicht versuchen, den steilen Weg bergauf hinaufzusteigen ... +Und was könnte dich begreifen lassen, was es ist, jener steile Weg bergauf? +⁋ +(Es ist) das Befreien des eigenen Nackens (von der Last der Sünde), +oder das Speisen an einem Tag des (eigenen) Hungers +von einer nah verwandten Waise +oder eines bedürftigen (Fremden) der im Staub liegt +– und überdies von jenen zu sein, die Glauben erlangt haben und einander Geduld in Widrigkeit auftragen und einander Mitgefühl auftragen. +Solche sind diejenigen, die Rechtschaffenheit erlangt haben; +während jene, die darauf aus sind, die Wahrheit Unserer Botschaften zu leugnen +– sie sind solche, die sich selbst in Übel verloren haben, +(indes) Feuer sich über ihnen schließt. diff --git a/App/Resources/Recitations/de.lproj/091_The-Sun.txt b/App/Resources/Recitations/de.lproj/091_The-Sun.txt new file mode 100644 index 0000000..9acd3b9 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/091_The-Sun.txt @@ -0,0 +1,18 @@ +Betrachte die Sonne und ihre strahlende Helle, +und den Mond, wie er die Sonne widerspiegelt! +Betrachte den Tag, wie er die Welt offenbart, +und die Nacht, wie sie sie finster verhüllt! +Betrachte den Himmel und seine wundersame Erbauung, +und die Erde und all ihre Weite! +Betrachte das menschliche Selbst und wie es in Übereinstimmung mit dem geformt ist, was es sein soll, +und wie es erfüllt ist von moralischen Schwächen wie auch Bewusstsein von Gott! +Einen glückseligen Zustand wird fürwahr erlangen, wer dieses (Selbst) an Reinheit wachsen lässt, +und wahrhaft verloren ist, wer es (in Finsternis) vergräbt. +⁋ +(Diese) Wahrheit ziehen der Lüge (der Stamm der) Thamud in ihrem anmaßenden Hochmut, +als jener höchst unselige Schuft von ihnen herbeieilte (um seine üble Tat zu begehen), +obwohl Gottes Gesandter ihnen gesagt hatte: +»Es ist eine Kamelstute, die Gott gehört, so lasst sie trinken (und fügt ihr keinen Schaden zu)!« +Aber sie ziehen ihn der Lüge und schlachteten sie grausam +– woraufhin ihr Erhalter sie mit völliger Vernichtung heimsuchte wegen dieser ihrer Sünde und sie alle gleichermaßen vernichtete: +denn keiner von ihnen hatte irgendwelche Furcht vor dem, was sie treffen könnte. diff --git a/App/Resources/Recitations/de.lproj/092_The-Night.txt b/App/Resources/Recitations/de.lproj/092_The-Night.txt new file mode 100644 index 0000000..b2c5864 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/092_The-Night.txt @@ -0,0 +1,22 @@ +Betrachte die Nacht, wie sie (die Erde) in Finsternis hüllt, +und den Tag, wie er hell aufsteigt! +Betrachte die Schöpfung des Männlichen und des Weiblichen! +Wahrlich, (o Menschen,) ihr strebt nach höchst unterschiedlichen Zielen! +Also, was den angeht, der (anderen) gibt und sich Gottes bewusst ist, +und an die Wahrheit des letzten Guten glaubt +– für ihn werden Wir den Pfad zur (letzten) Erleichterung leicht machen. +Aber was den angeht, der geizig ist und denkt, dass er selbstgenügend ist, +und das letzte Gute eine Lüge nennt +– für ihn werden Wir den Pfad zur Härte leicht machen: +und was wird ihm sein Reichtum nutzen, wenn er (in sein Grab) niedergeht? +⁋ +Siehe, es ist fürwahr an Uns, (euch) mit Rechtleitung zu begnaden; +und, siehe, Unser ist (die Herrschaft über) das kommende Leben wie auch (über) diesen früheren Teil (eures Lebens): +und so warne Ich euch vor dem wütenden Feuer +– (dem Feuer,) das keiner zu ertragen haben wird außer jenem höchst unseligen Schuft, +der (die Wahrheit) der Lüge zeiht und sich (von ihr) abwendet. +Denn fern von ihr wird der bleiben, der sich wahrhaft Gottes bewusst ist: +er, der seine Besitztümer (für andere) ausgibt, auf dass er an Reinheit wachsen möge +– nicht als Bezahlung für erhaltene Begünstigungen, +sondern nur aus einem Verlangen nach dem Antlitz seines Erhalters, des Allerhöchsten: +und der wird fürwahr beizeiten wohlzufrieden sein. diff --git a/App/Resources/Recitations/de.lproj/093_The-Bright-Morning-Hours.txt b/App/Resources/Recitations/de.lproj/093_The-Bright-Morning-Hours.txt new file mode 100644 index 0000000..389eddc --- /dev/null +++ b/App/Resources/Recitations/de.lproj/093_The-Bright-Morning-Hours.txt @@ -0,0 +1,11 @@ +Betrachte die hellen Morgenstunden +und die Nacht, wenn sie still und finster wird. +Dein Erhalter hat dich nicht verlassen, noch verachtet Er dich: +denn, fürwahr, das kommende Leben wird besser für dich sein als dieser frühere Teil (deines Lebens)! +Und, fürwahr, beizeiten wird dein Erhalter dir gewähren (was dein Herz begehrt), und du wirst wohlzufrieden sein. +Hat Er dich nicht als Waise gefunden und dir Schutz gegeben? +Und dich auf deinem Weg verirrt gefunden und dich rechtgeleitet? +Und dich in Bedürftigkeit gefunden und dir Genüge gegeben? +Deshalb sollst du der Waise niemals unrecht tun, +und den, der (deine) Hilfe sucht, sollst du niemals schelten, +und von den Segnungen deines Erhalters sollst du (immer) sprechen. diff --git a/App/Resources/Recitations/de.lproj/094_The-Opening-Up-of-the-Heart.txt b/App/Resources/Recitations/de.lproj/094_The-Opening-Up-of-the-Heart.txt new file mode 100644 index 0000000..7340dd9 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/094_The-Opening-Up-of-the-Heart.txt @@ -0,0 +1,8 @@ +Haben wir nicht dein Herz geöffnet +und von dir die Last genommen, +die so schwer auf deinem Rücken lastete? +Und (haben Wir nicht) dich an Würde erhöht? +Und, siehe, mit jeder Härte kommt Erleichterung: +wahrlich, mit jeder Härte kommt Erleichterung! +Darum, wenn du (von Bedrückung) befreit bist, bleibe standhaft +und wende dich in Liebe zu deinem Erhalter. diff --git a/App/Resources/Recitations/de.lproj/095_The-Fig.txt b/App/Resources/Recitations/de.lproj/095_The-Fig.txt new file mode 100644 index 0000000..3479ae4 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/095_The-Fig.txt @@ -0,0 +1,9 @@ +Betrachte die Feige und die Olive +und den Berg Sinai +und dieses sichere Land! +Wahrlich, Wir erschaffen den Menschen in bester Gestaltung, +und danach setzen Wir ihn herab auf das Niedrigste des Niedrigen +– ausgenommen nur solche, die Glauben erlangen und gute Werke tun: +und ihrer wird eine unendliche Belohnung sein! +Was denn (o Mensch,) könnte dich hinfort veranlassen, dieses Moralgesetz der Lüge zu zeihen? +Ist nicht Gott der Gerechteste der Richter? diff --git a/App/Resources/Recitations/de.lproj/096_The-Germ-Cell.txt b/App/Resources/Recitations/de.lproj/096_The-Germ-Cell.txt new file mode 100644 index 0000000..f628087 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/096_The-Germ-Cell.txt @@ -0,0 +1,20 @@ +Lies im Namen deines Erhalters, der erschaffen hat +– den Menschen erschaffen hat aus einer Keimzelle! +Lies – denn dein Erhalter ist der Huldreichste, +der (den Menschen) den Gebrauch der Schreibfeder gelehrt hat +– den Menschen gelehrt hat, was er nicht wusste! +Nein, wahrlich, der Mensch wird äußerst anmaßend, +wann immer er sich für selbstgenügend hält: +denn, siehe, zu deinem Erhalter müssen alle zurückkehren. +Hast du jemals den betrachtet, der zu verhindern sucht, +dass ein Diener (Gottes) betet? +⁋ +Hast du betrachtet, ob er auf dem rechten Weg ist +oder mit Gottesbewusstsein befasst ist? +Hast du betrachtet, ob er (nicht) vielleicht (die Wahrheit) der Lüge zeiht und (ihr) den Rücken kehrt? +Weiß er denn nicht, dass Gott (alles) sieht? +Nein, wenn er nicht ablässt, werden Wir ihn ganz sicherlich auf seine Stirn herunterziehen +– der lügnerischen, auflehnerischen Stirn! +– und dann soll er die Ratgeber seiner eigenen (unechten) Weisheit (zu seiner Hilfe) rufen, +(in dessen) Wir die Kräfte der himmlischen Strafe rufen werden! +Nein, gib du nicht acht auf ihn, sondern wirf dich (vor Gott) nieder und nahe dich (Ihm)! diff --git a/App/Resources/Recitations/de.lproj/097_Destiny.txt b/App/Resources/Recitations/de.lproj/097_Destiny.txt new file mode 100644 index 0000000..bc6a7b5 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/097_Destiny.txt @@ -0,0 +1,7 @@ +Siehe, von droben haben Wir diese (göttliche Schrift) in der Nacht des Schicksals erteilt. +Und was könnte dich begreifen lassen, was sie ist, diese Nacht des Schicksals? +Die Nacht des Schicksals ist besser als tausend Monate: +in Scharen kommen in ihr die Engel herab, +überbringen göttliche Eingebung mit der Erlaubnis ihres Erhalters; +vor allem (Übel), was geschehen mag, macht sie sicher, +bis zum Anbruch der Morgendämmerung. diff --git a/App/Resources/Recitations/de.lproj/098_The-Evidence-of-the-Truth.txt b/App/Resources/Recitations/de.lproj/098_The-Evidence-of-the-Truth.txt new file mode 100644 index 0000000..a8078c5 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/098_The-Evidence-of-the-Truth.txt @@ -0,0 +1,27 @@ +Es ist nicht (vorstellbar), dass solche, die darauf aus sind, die Wahrheit zu leugnen, +– (seien sie) von den Anhängern früherer Offenbarungen oder von jenen, +die etwas anderem neben Gott Göttlichkeit zuschreiben +– jemals (von Ihm) aufgegeben werden sollten, +ehe der (ganze) Beweis der Wahrheit zu ihnen kommt: +ein Gesandter von Gott, der (ihnen) mit Reinheit gesegnete Offenbarungen übermittelt, +in denen Verordnungen von immerwahrer Triftigkeit und Klarheit sind. +Nun haben jene, denen vordem Offenbarung gewährt worden ist, ihre Einheit (des Glaubens) zerbrochen, +nachdem ein solcher Beweis der Wahrheit zu ihnen gekommen war. +Und überdies, ihnen wurde nichts anderes geboten, als dass sie Gott anbeten sollten, +aufrichtig in ihrem Glauben an Ihn allein, sich abwendend von allem, was falsch ist; +und dass sie beständig das Gebet verrichten sollten; +und dass sie aus Mildtätigkeit ausgeben sollten: +denn dies ist ein mit immerwahrer Triftigkeit und Klarheit versehenes Moralgesetz. +⁋ +Wahrlich, jene, die (trotz allen Beweises) darauf aus sind, die Wahrheit zu leugnen, +– (seien sie) von den Anhängern früherer Offenbarungen oder von jenen, +die etwas anderem neben Gott Göttlichkeit zuschreiben +– werden sich im Feuer der Hölle finden, darin zu verbleiben: +sie sind die schlechtesten aller Geschöpfe. +(Und) wahrlich, jene, die Glauben erlangt haben und rechtschaffene Taten tun, +– es sind sie, sie, welche die besten aller Geschöpfe sind. +Ihr Lohn (erwartet sie) bei Gott: +Gärten steter Seligkeit, durch die Wasserläufe fließen, +darin zu verbleiben jenseits der Zählung der Zeit; +wohlzufrieden ist Gott mit ihnen, und wohlzufrieden sind sie mit Ihm: +all dies erwartet den, der Ehrfurcht vor seinem Erhalter hat! diff --git a/App/Resources/Recitations/de.lproj/099_The-Earthquake.txt b/App/Resources/Recitations/de.lproj/099_The-Earthquake.txt new file mode 100644 index 0000000..fb53dc2 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/099_The-Earthquake.txt @@ -0,0 +1,9 @@ +Wenn die Erde mit ihrem (letzten) mächtigen Beben bebt, +und (wenn) die Erde ihre Lasten herausgibt, +und der Mensch ausruft: »Was ist mit ihr geschehen?« +– an jenem Tag wird sie alle ihre Nachrichten berichten, +wie dein Erhalter es ihr zu tun eingegeben haben wird. +An jenem Tag werden alle Menschen hervortreten, abgetrennt voneinander, +damit ihnen ihre (vergangenen) Taten gezeigt werden. +Und so, wer das Gewicht eines Atoms an Gutem getan haben wird, der wird es erblicken; +und wer das Gewicht eines Atoms an Übel getan haben wird, der wird es erblicken. diff --git a/App/Resources/Recitations/de.lproj/100_The-Chargers.txt b/App/Resources/Recitations/de.lproj/100_The-Chargers.txt new file mode 100644 index 0000000..ea853a9 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/100_The-Chargers.txt @@ -0,0 +1,11 @@ +Oh, die Streitrosse, die keuchend laufen, +Feuerfunken schlagend, +anstürmend zum Angriff am Morgen, +dabei Staubwolken aufwirbelnd, +dabei (blind) in jede Schar hineinstürmend! +Wahrlich, seinem Erhalter gegenüber ist der Mensch höchst undankbar +– und davon, siehe, gibt er (selbst) führwahr Zeugnis: +denn, wahrlich, der Liebe zum Reichtum ist er höchst leidenschaftlich hingegeben. +Aber weiß er nicht, dass (am Letzten Tag,) wenn alles, was in den Gräbern ist, auferweckt und hervorgebracht wird, +und alles, was in den Herzen der Menschen (verborgen) ist, bloßgelegt wird +– dass an jenem Tag ihr Erhalter (zeigen wird, dass Er) ihrer immer völlig gewahr gewesen ist? diff --git a/App/Resources/Recitations/de.lproj/101_The-Sudden-Calamity.txt b/App/Resources/Recitations/de.lproj/101_The-Sudden-Calamity.txt new file mode 100644 index 0000000..5a571e6 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/101_The-Sudden-Calamity.txt @@ -0,0 +1,11 @@ +Oh, das plötzliche Unheil! +Wie schrecklich das plötzliche Unheil! +Und was könnte dich begreifen lassen, was das plötzliche Unheil sein wird? +(Es wird eintreten) an dem Tag, da die Menschen wie in Verwirrung schwärmende Motten sein werden, +und die Berge wie flaumige Wollbüschel sein werden ... +Und wessen Gewicht (an guten Taten) dann schwer auf der Waage ist, +der wird sich in einem glückseligen Zustand des Lebens finden; +während der, dessen Gewicht leicht auf der Waage ist, +von einem Abgrund umschlossen sein wird. +Und was könnte dich begreifen lassen, was dieser (Abgrund) sein wird? +Ein heiß brennendes Feuer! diff --git a/App/Resources/Recitations/de.lproj/102_Greed-for-More-and-More.txt b/App/Resources/Recitations/de.lproj/102_Greed-for-More-and-More.txt new file mode 100644 index 0000000..d50b651 --- /dev/null +++ b/App/Resources/Recitations/de.lproj/102_Greed-for-More-and-More.txt @@ -0,0 +1,9 @@ +Ihr seid besessen von Gier nach mehr und mehr, +bis ihr in eure Gräber niedergeht. +Nein, beizeiten werdet ihr verstehen! +Und noch einmal: Nein, beizeiten werdet ihr verstehen! +Nein, wenn ihr (es) nur verstehen könntet, mit einem Verstehen (geboren aus) der Gewissheit, +ihr würdet fürwahr, ganz sicherlich, das lodernde Feuer (der Hölle) erblicken! +Am Ende werdet ihr es fürwahr, ganz sicherlich, mit dem Auge der Gewissheit erblicken: +und an jenem Tag werdet ihr ganz sicherlich zur Rechenschaft gezogen werden +für (das, was ihr getan habt mit) der Wohltat des Lebens! diff --git a/App/Resources/Recitations/en.lproj/001_The-Opening.txt b/App/Resources/Recitations/en.lproj/001_The-Opening.txt index 66e0986..d66d6ef 100644 --- a/App/Resources/Recitations/en.lproj/001_The-Opening.txt +++ b/App/Resources/Recitations/en.lproj/001_The-Opening.txt @@ -5,5 +5,5 @@ Lord of the Day of Judgment! Thee alone do we worship; and unto Thee alone do we turn for aid. Guide us the straight way – the way of those upon whom Thou hast bestowed Thy blessings, -not of those who have been condemned (by Thee), +not of those who have been condemned [by Thee], nor of those who go astray! diff --git a/App/Resources/Recitations/en.lproj/090_The-Land.txt b/App/Resources/Recitations/en.lproj/090_The-Land.txt new file mode 100644 index 0000000..68def5d --- /dev/null +++ b/App/Resources/Recitations/en.lproj/090_The-Land.txt @@ -0,0 +1,24 @@ +Nay! I call to witness this land +this land in which thou art free to dwell - +and [I call to witness] parent and offspring: +Verily, We have created man into [a life of] pain, toil and trial. +Does he, then, think that no one has power over him? +He boasts, "I have spent wealth abundant!" +Does he, then, think that no one sees him? +Have We not given him two eyes, +and a tongue, and a pair of lips, +and shown him the two highways [of good and evil]? +But he would not try to ascend the steep uphill road... +And what could make thee conceive what it is, that steep uphill road? +⁋ +[It is] the freeing of one's neck [from the burden of sin], +or the feeding, upon a day of [one's own] hunger, +of an orphan near of kin, +or of a needy [stranger] lying in the dust +and being, withal, of those who have attained to faith, +and who enjoin upon one another patience in adversity, +and enjoin upon one another compassion. +Such are they that have attained to righteousness; +whereas those who are bent on denying the truth of Our messages +they are such as have lost themselves in evil, +[with] fire closing in upon them. diff --git a/App/Resources/Recitations/en.lproj/091_The-Sun.txt b/App/Resources/Recitations/en.lproj/091_The-Sun.txt new file mode 100644 index 0000000..3b68f29 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/091_The-Sun.txt @@ -0,0 +1,19 @@ +Consider the sun and its radiant brightness, +and the moon as it reflects the sun! +Consider the day as it reveals the world, +and the night as it veils it darkly! +Consider the sky and its wondrous make, +and the earth and all its expanse! +Consider the human self, and how it is formed in accordance with what it is meant to be, +and how it is imbued with moral failings as well as with consciousness of God! +To a happy state shall indeed attain he who causes this [self] to grow in purity, +and truly lost is he who buries it [in darkness]. +⁋ +To [this] truth gave the lie, in their overweening arrogance, [the tribe of] Thamud, +when that most hapless wretch from among them rushed forward [to commit his evil deed], +although God's apostle had told them, +"It is a she-camel belonging to God, so let her drink [and do her no harm]!" +But they gave him the lie, and cruelly slaughtered her - +whereupon their Sustainer visited them with utter destruction for this their sin, +destroying them all alike: +for none [of them] had any fear of what might befall them. diff --git a/App/Resources/Recitations/en.lproj/092_The-Night.txt b/App/Resources/Recitations/en.lproj/092_The-Night.txt new file mode 100644 index 0000000..85e047a --- /dev/null +++ b/App/Resources/Recitations/en.lproj/092_The-Night.txt @@ -0,0 +1,22 @@ +Consider the night as it veils [the earth] in darkness, +and the day as it rises bright! +Consider the creation of the male and the female! +Verily, [O men,] you aim at most divergent ends! +Thus, as for him who gives [to others] and is conscious of God, +and believes in the truth of the ultimate good - +for him shall We make easy the path towards [ultimate] ease. +But as for him who is niggardly, and thinks that he is self-sufficient, +and calls the ultimate good a lie +for him shall We make easy the path towards hardship: +and what will his wealth avail him when he goes down [to his grave]? +⁋ +Behold, it is indeed for Us to grace [you] with guidance; +and, behold, Ours is [the dominion over] the life to come as well as [over] this earlier part [of your life]: +and so I warn you of the raging fire - +[the fire] which none shall have to endure but that most hapless wretch +who gives the lie to the truth and turns away [from it]. +For, distant from it shall remain he who is truly conscious of God: +he that spends his possessions [on others] so that he might grow in purity +not as payment for favours received, +but only out of a longing for the countenance of his Sustainer, the All-Highest: +and such, indeed, shall in time be well-pleased. diff --git a/App/Resources/Recitations/en.lproj/093_The-Bright-Morning-Hours.txt b/App/Resources/Recitations/en.lproj/093_The-Bright-Morning-Hours.txt new file mode 100644 index 0000000..eb366af --- /dev/null +++ b/App/Resources/Recitations/en.lproj/093_The-Bright-Morning-Hours.txt @@ -0,0 +1,11 @@ +Consider the bright morning hours, +and the night when it grows still and dark. +Thy Sustainer has not forsaken thee, nor does He scorn thee: +for, indeed, the life to come will be better for thee than this earlier part [of thy life]! +And, indeed, in time will thy Sustainer grant thee [what thy heart desires], and thou shalt be well-pleased. +Has He not found thee an orphan, and given thee shelter? +And found thee lost on thy way, and guided thee? +And found thee in want, and given thee sufficiency? +Therefore, the orphan shalt thou never wrong, +and him that seeks [thy] help shalt thou never chide, +and of thy Sustainer's blessings shalt thou [ever] speak. diff --git a/App/Resources/Recitations/en.lproj/094_The-Opening-Up-of-the-Heart.txt b/App/Resources/Recitations/en.lproj/094_The-Opening-Up-of-the-Heart.txt new file mode 100644 index 0000000..c6fa15e --- /dev/null +++ b/App/Resources/Recitations/en.lproj/094_The-Opening-Up-of-the-Heart.txt @@ -0,0 +1,8 @@ +Have We not opened up thy heart, +and lifted from thee the burden +that had weighed so heavily on thy back? +And [have We not] raised thee high in dignity? +And, behold, with every hardship comes ease: +verily, with every hardship comes ease! +Hence, when thou art freed [from distress], remain steadfast, +and unto thy Sustainer turn with love. diff --git a/App/Resources/Recitations/en.lproj/095_The-Fig.txt b/App/Resources/Recitations/en.lproj/095_The-Fig.txt new file mode 100644 index 0000000..c5a5653 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/095_The-Fig.txt @@ -0,0 +1,9 @@ +Consider the fig and the olive, +and Mount Sinai, +and this land secure! +Verily, We create man in the best conformation; +and thereafter We reduce him to the lowest of low +excepting only such as attain to faith and do good works: +and theirs shall be a reward unending! +What, then, [Oman,] could henceforth cause thee to give the lie to this moral law? +Is not God the most just of judges? diff --git a/App/Resources/Recitations/en.lproj/096_The-Germ-Cell.txt b/App/Resources/Recitations/en.lproj/096_The-Germ-Cell.txt new file mode 100644 index 0000000..b0ab6ee --- /dev/null +++ b/App/Resources/Recitations/en.lproj/096_The-Germ-Cell.txt @@ -0,0 +1,20 @@ +Read in the name of thy Sustainer, who has created +created man out of a germ-cell! +Read - for thy Sustainer is the Most Bountiful One +who has taught [man] the use of the pen +taught man what he did not know! +Nay, verily, man becomes grossly overweening +whenever he believes himself to be self-sufficient: +for, behold, unto thy Sustainer all must return. +Hast thou ever considered him who tries to prevent +a servant [of God] from praying? +⁋ +Hast thou considered whether he is on the right way, +or is concerned with God- consciousness? +Hast thou considered whether he may [not] be giving the lie to the truth and turning his back [upon it]? +Does he, then, not know that God sees [all]? +Nay, if he desist not, We shall most surely drag him down upon his forehead +the lying, rebellious forehead! +and then let him summon [to his aid] the counsels of his own [spurious] wisdom, +[the while] We shall summon the forces of heavenly chastisement! +Nay, pay thou no heed to him, but prostrate thyself [before God] and draw close [unto Him]! diff --git a/App/Resources/Recitations/en.lproj/097_Destiny.txt b/App/Resources/Recitations/en.lproj/097_Destiny.txt new file mode 100644 index 0000000..ffe08a0 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/097_Destiny.txt @@ -0,0 +1,6 @@ +Behold, from on high have We bestowed this [divine writ] on Night of Destiny. +And what could make thee conceive what it is, that Night of Destiny? +The Night of Destiny is better than a thousand months: +in hosts descend in it the angels, bearing divine inspiration by their Sustainer's leave; +from all [evil] that may happen +does it make secure, until the rise of dawn. diff --git a/App/Resources/Recitations/en.lproj/098_The-Evidence-of-the-Truth.txt b/App/Resources/Recitations/en.lproj/098_The-Evidence-of-the-Truth.txt new file mode 100644 index 0000000..90ec511 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/098_The-Evidence-of-the-Truth.txt @@ -0,0 +1,23 @@ +It is not [conceivable] that such as are bent on denying the truth - +[be they] from among the followers of earlier revelation or from among those who ascribe divinity to aught beside God - +should ever be abandoned [by Him] ere there comes unto them the [full] evidence of the truth: +an apostle from God, conveying [unto them] revelations blest with purity, +wherein there are ordinances of ever-true soundness and clarity. +Now those who have been vouchsafed revelation aforetime did break up their unity [of faith] after such an evidence of the truth had come to them. +And withal, they were not enjoined aught but that they should worship God, +sincere in their faith in Him alone, turning away from all that is false; +and that they should be constant in prayer; +and that they should spend in charity: +for this is a moral law endowed with ever-true soundness and clarity. +⁋ +Verily, those who [despite all evidence] are bent on denying the truth - +[be they] from among the followers of earlier revelation or from among those who ascribe divinity to aught beside God - +will find themselves in the fire of hell, therein to abide: +they are the worst of all creatures. +[And,] verily, those who have attained to faith, and do righteous deeds - +it is they, they who are the best of all creatures. +Their reward [awaits them] with God: +gardens of perpetual bliss, through which running waters flow, +therein to abide beyond the count of time; well-pleased is God with them, +and well-pleased are they with Him: +all this awaits him who of his Sustainer stands in awe! diff --git a/App/Resources/Recitations/en.lproj/099_The-Earthquake.txt b/App/Resources/Recitations/en.lproj/099_The-Earthquake.txt new file mode 100644 index 0000000..d8777f0 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/099_The-Earthquake.txt @@ -0,0 +1,9 @@ +When the earth quakes with her [last] mighty quaking, +and [when] the earth yields up her burdens, +and man cries out, "What has happened to her?" - +on that Day will she recount all her tidings, +as thy Sustainer will have inspired her to do! +On that Day will all men come forward, cut off from one another, +to be shown their [past] deeds. +And so, he who shall have done an atom's weight of good, shall behold it; +and he who shall have done an atom's weight of evil, shall behold it. diff --git a/App/Resources/Recitations/en.lproj/100_The-Chargers.txt b/App/Resources/Recitations/en.lproj/100_The-Chargers.txt new file mode 100644 index 0000000..7f3b116 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/100_The-Chargers.txt @@ -0,0 +1,11 @@ +Oh, the chargers that run panting, +sparks of fire striking, +rushing to assault at morn, +thereby raising clouds of dust, +thereby storming [blindly] into any host! +Verily, towards his Sustainer man is most ungrateful +and to this, behold, he [himself] bears witness indeed: +for, verily, to the love of wealth is he most ardently devoted. +But does he not know that [on the Last Day,] when all that is in the graves is raised and brought out, +and all that is [hidden] in men's hearts is bared +that on that Day their Sustainer [will show that He] has always been fully aware of them? diff --git a/App/Resources/Recitations/en.lproj/101_The-Sudden-Calamity.txt b/App/Resources/Recitations/en.lproj/101_The-Sudden-Calamity.txt new file mode 100644 index 0000000..786196f --- /dev/null +++ b/App/Resources/Recitations/en.lproj/101_The-Sudden-Calamity.txt @@ -0,0 +1,11 @@ +Oh, the sudden calamity! +How awesome the sudden calamity! +And what could make thee conceive what that sudden calamity will be? +[It will occur] on the Day when men will be like moths swarming in confusion, +and the mountains will be like fluffy tufts of wool.... +And then, he whose weight [of good deeds] is heavy in the balance +shall find himself in a happy' state of life; +whereas he whose weight is light in the balance +shall be engulfed by an abyss. +And what could make thee conceive what that [abyss] will be? +A fire hotly burning! diff --git a/App/Resources/Recitations/en.lproj/102_Greed-for-More-and-More.txt b/App/Resources/Recitations/en.lproj/102_Greed-for-More-and-More.txt new file mode 100644 index 0000000..e6b9076 --- /dev/null +++ b/App/Resources/Recitations/en.lproj/102_Greed-for-More-and-More.txt @@ -0,0 +1,8 @@ +You are obsessed by greed for more and more +until you go down to your graves. +Nay, in time you will come to understand! +And once again: Nay, in time you will come to understand! +Nay, if you could but understand [it] with an understanding [born] of certainty, +you would indeed, most surely, behold the blazing fire [of hell]! +In the end you will indeed, most surely, behold it with the eye of certainty: +and on that Day you will most surely be called to account for [what you did with] the boon of life! diff --git a/App/Resources/Recitations/en.lproj/104_The-Slanderer.txt b/App/Resources/Recitations/en.lproj/104_The-Slanderer.txt index e4c9a79..2462781 100644 --- a/App/Resources/Recitations/en.lproj/104_The-Slanderer.txt +++ b/App/Resources/Recitations/en.lproj/104_The-Slanderer.txt @@ -1,9 +1,9 @@ Woe unto every slanderer, fault-finder! -(Woe unto him) who amasses wealth and counts it a safeguard, +[Woe unto him] who amasses wealth and counts it a safeguard, thinking that his wealth will make him live forever! -Nay, but (in the life to come such as) he shall indeed be abandoned to crushing torment! +Nay, but [in the life to come such as] he shall indeed be abandoned to crushing torment! And what could make thee conceive what that crushing torment will be? A fire kindled by God, -which will rise over the (guilty) hearts: +which will rise over the [guilty] hearts: verily, it will close in upon them in endless columns! diff --git a/App/Resources/Recitations/en.lproj/107_Assistance.txt b/App/Resources/Recitations/en.lproj/107_Assistance.txt index d163867..4dace41 100644 --- a/App/Resources/Recitations/en.lproj/107_Assistance.txt +++ b/App/Resources/Recitations/en.lproj/107_Assistance.txt @@ -1,7 +1,7 @@ -Hast thou ever considered (the kind of man) who gives the lie to all moral law? -Behold, it is this (kind of man) that thrusts the orphan away, +Hast thou ever considered [the kind of man] who gives the lie to all moral law? +Behold, it is this [kind of man] that thrusts the orphan away, and feels no urge to feed the needy. Woe, then, unto those praying ones whose hearts from their prayer are remote those who want only to be seen and praised, -and, withal, deny all assistance (to their fellow-men)! +and, withal, deny all assistance [to their fellow-men]! diff --git a/App/Resources/Recitations/en.lproj/108_Good-in-Abundance.txt b/App/Resources/Recitations/en.lproj/108_Good-in-Abundance.txt index 313045d..22e3bbf 100644 --- a/App/Resources/Recitations/en.lproj/108_Good-in-Abundance.txt +++ b/App/Resources/Recitations/en.lproj/108_Good-in-Abundance.txt @@ -1,3 +1,3 @@ Behold, We have bestowed upon thee good in abundance: -hence, pray unto thy Sustainer (alone), and sacrifice (unto Him alone). -Verily, he that hates thee has indeed been cut off (from all that is good)! +hence, pray unto thy Sustainer [alone], and sacrifice [unto Him alone]. +Verily, he that hates thee has indeed been cut off [from all that is good]! diff --git a/App/Resources/Recitations/en.lproj/109_Those-Who-Deny-the-Truth.txt b/App/Resources/Recitations/en.lproj/109_Those-Who-Deny-the-Truth.txt index bbe13b6..baa843d 100644 --- a/App/Resources/Recitations/en.lproj/109_Those-Who-Deny-the-Truth.txt +++ b/App/Resources/Recitations/en.lproj/109_Those-Who-Deny-the-Truth.txt @@ -1,6 +1,6 @@ Say: "O you who deny the truth! "I do not worship that which you worship, and neither do you worship that which I worship! -"And I will not worship that which you have (ever) worshipped, -and neither will you (ever) worship that which I worship. +"And I will not worship that which you have [ever] worshipped, +and neither will you [ever] worship that which I worship. Unto you, your moral law, and unto me, mine !" diff --git a/App/Resources/Recitations/en.lproj/111_The-Twisted-Strands.txt b/App/Resources/Recitations/en.lproj/111_The-Twisted-Strands.txt index b133af0..e4d289e 100644 --- a/App/Resources/Recitations/en.lproj/111_The-Twisted-Strands.txt +++ b/App/Resources/Recitations/en.lproj/111_The-Twisted-Strands.txt @@ -1,5 +1,5 @@ Doomed are the hands of him of the glowing countence: and doomed is he! What will his wealth avail him, and all that he has gained? -(In the life to come) he shall have to endure a fire fiercely glowing; +[In the life to come] he shall have to endure a fire fiercely glowing; together with his wife, that carrier of evil tales, -(who bears) around her neck a rope of twisted strands! +[who bears] around her neck a rope of twisted strands! diff --git a/App/Resources/Recitations/en.lproj/114_Men.txt b/App/Resources/Recitations/en.lproj/114_Men.txt index 0a0efe6..bda443a 100644 --- a/App/Resources/Recitations/en.lproj/114_Men.txt +++ b/App/Resources/Recitations/en.lproj/114_Men.txt @@ -3,4 +3,4 @@ Say: "I seek refuge with the Sustainer of men, - "the God of men, "from the evil of the whispering, elusive tempter "who whispers in the hearts of men -"from all (temptation to evil by) invisible forces as well as men." +"from all [temptation to evil by] invisible forces as well as men." diff --git a/App/Resources/Recitations/tr.lproj/090_The-Land.txt b/App/Resources/Recitations/tr.lproj/090_The-Land.txt new file mode 100644 index 0000000..24e37a5 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/090_The-Land.txt @@ -0,0 +1,22 @@ +Ben bu beldeyi tanıklığa çağırırım, +senin serbestçe yaşadığın bu beldeyi, +ve (tanıklığa çağırırım) anne-babayı ve çocukları: +Gerçek şu ki, Biz insanı acı, sıkıntı ve imtihan (ile yüklü bir hayat)a gönderdik. +İnsan, kimsenin kendi üzerinde güç sahibi olmadığını mı zannediyor? +Övünüp duruyor: "Ben, yığınla servet tükettim!" +Peki, kimsenin kendisini görmediğini mi sanıyor? +Biz ona iki göz vermedik mi? +Bir dil ve bir çift dudak, +ve ona (kötülüğün ve iyiliğin) iki yolunu da göstermedik mi? +Ama o, sarp yokuşa tırmanmayı denemedi... +Bilir misin nedir o sarp yokuş? +⁋ +(O,) boynunu (günah zincirinden) kurtarmaktır; +yahut (kendi) aç iken (başkasını) doyurmaktır, +yakını olan bir yetimi, +yahut toprağa uzanıp kalmış olan (yabancı) bir yoksulu, +ve imana ermişlerden ve birbirine sabrı ve merhameti tavsiye edenlerden olmaktır. +İşte böyleleri dürüstlüğe ve erdemliliğe erişmiş olanlardır; +Bizim mesajlarımızın doğruluğunu inkara şartlanmış olanlar ise +kötülüğe batmış kimselerdir, +üzerlerine salınmış ateş (ile). diff --git a/App/Resources/Recitations/tr.lproj/091_The-Sun.txt b/App/Resources/Recitations/tr.lproj/091_The-Sun.txt new file mode 100644 index 0000000..77f3718 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/091_The-Sun.txt @@ -0,0 +1,18 @@ +Güneşi ve onun aydınlık veren parlaklığını düşün, +ve güneşi(n ışığını) yansıtan ayı! +Dünyayı gün ışığına çıkaran gündüzü düşün, +ve onu karanlığa boğan geceyi! +Gökyüzünü ve onun hârika yapısını düşün, +ve yeryüzünü, onun (uçsuz bucaksız) genişliğini! +İnsan benliğini düşün ve onun nasıl (yaratılış) amacına uygun şekillendirildiğini; +ve nasıl ahlakî zaaflarla olduğu kadar Allah'a karşı sorumluluk bilinciyle de donatıldığını! +Her kim (benliğini) arındırırsa, kesinlikle mutluluğa erişecektir, +onu (karanlığa) gömen ise hüsrandadır. +⁋ +Semûd (kavmi,) kaba bir küstahlıkla (bu) hakikati yalan saydı; +içlerinden en onulmaz azgınları, (zulüm yapmak için) ileri atılırken, +Allah'ın Elçisi onlara: "Şu dişi deve Allah'ındır, +öyleyse bırakın suyunu içsin (ve ona bir zarar vermeyin)!" demişti. +Ama onlar Elçi'yi (hiçe sayıp) yalanladılar ve deveyi vahşîce boğazladılar; +bunun üzerine Rableri, bu günahları yüzünden onları yıkıma uğrattı ve tümünü birden yok etti: +çünkü (onlardan) hiç biri başlarına gelecek şeyin korkusunu taşımıyordu. diff --git a/App/Resources/Recitations/tr.lproj/092_The-Night.txt b/App/Resources/Recitations/tr.lproj/092_The-Night.txt new file mode 100644 index 0000000..04231f2 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/092_The-Night.txt @@ -0,0 +1,22 @@ +Düşün (yeryüzünü) karanlığa boğan geceyi, +ve aydınlığı yükselten gündüzü! +Erkeğin ve dişinin yaratılışını düşün! +Gerçekte, (ey insanlar,) siz çok çeşitli hedefler peşindesiniz! +Her kim (başkaları için) harcar ve Allah'a karşı sorumluluk bilinci taşırsa, +ve nihaî güzelliğin/iyiliğin gerçekliğine inanırsa, +işte onun için (nihaî) huzur ve rahatlığa giden yolu kolaylaştıracağız. +Cimrilik yapana ve kendi-kendine yeterli olduğunu zannedene, +ve nihaî güzelliği/iyiliği yalanlayana gelince, +onun için zorluğa ve sıkıntıya giden yolu kolaylaştırırız: +bakalım serveti onu koruyacak mı (mezarına) girdiği zaman? +⁋ +Bakın, Bize düşen doğru yolu göstermektir; +ve hem öteki dünya, hem de (hayatınızın) bu ilk bölümü (üzerindeki hakimiyet) Bize aittir: +İşte, sizi alevler saçan ateşe karşı uyarıyorum; +(öyle bir ateş ki) kimse girmez, en onulmaz azgınlar dışında, +hakikati yalanlayan ve (ondan) yüz çeviren (azgınlar). +Ama, Allah'a karşı sorumluluğunun bilincinde olanlar (ateşten) uzak kalacak: +arınmak için servetini (başkalarına) harcayanlar, +gördüğü bir iyiliğin karşılığı olarak değil, +ama yalnızca yüce Rabbinin rızasını kazanmak için: +işte böyleleri de, zamanı geldiğinde sevinci tadacaklar. diff --git a/App/Resources/Recitations/tr.lproj/093_The-Bright-Morning-Hours.txt b/App/Resources/Recitations/tr.lproj/093_The-Bright-Morning-Hours.txt new file mode 100644 index 0000000..78eab97 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/093_The-Bright-Morning-Hours.txt @@ -0,0 +1,11 @@ +Aydınlık sabahı düşün, +ve durgun, karanlık geceyi. +Rabbin seni ne unuttu ne de darıldı: +öteki dünya senin için (hayatının) bu ilk bölümünden mutlaka daha iyi olacak! +Ve zamanı geldiğinde Rabbin sana (kalbinden geçeni) bağışlayacak ve seni hoşnut kılacak. +O seni yetim olarak bulup bir sığınak vermedi mi? +Ve yolunu kaybetmiş görüp seni doğru yola ulaştırmadı mı? +İhtiyaç içinde bulup seni tatmin etmedi mi? +Öyleyse yetime haksızlık yapma, +yardım isteyeni asla geri çevirme, +ve (her zaman) Rabbini(n) nimetlerini an. diff --git a/App/Resources/Recitations/tr.lproj/094_The-Opening-Up-of-the-Heart.txt b/App/Resources/Recitations/tr.lproj/094_The-Opening-Up-of-the-Heart.txt new file mode 100644 index 0000000..d9ee6bf --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/094_The-Opening-Up-of-the-Heart.txt @@ -0,0 +1,8 @@ +Biz kalbini aç(ıp ferahlat)madık mı, +ve üzerinden yükü kaldırmadık mı, +o belini büken (yükü)? +Şerefini ve itibarını yükseltmedik mi? +Elbette her güçlükle birlikte bir kolaylık vardır: +Şüphesiz, her güçlükle bir kolaylık! +Öyleyse (sıkıntıdan) kurtulduğun zaman sağlam dur, +ve yalnız Rabbine sevgi ile yönel. diff --git a/App/Resources/Recitations/tr.lproj/095_The-Fig.txt b/App/Resources/Recitations/tr.lproj/095_The-Fig.txt new file mode 100644 index 0000000..258efcb --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/095_The-Fig.txt @@ -0,0 +1,9 @@ +İnciri ve zeytini düşün, +ve Sina Dağını, +ve bu güvenli toprakları! +Gerçek şu ki biz insanı en güzel şekilde yaratırız, +ve sonra onu aşağıların en aşağısına indiririz, +iman edip doğru ve yararlı işler yapanlar hariç: +onlar için kesintisiz bir ödül vardır! +Öyleyse, (ey insan,) nedir bu ahlakî değerler sistemini yalanlamana yol açan? +Allah hükmedenlerin en adili değil mi? diff --git a/App/Resources/Recitations/tr.lproj/096_The-Germ-Cell.txt b/App/Resources/Recitations/tr.lproj/096_The-Germ-Cell.txt new file mode 100644 index 0000000..3263142 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/096_The-Germ-Cell.txt @@ -0,0 +1,20 @@ +Oku yaratan Rabbin adına, +insanı bir yumurta hücresinden yaratan! +Oku, çünkü Rabbin Sonsuz Kerem Sahibidir, +(insana) kalemi kullanmayı öğretendir, +insana bilmediğini belleten! +Gerçek şu ki insan fütursuzca azar, +ne zaman kendini yeterli görse: +oysa, herkes eninde sonunda Rabbine dönecektir. +Hiç düşündün mü şu engellemeye kalkışanı +(Allah'ın) bir kulu(nu) namazdan? +⁋ +Hiç düşündün mü o doğru yolda mıdır, +ya da Allah'a karşı sorumluluk bilinciyle yüklü mü? +Hiç düşündün mü onun hakikati yalanla(ma)yabileceğini ve sırtını (ona) dön(mey)ebileceğini? +O bilmez mi ki Allah (her şeyi) görür? +Hayır, eğer vazgeçmezse, onu alnından tutup sürükleyeceğiz, +o yalancı, isyankar alnından! +Bırak, kendi aklının (asılsız, düzmece) tavsiyelerini (yardımına) çağırsın, +(o zaman) Biz de semavî azap güçlerini çağırırız! +Hayır, ona kulak verme, ama (Allah'ın huzurunda) yere kapan ve (O'na) yakınlaş! diff --git a/App/Resources/Recitations/tr.lproj/097_Destiny.txt b/App/Resources/Recitations/tr.lproj/097_Destiny.txt new file mode 100644 index 0000000..5573b7d --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/097_Destiny.txt @@ -0,0 +1,6 @@ +Biz bu (ilahî kelâm)ı Kadir Gecesi'nde indirdik. +Bilir misin nedir Kadir Gecesi? +Kadir Gecesi bin aydan daha hayırlıdır: +o gece melekler, Rablerinin izniyle ilahî bir esin taşıyarak bölük bölük inerler; +(insanı) her türlü (kötülük)ten +emîn kılar bu (gece), tâ şafak vaktine kadar. diff --git a/App/Resources/Recitations/tr.lproj/098_The-Evidence-of-the-Truth.txt b/App/Resources/Recitations/tr.lproj/098_The-Evidence-of-the-Truth.txt new file mode 100644 index 0000000..6b092cf --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/098_The-Evidence-of-the-Truth.txt @@ -0,0 +1,23 @@ +Hakikati inkara şartlanmış olanlar, +-ister geçmiş vahyin mensuplarından isterse Allah'tan başkasına da ilahlık yakıştıranlardan (olsunlar)- +kendilerine hakikatin açık kanıtları gelmeden (O'nun tarafından) gözden çıkarılacak değillerdir: +(onlara) kutsanmış tertemiz vahiyler ileten Allah'tan bir elçi (gelmeden), +doğruluğu kesin ve açık hükümler taşıyan (vahiyler ileten bir elçi). +Ama kendilerine daha önce vahiy verilenler, +hakikatin böyle bir kanıtı geldikten sonra (inanç) birlikteliklerini bozdular. +Oysa kendilerine yalnızca Allah'a ibadet etmeleri, +bütün içtenlikleriyle yalnız O'na iman ederek bâtıl olan her şeyden uzak durmaları; +namazlarında dikkatli ve devamlı olmaları; +ve karşılıksız harcamada bulunmaları emrolunmuştu: +çünkü bu, doğruluğu kesin ve açık olan bir ahlakî değerler sistemidir. +⁋ +Gerçek şu ki, (bütün kanıtlara rağmen) hakikati inkara şartlanmış olanlar, +-ister geçmiş vahyin mensuplarından, isterse Allah'tan başkasına da ilahlık yakıştıranlardan (olsunlar)- +kendilerini cehennem ateşinde kalıcı bulacaklar: +onlar, bütün yaratıkların en şerlileridir. +(Ve) iman edip doğru ve yararlı işlerde bulunanlar, +işte onlar, bütün yaratıkların en hayırlılarıdır. +Onların ödülleri Allah katında (kendilerini bekler:) içinden ırmaklar akan, +sonsuza kadar kalacakları sınırsız nimet bahçeleri; +Allah onlardan hoşnuttur ve onlar da Allah'tan: +bütün bunlar Rablerini ürpertiyle hissedenler içindir! diff --git a/App/Resources/Recitations/tr.lproj/099_The-Earthquake.txt b/App/Resources/Recitations/tr.lproj/099_The-Earthquake.txt new file mode 100644 index 0000000..ace45ba --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/099_The-Earthquake.txt @@ -0,0 +1,9 @@ +Yer, o (son) müthiş sarsıntı ile sarsıldığında, +ve yeryüzü ağırlıklarını attı(ğında), +ve insan: "Ona ne oluyor?" diye bağırdı(ğında), +o Gün yer, bütün haberlerini ortaya dökecek, +Rabbinin vahyettiği şekilde. +O Gün bütün insanlar, +(geçmiş) fiillerini görmek üzere biri öbüründen ayrılmış olarak ortaya çıkacaklar. +Ve kim zerre kadar iyilik yapmışsa, onu(n karşılığını) görecek, +kim de zerre kadar kötülük yapmışsa onu(n karşılığını) görecektir. diff --git a/App/Resources/Recitations/tr.lproj/100_The-Chargers.txt b/App/Resources/Recitations/tr.lproj/100_The-Chargers.txt new file mode 100644 index 0000000..de26a61 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/100_The-Chargers.txt @@ -0,0 +1,11 @@ +Ooo! Nefes nefese koşan binek atları, +ateş saçan kıvılcımlar, +sabah vakti akına koşan, +böylece toz bulutları yükselten, +(körcesine) bir ordunun içine dalan! +Gerçek şu ki, insan Rabbine karşı çok nankördür; +ve kendisi (de) buna şahittir: +çünkü servet hırsına kapılmıştır. +Ama bilmez mi ki (Ahiret Günü,) herkes mezarından ayağa kalkıp dışarı çıktığında, +ve insanların kalplerinde (gizli) olan her şey ortaya döküldüğünde, +işte o Gün Rableri, onların her halinden haberdar (olduğunu gösterecek)tir? diff --git a/App/Resources/Recitations/tr.lproj/101_The-Sudden-Calamity.txt b/App/Resources/Recitations/tr.lproj/101_The-Sudden-Calamity.txt new file mode 100644 index 0000000..610a0b2 --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/101_The-Sudden-Calamity.txt @@ -0,0 +1,11 @@ +Ah! Apansız (gelen) bir bela!. +Ne korkunçtur apansız (gelen) bela! +Bilir misin nedir, nasıl olacaktır o apansız bela? +(O,) insanların şaşkın vaziyette uçuşan pervanelere benzeyeceği Gün, +ve dağların yumuşak yün topaklarını andıracağı Gün (vuku bulacaktır). +O zaman, (iyiliklerinin) tartısı ağır basan +kendisini mutlu bir hayat içinde bulacak; +tartısı hafif gelen ise +bir uçurumun girdabına sürüklenecektir.. +Bilir misin nedir o (uçurum)? +Dağlayan bir ateş!. diff --git a/App/Resources/Recitations/tr.lproj/102_Greed-for-More-and-More.txt b/App/Resources/Recitations/tr.lproj/102_Greed-for-More-and-More.txt new file mode 100644 index 0000000..54879fa --- /dev/null +++ b/App/Resources/Recitations/tr.lproj/102_Greed-for-More-and-More.txt @@ -0,0 +1,8 @@ +Bir aç-gözlülük saplantısı içindesiniz, +mezarlarınıza girinceye dek (süren). +Ama, zamanı geldiğinde anlayacaksınız! +Evet, evet! Zamanı geldiğinde anlayacaksınız! +Hayır, (onu) tartışılmaz bir kesinlikle anlasaydınız, +(cehennemin) yakıcı ateşini mutlaka görürdünüz! +Sonunda onu keskin bir gözle mutlaka göreceksiniz: +ve o Gün hayatın nimetleri(ne karşı yaptıklarınız) için mutlaka sorguya çekileceksiniz! diff --git a/App/Resources/de.lproj/Localizable.strings b/App/Resources/de.lproj/Localizable.strings index 551e877..bc5fc12 100644 --- a/App/Resources/de.lproj/Localizable.strings +++ b/App/Resources/de.lproj/Localizable.strings @@ -12,6 +12,8 @@ "RAKAH_COMPONENT.SALATUL_IBRAHIMIYYAH.NAME" = "Salat al-Ibrahimiyyah"; +"RAKAH_COMPONENT.SPLIT_RECITATION_TITLE" = "%1$@ – Teil %2$d von %3$d"; + "RAKAH_COMPONENT.STRAIGHTENING_UP.NAME" = "Aufrechte Position"; "RAKAH_COMPONENT.TAAWWUDH.NAME" = "Ta'awwudh"; @@ -22,26 +24,52 @@ "RECITATION.ASSISTANCE.NAME" = "al-Ma'un (Hilfeleistung)"; +"RECITATION.DESTINY.NAME" = "al-Qadr (Schicksal)"; + "RECITATION.GOOD_IN_ABUNDANCE.NAME" = "al-Kawthar (Gutes in Fülle)"; +"RECITATION.GREED_FOR_MORE_AND_MORE.NAME" = "at-Takathur (Gier nach mehr und mehr)"; + "RECITATION.MEN.NAME" = "an-Nas (Die Menschen)"; "RECITATION.QURAYSH.NAME" = "Quraysch"; "RECITATION.SUCCOUR.NAME" = "an-Nasr (Beistand)"; +"RECITATION.THE_BRIGHT_MORNING_HOURS.NAME" = "ad-Duha (Die hellen Morgenstunden)"; + +"RECITATION.THE_CHARGERS.NAME" = "al-'Adiyat (Die Streitrosse)"; + "RECITATION.THE_DECLERATIION_OF_GODS_PERFECTION.NAME" = "al-Ikhlas (Die Erklärung von [Gottes] Vollkommenheit)"; +"RECITATION.THE_EARTHQUAKE.NAME" = "az-Zalzala (Das Erdbeben)"; + "RECITATION.THE_ELEPHANT.NAME" = "al-Fil (Der Elefant)"; +"RECITATION.THE_EVIDENCE_OF_THE_TRUTH.NAME" = "al-Bayyina (Der Beweis der Wahrheit)"; + +"RECITATION.THE_FIG.NAME" = "at-Tin (Die Feige)"; + "RECITATION.THE_FLIGHT_OF_TIME.NAME" = "al-'Asr (Das Verfliegen der Zeit)"; +"RECITATION.THE_GERM_CELL.NAME" = "al-'Alaq (Die Keimzelle)"; + +"RECITATION.THE_LAND.NAME" = "al-Balad (Das Land)"; + +"RECITATION.THE_NIGHT.NAME" = "al-Layl (Die Nacht)"; + "RECITATION.THE_OPENING.NAME" = "al-Fatiha (Die Eröffnung)"; +"RECITATION.THE_OPENING_UP_OF_THE_HEART.NAME" = "asch-Scharh (Das Öffnen des Herzens)"; + "RECITATION.THE_RISING_DAWN.NAME" = "al-Falaq (Die aufgehende Morgendämmerung)"; "RECITATION.THE_SLANDERER.NAME" = "al-Humaza (Der Verleumder)"; +"RECITATION.THE_SUDDEN_CALAMITY.NAME" = "al-Qari'a (Das plötzliche Unheil)"; + +"RECITATION.THE_SUN.NAME" = "asch-Schams (Die Sonne)"; + "RECITATION.THE_TWISTED_STRANDS.NAME" = "al-Masad (Die gedrehten Stränge)"; "RECITATION.THOSE_WHO_DENY_THE_TRUTH.NAME" = "al-Kafirun (Jene, welche die Wahrheit leugnen)"; @@ -78,11 +106,17 @@ "SETTINGS.FEEDBACK_BUTTON.TITLE" = "Feedback senden"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Zeitfaktor wechselnder Text"; +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.RESET_MESSAGE" = "Aktuelle Position in geteilter Sure wurde gelöscht."; + +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.TITLE" = "Erlaube längere Rezitationen"; + +"SETTINGS.PRAYER_SECTION.ALLOW_SPLITTING_RECITATIONS.TITLE" = "Inkludiere lange Suren durch Aufteilung"; + +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Geschwindigkeit der Koransure"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Name für wechselnden Text"; +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Name der Koransure"; -"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Zeitfaktor unveränderte Texte"; +"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Geschwindigkeit anderer Texte"; "SETTINGS.PRAYER_SECTION.MOVEMENT_SOUND_INSTRUMENT.TITLE" = "Bewegungsgeräusch"; diff --git a/App/Resources/en.lproj/Localizable.strings b/App/Resources/en.lproj/Localizable.strings index 978b2ee..9e2f7ff 100644 --- a/App/Resources/en.lproj/Localizable.strings +++ b/App/Resources/en.lproj/Localizable.strings @@ -12,6 +12,8 @@ "RAKAH_COMPONENT.SALATUL_IBRAHIMIYYAH.NAME" = "Salatul-'Ibrahimiyyah"; +"RAKAH_COMPONENT.SPLIT_RECITATION_TITLE" = "%1$@ – part %2$d of %3$d"; + "RAKAH_COMPONENT.STRAIGHTENING_UP.NAME" = "Straightening Up"; "RAKAH_COMPONENT.TAAWWUDH.NAME" = "Ta'awwudh"; @@ -22,26 +24,52 @@ "RECITATION.ASSISTANCE.NAME" = "al-Ma'Un (Assistance)"; +"RECITATION.DESTINY.NAME" = "Al-Qadr (Destiny)"; + "RECITATION.GOOD_IN_ABUNDANCE.NAME" = "al-Kawthar (Good in Abundance)"; +"RECITATION.GREED_FOR_MORE_AND_MORE.NAME" = "At-Takathur (Greed For More And More)"; + "RECITATION.MEN.NAME" = "an-Nas (Men)"; "RECITATION.QURAYSH.NAME" = "Quraysch"; "RECITATION.SUCCOUR.NAME" = "an-Nasr (Succour)"; +"RECITATION.THE_BRIGHT_MORNING_HOURS.NAME" = "Ad-Duha (The Bright Morning Hours)"; + +"RECITATION.THE_CHARGERS.NAME" = "Al-Adiyat (The Chargers)"; + "RECITATION.THE_DECLERATIION_OF_GODS_PERFECTION.NAME" = "al-Ikhlas (The Decleration Of [God's] Perfection)"; +"RECITATION.THE_EARTHQUAKE.NAME" = "Al-Zalzalah (The Earthquake)"; + "RECITATION.THE_ELEPHANT.NAME" = "al-Fil (The Elephant)"; +"RECITATION.THE_EVIDENCE_OF_THE_TRUTH.NAME" = "Al-Bayyinah (The Evidence Of The Truth)"; + +"RECITATION.THE_FIG.NAME" = "At-Tin (The Fig)"; + "RECITATION.THE_FLIGHT_OF_TIME.NAME" = "al-'Asr (The Flight Of Time)"; +"RECITATION.THE_GERM_CELL.NAME" = "Al-Alaq (The Germ-Cell)"; + +"RECITATION.THE_LAND.NAME" = "Al-Balad (The Land)"; + +"RECITATION.THE_NIGHT.NAME" = "Al-Layl (The Night)"; + "RECITATION.THE_OPENING.NAME" = "al-Fatiha (The Opening)"; +"RECITATION.THE_OPENING_UP_OF_THE_HEART.NAME" = "Ash-Sharh (The Opening-Up Of The Heart)"; + "RECITATION.THE_RISING_DAWN.NAME" = "al-Falaq (The Rising Dawn)"; "RECITATION.THE_SLANDERER.NAME" = "al-Humaza (The Slanderer)"; +"RECITATION.THE_SUDDEN_CALAMITY.NAME" = "Al-Qariah (The Sudden Calamity)"; + +"RECITATION.THE_SUN.NAME" = "Ash-Shams (The Sun)"; + "RECITATION.THE_TWISTED_STRANDS.NAME" = "al-Masad (The Twisted Strands)"; "RECITATION.THOSE_WHO_DENY_THE_TRUTH.NAME" = "al-Kafirun (Those Who Deny The Truth)"; @@ -78,11 +106,17 @@ "SETTINGS.FEEDBACK_BUTTON.TITLE" = "Send Feedback"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Changing text speed"; +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.RESET_MESSAGE" = "Current position in split Surah was cleared."; + +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.TITLE" = "Allow longer recitations"; + +"SETTINGS.PRAYER_SECTION.ALLOW_SPLITTING_RECITATIONS.TITLE" = "Include long surah by splitting them"; + +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Quran sura speed"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Changing text name"; +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Quran sura name"; -"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Fixed texts speed"; +"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Other texts speed"; "SETTINGS.PRAYER_SECTION.MOVEMENT_SOUND_INSTRUMENT.TITLE" = "Movement sound"; diff --git a/App/Resources/tr.lproj/Localizable.strings b/App/Resources/tr.lproj/Localizable.strings index a51e462..7992b58 100644 --- a/App/Resources/tr.lproj/Localizable.strings +++ b/App/Resources/tr.lproj/Localizable.strings @@ -12,6 +12,8 @@ "RAKAH_COMPONENT.SALATUL_IBRAHIMIYYAH.NAME" = "Salatul-'Ibrahimiyyah"; +"RAKAH_COMPONENT.SPLIT_RECITATION_TITLE" = "%1$@ – Bölüm %2$d/%3$d"; + "RAKAH_COMPONENT.STRAIGHTENING_UP.NAME" = "Rükûdan Kalkış"; "RAKAH_COMPONENT.TAAWWUDH.NAME" = "Eüzü-billah"; @@ -22,26 +24,52 @@ "RECITATION.ASSISTANCE.NAME" = "Ma'un (Yardımlaşma)"; +"RECITATION.DESTINY.NAME" = "Kadr (Kudret)"; + "RECITATION.GOOD_IN_ABUNDANCE.NAME" = "Kevser (Bolluk)"; +"RECITATION.GREED_FOR_MORE_AND_MORE.NAME" = "Tekasür (Çoğaltma Yarışı)"; + "RECITATION.MEN.NAME" = "Nas (Halk)"; "RECITATION.QURAYSH.NAME" = "Kureyş"; "RECITATION.SUCCOUR.NAME" = "Nasr (Yardım)"; +"RECITATION.THE_BRIGHT_MORNING_HOURS.NAME" = "Duha (Kuşluk)"; + +"RECITATION.THE_CHARGERS.NAME" = "Adiyat (Aşanlar)"; + "RECITATION.THE_DECLERATIION_OF_GODS_PERFECTION.NAME" = "İhlas"; +"RECITATION.THE_EARTHQUAKE.NAME" = "Zilzal (Deprem)"; + "RECITATION.THE_ELEPHANT.NAME" = "Fil"; +"RECITATION.THE_EVIDENCE_OF_THE_TRUTH.NAME" = "Beyyine (Kanıt)"; + +"RECITATION.THE_FIG.NAME" = "Tin (İncir)"; + "RECITATION.THE_FLIGHT_OF_TIME.NAME" = "'Asr (Çağ)"; +"RECITATION.THE_GERM_CELL.NAME" = "Alak (Embriyo)"; + +"RECITATION.THE_LAND.NAME" = "Beled (Kent)"; + +"RECITATION.THE_NIGHT.NAME" = "Leyl (Gece)"; + "RECITATION.THE_OPENING.NAME" = "Fatiha (Açılış)"; +"RECITATION.THE_OPENING_UP_OF_THE_HEART.NAME" = "Şarh (Sakinleştirme)"; + "RECITATION.THE_RISING_DAWN.NAME" = "Felak (Şafak)"; "RECITATION.THE_SLANDERER.NAME" = "Hümeze (Dedikoducu)"; +"RECITATION.THE_SUDDEN_CALAMITY.NAME" = "Karia (Şok)"; + +"RECITATION.THE_SUN.NAME" = "Şems (Güneş)"; + "RECITATION.THE_TWISTED_STRANDS.NAME" = "Tebbet (Diken)"; "RECITATION.THOSE_WHO_DENY_THE_TRUTH.NAME" = "Kafirun (İnkarcılar)"; @@ -78,11 +106,17 @@ "SETTINGS.FEEDBACK_BUTTON.TITLE" = "Geribildirim yolla"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Değişen metin hızı"; +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.RESET_MESSAGE" = "Bölünmüş suredeki şu anki pozisyon silindi."; + +"SETTINGS.PRAYER_SECTION.ALLOW_LONGER_RECITATIONS.TITLE" = "Daha uzun surelere izin ver"; + +"SETTINGS.PRAYER_SECTION.ALLOW_SPLITTING_RECITATIONS.TITLE" = "Uzun surelere parçalayarak izin ver"; + +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT.TITLE" = "Kur'an âyet hızı"; -"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Değişen metin adı"; +"SETTINGS.PRAYER_SECTION.CHANGING_TEXT_NAME.TITLE" = "Kur'an âyet adı"; -"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Değişmeyen metin hızı"; +"SETTINGS.PRAYER_SECTION.FIXED_TEXTS.TITLE" = "Diğer metin hızı"; "SETTINGS.PRAYER_SECTION.MOVEMENT_SOUND_INSTRUMENT.TITLE" = "Hareket tonu"; diff --git a/App/Sources/AppDelegate.swift b/App/Sources/AppDelegate.swift index b980ee9..1dd7e8e 100644 --- a/App/Sources/AppDelegate.swift +++ b/App/Sources/AppDelegate.swift @@ -22,7 +22,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // setup global stuff Logger.shared.setup() ErrorHandler.shared.setup(window: window!) - Branding.shared.setup(window: window!) // start initial flow initialFlowCtrl = SettingsFlowController() diff --git a/App/Sources/Globals/AudioPlayer.swift b/App/Sources/Globals/AudioPlayer.swift index aa1bac2..852e277 100644 --- a/App/Sources/Globals/AudioPlayer.swift +++ b/App/Sources/Globals/AudioPlayer.swift @@ -14,7 +14,7 @@ final class AudioPlayer { // MARK: - Instance Methods func movementSoundUrl(name: String, instrument: String) -> URL? { - return Bundle.main.url(forResource: instrument, withExtension: "caf", subdirectory: name) + Bundle.main.url(forResource: instrument, withExtension: "caf", subdirectory: name) } func playSound(at url: URL) { diff --git a/App/Sources/Globals/Branding.swift b/App/Sources/Globals/Branding.swift deleted file mode 100644 index 19d1664..0000000 --- a/App/Sources/Globals/Branding.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// Created by Cihat Gündüz on 23.01.17. -// Copyright © 2017 Flinesoft. All rights reserved. -// - -import UIKit - -final class Branding { - // MARK: - Stored Type Properties - static let shared = Branding() - - // MARK: - Instance Methods - func setup(window: UIWindow) { - window.tintColor = Colors.Theme.primary - } - - func setupViewControllerAppearance(_ viewController: UIViewController) { - viewController.navigationController?.navigationBar.barTintColor = Colors.Theme.barBackground - viewController.navigationController?.navigationBar.titleTextAttributes = [ - NSAttributedString.Key.foregroundColor: Colors.Theme.secondary - ] - - self.setupViewAppearance(viewController.view) - } - - func setupViewAppearance(_ view: UIView) { - view.tintColor = Colors.Theme.accent - } -} diff --git a/App/Sources/Globals/Branding/BrandedFormViewController.swift b/App/Sources/Globals/Branding/BrandedFormViewController.swift deleted file mode 100644 index cbd53af..0000000 --- a/App/Sources/Globals/Branding/BrandedFormViewController.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// Created by Cihat Gündüz on 23.01.17. -// Copyright © 2017 Flinesoft. All rights reserved. -// - -import Eureka -import UIKit - -class BrandedFormViewController: FormViewController { - // MARK: - View Lifecycle Methods - override func viewDidLoad() { - super.viewDidLoad() - - Branding.shared.setupViewControllerAppearance(self) - } -} diff --git a/App/Sources/Globals/Branding/BrandedNavigationController.swift b/App/Sources/Globals/Branding/BrandedNavigationController.swift deleted file mode 100644 index 20b81b5..0000000 --- a/App/Sources/Globals/Branding/BrandedNavigationController.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by Cihat Gündüz on 25.01.17. -// Copyright © 2017 Flinesoft. All rights reserved. -// - -import UIKit - -class BrandedNavigationController: UINavigationController { - // MARK: - View Lifecycle Methods - override func viewDidLoad() { - super.viewDidLoad() - - Branding.shared.setupViewControllerAppearance(self) - } - - override var shouldAutorotate: Bool { - return topViewController!.shouldAutorotate - } - - override var supportedInterfaceOrientations: UIInterfaceOrientationMask { - return topViewController!.supportedInterfaceOrientations - } -} diff --git a/App/Sources/Globals/Branding/BrandedViewController.swift b/App/Sources/Globals/Branding/BrandedViewController.swift deleted file mode 100644 index 9d85f80..0000000 --- a/App/Sources/Globals/Branding/BrandedViewController.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Created by Cihat Gündüz on 23.01.17. -// Copyright © 2017 Flinesoft. All rights reserved. -// - -import UIKit - -class BrandedViewController: UIViewController { - // MARK: - View Lifecycle Methods - override func viewDidLoad() { - super.viewDidLoad() - - Branding.shared.setupViewControllerAppearance(self) - } -} diff --git a/App/Sources/Globals/Extensions/UIViewControllerExt.swift b/App/Sources/Globals/Extensions/UIViewControllerExt.swift new file mode 100644 index 0000000..b989f16 --- /dev/null +++ b/App/Sources/Globals/Extensions/UIViewControllerExt.swift @@ -0,0 +1,20 @@ +// +// Created by Cihat Gündüz on 16.10.21. +// Copyright © 2021 Flinesoft. All rights reserved. +// + +import UIKit +import NotificationToast + +extension UIViewController { + func showToast(message: String) { + let toastView = ToastView( + title: message, + titleFont: UIFont.systemFont(ofSize: UIFont.labelFontSize, weight: .regular), + position: .bottom + ) + toastView.displayTime = TimeInterval.seconds(3) + toastView.hideOnTap = false + toastView.show() + } +} diff --git a/App/Sources/Models/Prayer.swift b/App/Sources/Models/Prayer.swift index 133c350..7bc7bbe 100644 --- a/App/Sources/Models/Prayer.swift +++ b/App/Sources/Models/Prayer.swift @@ -4,6 +4,7 @@ // import Foundation +import SwiftyUserDefaults /// The "physical, mental, and spiritual act of worship that is observed five times every day at prescribed times." /// - Wikipedia (https://en.wikipedia.org/wiki/Salah) @@ -17,28 +18,76 @@ class Prayer { /// /// - Parameters: /// - rakatCount: The number of rakats to be included in the prayer. + /// - allowLongerRecitations: If `true`, longer (bot not very long) recitations should be allowed. + /// - allowSplittingRecitations: If `true`, the splitting of (longer and) very long recitations should be allowed. /// - Returns: The Prayer object. init( - rakatCount: UInt + rakatCount: UInt, + allowLongerRecitations: Bool, + allowSplittingRecitations: Bool ) { self.rakat = { var rakat: Rakat = [] - var usedStandingRecitationFileNames: [String] = [] + var usedStandingRecitations: [Recitation] = Defaults.recentlyUsedRecitations + let partLength: Recitation.MaxArabicWordsPerStanding = allowLongerRecitations ? .longer : .short + for num in 1...rakatCount { + var standingRecitationPart: RecitationPart? + + if num <= 2 { + if allowSplittingRecitations { + if let nextRecitationPart = Defaults.nextRecitationPart { + standingRecitationPart = nextRecitationPart + Defaults.nextRecitationPart = nextRecitationPart.nextPart() + } + else { + let allowedStandingRecitations = Recitation.allCases.dropFirst() + .filter { !usedStandingRecitations.contains($0) } + let recitation = allowedStandingRecitations.randomElement()! + let totalParts = recitation.totalParts(maxWordsPerPart: partLength) + + standingRecitationPart = .init(recitation: recitation, partLength: partLength, totalParts: totalParts) + Defaults.nextRecitationPart = standingRecitationPart!.nextPart() + } + } + else { + let allowedStandingRecitations = Recitation.allCases.dropFirst() + .filter { $0.totalParts(maxWordsPerPart: allowLongerRecitations ? .longer : .short) == 1 } + .filter { !usedStandingRecitations.contains($0) } + let recitation = allowedStandingRecitations.randomElement()! + standingRecitationPart = .init(recitation: recitation, partLength: partLength) + } + } + else { + standingRecitationPart = nil + } + let rakah = Rakah( isBeginningOfPrayer: num == 1, - includesStandingRecitation: num <= 2, + standingRecitationPart: standingRecitationPart, includesSittingRecitation: num % 2 == 0 || num == rakatCount, - isEndOfPrayer: num == rakatCount, - excludeStandingRecitationNames: usedStandingRecitationFileNames + isEndOfPrayer: num == rakatCount ) rakat.append(rakah) - if let standingRecitationFileName = rakah.standingRecitationFileName { - usedStandingRecitationFileNames.append(standingRecitationFileName) + + if let standingRecitationPart = standingRecitationPart, + !usedStandingRecitations.contains(standingRecitationPart.recitation) + { + usedStandingRecitations.append(standingRecitationPart.recitation) } } + // TODO: [cg_2021-10-16] increase the number 20 even more when more Surah are added (up to 50) + Defaults.recentlyUsedRecitations = usedStandingRecitations.suffix(allowSplittingRecitations ? 20 : 10) + return rakat }() } } + +extension DefaultsKeys { + var nextRecitationPart: DefaultsKey { .init("NextRecitationPart") } + var recentlyUsedRecitations: DefaultsKey<[Recitation]> { + .init("RecentlyUsedRecitations", defaultValue: Array.init()) + } +} diff --git a/App/Sources/Models/PrayerState.swift b/App/Sources/Models/PrayerState.swift index 76dd9f8..2064eb6 100644 --- a/App/Sources/Models/PrayerState.swift +++ b/App/Sources/Models/PrayerState.swift @@ -36,13 +36,13 @@ class PrayerState { } // MARK: - Computed Instance Properties - private var currentRakah: Rakah { return prayer.rakat[rakatIndex] } - private var currentComponent: RakahComponent { return currentRakah.components()[componentIndex] } - var currentArrow: Position.Arrow? { return previousPositon.arrow(forChangingTo: currentPosition) } - var currentLine: String { return currentComponent.spokenTextLines[lineIndex] } + private var currentRakah: Rakah { prayer.rakat[rakatIndex] } + private var currentComponent: RakahComponent { currentRakah.components()[componentIndex] } + var currentArrow: Position.Arrow? { previousPositon.arrow(forChangingTo: currentPosition) } + var currentLine: String { currentComponent.spokenTextLines[lineIndex] } private var readingSpeedupFactor: Double { - return currentComponent.isChangingText ? changingTextSpeedFactor : fixedTextsSpeedFactor + currentComponent.isChangingText ? changingTextSpeedFactor : fixedTextsSpeedFactor } var currentLineReadingTime: TimeInterval { diff --git a/App/Sources/Models/Rakah.swift b/App/Sources/Models/Rakah.swift index de3762e..bed2c02 100644 --- a/App/Sources/Models/Rakah.swift +++ b/App/Sources/Models/Rakah.swift @@ -15,33 +15,23 @@ typealias Rakat = [Rakah] class Rakah { // MARK: - Stored Instance Properties private let isBeginningOfPrayer: Bool - private let includesStandingRecitation: Bool private let includesSittingRecitation: Bool private let isEndOfPrayer: Bool - let standingRecitationFileName: String? + let standingRecitationPart: RecitationPart? + + private var includesStandingRecitation: Bool { standingRecitationPart != nil } // MARK: - Initializer init( isBeginningOfPrayer: Bool, - includesStandingRecitation: Bool, + standingRecitationPart: RecitationPart?, includesSittingRecitation: Bool, - isEndOfPrayer: Bool, - excludeStandingRecitationNames: [String] = [] + isEndOfPrayer: Bool ) { self.isBeginningOfPrayer = isBeginningOfPrayer - self.includesStandingRecitation = includesStandingRecitation self.includesSittingRecitation = includesSittingRecitation self.isEndOfPrayer = isEndOfPrayer - - if includesStandingRecitation { - let allowedStandingRecitationNames = Component.nonOpeningRecitationFileNames.filter { - !excludeStandingRecitationNames.contains($0) - } - self.standingRecitationFileName = allowedStandingRecitationNames.sample - } - else { - self.standingRecitationFileName = nil - } + self.standingRecitationPart = standingRecitationPart } // MARK: - Instance Methods @@ -54,11 +44,11 @@ class Rakah { components.append(RakahComponent(.taawwudh)) } - components.append(RakahComponent(.recitation(fileName: "001_The-Opening"))) + components.append(RakahComponent(.recitationPart(.init(recitation: .theOpening, partLength: .short)))) - if includesStandingRecitation { - let standingRecitation = RakahComponent(.recitation(fileName: standingRecitationFileName!)) - components.append(standingRecitation) + if let standingRecitationPart = standingRecitationPart { + let standingRecitationComponent = RakahComponent(.recitationPart(standingRecitationPart)) + components.append(standingRecitationComponent) } components.append(RakahComponent(.takbir(.bending))) @@ -100,7 +90,7 @@ extension Rakah { case takbir(Position) case openingSupplication case taawwudh - case recitation(fileName: String) + case recitationPart(RecitationPart) case ruku case straighteningUp // from Ruku case sajdah @@ -108,24 +98,5 @@ extension Rakah { case salatulIbrahimiyyah case rabbanagh case salam(Position) - - static let theOpeningRecitationFileName: String = "001_The-Opening" - - static let nonOpeningRecitationFileNames: [String] = [ - "103_The-Flight-of-Time", "104_The-Slanderer", "105_The-Elephant", "106_Quraysh", "107_Assistance", - "108_Good-in-Abundance", "109_Those-Who-Deny-the-Truth", "110_Succour", "111_The-Twisted-Strands", - "112_The-Declaration-of-Gods-Perfection", "113_The-Rising-Dawn", "114_Men", - ] - - static var all: [Component] { - let nonQuranicComponents: [Component] = [ - .takbir(.standing), .takbir(.bending), .takbir(.sitting), .takbir(.worship), - .openingSupplication, .taawwudh, .ruku, .straighteningUp, .sajdah, .tashahhud, - .salatulIbrahimiyyah, .rabbanagh, .salam(.salamRight), .salam(.salamLeft), - ] - let recitations = ([theOpeningRecitationFileName] + nonOpeningRecitationFileNames) - .map { Component.recitation(fileName: $0) } - return nonQuranicComponents + recitations - } } } diff --git a/App/Sources/Models/RakahComponent.swift b/App/Sources/Models/RakahComponent.swift index 8c91fc2..21275d7 100644 --- a/App/Sources/Models/RakahComponent.swift +++ b/App/Sources/Models/RakahComponent.swift @@ -87,71 +87,22 @@ class RakahComponent { isChangingText = false chapterNumber = nil - case .recitation(fileName: let fileName): - let l10n = L10n.Recitation.self + case let .recitationPart(recitationPart): + chapterNumber = recitationPart.recitation.rawValue - switch fileName { - case "001_The-Opening": - chapterNumber = 1 - name = l10n.TheOpening.name - - case "103_The-Flight-of-Time": - chapterNumber = 103 - name = l10n.TheFlightOfTime.name - - case "104_The-Slanderer": - chapterNumber = 104 - name = l10n.TheSlanderer.name - - case "105_The-Elephant": - chapterNumber = 105 - name = l10n.TheElephant.name - - case "106_Quraysh": - chapterNumber = 106 - name = l10n.Quraysh.name - - case "107_Assistance": - chapterNumber = 107 - name = l10n.Assistance.name - - case "108_Good-in-Abundance": - chapterNumber = 108 - name = l10n.GoodInAbundance.name - - case "109_Those-Who-Deny-the-Truth": - chapterNumber = 109 - name = l10n.ThoseWhoDenyTheTruth.name - - case "110_Succour": - chapterNumber = 110 - name = l10n.Succour.name - - case "111_The-Twisted-Strands": - chapterNumber = 111 - name = l10n.TheTwistedStrands.name - - case "112_The-Declaration-of-Gods-Perfection": - chapterNumber = 112 - name = l10n.TheDecleratiionOfGodsPerfection.name - - case "113_The-Rising-Dawn": - chapterNumber = 113 - name = l10n.TheRisingDawn.name - - case "114_Men": - chapterNumber = 114 - name = l10n.Men.name - - default: - preconditionFailure() + let title = recitationPart.recitation.localizedTitle + if recitationPart.totalParts > 1 { + name = l10n.splitRecitationTitle(title, recitationPart.part, recitationPart.totalParts) + } + else { + name = title } - spokenTextLines = RakahComponent.readLinesFromFile(named: fileName) + spokenTextLines = RakahComponent.readLinesFromRecitationFile(recitationPart: recitationPart) needsMovement = false position = .standing movementSound = nil - isChangingText = fileName != "001_The-Opening" + isChangingText = recitationPart.recitation != .theOpening case .ruku: name = l10n.Ruku.name @@ -222,14 +173,28 @@ class RakahComponent { private static func readLinesFromFile(named name: String) -> [String] { let spokenTextFilePath = Bundle.main.url(forResource: name, withExtension: "txt")! let contentString = try! String(contentsOf: spokenTextFilePath, encoding: .utf8) - return contentString.stripped().components(separatedBy: .newlines) } + + private static func readLinesFromRecitationFile(recitationPart: RecitationPart) -> [String] { + let spokenTextFilePath = Bundle.main.url(forResource: recitationPart.recitation.fileName, withExtension: "txt")! + var contentString = try! String(contentsOf: spokenTextFilePath, encoding: .utf8) + + if recitationPart.totalParts > 1 { + let indexLowerBound = (recitationPart.part - 1) * recitationPart.partLength.factor + let indexUpperBound = recitationPart.part * recitationPart.partLength.factor + let partIndexRange = indexLowerBound.. Int { + Int((Double(arabicWordsCount) / Double(maxWordsPerPart.rawValue)).rounded(.up)) + } + + // Source: https://qurananalysis.com/analysis/basic-statistics.php?lang=AR + private static let chapterNumToWordsCount: [Int: Int] = [ + 1: 29, 2: 6140, 3: 3501, 4: 3763, 5: 2837, 6: 3056, 7: 3341, 8: 1242, 9: 2505, 10: 1839, 11: 1946, 12: 1795, + 13: 853, 14: 830, 15: 657, 16: 1844, 17: 1558, 18: 1583, 19: 971, 20: 1353, 21: 1174, 22: 1279, 23: 1052, + 24: 1319, 25: 896, 26: 1320, 27: 1159, 28: 1438, 29: 978, 30: 817, 31: 550, 32: 372, 33: 1303, 34: 884, 35: 778, + 36: 730, 37: 865, 38: 735, 39: 1177, 40: 1226, 41: 794, 42: 860, 43: 836, 44: 346, 45: 488, 46: 645, 47: 542, + 48: 560, 49: 353, 50: 373, 51: 360, 52: 312, 53: 360, 54: 342, 55: 352, 56: 379, 57: 575, 58: 475, 59: 447, + 60: 352, 61: 226, 62: 177, 63: 181, 64: 242, 65: 289, 66: 254, 67: 333, 68: 301, 69: 260, 70: 217, 71: 227, + 72: 286, 73: 200, 74: 256, 75: 164, 76: 243, 77: 181, 78: 174, 79: 179, 80: 133, 81: 104, 82: 81, 83: 169, + 84: 108, 85: 109, 86: 61, 87: 72, 88: 92, 89: 139, 90: 82, 91: 54, 92: 71, 93: 40, 94: 27, 95: 34, 96: 72, + 97: 30, 98: 94, 99: 36, 100: 40, 101: 36, 102: 28, 103: 14, 104: 33, 105: 23, 106: 17, 107: 25, 108: 10, 109: 27, + 110: 19, 111: 23, 112: 15, 113: 23, 114: 20, + ] +} diff --git a/App/Sources/Models/RecitationPart.swift b/App/Sources/Models/RecitationPart.swift new file mode 100644 index 0000000..d1ea1c6 --- /dev/null +++ b/App/Sources/Models/RecitationPart.swift @@ -0,0 +1,42 @@ +// +// Created by Cihat Gündüz on 16.10.21. +// Copyright © 2021 Flinesoft. All rights reserved. +// + +import Foundation +import SwiftyUserDefaults + +struct RecitationPart: Codable, DefaultsSerializable { + let partLength: Recitation.MaxArabicWordsPerStanding + let part: Int + let totalParts: Int + + // NOTE: Workaround for an issue with SwiftyUserDefaults where RawRepresentable enums can't be Codable, too. + private let recitationRawValue: Recitation.RawValue + var recitation: Recitation { + Recitation(rawValue: recitationRawValue)! + } + + init( + recitation: Recitation, + partLength: Recitation.MaxArabicWordsPerStanding, + part: Int = 1, + totalParts: Int = 1 + ) { + self.recitationRawValue = recitation.rawValue + self.partLength = partLength + self.part = part + self.totalParts = totalParts + } + + func nextPart() -> RecitationPart? { + guard part < totalParts else { return nil } + + return RecitationPart( + recitation: recitation, + partLength: partLength, + part: part + 1, + totalParts: totalParts + ) + } +} diff --git a/App/Sources/ScreenFlows/Prayer/Base.lproj/PrayerView.storyboard b/App/Sources/ScreenFlows/Prayer/Base.lproj/PrayerView.storyboard index 7178fe5..adbd242 100644 --- a/App/Sources/ScreenFlows/Prayer/Base.lproj/PrayerView.storyboard +++ b/App/Sources/ScreenFlows/Prayer/Base.lproj/PrayerView.storyboard @@ -1,8 +1,9 @@ - + - + + @@ -16,11 +17,11 @@ - + - + @@ -30,18 +31,18 @@ - + - + - + - + - +