Skip to content

Commit 425b10f

Browse files
committedSep 11, 2024
0.7.7 - localization fix + button to github
howtoplay.md added, howtoplay text fix
1 parent 5f28841 commit 425b10f

File tree

8 files changed

+149
-22
lines changed

8 files changed

+149
-22
lines changed
 

‎5words10seconds.xcodeproj/project.pbxproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@
626626
"$(inherited)",
627627
"@executable_path/Frameworks",
628628
);
629-
MARKETING_VERSION = 0.7.6;
629+
MARKETING_VERSION = 0.7.7;
630630
PRODUCT_BUNDLE_IDENTIFIER = d3f0ld.5words10seconds;
631631
PRODUCT_NAME = "$(TARGET_NAME)";
632632
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -660,7 +660,7 @@
660660
"$(inherited)",
661661
"@executable_path/Frameworks",
662662
);
663-
MARKETING_VERSION = 0.7.6;
663+
MARKETING_VERSION = 0.7.7;
664664
PRODUCT_BUNDLE_IDENTIFIER = d3f0ld.5words10seconds;
665665
PRODUCT_NAME = "$(TARGET_NAME)";
666666
PROVISIONING_PROFILE_SPECIFIER = "";

‎5words10seconds/Preferences/Localizable.xcstrings

