Skip to content

Commit

Permalink
make accessible
Browse files Browse the repository at this point in the history
  • Loading branch information
vermont42 committed Jan 22, 2022
1 parent 844e56e commit 7d93d14
Show file tree
Hide file tree
Showing 22 changed files with 641 additions and 107 deletions.
8 changes: 8 additions & 0 deletions Conjuguer.xcodeproj/project.pbxproj
Expand Up @@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
030FFAA526CA19CB00741524 /* frequencies.xml in Resources */ = {isa = PBXBuildFile; fileRef = 030FFAA426CA19CB00741524 /* frequencies.xml */; };
030FFAA726CA1A2000741524 /* FrequencyParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030FFAA626CA1A2000741524 /* FrequencyParser.swift */; };
031D6454278B4C890000C7DB /* Utterer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031D6453278B4C890000C7DB /* Utterer.swift */; };
032B122326BA02D8000E70CA /* InfoBrowseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032B122226BA02D8000E70CA /* InfoBrowseView.swift */; };
032B122726BB3FA0000E70CA /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032B122626BB3FA0000E70CA /* ColorExtension.swift */; };
032D267226BDF52100AE1BD1 /* InfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032D267126BDF52100AE1BD1 /* InfoView.swift */; };
Expand Down Expand Up @@ -74,6 +75,7 @@
036DB80525A386D60013C3B7 /* VerbModelParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036DB80425A386D60013C3B7 /* VerbModelParser.swift */; };
036DB81025A6C7900013C3B7 /* PasseSimpleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036DB80F25A6C7900013C3B7 /* PasseSimpleGroup.swift */; };
036DB81825A8C9420013C3B7 /* IndicatifPresentGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036DB81725A8C9420013C3B7 /* IndicatifPresentGroup.swift */; };
036DEF2B2782226A00B0BAED /* ImageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036DEF2A2782226A00B0BAED /* ImageInfo.swift */; };
036E4D102735CA7C00A52973 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 036E4D0F2735CA7C00A52973 /* LaunchScreen.storyboard */; };
036F9872276F929200ACD986 /* RatingsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036F9871276F929200ACD986 /* RatingsFetcher.swift */; };
036F9874276FDDC500ACD986 /* URLProtocolStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036F9873276FDDC500ACD986 /* URLProtocolStub.swift */; };
Expand Down Expand Up @@ -135,6 +137,7 @@
/* Begin PBXFileReference section */
030FFAA426CA19CB00741524 /* frequencies.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = frequencies.xml; sourceTree = "<group>"; };
030FFAA626CA1A2000741524 /* FrequencyParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrequencyParser.swift; sourceTree = "<group>"; };
031D6453278B4C890000C7DB /* Utterer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utterer.swift; sourceTree = "<group>"; };
032B122226BA02D8000E70CA /* InfoBrowseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoBrowseView.swift; sourceTree = "<group>"; };
032B122626BB3FA0000E70CA /* ColorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorExtension.swift; sourceTree = "<group>"; };
032D267126BDF52100AE1BD1 /* InfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -205,6 +208,7 @@
036DB80425A386D60013C3B7 /* VerbModelParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerbModelParser.swift; sourceTree = "<group>"; };
036DB80F25A6C7900013C3B7 /* PasseSimpleGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasseSimpleGroup.swift; sourceTree = "<group>"; };
036DB81725A8C9420013C3B7 /* IndicatifPresentGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndicatifPresentGroup.swift; sourceTree = "<group>"; };
036DEF2A2782226A00B0BAED /* ImageInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageInfo.swift; sourceTree = "<group>"; };
036E4D0F2735CA7C00A52973 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
036F9871276F929200ACD986 /* RatingsFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RatingsFetcher.swift; sourceTree = "<group>"; };
036F9873276FDDC500ACD986 /* URLProtocolStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLProtocolStub.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -365,6 +369,7 @@
030FFAA426CA19CB00741524 /* frequencies.xml */,
030FFAA626CA1A2000741524 /* FrequencyParser.swift */,
03ACAA0025ACB65300CF5390 /* FuturSimple.swift */,
036DEF2A2782226A00B0BAED /* ImageInfo.swift */,
03ACA9F625A9FD4400CF5390 /* Imparfait.swift */,
036DB81725A8C9420013C3B7 /* IndicatifPresentGroup.swift */,
03309F6526BC9C95003E4F92 /* Info.swift */,
Expand Down Expand Up @@ -430,6 +435,7 @@
036F9875276FDE0000ACD986 /* URLSessionExtension.swift */,
0373682F25DC672F008BDF46 /* UserDefaultsGetterSetter.swift */,
0373681A25DB8BAD008BDF46 /* Util.swift */,
031D6453278B4C890000C7DB /* Utterer.swift */,
0373682925DC667B008BDF46 /* VerbSort.swift */,
0373681F25DC6502008BDF46 /* World.swift */,
);
Expand Down Expand Up @@ -653,6 +659,7 @@
03AE93F3274443E400233105 /* StubAnalyticsLocale.swift in Sources */,
03AE93ED2744424F00233105 /* DeviceUtility.swift in Sources */,
038E0AFE2690976D002A71EF /* DefectGroup.swift in Sources */,
036DEF2B2782226A00B0BAED /* ImageInfo.swift in Sources */,
0338F16F273F6A7300FD796C /* GameCenter.swift in Sources */,
03C2CAC62619125200CFA825 /* Sound.swift in Sources */,
036DB7DF25A0DD7A0013C3B7 /* Verb.swift in Sources */,
Expand All @@ -674,6 +681,7 @@
03ACAA0625ACB6B900CF5390 /* ConditionnelPresent.swift in Sources */,
03309F6C26BCA0B0003E4F92 /* UIFontExtension.swift in Sources */,
036DB7FB25A13C110013C3B7 /* ConjugatorError.swift in Sources */,
031D6454278B4C890000C7DB /* Utterer.swift in Sources */,
03ACA9F725A9FD4400CF5390 /* Imparfait.swift in Sources */,
03309F6A26BC9E72003E4F92 /* StringExtensions.swift in Sources */,
036A99382726168900C6C984 /* TestGameCenter.swift in Sources */,
Expand Down
1 change: 1 addition & 0 deletions Conjuguer/App/ConjuguerApp.swift
Expand Up @@ -29,6 +29,7 @@ struct ConjuguerApp: App {
Modifiers.modifyAppearances()

SoundPlayer.setup()
Utterer.setup()

VerbModel.models = VerbModelParser().parse()
Verb.verbs = VerbParser().parse()
Expand Down
13 changes: 9 additions & 4 deletions Conjuguer/Assets/en.lproj/Localizable.strings
Expand Up @@ -17,12 +17,11 @@
"Navigation.back" = "Back";

"VerbView.overview" = "Overview";
"VerbView.model" = "Model:";
"VerbView.modelWithColon" = "Model:";
"VerbView.reflexive" = "Reflexive";
"VerbView.aspiratedH" = "Aspirated H";
"VerbView.auxiliaryÊtre" = "Auxiliary: être";
"VerbView.auxiliaryAvoir" = "Auxiliary: avoir";
"VerbView.frequency" = "Frequency";
"VerbView.auxiliaryWithColon" = "Auxiliary:";
"VerbView.frequencyWithColon" = "Frequency:";
"VerbView.defective" = "Defective.";
"VerbView.exampleUse" = "Example Use";
"VerbView.personlessConjugations" = "P. Passé, P. Présent, R. Futur";
Expand All @@ -36,6 +35,7 @@
"ModelView.irregular" = "Irregular";
"ModelView.verbsUsing" = "Verbs Using This Model";
"ModelView.verbUsing" = "Verb Using This Model";
"ModelView.infoButtonHint" = "shows infomation about how verb conjugation irregularities are represented";

"QuizView.start" = "Start";
"QuizView.scoreWithColon" = "Score:";
Expand All @@ -44,6 +44,8 @@
"QuizView.pronounWithColon" = "Pronoun:";
"QuizView.tenseWithColon" = "Tense:";
"QuizView.progressWithColon" = "Progress:";
"QuizView.outOf" = "out of";
"QuizView.seconds" = "seconds";
"QuizView.elapsedWithColon" = "Elapsed:";
"QuizView.conjugation" = "Conjugation";
"QuizView.quit" = "Quit";
Expand Down Expand Up @@ -1114,6 +1116,9 @@ Machio Okada and Hitoshi Oguriso created the Tableaux de conjugaison de l’anci
"RatingsFetcher.oneRating" = "There is one rating for this version of Conjuguer.";
"RatingsFetcher.multipleRatings" = "There are %d ratings for this version of Conjuguer.";

"ImageInfo.davidCompton" = "photograph of David Compton taken in Paris, France during the early 1960s";
"ImageInfo.joshAdams" = "photograph of Josh Adams taken near Vacaville, California in 2021";

"VerbSort.frequency" = "Frequency";

"ModelSort.irregularity" = "Irregularity";
Expand Down
12 changes: 9 additions & 3 deletions Conjuguer/Assets/fr.lproj/Localizable.strings
Expand Up @@ -17,12 +17,12 @@
"Navigation.back" = "Retourner";

"VerbView.overview" = "Aperçu";
"VerbView.model" = "Modèle:";
"VerbView.modelWithColon" = "Modèle:";
"VerbView.reflexive" = "Réflexif";
"VerbView.aspiratedH" = "H Aspirée";
"VerbView.auxiliaryÊtre" = "Auxiliaire: Être";
"VerbView.auxiliaryAvoir" = "Auxiliaire: Avoir";
"VerbView.frequency" = "Fréquence";
"VerbView.auxiliaryWithColon" = "Auxiliaire:";
"VerbView.frequencyWithColon" = "Fréquence:";
"VerbView.defective" = "Défectif.";
"VerbView.exampleUse" = "Exemple d’utilisation";
"VerbView.personlessConjugations" = "P. Passé, P. Présent, R. Futur";
Expand All @@ -36,6 +36,7 @@
"ModelView.irregular" = "Irrégulier";
"ModelView.verbsUsing" = "Verbes qui utilisent ce modèle";
"ModelView.verbUsing" = "Verbe qui utilise ce modèle";
"ModelView.infoButtonHint" = "montre des informations sur la façon dont les irrégularités de conjugaison des verbes sont représentées";

"QuizView.start" = "Commencer";
"QuizView.scoreWithColon" = "Score:";
Expand All @@ -44,6 +45,8 @@
"QuizView.pronounWithColon" = "Pronom:";
"QuizView.tenseWithColon" = "Temps:";
"QuizView.progressWithColon" = "Progrès:";
"QuizView.outOf" = "sur";
"QuizView.seconds" = "secondes";
"QuizView.elapsedWithColon" = "Écoulé:";
"QuizView.conjugation" = "Conjugaison";
"QuizView.quit" = "Quitter";
Expand Down Expand Up @@ -1114,6 +1117,9 @@ Machio Okada et Hitoshi Oguriso ont créé les Tableaux de conjugaison de l’an
"RatingsFetcher.oneRating" = "Cette version de Conjuguer n’a qu’une évaluation.";
"RatingsFetcher.multipleRatings" = "Cette version de Conjuguer a %d évaluations.";

"ImageInfo.davidCompton" = "photographie de David Compton prise à Paris, en France, au début des années 1960";
"ImageInfo.joshAdams" = "photographie de Josh Adams prise près de Vacaville, en Californie, en 2021";

"VerbSort.frequency" = "Fréquence";

"ModelSort.irregularity" = "Irrégularité";
Expand Down
2 changes: 2 additions & 0 deletions Conjuguer/Info.plist
Expand Up @@ -18,6 +18,8 @@
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSpokenName</key>
<string>con jew gay</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
Expand Down
2 changes: 1 addition & 1 deletion Conjuguer/Models/ImageInfo.swift
Expand Up @@ -7,7 +7,7 @@

import Foundation

struct ImageInfo {
struct ImageInfo: Hashable {
let filename: String
let accessibilityLabel: String
}
52 changes: 27 additions & 25 deletions Conjuguer/Models/Info.swift
Expand Up @@ -10,42 +10,44 @@ import Foundation
struct Info: Hashable {
let heading: String
let attributedText: NSAttributedString
let imageName: String?
let alwaysUsesFrenchPronunciation: Bool
let imageInfo: ImageInfo?

private init(heading: String, text: String, imageName: String? = nil) {
private init(heading: String, text: String, alwaysUsesFrenchPronunciation: Bool = false, imageInfo: ImageInfo? = nil) {
self.heading = heading
attributedText = text.attributedText
self.imageName = imageName
self.alwaysUsesFrenchPronunciation = alwaysUsesFrenchPronunciation
self.imageInfo = imageInfo
}

static let infos: [Info] = [
Info(heading: L.Info.dedicationHeading, text: L.Info.dedicationText, imageName: "Compton"),
Info(heading: L.Info.dedicationHeading, text: L.Info.dedicationText, imageInfo: ImageInfo(filename: "Compton", accessibilityLabel: L.ImageInfo.davidCompton)),
Info(heading: L.Info.valuePropositionHeading, text: L.Info.valuePropositionText),
Info(heading: L.Info.terminologyHeading, text: L.Info.terminologyText),
Info(heading: L.Info.irregularitiesHeading, text: L.Info.irregularitiesText),
Info(heading: L.Info.defectivenessHeading, text: L.Info.defectivenessText),
Info(heading: L.Info.participePasséHeading, text: L.Info.participePasséText),
Info(heading: L.Info.participePrésentHeading, text: L.Info.participePrésentText),
Info(heading: L.Info.radicalFuturHeading, text: L.Info.radicalFuturText),
Info(heading: L.Info.indicatifPrésentHeading, text: L.Info.indicatifPrésentText),
Info(heading: L.Info.passéSimpleHeading, text: L.Info.passéSimpleText),
Info(heading: L.Info.imparfaitHeading, text: L.Info.imparfaitText),
Info(heading: L.Info.futurSimpleHeading, text: L.Info.futurSimpleText),
Info(heading: L.Info.conditionnelPrésentHeading, text: L.Info.conditionnelPrésentText),
Info(heading: L.Info.subjonctifPrésentHeading, text: L.Info.subjonctifPrésentText),
Info(heading: L.Info.subjonctifImparfaitHeading, text: L.Info.subjonctifImparfaitText),
Info(heading: L.Info.impératifHeading, text: L.Info.impératifText),
Info(heading: L.Info.passéComposéHeading, text: L.Info.passéComposéText),
Info(heading: L.Info.plusQueParfaitHeading, text: L.Info.plusQueParfaitText),
Info(heading: L.Info.passéAntérieurHeading, text: L.Info.passéAntérieurText),
Info(heading: L.Info.passéSurcomposéHeading, text: L.Info.passéSurcomposéText),
Info(heading: L.Info.futurAntérieurHeading, text: L.Info.futurAntérieurText),
Info(heading: L.Info.conditionnelPasséHeading, text: L.Info.conditionnelPasséText),
Info(heading: L.Info.subjonctifPasséHeading, text: L.Info.subjonctifPasséText),
Info(heading: L.Info.subjonctifPlusQueParfaitHeading, text: L.Info.subjonctifPlusQueParfaitText),
Info(heading: L.Info.impératifPasséHeading, text: L.Info.impératifPasséText),
Info(heading: L.Info.participePasséHeading, text: L.Info.participePasséText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.participePrésentHeading, text: L.Info.participePrésentText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.radicalFuturHeading, text: L.Info.radicalFuturText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.indicatifPrésentHeading, text: L.Info.indicatifPrésentText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.passéSimpleHeading, text: L.Info.passéSimpleText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.imparfaitHeading, text: L.Info.imparfaitText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.futurSimpleHeading, text: L.Info.futurSimpleText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.conditionnelPrésentHeading, text: L.Info.conditionnelPrésentText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.subjonctifPrésentHeading, text: L.Info.subjonctifPrésentText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.subjonctifImparfaitHeading, text: L.Info.subjonctifImparfaitText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.impératifHeading, text: L.Info.impératifText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.passéComposéHeading, text: L.Info.passéComposéText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.plusQueParfaitHeading, text: L.Info.plusQueParfaitText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.passéAntérieurHeading, text: L.Info.passéAntérieurText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.passéSurcomposéHeading, text: L.Info.passéSurcomposéText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.futurAntérieurHeading, text: L.Info.futurAntérieurText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.conditionnelPasséHeading, text: L.Info.conditionnelPasséText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.subjonctifPasséHeading, text: L.Info.subjonctifPasséText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.subjonctifPlusQueParfaitHeading, text: L.Info.subjonctifPlusQueParfaitText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.impératifPasséHeading, text: L.Info.impératifPasséText, alwaysUsesFrenchPronunciation: true),
Info(heading: L.Info.questionsAndResponsesHeading, text: L.Info.questionsAndResponsesText),
Info(heading: L.Info.creditsHeading, text: L.Info.creditsText, imageName: "Adams")
Info(heading: L.Info.creditsHeading, text: L.Info.creditsText, imageInfo: ImageInfo(filename: "Adams", accessibilityLabel: L.ImageInfo.joshAdams))
]

static func headingToIndex(heading: String) -> Int? {
Expand Down
38 changes: 28 additions & 10 deletions Conjuguer/Models/L.swift
Expand Up @@ -47,8 +47,8 @@ enum L {
String(localized: "VerbView.overview")
}

static var model: String {
String(localized: "VerbView.model")
static var modelWithColon: String {
String(localized: "VerbView.modelWithColon")
}

static var reflexive: String {
Expand All @@ -59,16 +59,12 @@ enum L {
String(localized: "VerbView.aspiratedH")
}

static var auxiliaryÊtre: String {
String(localized: "VerbView.auxiliaryÊtre")
static var auxiliaryWithColon: String {
String(localized: "VerbView.auxiliaryWithColon")
}

static var auxiliaryAvoir: String {
String(localized: "VerbView.auxiliaryAvoir")
}

static var frequency: String {
String(localized: "VerbView.frequency")
static var frequencyWithColon: String {
String(localized: "VerbView.frequencyWithColon")
}

static var defective: String {
Expand Down Expand Up @@ -130,6 +126,10 @@ enum L {
static var verbUsing: String {
String(localized: "ModelView.verbUsing")
}

static var infoButtonHint: String {
String(localized: "ModelView.infoButtonHint")
}
}

enum QuizView {
Expand Down Expand Up @@ -157,6 +157,14 @@ enum L {
String(localized: "QuizView.progressWithColon")
}

static var outOf: String {
String(localized: "QuizView.outOf")
}

static var seconds: String {
String(localized: "QuizView.seconds")
}

static var scoreWithColon: String {
String(localized: "QuizView.scoreWithColon")
}
Expand Down Expand Up @@ -492,6 +500,16 @@ enum L {
}
}

enum ImageInfo {
static var davidCompton: String {
String(localized: "ImageInfo.davidCompton")
}

static var joshAdams: String {
String(localized: "ImageInfo.joshAdams")
}
}

static func displayNameForVerbSort(_ sort: VerbSort) -> String {
switch sort {
case .frequency:
Expand Down

0 comments on commit 7d93d14

Please sign in to comment.