language_cards 0.3.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +20 -0
- data/CHANGELOG.md +31 -0
- data/README.md +80 -22
- data/bin/language_cards +7 -1
- data/cards/en/arabic.yml +370 -0
- data/cards/en/armenian.yml +406 -0
- data/cards/en/bengali.yml +395 -0
- data/cards/en/chinese-hsk1.yml +157 -0
- data/cards/en/chinese-hsk2.yml +154 -0
- data/cards/en/chinese-hsk3.yml +305 -0
- data/cards/en/chinese-hsk4.yml +605 -0
- data/cards/en/georgian.yml +362 -0
- data/cards/en/greek.yml +379 -0
- data/cards/en/hebrew.yml +355 -0
- data/cards/en/hindi.yml +412 -0
- data/cards/en/japanese-01-hiragana.yml +227 -0
- data/cards/en/japanese-02-katakana.yml +296 -0
- data/cards/en/japanese-03-keyboard-mappings.yml +357 -0
- data/cards/en/japanese-10-kanji-jlpt-n5.yml +86 -0
- data/cards/en/japanese-11-kanji-jlpt-n4.yml +173 -0
- data/cards/en/japanese-12-kanji-jlpt-n3.yml +374 -0
- data/cards/en/japanese-13-kanji-jlpt-n2.yml +374 -0
- data/cards/en/japanese-14-kanji-jlpt-n1.yml +1239 -0
- data/cards/en/japanese-20-vocabulary-jlpt-n5.yml +708 -0
- data/cards/en/japanese-21-vocabulary-jlpt-n4.yml +668 -0
- data/cards/en/japanese-22-vocabulary-jlpt-n3.yml +2108 -0
- data/cards/en/japanese-23-vocabulary-jlpt-n2.yml +1738 -0
- data/cards/en/japanese-24-vocabulary-jlpt-n1.yml +2689 -0
- data/cards/en/korean.yml +534 -0
- data/cards/en/persian.yml +370 -0
- data/cards/en/punjabi.yml +393 -0
- data/cards/en/russian.yml +398 -0
- data/cards/en/tamil.yml +405 -0
- data/cards/en/thai.yml +408 -0
- data/cards/en/ukrainian.yml +398 -0
- data/cards/en/urdu.yml +374 -0
- data/language_cards.gemspec +7 -6
- data/lib/language_cards/card_set_builder.rb +11 -0
- data/lib/language_cards/controllers/application_controller.rb +2 -0
- data/lib/language_cards/controllers/game.rb +10 -6
- data/lib/language_cards/controllers/main_menu.rb +20 -3
- data/lib/language_cards/defaults.rb +33 -0
- data/lib/language_cards/helpers/view_helper.rb +3 -2
- data/lib/language_cards/menu_builder.rb +11 -0
- data/lib/language_cards/menu_node.rb +9 -4
- data/lib/language_cards/models/card.rb +18 -0
- data/lib/language_cards/models/card_set.rb +15 -16
- data/lib/language_cards/modes/game.rb +15 -4
- data/lib/language_cards/modes/translate.rb +12 -1
- data/lib/language_cards/modes/typing_practice.rb +5 -1
- data/lib/language_cards/paginator.rb +59 -0
- data/lib/language_cards/user_interface.rb +84 -52
- data/lib/language_cards/version.rb +1 -1
- data/lib/language_cards/view/main_menu.erb +3 -1
- data/lib/language_cards/yaml_loader.rb +5 -3
- data/lib/language_cards.rb +7 -24
- data/locales/en.yml +11 -0
- metadata +69 -43
- data/.travis.yml +0 -5
- data/cards/en/japanese-hiragana.yml +0 -113
- data/cards/en/japanese-kanji-jlpt-n5.yml +0 -107
- data/cards/en/japanese-katakana-keyboard-mappings.yml +0 -180
- data/cards/en/japanese-katakana.yml +0 -109
- data/lib/language_cards/grapheme_builder.rb +0 -12
- data/lib/language_cards/language_cards.rb +0 -25
- data/lib/language_cards/models/grapheme.rb +0 -18
data/cards/en/urdu.yml
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Urdu: Alphabet (39), Numbers (23), Numerals (10), Common Words (248), Phrases (41)
|
|
3
|
+
Urdu:
|
|
4
|
+
Alphabet:
|
|
5
|
+
mapping: { Urdu script: [Latin, Letter name] }
|
|
6
|
+
ا: [a, aa, alif]
|
|
7
|
+
ب: [b, be]
|
|
8
|
+
پ: [p, pe]
|
|
9
|
+
ت: [t, te]
|
|
10
|
+
ٹ: [t, tt, te, retroflex te]
|
|
11
|
+
ث: [s, se]
|
|
12
|
+
ج: [j, jim, jeem]
|
|
13
|
+
چ: [ch, che]
|
|
14
|
+
ح: [h, bari he, he]
|
|
15
|
+
خ: [kh, khe]
|
|
16
|
+
د: [d, dal]
|
|
17
|
+
ڈ: [d, dd, dal, retroflex dal]
|
|
18
|
+
ذ: [z, zal]
|
|
19
|
+
ر: [r, re]
|
|
20
|
+
ڑ: [r, rr, re, retroflex re]
|
|
21
|
+
ز: [z, ze]
|
|
22
|
+
ژ: [zh, zhe]
|
|
23
|
+
س: [s, sin, seen]
|
|
24
|
+
ش: [sh, shin, sheen]
|
|
25
|
+
ص: [s, suad, swad]
|
|
26
|
+
ض: [z, zuad, zwad]
|
|
27
|
+
ط: [t, toe]
|
|
28
|
+
ظ: [z, zoe]
|
|
29
|
+
ع: [ain, ayn]
|
|
30
|
+
غ: [gh, ghain]
|
|
31
|
+
ف: [f, fe]
|
|
32
|
+
ق: [q, qaf, qaaf]
|
|
33
|
+
ک: [k, kaf, kaaf]
|
|
34
|
+
گ: [g, gaf, gaaf]
|
|
35
|
+
ل: [l, lam, laam]
|
|
36
|
+
م: [m, mim, meem]
|
|
37
|
+
ن: ['n', nun, noon]
|
|
38
|
+
ں: ['n', nun ghunna, noon ghunna]
|
|
39
|
+
و: [w, v, wao, vao]
|
|
40
|
+
ہ: [h, choti he, chhoti he]
|
|
41
|
+
ھ: [h, do chashmi he, do-chashmi he]
|
|
42
|
+
ء: [hamza, hamzah]
|
|
43
|
+
ی: ['y', i, choti ye, ye]
|
|
44
|
+
ے: [e, ay, bari ye, badi ye]
|
|
45
|
+
Numbers:
|
|
46
|
+
mapping: { Urdu: [Latin, English] }
|
|
47
|
+
صفر: [sifar, zero, '0']
|
|
48
|
+
ایک: [ek, aik, one, '1']
|
|
49
|
+
دو: [do, two, '2']
|
|
50
|
+
تین: [teen, tin, three, '3']
|
|
51
|
+
چار: [chaar, char, four, '4']
|
|
52
|
+
پانچ: [paanch, panch, five, '5']
|
|
53
|
+
چھ: [chhe, chay, six, '6']
|
|
54
|
+
سات: [saat, sat, seven, '7']
|
|
55
|
+
آٹھ: [aath, ath, eight, '8']
|
|
56
|
+
نو: [nau, nine, '9']
|
|
57
|
+
دس: [das, ten, '10']
|
|
58
|
+
گیارہ: [gyaarah, gyarah, eleven, '11']
|
|
59
|
+
بارہ: [baarah, barah, twelve, '12']
|
|
60
|
+
بیس: [bees, bis, twenty, '20']
|
|
61
|
+
تیس: [tees, tis, thirty, '30']
|
|
62
|
+
چالیس: [chaalees, chalis, forty, '40']
|
|
63
|
+
پچاس: [pachaas, pachas, fifty, '50']
|
|
64
|
+
ساٹھ: [saath, sath, sixty, '60']
|
|
65
|
+
ستر: [sattar, seventy, '70']
|
|
66
|
+
اسی: [assi, eighty, '80']
|
|
67
|
+
نوے: [nawway, nabbe, ninety, '90']
|
|
68
|
+
سو: [sau, hundred, one hundred, '100']
|
|
69
|
+
ہزار: [hazaar, hazar, thousand, one thousand, '1000']
|
|
70
|
+
Numerals:
|
|
71
|
+
mapping: { Urdu digits: [Digit, English] }
|
|
72
|
+
'۰': ['0', zero]
|
|
73
|
+
'۱': ['1', one]
|
|
74
|
+
'۲': ['2', two]
|
|
75
|
+
'۳': ['3', three]
|
|
76
|
+
'۴': ['4', four]
|
|
77
|
+
'۵': ['5', five]
|
|
78
|
+
'۶': ['6', six]
|
|
79
|
+
'۷': ['7', seven]
|
|
80
|
+
'۸': ['8', eight]
|
|
81
|
+
'۹': ['9', nine]
|
|
82
|
+
Common Words:
|
|
83
|
+
mapping: { Urdu: [Latin, English] }
|
|
84
|
+
میں: [main, mein, I, in]
|
|
85
|
+
تم: [tum, you]
|
|
86
|
+
آپ: [aap, you]
|
|
87
|
+
وہ: [woh, he, she, that]
|
|
88
|
+
ہم: [hum, we]
|
|
89
|
+
یہ: [yeh, this, he, she]
|
|
90
|
+
باپ: [baap, father]
|
|
91
|
+
ماں: [maan, mother]
|
|
92
|
+
بھائی: [bhaai, bhai, brother]
|
|
93
|
+
بہن: [behen, bahan, sister]
|
|
94
|
+
بیٹا: [beta, son]
|
|
95
|
+
بیٹی: [beti, daughter]
|
|
96
|
+
شوہر: [shohar, husband]
|
|
97
|
+
بیوی: [biwi, wife]
|
|
98
|
+
دادا: [daada, dada, grandfather]
|
|
99
|
+
دادی: [daadi, dadi, grandmother]
|
|
100
|
+
خاندان: [khaandaan, khandan, family]
|
|
101
|
+
بچہ: [bachcha, bacha, child, kid]
|
|
102
|
+
لڑکا: [larka, boy]
|
|
103
|
+
لڑکی: [larki, girl]
|
|
104
|
+
آدمی: [aadmi, man, person]
|
|
105
|
+
عورت: [aurat, woman]
|
|
106
|
+
دوست: [dost, friend]
|
|
107
|
+
لوگ: [log, people]
|
|
108
|
+
استاد: [ustaad, ustad, teacher]
|
|
109
|
+
طالب علم: [taalib-e-ilm, talib ilm, student]
|
|
110
|
+
ڈاکٹر: [daaktar, doctor]
|
|
111
|
+
سر: [sar, head]
|
|
112
|
+
آنکھ: [aankh, eye]
|
|
113
|
+
کان: [kaan, ear]
|
|
114
|
+
ناک: [naak, nose]
|
|
115
|
+
منہ: [munh, mouth, face]
|
|
116
|
+
ہاتھ: [haath, hand]
|
|
117
|
+
پاؤں: [paaon, paon, foot]
|
|
118
|
+
بال: [baal, hair]
|
|
119
|
+
دل: [dil, heart]
|
|
120
|
+
چہرہ: [chehra, face]
|
|
121
|
+
دانت: [daant, tooth]
|
|
122
|
+
پیٹ: [pet, stomach, belly]
|
|
123
|
+
پانی: [paani, pani, water]
|
|
124
|
+
کھانا: [khaana, khana, food, eat, meal]
|
|
125
|
+
روٹی: [roti, bread, flatbread]
|
|
126
|
+
چاول: [chaawal, chawal, rice]
|
|
127
|
+
گوشت: [gosht, meat]
|
|
128
|
+
مرغی: [murghi, chicken, hen]
|
|
129
|
+
مچھلی: [machhli, fish]
|
|
130
|
+
دودھ: [doodh, milk]
|
|
131
|
+
کافی: [kaafi, coffee, enough, quite]
|
|
132
|
+
چائے: [chaae, chai, tea]
|
|
133
|
+
انڈا: [anda, egg]
|
|
134
|
+
پھل: [phal, fruit]
|
|
135
|
+
سیب: [seb, apple]
|
|
136
|
+
کیلا: [kela, banana]
|
|
137
|
+
سبزی: [sabzi, vegetable, vegetables]
|
|
138
|
+
نمک: [namak, salt]
|
|
139
|
+
چینی: [cheeni, sugar, Chinese]
|
|
140
|
+
کتا: [kutta, dog]
|
|
141
|
+
بلی: [billi, cat]
|
|
142
|
+
گھوڑا: [ghora, horse]
|
|
143
|
+
پرندہ: [parinda, bird]
|
|
144
|
+
گائے: [gaae, gaay, cow]
|
|
145
|
+
جانور: [jaanwar, janwar, animal]
|
|
146
|
+
لال: [laal, lal, red]
|
|
147
|
+
نیلا: [neela, blue]
|
|
148
|
+
ہرا: [hara, green]
|
|
149
|
+
پیلا: [peela, yellow]
|
|
150
|
+
سفید: [safed, white]
|
|
151
|
+
کالا: [kaala, kala, black]
|
|
152
|
+
بھورا: [bhoora, brown]
|
|
153
|
+
رنگ: [rang, color, colour]
|
|
154
|
+
دن: [din, day]
|
|
155
|
+
رات: [raat, night]
|
|
156
|
+
صبح: [subah, morning]
|
|
157
|
+
شام: [shaam, evening]
|
|
158
|
+
آج: [aaj, today]
|
|
159
|
+
کل: [kal, tomorrow, yesterday]
|
|
160
|
+
اب: [ab, now]
|
|
161
|
+
گھنٹہ: [ghanta, hour]
|
|
162
|
+
منٹ: [minat, minute]
|
|
163
|
+
ہفتہ: [hafta, week, Saturday]
|
|
164
|
+
مہینہ: [maheena, mahina, month]
|
|
165
|
+
سال: [saal, year]
|
|
166
|
+
وقت: [waqt, time]
|
|
167
|
+
اتوار: [itwaar, itwar, Sunday]
|
|
168
|
+
پیر: [peer, Monday]
|
|
169
|
+
منگل: [mangal, Tuesday]
|
|
170
|
+
بدھ: [budh, Wednesday]
|
|
171
|
+
جمعرات: [jumeraat, jumerat, Thursday]
|
|
172
|
+
جمعہ: [juma, jumma, Friday]
|
|
173
|
+
گھر: [ghar, house, home]
|
|
174
|
+
اسکول: [iskool, school]
|
|
175
|
+
ہسپتال: [haspataal, hospital]
|
|
176
|
+
بازار: [baazaar, bazaar, market]
|
|
177
|
+
ہوٹل: [hotal, hotel, restaurant]
|
|
178
|
+
شہر: [shehar, shahar, city]
|
|
179
|
+
سڑک: [sarak, road, street]
|
|
180
|
+
مسجد: [masjid, mosque]
|
|
181
|
+
دفتر: [daftar, office]
|
|
182
|
+
بینک: [baink, bank]
|
|
183
|
+
کمرہ: [kamra, room]
|
|
184
|
+
غسل خانہ: [ghusl khaana, ghusalkhana, bathroom]
|
|
185
|
+
ملک: [mulk, country]
|
|
186
|
+
سمندر: [samandar, sea, ocean]
|
|
187
|
+
جگہ: [jagah, place, space]
|
|
188
|
+
دروازہ: [darwaaza, darwaza, door]
|
|
189
|
+
کھڑکی: [khirki, window]
|
|
190
|
+
میز: [mez, table]
|
|
191
|
+
کرسی: [kursi, chair]
|
|
192
|
+
بستر: [bistar, bed]
|
|
193
|
+
کتاب: [kitaab, kitab, book]
|
|
194
|
+
قلم: [qalam, pen]
|
|
195
|
+
فون: [fon, phone]
|
|
196
|
+
گاڑی: [gaari, car, vehicle, train]
|
|
197
|
+
چابی: [chaabi, key]
|
|
198
|
+
کپڑے: [kapre, clothes]
|
|
199
|
+
پیسے: [paise, money]
|
|
200
|
+
پینا: [peena, drink]
|
|
201
|
+
جانا: [jaana, go]
|
|
202
|
+
آنا: [aana, come]
|
|
203
|
+
لکھنا: [likhna, write]
|
|
204
|
+
پڑھنا: [parhna, read, study]
|
|
205
|
+
بولنا: [bolna, speak, say]
|
|
206
|
+
کہنا: [kehna, say, tell]
|
|
207
|
+
دیکھنا: [dekhna, see, look, watch]
|
|
208
|
+
سننا: [sunna, hear, listen]
|
|
209
|
+
جاننا: [jaanna, know]
|
|
210
|
+
سمجھنا: [samajhna, understand]
|
|
211
|
+
پسند کرنا: [pasand karna, like]
|
|
212
|
+
چاہنا: [chaahna, want, love]
|
|
213
|
+
کام کرنا: [kaam karna, work]
|
|
214
|
+
سونا: [sona, sleep, gold]
|
|
215
|
+
بیٹھنا: [baithna, sit]
|
|
216
|
+
چلنا: [chalna, walk, move]
|
|
217
|
+
دوڑنا: [daurna, run]
|
|
218
|
+
کھولنا: [kholna, open]
|
|
219
|
+
بند کرنا: [band karna, close, shut, turn off]
|
|
220
|
+
دینا: [dena, give]
|
|
221
|
+
لینا: [lena, take]
|
|
222
|
+
خریدنا: [khareedna, buy]
|
|
223
|
+
بیچنا: [bechna, sell]
|
|
224
|
+
رہنا: [rehna, live, stay]
|
|
225
|
+
سیکھنا: [seekhna, learn]
|
|
226
|
+
مدد کرنا: [madad karna, help]
|
|
227
|
+
کھیلنا: [khelna, play]
|
|
228
|
+
پوچھنا: [poochhna, puchna, ask]
|
|
229
|
+
انتظار کرنا: [intezaar karna, wait]
|
|
230
|
+
ڈھونڈنا: [dhoondna, search, look for]
|
|
231
|
+
ملنا: [milna, meet, get]
|
|
232
|
+
سکنا: [sakna, can, be able]
|
|
233
|
+
ہونا: [hona, be, happen]
|
|
234
|
+
کرنا: [karna, do, make]
|
|
235
|
+
واپس آنا: [waapas aana, come back, return]
|
|
236
|
+
سفر کرنا: [safar karna, travel]
|
|
237
|
+
سوچنا: [sochna, think]
|
|
238
|
+
بھولنا: [bhoolna, forget]
|
|
239
|
+
یاد کرنا: [yaad karna, remember, memorize, miss]
|
|
240
|
+
شروع کرنا: [shuru karna, start, begin]
|
|
241
|
+
ختم کرنا: [khatam karna, finish, end]
|
|
242
|
+
لانا: [laana, bring]
|
|
243
|
+
ہنسنا: [hansna, laugh]
|
|
244
|
+
رونا: [rona, cry]
|
|
245
|
+
گانا: [gaana, sing, song]
|
|
246
|
+
پہننا: [pehenna, wear, put on]
|
|
247
|
+
رکھنا: [rakhna, put, keep, place]
|
|
248
|
+
بڑا: [bara, big, large, elder]
|
|
249
|
+
چھوٹا: [chhota, chota, small, little, younger]
|
|
250
|
+
نیا: [naya, new]
|
|
251
|
+
پرانا: [puraana, purana, old]
|
|
252
|
+
اچھا: [achchha, acha, good, okay, nice]
|
|
253
|
+
برا: [bura, bad]
|
|
254
|
+
خوبصورت: [khoobsoorat, khubsurat, beautiful]
|
|
255
|
+
لمبا: [lamba, long, tall]
|
|
256
|
+
گرم: [garam, hot, warm]
|
|
257
|
+
ٹھنڈا: [thanda, cold, cool]
|
|
258
|
+
آسان: [aasaan, asan, easy]
|
|
259
|
+
مشکل: [mushkil, difficult, hard]
|
|
260
|
+
تیز: [tez, fast, quick, sharp]
|
|
261
|
+
آہستہ: [aahista, ahista, slow, slowly]
|
|
262
|
+
زیادہ: [zyaada, zyada, more, a lot, too much]
|
|
263
|
+
کم: [kam, less, few, little]
|
|
264
|
+
خوش: [khush, happy, glad]
|
|
265
|
+
اداس: [udaas, udas, sad]
|
|
266
|
+
بھوکا: [bhooka, bhuka, hungry]
|
|
267
|
+
پیاسا: [pyaasa, pyasa, thirsty]
|
|
268
|
+
بیمار: [beemaar, bimar, sick, ill]
|
|
269
|
+
صاف: [saaf, clean, clear]
|
|
270
|
+
گندا: [ganda, dirty]
|
|
271
|
+
قریب: [qareeb, near, close]
|
|
272
|
+
دور: [door, far]
|
|
273
|
+
کھلا: [khula, open]
|
|
274
|
+
بند: [band, closed, shut]
|
|
275
|
+
سستا: [sasta, cheap]
|
|
276
|
+
مہنگا: [mehenga, mehnga, expensive]
|
|
277
|
+
صحیح: [sahih, sahi, correct, right]
|
|
278
|
+
ضروری: [zaroori, necessary, important]
|
|
279
|
+
بوڑھا: [boorha, old, elderly]
|
|
280
|
+
جوان: [jawaan, jawan, young]
|
|
281
|
+
سب: [sab, all, everyone, everything]
|
|
282
|
+
کیا: [kya, what]
|
|
283
|
+
کون: [kaun, who]
|
|
284
|
+
کہاں: [kahaan, kahan, where]
|
|
285
|
+
کب: [kab, when]
|
|
286
|
+
کیوں: [kyun, kyon, why]
|
|
287
|
+
کیسے: [kaise, how]
|
|
288
|
+
کتنا: [kitna, how much, how many]
|
|
289
|
+
کون سا: [kaun sa, which]
|
|
290
|
+
ہاں: [haan, han, 'yes']
|
|
291
|
+
جی: [jee, ji, 'yes', sir]
|
|
292
|
+
نہیں: [nahin, nahi, 'no', not]
|
|
293
|
+
اور: [aur, and, more]
|
|
294
|
+
یا: [ya, or]
|
|
295
|
+
لیکن: [lekin, but]
|
|
296
|
+
پر: [par, 'on', at, but]
|
|
297
|
+
سے: [se, from, with, than]
|
|
298
|
+
ساتھ: [saath, with, together]
|
|
299
|
+
یہاں: [yahaan, yahan, here]
|
|
300
|
+
وہاں: [wahaan, wahan, there]
|
|
301
|
+
بہت: [bohat, bahut, very, a lot, much]
|
|
302
|
+
بھی: [bhi, also, too, even]
|
|
303
|
+
سورج: [sooraj, suraj, sun]
|
|
304
|
+
چاند: [chaand, chand, moon]
|
|
305
|
+
زمین: [zameen, earth, ground, land]
|
|
306
|
+
بارش: [baarish, barish, rain]
|
|
307
|
+
درخت: [darakht, tree]
|
|
308
|
+
پھول: [phool, flower]
|
|
309
|
+
آگ: [aag, fire]
|
|
310
|
+
ہوا: [hawa, air, wind]
|
|
311
|
+
پہاڑ: [pahaar, mountain]
|
|
312
|
+
راستہ: [raasta, rasta, way, path, road]
|
|
313
|
+
نام: [naam, name]
|
|
314
|
+
زبان: [zabaan, zaban, language, tongue]
|
|
315
|
+
لفظ: [lafz, word]
|
|
316
|
+
سوال: [sawaal, sawal, question]
|
|
317
|
+
جواب: [jawaab, jawab, answer, reply]
|
|
318
|
+
اردو: urdu
|
|
319
|
+
انگریزی: [angrezi, English]
|
|
320
|
+
چیز: [cheez, thing]
|
|
321
|
+
زندگی: [zindagi, life]
|
|
322
|
+
محبت: [mohabbat, love]
|
|
323
|
+
بس: [bas, bus, enough]
|
|
324
|
+
ہوائی جہاز: [hawaai jahaaz, hawai jahaz, airplane, plane]
|
|
325
|
+
قیمت: [qeemat, keemat, price]
|
|
326
|
+
موسم: [mausam, weather, season]
|
|
327
|
+
اوپر: [oopar, upar, up, above]
|
|
328
|
+
نیچے: [neeche, niche, down, below, under]
|
|
329
|
+
پہلے: [pehle, before, first, earlier]
|
|
330
|
+
بعد: [baad, after, later]
|
|
331
|
+
کام: [kaam, work, job]
|
|
332
|
+
Phrases:
|
|
333
|
+
mapping: { Urdu: [Latin, English] }
|
|
334
|
+
السلام علیکم: [assalam-o-alaikum, assalamu alaikum, hello, peace be upon you]
|
|
335
|
+
وعلیکم السلام: [walaikum assalam, wa alaikum assalam, and peace be upon you, hello]
|
|
336
|
+
آداب: [aadaab, adab, greetings, hello]
|
|
337
|
+
صبح بخیر: [subah bakhair, good morning]
|
|
338
|
+
شب بخیر: [shab bakhair, good night]
|
|
339
|
+
خدا حافظ: [khuda hafiz, goodbye, bye]
|
|
340
|
+
اللہ حافظ: [allah hafiz, goodbye, bye]
|
|
341
|
+
شکریہ: [shukriya, thank you, thanks]
|
|
342
|
+
بہت شکریہ: [bohat shukriya, bahut shukriya, thank you very much, thanks a lot]
|
|
343
|
+
کوئی بات نہیں: [koi baat nahin, no problem, it's okay, you're welcome]
|
|
344
|
+
براہ مہربانی: [baraae meherbani, barae meharbani, please]
|
|
345
|
+
معاف کیجیے: [maaf kijiye, excuse me, sorry, pardon me]
|
|
346
|
+
مجھے افسوس ہے: [mujhe afsos hai, I'm sorry, I am sorry]
|
|
347
|
+
جی ہاں: [jee haan, ji haan, 'yes']
|
|
348
|
+
جی نہیں: [jee nahin, ji nahin, 'no']
|
|
349
|
+
آپ کیسے ہیں: [aap kaise hain, how are you]
|
|
350
|
+
کیا حال ہے: [kya haal hai, kya hal hai, how are you, how's it going]
|
|
351
|
+
میں ٹھیک ہوں: [main theek hoon, main thik hun, I'm fine, I'm okay]
|
|
352
|
+
آپ کا نام کیا ہے: [aap ka naam kya hai, what is your name, what's your name]
|
|
353
|
+
میرا نام علی ہے: [mera naam ali hai, my name is Ali]
|
|
354
|
+
آپ سے مل کر خوشی ہوئی: [aap se mil kar khushi hui, nice to meet you, pleased to meet you]
|
|
355
|
+
مجھے سمجھ نہیں آیا: [mujhe samajh nahin aaya, I don't understand, I didn't understand]
|
|
356
|
+
مجھے نہیں معلوم: [mujhe nahin maloom, mujhe nahi malum, I don't know]
|
|
357
|
+
کیا آپ انگریزی بولتے ہیں: [kya aap angrezi bolte hain, do you speak English]
|
|
358
|
+
میں تھوڑی اردو بولتا ہوں: [main thori urdu bolta hoon, I speak a little Urdu]
|
|
359
|
+
آہستہ بولیں: [aahista bolein, ahista bolen, speak slowly, please speak slowly]
|
|
360
|
+
باتھ روم کہاں ہے: [baathroom kahaan hai, bathroom kahan hai, where is the bathroom, where is the toilet]
|
|
361
|
+
اسٹیشن کہاں ہے: [station kahaan hai, station kahan hai, where is the station]
|
|
362
|
+
یہ کتنے کا ہے: [yeh kitne ka hai, how much is this, how much is it]
|
|
363
|
+
آپ کہاں سے ہیں: [aap kahaan se hain, aap kahan se hain, where are you from]
|
|
364
|
+
میں امریکہ سے ہوں: [main amreeka se hoon, main amrika se hun, I'm from America, I am from America]
|
|
365
|
+
مجھے پانی چاہیے: [mujhe paani chahiye, mujhe pani chahiye, I want water, I need water]
|
|
366
|
+
مدد کریں: [madad karein, madad karen, help, please help]
|
|
367
|
+
کیا وقت ہوا ہے: [kya waqt hua hai, what time is it]
|
|
368
|
+
خوش آمدید: [khush aamdeed, khush amdid, welcome]
|
|
369
|
+
ٹھیک ہے: [theek hai, thik hai, okay, alright, fine]
|
|
370
|
+
سب ٹھیک ہے: [sab theek hai, sab thik hai, everything is fine, all good]
|
|
371
|
+
ان شاء اللہ: [inshallah, in sha allah, God willing, hopefully]
|
|
372
|
+
مبارک ہو: [mubarak ho, congratulations]
|
|
373
|
+
میں آپ سے محبت کرتا ہوں: [main aap se mohabbat karta hoon, I love you]
|
|
374
|
+
پھر ملیں گے: [phir milenge, phir milen ge, see you again, see you later]
|
data/language_cards.gemspec
CHANGED
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.authors = ['Daniel P. Clark']
|
|
10
10
|
spec.email = ['6ftdan@gmail.com']
|
|
11
11
|
|
|
12
|
-
spec.summary = %q{
|
|
13
|
-
spec.description = %q{Flashcard game for language learning. Make your own cards or translations as well.}
|
|
12
|
+
spec.summary = %q{Terminal flashcard game for learning languages with foreign scripts.}
|
|
13
|
+
spec.description = %q{Flashcard game for language learning: Japanese (kana, JLPT N5-N1 kanji and vocabulary), Chinese (HSK 1-4), Korean, Russian, Arabic, Hindi and many more. Make your own cards or translations as well.}
|
|
14
14
|
spec.homepage = 'http://github.com/danielpclark/language_cards'
|
|
15
15
|
spec.license = 'MIT'
|
|
16
16
|
|
|
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.executables = ['language_cards']
|
|
22
22
|
spec.require_paths = ['lib','cards']
|
|
23
23
|
|
|
24
|
-
spec.
|
|
25
|
-
|
|
24
|
+
spec.required_ruby_version = '>= 2.5'
|
|
25
|
+
|
|
26
|
+
spec.add_dependency 'highline', '>= 2.0', '< 4'
|
|
27
|
+
spec.add_dependency 'i18n', '>= 1.0', '< 2'
|
|
26
28
|
spec.add_dependency 'slop', '~> 4.6'
|
|
27
|
-
spec.add_development_dependency '
|
|
28
|
-
spec.add_development_dependency 'rake', '~> 12.3'
|
|
29
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
29
30
|
spec.add_development_dependency 'minitest', '~> 5.10'
|
|
30
31
|
end
|
|
@@ -8,13 +8,13 @@ module LanguageCards
|
|
|
8
8
|
def render(correct:, incorrect:, title:, timer:, last:)
|
|
9
9
|
_score = t('Game.ScoreMenu.Score') + ": %0.2d%%" % calc_score(correct, incorrect)
|
|
10
10
|
_timer = [((t('Timer.Timer') + ": " + timer.ha) if timer.time?), nil, timer.h]
|
|
11
|
-
_mexit = t '
|
|
11
|
+
_mexit = t 'Game.Exit'
|
|
12
12
|
|
|
13
13
|
super(binding)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def process(cards
|
|
17
|
-
ic = struct_data.new(cards
|
|
16
|
+
def process(cards)
|
|
17
|
+
ic = struct_data.new(cards)
|
|
18
18
|
ic.get_input
|
|
19
19
|
{
|
|
20
20
|
correct: ic.valid?,
|
|
@@ -23,7 +23,7 @@ module LanguageCards
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def struct_data
|
|
26
|
-
Struct.new(:
|
|
26
|
+
Struct.new(:game) do
|
|
27
27
|
def input
|
|
28
28
|
@input
|
|
29
29
|
end
|
|
@@ -33,13 +33,17 @@ module LanguageCards
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def card
|
|
36
|
-
@card ||=
|
|
36
|
+
@card ||= game.sample.current
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def display
|
|
40
40
|
"#{card}"
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
def mode
|
|
44
|
+
game.mode
|
|
45
|
+
end
|
|
46
|
+
|
|
43
47
|
def expected
|
|
44
48
|
case mode
|
|
45
49
|
when :translate
|
|
@@ -62,7 +66,7 @@ module LanguageCards
|
|
|
62
66
|
end
|
|
63
67
|
|
|
64
68
|
def valid?
|
|
65
|
-
|
|
69
|
+
game.match? input
|
|
66
70
|
end
|
|
67
71
|
end
|
|
68
72
|
end
|
|
@@ -3,19 +3,36 @@ require 'language_cards/controllers/application_controller'
|
|
|
3
3
|
module LanguageCards
|
|
4
4
|
module Controllers
|
|
5
5
|
class MainMenu < ApplicationController
|
|
6
|
-
|
|
6
|
+
# @param courses [Array<String>] labels for the entries on the current page
|
|
7
|
+
# @param offset [Integer] number of entries on the pages before this one
|
|
8
|
+
# @param pages [Paginator, nil] used to show page navigation when needed
|
|
9
|
+
def render(courses:, mode:, offset: 0, heading: nil, pages: nil, back: false)
|
|
7
10
|
_title = t 'Menu.Title'
|
|
8
|
-
_select = t
|
|
11
|
+
_select = heading || t('Menu.Choose')
|
|
9
12
|
_mode = t('Menu.GameMode') + case mode.peek
|
|
10
13
|
when :translate then t 'Menu.ModeTranslate'
|
|
11
14
|
when :typing_practice then t 'Menu.ModeTyping'
|
|
12
15
|
end
|
|
13
16
|
_toggle = "m: " + t('Menu.ToggleGameMode')
|
|
14
|
-
|
|
17
|
+
width = (offset + courses.length).to_s.length
|
|
18
|
+
_courses = courses.each.with_index(offset + 1).map {|item, number| "#{number.to_s.rjust(width)}: #{item}" }
|
|
19
|
+
_page = page_line(pages)
|
|
20
|
+
_back = ("b: " + t('Menu.Back') if back)
|
|
21
|
+
_quit = "q: " + t('Menu.Quit')
|
|
15
22
|
_mexit = t 'Menu.Exit'
|
|
16
23
|
|
|
17
24
|
super(binding)
|
|
18
25
|
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
def page_line(pages)
|
|
29
|
+
return unless pages && pages.paginated?
|
|
30
|
+
|
|
31
|
+
nav = []
|
|
32
|
+
nav << "p: " + t('Menu.PreviousPage') if pages.previous_page?
|
|
33
|
+
nav << "n: " + t('Menu.NextPage') if pages.next_page?
|
|
34
|
+
[t('Menu.Page', page: pages.page + 1, pages: pages.pages), nav.join(' ')]
|
|
35
|
+
end
|
|
19
36
|
end
|
|
20
37
|
end
|
|
21
38
|
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'highline'
|
|
2
|
+
require 'slop'
|
|
3
|
+
require 'i18n'
|
|
4
|
+
|
|
5
|
+
module LanguageCards
|
|
6
|
+
# Card files and terminal input are UTF-8 even when the locale isn't set.
|
|
7
|
+
Encoding.default_external = Encoding::UTF_8 unless Encoding.default_external == Encoding::UTF_8
|
|
8
|
+
|
|
9
|
+
OPTS = Slop.parse(suppress_errors: true) do |args|
|
|
10
|
+
args.banner = 'usage: language_cards [options]'
|
|
11
|
+
args.string '-l', '--language', 'language (default: en)', default: 'en'
|
|
12
|
+
args.bool '-v', '--version', 'print the version'
|
|
13
|
+
args.bool '-h', '--help', 'print this help'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
CARD_LANGUAGE = OPTS[:language]
|
|
17
|
+
|
|
18
|
+
module ESC
|
|
19
|
+
CLEAR = (ERASE_SCOLLBACK = "\e[3J") + (CURSOR_HOME = "\e[H") + (ERASE_DISPLAY = "\e[2J")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
CLI = HighLine.new
|
|
23
|
+
JOIN = " - "
|
|
24
|
+
|
|
25
|
+
SUBMENUWIDTH = 60
|
|
26
|
+
|
|
27
|
+
# Menu entries shown per page before paginating.
|
|
28
|
+
PER_PAGE = 10
|
|
29
|
+
|
|
30
|
+
::I18n.config.available_locales = :en
|
|
31
|
+
::I18n.load_path = Dir[File.join(File.expand_path(File.join('..','..'), __dir__), 'locales', '*.yml')]
|
|
32
|
+
::I18n.load_path += Dir[File.join(File.expand_path(ENV['HOME']), '.language_cards', 'locales', '*.yml')] if ENV['HOME']
|
|
33
|
+
end
|
|
@@ -5,14 +5,15 @@ module LanguageCards
|
|
|
5
5
|
'~' * SUBMENUWIDTH
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
def t str
|
|
9
|
-
I18n.t str
|
|
8
|
+
def t str, **options
|
|
9
|
+
I18n.t str, **options
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def draw left=nil, center=nil, right=nil
|
|
13
13
|
width = SUBMENUWIDTH
|
|
14
14
|
str = left.to_s
|
|
15
15
|
str = str + center.to_s.rjust(width/2 - str.length + center.to_s.length/2)
|
|
16
|
+
str = str.rstrip + ' ' if str.length + right.to_s.length > width && !str.strip.empty?
|
|
16
17
|
str + right.to_s.rjust(width - str.length)
|
|
17
18
|
end
|
|
18
19
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'language_cards/menu_node'
|
|
2
|
+
|
|
3
|
+
module LanguageCards
|
|
4
|
+
def self.menu_builder(cards_yaml)
|
|
5
|
+
cards_yaml.each_with_object([]) do |(language, values), memo|
|
|
6
|
+
values.each do |category_with_card_set|
|
|
7
|
+
memo << MenuNode.new(language, category_with_card_set)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -12,13 +12,18 @@ module LanguageCards
|
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def title(fmt =
|
|
15
|
+
def title(fmt = JOIN, rng = 0..-1)
|
|
16
16
|
label[rng].delete_if(&:empty?).join(fmt)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
# @return <Mode<CardSet> < Game>
|
|
20
|
-
def mode
|
|
21
|
-
child.mode
|
|
20
|
+
def game(mode)
|
|
21
|
+
child.game(mode)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @return Integer number of cards in the card set
|
|
25
|
+
def size
|
|
26
|
+
child.size
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
# This is the preferred method for the view as this object shouldn't
|
|
@@ -29,7 +34,7 @@ module LanguageCards
|
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def to_s
|
|
32
|
-
label.delete_if(&:empty?).join(
|
|
37
|
+
label.delete_if(&:empty?).join(JOIN)
|
|
33
38
|
end
|
|
34
39
|
|
|
35
40
|
private
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
module LanguageCards
|
|
3
|
+
class Card
|
|
4
|
+
attr_reader :translation
|
|
5
|
+
def initialize card, translation
|
|
6
|
+
@card = card.to_s
|
|
7
|
+
@translation = Array(translation).map(&:to_s)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def display
|
|
11
|
+
@card
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_s
|
|
15
|
+
@card
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -1,28 +1,24 @@
|
|
|
1
|
-
require 'language_cards/models/
|
|
2
|
-
require 'language_cards/
|
|
1
|
+
require 'language_cards/models/card'
|
|
2
|
+
require 'language_cards/card_set_builder'
|
|
3
3
|
require 'language_cards/modes/typing_practice'
|
|
4
4
|
require 'language_cards/modes/translate'
|
|
5
5
|
|
|
6
6
|
module LanguageCards
|
|
7
7
|
class CardSet
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
include CardSetBuilder
|
|
9
|
+
attr_reader :cards
|
|
10
|
+
def initialize(card_hash)
|
|
11
|
+
@cards = card_set_builder(card_hash)
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
def
|
|
14
|
-
|
|
14
|
+
def game(mode)
|
|
15
|
+
Modes.public_send mode, self
|
|
16
|
+
rescue NoMethodError
|
|
17
|
+
raise InvalidGameMode, "Invalid Game Mode!"
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
when :translate
|
|
20
|
-
Modes::Translate.new(self)
|
|
21
|
-
when :typing_practice
|
|
22
|
-
Modes::TypingPractice.new(self)
|
|
23
|
-
else
|
|
24
|
-
raise "Invalid Game Mode!"
|
|
25
|
-
end
|
|
20
|
+
def size
|
|
21
|
+
cards.length
|
|
26
22
|
end
|
|
27
23
|
|
|
28
24
|
# So as to not interfere with menu naming as this is not meant to
|
|
@@ -34,5 +30,8 @@ module LanguageCards
|
|
|
34
30
|
def label
|
|
35
31
|
[]
|
|
36
32
|
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
class InvalidGameMode < StandardError; end
|
|
37
36
|
end
|
|
38
37
|
end
|