+87-8
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
"Back" : {
2626
"extractionState" : "manual",
2727
"localizations" : {
28+
"en" : {
29+
"stringUnit" : {
30+
"state" : "translated",
31+
"value" : "Back"
32+
}
33+
},
2834
"uk" : {
2935
"stringUnit" : {
3036
"state" : "translated",
@@ -45,10 +51,16 @@
4551
},
4652
"Doesn't work yet (in dev)" : {
4753
"localizations" : {
54+
"en" : {
55+
"stringUnit" : {
56+
"state" : "translated",
57+
"value" : "Sorry, it's not working yet. \nIn development"
58+
}
59+
},
4860
"uk" : {
4961
"stringUnit" : {
5062
"state" : "translated",
51-
"value" : "Перепрошуємо, поки не працює, в розробці"
63+
"value" : "Перепрошуємо, поки що не працює. \nВ розробці"
5264
}
5365
}
5466
}
@@ -70,10 +82,29 @@
7082
}
7183
},
7284
"Feedback" : {
73-
85+
"localizations" : {
86+
"en" : {
87+
"stringUnit" : {
88+
"state" : "translated",
89+
"value" : "Feedback"
90+
}
91+
},
92+
"uk" : {
93+
"stringUnit" : {
94+
"state" : "translated",
95+
"value" : "Зворотній зв'язок"
96+
}
97+
}
98+
}
7499
},
75100
"get + 1 point to score" : {
76101
"localizations" : {
102+
"en" : {
103+
"stringUnit" : {
104+
"state" : "translated",
105+
"value" : "get + 1 point to score"
106+
}
107+
},
77108
"uk" : {
78109
"stringUnit" : {
79110
"state" : "translated",
@@ -87,13 +118,23 @@
87118
"en" : {
88119
"stringUnit" : {
89120
"state" : "translated",
90-
"value" : "This game consists of 220+ categories. The game always starts with the words \"Tell 5 words related to the category...\", followed by a word or phrase from a particular category. For example: \"Geometric shapes\". The player's task is to name 5 words that correspond to this category within 10 seconds. For example: \"Square, triangle, rectangle, circle, rhombus\".\n\nOnce you have chosen the number of teams, after pressing the Ready button, the active team has 10 seconds to name the appropriate words for the category that just appeared. If a player said five words, but someone from the players considers the answer incorrect or wrong, the players can together decide whether to accept this answer. If the active player named less than five words for the given category, he does not receive any points. A new turn begins with the next team becoming the active player.\n\nVictory:\nThe player who collects the most points becomes the winner. You can agree in advance to how many points you will play or play until the categories in the game run out."
121+
"value" : "This game consists of 220+ categories. The game always starts with the words, \"Name 5 words related to the category...\", followed by a word or phrase from a particular category. For example: \"Geometric shapes.\" The player's task is to name 5 words that correspond to this category within 10 seconds. For example: \"Square, triangle, rectangle, circle, rhombus.\"\n\nOnce you have chosen the number of teams, after pressing the \"Ready\" button, the active team has 10 seconds to name the appropriate words for the category that just appeared. If a player names five words, but someone from the group considers the answer incorrect, the players can decide together whether to accept it. If the active player names fewer than five words for the given category, they do not receive any points. A new turn begins with the next team becoming the active player.\n\nVictory: The player who collects the most points becomes the winner. You can agree in advance on how many points to play to, or play until the categories in the game run out.\n"
91122
}
92123
},
93124
"uk" : {
94125
"stringUnit" : {
95126
"state" : "translated",
96-
"value" : "Ця гра складається з 220+ категорій. Гра завжди починаються зі слів «Розкажіть 5 слів повʼязаних з категорією…», а далі йде слово або слово сполучення тієї чи іншої категорії.\nНаприклад: «Геометричні фігури». Завдання гравця в тому, щоб за 10 секунд назвати 5 слів, які відповідають цій категорії. Наприклад: «Квадрат,\nтрикутник, прямокутник, коло, ромб». \n\nКоли ви обрали кількість команди. Після натискання на кнопку Готова - у активної команди є 10 секунд, щоб назвати відповідні слова до категорії яка щойно зʼявилася.\nЯкщо гравець сказав пʼять слів, але хтось з гравців вважає відповідь некоректною або неправильною, гравці можуть разом вирішити чи приймати дану відповідь. Якщо активний гравець назвав менше пʼяти слів на задану категорію, він не отримує ніяких балів.\nНовий хід починається з того, що активним гравцем стає наступна команда.\n\nПеремога:\nГравець, який збере найбільшу кількість балів, стає переможцем.\nВи можете заздалегідь домовитися до якої кількості балів будете грати або грати, поки не закінчаться категорії в грі."
127+
"value" : "Ця гра складається з 220+ категорій. Гра завжди починається зі слів: \"Назвіть 5 слів, що стосуються категорії...\", за якими йде слово або фраза з певної категорії. Наприклад: \"Геометричні фігури\". Завдання гравця – назвати 5 слів, які відповідають цій категорії, за 10 секунд. Наприклад: \"Квадрат, трикутник, прямокутник, коло, ромб.\"\n\nПісля вибору кількості команд, натиснувши кнопку \"Готово\", активна команда має 10 секунд, щоб назвати відповідні слова до категорії, яка щойно з’явилася. Якщо гравець назвав п'ять слів, але хтось із гравців вважає відповідь неправильною, вони можуть разом вирішити, чи прийняти відповідь. Якщо активний гравець назвав менше ніж п'ять слів у даній категорії, він не отримує жодних балів. Наступний хід починається з того, що інша команда стає активною.\n\nПеремога: Гравець, який набере найбільшу кількість балів, стає переможцем. Ви можете заздалегідь домовитися, до якої кількості балів грати, або грати, поки не закінчаться категорії в грі.\n"
128+
}
129+
}
130+
}
131+
},
132+
"How to play title" : {
133+
"localizations" : {
134+
"uk" : {
135+
"stringUnit" : {
136+
"state" : "translated",
137+
"value" : "Як грати"
97138
}
98139
}
99140
}
@@ -160,7 +201,14 @@
160201
}
161202
},
162203
"Rate us in AppStore" : {
163-
204+
"localizations" : {
205+
"uk" : {
206+
"stringUnit" : {
207+
"state" : "translated",
208+
"value" : "Оцініть нас в AppStore"
209+
}
210+
}
211+
}
164212
},
165213
"Ready" : {
166214
"localizations" : {
@@ -183,13 +231,34 @@
183231
}
184232
},
185233
"Save" : {
186-
234+
"localizations" : {
235+
"uk" : {
236+
"stringUnit" : {
237+
"state" : "translated",
238+
"value" : "Зберегти"
239+
}
240+
}
241+
}
187242
},
188243
"Send feedback to email" : {
189-
244+
"localizations" : {
245+
"uk" : {
246+
"stringUnit" : {
247+
"state" : "translated",
248+
"value" : "Надіслати відгук на\nелектронну пошту"
249+
}
250+
}
251+
}
190252
},
191253
"Share the app" : {
192-
254+
"localizations" : {
255+
"uk" : {
256+
"stringUnit" : {
257+
"state" : "translated",
258+
"value" : "Поділіться додатком"
259+
}
260+
}
261+
}
193262
},
194263
"Start 3words5sec" : {
195264
"extractionState" : "manual",
@@ -281,6 +350,16 @@
281350
}
282351
}
283352
},
353+
"View on GitHub" : {
354+
"localizations" : {
355+
"uk" : {
356+
"stringUnit" : {
357+
"state" : "translated",
358+
"value" : "Переглянути на GitHub"
359+
}
360+
}
361+
}
362+
},
284363
"Yes" : {
285364
"localizations" : {
286365
"uk" : {

‎5words10seconds/Screens/Menu/MenuView.swift

+5-3
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ extension MenuViewController {
3131
// MARK: Menu buttons
3232
private func setupButtonsView() {
3333
game5w10sBtn.setTitle(String(localized: "Start 5words10sec"), for: .normal)
34-
game3w5sBtn.setTitle(String(localized: "Start 3words5sec") + "\nSorry, did released yet", for: .normal)
34+
game3w5sBtn.setTitle(String(localized: "Start 3words5sec") + "\n" + String(localized: "Doesn't work yet (in dev)"), for: .normal)
3535

36+
game5w10sBtn.titleLabel?.textAlignment = .center
37+
game3w5sBtn.titleLabel?.textAlignment = .center
3638
game5w10sBtn.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
3739
game3w5sBtn.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
3840
game5w10sBtn.setTitleColor(.purple, for: .highlighted)
39-
game5w10sBtn.titleLabel?.numberOfLines = 2
40-
game3w5sBtn.titleLabel?.numberOfLines = 2
41+
game5w10sBtn.titleLabel?.numberOfLines = 3
42+
game3w5sBtn.titleLabel?.numberOfLines = 3
4143
game5w10sBtn.backgroundColor = AppAssetsConfigs.Colors.cellBackground
4244
game3w5sBtn.backgroundColor = AppAssetsConfigs.Colors.cellBackground
4345
game5w10sBtn.layer.cornerRadius = 16

‎5words10seconds/Screens/Menu/MenuViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import AVFoundation
1010

1111
class MenuViewController: RootViewController, AVAudioPlayerDelegate {
1212

13-
let game5w10sBtn = UIButton()
13+
let game5w10sBtn = AditionalButton()
1414
let game3w5sBtn = UIButton()
1515

1616
let backgroundViewUpper = UIView()

‎5words10seconds/Screens/Setup/Feedback/FeedbackViewController.swift

+29-5
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import UIKit
99
import MessageUI
1010
import StoreKit
1111

12-
// TODO: add buttons to Terms of Use and Privacy Policy
1312
class FeedbackViewController: RootViewController {
1413

1514
let feedbackLabel = UILabel()
1615
let linkToEmail = AditionalButton()
1716
let linkToAppStore = AditionalButton()
1817
let linkToShareApp = AditionalButton()
18+
let linkToGitHub = AditionalButton()
1919

2020
override func viewDidLoad() {
2121
super.viewDidLoad()
@@ -37,6 +37,7 @@ class FeedbackViewController: RootViewController {
3737
linkToEmail.titleLabel?.font = UIFont.systemFont(ofSize: 20)
3838
linkToEmail.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
3939
linkToEmail.titleLabel?.textAlignment = .center
40+
linkToEmail.titleLabel?.numberOfLines = 2
4041
linkToEmail.backgroundColor = AppAssetsConfigs.Colors.cellBackground
4142
linkToEmail.layer.cornerRadius = 16
4243
linkToEmail.clipsToBounds = true
@@ -57,14 +58,24 @@ class FeedbackViewController: RootViewController {
5758
linkToShareApp.layer.cornerRadius = 16
5859
linkToShareApp.clipsToBounds = true
5960

61+
linkToGitHub.setTitle(String(localized: "View on GitHub"), for: .normal)
62+
linkToGitHub.titleLabel?.font = UIFont.systemFont(ofSize: 20)
63+
linkToGitHub.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
64+
linkToGitHub.titleLabel?.textAlignment = .center
65+
linkToGitHub.backgroundColor = AppAssetsConfigs.Colors.cellBackground
66+
linkToGitHub.layer.cornerRadius = 16
67+
linkToGitHub.clipsToBounds = true
68+
6069
view.addSubview(feedbackLabel)
6170
view.addSubview(linkToEmail)
6271
view.addSubview(linkToAppStore)
6372
view.addSubview(linkToShareApp)
73+
view.addSubview(linkToGitHub)
6474
}
6575

6676
func setupConstraints() {
6777
let padding: CGFloat = 20
78+
let cellHeight: CGFloat = 68
6879

6980
feedbackLabel.snp.makeConstraints { make in
7081
make.top.equalTo(view.safeAreaLayoutGuide).offset(padding * 2)
@@ -73,19 +84,25 @@ class FeedbackViewController: RootViewController {
7384

7485
linkToEmail.snp.makeConstraints { make in
7586
make.top.equalTo(feedbackLabel.snp.bottom).offset(padding)
76-
make.height.equalTo(50)
87+
make.height.equalTo(cellHeight)
7788
make.leading.trailing.equalTo(view.safeAreaLayoutGuide).inset(padding)
7889
}
7990

8091
linkToAppStore.snp.makeConstraints { make in
8192
make.top.equalTo(linkToEmail.snp.bottom).offset(padding)
82-
make.height.equalTo(50)
93+
make.height.equalTo(cellHeight)
8394
make.leading.trailing.equalTo(view.safeAreaLayoutGuide).inset(padding)
8495
}
8596

8697
linkToShareApp.snp.makeConstraints { make in
8798
make.top.equalTo(linkToAppStore.snp.bottom).offset(padding)
88-
make.height.equalTo(50)
99+
make.height.equalTo(cellHeight)
100+
make.leading.trailing.equalTo(view.safeAreaLayoutGuide).inset(padding)
101+
}
102+
103+
linkToGitHub.snp.makeConstraints { make in
104+
make.top.equalTo(linkToShareApp.snp.bottom).offset(padding)
105+
make.height.equalTo(cellHeight)
89106
make.leading.trailing.equalTo(view.safeAreaLayoutGuide).inset(padding)
90107
}
91108
}
@@ -94,13 +111,14 @@ class FeedbackViewController: RootViewController {
94111
linkToEmail.addTarget(self, action: #selector(emailTapped), for: .touchUpInside)
95112
linkToAppStore.addTarget(self, action: #selector(rateUsTapped), for: .touchUpInside)
96113
linkToShareApp.addTarget(self, action: #selector(shareTheAppTapped), for: .touchUpInside)
114+
linkToGitHub.addTarget(self, action: #selector(githubTapped), for: .touchUpInside)
97115
}
98116

99117
@objc func emailTapped() {
100118
if MFMailComposeViewController.canSendMail() {
101119
let mail = MFMailComposeViewController()
102120
mail.mailComposeDelegate = self
103-
mail.setToRecipients(["d3f0ld@proton.me"]) // replace with your email
121+
mail.setToRecipients(["d3f0ld@proton.me"])
104122
mail.setSubject("Feedback for 5words10seconds")
105123
mail.setMessageBody("Here is my feedback:", isHTML: false)
106124
present(mail, animated: true)
@@ -122,6 +140,12 @@ class FeedbackViewController: RootViewController {
122140
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
123141
self.present(activityViewController, animated: true, completion: nil)
124142
}
143+
144+
@objc func githubTapped() {
145+
guard let url = URL(string: "https://github.com/foxfollow/5words10seconds") else { return }
146+
UIApplication.shared.open(url)
147+
}
148+
125149
}
126150

127151
// MFMailComposeViewControllerDelegate

‎5words10seconds/Screens/Setup/SetupView.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extension SetupViewController {
1717
}
1818

1919
private func setupFeedbacks() {
20-
feedbackButton.setTitle("Feedback", for: .normal)
20+
feedbackButton.setTitle(String(localized: "Feedback"), for: .normal)
2121
feedbackButton.titleLabel?.font = UIFont.systemFont(ofSize: 20)
2222
feedbackButton.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
2323
feedbackButton.backgroundColor = AppAssetsConfigs.Colors.cellBackground
@@ -28,7 +28,7 @@ extension SetupViewController {
2828
}
2929

3030
private func setupHowToPlay() {
31-
howToPlayButton.setTitle("How to play", for: .normal)
31+
howToPlayButton.setTitle(String(localized: "How to play title"), for: .normal)
3232
howToPlayButton.titleLabel?.font = UIFont.systemFont(ofSize: 20)
3333
howToPlayButton.setTitleColor(AppAssetsConfigs.Colors.textMain, for: .normal)
3434
howToPlayButton.backgroundColor = AppAssetsConfigs.Colors.cellBackground

‎HowToPlay.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# How to play
2+
3+
## English
4+
This game consists of 220+ categories. The game always starts with the words, "Name 5 words related to the category...", followed by a word or phrase from a particular category. For example: "Geometric shapes." The player's task is to name 5 words that correspond to this category within 10 seconds. For example: "Square, triangle, rectangle, circle, rhombus."
5+
6+
Once you have chosen the number of teams, after pressing the "Ready" button, the active team has 10 seconds to name the appropriate words for the category that just appeared. If a player names five words, but someone from the group considers the answer incorrect, the players can decide together whether to accept it. If the active player names fewer than five words for the given category, they do not receive any points. A new turn begins with the next team becoming the active player.
7+
8+
Victory: The player who collects the most points becomes the winner. You can agree in advance on how many points to play to, or play until the categories in the game run out.
9+
10+
## Ukrainian
11+
Ця гра складається з 220+ категорій. Гра завжди починається зі слів: "Назвіть 5 слів, що стосуються категорії...", за якими йде слово або фраза з певної категорії. Наприклад: "Геометричні фігури". Завдання гравця – назвати 5 слів, які відповідають цій категорії, за 10 секунд. Наприклад: "Квадрат, трикутник, прямокутник, коло, ромб."
12+
13+
Після вибору кількості команд, натиснувши кнопку "Готово", активна команда має 10 секунд, щоб назвати відповідні слова до категорії, яка щойно з’явилася. Якщо гравець назвав п'ять слів, але хтось із гравців вважає відповідь неправильною, вони можуть разом вирішити, чи прийняти відповідь. Якщо активний гравець назвав менше ніж п'ять слів у даній категорії, він не отримує жодних балів. Наступний хід починається з того, що інша команда стає активною.
14+
15+
Перемога: Гравець, який набере найбільшу кількість балів, стає переможцем. Ви можете заздалегідь домовитися, до якої кількості балів грати, або грати, поки не закінчаться категорії в грі.

‎README.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,15 @@ Get the app on [TestFlight](https://testflight.apple.com/join/QVVorjMd)
2929
- Create an online mode to play with friends
3030
- Get new TODOs from the community testers
3131

32-
## Terms of Use and Privacy Policy
32+
## Support
33+
34+
### How to play
35+
- [How to play](./HowToPlay.md)
36+
37+
### Terms of Use
3338
- [Terms of Use](./TermsOfUse.md)
39+
40+
### Privacy Policy
3441
- [Privacy Policy](./PrivacyPolicy.md)
3542

3643
## License

0 commit comments

Comments
 (0)
Please sign in to comment.