aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoop <Joop Kiefte>2022-04-02 02:43:16 +0100
committerjoop <Joop Kiefte>2022-04-02 02:43:16 +0100
commit603446228ab0dab7e7c2f5b38cba597897d59341 (patch)
treee121e1010329ed301379182f1bd386d9ec49d3b1
Initial commit
-rw-r--r--main.go322
-rw-r--r--rel/code.list230
-rw-r--r--rel/lang.csv106
3 files changed, 658 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..7433ab6
--- /dev/null
+++ b/main.go
@@ -0,0 +1,322 @@
+// Phelpsify is a tool to help assign prayer codes to prayers.
+// It requests prayers from bahaiprayers.net via the API url.
+// It reads already assigned prayer codes from rel/code.list.
+// It reads the conversion from number to language code from rel/lang.csv.
+// It writes the new prayer codes to rel/code.list.
+// rel/code.list is structured as prayer code, comma, prayer ids from bahaiprayers.net all separated by commas per line.
+// rel/lang.csv is a csv file with header id,iso,iso_type,name,english,flag_link,rtl.
+// The tool is a command line tool that first asks which languages you want to complete.
+// It then presents you a random prayer from those languages that doesn't have
+// a prayer code yet. It will then help you find the prayer among the prayers that already have a prayer code using keyword based search.
+// When a match is found, the id of the prayer will be added to the list after the prayer code.
+// The tool then asks you if you want to add another prayer and repeat the process.
+package main
+
+import (
+ "encoding/csv"
+ "encoding/json"
+ "fmt"
+ "math/rand"
+ "net/http"
+ "os"
+ "strconv"
+ "strings"
+)
+
+//BPNAPI is the API link of bahaiprayers.net
+//It is used to get the list of prayers per language by numerical id from lang.csv
+var BPNAPI = "https://bahaiprayers.net/api/prayer/prayersystembylanguage?languageid="
+
+type BPNKind string
+
+type Language struct {
+ Id int
+ Iso string
+ IsoType string
+ Name string
+ English string
+ FlagLink string
+ Rtl bool
+}
+
+//BPNAPIOutput is the JSON structure of the API output
+type BPNAPIOutput struct {
+ ErrorMessage string
+ IsInError bool
+ Version int
+ Prayers []Prayer
+ Tags []struct {
+ Id int
+ LanguageId int
+ Name string
+ Kind BPNKind
+ PrayerCount int
+ }
+ TagRelations []struct {
+ Id int
+ PrayerId int
+ PrayerTagId int
+ LanguageId int
+ }
+ Urls []interface{}
+ Languages []struct {
+ Id int
+ Name string
+ English string
+ IsLeftToRight bool
+ FlagLink string
+ }
+}
+
+type Prayer struct {
+ Id int
+ AuthorId int
+ LanguageId int
+ Text string
+ Tags []struct {
+ Id int
+ Name string
+ Kind BPNKind
+ }
+ Tagkind struct {
+ Kind BPNKind
+ }
+ Urls []interface{}
+}
+
+func (p Prayer) Author() string {
+ if p.AuthorId > 0 && p.AuthorId < 4 {
+ return []string{"Báb", "Bahá'u'lláh", "Abdu'l-Bahá"}[p.AuthorId-1]
+ }
+ return "Unknown Author"
+}
+
+type PrayerCode struct {
+ Code string
+ Language string
+}
+
+var Languages []Language
+var CodeList map[string][]int
+var PrayersWithCode map[PrayerCode]Prayer
+
+// ReadLangCSV reads rel/lang.csv and puts it in Languages
+// It does so by matching each CSV field to a struct field
+func ReadLangCSV() error {
+ file, err := os.Open("rel/lang.csv")
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ reader := csv.NewReader(file)
+ langCSV, err := reader.ReadAll()
+ if err != nil {
+ return err
+ }
+ for _, lang := range langCSV {
+ var language Language
+ language.Id, _ = strconv.Atoi(lang[0])
+ language.Iso = lang[1]
+ language.IsoType = lang[2]
+ language.Name = lang[3]
+ language.English = lang[4]
+ language.FlagLink = lang[5]
+ language.Rtl, _ = strconv.ParseBool(lang[6])
+ Languages = append(Languages, language)
+ }
+ return nil
+}
+
+func ReadCodeList() error {
+ file, err := os.Open("rel/code.list")
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ CodeList = make(map[string][]int)
+ reader := csv.NewReader(file)
+ for {
+ line, err := reader.Read()
+ if err != nil {
+ break
+ }
+ CodeList[line[0]] = make([]int, 0)
+ for _, prayerIDstr := range line[1:] {
+ prayerID, err := strconv.Atoi(prayerIDstr)
+ if err != nil {
+ return err
+ }
+ CodeList[line[0]] = append(CodeList[line[0]], prayerID)
+ }
+ }
+ return nil
+}
+
+func WriteCodeList(codeList map[string][]int) error {
+ file, err := os.Create("rel/code.list")
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ writer := csv.NewWriter(file)
+ for code, prayerIDs := range codeList {
+ line := make([]string, 0)
+ line = append(line, code)
+ for _, prayerID := range prayerIDs {
+ line = append(line, strconv.Itoa(prayerID))
+ }
+ writer.Write(line)
+ }
+ writer.Flush()
+ return nil
+}
+
+func AskLanguages() []Language {
+ // Ask "Which languages do you want to complete?"
+ // The answer is a list of language codes that must be converted to numbers
+ // using the conversion from lang.csv in Languages
+ fmt.Print("Which languages do you want to complete? ")
+ var languages []string
+ fmt.Scanln(&languages)
+ var outLangs []Language
+ for _, language := range languages {
+ for _, lang := range Languages {
+ if lang.Iso == language || lang.English == language {
+ outLangs = append(outLangs, lang)
+ }
+ }
+ }
+ return outLangs
+}
+
+func Code(p Prayer) string {
+ // Get the prayer code for a prayer via CodeList
+ // or return an empty string if it's not on the list
+ for code, prayerIDs := range CodeList {
+ for _, prayerID := range prayerIDs {
+ if p.Id == prayerID {
+ return code
+ }
+ }
+ }
+ return ""
+}
+
+func ReadPrayers(lang []Language) []Prayer {
+ var prayers []Prayer
+ for _, language := range lang {
+ response, err := http.Get(BPNAPI + strconv.Itoa(language.Id))
+ if err != nil {
+ fmt.Println(err)
+ return nil
+ }
+ defer response.Body.Close()
+ var output BPNAPIOutput
+ err = json.NewDecoder(response.Body).Decode(&output)
+ if err != nil {
+ fmt.Println(err)
+ return nil
+ }
+ for _, prayer := range output.Prayers {
+ if Code(prayer) == "" {
+ prayers = append(prayers, prayer)
+ }
+ }
+ }
+ return prayers
+}
+
+func main() {
+ err := ReadLangCSV()
+ if err != nil {
+ panic(err)
+ }
+ err = ReadCodeList()
+ if err != nil {
+ panic(err)
+ }
+ // Iterate over all languages and read in all prayers
+ // with a language code to PrayersWithCode
+ for _, language := range Languages {
+ prayers := ReadPrayers([]Language{language})
+ for _, prayer := range prayers {
+ code := Code(prayer)
+ if code != "" {
+ prayerCode := PrayerCode{code, language.Iso}
+ PrayersWithCode[prayerCode] = prayer
+ }
+ }
+ }
+ for {
+ languages := AskLanguages()
+ prayers := ReadPrayers(languages)
+ // randomize the order of the prayers
+ for i := len(prayers) - 1; i > 0; i-- {
+ j := rand.Intn(i + 1)
+ prayers[i], prayers[j] = prayers[j], prayers[i]
+ }
+ // pick the first prayer from the resulting list that
+ // doesn't have a code in CodeList.
+ var prayer Prayer
+ var code string
+ for _, p := range prayers {
+ if Code(p) == "" {
+ prayer = p
+ break
+ }
+ }
+ // Present the text, id and author of the prayer
+ fmt.Println(prayer.Text)
+ fmt.Println("ID:", prayer.Id)
+ fmt.Println("Author:", prayer.Author())
+ for code == "" {
+ // Ask for a keyword
+ fmt.Print("Input a keyword for this prayer: ")
+ var keyword string
+ fmt.Scanln(&keyword)
+ var Matches []Prayer
+ // Check for the prayer text of each prayer in
+ // PrayersWithCode if there is a match with the keyword
+ // and add it to Matches
+ for _, prayer := range PrayersWithCode {
+ if strings.Contains(prayer.Text, keyword) {
+ Matches = append(Matches, prayer)
+ }
+ }
+ // If there are no matches, ask again
+ if len(Matches) == 0 {
+ fmt.Println("No matches found.")
+ continue
+ }
+ // Ask which of the matches to use
+ fmt.Println("Which of the following matches?")
+ for i, match := range Matches {
+ fmt.Println(i+1, ":", match.Text)
+ fmt.Print("Does this match? (y/n) ")
+ var answer string
+ fmt.Scanln(&answer)
+ if answer == "y" {
+ prayer = match
+ code = Code(match)
+ break
+ }
+ }
+ }
+ // Add the code to CodeList
+ CodeList[code] = append(CodeList[code], prayer.Id)
+ // Ask if the user wants to identify another prayer
+ // or if they want to quit
+ // To identify another prayer, continue
+ // To quit, save the CodeList and quit
+ fmt.Print("Identify another prayer? (y/n) ")
+ var answer string
+ fmt.Scanln(&answer)
+ if answer == "n" {
+ err = WriteCodeList(CodeList)
+ if err != nil {
+ panic(err)
+ }
+ break
+ }
+ }
+}
diff --git a/rel/code.list b/rel/code.list
new file mode 100644
index 0000000..678ed83
--- /dev/null
+++ b/rel/code.list
@@ -0,0 +1,230 @@
+BH00074BLE,4966
+BH00976INT,262
+BH11209,391
+BH03447,392
+BH00987,393
+BH10973,180
+BH00438,181
+BB00553,182
+BB00018DET,394
+AB00431PIT,184
+AB00073SER,396
+AB10275,186
+ABU0268AME,187
+BH10076,188
+ABU0129EDU,189
+AB10714,406
+AB10701,191
+AB11605,192
+AB04427LMP,193
+AB09040,408
+AB08693,195
+AB10324,196
+AB09794CHI,197
+AB10685,198
+BH09855,402
+AB11356,200
+AB04004BAB,404
+BH09085,202
+BH08308,203
+BH03109KIN,204
+AB11094,205
+AB03896MAJ,412
+AB07304,207
+AB07850,208
+AB05996,209
+AB00728MDS,210
+BH09289,211
+BH09508,212
+BH09864,213
+BH09024,214
+BH05894,215
+BH05771,216
+BB00560,217
+BB00522,218
+BB00015SUF,219
+AB04980HOP,220
+AB00553,221
+BH00009SER,222
+BH00009HOW,223
+AB06528MID,224
+BB00583,225
+BB00018FOR,226
+AB02000DIS,227
+AB03017CAL,228
+BH07683,229
+BH07469,230
+AB06211,231
+AB02342AWA,232
+AB00065STE,233
+BH07106,234
+BH08600FAC,235
+BH00005SEE,236
+BH05768,237
+BH08855,238
+BH00593,239
+BH00634,240
+BB00617,241
+BB00002MEN,242
+BB00485TRE,243
+ABU0030SHE,244
+AB00362LOV,245
+BH09848,248
+ABU0394GAT,187
+ABU0070GAT,418
+ABU0188TUR,419
+ABU0095KIN,420
+AB00388COM,421
+AB00397HEA,254
+ABU0003DIS,255
+BH08013,256
+BH01313NAM,257
+BH07721,258
+BH07105,259
+BH04475,260
+BH04990,261
+BH00870,262
+BH00868WIT,263
+ABU0009SER,264
+AB07124,414
+ABU0137ALL,415
+AB00787SPL,267
+AB03461MAR,268
+BH00001ABI,268
+BH03181,269
+AB05652WIS,270
+AB07158,271
+AB02596,272
+BH02777RIS,273
+BH00009SHE,274
+BH00009GRA,275
+BH00009AWA,276
+BH08264,277
+BB00556,280
+BB00018ANG,278
+BBU0015,279
+AB02866,281
+AB06012,282
+BH09401,283
+BH03111,284
+BH09960,285
+BH07180,286
+BH07661,287
+BB00018MAJ,288
+BH07113,289
+BH09872,290
+BH10578,291
+BH10688,292
+BH05801,293
+BB00147ORD,294
+BB00100EXI,295
+BB00490,296
+AB00001SHI,297
+AB07759,298
+AB00204PRO,299
+BH09498,300
+BH02848,273
+BH06296,301
+BH04421HEA,302
+BH06026,303
+BH07426FOO,304
+BH07780,305
+BH00554,306
+BH03562,307
+BH05543,308
+BH00531TRA,309
+BB00374,310
+AB07709CON,423
+AB11281,424
+AB09139,425
+AB00083RAD,426
+AB00128FEE,427
+AB02326,428
+AB00044PRO,429
+BH00053MAG,312
+BH08244,313
+BH08604,314
+BH07775,315
+BH08822,316
+BB00554,317
+BB00621,318
+AB00001FIR,319
+AB00687SEE,320
+BH08433,321
+BH08242,322
+BH00308DES,323
+BH08363,324
+BH00223MAG,325
+AB05805SER,326
+AB00189AID,327
+AB00156LOW,328
+AB05167,329
+AB00218SOU,330
+AB00049RAP,430
+AB00094WEA,431
+AB00032DAR,6475
+AB00241HIG,432
+AB00209UND,433
+AB00184KIN,434
+AB00210BIR,435
+AB00169FRA,436
+AB00169BEH,336
+BH08600TES,337
+BH02524,338
+BH09874,438
+BH03629GRI,339
+BH05071,340
+BB00623,341
+BB00001KNO,342
+BB00018ADJ,343
+BB00630,344
+BH09809,345
+BH11278RIV,346
+BH05703KEP,347
+BB00004REN,348
+BB00147GRO,349
+BB00543VIC,350
+BB00002ENA,351
+AB00065KIN,352
+AB00527,353
+BH10505,354
+ABU0023UNI,355
+BH09162,356
+BH09399,357
+BH06429,358
+BH07663,359
+BH07426DRE,360
+BH08852,361
+BH10231,362
+AB10769,363
+AB07155WOM,364
+AB00314HOR,365
+AB00949WIN,366
+AB10492,367
+AB10703RAD,368
+AB02825,369
+BH00154FIR,370
+BH10127,371
+BH01125,372
+BH07657,373
+BH01888,374
+BH00778,375
+BH10581,376
+BH01503ENJ,377
+BH09404,378
+BH01554HUQ,378
+BH02753ENT,379
+BH05849,380
+AB02024,381
+BH03908,382
+AB01023SAE,383
+AB00774SAB,384
+AB04620,385
+BH02022,386
+BH00687,387
+BH01026,388
+AB00204MAR,388
+BH02307,389
+AB03082,390
+AB08704NEW,246
+AB00963IMP,247 \ No newline at end of file
diff --git a/rel/lang.csv b/rel/lang.csv
new file mode 100644
index 0000000..da26e72
--- /dev/null
+++ b/rel/lang.csv
@@ -0,0 +1,106 @@
+id,iso,iso_type,name,english,flag_link,rtl
+1,en,language,English,English,https://BahaiPrayers.net/Content/Images/Flags/English.png,
+2,is,language,"Íslenska",Icelandic,"https://BahaiPrayers.net/Content/Images/Flags/Íslenska.png",
+3,de,language,Deutsch,German,https://BahaiPrayers.net/Content/Images/Flags/Deutsch.png,
+4,es,language,"Español",Spanish,"https://BahaiPrayers.net/Content/Images/Flags/Español.png",
+5,fa,original,"فارسی",Persian,"https://BahaiPrayers.net/Content/Images/Flags/فارسی.png",rtl
+6,ar,language,"العربية",Arabic,"https://BahaiPrayers.net/Content/Images/Flags/العربية.png",rtl
+7,fr,language,"Français",French,"https://BahaiPrayers.net/Content/Images/Flags/Français.png",
+8,pt,language,"Português (BR)",Portuguese,"https://BahaiPrayers.net/Content/Images/Flags/Português (BR).png",
+9,zh-Hans,language,"简体中文","Chinese Simplified","https://BahaiPrayers.net/Content/Images/Flags/简体中文.png",
+10,it,language,Italiano,Italian,https://BahaiPrayers.net/Content/Images/Flags/Italiano.png,
+11,nl,language,Nederlands,Dutch,https://BahaiPrayers.net/Content/Images/Flags/Nederlands.png,
+12,ro,language,"România",Romanian,"https://BahaiPrayers.net/Content/Images/Flags/România.png",
+13,lv,language,"Latviešu",Latvian,"https://BahaiPrayers.net/Content/Images/Flags/Latviešu.png",
+14,be,language,"Беларускі",Belarusian,"https://BahaiPrayers.net/Content/Images/Flags/Беларускі.png",
+15,ru,language,"Русский",Russian,"https://BahaiPrayers.net/Content/Images/Flags/Русский.png",
+16,hu,language,Magyar,Hungarian,https://BahaiPrayers.net/Content/Images/Flags/Magyar.png,
+17,sq,language,Shqip,Albanian,https://BahaiPrayers.net/Content/Images/Flags/Shqip.png,
+18,cs,language,"Česky",Czech,"https://BahaiPrayers.net/Content/Images/Flags/Česky.png",
+19,ja,language,"日本語",Japanese,"https://BahaiPrayers.net/Content/Images/Flags/日本語.png",
+20,af,language,Afrikaans,Afrikaans,https://BahaiPrayers.net/Content/Images/Flags/Afrikaans.png,
+21,ko,language,"한국어",Korean,"https://BahaiPrayers.net/Content/Images/Flags/한국어.png",
+22,bg,language,"български",Bulgarian,"https://BahaiPrayers.net/Content/Images/Flags/български.png",
+23,no,language,Norsk,Norwegian,https://BahaiPrayers.net/Content/Images/Flags/Norsk.png,
+24,sv,language,Svenska,Swedish,https://BahaiPrayers.net/Content/Images/Flags/Svenska.png,
+25,et,language,Eesti,Estonian,https://BahaiPrayers.net/Content/Images/Flags/Eesti.png,
+26,sk,language,Slovensky,Slovakian,https://BahaiPrayers.net/Content/Images/Flags/Slovensky.png,
+27,eo,language,Esperanto,Esperanto,https://BahaiPrayers.net/Content/Images/Flags/Esperanto.png,
+28,hr,language,Hrvatski,Croatian,https://BahaiPrayers.net/Content/Images/Flags/Hrvatski.png,
+29,ky,language,"Кыргыз",Kyrgyz,"https://BahaiPrayers.net/Content/Images/Flags/Кыргыз.png",
+30,sl,language,"Slovenščina",Slovene,"https://BahaiPrayers.net/Content/Images/Flags/Slovenščina.png",
+32,uk,language,"Україна",Ukranian,"https://BahaiPrayers.net/Content/Images/Flags/Україна.png",
+33,pl,language,Polski,Polish,https://BahaiPrayers.net/Content/Images/Flags/Polski.png,
+34,tl,language,Filipino,Filipino/Tagalog,https://BahaiPrayers.net/Content/Images/Flags/Filipino.png,
+35,hy,language,"հայերեն",Armenian,"https://BahaiPrayers.net/Content/Images/Flags/հայերեն.png",
+36,az,language,"Azərbaycan",Azerbaijan,"https://BahaiPrayers.net/Content/Images/Flags/Azərbaycan.png",
+37,bi,language,Vanuatu,"Vanuatu Regional",https://BahaiPrayers.net/Content/Images/Flags/Vanuatu.png,
+38,vi,language,"Tiếng Việt",Vietnamese,"https://BahaiPrayers.net/Content/Images/Flags/Tiếng Việt.png",
+39,ta,language,"தமிழ்",Tamil,"https://BahaiPrayers.net/Content/Images/Flags/தமிழ்.png",
+40,id,language,"Bahasa Indonesia",Indonesian,"https://BahaiPrayers.net/Content/Images/Flags/Bahasa Indonesia.png",
+41,bs,language,Bosanski,Bosnian,https://BahaiPrayers.net/Content/Images/Flags/Bosanski.png,
+42,cnr,language,Montenegrin,Montenegrin,https://BahaiPrayers.net/Content/Images/Flags/Montenegrin.png,
+43,th,language,"ภาษาไทย",Thai,"https://BahaiPrayers.net/Content/Images/Flags/ภาษาไทย.png",
+44,ca,language,"Català",Catalan,"https://BahaiPrayers.net/Content/Images/Flags/Català.png",
+46,hz,collection,Namibia,Namibia,https://BahaiPrayers.net/Content/Images/Flags/Namibia.png,
+47,ga,language,Irish,Irish,https://BahaiPrayers.net/Content/Images/Flags/Irish.png,
+48,fy,language,Frysk,Frisian,https://BahaiPrayers.net/Content/Images/Flags/Frysk.png,
+50,fo,language,"Føroyar","Faroe Islands","https://BahaiPrayers.net/Content/Images/Flags/Føroyar.png",
+51,srn,language,"Sranan Tongo",Suriname,"https://BahaiPrayers.net/Content/Images/Flags/Sranan Tongo.png",
+52,ch,language,Chamorro,"Guam/Marshall Is.",https://BahaiPrayers.net/Content/Images/Flags/Chamorro.png,
+53,eu,language,Euskara,"Basque (Spain)",https://BahaiPrayers.net/Content/Images/Flags/Euskara.png,
+54,gil,language,Kiribati,Kiribati,https://BahaiPrayers.net/Content/Images/Flags/Kiribati.png,
+55,mh,language,Marshallese,"Marshall Is.",https://BahaiPrayers.net/Content/Images/Flags/Marshallese.png,
+56,haw,language,Hawaiian,Hawaiian,https://BahaiPrayers.net/Content/Images/Flags/Hawaiian.png,
+57,lg,language,Luganda,"Ugandin Regional",https://BahaiPrayers.net/Content/Images/Flags/Luganda.png,
+58,da,language,Dansk,Danish,https://BahaiPrayers.net/Content/Images/Flags/Dansk.png,
+59,mi,language,"Māori","Maori / New Zealand","https://BahaiPrayers.net/Content/Images/Flags/Māori.png",
+60,cy,language,Cymraeg,Welsh,https://BahaiPrayers.net/Content/Images/Flags/Cymraeg.png,
+61,st,language,Sesotho,Lesotho,https://BahaiPrayers.net/Content/Images/Flags/Sesotho.png,
+62,kl,language,Kalaallisut,"Greenlandic (Inuit)",https://BahaiPrayers.net/Content/Images/Flags/Kalaallisut.png,
+63,hi,language,"हिंदी",Hindi,"https://BahaiPrayers.net/Content/Images/Flags/हिंदी.png",
+64,pap,language,Papiamentu,"Lesser Antilles",https://BahaiPrayers.net/Content/Images/Flags/Papiamentu.png,
+65,fj,language,Fiji,"Fiji Islands",https://BahaiPrayers.net/Content/Images/Flags/Fiji.png,
+66,ne,language,"नेपाली",Nepali,"https://BahaiPrayers.net/Content/Images/Flags/नेपाली.png",
+67,fi,language,Suomi,Finnish,https://BahaiPrayers.net/Content/Images/Flags/Suomi.png,
+68,el,language,"ελληνικά",Greek,"https://BahaiPrayers.net/Content/Images/Flags/ελληνικά.png",
+69,mt,language,Malti,Maltese,https://BahaiPrayers.net/Content/Images/Flags/Malti.png,
+70,ht,language,"Kreyol Ayisyen","Haitian Creole","https://BahaiPrayers.net/Content/Images/Flags/Kreyol Ayisyen.png",
+71,lt,language,"Lietuvių",Lithuanian,"https://BahaiPrayers.net/Content/Images/Flags/Lietuvių.png",
+72,lb,language,"Lëtzebuergesch",Luxembourg,"https://BahaiPrayers.net/Content/Images/Flags/Lëtzebuergesch.png",
+75,bn,language,"বাংলা",Bengali,"https://BahaiPrayers.net/Content/Images/Flags/বাংলা.png",
+76,ur,language,"اُردُو",Urdu,"https://BahaiPrayers.net/Content/Images/Flags/اُردُو.png",rtl
+78,zh-Hant,language,"繁體中文","Chinese Traditional","https://BahaiPrayers.net/Content/Images/Flags/繁體中文.png",
+80,ik,collection,"Alaska Native","Alaska Native","https://BahaiPrayers.net/Content/Images/Flags/Alaska Native.png",
+81,km,language,"ភាសាខ្មែរ",Khmer/Cambodia,"https://BahaiPrayers.net/Content/Images/Flags/ភាសាខ្មែរ.png",
+82,mg,language,Malagasy,Malagasy,https://BahaiPrayers.net/Content/Images/Flags/Malagasy.png,
+83,co,language,Corsica,Carsica,https://BahaiPrayers.net/Content/Images/Flags/Corsica.png,
+84,kn,language,"ಕನ್ನಡ",Kannada,"https://BahaiPrayers.net/Content/Images/Flags/ಕನ್ನಡ.png",
+85,nai-CA,collection,"Canadian Indigenous","Canadian Indigenous","https://BahaiPrayers.net/Content/Images/Flags/Canadian Indigenous.png",
+86,nai-US,collection,"American Indian","American Indian","https://BahaiPrayers.net/Content/Images/Flags/American Indian.png",
+87,ml,language,"മലയാളം",Malayalam,"https://BahaiPrayers.net/Content/Images/Flags/മലയാളം.png",
+90,am,language,"አማርኛ.",Ethiopian/Amharic,"https://BahaiPrayers.net/Content/Images/Flags/አማርኛ..png",
+91,iba,language,"Iban","Iban / Sarawak","https://BahaiPrayers.net/Content/Images/Flags/Iban.png",
+92,mn,language,"Монгол хэл","Mongolian","https://BahaiPrayers.net/Content/Images/Flags/Монгол хэл.png",
+93,sr,language,"Srpski српски","Serbian","https://BahaiPrayers.net/Content/Images/Flags/Srpski српски.png",
+94,ny,language,"Chichewa","Chichewa; Nyanja","https://BahaiPrayers.net/Content/Images/Flags/Chichewa.png",
+95,tvl,language,"Tuvalu","Tuvalu","https://BahaiPrayers.net/Content/Images/Flags/Tuvalu.png",
+96,te,language,"తెలుగు","Telugu","https://BahaiPrayers.net/Content/Images/Flags/తెలుగు.png",
+97,gu,language,"ગુજરાતી","Gujarati","https://BahaiPrayers.net/Content/Images/Flags/ગુજરાતી.png",
+98,se,language,"Sámi","Sami","https://BahaiPrayers.net/Content/Images/Flags/Sámi.png",
+99,sw,language,"Kiswahili","Swahili","https://BahaiPrayers.net/Content/Images/Flags/Kiswahili.png",
+100,ha,language,"Hausa","Hausa Nigeria","https://BahaiPrayers.net/Content/Images/Flags/Hausa.png",
+101,sne,language,"Bidayuh","Bidayuh","https://BahaiPrayers.net/Content/Images/Flags/Bidayuh.png",
+102,tk,language,"Türkmençe","Turkmen","https://BahaiPrayers.net/Content/Images/Flags/Türkmençe.png",
+103,sm,language,"Samoan","Samoan","https://BahaiPrayers.net/Content/Images/Flags/Samoan.png",
+104,ms,language,"Bahasa Melayu","Malay","https://BahaiPrayers.net/Content/Images/Flags/Bahasa Malaysia.png",
+106,mr,language,"मराठी","Marathi","https://BahaiPrayers.net/Content/Images/Flags/मराठी.png",
+107,tet,language,"Tetum","Tetum E. Timor","https://BahaiPrayers.net/Content/Images/Flags/Tetum.png",
+108,lo,language,"ພາສາລາວ","Lao","https://BahaiPrayers.net/Content/Images/Flags/ພາສາລາວ.png",
+110,tpi,language,"Tok Pisin","Pidgin English - PNG","https://BahaiPrayers.net/Content/Images/Flags/Tok Pisin.png",
+111,ksd,language,"Kuanua","Kuanua - PNG","https://BahaiPrayers.net/Content/Images/Flags/Kuanua.png",
+112,dgz,language,"Daga","Daga - PNG","https://BahaiPrayers.net/Content/Images/Flags/Daga.png",
+113,nal,language,"Nalik","Nalik - PNG","https://BahaiPrayers.net/Content/Images/Flags/Nalik.png",
+114,med,language,"Melpa","Melpa - PNG","https://BahaiPrayers.net/Content/Images/Flags/Melpa.png",
+115,kgf,language,"Kube","Kube - PNG","https://BahaiPrayers.net/Content/Images/Flags/Kube.png",
+116,ho,language,"Hiri Motu","Hiri Motu - PNG","https://BahaiPrayers.net/Content/Images/Flags/Hiri Motu.png",