Compare commits

..

235 Commits

Author SHA1 Message Date
Phillip Thelen a018588021 Banning a user now automatically hides all their posts 2022-12-09 13:02:49 +01:00
dependabot[bot] 580139ff69 build(deps): bump express from 4.17.1 to 4.18.2 in /website/client (#14396)
Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 10:10:07 -05:00
dependabot[bot] e0860e604e build(deps): bump qs from 6.5.2 to 6.5.3 (#14395)
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 10:09:34 -05:00
dependabot[bot] 9fc69456bb build(deps): bump qs from 6.5.2 to 6.5.3 in /website/client (#14394)
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 10:08:58 -05:00
Weblate 5bf14e05cc Merge branch 'origin/develop' into Weblate. 2022-12-06 20:49:01 +01:00
SabreCat 7d081056ba Merge branch 'release' into develop 2022-12-06 13:37:29 -06:00
Weblate 2ff7bef2a6 Merge branch 'origin/develop' into Weblate. 2022-12-06 20:36:09 +01:00
SabreCat 51b3b0c4c7 4.251.0 2022-12-06 13:34:53 -06:00
SabreCat 174a4e69f9 fix(backgrounds): we're in December now 2022-12-06 13:34:25 -06:00
Natalie L 1ce060eac6 chore(content): add December 2022 Backgrounds and Enchanted Armoire Items (#14382)
* chore(content): css and images

* chore(content): add December 2022 Backgrounds and Enchanted Armoire Items

* fix(typos): dots no dip

* fix(typo): capitalize game terms

* fix(typos): GitHub regex find, why

* fix(typo): last one maybe?

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-12-06 13:21:24 -06:00
Weblate 55f07f8ab2 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 99.7% (737 of 739 strings)

Translated using Weblate (Korean)

Currently translated at 96.4% (54 of 56 strings)

Translated using Weblate (Spanish)

Currently translated at 95.4% (2581 of 2705 strings)

Translated using Weblate (German)

Currently translated at 99.4% (735 of 739 strings)

Translated using Weblate (Ukrainian)

Currently translated at 59.4% (449 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.5% (663 of 2705 strings)

Translated using Weblate (Ukrainian)

Currently translated at 56.6% (428 of 755 strings)

Translated using Weblate (German)

Currently translated at 99.1% (733 of 739 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Spanish)

Currently translated at 97.7% (216 of 221 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.5% (714 of 755 strings)

Translated using Weblate (German)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Russian)

Currently translated at 93.2% (206 of 221 strings)

Translated using Weblate (German)

Currently translated at 99.0% (219 of 221 strings)

Translated using Weblate (German)

Currently translated at 98.6% (218 of 221 strings)

Translated using Weblate (Spanish)

Currently translated at 95.4% (2581 of 2705 strings)

Translated using Weblate (German)

Currently translated at 93.6% (207 of 221 strings)

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (French)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (French)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (French)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (German)

Currently translated at 93.2% (206 of 221 strings)

Translated using Weblate (German)

Currently translated at 93.2% (206 of 221 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.4% (661 of 2705 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.3% (659 of 2705 strings)

Translated using Weblate (Ukrainian)

Currently translated at 55.8% (422 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Ukrainian)

Currently translated at 55.4% (419 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 54.0% (408 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 53.7% (406 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 94.1% (208 of 221 strings)

Translated using Weblate (Italian)

Currently translated at 96.3% (213 of 221 strings)

Translated using Weblate (German)

Currently translated at 92.7% (205 of 221 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.1% (654 of 2705 strings)

Translated using Weblate (Ukrainian)

Currently translated at 53.5% (404 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (German)

Currently translated at 92.3% (204 of 221 strings)

Translated using Weblate (Korean)

Currently translated at 75.0% (6 of 8 strings)

Translated using Weblate (Korean)

Currently translated at 77.7% (168 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (German)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Ukrainian)

Currently translated at 52.8% (399 of 755 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2705 of 2705 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Japanese)

Currently translated at 99.9% (2703 of 2705 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2705 of 2705 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 93.7% (708 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Korean)

Currently translated at 96.4% (54 of 56 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 93.1% (703 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (738 of 739 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (German)

Currently translated at 99.9% (2703 of 2705 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (739 of 739 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Ukrainian)

Currently translated at 51.9% (392 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Polish)

Currently translated at 64.8% (1754 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.8% (1753 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.7% (1752 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.6% (1749 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.6% (1748 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.5% (1747 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 64.5% (1746 of 2705 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 98.2% (57 of 58 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (German)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2705 of 2705 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.1% (652 of 2705 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2702 of 2705 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2705 of 2705 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2705 of 2705 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 51.5% (389 of 755 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Hong Kong))

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (German)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.1% (652 of 2701 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Ukrainian)

Currently translated at 50.5% (382 of 755 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 98.6% (141 of 143 strings)

Translated using Weblate (Bulgarian)

Currently translated at 65.0% (93 of 143 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.5% (2365 of 2701 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 96.5% (56 of 58 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 89.3% (193 of 216 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 96.9% (127 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.1% (651 of 2701 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 92.8% (701 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 49.8% (376 of 755 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 74.8% (95 of 127 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 93.7% (134 of 143 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 88.8% (192 of 216 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 95.5% (386 of 404 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (German)

Currently translated at 99.5% (402 of 404 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Polish)

Currently translated at 95.3% (204 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 99.0% (400 of 404 strings)

Translated using Weblate (German)

Currently translated at 99.0% (400 of 404 strings)

Translated using Weblate (German)

Currently translated at 99.0% (400 of 404 strings)

Translated using Weblate (German)

Currently translated at 99.0% (400 of 404 strings)

Translated using Weblate (German)

Currently translated at 99.0% (400 of 404 strings)

Translated using Weblate (German)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (German)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (German)

Currently translated at 97.7% (395 of 404 strings)

Translated using Weblate (German)

Currently translated at 97.7% (395 of 404 strings)

Translated using Weblate (German)

Currently translated at 97.7% (395 of 404 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (German)

Currently translated at 97.7% (395 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 47.6% (360 of 755 strings)

Translated using Weblate (German)

Currently translated at 97.7% (395 of 404 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 95.0% (384 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Ukrainian)

Currently translated at 47.2% (357 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (German)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (German)

Currently translated at 97.5% (394 of 404 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 99.8% (731 of 732 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 99.3% (142 of 143 strings)

Translated using Weblate (German)

Currently translated at 97.2% (393 of 404 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 85.1% (184 of 216 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Annika Frederike Schomber <nick.namen@gmx.de>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: Danylo <nylo2005@gmail.com>
Co-authored-by: Dessie Z <desize1996@gmail.com>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: IvorTheBoneless <bohdanfiloenko657@gmail.com>
Co-authored-by: KC <stuffr123456@gmail.com>
Co-authored-by: KanI <twinklingnerd@gmail.com>
Co-authored-by: Kedr <sergeysamori.ua@gmail.com>
Co-authored-by: Khsmty <me@taigasaito.org>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: Lio Zam <zerofux@web.de>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nakonana <nanaki1989@web.de>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Raithe <RaitheOfDureya@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sara López <sarayupy@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Tobias Welti <tobias.welti@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Wolf Forst <wiesenkatz@proton.me>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: Естай <akseleu@yahoo.com>
Co-authored-by: 박동훈 <creator98@naver.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/bg/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hant_HK/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/
Translate-URL: https://translate.habitica.com/projects/habitica/content/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/front/de/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/noscript/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hant/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Loginincentives
Translation: Habitica/Noscript
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2022-12-06 19:42:51 +01:00
SabreCat 4fe8b63748 4.250.1 2022-12-05 14:47:18 -06:00
Natalie L b5c64185f0 chore(tavern): update to remove moderators from tavern (#14393)
* chore(tavern): update to remove moderators from tavern

* fix(tavern): additional cleanup, change string in Vue instead of Weblate

* fix(git): correct target branch

Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-05 14:46:25 -06:00
dependabot[bot] debeee7569 build(deps): bump superagent from 8.0.4 to 8.0.5 (#14385)
Bumps [superagent](https://github.com/ladjs/superagent) from 8.0.4 to 8.0.5.
- [Release notes](https://github.com/ladjs/superagent/releases)
- [Changelog](https://github.com/ladjs/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/ladjs/superagent/compare/v8.0.4...v8.0.5)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-05 12:47:52 -05:00
dependabot[bot] 64b8a28363 build(deps): bump decode-uri-component from 0.2.0 to 0.2.2 (#14383)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-05 12:46:16 -05:00
SabreCat 894558f2df chore(images): update submodule 2022-12-02 13:21:32 -06:00
dependabot[bot] 57be0fbe45 build(deps): bump regenerator-runtime from 0.13.9 to 0.13.11 (#14370)
Bumps [regenerator-runtime](https://github.com/facebook/regenerator) from 0.13.9 to 0.13.11.
- [Release notes](https://github.com/facebook/regenerator/releases)
- [Commits](https://github.com/facebook/regenerator/compare/regenerator-runtime@0.13.9...regenerator-runtime@0.13.11)

---
updated-dependencies:
- dependency-name: regenerator-runtime
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-28 16:44:39 -05:00
dependabot[bot] cf9fbd43bb build(deps): bump passport from 0.5.0 to 0.6.0 (#14357)
Bumps [passport](https://github.com/jaredhanson/passport) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: passport
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-28 16:36:36 -05:00
SabreCat ea817eecf7 Merge branch 'release' into develop 2022-11-28 15:34:57 -06:00
SabreCat f1381878e7 4.250.0 2022-11-28 15:34:44 -06:00
Natalie L 9bd039b17b chore(content): add December 2022 Mystery Items (#14379)
* chore(submodule): images

* chore(content): December Mystery Items

* chore(content): sprites

* fix(typo): whitespace

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-28 15:34:18 -06:00
dependabot[bot] 8804892135 build(deps): bump superagent from 8.0.3 to 8.0.4 (#14375)
Bumps [superagent](https://github.com/visionmedia/superagent) from 8.0.3 to 8.0.4.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v8.0.3...v8.0.4)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-28 16:32:23 -05:00
SabreCat 90b34c4dac fix(shops): correct imports 2022-11-23 13:23:43 -06:00
SabreCat 96a919ed4b fix(shops): quest countdowns too 2022-11-23 13:13:06 -06:00
SabreCat e56b672226 4.249.7 2022-11-23 13:08:35 -06:00
SabreCat 91cbf7a2a9 fix(shops): show correct countdown outside of Gala 2022-11-23 13:08:23 -06:00
SabreCat 04e2a39a9f fix(test): rearrange for legacy event logic 2022-11-21 20:08:15 -06:00
SabreCat bdd926e110 4.249.6 2022-11-21 18:55:03 -06:00
SabreCat a8e9c9bc70 chore(event): set up Harvest Feast 2022 2022-11-21 18:54:57 -06:00
SabreCat 497073a714 4.249.5 2022-11-21 16:42:36 -06:00
SabreCat f1fa6a8456 Revert "Allow sub upgrades/downgrades on iOS (#14303)"
This reverts commit 9e98e56e9b.
2022-11-21 16:40:56 -06:00
prexio 3f690c24da Change Wikia to Fandom (#14291) 2022-11-18 16:54:12 -06:00
Natalie L f24d81d895 fix(content): quality of life change for staff and moderators (#14245)
* fix(content): quality of life change for staff and moderators

* fix(content): quality of life change for staff and moderators, I really mean it this time

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-18 16:52:09 -06:00
Sabe Jones 82c5e40b92 Enforce maximum password length (#14290)
* fix(auth): enforce maximum password length

* fix(auth): line length and better error message

* fix(auth): correctly import/export constant

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-18 16:49:10 -06:00
Adam Fitzgibbon 6b27e18699 add prop to task-wrapper so that the cursor remains consistant (#14302) 2022-11-18 16:48:34 -06:00
Adam Fitzgibbon 4f70a6fbf4 now grouping the stable A-Z sortBy option by first letter so that Show More functionality works like the other sort types (#14304) 2022-11-18 16:44:58 -06:00
Adam Fitzgibbon 300c2bb0a8 change currency to gold if the gear is owned (#14326)
* change currency to gold if the gear is owned

* fix linting error
2022-11-18 16:43:14 -06:00
Sky Chrastina 4b4f073089 Fix az sort (#14347)
* add stopword package

* sort pet and potion quests by stopword-ized text

* chore(package): revert package lock
Will update after merge

* fix(package): Friday brain

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-18 16:38:28 -06:00
Sky Chrastina 1d8e3d45a1 new check asset + css in shop, task, and buy gems (#14340) 2022-11-18 16:29:43 -06:00
Natalie L 116068effa fix(apiDescription): remove incorrect information (#14367) 2022-11-18 16:21:03 -06:00
SabreCat f2aaee15f3 Merge branch 'release' into develop 2022-11-18 15:29:06 -06:00
SabreCat 06a8d2bbd7 4.249.4 2022-11-18 15:12:32 -06:00
SabreCat 15353eba8a fix(subs): roll all the way back, didn't work :( 2022-11-18 15:12:14 -06:00
SabreCat febffb3f07 Revert "Fix double subscriptions, second attempt (#14345)"
This reverts commit 1a5cba57b7.
2022-11-18 14:26:49 -06:00
dependabot[bot] 25c7d52d6a build(deps-dev): bump chai from 4.3.6 to 4.3.7 (#14354)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.6 to 4.3.7.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:01:23 -05:00
dependabot[bot] 837c1c20a3 build(deps-dev): bump sinon from 14.0.1 to 14.0.2 (#14353)
Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.1 to 14.0.2.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v14.0.1...v14.0.2)

---
updated-dependencies:
- dependency-name: sinon
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:01:06 -05:00
dependabot[bot] 02b11a61bc build(deps): bump dompurify from 2.4.0 to 2.4.1 in /website/client (#14352)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.4.0...2.4.1)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:00:51 -05:00
dependabot[bot] a0e28f7db4 build(deps): bump superagent from 8.0.2 to 8.0.3 (#14351)
Bumps [superagent](https://github.com/visionmedia/superagent) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:00:34 -05:00
SabreCat fdfa2d6df4 Merge branch 'release' into develop 2022-11-15 19:29:37 -06:00
SabreCat 4fd2011be5 4.249.3 2022-11-15 19:29:18 -06:00
SabreCat 259131ee3f feat(transactions): UI updates
by @negue
2022-11-15 19:28:36 -06:00
Sabe Jones 1a5cba57b7 Fix double subscriptions, second attempt (#14345)
* fix(subscriptions): reject subs that come in too fast

* fix(lint): remove unused import

* fix(groups): individual subs may come rapidly

* fix(subscriptions): bad paren, handle rapid testing

* fix(test): reset dateUpdated between subs

* fix(test): one more block for dateUpdated

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-15 19:19:37 -06:00
SabreCat 5e05190f22 fix(event): start at 8AM not 8PM 2022-11-15 16:05:06 -06:00
SabreCat 81540ef399 fix(events): EST now not EDT 2022-11-14 14:38:58 -06:00
SabreCat 2bbff36cc8 4.249.2 2022-11-14 14:13:13 -06:00
SabreCat 9f52e47011 feat(content): November Quests and Hatching Potions
by @CuriousMagpie
2022-11-14 14:13:08 -06:00
Alys 4dca69f14b change the bannedWordUsed text as discussed with beffymaroo 2022-11-12 18:43:28 +10:00
dependabot[bot] 1378b1e1ad build(deps): bump @babel/preset-env from 7.19.1 to 7.20.2 (#14330)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.19.1 to 7.20.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.20.2/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 10:25:23 -05:00
dependabot[bot] 734a611a5c build(deps-dev): bump chalk from 5.1.0 to 5.1.2 (#14292)
Bumps [chalk](https://github.com/chalk/chalk) from 5.1.0 to 5.1.2.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v5.1.0...v5.1.2)

---
updated-dependencies:
- dependency-name: chalk
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 10:24:27 -05:00
SabreCat dbd485cb96 4.249.1 2022-11-09 16:11:49 -06:00
CuriousMagpie 4c62a48f5d chore(typo): who knew, that Y was actually important... 2022-11-09 16:11:45 -06:00
SabreCat 11496f3e0c Merge branch 'release' into develop 2022-11-09 15:33:32 -06:00
dependabot[bot] 9a3e3aaf42 build(deps): bump superagent from 8.0.2 to 8.0.3 (#14320)
Bumps [superagent](https://github.com/visionmedia/superagent) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-09 14:16:10 -05:00
dependabot[bot] d9250fd780 build(deps): bump stripe from 10.13.0 to 10.16.0 (#14332)
Bumps [stripe](https://github.com/stripe/stripe-node) from 10.13.0 to 10.16.0.
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v10.13.0...v10.16.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:27:13 -05:00
dependabot[bot] 70a5124815 build(deps): bump passport from 0.5.0 to 0.6.0 (#14341)
Bumps [passport](https://github.com/jaredhanson/passport) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: passport
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:26:14 -05:00
dependabot[bot] 532fa2816b build(deps): bump @babel/core from 7.19.6 to 7.20.2 (#14335)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.6 to 7.20.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.20.2/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:25:53 -05:00
dependabot[bot] d22f191f83 build(deps-dev): bump chai from 4.3.6 to 4.3.7 (#14342)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.6 to 4.3.7.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:25:20 -05:00
dependabot[bot] 2b49a800a5 build(deps-dev): bump sinon from 14.0.1 to 14.0.2 (#14343)
Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.1 to 14.0.2.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v14.0.1...v14.0.2)

---
updated-dependencies:
- dependency-name: sinon
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:24:53 -05:00
SabreCat 0db927c726 4.249.0 2022-11-08 10:18:10 -06:00
SabreCat 6ee06f76e4 chore(i18n): update locale files
Also includes two fixes: empty Hourglass transaction logging and missing Recovery + Support guild category
2022-11-08 10:17:40 -06:00
SabreCat 978e8c4320 Merge branch 'release' into develop 2022-11-08 10:08:02 -06:00
Sabe Jones 5c7d537c61 Armoire and Backgrounds 2022/11 (#14329)
* chore(content): Add November Backgrounds and Enchanted Armoire Items

* fix(strings): typos and fullstops

* fix(style): de-whitespace

Co-authored-by: CuriousMagpie <eilatan@gmail.com>
2022-11-08 10:03:25 -06:00
Natalie L 0e6ece95a4 chore(fix): restore missing string (#14338)
* fix(string): questVice1Notes html changed to a mobile-device friendly format

* fix(strings): updated limited.json with "dateEnd" & "monthYYYY" months & put in chronological order

* fix(string): remove extra word from headSpecialSummer2022WarriorNotes

* fix(string): corrected armorSpecialSummer2022MageNotes

* fix: remove duplicated string and adjust upgrade button style

* fix(style): set border radii to 8px on upgrading-group id

* fix(payments): remove duplicate entry from another modal

* chore(fix): restore string inadvertently removed during a refactor

* chore(fix): comma dangle

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-08 09:59:40 -06:00
Weblate b08ed8b0fb Translated using Weblate (Spanish)
Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (German)

Currently translated at 97.0% (392 of 404 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.4% (2363 of 2701 strings)

Translated using Weblate (German)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 97.3% (735 of 755 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 90.9% (190 of 209 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.1% (126 of 131 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 88.1% (356 of 404 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 91.9% (2483 of 2701 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 95.0% (172 of 181 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 96.5% (390 of 404 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 98.6% (141 of 143 strings)

Translated using Weblate (German)

Currently translated at 97.0% (391 of 403 strings)

Translated using Weblate (German)

Currently translated at 97.0% (391 of 403 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Dutch)

Currently translated at 88.1% (2381 of 2701 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Dutch)

Currently translated at 96.9% (710 of 732 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.4% (728 of 732 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 99.1% (726 of 732 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Dante S <dantepicachu11@gmail.com>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Jonathan Garcia <jonathangarcia0@duck.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Rhoslyn Ross <sofrdlf@vivaldi.net>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Wolf Forst <wiesenkatz@proton.me>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Subscriber
2022-11-08 16:57:17 +01:00
SabreCat fafaa29d72 4.248.4 2022-11-04 16:10:31 -05:00
SabreCat 3a088de7e8 fix(package): roll back to Passport 0.5 2022-11-04 16:10:22 -05:00
SabreCat 835da85119 4.248.3 2022-11-02 15:18:19 -05:00
SabreCat f6e5360bdd Merge branch 'release' into develop 2022-11-02 14:54:09 -05:00
SabreCat eee8ad2029 fix(css): correct broken task creation dropdown on groups 2022-11-02 14:19:43 -05:00
SabreCat c7e73f9b85 4.248.2 2022-11-02 09:04:03 -05:00
SabreCat 9b1a726875 Revert "feat(subs): allow upgrade/downgrade on iOS"
This reverts commit 27440772f0.
2022-11-02 09:00:29 -05:00
SabreCat accf7e2897 4.248.1 2022-11-01 21:10:41 -05:00
Phillip Thelen 9e98e56e9b Allow sub upgrades/downgrades on iOS (#14303)
* Allow sub upgrades/downgrades on iOS

* fix check

* fix(lint): line length

* fix(typo): customER

* fix tests

* Implement correct handling for when subs are up/downgraded

* fix lint errors

* fix test

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-01 21:07:23 -05:00
SabreCat 6c85b1e047 chore(faq): update note on mobile Group Plans 2022-11-01 20:59:32 -05:00
SabreCat 7c553e535c feat(gifting): restore ability to send gift messages
by @CuriousMagpie
2022-11-01 20:56:21 -05:00
Natalie L c16207c9ba Add Gift Messaging to Success Modal (#14270)
* initial commit: based on group-tracking-modal branch

* chore: merge group-tracking-modal

* update: create functions for each success condition

* chore: merge develop

* chore: work on successModal.vue & remove redundant code on groupPlan.vue

* update: remove `giftSubscriptionText4` from footer

* fix: correct groupPlan.vue file

* update: add messaging placeholder, clean up logic in a few places, update/add strings

* update: rearrange modal in order of display & test existence of 'gift-subscription' paymentType

* update: added props for receiverName so 'gift-subscription' works

* update: add close.svg & function
style: refactor CSS

* update: work on gift messaging

* update: work on gift messaging

* update: work on gift messaging

* update: let's make messages GO

* update: messages are a GO, we have LIFT OFF!

* fix: remove console log (oops)

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-01 20:55:40 -05:00
SabreCat 27440772f0 feat(subs): allow upgrade/downgrade on iOS
by @phillipthelen
2022-11-01 20:53:04 -05:00
SabreCat aea0be3245 fix(subs): establish lock to prevent race condition 2022-11-01 20:47:21 -05:00
SabreCat a2d5211b00 4.248.0 2022-10-31 14:28:24 -05:00
Weblate 53fb28cc48 Merge branch 'origin/develop' into Weblate. 2022-10-31 20:27:10 +01:00
SabreCat 1c0710b45b Merge branch 'release' into develop 2022-10-31 14:25:19 -05:00
Natalie L 3bc82a6692 chore(content): add Bone to Pick achievement (#14318)
* chore(content): add Bone to Pick achievement

* chore(content): update spritesmith-main.css

* chore(content): add more bone picking

* chore(content): more bone picking

* chore(content): bone picking

* chore(content): i gotta bone to pick here

* chore(content): final bone picking

* chore: add migration script

* chore: update habitica-images

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-31 14:19:56 -05:00
Weblate 2add227b97 Translated using Weblate (Russian)
Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2698 of 2701 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (German)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2696 of 2701 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (732 of 732 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translation: Habitica/Backgrounds
Translation: Habitica/Gear
Translation: Habitica/Subscriber
2022-10-31 17:53:38 +01:00
CuriousMagpie 4cc1f902c8 Merge remote-tracking branch 'upstream/develop' into develop 2022-10-31 10:47:24 -04:00
CuriousMagpie 1b52529822 chore(ladder update): 2022 Habitoween Ladder 2022-10-31 10:46:51 -04:00
SabreCat e39a5a0628 fix(strings): set token typo 2022-10-30 20:15:37 -05:00
SabreCat 575aea2605 4.247.0 2022-10-30 19:56:10 -05:00
Weblate 222ba544d7 Merge branch 'origin/develop' into Weblate. 2022-10-31 01:55:41 +01:00
SabreCat 2372efa22e Merge branch 'release' into develop 2022-10-30 19:54:18 -05:00
Natalie L b5c950ac96 chore(content): add November 2022 Mystery Items (#14317)
* chore(content): add November Mystery Items

* chore: merge release into 2022-11-mystery-items

* Revert "chore: merge release into 2022-11-mystery-items"

This reverts commit e12b61d73f.

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-30 19:52:55 -05:00
Weblate 18ec3eb355 Translated using Weblate (Spanish)
Currently translated at 95.7% (2581 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.1% (2350 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2581 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.0% (2347 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.0% (2345 of 2695 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.0% (647 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Ukrainian)

Currently translated at 23.4% (632 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.9% (2343 of 2695 strings)

Translated using Weblate (German)

Currently translated at 95.5% (385 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.8% (2341 of 2695 strings)

Translated using Weblate (German)

Currently translated at 94.7% (382 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.7% (2339 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 74.1% (43 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.7% (2337 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.5% (401 of 403 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.9% (619 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.6% (2335 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.6% (2334 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Spanish)

Currently translated at 99.5% (233 of 234 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.5% (2332 of 2695 strings)

Translated using Weblate (German)

Currently translated at 91.5% (369 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.1% (2322 of 2695 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (German)

Currently translated at 99.1% (232 of 234 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: IvorTheBoneless <bohdanfiloenko657@gmail.com>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sara López <sarayupy@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translation: Habitica/Contrib
Translation: Habitica/Faq
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Subscriber
2022-10-28 18:35:58 +02:00
dependabot[bot] 62b4315b3d build(deps): bump apidoc from 0.53.0 to 0.53.1 (#14307)
Bumps [apidoc](https://github.com/apidoc/apidoc) from 0.53.0 to 0.53.1.
- [Release notes](https://github.com/apidoc/apidoc/releases)
- [Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apidoc/apidoc/compare/0.53.0...0.53.1)

---
updated-dependencies:
- dependency-name: apidoc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:24:26 -04:00
dependabot[bot] 56805e6c90 build(deps): bump rate-limiter-flexible from 2.3.11 to 2.4.0 (#14309)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.11 to 2.4.0.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/compare/v2.3.11...v2.4.0)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:56 -04:00
dependabot[bot] 0c6070dd9a build(deps): bump short-uuid from 4.2.0 to 4.2.2 (#14311)
Bumps [short-uuid](https://github.com/oculus42/short-uuid) from 4.2.0 to 4.2.2.
- [Release notes](https://github.com/oculus42/short-uuid/releases)
- [Changelog](https://github.com/oculus42/short-uuid/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/oculus42/short-uuid/commits)

---
updated-dependencies:
- dependency-name: short-uuid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:30 -04:00
dependabot[bot] 19c26c01e3 build(deps): bump @babel/core from 7.19.3 to 7.19.6 (#14312)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.3 to 7.19.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.6/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:09 -04:00
dependabot[bot] 0f3bc980d9 build(deps): bump smartbanner.js in /website/client (#14313)
Bumps [smartbanner.js](https://github.com/ain/smartbanner.js) from 1.19.0 to 1.19.1.
- [Release notes](https://github.com/ain/smartbanner.js/releases)
- [Commits](https://github.com/ain/smartbanner.js/compare/v1.19.0...v1.19.1)

---
updated-dependencies:
- dependency-name: smartbanner.js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:22:40 -04:00
dependabot[bot] 7f87120d34 build(deps): bump core-js from 3.25.5 to 3.26.0 in /website/client (#14314)
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.25.5 to 3.26.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.26.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:22:19 -04:00
negue f7a03d2eb5 improve transactions logs + split createSubscription (#14289)
* improve transactions logs + split createSubscription
2022-10-27 08:39:06 +02:00
Sabe Jones 90250d1a25 Establish lock to avoid race scenario in subscriptions (#14267)
* fix(subscription): establish lock to avoid race scenario

* fix(lint): import syntax

* fix(lint): whitespace, dependency cycle

* fix(subs): skip locking on gifts and groups

* fix(subs): correctly reset _subSignature

* fix(sub): use findOneAndUpdate for unlock

* fix(test): save newly created user for some reason

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-25 16:44:33 -05:00
Gabriel Araujo 22a0c72f6e Update docker-compose.dev.yml to prevent error message on first build (#14178)
* Remove deprecated version element from top-level

* Remove unncessary image for client and server services

Co-authored-by: Gabriel Araujo <gabriel.goncalves@solarisbank.de>
2022-10-12 15:53:05 -05:00
Anton de Regt a4326498d1 Group category update issue (#14186)
* Overwrite arrays instead of merging

* Test removing a category

* Fix previous duplicated categories on group edit
2022-10-12 15:51:56 -05:00
Alex 8f26a22bd4 Update test.yml (#14187) 2022-10-12 15:47:46 -05:00
Antonio Sansotta 0b2cf5bceb Fixes issue #14175 - Consolidate Challenge category options list to common file (#14201)
* Issue #14175 - Created a categoryOptions.js file in website/common/script/content to store list of category Options. Imported and added the list to website/client/src/components : challenges/challengeModal, challenges/sidebar, groups/groupFormModal, and groups/groupSidebar. This replaced the statically typed lists that previously existed. Tested the challengeModal and sidebar but unable to test the groups files due to credit card requirements. -@Tundrian

* Issue #14175 - Created a categoryOptions.js file in website/common/script/content to store list of category Options. Imported and added the list to website/client/src/components : challenges/challengeModal, challenges/sidebar, groups/groupFormModal, and groups/groupSidebar. This replaced the statically typed lists that previously existed. Tested the challengeModal and sidebar but unable to test the groups files due to credit card requirements. -@Tundrian

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-12 15:46:36 -05:00
Sky Chrastina f43a0d8289 Add checkmark to completed quests in shop (#14269)
* add 'completed' property to quest items

* show checkmark on completed quests in the shop

* add 'completed' property to quest items

* show checkmark on completed quests in the shop
2022-10-12 15:44:22 -05:00
dependabot[bot] 39be8db4f9 build(deps): bump axios from 0.25.0 to 0.27.2 in /website/client (#14007)
Bumps [axios](https://github.com/axios/axios) from 0.25.0 to 0.27.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.25.0...v0.27.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 17:34:16 -05:00
SabreCat f0a1f11a16 Merge branch 'release' into develop 2022-10-11 17:32:25 -05:00
dependabot[bot] 84c4b3536c build(deps): bump minimist, minimist and mkdirp in /website/client (#14286)
Bumps [minimist](https://github.com/minimistjs/minimist), [minimist](https://github.com/minimistjs/minimist) and [mkdirp](https://github.com/isaacs/node-mkdirp). These dependencies needed to be updated together.

Updates `minimist` from 1.2.5 to 1.2.7
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.7)

Updates `minimist` from 1.2.0 to 1.2.7
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.7)

Updates `mkdirp` from 0.5.1 to 0.5.6
- [Release notes](https://github.com/isaacs/node-mkdirp/releases)
- [Changelog](https://github.com/isaacs/node-mkdirp/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-mkdirp/compare/0.5.1...v0.5.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
- dependency-name: minimist
  dependency-type: indirect
- dependency-name: mkdirp
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:53:10 -05:00
dependabot[bot] cf834f57d7 build(deps): bump ansi-html and webpack-dev-server in /website/client (#14285)
Removes [ansi-html](https://github.com/Tjatse/ansi-html). It's no longer used after updating ancestor dependency [webpack-dev-server](https://github.com/webpack/webpack-dev-server). These dependencies need to be updated together.


Removes `ansi-html`

Updates `webpack-dev-server` from 3.11.2 to 3.11.3
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.2...v3.11.3)

---
updated-dependencies:
- dependency-name: ansi-html
  dependency-type: indirect
- dependency-name: webpack-dev-server
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:40:45 -05:00
dependabot[bot] 97be341ff6 build(deps): bump jwks-rsa from 2.1.4 to 2.1.5 (#14284)
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 2.1.4 to 2.1.5.
- [Release notes](https://github.com/auth0/node-jwks-rsa/releases)
- [Changelog](https://github.com/auth0/node-jwks-rsa/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jwks-rsa/compare/v2.1.4...v2.1.5)

---
updated-dependencies:
- dependency-name: jwks-rsa
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:40:30 -05:00
dependabot[bot] 15c68abafa build(deps): bump stripe from 8.222.0 to 10.13.0 (#14273)
Bumps [stripe](https://github.com/stripe/stripe-node) from 8.222.0 to 10.13.0.
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v8.222.0...v10.13.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:24:55 -05:00
dependabot[bot] 21a1b9449b build(deps): bump body-parser from 1.20.0 to 1.20.1 (#14271)
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.0 to 1.20.1.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.0...1.20.1)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:22:57 -05:00
dependabot[bot] 0ec7784fb1 build(deps): bump @vue/cli-plugin-router in /website/client (#14121)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.5.15 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-router)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-router"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:59:32 -05:00
dependabot[bot] 9ddd0f29d0 build(deps): bump passport from 0.5.0 to 0.6.0 (#14043)
Bumps [passport](https://github.com/jaredhanson/passport) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: passport
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:57:26 -05:00
dependabot[bot] 37791dfe8d build(deps): bump intro.js from 5.1.0 to 6.0.0 in /website/client (#14122)
Bumps [intro.js](https://github.com/usablica/intro.js) from 5.1.0 to 6.0.0.
- [Release notes](https://github.com/usablica/intro.js/releases)
- [Commits](https://github.com/usablica/intro.js/compare/v5.1.0...v6.0.0)

---
updated-dependencies:
- dependency-name: intro.js
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:56:22 -05:00
dependabot[bot] 0322b657b8 build(deps): bump winston from 3.8.1 to 3.8.2 (#14221)
Bumps [winston](https://github.com/winstonjs/winston) from 3.8.1 to 3.8.2.
- [Release notes](https://github.com/winstonjs/winston/releases)
- [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md)
- [Commits](https://github.com/winstonjs/winston/compare/v3.8.1...v3.8.2)

---
updated-dependencies:
- dependency-name: winston
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:55:34 -05:00
dependabot[bot] cc39f6e4e9 build(deps): bump vue-router from 3.5.4 to 3.6.5 in /website/client (#14228)
Bumps [vue-router](https://github.com/vuejs/router) from 3.5.4 to 3.6.5.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/commits)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:55:11 -05:00
dependabot[bot] 452b516c67 build(deps): bump amplitude-js from 8.21.0 to 8.21.1 in /website/client (#14248)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 8.21.0 to 8.21.1.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v8.21.0...v8.21.1)

---
updated-dependencies:
- dependency-name: amplitude-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:53:17 -05:00
dependabot[bot] 235eae32b0 build(deps): bump rate-limiter-flexible from 2.3.10 to 2.3.11 (#14249)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.10 to 2.3.11.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/commits)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:52:59 -05:00
dependabot[bot] de9f1be7b9 build(deps): bump js2xmlparser from 4.0.2 to 5.0.0 (#14251)
Bumps [js2xmlparser](https://github.com/michaelkourlas/node-js2xmlparser) from 4.0.2 to 5.0.0.
- [Release notes](https://github.com/michaelkourlas/node-js2xmlparser/releases)
- [Changelog](https://github.com/michaelkourlas/node-js2xmlparser/blob/master/CHANGES.md)
- [Commits](https://github.com/michaelkourlas/node-js2xmlparser/compare/v4.0.2...v5.0.0)

---
updated-dependencies:
- dependency-name: js2xmlparser
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:51:58 -05:00
dependabot[bot] e75610447f build(deps): bump @hapi/hoek from 8.3.1 to 8.5.1 in /website/client (#14255)
Bumps [@hapi/hoek](https://github.com/hapijs/hoek) from 8.3.1 to 8.5.1.
- [Release notes](https://github.com/hapijs/hoek/releases)
- [Commits](https://github.com/hapijs/hoek/compare/v8.3.1...v8.5.1)

---
updated-dependencies:
- dependency-name: "@hapi/hoek"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:51:37 -05:00
dependabot[bot] bd4c65cd3e build(deps): bump @babel/core from 7.18.13 to 7.19.3 (#14256)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.13 to 7.19.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.3/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:50:39 -05:00
dependabot[bot] baf60dc951 build(deps): bump @google-cloud/trace-agent from 5.1.6 to 7.1.2 (#14259)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 5.1.6 to 7.1.2.
- [Release notes](https://github.com/googleapis/cloud-trace-nodejs/releases)
- [Changelog](https://github.com/googleapis/cloud-trace-nodejs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/cloud-trace-nodejs/compare/v5.1.6...v7.1.2)

---
updated-dependencies:
- dependency-name: "@google-cloud/trace-agent"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:50:14 -05:00
dependabot[bot] 70e88d601c build(deps): bump superagent from 7.1.6 to 8.0.2 (#14272)
Bumps [superagent](https://github.com/visionmedia/superagent) from 7.1.6 to 8.0.2.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v7.1.6...v8.0.2)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:46:33 -05:00
dependabot[bot] 104ec60adb build(deps): bump bcrypt from 5.0.1 to 5.1.0 (#14274)
Bumps [bcrypt](https://github.com/kelektiv/node.bcrypt.js) from 5.0.1 to 5.1.0.
- [Release notes](https://github.com/kelektiv/node.bcrypt.js/releases)
- [Changelog](https://github.com/kelektiv/node.bcrypt.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kelektiv/node.bcrypt.js/compare/v5.0.1...v5.1.0)

---
updated-dependencies:
- dependency-name: bcrypt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:46:15 -05:00
dependabot[bot] e97454e0e7 build(deps): bump async from 2.6.3 to 3.2.3 (#14275)
Bumps [async](https://github.com/caolan/async) from 2.6.3 to 3.2.3.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/master/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v3.2.3)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:45:14 -05:00
dependabot[bot] 144baa98b1 build(deps-dev): bump sinon from 13.0.2 to 14.0.1 (#14276)
Bumps [sinon](https://github.com/sinonjs/sinon) from 13.0.2 to 14.0.1.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v13.0.2...v14.0.1)

---
updated-dependencies:
- dependency-name: sinon
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:44:22 -05:00
dependabot[bot] 02e33853b1 build(deps-dev): bump chalk from 4.1.2 to 5.1.0 (#14277)
Bumps [chalk](https://github.com/chalk/chalk) from 4.1.2 to 5.1.0.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v4.1.2...v5.1.0)

---
updated-dependencies:
- dependency-name: chalk
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:43:40 -05:00
dependabot[bot] 8c0d41d084 build(deps): bump express from 4.18.1 to 4.18.2 (#14280)
Bumps [express](https://github.com/expressjs/express) from 4.18.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:42:41 -05:00
dependabot[bot] 9d4f70371d build(deps): bump core-js from 3.24.1 to 3.25.5 in /website/client (#14282)
Bumps [core-js](https://github.com/zloirock/core-js) from 3.24.1 to 3.25.5.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.24.1...v3.25.5)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:42:22 -05:00
SabreCat 57a090eea1 4.246.0 2022-10-11 11:59:08 -05:00
SabreCat 18534a21ff Merge branch 'develop' into release 2022-10-11 11:59:02 -05:00
Weblate ed0a36a287 Merge branch 'origin/develop' into Weblate. 2022-10-11 18:58:07 +02:00
Weblate e50f240366 Translated using Weblate (Polish)
Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.0% (2319 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.5% (215 of 216 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Polish)

Currently translated at 94.6% (686 of 725 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (French)

Currently translated at 97.2% (392 of 403 strings)

Translated using Weblate (German)

Currently translated at 91.3% (368 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (German)

Currently translated at 98.2% (57 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Arabic)

Currently translated at 90.3% (338 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 99.2% (130 of 131 strings)

Translated using Weblate (Japanese)

Currently translated at 99.5% (233 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 96.5% (389 of 403 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (French)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (German)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.2% (130 of 131 strings)

Translated using Weblate (French)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (French)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Polish)

Currently translated at 83.5% (606 of 725 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (French)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Russian)

Currently translated at 99.5% (215 of 216 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 92.3% (192 of 208 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 96.9% (127 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 89.7% (210 of 234 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.0% (379 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 95.0% (172 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Japanese)

Currently translated at 99.1% (232 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 80.4% (583 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 99.1% (232 of 234 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Polish)

Currently translated at 78.8% (572 of 725 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (German)

Currently translated at 99.9% (2694 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.9% (2694 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2691 of 2695 strings)

Translated using Weblate (Arabic)

Currently translated at 89.8% (336 of 374 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: Faris Allahham <farislahham@gmail.com>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: RedBug312 <redbug312@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Contrib
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
2022-10-11 18:57:30 +02:00
Natalie L 4d1bbdd8d0 chore(content): add October Backgrounds and Enchanted Armoire Items (#14266)
* chore(content): add October Backgrounds and Enchanted Armoire Items

* fix(typo): fix a couple of descriptions

* chore(subproject): update images

* fix(typo): keepin our caps consistent

* fix(typo): whitespace, caps

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-10-11 11:54:24 -05:00
Natalie L d1928c9181 chore(content): add October Pet Quest Bundle (#14268)
* chore(content): add October Pet Quest Bundle

* update: change event start date to the correct one
2022-10-11 11:53:46 -05:00
Adam Tommasi 137f7d53dc add qty param for gem/gem-purchasable item apidoc (#14219)
* add qty param for gem/gem-purchasable item

* fix(lint): remove extra whitespace

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-07 16:33:38 -05:00
Natalie L 3f9d55254e fix(style): update to scoped colors & set footer background image to pointer-events:none (#14265)
* first pass

* second pass

* third pass

* fourth pass, not a lot of progress

* fifth pass, slowly gettin there

* breakpoint nonsense

* flexbox and breakpoint nonsense

* svg updates, css updates

* whitespace

* chore: merge upstream/develop

* style(breakpoints): added responsive breakpoints, social column alignment tweaks

* style(breakpoints): add xs-specific selectors and classes

* style: mobile footer

* style: mobile footer

* style: static landing page footer

* style: small tweaks to social layout

* fix(translations): update website/common/locales/de/gear.json to develop

* update(style): small updates

* update(style): cleaning up code

* update(style): cleaning up code

* update(style): mobile footer updates

* update(style): complete mobile footer & clean up code

* update(style): add tablet breakpoint and remove rogue terms link

* fix(style): update to scoped colors & set footer background image to pointer-events:none

* fix(style): removed redundant logo class definition
2022-10-07 16:10:29 -05:00
SabreCat b60a76d7dd chore(subproject): update images 2022-10-07 15:48:38 -05:00
SabreCat a5575b3593 4.245.2 2022-10-06 15:53:25 -05:00
SabreCat ace964f2b3 fix(subs): escape group demographics without group 2022-10-06 15:53:19 -05:00
SabreCat 12b045093a 4.245.1 2022-09-30 15:25:31 -05:00
SabreCat 8cd9536bdc Merge branch 'develop' into release 2022-09-30 15:25:27 -05:00
Weblate 08f0374b46 Translated using Weblate (Arabic)
Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (54 of 54 strings)

Translated using Weblate (Arabic)

Currently translated at 89.3% (334 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Spanish)

Currently translated at 99.0% (205 of 207 strings)

Translated using Weblate (Spanish)

Currently translated at 96.8% (125 of 129 strings)

Translated using Weblate (Spanish)

Currently translated at 99.1% (230 of 232 strings)

Translated using Weblate (Spanish)

Currently translated at 95.1% (370 of 389 strings)

Translated using Weblate (German)

Currently translated at 93.5% (364 of 389 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 99.6% (752 of 755 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Spanish)

Currently translated at 99.0% (213 of 215 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Polish)

Currently translated at 71.3% (517 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 70.4% (511 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 70.3% (510 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 69.7% (506 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 99.2% (139 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 31.4% (57 of 181 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Arabic)

Currently translated at 37.0% (20 of 54 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (French)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (French)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (French)

Currently translated at 99.1% (2669 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Turkish)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Swedish)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (Serbian)

Currently translated at 90.6% (164 of 181 strings)

Translated using Weblate (Slovak)

Currently translated at 88.9% (161 of 181 strings)

Translated using Weblate (Romanian)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Portuguese)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (Polish)

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Dutch)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (Indonesian)

Currently translated at 88.9% (161 of 181 strings)

Translated using Weblate (Hungarian)

Currently translated at 89.5% (162 of 181 strings)

Translated using Weblate (Hebrew)

Currently translated at 73.4% (133 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (English (Pirate) (en@pirate))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Danish)

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Czech)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Bulgarian)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (French)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.2% (2482 of 2691 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.7% (613 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 99.2% (2672 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (Japanese)

Currently translated at 99.0% (2665 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (German)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (German)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.9% (2689 of 2691 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: Faris Allahham <farislahham@gmail.com>
Co-authored-by: Felix Wittwer <spam@felixwittwer.de>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Juan Esteban Marín <juanmarin690@gmail.com>
Co-authored-by: Khsmty <me@taigasaito.org>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: Lio Zam <zerofux@web.de>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nakonana <nanaki1989@web.de>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Nina Łapaj <ninapaj@gmail.com>
Co-authored-by: Raithe <RaitheOfDureya@gmail.com>
Co-authored-by: Remigiusz Haziak <haziakremigiusz@gmail.com>
Co-authored-by: Salman Mujeeb <kingleopard22@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sara López <sarayupy@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Simon Fischer <simon.pascal.fischer@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/content/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/front/bg/
Translate-URL: https://translate.habitica.com/projects/habitica/front/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/front/da/
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@pirate/
Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/he/
Translate-URL: https://translate.habitica.com/projects/habitica/front/hu/
Translate-URL: https://translate.habitica.com/projects/habitica/front/id/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/front/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ro/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sv/
Translate-URL: https://translate.habitica.com/projects/habitica/front/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/es/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pl/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Defaulttasks
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Inventory
Translation: Habitica/Limited
Translation: Habitica/Loginincentives
Translation: Habitica/Npc
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2022-09-30 22:22:14 +02:00
SabreCat 3582e233be fix(strings): remove duplicate "next" key 2022-09-30 15:09:53 -05:00
SabreCat 3974adcb65 chore(event): set Gem sale dates 2022-09-30 14:57:15 -05:00
SabreCat 57d3fea523 Merge branch 'group-tracking-modal' into release 2022-09-30 14:47:08 -05:00
SabreCat 173d7a178c Merge branch 'sabrecat/next-hourglass' into release 2022-09-30 14:46:27 -05:00
SabreCat 7db093d2bb Merge branch 'sabrecat/panel-subscription' into release 2022-09-30 14:46:10 -05:00
SabreCat 06d2ffb37d Merge branch 'sabrecat/gems-multi-event' into release 2022-09-30 14:45:36 -05:00
SabreCat 40997854dd fix(test): restore event list function 2022-09-30 14:32:21 -05:00
SabreCat 4c4d0be31f fix(analytics): include client tracking parameter 2022-09-29 15:07:21 -05:00
SabreCat b8cf1b895f 4.245.0 2022-09-28 15:34:17 -05:00
Natalie L a08ecbe044 chore(content): add October 2022 Mystery Items (#14254) 2022-09-28 15:04:47 -05:00
Natalie L f3771f4869 chore(content): add October 2022 Mystery Items (#14254) 2022-09-28 15:03:56 -05:00
SabreCat e0eed8238e fix(test): stub full event list 2022-09-23 16:42:15 -05:00
SabreCat 6baf08d461 fix(test): update expectations for new logic 2022-09-23 16:10:11 -05:00
SabreCat 535fddf92d feat(sale): add fine print 2022-09-21 16:28:15 -05:00
SabreCat ef97f301d9 Merge branch 'release' into sabrecat/gems-multi-event 2022-09-21 16:04:10 -05:00
SabreCat eea79ce1b6 Merge branch 'develop' into sabrecat/gems-multi-event 2022-09-21 16:03:57 -05:00
Weblate 191fee524c Merge branch 'origin/develop' into Weblate. 2022-09-21 22:23:36 +02:00
negue e9ee2d3fdd Transaction username mongodb mutation (#14231)
* migrate newest usernames in transactions

* fix lint

* change the parameters
2022-09-21 14:42:39 -05:00
Weblate 3c8be16135 Translated using Weblate (Russian)
Currently translated at 99.8% (2686 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 96.6% (175 of 181 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.5% (2680 of 2691 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (2685 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Russian)

Currently translated at 99.1% (2667 of 2691 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Filipino)

Currently translated at 92.2% (167 of 181 strings)

Translated using Weblate (Filipino)

Currently translated at 94.5% (122 of 129 strings)

Translated using Weblate (Filipino)

Currently translated at 97.9% (96 of 98 strings)

Translated using Weblate (Filipino)

Currently translated at 40.9% (9 of 22 strings)

Translated using Weblate (Italian)

Currently translated at 98.9% (2664 of 2691 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Vince <vincemorel.vilan.889@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: weizhen lv <lvwzhen@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/character/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translation: Habitica/Challenge
Translation: Habitica/Character
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Limited
Translation: Habitica/Loginincentives
Translation: Habitica/Npc
Translation: Habitica/Subscriber
2022-09-21 19:12:26 +02:00
CuriousMagpie 9890e0079a fix: correct groupPlan.vue file 2022-09-21 12:02:35 -04:00
CuriousMagpie 586897fbfc Revert "update: remove another duplicate key from groups.json"
This reverts commit 014a4b653a.
2022-09-20 17:11:09 -04:00
SabreCat f75a6eb11d fix(hourglass): handle missing planId 2022-09-20 15:25:37 -05:00
SabreCat 155d6d5af6 Merge branch 'develop' into sabrecat/next-hourglass 2022-09-20 15:18:44 -05:00
SabreCat 004f1ee2dc Merge branch 'develop' into sabrecat/panel-subscription 2022-09-20 15:11:29 -05:00
CuriousMagpie c61bdaf563 Merge remote-tracking branch 'origin/group-tracking-modal' into group-tracking-modal 2022-09-20 15:36:58 -04:00
SabreCat 85e14bb100 Merge branch 'develop' into group-tracking-modal 2022-09-20 14:13:59 -05:00
CuriousMagpie 8e9b469d8d chore: merge develop 2022-09-20 13:11:43 -04:00
Weblate 6e5cac88fc Merge branch 'origin/develop' into Weblate. 2022-09-19 23:58:58 +02:00
Weblate 80acb70718 Translated using Weblate (German)
Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (German)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (German)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Belarusian)

Currently translated at 81.4% (615 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 99.2% (128 of 129 strings)

Translated using Weblate (Russian)

Currently translated at 99.9% (2662 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 99.4% (180 of 181 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Czech)

Currently translated at 74.3% (1981 of 2663 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (754 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (228 of 228 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.9% (612 of 2663 strings)

Translated using Weblate (Ukrainian)

Currently translated at 46.6% (352 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 45.8% (346 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (388 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2660 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (388 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2660 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 98.2% (57 of 58 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: David Kővári <davson.kovari@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/de/
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/be/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translation: Habitica/Backgrounds
Translation: Habitica/Communityguidelines
Translation: Habitica/Contrib
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Subscriber
2022-09-19 23:58:41 +02:00
CuriousMagpie 13eef6e4cf chore: merge develop 2022-09-19 15:10:11 -04:00
CuriousMagpie 719fab8d4b chore: merge develop in 2022-09-16 16:12:34 -04:00
SabreCat 4c34c68d78 fix(test): stub newly relevant function 2022-09-15 12:20:11 -05:00
SabreCat 9a8d1854b9 fix(promo): handle Gems sale defined outside of single top event 2022-09-15 11:40:48 -05:00
CuriousMagpie 014a4b653a update: remove another duplicate key from groups.json 2022-09-14 17:24:29 -04:00
CuriousMagpie 37e5d6b40a update: remove duplicate key from groups.json 2022-09-14 17:06:33 -04:00
SabreCat fb780c9a2d fix(admin): reactivity with subscriptions 2022-09-13 15:52:03 -05:00
SabreCat 1a86943711 fix(subscriptions): better next-hourglass logic 2022-09-12 15:17:39 -05:00
CuriousMagpie 21185b689c update: add 'type' to amazonModal.vue, removed extraneous analytics.js code 2022-09-12 11:42:39 -04:00
CuriousMagpie 5a85e0730c update: analytics debugging 2022-09-09 16:56:19 -04:00
CuriousMagpie 771558e1fd update: analytics debugging 2022-09-09 16:27:25 -04:00
CuriousMagpie e6f903fd2e update: more analytics work 2022-09-09 15:37:08 -04:00
CuriousMagpie 5c13bf1980 update: add analytics to create and success modals 2022-09-08 17:34:36 -04:00
CuriousMagpie 36a4ec69d5 update: success modal (testing something) 2022-09-08 15:53:26 -04:00
CuriousMagpie c6ba1d8402 update: success modal 2022-09-08 12:55:53 -04:00
SabreCat 0081bad831 feat(admin): track hourglasses as transactions 2022-09-06 16:15:04 -05:00
CuriousMagpie abdb6244d3 updates: add comments to success modal to flag issues 2022-09-06 17:06:19 -04:00
SabreCat 90f1977a49 fix(admin): sometimes 0 is correct 2022-09-06 15:09:40 -05:00
SabreCat bc33e4349d Merge branch 'develop' into sabrecat/panel-subscription 2022-09-06 14:19:46 -05:00
CuriousMagpie 61f3d8d61c Merge branch 'develop' into group-tracking-modal 2022-09-06 15:11:03 -04:00
CuriousMagpie 796d752974 update: success modal 2022-09-02 16:55:28 -04:00
SabreCat 008314676d fix(admin): reactivity on next hourglass 2022-09-01 17:16:51 -05:00
SabreCat f364b3c06f feat(admin): consecutive months editable field and automatic calcs 2022-08-31 16:09:20 -05:00
SabreCat ae23ac12ff feat(admin): interactive subscription section fields 2022-08-30 16:56:43 -05:00
CuriousMagpie e2bb7fda60 update: success modal 2022-08-30 17:43:36 -04:00
SabreCat 09d6dae75c feat(admin): provide reset cron button 2022-08-30 15:35:50 -05:00
SabreCat bc5813fd10 Merge branch 'develop' into sabrecat/panel-subscription 2022-08-30 14:54:40 -05:00
CuriousMagpie 4464464c51 Merge branch 'develop' into group-tracking-modal 2022-08-30 15:44:09 -04:00
CuriousMagpie a3e6aff330 update: more work on success modal 2022-08-29 16:12:53 -04:00
CuriousMagpie a523d0b894 Merge branch 'develop' into group-tracking-modal 2022-08-29 13:33:15 -04:00
CuriousMagpie 8a809c3828 update: work on success modal, update to payment mixin to calculate monthly billing date 2022-08-26 17:58:51 -04:00
CuriousMagpie 40f433b099 update: work on success modal 2022-08-25 15:47:24 -04:00
CuriousMagpie 9a1266677a Merge remote-tracking branch 'upstream/develop' into group-tracking-modal 2022-08-25 13:20:54 -04:00
CuriousMagpie d70dd2e6dd update: add analytics event upon group creation/upgrade (temp code & console.logs commented out) 2022-08-15 17:13:51 -04:00
CuriousMagpie f078d19e4b Merge branch 'develop' into group-tracking-modal 2022-08-15 13:49:35 -04:00
CuriousMagpie e08d0f4016 update: style changes, add upgraded group demographics to success modal, add description counter 2022-08-12 16:44:58 -04:00
CuriousMagpie 0435e3537a update: add temp button & function for triggering success modal; add comments 2022-08-11 16:39:49 -04:00
SabreCat 0aadee550e fix(admin): add data value for expand state 2022-08-11 14:16:27 -05:00
CuriousMagpie f487837b4b Merge branch 'develop' into group-tracking-modal 2022-08-11 15:02:40 -04:00
SabreCat b593db2150 feat(admin): show subscription data 2022-08-10 16:20:32 -05:00
CuriousMagpie a07c2e6268 update: dropdown and delete duplicated file 2022-08-10 16:48:09 -04:00
SabreCat e3c552dd54 WIP(dropdown): add placeholder text 2022-08-10 16:02:56 -04:00
CuriousMagpie 8d1f7e77ed update: styling and dropdown 2022-08-10 14:00:46 -04:00
CuriousMagpie cfd601e7bf update: styling and some function work 2022-08-08 17:16:41 -04:00
CuriousMagpie 5d81c63897 update: upgrade groups sign up page (slightly) 2022-08-08 16:36:14 -04:00
CuriousMagpie cff6c5674f update: add styling 2022-08-04 17:26:04 -04:00
CuriousMagpie edcb3f4289 update: making dropdown go with PROPS 2022-08-03 12:07:30 -04:00
CuriousMagpie bd28a282df updates: add demographic strings & drop-down and translated array code 2022-08-02 18:34:09 -04:00
CuriousMagpie 999071a15c still trying to get modal to work 2022-08-02 16:05:41 -04:00
CuriousMagpie 9bee9d0a06 working on editing code so the modal emits from group-plans instead of from within the file 2022-08-01 17:11:15 -04:00
CuriousMagpie f5b632e3e5 Merge remote-tracking branch 'upstream/develop' into group-tracking-modal 2022-08-01 15:55:00 -04:00
CuriousMagpie 8ecd152b41 moved modal file from /groups into /group-plans 2022-07-27 18:25:56 -04:00
CuriousMagpie ba22c18cd9 separating group plan creation modal out from groupPlan.vue 2022-07-26 16:59:53 -04:00
294 changed files with 7397 additions and 3991 deletions
+3
View File
@@ -2,6 +2,9 @@ name: Test
on: [push, pull_request]
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
-3
View File
@@ -1,4 +1,3 @@
version: "3"
services:
client:
build:
@@ -9,7 +8,6 @@ services:
- server
environment:
- BASE_URL=http://server:3000
image: habitica
networks:
- habitica
ports:
@@ -27,7 +25,6 @@ services:
- mongo
environment:
- NODE_DB_URI=mongodb://mongo/habitrpg
image: habitica
networks:
- habitica
ports:
@@ -0,0 +1,97 @@
/* eslint-disable no-console */
import { model as UserModel } from '../../../website/server/models/user';
import { TransactionModel } from '../../../website/server/models/transaction';
const MIGRATION_NAME = '20220915_transactions_user_name';
/* transaction config */
const transactionPerRun = 500;
const progressCount = 1000;
const transactionQuery = {
migration: { $ne: MIGRATION_NAME }, // skip already migrated entries
'transactionType': { $in: ['gift_send', 'gift_receive'] },
};
let count = 0;
async function updateTransaction (transaction, userNameMap) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (userNameMap.has(transaction.reference)) {
set['referenceText'] = userNameMap.get(transaction.reference);
} else {
set['referenceText'] = 'Account not found';
}
if (count % progressCount === 0) {
console.warn(`${count} ${transaction._id}`);
}
return TransactionModel.updateOne({
_id: transaction._id
}, { $set: set }).exec();
}
export default async function processTransactions () {
const fields = {
_id: 1,
reference: 1,
referenceText: 1,
};
const userNameMap = new Map();
while (true) { // eslint-disable-line no-constant-condition
const foundTransactions = await TransactionModel // eslint-disable-line no-await-in-loop
.find(transactionQuery)
.limit(transactionPerRun)
.sort({reference: 1})
.select(fields)
.lean()
.exec();
if (foundTransactions.length === 0) {
console.warn('All appropriate transactions found and modified.');
console.warn(`\n${count} transactions processed\n`);
break;
}
// check for unknown users and load the names
const userIdsToLoad = [];
for (const foundTransaction of foundTransactions) {
const userId = foundTransaction.reference;
if (userNameMap.has(userId)) {
continue;
}
userIdsToLoad.push(userId);
}
const users = await UserModel // eslint-disable-line no-await-in-loop
.find({
_id: { $in: userIdsToLoad }
})
.select({
_id: 1,
'auth.local.username': 1,
})
.lean()
.exec();
for (const user of users) {
const localUserName = user.auth?.local?.username;
if (!localUserName) {
console.warn(`\nNo Username found for ID: ${user._id}\n`);
continue;
}
userNameMap.set(user._id, localUserName)
}
await Promise.all(foundTransactions.map(t => updateTransaction(t, userNameMap))); // eslint-disable-line no-await-in-loop
}
};
@@ -0,0 +1,86 @@
/*
* Award Habitoween ladder items to participants in this month's Habitoween festivities
*/
/* eslint-disable no-console */
const MIGRATION_NAME = '20221031_habitoween_ladder'; // Update when running in future years
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {};
const inc = {
'items.food.Candy_Skeleton': 1,
'items.food.Candy_Base': 1,
'items.food.Candy_CottonCandyBlue': 1,
'items.food.Candy_CottonCandyPink': 1,
'items.food.Candy_Shade': 1,
'items.food.Candy_White': 1,
'items.food.Candy_Golden': 1,
'items.food.Candy_Zombie': 1,
'items.food.Candy_Desert': 1,
'items.food.Candy_Red': 1,
};
set.migration = MIGRATION_NAME;
if (user && user.items && user.items.pets && user.items.pets['JackOLantern-RoyalPurple']) {
set['items.mounts.JackOLantern-RoyalPurple'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Glow']) {
set['items.pets.JackOLantern-RoyalPurple'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Glow']) {
set['items.mounts.JackOLantern-Glow'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Ghost']) {
set['items.pets.JackOLantern-Glow'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Ghost']) {
set['items.mounts.JackOLantern-Ghost'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Base']) {
set['items.pets.JackOLantern-Ghost'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Base']) {
set['items.mounts.JackOLantern-Base'] = true;
} else {
set['items.pets.JackOLantern-Base'] = 5;
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({_id: user._id}, {$inc: inc, $set: set}).exec();
}
export default async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2022-10-01')},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
@@ -0,0 +1,119 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20221031_pet_set_group_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['Wolf-Skeleton']
&& pets['TigerCub-Skeleton']
&& pets['PandaCub-Skeleton']
&& pets['LionCub-Skeleton']
&& pets['Fox-Skeleton']
&& pets['FlyingPig-Skeleton']
&& pets['Dragon-Skeleton']
&& pets['Cactus-Skeleton']
&& pets['BearCub-Skeleton']
&& pets['Gryphon-Skeleton']
&& pets['Hedgehog-Skeleton']
&& pets['Deer-Skeleton']
&& pets['Egg-Skeleton']
&& pets['Rat-Skeleton']
&& pets['Octopus-Skeleton']
&& pets['Seahorse-Skeleton']
&& pets['Parrot-Skeleton']
&& pets['Rooster-Skeleton']
&& pets['Spider-Skeleton']
&& pets['Owl-Skeleton']
&& pets['Penguin-Skeleton']
&& pets['TRex-Skeleton']
&& pets['Rock-Skeleton']
&& pets['Bunny-Skeleton']
&& pets['Slime-Skeleton']
&& pets['Sheep-Skeleton']
&& pets['Cuttlefish-Skeleton']
&& pets['Whale-Skeleton']
&& pets['Cheetah-Skeleton']
&& pets['Horse-Skeleton']
&& pets['Frog-Skeleton']
&& pets['Snake-Skeleton']
&& pets['Unicorn-Skeleton']
&& pets['Sabretooth-Skeleton']
&& pets['Monkey-Skeleton']
&& pets['Snail-Skeleton']
&& pets['Falcon-Skeleton']
&& pets['Treeling-Skeleton']
&& pets['Axolotl-Skeleton']
&& pets['Turtle-Skeleton']
&& pets['Armadillo-Skeleton']
&& pets['Cow-Skeleton']
&& pets['Beetle-Skeleton']
&& pets['Ferret-Skeleton']
&& pets['Sloth-Skeleton']
&& pets['Triceratops-Skeleton']
&& pets['GuineaPig-Skeleton']
&& pets['Peacock-Skeleton']
&& pets['Butterfly-Skeleton']
&& pets['Nudibranch-Skeleton']
&& pets['Hippo-Skeleton']
&& pets['Yarn-Skeleton']
&& pets['Pterodactyl-Skeleton']
&& pets['Badger-Skeleton']
&& pets['Squirrel-Skeleton']
&& pets['SeaSerpent-Skeleton']
&& pets['Kangaroo-Skeleton']
&& pets['Alligator-Skeleton']
&& pets['Velociraptor-Skeleton']
&& pets['Dolphin-Skeleton']
&& pets['Robot-Skeleton']) {
set['achievements.boneToPick'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
// migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2022-01-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+1051 -1190
View File
File diff suppressed because it is too large Load Diff
+20 -20
View File
@@ -1,22 +1,22 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.244.1",
"version": "4.251.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.18.13",
"@babel/preset-env": "^7.19.1",
"@babel/core": "^7.19.6",
"@babel/preset-env": "^7.20.2",
"@babel/register": "^7.18.9",
"@google-cloud/trace-agent": "^5.1.6",
"@google-cloud/trace-agent": "^7.1.2",
"@parse/node-apn": "^5.1.3",
"@slack/webhook": "^6.1.0",
"accepts": "^1.3.8",
"amazon-payments": "^0.2.9",
"amplitude": "^6.0.0",
"apidoc": "^0.53.0",
"apidoc": "^0.53.1",
"apple-auth": "^1.0.7",
"bcrypt": "^5.0.1",
"body-parser": "^1.20.0",
"bcrypt": "^5.1.0",
"body-parser": "^1.20.1",
"bootstrap": "^4.6.0",
"compression": "^1.7.4",
"cookie-session": "^2.0.0",
@@ -27,7 +27,7 @@
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.0.0",
"express": "^4.18.1",
"express": "^4.18.2",
"express-basic-auth": "^1.2.1",
"express-validator": "^5.2.0",
"glob": "^8.0.3",
@@ -41,9 +41,9 @@
"helmet": "^4.6.0",
"image-size": "^1.0.2",
"in-app-purchase": "^1.11.3",
"js2xmlparser": "^4.0.2",
"js2xmlparser": "^5.0.0",
"jsonwebtoken": "^8.5.1",
"jwks-rsa": "^2.1.4",
"jwks-rsa": "^2.1.5",
"lodash": "^4.17.21",
"merge-stream": "^2.0.0",
"method-override": "^3.0.0",
@@ -54,27 +54,27 @@
"nconf": "^0.12.0",
"node-gcm": "^1.0.5",
"on-headers": "^1.0.2",
"passport": "^0.5.0",
"passport": "^0.6.0",
"passport-facebook": "^3.0.0",
"passport-google-oauth2": "^0.2.0",
"passport-google-oauth20": "2.0.0",
"paypal-rest-sdk": "^1.8.1",
"pp-ipn": "^1.1.0",
"ps-tree": "^1.0.0",
"rate-limiter-flexible": "^2.3.10",
"rate-limiter-flexible": "^2.4.0",
"redis": "^3.1.2",
"regenerator-runtime": "^0.13.9",
"regenerator-runtime": "^0.13.11",
"remove-markdown": "^0.5.0",
"rimraf": "^3.0.2",
"short-uuid": "^4.2.0",
"stripe": "^8.222.0",
"superagent": "^7.1.6",
"short-uuid": "^4.2.2",
"stripe": "^10.13.0",
"superagent": "^8.0.5",
"universal-analytics": "^0.5.3",
"useragent": "^2.1.9",
"uuid": "^8.3.2",
"validator": "^13.7.0",
"vinyl-buffer": "^1.0.1",
"winston": "^3.8.1",
"winston": "^3.8.2",
"winston-loggly-bulk": "^3.2.1",
"xml2js": "^0.4.23"
},
@@ -111,10 +111,10 @@
},
"devDependencies": {
"axios": "^0.27.2",
"chai": "^4.3.6",
"chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"chai-moment": "^0.1.0",
"chalk": "^4.1.2",
"chalk": "^5.1.2",
"cross-spawn": "^7.0.3",
"expect.js": "^0.3.1",
"istanbul": "^1.1.0-alpha.1",
@@ -122,7 +122,7 @@
"monk": "^7.3.4",
"require-again": "^2.0.0",
"run-rs": "^0.7.7",
"sinon": "^13.0.2",
"sinon": "^14.0.2",
"sinon-chai": "^3.7.0",
"sinon-stub-promise": "^4.0.0"
},
@@ -326,6 +326,7 @@ describe('Apple Payments', () => {
it('errors when a user is already subscribed', async () => {
payments.createSubscription.restore();
user = new User();
await user.save();
await applePayments.subscribe(sku, user, receipt, headers, nextPaymentProcessing);
+27 -5
View File
@@ -11,10 +11,13 @@ import {
generateGroup,
} from '../../../../helpers/api-unit.helper';
import * as worldState from '../../../../../website/server/libs/worldState';
import { TransactionModel } from '../../../../../website/server/models/transaction';
describe('payments/index', () => {
let user; let group; let data; let
plan;
let user;
let group;
let data;
let plan;
beforeEach(async () => {
user = new User();
@@ -104,6 +107,23 @@ describe('payments/index', () => {
expect(recipient.purchased.plan.extraMonths).to.eql(3);
});
it('add a transaction entry to the recipient', async () => {
recipient.purchased.plan = plan;
expect(recipient.purchased.plan.extraMonths).to.eql(0);
await api.createSubscription(data);
expect(recipient.purchased.plan.extraMonths).to.eql(3);
const transactions = await TransactionModel
.find({ userId: recipient._id })
.sort({ createdAt: -1 })
.exec();
expect(transactions).to.have.lengthOf(1);
});
it('does not set negative extraMonths if plan has past dateTerminated date', async () => {
const dateTerminated = moment().subtract(2, 'months').toDate();
recipient.purchased.plan.dateTerminated = dateTerminated;
@@ -672,10 +692,12 @@ describe('payments/index', () => {
context('No Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns(null);
sinon.stub(worldState, 'getCurrentEventList').returns([]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('does not apply a discount', async () => {
@@ -692,14 +714,14 @@ describe('payments/index', () => {
context('Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns({
sinon.stub(worldState, 'getCurrentEventList').returns([{
...common.content.events.fall2020,
event: 'fall2020',
});
}]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('applies a discount', async () => {
@@ -11,6 +11,12 @@ describe('PUT /group', () => {
const groupName = 'Test Public Guild';
const groupType = 'guild';
const groupUpdatedName = 'Test Public Guild Updated';
const groupCategories = [
{
slug: 'initialCat',
name: 'Initial Category',
},
];
beforeEach(async () => {
const { group, groupLeader, members } = await createAndPopulateGroup({
@@ -18,6 +24,7 @@ describe('PUT /group', () => {
name: groupName,
type: groupType,
privacy: 'public',
categories: groupCategories,
},
members: 1,
});
@@ -61,6 +68,35 @@ describe('PUT /group', () => {
expect(updatedGroup.categories[0].name).to.eql(categories[0].name);
});
it('removes the initial group category', async () => {
const categories = [];
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
categories,
});
expect(updatedGroup.categories.length).to.equal(0);
});
it('removes duplicate group categories', async () => {
const categories = [
{
slug: 'newCat',
name: 'New Category',
},
{
slug: 'newCat',
name: 'New Category',
},
];
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
categories,
});
expect(updatedGroup.categories.length).to.equal(1);
});
it('allows an admin to update a guild', async () => {
const updatedGroup = await adminUser.put(`/groups/${groupToUpdate._id}`, {
name: groupUpdatedName,
@@ -344,6 +344,24 @@ describe('POST /user/auth/local/register', () => {
});
});
it('enforces maximum length for the password', async () => {
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = '12345678910111213141516171819202122232425262728293031323334353637383940';
const confirmPassword = '12345678910111213141516171819202122232425262728293031323334353637383940';
await expect(api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('requires a username', async () => {
const email = `${generateRandomUserName()}@example.com`;
const password = 'password';
+14 -5
View File
@@ -213,7 +213,7 @@ describe('cron utility functions', () => {
};
}
it('offset 0, next date in 3 months', () => {
it('monthly plan, next date in 3 months', () => {
const user = baseUserData(60, 0, 'group_plan_auto');
const planContext = getPlanContext(user, now);
@@ -222,8 +222,8 @@ describe('cron utility functions', () => {
.to.be.sameMoment('2022-08-10T02:00:00.144Z');
});
it('offset 1, next date in 1 months', () => {
const user = baseUserData(60, 1, 'group_plan_auto');
it('monthly plan, next date in 1 month', () => {
const user = baseUserData(62, 0, 'group_plan_auto');
const planContext = getPlanContext(user, now);
@@ -231,8 +231,17 @@ describe('cron utility functions', () => {
.to.be.sameMoment('2022-06-10T02:00:00.144Z');
});
it('offset 2, next date in 2 months - with any plan', () => {
const user = baseUserData(60, 2, 'basic_3mo');
it('multi-month plan, no offset', () => {
const user = baseUserData(60, 0, 'basic_3mo');
const planContext = getPlanContext(user, now);
expect(planContext.nextHourglassDate)
.to.be.sameMoment('2022-06-10T02:00:00.144Z');
});
it('multi-month plan with offset', () => {
const user = baseUserData(60, 1, 'basic_3mo');
const planContext = getPlanContext(user, now);
+609 -484
View File
File diff suppressed because it is too large Load Diff
+9 -8
View File
@@ -21,19 +21,19 @@
"@storybook/vue": "6.3.13",
"@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.19",
"@vue/cli-plugin-router": "^4.5.15",
"@vue/cli-plugin-router": "^5.0.8",
"@vue/cli-plugin-unit-mocha": "^4.5.15",
"@vue/cli-service": "^4.5.15",
"@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^8.21.0",
"axios": "^0.25.0",
"amplitude-js": "^8.21.1",
"axios": "^0.27.2",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.22.0",
"chai": "^4.3.6",
"core-js": "^3.24.1",
"dompurify": "^2.4.0",
"core-js": "^3.26.0",
"dompurify": "^2.4.1",
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.3.0",
@@ -41,14 +41,15 @@
"habitica-markdown": "^3.0.0",
"hellojs": "^1.19.5",
"inspectpack": "^4.7.1",
"intro.js": "^5.1.0",
"intro.js": "^6.0.0",
"jquery": "^3.6.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"nconf": "^0.12.0",
"sass": "^1.34.0",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.19.0",
"smartbanner.js": "^1.19.1",
"stopword": "^2.0.5",
"svg-inline-loader": "^0.8.2",
"svg-url-loader": "^7.1.1",
"svgo": "^1.3.2",
@@ -58,7 +59,7 @@
"vue": "^2.7.10",
"vue-cli-plugin-storybook": "2.1.0",
"vue-mugen-scroll": "^0.2.6",
"vue-router": "^3.5.4",
"vue-router": "^3.6.5",
"vue-template-compiler": "^2.7.10",
"vuedraggable": "^2.24.3",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0",
@@ -63,6 +63,11 @@
width: 48px;
height: 56px;
}
.achievement-boneToPick2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-boneToPick2x.png');
width: 68px;
height: 68px;
}
.achievement-boot2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-boot2x.png');
width: 48px;
@@ -509,6 +514,11 @@
width: 60px;
height: 60px;
}
.background_among_giant_mushrooms {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_among_giant_mushrooms.png');
width: 141px;
height: 147px;
}
.background_animal_clouds {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_animal_clouds.png');
width: 141px;
@@ -549,6 +559,11 @@
width: 141px;
height: 147px;
}
.background_autumn_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_autumn_bridge.png');
width: 141px;
height: 147px;
}
.background_autumn_flower_garden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_autumn_flower_garden.png');
width: 141px;
@@ -675,6 +690,11 @@
width: 141px;
height: 147px;
}
.background_branches_of_a_holiday_tree {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_branches_of_a_holiday_tree.png');
width: 141px;
height: 147px;
}
.background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_brick_wall_with_ivy.png');
width: 141px;
@@ -715,6 +735,11 @@
width: 141px;
height: 147px;
}
.background_cemetery_gate {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_cemetery_gate.png');
width: 141px;
height: 147px;
}
.background_champions_colosseum {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_champions_colosseum.png');
width: 141px;
@@ -1289,6 +1314,11 @@
width: 141px;
height: 147px;
}
.background_inside_a_crystal {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_inside_a_crystal.png');
width: 141px;
height: 147px;
}
.background_inside_a_potion_bottle {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_inside_a_potion_bottle.png');
width: 141px;
@@ -1359,6 +1389,11 @@
width: 141px;
height: 147px;
}
.background_mask_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_mask_makers_workshop.png');
width: 141px;
height: 147px;
}
.background_meandering_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_meandering_cave.png');
width: 141px;
@@ -1404,6 +1439,11 @@
width: 141px;
height: 147px;
}
.background_misty_autumn_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_misty_autumn_forest.png');
width: 141px;
height: 147px;
}
.background_monster_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_monster_makers_workshop.png');
width: 141px;
@@ -1684,6 +1724,11 @@
width: 141px;
height: 147px;
}
.background_snowy_village {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_snowy_village.png');
width: 141px;
height: 147px;
}
.background_south_pole {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_south_pole.png');
width: 141px;
@@ -1714,6 +1759,11 @@
width: 141px;
height: 147px;
}
.background_spooky_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_spooky_ruins.png');
width: 141px;
height: 147px;
}
.background_spooky_scarecrow_field {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_spooky_scarecrow_field.png');
width: 141px;
@@ -2080,6 +2130,11 @@
width: 60px;
height: 60px;
}
.icon_background_among_giant_mushrooms {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_among_giant_mushrooms.png');
width: 68px;
height: 68px;
}
.icon_background_animal_clouds {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_animal_clouds.png');
width: 68px;
@@ -2120,6 +2175,11 @@
width: 68px;
height: 68px;
}
.icon_background_autumn_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_autumn_bridge.png');
width: 68px;
height: 68px;
}
.icon_background_autumn_flower_garden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_autumn_flower_garden.png');
width: 68px;
@@ -2246,6 +2306,11 @@
width: 68px;
height: 68px;
}
.icon_background_branches_of_a_holiday_tree {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_branches_of_a_holiday_tree.png');
width: 68px;
height: 68px;
}
.icon_background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_brick_wall_with_ivy.png');
width: 68px;
@@ -2286,6 +2351,11 @@
width: 68px;
height: 68px;
}
.icon_background_cemetery_gate {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_cemetery_gate.png');
width: 60px;
height: 60px;
}
.icon_background_champions_colosseum {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_champions_colosseum.png');
width: 68px;
@@ -2865,6 +2935,11 @@
width: 68px;
height: 68px;
}
.icon_background_inside_a_crystal {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_inside_a_crystal.png');
width: 68px;
height: 68px;
}
.icon_background_inside_a_potion_bottle {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_inside_a_potion_bottle.png');
width: 68px;
@@ -2935,6 +3010,11 @@
width: 68px;
height: 68px;
}
.icon_background_mask_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_mask_makers_workshop.png');
width: 68px;
height: 68px;
}
.icon_background_meandering_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_meandering_cave.png');
width: 68px;
@@ -2980,6 +3060,11 @@
width: 68px;
height: 68px;
}
.icon_background_misty_autumn_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_misty_autumn_forest.png');
width: 68px;
height: 68px;
}
.icon_background_monster_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_monster_makers_workshop.png');
width: 68px;
@@ -3260,6 +3345,11 @@
width: 68px;
height: 68px;
}
.icon_background_snowy_village {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_snowy_village.png');
width: 68px;
height: 68px;
}
.icon_background_south_pole {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_south_pole.png');
width: 68px;
@@ -3290,6 +3380,11 @@
width: 68px;
height: 68px;
}
.icon_background_spooky_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_spooky_ruins.png');
width: 68px;
height: 68px;
}
.icon_background_spooky_scarecrow_field {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_spooky_scarecrow_field.png');
width: 68px;
@@ -18340,6 +18435,11 @@
width: 90px;
height: 90px;
}
.broad_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_jewelersApron.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_lamplightersGreatcoat.png');
width: 114px;
@@ -18450,6 +18550,11 @@
width: 114px;
height: 90px;
}
.broad_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_sheetGhostCostume.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_shepherdRobes.png');
width: 90px;
@@ -18550,6 +18655,11 @@
width: 90px;
height: 90px;
}
.eyewear_armoire_jewelersEyeLoupe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_armoire_jewelersEyeLoupe.png');
width: 114px;
height: 90px;
}
.eyewear_armoire_plagueDoctorMask {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_armoire_plagueDoctorMask.png');
width: 90px;
@@ -19025,6 +19135,11 @@
width: 114px;
height: 90px;
}
.shield_armoire_bubblingCauldron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_bubblingCauldron.png');
width: 114px;
height: 90px;
}
.shield_armoire_chocolateFood {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_chocolateFood.png');
width: 90px;
@@ -19125,6 +19240,11 @@
width: 90px;
height: 90px;
}
.shield_armoire_jewelersPliers {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_jewelersPliers.png');
width: 114px;
height: 90px;
}
.shield_armoire_lifeBuoy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_lifeBuoy.png');
width: 114px;
@@ -19550,6 +19670,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_jewelersApron.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_lamplightersGreatcoat.png');
width: 68px;
@@ -19660,6 +19785,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_sheetGhostCostume.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_shepherdRobes.png');
width: 68px;
@@ -19775,6 +19905,11 @@
width: 68px;
height: 68px;
}
.shop_eyewear_armoire_jewelersEyeLoupe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_armoire_jewelersEyeLoupe.png');
width: 68px;
height: 68px;
}
.shop_eyewear_armoire_plagueDoctorMask {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_armoire_plagueDoctorMask.png');
width: 68px;
@@ -20250,6 +20385,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_bubblingCauldron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_bubblingCauldron.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_chocolateFood {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_chocolateFood.png');
width: 68px;
@@ -20350,6 +20490,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_jewelersPliers {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_jewelersPliers.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_lifeBuoy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_lifeBuoy.png');
width: 68px;
@@ -20675,6 +20820,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_finelyCutGem {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_finelyCutGem.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_floridFan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_floridFan.png');
width: 68px;
@@ -20790,6 +20940,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_magicSpatula {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_magicSpatula.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_magnifyingGlass {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_magnifyingGlass.png');
width: 68px;
@@ -21225,6 +21380,11 @@
width: 90px;
height: 90px;
}
.slim_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_jewelersApron.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_lamplightersGreatcoat.png');
width: 114px;
@@ -21335,6 +21495,11 @@
width: 114px;
height: 90px;
}
.slim_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_sheetGhostCostume.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_shepherdRobes.png');
width: 90px;
@@ -21550,6 +21715,11 @@
width: 114px;
height: 90px;
}
.weapon_armoire_finelyCutGem {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_finelyCutGem.png');
width: 114px;
height: 90px;
}
.weapon_armoire_floridFan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_floridFan.png');
width: 114px;
@@ -21665,6 +21835,11 @@
width: 90px;
height: 90px;
}
.weapon_armoire_magicSpatula {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_magicSpatula.png');
width: 114px;
height: 90px;
}
.weapon_armoire_magnifyingGlass {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_magnifyingGlass.png');
width: 114px;
@@ -27260,6 +27435,101 @@
width: 114px;
height: 90px;
}
.broad_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202210.png');
width: 117px;
height: 120px;
}
.head_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202210.png');
width: 117px;
height: 120px;
}
.shop_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202210.png');
width: 68px;
height: 68px;
}
.shop_head_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202210.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202210.png');
width: 68px;
height: 68px;
}
.slim_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202210.png');
width: 117px;
height: 120px;
}
.head_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202211.png');
width: 114px;
height: 90px;
}
.shop_head_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202211.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202211.png');
width: 68px;
height: 68px;
}
.shop_weapon_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_mystery_202211.png');
width: 68px;
height: 68px;
}
.weapon_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_mystery_202211.png');
width: 114px;
height: 90px;
}
.broad_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202212.png');
width: 114px;
height: 90px;
}
.headAccessory_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_mystery_202212.png');
width: 114px;
height: 90px;
}
.shop_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_weapon_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_mystery_202212.png');
width: 68px;
height: 68px;
}
.slim_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202212.png');
width: 114px;
height: 90px;
}
.weapon_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_mystery_202212.png');
width: 114px;
height: 90px;
}
.broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px;
+12 -8
View File
@@ -180,8 +180,8 @@ input, textarea, input.form-control, textarea.form-control {
}
// used in checkboxes and radios
$bg-focused-active-control: #4f2993;
$bg-disabled-control: #34303a;
$bg-focused-active-control: $purple-200;
$bg-disabled-control: $gray-10;
// custom control
.custom-control {
@@ -231,17 +231,21 @@ $bg-disabled-control: #34303a;
background-color: inherit;
}
&:focus:not(:checked):not(:disabled)~.custom-control-label::before, &:active:not(:checked):not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-focused-active-control, 0.1);
&:focus:not(:checked):not(:disabled)~.custom-control-label::before,
&:active:not(:checked):not(:disabled)~.custom-control-label::before {
border: 2px solid $gray-300;
box-shadow: 0 0 0 2px rgba(146, 92, 243, 0.5);
}
&:focus:checked:not(:disabled)~.custom-control-label::before, &:active:checked:not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-focused-active-control, 0.1);
border-color: $purple-400;
&:focus:checked:not(:disabled)~.custom-control-label::before,
&:active:checked:not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 2px rgba(146, 92, 243, 0.5);
border-color: 2 px solid $purple-400;
background-color: $purple-400;
}
&:focus:disabled~.custom-control-label::before, &:active:disabled~.custom-control-label::before {
&:focus:disabled~.custom-control-label::before,
&:active:disabled~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-disabled-control, 0.1);
}
+2 -2
View File
@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="10" viewBox="0 0 13 10">
<path fill-rule="evenodd" d="M4.662 9.832c-.312 0-.61-.123-.831-.344L0 5.657l1.662-1.662 2.934 2.934L10.534 0l1.785 1.529-6.764 7.893a1.182 1.182 0 0 1-.848.409l-.045.001"/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M6.54,13c-.3,0-.59-.13-.81-.35l-3.73-3.9,1.62-1.69,2.86,2.98L12.26,3l1.74,1.56L7.41,12.58c-.21,.25-.51,.4-.83,.42-.01,0-.03,0-.04,0Z" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 268 B

After

Width:  |  Height:  |  Size: 236 B

+10
View File
@@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path fill="#DE3F3F" d="M0 5.667 3.333 1h9.334L16 5.667l-8 8.666z"/>
<path fill="#FFF" opacity=".25" d="M4.667 5.533 4 2.333h4zM11.333 5.533l.667-3.2H8z"/>
<path fill="#FFF" opacity=".5" d="M4.667 5.533 8 2.333l3.333 3.2zM1.733 5.533 4 2.333l.667 3.2z"/>
<path fill="#34313A" opacity=".11" d="M14.267 5.533 12 2.333l-.667 3.2zM1.733 5.533h2.934L8 12.4z"/>
<path fill="#FFF" opacity=".5" d="M14.267 5.533h-2.934L8 12.4z"/>
<path fill="#FFF" opacity=".25" d="M4.667 5.533h6.666L8 12.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 675 B

@@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path d="M3 12.606v1.778c0 .208.093.408.262.53 1.842 1.347 6.923 1.347 8.766 0a.655.655 0 0 0 .26-.53v-1.778c0-1.621-.831-3.177-2.091-4.104a.666.666 0 0 1 0-1.08c1.26-.927 2.092-2.483 2.092-4.105V1.54a.652.652 0 0 0-.261-.53c-1.843-1.346-6.924-1.346-8.766 0A.65.65 0 0 0 3 1.54v1.777c0 1.622.832 3.178 2.092 4.105.368.27.368.81 0 1.08C3.832 9.429 3 10.985 3 12.606" fill="#F19595"/>
<path d="M7.644 1.327c1.51 0 2.684.274 3.318.587v1.403c0 1.169-.594 2.332-1.551 3.036a2.006 2.006 0 0 0-.818 1.609c0 .63.305 1.232.817 1.608.958.705 1.552 1.868 1.552 3.036v1.404c-.634.313-1.809.587-3.318.587-1.508 0-2.683-.274-3.317-.587v-1.404c0-1.168.594-2.331 1.551-3.035.513-.377.817-.978.817-1.609 0-.63-.304-1.232-.816-1.609-.958-.704-1.552-1.867-1.552-3.036V1.914c.634-.313 1.809-.587 3.317-.587" fill-opacity=".9" fill="#FFF"/>
<path d="M7.797 2.324c-1.132 0-2.331.105-2.343.385-.01.226-.005.664.914 1.13.893.453 1.06 1.282 1.546 1.282.564 0 .596-.477 1.284-.95.71-.488.823-1.148.815-1.408-.011-.363-1.084-.439-2.216-.439" fill="#DE3F3F"/>
<path d="M9.198 4.17c.71-.487.823-1.146.815-1.407-.009-.288-.684-.395-1.526-.427.236.12.543.377.467.88-.078.525-.904 1.105-.77 1.568.025.09.069.162.124.221.247-.17.408-.502.89-.835" fill="#B01515"/>
<path d="M7.644 9.17c-.344 0-.433.628-.933 1.018-.613.478-1.196 1.067-1.356 1.914-.131.698-.012.785.148.834.16.049 1.386.257 2.588 0 1.203-.258 1.87-.737 1.755-1.227-.111-.466-.448-.865-1.068-1.325-.593-.44-.79-1.214-1.134-1.214" fill="#DE3F3F"/>
<path d="M5.503 12.936c.16.05 1.386.257 2.588 0 .956-.205 1.574-.55 1.729-.929a.096.096 0 0 0-.005-.023c-.067-.256-1.073-.41-2.325-.207-1.192.192-2.158.586-2.153 1.03.037.08.097.108.166.129" fill="#B01515"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -22,11 +22,6 @@
Account created:
<strong>{{ hero.auth.timestamps.created | formatDate }}</strong>
</div>
<div>
Most recent cron:
<strong>{{ hero.auth.timestamps.loggedin | formatDate }}</strong>
("auth.timestamps.loggedin")
</div>
<div v-if="cronError">
"lastCron" value:
<strong>{{ hero.lastCron | formatDate }}</strong>
@@ -36,6 +31,19 @@
("auth.timestamps.loggedin" and "lastCron" dates are different).
</span>
</div>
<div class="form-inline">
<div>
Most recent cron:
<strong>{{ hero.auth.timestamps.loggedin | formatDate }}</strong>
("auth.timestamps.loggedin")
</div>
<button
class="btn btn-primary ml-2"
@click="resetCron()"
>
Reset Cron to Yesterday
</button>
</div>
<div class="subsection-start">
Time zone:
<strong>{{ hero.preferences.timezoneOffset | formatTimeZone }}</strong>
@@ -218,6 +226,10 @@ export default {
await this.saveHero({ hero: this.hero, msg: 'API Token' });
this.tokenModified = true;
},
resetCron () {
this.hero.resetCron = true;
this.saveHero({ hero: this.hero, msg: 'Last Cron', clearData: true });
},
},
};
</script>
@@ -17,6 +17,10 @@
:reset-counter="resetCounter"
/>
<subscription-and-perks
:hero="hero"
/>
<cron-and-auth
:hero="hero"
:reset-counter="resetCounter"
@@ -45,6 +49,7 @@
<transactions
:hero="hero"
:reset-counter="resetCounter"
/>
<contributor-details
@@ -97,6 +102,7 @@ import AvatarAndDrops from './avatarAndDrops';
import PrivilegesAndGems from './privilegesAndGems';
import ContributorDetails from './contributorDetails';
import Transactions from './transactions';
import SubscriptionAndPerks from './subscriptionAndPerks';
import { userStateMixin } from '../../../mixins/userState';
@@ -110,6 +116,7 @@ export default {
PrivilegesAndGems,
ContributorDetails,
Transactions,
SubscriptionAndPerks,
},
mixins: [userStateMixin],
data () {
@@ -40,6 +40,11 @@
v-model="hero.auth.blocked"
type="checkbox"
> Ban / Block
<p>
<small>
Banning a user also auto-hides all their guild posts.
</small>
</p>
</label>
</div>
<div class="form-inline">
@@ -0,0 +1,155 @@
<template>
<div class="accordion-group">
<h3
class="expand-toggle"
:class="{'open': expand}"
@click="expand = !expand"
>
Subscription, Monthly Perks
</h3>
<div v-if="expand">
<form @submit.prevent="saveHero({ hero, msg: 'Subscription Perks' })">
<div v-if="hero.purchased.plan.paymentMethod">
Payment method:
<strong>{{ hero.purchased.plan.paymentMethod }}</strong>
</div>
<div v-if="hero.purchased.plan.planId">
Payment schedule ("basic-earned" is monthly):
<strong>{{ hero.purchased.plan.planId }}</strong>
</div>
<div v-if="hero.purchased.plan.dateCreated">
Creation date:
<strong>{{ dateFormat(hero.purchased.plan.dateCreated) }}</strong>
</div>
<div>
Termination date:
<strong
v-if="hero.purchased.plan.dateTerminated"
>
{{ dateFormat(hero.purchased.plan.dateTerminated) }}
</strong>
<strong v-else> None </strong>
</div>
<div class="form-inline">
<label>
Consecutive months:
<input
v-model="hero.purchased.plan.consecutive.count"
class="form-control"
type="number"
min="0"
step="1"
>
</label>
</div>
<div>
Months until renewal:
<strong>{{ hero.purchased.plan.consecutive.offset }}</strong>
</div>
<div>
Next Mystic Hourglass:
<strong>{{ nextHourglassDate }}</strong>
</div>
<div class="form-inline">
<label>
Mystic Hourglasses:
<input
v-model="hero.purchased.plan.consecutive.trinkets"
class="form-control"
type="number"
min="0"
step="1"
>
</label>
</div>
<div>
Gem cap:
<strong>{{ hero.purchased.plan.consecutive.gemCapExtra + 25 }}</strong>
</div>
<div class="form-inline">
<label>
Gems bought this month:
<input
v-model="hero.purchased.plan.gemsBought"
class="form-control"
type="number"
min="0"
:max="hero.purchased.plan.consecutive.gemCapExtra + 25"
step="1"
>
</label>
</div>
<div
v-if="hero.purchased.plan.extraMonths > 0"
>
Additional credit (applied upon cancellation):
<strong>{{ hero.purchased.plan.extraMonths }}</strong>
</div>
<div>
Mystery Items:
<span
v-if="hero.purchased.plan.mysteryItems.length > 0"
>
<span
v-for="(item, index) in hero.purchased.plan.mysteryItems"
:key="index"
>
<strong v-if="index < hero.purchased.plan.mysteryItems.length - 1">
{{ item }},
</strong>
<strong v-else> {{ item }} </strong>
</span>
</span>
<span v-else>
<strong>None</strong>
</span>
</div>
<input
type="submit"
value="Save"
class="btn btn-primary mt-1"
>
</form>
</div>
</div>
</template>
<script>
import moment from 'moment';
import saveHero from '../mixins/saveHero';
import { getPlanContext } from '@/../../common/script/cron';
export default {
mixins: [saveHero],
props: {
hero: {
type: Object,
required: true,
},
},
data () {
return {
expand: false,
};
},
computed: {
nextHourglassDate () {
const currentPlanContext = getPlanContext(this.hero, new Date());
return currentPlanContext.nextHourglassDate.format('MMMM');
},
},
watch: {
'hero.purchased.plan.consecutive.count' () { // eslint-disable-line object-shorthand
this.hero.purchased.plan.consecutive.gemCapExtra = Math.min(
Math.floor(this.hero.purchased.plan.consecutive.count / 3) * 5, 25,
);
},
},
methods: {
dateFormat (date) {
return moment(date).format('YYYY/MM/DD');
},
},
};
</script>
@@ -30,6 +30,10 @@ export default {
type: Object,
required: true,
},
resetCounter: {
type: Number,
required: true,
},
},
data () {
return {
@@ -38,6 +42,14 @@ export default {
hourglassTransactions: [],
};
},
watch: {
resetCounter () {
if (this.expand) {
this.expand = !this.expand;
this.toggleTransactionsOpen();
}
},
},
methods: {
async toggleTransactionsOpen () {
this.expand = !this.expand;
@@ -280,6 +280,7 @@ import markdownDirective from '@/directives/markdown';
import { userStateMixin } from '../../mixins/userState';
import { TAVERN_ID, MIN_SHORTNAME_SIZE_FOR_CHALLENGES, MAX_SUMMARY_SIZE_FOR_CHALLENGES } from '@/../../common/script/constants';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
export default {
directives: {
@@ -288,64 +289,7 @@ export default {
mixins: [userStateMixin],
props: ['groupId'],
data () {
const categoryOptions = [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'self_improvement',
key: 'self_improvement',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
];
const categoryOptions = CategoryOptions;
const hashedCategories = {};
categoryOptions.forEach(category => {
hashedCategories[category.key] = category.label;
@@ -89,70 +89,14 @@
import throttle from 'lodash/throttle';
import FilterSidebar from '@/components/ui/filterSidebar';
import FilterGroup from '@/components/ui/filterGroup';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
export default {
components: { FilterGroup, FilterSidebar },
data () {
return {
categoryFilters: [],
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'self_improvement',
key: 'self_improvement',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
membershipFilters: [],
membershipOptions: [
{
@@ -1,3 +1,4 @@
<!-- THIS IS A VERY OLD FILE DO NOT USE -->
<template>
<div class="create-group-modal-pages">
<div
@@ -0,0 +1,356 @@
<template>
<b-modal
id="create-group"
:title="activePage === PAGES.CREATE_GROUP ? 'Create your Group' : 'Select Payment'"
:hide-footer="true"
:hide-header="true"
size="md"
@hide="onHide()"
>
<div
v-if="activePage === PAGES.CREATE_GROUP"
class="col-12"
>
<!-- HEADER -->
<div
class="modal-close"
>
<span
class="cancel-text"
@click="close()"
>
{{ $t('cancel') }}
</span>
<button
class="btn btn-primary next-button"
:value="$t('next')"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('next') }}
</button>
</div>
<h2>{{ $t('createGroup') }}</h2>
<!-- FORM -->
<div class="form-group">
<lockable-label
:text="$t('nameStar')"
/>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content name-input"
required="required"
type="text"
:placeholder="$t('nameStarText')"
>
</div>
<div class="form-group">
<lockable-label
for="new-group-description"
:text="$t('descriptionOptional')"
class="description-label"
/>
<div class="characters-remaining">
{{ $t('charactersRemaining', {characters: charactersRemaining}) }}
</div>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content description-input"
cols="3"
:placeholder="$t('descriptionOptionalText')"
maxlength="250"
></textarea>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div>
<div class="form-group">
<lockable-label
:text="$t('groupUse')"
/>
<select-translated-array
:items="[
'groupParentChildren',
'groupCouple',
'groupFriends',
'groupCoworkers',
'groupManager',
'groupTeacher'
]"
class="group-input"
:placeholder="'groupUseDefault'"
:value="newGroup.demographics"
@select="newGroup.demographics = $event"
/>
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block btn-payment"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('nextPaymentMethod') }}
</button>
</div>
</div>
<!-- PAYMENT -->
<!-- @TODO: Separate payment into a separate modal -->
<div
v-if="activePage === PAGES.PAY"
class="col-12 payments"
>
<div class="text-center">
<payments-buttons
:stripe-fn="() => pay(PAYMENTS.STRIPE)"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>
</div>
</div>
</b-modal>
</template>
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
h2 {
color: $purple-300;
font-size: 1.25rem;
height: 28px;
width: 120px;
margin-top: 24px;
align-self: center;
}
.cancel-text {
color: $blue-10;
font-size: 0.875rem;
margin-right: 16px;
text-align: center;
cursor: pointer;
}
.next-button {
align-self: center;
}
.form-control::placeholder {
color: $gray-50;
height: 32px;
}
.description-label {
margin-bottom: -24px;
}
.name-input, .description-input, .group-input {
margin-top: -4px;
}
.characters-remaining {
color: $gray-100;
font-size: 0.75rem;
line-height: 1.33;
text-align: right;
margin-bottom: 12px;
}
.description-input {
height: 56px;
}
.spacer {
margin-bottom: 16px !important;
}
.btn-payment {
margin: 24px 112px 24px 112px;
width: 177px;
}
.payments {
padding: 24px;
}
.payment-options {
margin-bottom: 4em;
.purple-box {
background-color: #4f2a93;
color: #fff;
padding: .5em;
border-radius: 8px;
width: 200px;
height: 215px;
.dollar {
}
.number {
font-size: 60px;
}
.name {
width: 100px;
margin-left: .3em;
}
div {
display: inline-block;
}
}
.box, .purple-box {
display: inline-block;
vertical-align: bottom;
}
}
</style>
<style lang="scss">
@import '~@/assets/scss/mixins.scss';
#create-group {
.modal-dialog {
max-width: 448px;
}
.modal-content {
width: 448px;
max-height: 436px;
border-radius: 8px;
box-shadow: 0 14px 28px 0 rgba(26, 24, 29, 0.24), 0 10px 10px 0 rgba(26, 24, 29, 0.28);
}
.modal-body{
padding: 0px;
margin-left: 12px;
margin-right: 12px;
}
.modal-close {
position: absolute;
right: 16px;
cursor: pointer;
top: 0px;
}
}
</style>
<script>
import paymentsMixin from '../../mixins/payments';
import { mapState } from '@/libs/store';
import paymentsButtons from '@/components/payments/buttons/list';
import selectTranslatedArray from '@/components/tasks/modal-controls/selectTranslatedArray';
import lockableLabel from '@/components/tasks/modal-controls/lockableLabel';
import * as Analytics from '@/libs/analytics';
export default {
components: {
paymentsButtons,
selectTranslatedArray,
lockableLabel,
},
mixins: [paymentsMixin],
data () {
return {
amazonPayments: {},
PAGES: {
CREATE_GROUP: 'create-group',
// UPGRADE_GROUP: 'upgrade-group',
PAY: 'pay',
},
PAYMENTS: {
AMAZON: 'amazon',
STRIPE: 'stripe',
},
paymentMethod: '',
newGroup: {
type: 'guild',
privacy: 'private',
name: '',
description: '',
leaderOnly: {
challenges: false,
},
demographics: null,
user: '',
},
activePage: 'create-group',
type: 'guild',
};
},
computed: {
...mapState({ user: 'user.data' }),
newGroupIsReady () {
return Boolean(this.newGroup.name) && Boolean(this.newGroup.demographics);
},
charactersRemaining () {
const currentLength = this.newGroup.description ? this.newGroup.description.length : 0;
return 250 - currentLength;
},
},
methods: {
close () {
this.$root.$emit('bv::hide::modal', 'create-group');
},
changePage (page) {
this.activePage = page;
},
createGroup () {
this.changePage(this.PAGES.PAY);
},
pay (paymentMethod) {
const subscriptionKey = 'group_monthly'; // @TODO: Get from content API?
const demographicsKey = this.newGroup.demographics;
const paymentData = {
subscription: subscriptionKey,
coupon: null,
demographics: demographicsKey,
};
Analytics.track({
hitType: 'event',
eventName: 'group plan create',
eventAction: 'group plan create',
eventCategory: 'behavior',
demographics: this.newGroup.demographics,
type: this.newGroup.type,
}, { trackOnClient: true });
if (this.upgradingGroup && this.upgradingGroup._id) {
paymentData.groupId = this.upgradingGroup._id;
paymentData.group = this.upgradingGroup;
} else {
paymentData.groupToCreate = this.newGroup;
}
this.paymentMethod = paymentMethod;
if (this.paymentMethod === this.PAYMENTS.AMAZON) {
paymentData.type = 'subscription';
return paymentData;
}
if (this.paymentMethod === this.PAYMENTS.STRIPE) {
this.redirectToStripe(paymentData);
}
return null;
},
onHide () {
this.sendingInProgress = false;
},
},
};
</script>
@@ -45,7 +45,7 @@
v-html="$t('dayStart', { startTime: groupStartTime } )"
>
</div>
<div class="ml-2">
<div class="create-task-area ml-2">
<button
id="create-task-btn"
v-if="canCreateTasks"
@@ -132,6 +132,14 @@
margin-bottom: 0px;
}
.create-task-area {
position: inherit;
.dropdown {
right: 24px;
}
}
.day-start {
height: 2rem;
padding: 0.25rem 0.75rem;
@@ -379,6 +379,7 @@ import informationIcon from '@/assets/svg/information.svg';
import { MAX_SUMMARY_SIZE_FOR_GUILDS } from '@/../../common/script/constants';
import { userStateMixin } from '../../mixins/userState';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
// @TODO: Not sure the best way to pass party creating status
// Since we need the modal in the header, passing props doesn't work
@@ -410,64 +411,7 @@ export default {
allowGuildInvitationsFromNonMembers: true,
bannedWordsAllowed: null,
},
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'recovery_support_groups',
key: 'recovery_support_groups',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
showCategorySelect: false,
members: [],
inviteMembers: false,
@@ -1,6 +1,7 @@
<template>
<!-- @TODO: Move to group plans folder-->
<div>
<group-plan-creation-modal />
<div>
<div class="header">
<h1 class="text-center">
@@ -51,6 +52,7 @@
</div>
</div>
</div>
<!-- Upgrading an existing group -->
<div
v-if="upgradingGroup._id"
id="upgrading-group"
@@ -100,153 +102,53 @@
</div>
</div>
</div>
<!-- Create a new group -->
<div
v-if="!upgradingGroup._id"
class="container col-6 offset-3 create-option"
>
<div class="row">
<h1 class="col-12 text-center purple-header">
Create your Group today!
Create Your Group Today!
</h1>
</div>
<div class="row">
<div class="col-12 text-center">
<button
class="btn btn-primary create-group"
@click="launchModal('create')"
@click="launchModal('create-page')"
>
Create Your New Group
Create Your New Group!
</button>
</div>
</div>
<div class="row pricing">
<div class="col-5">
<div class="dollar">
$
</div>
<div class="number">
9
</div>
<div class="name">
<div>Group Owner</div>
<div>Subscription</div>
</div>
<div class="row pricing justify-content-center align-items-center">
<div class="dollar">
$
</div>
<div class="col-1">
<div class="plus">
+
</div>
<div class="number">
9
</div>
<div class="col-6">
<div class="dollar">
$
</div>
<div class="number">
3
</div>
<div class="name">
<div>Each Additional</div>
<div>Member</div>
</div>
<div class="name">
<div>Group Owner</div>
<div>Subscription</div>
</div>
<div class="plus">
+
</div>
<div class="dollar">
$
</div>
<div class="number">
3
</div>
<div class="name">
<div>Each Additional</div>
<div>Member</div>
</div>
</div>
</div>
</div>
<b-modal
id="group-plan-modal"
:title="activePage === PAGES.CREATE_GROUP ? 'Create your Group' : 'Select Payment'"
size="md"
hide-footer="hide-footer"
>
<div
v-if="activePage === PAGES.CREATE_GROUP"
class="col-12"
>
<div class="form-group">
<label
class="control-label"
for="new-group-name"
>Name</label>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content"
required="required"
type="text"
placeholder="Name"
>
</div>
<div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content"
cols="3"
:placeholder="$t('description')"
></textarea>
</div>
<div
v-if="type === 'guild'"
class="form-group"
>
<div class="custom-control custom-radio">
<input
v-model="newGroup.privacy"
class="custom-control-input"
type="radio"
name="new-group-privacy"
value="private"
>
<label class="custom-control-label">{{ $t('inviteOnly') }}</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div>
<div
v-if="type === 'party'"
class="form-group"
>
<button
class="btn btn-secondary form-control"
:value="$t('create')"
@click="createGroup()"
></button>
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('create') }}
</button>
</div>
</div>
<div
v-if="activePage === PAGES.PAY"
class="col-12"
>
<div class="text-center">
<payments-buttons
:stripe-fn="() => pay(PAYMENTS.STRIPE)"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>
</div>
</div>
</b-modal>
</div>
</template>
@@ -258,8 +160,8 @@
.dollar {
position: absolute;
left: -1em;
top: 1em;
left: -16px;
top: 16px;
}
.purple-box {
@@ -291,9 +193,9 @@
background: #432874;
background: linear-gradient(180deg, #4F2A93 0%, #432874 100%);
color: #fff;
padding: 2em;
padding: 32px;
height: 340px;
margin-bottom: 2em;
margin-bottom: 32px;
margin-left: -12px;
margin-right: -12px;
@@ -317,6 +219,7 @@
.box {
height: 416px;
border-radius: 8px;
}
h2 {
@@ -359,17 +262,19 @@
button.create-group {
width: 330px;
height: 96px;
border-radius: 8px;
font-size: 1.5rem;
}
.purple-header {
color: #6133b4;
font-size: 48px;
margin-top: 1em;
margin-top: 16px;
}
.pricing {
margin-top: 2em;
margin-bottom: 4em;
margin-top: 32px;
margin-bottom: 64px;
.dollar, .number, .name {
display: inline-block;
@@ -378,30 +283,32 @@
}
.plus {
font-size: 34px;
font-size: 2.125rem;
color: #a5a1ac;
margin-left: 16px;
margin-right: 16px;
}
.dollar {
margin-bottom: 1.5em;
font-size: 32px;
margin-bottom: 24px;
font-size: 2rem;
font-weight: bold;
}
.name {
font-size: 24px;
margin-bottom: .8em;
margin-left: .5em;
font-size: 1.5rem;
margin-left: 8px;
margin-right: 8px;
}
.number {
font-size: 72px;
font-size: 4.5rem;
font-weight: bolder;
}
}
.payment-options {
margin-bottom: 4em;
margin-bottom: 64px;
h4 {
color: #34313a;
@@ -410,7 +317,7 @@
.purple-box {
background-color: #4f2a93;
color: #fff;
padding: .5em;
padding: 8px;
border-radius: 8px;
width: 200px;
height: 215px;
@@ -424,7 +331,7 @@
.name {
width: 100px;
margin-left: .3em;
margin-left: 4.8px;
}
.plus {
@@ -449,10 +356,12 @@ import paymentsMixin from '../../mixins/payments';
import { mapState } from '@/libs/store';
import positiveIcon from '@/assets/svg/positive.svg';
import paymentsButtons from '@/components/payments/buttons/list';
import groupPlanCreationModal from '../group-plans/groupPlanCreationModal';
export default {
components: {
paymentsButtons,
groupPlanCreationModal,
},
mixins: [paymentsMixin],
data () {
@@ -501,12 +410,7 @@ export default {
},
methods: {
launchModal () {
this.changePage(this.PAGES.CREATE_GROUP);
this.$root.$emit('bv::show::modal', 'group-plan-modal');
},
changePage (page) {
this.activePage = page;
window.scrollTo(0, 0);
this.$root.$emit('bv::show::modal', 'create-group');
},
createGroup () {
this.changePage(this.PAGES.PAY);
@@ -86,6 +86,7 @@
import throttle from 'lodash/throttle';
import FilterSidebar from '@/components/ui/filterSidebar';
import FilterGroup from '@/components/ui/filterGroup';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
// TODO use checkbox-component to add/remove entries to *Filters, but without the v-model binding
@@ -94,64 +95,7 @@ export default {
data () {
return {
categoryFilters: [],
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'recovery_support_groups',
key: 'recovery_support_groups',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
roleFilters: [],
roleOptions: [
{
@@ -267,7 +267,7 @@
</div>
</div>
<div class="px-4">
<sidebar-section :title="$t('staffAndModerators')">
<sidebar-section :title="$t('staff')">
<div class="row">
<div
v-for="user in staff"
@@ -289,19 +289,6 @@
class="svg-icon staff-icon"
v-html="icons.tierStaff"
></div>
<div
v-if="user.type === 'Moderator' && user.name !== 'It\'s Bailey'"
class="svg-icon mod-icon"
v-html="icons.tierMod"
></div>
<div
v-if="user.name === 'It\'s Bailey'"
class="svg-icon npc-icon"
v-html="icons.tierNPC"
></div>
</div>
<div class="type">
{{ user.type }}
</div>
</div>
</div>
@@ -787,18 +787,15 @@ export default {
if (sortBy === 'sortByColor') {
groupKey = 'potionKey';
} else if (sortBy === 'AZ') {
groupKey = '';
groupKey = i => i.eggName[0];
} else if (sortBy === 'sortByHatchable') {
groupKey = i => (i.isHatchable() ? 0 : 1);
}
const groupedPets = groupBy(pets, groupKey);
// Pets are rendered as grouped "rows". Count helps decide if show more button is necessary.
if (sortBy === 'AZ') {
this.petRowCount[animalGroup.key] = 1;
} else {
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
}
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
return groupedPets;
},
mounts (animalGroup, hideMissing, sortBy, searchText) {
@@ -814,14 +811,12 @@ export default {
if (sortBy === 'sortByColor') {
groupKey = 'potionKey';
} else if (sortBy === 'AZ') {
groupKey = '';
groupKey = i => i.eggName[0];
}
const groupedMounts = groupBy(mounts, groupKey);
if (sortBy === 'AZ') {
this.mountRowCount[animalGroup.key] = 1;
} else {
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
}
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
return groupedMounts;
},
// Actions
@@ -241,6 +241,14 @@ const NOTIFICATIONS = {
achievement: 'mountColorAchievs',
},
},
ACHIEVEMENT_PET_SET_COMPLETE: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementPetSetComplete')}`,
modalId: 'generic-achievement',
data: {
achievement: 'petSetCompleteAchievs',
},
},
};
export default {
@@ -313,6 +321,7 @@ export default {
'ACHIEVEMENT_ANIMAL_SET',
'ACHIEVEMENT_PET_COLOR',
'ACHIEVEMENT_MOUNT_COLOR',
'ACHIEVEMENT_PET_SET_COMPLETE',
].forEach(type => {
handledNotifications[type] = true;
});
@@ -772,6 +781,15 @@ export default {
Vue.set(this.user.achievements, achievement, true);
break;
}
case 'ACHIEVEMENT_PET_SET_COMPLETE': {
const { achievement } = notification.data;
const upperCaseAchievement = achievement.charAt(0).toUpperCase() + achievement.slice(1);
const achievementTitleKey = `achievement${upperCaseAchievement}`;
NOTIFICATIONS.ACHIEVEMENT_PET_SET_COMPLETE.label = $t => `${$t('achievement')}: ${$t(achievementTitleKey)}`;
this.showNotificationWithModal(notification);
Vue.set(this.user.achievements, achievement, true);
break;
}
case 'ACHIEVEMENT': { // generic achievement
const { achievement } = notification.data;
const upperCaseAchievement = achievement.charAt(0).toUpperCase() + achievement.slice(1);
@@ -196,7 +196,7 @@ export default {
appState.group = pick(this.amazonPayments.groupToCreate, ['_id', 'memberCount', 'name']);
} else {
appState.newGroup = false;
appState.group = pick(this.amazonPayments.group, ['_id', 'memberCount', 'name']);
appState.group = pick(this.amazonPayments.group, ['_id', 'memberCount', 'name', 'type']);
}
} else if (paymentType && paymentType.indexOf('gift-') === 0) {
appState.gift = this.amazonPayments.gift;
@@ -161,6 +161,19 @@
})"
:amazon-data="{type: 'single', gemsBlock: selectedGemsBlock}"
/>
<div
v-if="eventName === 'fall_extra_gems' || eventName === 'spooky_extra_gems'"
class="d-flex flex-column justify-content-center"
>
<h4 class="mt-3 mx-auto"> {{ $t('howItWorks') }}</h4>
<small class="text-center">
{{ $t('gemSaleHow', { eventStartMonth, eventStartOrdinal, eventEndOrdinal }) }}
</small>
<h4 class="mt-3 mx-auto"> {{ $t('limitations') }}</h4>
<small class="text-center">
{{ $t('gemSaleLimitations', { eventStartMonth, eventStartOrdinal, eventEndOrdinal }) }}
</small>
</div>
</div>
</b-modal>
</div>
@@ -170,6 +183,13 @@
@import '~@/assets/scss/colors.scss';
#buy-gems {
small {
color: $gray-100;
font-size: 12px;
margin-left: 20px;
margin-right: 20px;
}
.close-icon svg path {
stroke: $purple-400;
}
@@ -339,8 +359,8 @@
.svg-icon.check {
color: $purple-400;
width: 0.77rem;
height: 0.615rem;
width: 16px;
height: 16px;
}
.text-leadin {
@@ -415,6 +435,15 @@ export default {
}
return '';
},
eventStartMonth () {
return moment(this.currentEvent.start).format('MMMM');
},
eventStartOrdinal () {
return moment(this.currentEvent.start).format('Do');
},
eventEndOrdinal () {
return moment(this.currentEvent.end).format('Do');
},
isGemsPromoActive () {
const currEvt = this.currentEvent;
if (currEvt && currEvt.gemsPromo && moment().isBefore(currEvt.end)) {
@@ -75,6 +75,7 @@
v-show="selectedPage === 'subscription'"
class="subscribe-option"
:userReceivingGift="userReceivingGift"
:receiverName="receiverName"
/>
<!-- gem block -->
@@ -648,6 +649,7 @@ export default {
},
},
giftReceiver: this.receiverName,
toUserId: this.userReceivingGift._id,
});
}, 500);
},
@@ -1,11 +1,22 @@
<template>
<b-modal
id="payments-success-modal"
:title="$t('accountSuspendedTitle')"
:hide-footer="isFromBalance"
:modal-class="isFromBalance ? ['modal-hidden-footer'] : []"
:hide-footer="isNewGroup || isGems || isSubscription"
:modal-class="isNewGroup || isGems || isSubscription
? ['modal-hidden-footer'] : []"
>
<!-- HEADER -->
<div slot="modal-header">
<div
class="modal-close"
@click="close()"
>
<div
class="icon-close"
v-html="icons.close"
>
</div>
</div>
<div class="check-container d-flex align-items-center justify-content-center">
<div
v-once
@@ -13,19 +24,13 @@
v-html="icons.check"
></div>
</div>
<h2>{{ $t(isFromBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div>
<div slot="modal-footer">
<div
v-once
class="small-text"
>
{{ $t('giftSubscriptionText4') }}
</div>
<h2>{{ $t(isGemsBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div>
<!-- BODY -->
<div class="row">
<div class="col-12 modal-body-col">
<template v-if="paymentData.paymentType === 'gems'">
<!-- buy gems for self -->
<template v-if="isGems">
<strong v-once>{{ $t('paymentYouReceived') }}</strong>
<div class="details-block gems">
<div
@@ -36,9 +41,9 @@
<span>{{ paymentData.gemsBlock.gems }}</span>
</div>
</template>
<!-- buy gems to someone else OR send gems from balance-->
<template
v-if="paymentData.paymentType === 'gift-gems'
|| paymentData.paymentType === 'gift-gems-balance'"
v-if="isGiftGems || isGemsBalance"
>
<span v-html="$t('paymentYouSentGems', {name: paymentData.giftReceiver})"></span>
<div class="details-block gems">
@@ -50,13 +55,17 @@
<span>{{ paymentData.gift.gems.amount }}</span>
</div>
</template>
<!-- give gift subscription (non-recurring)-->
<template v-if="paymentData.paymentType === 'gift-subscription'">
<span
v-html="$t('paymentYouSentSubscription', {
name: paymentData.giftReceiver, months: paymentData.subscription.months})"
></span>
<div>
<span
v-html="$t('paymentYouSentSubscription', {
name: paymentData.giftReceiver, months: paymentData.subscription.months})"
></span>
</div>
</template>
<template v-if="paymentData.paymentType === 'subscription'">
<!-- buy self subscription (recurring) -->
<template v-if="isSubscription">
<strong v-once>{{ $t('nowSubscribed') }}</strong>
<div class="details-block">
<span
@@ -65,48 +74,238 @@
></span>
</div>
</template>
<template v-if="paymentData.paymentType === 'groupPlan'">
<!-- group plan new or upgraded -->
<template v-if="isGroupPlan">
<span
v-html="$t(paymentData.newGroup
v-html="$t(isNewGroup
? 'groupPlanCreated' : 'groupPlanUpgraded', {groupName: paymentData.group.name})"
></span>
<div class="details-block">
<span
v-html="$t('paymentSubBilling', {
amount: groupPlanCost, months: paymentData.subscription.months})"
></span>
<div
v-if="isGroupPlan"
class=""
>
<div class="details-block group-billing-date">
<span
v-html="$t('groupsPaymentSubBilling', { renewalDate })"
>
</span>
</div>
<div class="small-text group-auto-renew">
<span
v-once
>{{ $t('groupsPaymentAutoRenew') }}
</span>
</div>
</div>
</template>
<!-- buy self subscription auto renew -->
<template
v-if="paymentData.paymentType === 'groupPlan'
|| paymentData.paymentType === 'subscription'"
v-if="isSubscription"
>
<span
v-once
class="small-text auto-renew"
>{{ $t('paymentAutoRenew') }}</span>
</template>
<!-- buttons for subscriptions / new Group / buy Gems for self -->
<button
v-if="isNewGroup || isGems || isSubscription"
v-once
class="btn btn-primary"
@click="close()"
@click="submit()"
>
{{ $t('onwards') }}
</button>
</div>
</div>
<!-- FOOTER -->
<div slot="modal-footer">
<!-- gift gems balance & buy, gift subscription -->
<div
v-if="isGemsBalance || isGiftGems || isGiftSubscription"
class="message mx-auto"
>
<lockable-label
:text="$t('sendGiftLabel')"
class="mx-auto label-text"
/>
<textarea
v-model="gift.message"
class="form-control mx-auto"
:placeholder="$t('sendGiftMessagePlaceholder')"
></textarea>
<button
:disabled="!gift.message || sendingInProgress"
class="btn btn-primary mx-auto"
@click="sendMessage()"
>
{{ $t('sendMessage') }}
</button>
</div>
<!-- upgradedGroup -->
<div
v-else-if="isUpgradedGroup"
class="demographics d-flex flex-column justify-content-center"
>
<lockable-label
:text="$t('groupUse')"
class="mx-auto label-text"
/>
<select-translated-array
:items="[
'groupParentChildren',
'groupCouple',
'groupFriends',
'groupCoworkers',
'groupManager',
'groupTeacher'
]"
class="group-input"
:placeholder="'groupUseDefault'"
:value="upgradedGroup.demographics"
@select="upgradedGroup.demographics = $event"
/>
<button
v-if="!paymentData.newGroup"
class="btn btn-primary mx-auto"
:disabled="!upgradedGroup.demographics"
@click="submit()"
>
{{ $t('submit') }}
</button>
</div>
</div>
</b-modal>
</template>
<style lang="scss">
@import '~@/assets/scss/colors.scss';
#payments-success-modal .modal-md {
max-width: 20.5rem;
}
#payments-success-modal {
.modal-md {
max-width: 448px;
min-width: 330px;
#payments-success-modal .modal-content {
background: transparent;
.modal-close {
position: absolute;
right: 16px;
top: 16px;
cursor: pointer;
.icon-close {
width: 18px;
height: 18px;
vertical-align: middle;
& svg path {
fill: $green-1;
}
& :hover {
fill: $green-1;
}
}
}
.modal-content {
background: transparent;
}
.modal-header {
justify-content: center;
padding-top: 24px;
padding-bottom: 0px;
background: $green-100;
border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-bottom: none;
h2 {
color: $green-1;
}
.check-container {
width: 64px;
height: 64px;
border-radius: 50%;
background: $green-1;
margin: 0 auto;
margin-bottom: 16px;
}
.check {
width: 35.1px;
height: 28px;
color: $white;
}
}
.modal-body {
padding: 16px 32px 24px 32px;
background: $white;
.modal-body-col {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.btn.btn-primary {
margin-top: 24px;
}
}
.details-block {
background: $gray-700;
border-radius: 4px;
padding: 8px 16px;
margin-top: 16px;
display: inline-flex;
flex-direction: row;
text-align: center;
&.gems {
padding: 12px 16px 12px 20px;
color: $green-10;
font-size: 24px;
font-weight: bold;
line-height: 1.33;
.svg-icon {
margin-right: 8px;
width: 32px;
height: 32px;
}
}
}
.auto-renew {
margin-top: 16px;
color: $orange-10;
font-style: normal;
}
.group-auto-renew {
margin: 12px 20px -8px 20px;
color: $yellow-5;
font-style: normal;
}
.group-billing-date {
width: 269px;
}
}
.modal-footer {
background: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
justify-content: center;
border-top: none;
.small-text {
font-style: normal;
}
}
}
}
#payments-success-modal.modal-hidden-footer .modal-body {
@@ -114,119 +313,123 @@
border-bottom-left-radius: 8px;
}
#payments-success-modal .modal-header {
justify-content: center;
padding-top: 24px;
padding-bottom: 0px;
background: $green-100;
border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-bottom: none;
.demographics {
background-color: $gray-700;
h2 {
color: white;
.label-text {
margin-bottom: 20px;
}
.check-container {
width: 64px;
height: 64px;
border-radius: 50%;
background: #1CA372;
margin: 0 auto;
margin-bottom: 16px;
.group-input {
width: 400px !important;
margin-top: -24px !important;
}
.check {
width: 35.1px;
height: 28px;
color: white;
.btn {
margin-top: 0px;
width: 77px;
margin-bottom: 20px;
}
}
.message {
margin-bottom: 8px;
width: 378px;
display: flex;
flex-direction: column;
#payments-success-modal .modal-body {
padding-top: 16px;
padding-bottom: 24px;
background: white;
.modal-body-col {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.btn.btn-primary {
margin-top: 24px;
}
}
.details-block {
background: $gray-700;
border-radius: 4px;
padding: 8px 24px;
margin-top: 16px;
display: flex;
flex-direction: row;
text-align: center;
&.gems {
padding: 12px 16px 12px 20px;
color: $green-10;
font-size: 24px;
font-weight: bold;
line-height: 1.33;
.svg-icon {
margin-right: 8px;
width: 32px;
height: 32px;
}
}
}
.auto-renew {
margin-top: 16px;
color: $orange-10;
font-style: normal;
}
}
#payments-success-modal .modal-footer {
background: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
justify-content: center;
border-top: none;
.small-text {
font-style: normal;
textarea.form-control {
height: 56px;
margin: 0 24px 24px 24px;
font-size: 0.875rem;
}
}
</style>
<style lang="scss">
@import '~@/assets/scss/mixins.scss';
</style>
<script>
// icons
import checkIcon from '@/assets/svg/check.svg';
import gemIcon from '@/assets/svg/gem.svg';
import closeIcon from '@/assets/svg/close.svg';
// components
import { mapState } from '@/libs/store';
import subscriptionBlocks from '@/../../common/script/content/subscriptionBlocks';
import selectTranslatedArray from '@/components/tasks/modal-controls/selectTranslatedArray';
import lockableLabel from '@/components/tasks/modal-controls/lockableLabel';
// mixins
import notificationsMixin from '@/mixins/notifications';
import paymentsMixin from '@/mixins/payments';
// analytics
import * as Analytics from '@/libs/analytics';
export default {
components: {
selectTranslatedArray,
lockableLabel,
},
mixins: [
paymentsMixin,
notificationsMixin,
],
data () {
return {
icons: Object.freeze({
check: checkIcon,
gem: gemIcon,
close: closeIcon,
}),
paymentData: {},
upgradedGroup: {
name: '',
demographics: null,
},
sendingInProgress: false,
gift: {
message: '',
},
receiverName: {
name: null,
uuid: null,
},
};
},
computed: {
...mapState({ user: 'user.data', group: 'group.data' }),
groupPlanCost () {
const sub = this.paymentData.subscription;
const memberCount = this.paymentData.group.memberCount || 1;
return sub.price + 3 * (memberCount - 1);
},
isFromBalance () {
isGemsBalance () {
return this.paymentData.paymentType === 'gift-gems-balance';
},
isGems () {
return this.paymentData.paymentType === 'gems';
},
isGiftGems () {
return this.paymentData.paymentType === 'gift-gems';
},
isGiftSubscription () {
return this.paymentData.paymentType === 'gift-subscription';
},
isSubscription () {
return this.paymentData.paymentType === 'subscription';
},
isGroupPlan () {
return this.paymentData.paymentType === 'groupPlan';
},
isUpgradedGroup () {
return this.paymentData.paymentType === 'groupPlan' && !this.paymentData.newGroup;
},
isNewGroup () {
return this.paymentData.paymentType === 'groupPlan' && this.paymentData.newGroup;
},
},
mounted () {
this.$root.$on('habitica:payment-success', data => {
@@ -242,7 +445,30 @@ export default {
this.$root.$off('habitica:payments-success');
},
methods: {
async sendMessage () {
this.sendingInProgress = true;
await this.$store.dispatch('members:sendPrivateMessage', {
message: this.gift.message,
toUserId: this.paymentData.gift.uuid || this.paymentData.toUserId,
});
this.close();
},
close () {
this.gift.message = '';
this.sendingInProgress = false;
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
},
submit () {
if (this.paymentData.group && !this.paymentData.newGroup) {
Analytics.track({
hitType: 'event',
eventName: 'group plan upgrade',
eventAction: 'group plan upgrade',
eventCategory: 'behavior',
demographics: this.upgradedGroup.demographics,
type: this.paymentData.group.type,
}, { trackOnClient: true });
}
this.paymentData = {};
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
},
@@ -125,6 +125,10 @@ export default {
type: Object,
default () {},
},
receiverName: {
type: String,
default: '',
},
},
data () {
return {
@@ -135,7 +139,6 @@ export default {
type: 'subscription',
subscription: { key: 'basic_earned' },
},
receiverName: '',
};
},
computed: {
@@ -385,7 +385,6 @@ import EquipmentAttributesGrid from '../inventory/equipment/attributesGrid.vue';
import Item from '@/components/inventory/item';
import Avatar from '@/components/avatar';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import { drops as dropEggs } from '@/../../common/script/content/eggs';
import { drops as dropPotions } from '@/../../common/script/content/hatching-potions';
@@ -438,7 +437,6 @@ export default {
selectedAmountToBuy: 1,
isPinned: false,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -489,6 +487,9 @@ export default {
nonSubscriberHourglasses () {
return (!this.user.purchased.plan.customerId && !this.user.purchased.plan.consecutive.trinkets && this.getPriceClass() === 'hourglasses');
},
endDate () {
return moment(this.item.event.end);
},
},
watch: {
item: function itemChanged () {
@@ -8,16 +8,6 @@
:popover-position="'top'"
@click="itemSelected(item)"
>
<span slot="popoverContent">
<strong v-if="item.key === 'gem' && gemsLeft === 0">{{ $t('maxBuyGems') }}</strong>
<h4 class="popover-content-title">{{ item.text }}</h4>
<div
v-if="item.event"
class="mt-2"
>
{{ limitedString }}
</div>
</span>
<template
slot="itemBadge"
slot-scope="ctx"
@@ -32,11 +22,9 @@
import _filter from 'lodash/filter';
import _sortBy from 'lodash/sortBy';
import _map from 'lodash/map';
import moment from 'moment';
import { mapState } from '@/libs/store';
import pinUtils from '@/mixins/pinUtils';
import planGemLimits from '@/../../common/script/libs/planGemLimits';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import ShopItem from '../shopItem';
import CategoryItem from './categoryItem';
@@ -48,12 +36,6 @@ export default {
},
mixins: [pinUtils],
props: ['hideLocked', 'hidePinned', 'searchBy', 'sortBy', 'category'],
data () {
return {
timer: '',
limitedString: '',
};
},
computed: {
...mapState({
content: 'content',
@@ -106,43 +88,10 @@ export default {
return result;
},
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
beforeDestroy () {
this.cancelAutoUpdate();
},
methods: {
itemSelected (item) {
this.$root.$emit('buyModal::showItem', item);
},
countdownString () {
const diffDuration = moment.duration(moment(seasonalShopConfig.dateRange.end).diff(moment()));
if (diffDuration.asSeconds() <= 0) {
this.limitedString = this.$t('noLongerAvailable');
} else if (diffDuration.days() > 0 || diffDuration.months() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: moment(seasonalShopConfig.dateRange.end).diff(moment(), 'days'),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
};
</script>
@@ -263,8 +263,8 @@
</style>
<script>
import moment from 'moment';
import { mapState } from '@/libs/store';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import svgClock from '@/assets/svg/clock.svg';
import svgClose from '@/assets/svg/close.svg';
@@ -319,7 +319,6 @@ export default {
isPinned: false,
selectedAmountToBuy: 1,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -343,6 +342,9 @@ export default {
if (this.priceType === 'hourglasses') return this.icons.hourglass;
return this.icons.gem;
},
endDate () {
return moment(this.item.event.end);
},
},
watch: {
item: function itemChanged () {
@@ -402,6 +402,8 @@ import _sortBy from 'lodash/sortBy';
import _throttle from 'lodash/throttle';
import _groupBy from 'lodash/groupBy';
import _map from 'lodash/map';
import _each from 'lodash/each';
import * as stopword from 'stopword/dist/stopword.esm.mjs';
import { mapState } from '@/libs/store';
import ShopItem from '../shopItem';
@@ -426,6 +428,51 @@ import SelectTranslatedArray from '@/components/tasks/modal-controls/selectTrans
import QuestPopover from './questPopover';
import { worldStateMixin } from '@/mixins/worldState';
function splitMultipleDelims (text, delims) {
const omniDelim = 'θνι';
let workingText = text;
for (const delim of delims) {
workingText = workingText.replace(new RegExp(delim, 'g'), omniDelim);
}
return workingText.split(omniDelim);
}
function removeStopwordsFromText (text, language) {
// list of supported languages https://www.npmjs.com/package/stopword
const langs = {
bg: stopword.bul,
cs: stopword.ces,
da: stopword.dan,
de: stopword.deu,
en: stopword.eng,
en_GB: stopword.eng,
'en@pirate': stopword.eng.concat(["th'"]),
es: stopword.spa,
es_419: stopword.spa,
fr: stopword.fra,
he: stopword.heb,
hu: stopword.hun,
id: stopword.ind,
it: stopword.ita,
ja: stopword.jpn,
nl: stopword.nld,
pl: stopword.pol,
pt: stopword.por,
pt_BR: stopword.porBr,
ro: stopword.ron,
ru: stopword.rus,
sk: stopword.slv,
// sr: stopword.,
sv: stopword.swe,
tr: stopword.tur,
uk: stopword.ukr,
zh: stopword.zho,
zh_TW: stopword.zho,
};
const splitText = splitMultipleDelims(text, [' ', "'"]);
return stopword.removeStopwords(splitText, langs[language] || stopword.eng).join(' ').toLowerCase();
}
export default {
components: {
QuestPopover,
@@ -539,7 +586,14 @@ export default {
switch (sortBy) { // eslint-disable-line default-case
case 'AZ': {
result = _sortBy(result, ['text']);
if (category.identifier === 'pet' || category.identifier === 'hatchingPotion') {
_each(result, item => {
item.sortText = removeStopwordsFromText(item.text, this.user.preferences.language);
});
result = _sortBy(result, ['sortText']);
} else {
result = _sortBy(result, ['text']);
}
break;
}
@@ -31,6 +31,11 @@
class="svg-icon inline lock"
v-html="icons.lock"
></span>
<span
v-if="item.completed"
class="svg-icon inline check"
v-html="icons.check"
></span>
<span
v-if="item.isSuggested"
class="suggestedDot"
@@ -200,6 +205,15 @@
color: $gray-200;
}
span.svg-icon.inline.check {
height: 16px;
width: 16px;
position: absolute;
left: 4px;
top: 4px;
color: $gray-200;
}
span.badge.badge-round.badge-item.badge-clock {
height: 24px;
width: 24px;
@@ -246,6 +260,7 @@ import svgGem from '@/assets/svg/gem.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgHourglasses from '@/assets/svg/hourglass.svg';
import svgLock from '@/assets/svg/lock.svg';
import svgCheck from '@/assets/svg/check.svg';
import svgClock from '@/assets/svg/clock.svg';
import EquipmentAttributesPopover from '@/components/inventory/equipment/attributesPopover';
@@ -297,6 +312,7 @@ export default {
gems: svgGem,
gold: svgGold,
lock: svgLock,
check: svgCheck,
hourglasses: svgHourglasses,
clock: svgClock,
}),
@@ -350,6 +366,7 @@ export default {
'highlight-border': this.highlightBorder,
suggested: this.item.isSuggested,
locked: this.item.locked,
completed: this.item.completed,
};
},
countdownString () {
+22 -18
View File
@@ -13,25 +13,29 @@
:key="index"
class="faq-question"
>
<h2
v-b-toggle="heading"
role="tab"
variant="info"
@click="handleClick($event)"
<div
v-if="heading !== 'world-boss'"
>
{{ $t(`faqQuestion${index}`) }}
</h2>
<b-collapse
:id="heading"
:visible="isVisible(heading)"
accordion="faq"
role="tabpanel"
>
<div
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
class="card-body"
></div>
</b-collapse>
<h2
v-b-toggle="heading"
role="tab"
variant="info"
@click="handleClick($event)"
>
{{ $t(`faqQuestion${index}`) }}
</h2>
<b-collapse
:id="heading"
:visible="isVisible(heading)"
accordion="faq"
role="tabpanel"
>
<div
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
class="card-body"
></div>
</b-collapse>
</div>
</div>
<hr>
<p v-markdown="$t('webFaqStillNeedHelp')"></p>
+24 -29
View File
@@ -363,7 +363,7 @@
#front {
.form-text a {
color: #fff !important;
color: $white !important;
}
.container-fluid {
@@ -375,30 +375,24 @@
padding-bottom: 5em;
}
.logo {
width: 128px;
height: 28px;
color: purple;
}
.purple-1, .purple-2, .purple-3, .purple-4, h1, h2, h3, h4, h5 {
color: #fff;
color: $white;
}
.purple-1 {
background-color: #6133b4;
background-color: $purple-300;
}
.purple-2 {
background-color: #432874;
background-color: $purple-100;
}
.purple-3 {
background-color: #36205d;
background-color: $purple-50;
}
.purple-4 {
background-color: #271b3d;
background-color: $header-dark-background;
}
p.section-main {
@@ -419,15 +413,15 @@
}
.pixel-horizontal {
color: #6133b4;
color: $purple-300;
}
.pixel-horizontal-2 {
color: #432874;
color: $purple-100;
}
.pixel-horizontal-3 {
color: #271b3d;
color: $header-dark-background;
}
h1, h2, h3, h4, h5, h6, button, .strike > span, input {
@@ -455,13 +449,13 @@
.social-button {
border-radius: 2px;
border: solid 2px #bda8ff;
border: solid 2px $purple-500;
width: 100%;
min-height: 40px;
padding: .5em;
background: transparent;
margin-bottom: .5em;
color: #bda8ff;
color: $purple-500;
transition: .5s;
span {
@@ -471,8 +465,8 @@
.social-button:hover {
cursor: pointer;
border-color: #fff;
color: #fff;
border-color: $white;
color: $white;
}
.social-icon {
@@ -531,8 +525,8 @@
input {
margin-bottom: 1em;
border-radius: 2px;
background-color: #432874;
border-color: #432874;
background-color: $purple-100;
border-color: $purple-100;
color: $purple-400;
border: solid 2px transparent;
transition-timing-function: ease;
@@ -544,17 +538,17 @@
}
.input-valid {
color: #fff;
color: $white;
}
input:focus {
border: solid 2px #9a62ff;
border: solid 2px $purple-400;
color: #fff;
background-color: #36205d;
background-color: $purple-50;
}
input:hover {
background-color: #36205d;
background-color: $purple-50;
}
.sign-up {
@@ -657,7 +651,7 @@
width: 411px;
height: 48px;
border-radius: 2px;
background-color: #9a62ff;
background-color: $purple-400;
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.24), 0 1px 4px 0 rgba(26, 24, 29, 0.16);
margin-bottom: 5em;
}
@@ -674,7 +668,7 @@
cursor: pointer;
&:hover {
background-color: #5d3b9c;
background-color: $purple-50;
box-shadow: 0 4px 4px 0 rgba(26, 24, 29, 0.16), 0 1px 8px 0 rgba(26, 24, 29, 0.12);
}
}
@@ -693,7 +687,7 @@
.svg-icon {
vertical-align: bottom;
color: #d5c8ff;
color: $purple-600;
display: inline-block;
margin-right: 1em;
}
@@ -760,6 +754,7 @@
height: 500px;
width: 100%;
opacity: .5;
pointer-events: none;
}
}
@@ -776,7 +771,7 @@
}
.input-error {
color: #fff;
color: $white;
font-size: 90%;
width: 100%;
margin-bottom: 1em;
@@ -9,6 +9,7 @@
:right="right"
:hide-icon="false"
:inline-dropdown="inlineDropdown"
:placeholder="placeholder"
@select="selectItem($event)"
>
<template v-slot:item="{ item }">
@@ -70,6 +71,9 @@ export default {
type: Boolean,
default: true,
},
placeholder: {
type: String,
},
},
data () {
return {
+4 -4
View File
@@ -1,5 +1,5 @@
<template>
<div class="task-wrapper">
<div class="task-wrapper" draggable>
<div
class="task transition"
:class="[{
@@ -773,9 +773,9 @@
}
.check.svg-icon {
width: 12.3px;
height: 9.8px;
margin: 9px 8px;
width: 16px;
height: 16px;
margin: 5px;
}
.challenge.broken {
@@ -1,105 +1,308 @@
<template>
<div class="row">
<div class="col-6">
<h1>{{ $t('gemTransactions') }}</h1>
<span v-if="gemTransactions.length === 0">{{ $t('noGemTransactions') }}</span>
<table class="table">
<tr
v-for="entry in gemTransactions"
:key="entry.createdAt"
<div>
<div class="clearfix">
<div class="mb-4 float-left">
<button
class="page-header btn-flat tab-button textCondensed"
:class="{'active': selectedTab === 'gems'}"
@click="selectTab('gems')"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons.gem"
></span>
<span
class="amount gems"
:class="entry.amount < 0 ? 'deducted' : 'added'"
>{{ entry.amount * 4 }}</span>
</td>
<td>
<span>{{ transactionTypeText(entry.transactionType) }}</span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
</div>
<div class="col-6">
<h1>{{ $t('hourglassTransactions') }}</h1>
<span v-if="hourglassTransactions.length === 0">{{ $t('noHourglassTransactions') }}</span>
<table class="table">
<tr
v-for="entry in hourglassTransactions"
:key="entry.createdAt"
{{ $t('gems') }}
</button>
<button
class="page-header btn-flat tab-button textCondensed"
:class="{'active': selectedTab === 'hourglass'}"
@click="selectTab('hourglass')"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons.hourglass"
></span>
<span
class="amount hourglasses"
:class="entry.amount < 0 ? 'deducted' : 'added'"
>{{ entry.amount }}</span>
</td>
<td>
<span>{{ transactionTypeText(entry.transactionType) }}</span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
{{ $t('mysticHourglass', { amount: ''}) }}
</button>
</div>
</div>
<div class="row">
<div class="col-12" v-if="selectedTab === 'gems'">
<span v-if="gemTransactions.length === 0">
{{ $t('noGemTransactions') }}
</span>
<table class="table">
<tr>
<th v-once class="timestamp-column">
{{ $t('timestamp')}}
</th>
<th v-once class="amount-column">
{{ $t('amount')}}
</th>
<th v-once class="action-column">
{{ $t('action')}}
</th>
<th v-once class="note-column">
{{ $t('note')}}
</th>
</tr>
<tr
v-for="entry in gemTransactions"
:key="entry.createdAt"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<div class="amount-with-icon" :id="entry.id">
<span
class="svg-icon inline icon-16 my-1"
aria-hidden="true"
v-html="entry.amount < 0 ? icons.gemRed : icons.gem"
></span>
<span
class="amount gems"
:class="entry.amount | addedDeducted"
>{{ entry.amount * 4 }}</span>
</div>
<b-popover
v-if="typeof entry.currentAmount !== 'undefined'"
ref="popover"
:target="entry.id"
triggers="hover focus click"
placement="bottom"
>
<div class="remaining-amount-popover-content">
{{ $t('remainingBalance') }}:
<span
class="svg-icon inline icon-16 ml-1"
aria-hidden="true"
v-html="icons.gem"
></span>
<span
class="amount gems"
>{{ entry.currentAmount * 4 }}</span>
</div>
</b-popover>
</td>
<td class="entry-action">
<span v-html="transactionTypeText(entry.transactionType)"></span>
</td>
<td>
<span v-if="transactionTypes.gifted.includes(entry.transactionType)">
<router-link
class="user-link"
:to="{'name': 'userProfile', 'params': {'userId': entry.reference}}"
>
@{{ entry.referenceText }}
</router-link>
</span>
<span v-else-if="transactionTypes.challenges.includes(entry.transactionType)">
<router-link
class="challenge-link"
:to="{ name: 'challenge', params: { challengeId: entry.reference } }">
<span
v-markdown="entry.referenceText"
></span>
</router-link>
</span>
<span v-else v-html="entryReferenceText(entry)"></span>
<span v-if="entry.reference">
({{entry.reference}})
</span>
</td>
</tr>
</table>
</div>
<div class="col-12" v-if="selectedTab === 'hourglass'">
<span v-if="hourglassTransactions.length === 0">
{{ $t('noHourglassTransactions') }}
</span>
<table class="table">
<tr>
<th v-once class="timestamp-column">
{{ $t('timestamp')}}
</th>
<th v-once class="amount-column">
{{ $t('amount')}}
</th>
<th v-once class="action-column">
{{ $t('action')}}
</th>
<th v-once class="note-column">
{{ $t('note')}}
</th>
</tr>
<tr
v-for="entry in hourglassTransactions"
:key="entry.createdAt"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<div class="amount-with-icon" :id="entry.id">
<span
class="svg-icon inline icon-16 my-1"
aria-hidden="true"
v-html="entry.amount < 0 ? icons.hourglassRed : icons.hourglass"
></span>
<span
class="amount hourglasses"
:class="entry.amount | addedDeducted"
>{{ entry.amount }}</span>
</div>
<b-popover
v-if="typeof entry.currentAmount !== 'undefined'"
ref="popover"
:target="entry.id"
triggers="hover focus click"
placement="bottom"
>
<div class="remaining-amount-popover-content">
{{ $t('remainingBalance') }}:
<span
class="svg-icon inline icon-16 ml-1"
aria-hidden="true"
v-html="icons.hourglass"
></span>
<span
class="amount gems"
>{{ entry.currentAmount }}</span>
</div>
</b-popover>
</td>
<td class="entry-action">
<span v-html="transactionTypeText(entry.transactionType)"></span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
</div>
</div>
</div>
</template>
<style lang="scss">
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
.page-header.btn-flat {
background: transparent;
}
.tab-button {
height: 2rem;
font-size: 24px;
font-weight: bold;
font-stretch: condensed;
line-height: 1.33;
letter-spacing: normal;
color: $gray-10;
margin-right: 1.125rem;
padding-left: 0;
padding-right: 0;
padding-bottom: 2.5rem;
&.active, &:hover {
color: $purple-300;
box-shadow: 0px -0.25rem 0px $purple-300 inset;
outline: none;
}
}
.amount-column {
white-space: nowrap;
}
.svg-icon {
vertical-align: middle;
}
.amount {
font-weight: bold;
font-size: 1.1rem;
margin-left: 4px;
}
.added::before {
content: "+";
}
.gems {
color: $gems-color;
color: $green-10;
&.deducted {
color: $red-10;
color: $maroon-50;
}
}
.hourglasses {
font-weight: bold;
color: $hourglass-color;
color: $green-10;
&.deducted {
color: $red-10;
color: $maroon-50;
}
}
.amount-with-icon {
display: inline-flex;
}
.remaining-amount-popover-content {
display: flex;
font-size: 12px;
line-height: 1.33;
color: $white;
}
table {
line-height: 1.71;
color: $gray-50;
}
th {
border-top: 0 !important;
padding: 0.25rem 0.5rem !important;
font-weight: bold;
line-height: 1.71;
color: $gray-50;
}
td {
padding-left: 0.5rem !important;
padding-right: 0.5rem !important;
line-height: 1.71;
color: $gray-50;
}
th, td {
padding-top: 0.35rem !important;
padding-bottom: 0.35rem !important;
}
.timestamp-column, .action-column {
width: 20%;
}
.amount-column {
width: 10%;
}
.note-column {
width: 50%;
}
.challenge-link, .user-link {
color: $blue-10 !important;
}
.entry-action {
b {
text-transform: uppercase;
}
}
</style>
@@ -107,9 +310,15 @@
<script>
import moment from 'moment';
import svgGem from '@/assets/svg/gem.svg';
import svgGemRed from '@/assets/svg/gem-red.svg';
import svgHourglass from '@/assets/svg/hourglass.svg';
import svgHourglassRed from '@/assets/svg/hourglass-red.svg';
import markdownDirective from '@/directives/markdown';
export default {
directives: {
markdown: markdownDirective,
},
filters: {
timeAgo (value) {
return moment(value).fromNow();
@@ -118,6 +327,13 @@ export default {
// @TODO: Vue doesn't support this so we cant user preference
return moment(value).toDate().toString();
},
addedDeducted (amount) {
if (amount === 0) {
return '';
}
return amount < 0 ? 'deducted' : 'added';
},
},
props: {
gemTransactions: {
@@ -133,11 +349,21 @@ export default {
return {
icons: Object.freeze({
gem: svgGem,
gemRed: svgGemRed,
hourglass: svgHourglass,
hourglassRed: svgHourglassRed,
}),
selectedTab: 'gems',
transactionTypes: Object.freeze({
gifted: ['gift_send', 'gift_receive'],
challenges: ['create_challenge', 'create_bank_challenge'],
}),
};
},
methods: {
selectTab (type) {
this.selectedTab = type;
},
entryReferenceText (entry) {
if (entry.reference === undefined && entry.referenceText === undefined) {
return '';
@@ -12,7 +12,7 @@
<template v-slot:button-content>
<slot
name="item"
:item="selected"
:item="selected || placeholder"
:button="true"
>
<!-- Fallback content -->
@@ -114,6 +114,9 @@ export default {
type: Boolean,
default: true,
},
placeholder: {
type: String,
},
},
data () {
return {
@@ -1028,9 +1028,10 @@ export default {
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
},
adminBlockUser () {
this.hero.auth.blocked = true;
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
if (window.confirm('Ban user and auto-hide all posts?')) {
this.hero.auth.blocked = true;
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
}
},
adminUnblockUser () {
this.hero.auth.blocked = false;
-40
View File
@@ -34,44 +34,4 @@ export default [
type: 'Staff',
uuid: 'f4e5c6da-0617-48bf-b3bd-9f97636774a8',
},
{
name: 'Alys',
type: 'Moderator',
uuid: 'd904bd62-da08-416b-a816-ba797c9ee265',
},
{
name: 'Cantras',
type: 'Moderator',
uuid: '28771972-ca6d-4c03-8261-e1734aa7d21d',
},
{
name: 'deilann',
type: 'Moderator',
uuid: 'e7b5d1e2-3b6e-4192-b867-8bafdb03eeec',
},
{
name: 'Dewines',
type: 'Moderator',
uuid: '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc',
},
{
name: 'Fox_town',
type: 'Moderator',
uuid: 'a05f0152-d66b-4ef1-93ac-4adb195d0031',
},
{
name: 'MaybeSteveRogers',
type: 'Moderator',
uuid: '767e5d92-0e13-4e30-acb1-d8bba62824fc',
},
{
name: 'Nakonana',
type: 'Moderator',
uuid: '33bb14bd-814d-40cb-98a4-7b76a752761c',
},
{
name: 'shanaqui',
type: 'Moderator',
uuid: 'bb089388-28ae-4e42-a8fa-f0c2bfb6f779',
},
];
+12
View File
@@ -39,6 +39,13 @@ export default {
return moment(this.user.purchased.plan.dateTerminated)
.format(this.user.preferences.dateFormat.toUpperCase());
},
renewalDate () {
const renewalDate = moment().add(1, 'months');
if (!this.user.preferences || !this.user.preferences.dateFormat) {
return renewalDate;
}
return renewalDate.format(this.user.preferences.dateFormat.toUpperCase());
},
},
methods: {
encodeGift (uuid, gift) {
@@ -140,6 +147,7 @@ export default {
if (data.subscription) postData.sub = sub.key;
if (data.coupon) postData.coupon = data.coupon;
if (data.groupId) postData.groupId = data.groupId;
if (data.demographics) postData.demographics = data.demographics;
const response = await axios.post(url, postData);
@@ -267,6 +275,10 @@ export default {
this.amazonPayments.groupToCreate = data.groupToCreate;
}
if (data.demographics) { // sending demographics
this.amazonPayments.demographics = data.demographics;
}
this.amazonPayments.gift = data.gift;
this.amazonPayments.type = data.type;
},
+21 -18
View File
@@ -21,10 +21,10 @@
"foundNewItemsExplanation": "القيام بمهامك يمنحك الفرصة للفوز بقطع جديدة مثل البيضات، جرعات التفقيس، وطعام الحيوانات الأليفة.",
"onboardingProgress": "التقدم <%= percentage %>%",
"achievementCreatedTask": "إصنع مهمتك الأولى",
"achievementJustAddWaterModalText": "لقد أكملت جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة!",
"achievementJustAddWaterText": "قد أكمل جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة.",
"achievementMindOverMatterModalText": "لقد أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة!",
"achievementMindOverMatterText": "قد أكمل جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة.",
"achievementJustAddWaterModalText": "أكملت جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة!",
"achievementJustAddWaterText": "أكملت جميع مغامرات حيوانات: الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين.",
"achievementMindOverMatterModalText": "أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة!",
"achievementMindOverMatterText": "أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة.",
"achievementLostMasterclasserModalText": "لقد أكملت جميع المغامرات الستة عشرة في سلسلة مغامرات الخبير و حللت لغز الخبيرة المفقودة!",
"achievementMonsterMagusModalText": "لقد جمعت جميع الحيوانات الأليفة من الأموات الأحياء!",
"achievementMonsterMagusText": "قد جمع جميع الحيوانات الأليفة من الأموات الأحياء.",
@@ -37,7 +37,7 @@
"achievementBackToBasicsModalText": "لقد جمعت جميع الحيوانات الأليفة الأساسية!",
"achievementBackToBasicsText": "قد جمع جميع الحيوانات الأليفة الأساسية.",
"achievementBackToBasics": "عودة إلى الأساسيات",
"achievementJustAddWater": "أضف الماء وحسب",
"achievementJustAddWater": "أضف الماء فقط",
"achievementMindOverMatter": "العقل فوق المادة",
"achievementFedPet": "أطعم/ي حيواناً أليفاً",
"achievementHatchedPetModalText": "إذهب/ي إلى قائمة أغراضك وحاول/ي جمع بيضة وجرعة تفقيس معاً",
@@ -49,8 +49,8 @@
"achievementAridAuthorityModalText": "لقد أكملت ترويض جميع حيوانات الركوب الصحراوية!",
"achievementAridAuthorityText": "أكملوا ترويض جميع حيوانات الركوب الصحراوية.",
"achievementPartyUp": "لقد كونت فريقاً مع عضو من مجموعتك!",
"achievementAllYourBaseModalText": "لقد أكملت ترويض جميع حيوانات الركوب الأساسية!",
"achievementAllYourBaseText": "أكمل(ت) ترويض جميع حيوانات الركوب الأساسية.",
"achievementAllYourBaseModalText": "أكملت ترويض جميع حيوانات الركوب الأساسية!",
"achievementAllYourBaseText": "أكملت ترويض جميع حيوانات الركوب الأساسية.",
"achievementAllYourBase": "كل قاعدتك ملكنا الأن",
"achievementFedPetText": "أطعموا حيوانهم الأليف الأول.",
"achievementBugBonanza": "حفلة الحشرات",
@@ -118,22 +118,25 @@
"achievementDomesticatedModalText": "لقد جمعت كل الحيوانات الأليفة المستأنسة!",
"achievementDomesticatedText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة المستأنسة: النمس ، وخنزير غينيا ، والديك ، والخنزير الطائر ، والجرذ ، والأرنب ، والحصان ، والبقر!",
"achievementDomesticated": "ا-يا-ا-يا-يو",
"achievementBirdsOfAFeatherModalText": قوم بجمع كل الحيوانات الأليفة الطائرة!",
"achievementBirdsOfAFeatherModalText": "لقد قمت بجمع كل الحيوانات الأليفة الطائرة!",
"achievementZodiacZookeeperText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة في الأبراج: الجرذ ، البقرة ، الأرنب ، الأفعى ، الحصان ، الأغنام ، القرد ، الديك ، الذئب ، النمر ، الخنزير الطائر ، والتنين!",
"achievementGroupsBeta2022ModalText": "لقد ساعدت أنت ومجموعاتك Habitica من خلال الاختبار وتقديم التعليقات!",
"achievementGroupsBeta2022": "اختبار تجريبي تفاعلي",
"achievementGroupsBeta2022Text": "قدمت أنت ومجموعتك تعليقات لا تقدر بثمن لمساعدة Habitica في الاختبار.",
"achievementReptacularRumble": "الدمدمة الزاحفة",
"achievementReptacularRumbleModalText": "لقد جمعت كل الزواحف الأليفة!",
"achievementReptacularRumbleText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الزواحف: التمساح ، الزاحف المجنح ، الأفعى ، ترايسيراتوبس ، السلحفاة ، التيرانوصور ريكس ، وفيلوسيرابتور!",
"achievementBirdsOfAFeather": "متشابهون",
"achievementReptacularRumbleText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الزواحف: التمساح، الزاحف المجنح، الأفعى، ترايسيراتوبس، السلحفاة، التيرانوصور ريكس وفيلوسيرابتور!",
"achievementBirdsOfAFeather": "أصدقاء الطيران",
"achievementZodiacZookeeper": "حارس حديقة الحيوانات الفلكية",
"achievementShadyCustomerText": "لقد جمع كل حيوانات الظل الأليفة.",
"achievementShadyCustomerModalText": "لقد قمت بتجميع كل حيوانات الظل الأليفة!",
"achievementZodiacZookeeperModalText": "لقد قمت بتجميع كل الحيوانات الفلكية الأليفة!",
"achievementBirdsOfAFeatherText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الطائرة: الخنزير الطائر ، البومة ، الببغاء ، الزاحف المجنح ، الجريفون ، فالكون ، الطاووس ، والديك!",
"achievementShadeOfItAllModalText": "لقد قمت بترويض كل حيوانات الظل للركوب!",
"achievementShadyCustomer": "زبون الظل",
"achievementShadeOfItAll": "ظل كل شيء",
"achievementShadeOfItAllText": "لقد ربي كل حيوانات الظل للترويض."
"achievementShadyCustomerText": "جمع كل حيوانات الظل الأليفة.",
"achievementShadyCustomerModalText": "لقد جمعت كل حيوانات الظل الأليفة!",
"achievementZodiacZookeeperModalText": "لقد جمعت كل الحيوانات الأليفة الفلكية!",
"achievementBirdsOfAFeatherText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الطائرة: الخنزير الطائر، البومة، الببغاء، الزاحف المجنح، الجرايفون، فالكون، الطاووس والديك!",
"achievementShadeOfItAllModalText": "قمت بترويض كل الحيوانات السوداء",
"achievementShadyCustomer": "عميل الظل",
"achievementShadeOfItAll": "الظل فوق كل شيء",
"achievementShadeOfItAllText": "روض كل حيوانات الظل السوداء.",
"achievementWoodlandWizard": "ساحر الغابة",
"achievementWoodlandWizardText": "لقد فقس جميع الألوان القياسية لمخلوقات الغابة: الغرير، الدب، الغزال، الثعلب، الضفدع، القنفذ، البومة، الأفعى، السنجاب والشجيرة!",
"achievementWoodlandWizardModalText": "لقد جمعت كل حيوانات الغابة الأليفة!"
}
+31 -1
View File
@@ -306,5 +306,35 @@
"foodSaddleText": "سرج",
"foodSaddleNotes": "يحول حيوانًا أليفًا إلى مركب فورًا.",
"foodSaddleSellWarningNote": "Hey! This is a pretty useful item! Are you familiar with how to use a Saddle with your Pets?",
"foodNotes": "إطعام أحد الحيوانات الأليفة بهذا يمكنه من النمو ليصبح مركبًا قويًا."
"foodNotes": "إطعام أحد الحيوانات الأليفة بهذا يمكنه من النمو ليصبح مركبًا قويًا.",
"hatchingPotionBronze": "البرونز",
"hatchingPotionWatery": "المائي",
"hatchingPotionPolkaDot": "نقاط البولكا",
"hatchingPotionBlackPearl": "اللؤلؤ الأسود",
"hatchingPotionAutumnLeaf": "ورقة الخريف",
"hatchingPotionVampire": "مصاص الدماء",
"hatchingPotionDessert": "حلويات",
"hatchingPotionVeggie": "حديقة",
"questEggRobotAdjective": "مستقبلي",
"hatchingPotionFluorite": "الفلوريت",
"questEggRobotText": "حيوان الروبوت الأليف",
"questEggDolphinMountText": "حيوان الدولفين للركوب",
"hatchingPotionSolarSystem": "المجموعة الشمسية",
"hatchingPotionMoonglow": "لمعان القمر",
"questEggRobotMountText": "حيوان الروبوت للركوب",
"hatchingPotionAmber": "العنبر",
"hatchingPotionAurora": "الشفق القطبي",
"hatchingPotionSandSculpture": "تمثال رملي",
"hatchingPotionStainedGlass": "الزجاج الملون",
"questEggDolphinText": "حيوان الدولفين الأليف",
"hatchingPotionSunset": "غروب الشمس",
"hatchingPotionShadow": "الظل",
"hatchingPotionSilver": "الفضي",
"hatchingPotionTurquoise": "التيركواز",
"hatchingPotionSunshine": "شعاع الشمس",
"hatchingPotionVirtualPet": "حيوان افتراضي أليف",
"hatchingPotionWindup": "الزنبرك",
"hatchingPotionPorcelain": "الخزف الملون",
"hatchingPotionBirchBark": "لحاء الشجر",
"hatchingPotionRuby": "الياقوت"
}
+42 -5
View File
@@ -2,8 +2,8 @@
"defaultHabit1Text": "عمل منتج (اضغط على القلم للتحرير)",
"defaultHabit2Text": "أكل طعام غير صحى (أنقر على القلم للتعديل)",
"defaultHabit3Text": "صعود السلم/استخدام المصعد (اضغط على قلم الرصاص للتعديل)",
"defaultHabit4Text": "Add a task to Habitica",
"defaultHabit4Notes": "Either a Habit, a Daily, or a To-Do",
"defaultHabit4Text": "أضف مهمة إلى Habitica",
"defaultHabit4Notes": "إما عادة أو يومية أو مهمة",
"defaultTodo1Text": "الانضمام إلى Habitica (عَلِّم عليَّ)",
"defaultTodoNotes": "بإمكانك أن تكمل هذه المهمة، تعدلها، أو تحذفها.",
"defaultReward1Text": "15 دقيقة استراحة",
@@ -11,9 +11,46 @@
"defaultReward2Notes": "شاهد التلفاز، إلعب لعبة، كل حلوى، الأمر يعود لك!",
"defaultTag1": "عمل",
"defaultTag2": "تمرين",
"defaultTag3": "Health + Wellness",
"defaultTag3": "الصحة + الراحة",
"defaultTag4": "مدرسة",
"defaultTag5": "فرق",
"defaultTag6": "Chores",
"defaultTag7": "الإبداع"
"defaultTag6": "عمل منزلي",
"defaultTag7": "إبداع",
"workTodoProject": "مشروع العمل >> إكمال مشروع العمل",
"workDailyImportantTask": "أهم مهمة >> عملت على أهم مهمة اليوم",
"workHabitMail": "معالجة البريد الإلكتروني",
"workDailyImportantTaskNotes": "انقر لتحديد أهم مهمة لديك",
"workTodoProjectNotes": "انقر لتحديد اسم مشروعك الحالي + تعيين تاريخ الاستحقاق!",
"exerciseDailyText": "التمدد (ستريتش) >> روتين التمرين اليومي",
"healthDailyNotes": "انقر للتعديل!",
"exerciseTodoText": "إعداد جدول التمرين",
"healthTodoNotes": "انقر لإضافة قائمة مراجعة!",
"creativityDailyText": "العمل على مشروع إبداعي",
"schoolDailyNotes": "انقر لاختيار جدول الواجبات المنزلية!",
"creativityDailyNotes": "انقر لتسمية مشروعك الحالي + تحديد جدول المواعيد!",
"selfCareDailyText": "5 دقائق للتنفس بهدوء",
"creativityTodoText": "إنهاء مشروع إبداعي",
"selfCareDailyNotes": "انقر لاختيار الجدول!",
"selfCareTodoNotes": "انقر لتحديد خطة العمل!",
"defaultHabitText": "انقر هنا لتحديد أن هذه العادة سلبية، وتريد أن تقلع عنها",
"defaultHabitNotes": "أو قم بالحذف من نافذة التعديل",
"choresDailyNotes": "انقر لاختيار جدولك!",
"creativityHabit": "احترف المهارة >> + مارس تقنية إبداعية جديدة",
"exerciseHabit": "10 دقائق كارديو >> + 10 دقائق كارديو",
"healthTodoText": "حدد موعداً للمراجعة >> تفكر في تغيير صحي",
"schoolHabit": "دراسة / مماطلة",
"selfCareHabit": "خذ استراحة قصيرة",
"exerciseTodoNotes": "انقر لإضافة قائمة تدقيق!",
"choresHabit": "10 دقائق تنظيف",
"schoolTodoText": "إنهاء واجب دراسي",
"healthHabit": "غذاء صحي/ غذاء غير صحي",
"choresTodoText": "ترتيب الخزانة >> ترتيب الفوضى",
"choresTodoNotes": "انقر لتحديد منطقة الفوضى!",
"exerciseDailyNotes": "انقر لاختيار الجدول وتحديد التمارين!",
"schoolTodoNotes": "انقر لتسمية الواجب المنزلي وتحديد وقت الانتهاء!",
"creativityTodoNotes": "انقر لتسمية مشروعك",
"selfCareTodoText": "شارك في فعالية ممتعة",
"healthDailyText": "خيط الأسنان",
"schoolDailyText": "إنهاء واجبات منزلية",
"choresDailyText": "غسيل الصحون"
}
+147 -13
View File
@@ -4,12 +4,12 @@
"forgotPassword": "هل نسيت كلمة المرور؟",
"logout": "تسجيل الخروج",
"footerMobile": "هاتف",
"companyDonate": "تبرع",
"companyDonate": "تبرع لصالح Habitica",
"login": "تسجيل الدخول",
"companyBlog": "مقالات",
"communityInstagram": "Instagram",
"guidanceForBlacksmiths": "إرشادات للحدادين (المبرمجين)",
"companyContribute": "ساهم",
"companyContribute": "ساهم في تطوير Habitica",
"marketing1Header": "حسن عاداتك من خلال اللعب",
"footerCompany": "الشركة",
"companyAbout": "كيف يعمل",
@@ -20,31 +20,165 @@
"emailNewPass": "إرسال رابط إعادة تعيين كلمة المرور الى البريد الإلكتروني",
"footerSocial": "منصات التواصل الاجتماعي",
"free": "الإنضمام مجاناً",
"marketing1Lead1": "Habitica هي لعبة تساعدك على تحسين عادات الحياة الواقعية. إنها \"تحاكي\" حياتك عن طريق تحويل كل مهامك (العادات ، الأعمال اليومية ، المهام) إلى وحوش صغيرة عليك التغلب عليها. كلما كنت أفضل في هذا ، كلما تقدمت في اللعبة. إذا تعثرت في الحياة ، تبدأ شخصيتك بالتراجع في اللعبة.",
"marketing1Lead1": "Habitica هي لعبة تساعدك على تحسين عادات الحياة الواقعية. إنها \"تحاكي\" حياتك عن طريق تحويل كل مهامك (العادات، الأعمال اليومية، المهام) إلى وحوش صغيرة عليك التغلب عليها. كلما كنت أفضل في هذا، كلما تقدمت في اللعبة. إذا تعثرت في الحياة، تبدأ شخصيتك بالتراجع في اللعبة.",
"termsAndAgreement": "بالنقر على الزر ادناه، فإنك تشير الى كونك قد قرأت ووافقت على <a href='/static/terms'>شروط الخدمة</a> و <a href='/static/privacy'>سياسة الخصوصية</a>.",
"clearBrowserData": "حذف بيانات المتصفح",
"communityExtensions": "<a href='https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>الإضافات</a>",
"forgotPasswordSteps": "أدخل عنوان البريد الإلكتروني الذي استخدمته لتسجيل حسابك في Habitica.",
"pkQuestion1": "ما الذي ألهم Habitica؟ كيف بدأ؟",
"mobileAndroid": "Android",
"communityExtensions": "الإضافات والتطويرات",
"forgotPasswordSteps": "أدخل اسم المستخدم أو عنوان البريد الإلكتروني الخاص بك لتسجيل حسابك في Habitica.",
"pkQuestion1": "ما الذي ألهم Habitica؟ كيف بدأت؟",
"mobileAndroid": "تطبيق آندرويد",
"playButton": "العب",
"playButtonFull": "دخول Habitica",
"password": "كلمة المرور",
"newsArchive": "أرشيف الأخبار في ويكيا (متعدد اللغات)",
"marketing4Lead3-1": "تريد تحويل حياتك الى لعبة؟",
"marketing4Lead3-1": "هل تريد إدخال نظام اللعب لتطوير حياتك؟",
"marketing2Lead3Title": "تحدوا بعضكم",
"marketing2Lead2Title": "حارب الوحوش",
"marketing4Lead3-2": "مهتم بإدارة مجموعة في التعليم، الصحة، وغير ذلك؟",
"mobileIOS": "iOS",
"mobileIOS": "تطبيق آيفون",
"marketing1Lead1Title": "حياتك، لعبة تقمص الأدوار",
"marketing3Header": "التطبيقات والإضافات",
"marketing2Lead1Title": "الإنتاجية الاجتماعية",
"marketing4Lead2": "تكاليف الرعاية الصحية في إزدياد، ويجب فعل شيء ما. تم إنشاء مئات البرامج لتقليل التكاليف وتحسين الصحة. نعتقد أن Habitica قادر على تمهيد طريق حقيقي نحو أنماط حياة صحية.",
"marketing4Lead2": "تكاليف الرعاية الصحية في ازدياد، ويجب فعل شيء ما. تم إنشاء مئات البرامج لتقليل التكاليف وتحسين الصحة. نعتقد أن Habitica قادرة على تمهيد طريق حقيقي نحو أنماط حياة صحية.",
"oldNews": "أخبار",
"setNewPass": "تعيين كلمة مرور جديدة",
"presskitText": "شكراً لاهتمامك ب Habitica! يمكن استخدام الصور التالية للمقالات أو مقاطع الفيديو حول Habitica. لمزيد من المعلومات، يرجى التواصل معنا على <٪ = pressEnquiryEmail٪>.",
"presskitText": "شكراً لاهتمامك ب Habitica! يمكن استخدام الصور التالية للمقالات أو مقاطع الفيديو حول Habitica. لمزيد من المعلومات، يرجى التواصل معنا على <٪ = pressEnquiryEmail٪>.",
"invalidEmail": "إجراء إعادة تعيين كلمة المرور يتطلب عنوان بريد الكتروني صالح.",
"marketing1Lead2": "حسن عاداتك لبناء صورتك الرمزية، تباهى بالعتاد الذي كسبته!",
"marketing2Lead2": "ما هي لعبة تقمص الأدوار من دون معارك؟ حارب الوحوش مع فريقك. الوحوش هي \"super accountability mode\" - اليوم الذي تتغيب فيه عن النادي الرياضي هو يوم يؤذي فيه الوحش * الجميع! *",
"marketing3Lead1": "تتيح لك تطبيقات ** الايفون و الاندرويد ** الاعتناء بالأعمال أثناء التنقل. نحن ندرك أن تسجيل الدخول إلى موقع الويب للنقر على الأزرار يمكن أن يشكل عائق."
"marketing2Lead2": "ما هي لعبة تقمص الأدوار من دون معارك؟ حارب الوحوش مع فريقك. الوحوش هي \"super accountability mode\" - اليوم الذي تتغيب فيه عن النادي الرياضي هو يوم يؤذي فيه الوحش *الجميع!*",
"marketing3Lead1": "تتيح لك تطبيقات **الآيفون والآندرويد** الاعتناء بالأعمال أثناء التنقل. نحن ندرك أن تسجيل الدخول إلى موقع الويب والنقر على الأزرار يمكن أن يشكل عائقاً.",
"chores": "الواجبات المنزلية",
"footerProduct": "منتج",
"marketing2Header": "تنافس مع الأصدقاء، وانضم إلى مجموعات من اهتماماتك",
"presskit": "العدة الصحفية",
"pkAnswer1": "إذا كنت قد استثمرت وقتاً في تحسين مستوى شخصية ما في لعبة ما، فمن الصعب ألا تتساءل عن مدى روعة حياتك إذا بذلت كل هذا الجهد لتحسين نفسك في الحياة الواقعية بدلاً من الصورة الرمزية الخاصة بك. بدأنا في بناء Habitica لمعالجة هذا السؤال. <br /> تم إطلاق Habitica رسمياً مع Kickstarter في عام 2013، وبدأت الفكرة حقاً. منذ ذلك الحين، نمت لتصبح مشروعاً ضخماً، مدعوماً من قبل متطوعينا الرائعين في دعم المصدر المفتوح ومستخدمينا الكرماء.",
"pkAnswer3": "يعد الضغط الاجتماعي عاملاً محفزاً كبيراً لكثير من الناس، لذلك عرفنا أننا نريد أن يكون لدينا مجتمع قوي يحاسب بعضنا البعض على أهدافهم ويشجع نجاحاتهم. لحسن الحظ، فإن أحد الأشياء التي تقوم بها ألعاب الفيديو متعددة اللاعبين هو تعزيز الشعور بالانتماء للمجتمع بين مستخدميها! يستعير هيكل مجتمع Habitica من هذه الأنواع من الألعاب؛ يمكنك تكوين مجموعة صغيرة من الأصدقاء المقربين، ولكن يمكنك أيضاً الانضمام إلى مجموعات مصالح مشتركة أكبر تُعرف باسم النقابة. على الرغم من أن بعض المستخدمين يختارون اللعب منفردين، فإن معظمهم يقررون تشكيل شبكة دعم تشجع المساءلة الاجتماعية من خلال ميزات مثل المهام، حيث يقوم أعضاء الحزب بتجميع إنتاجيتهم لمحاربة الوحوش معاً.",
"pkQuestion2": "لماذا تعمل Habitica؟",
"marketing1Lead3Title": "ابحث عن جوائز عشوائية",
"marketing3Lead2Title": "الإدراجات",
"marketing2Lead3": "تتيح لك التحديات التنافس مع الأصدقاء والغرباء. كل من يفعل الأفضل في نهاية التحدي يفوز بجوائز خاصة.",
"pkQuestion3": "لماذا أضفت ميزات اجتماعية؟",
"marketing1Lead3": "بالنسبة للبعض، فإن المغامرة التي تحفزهم: نظام يسمى \"المكافآت العشوائية\". تستوعب Habitica جميع أنماط التشجيع والعقاب: الإيجابية والسلبية والمتوقعة والعشوائية.",
"marketing2Lead1": "بينما يمكنك لعب Habitica منفرداً، فإن الأضواء تضيء حقاً عندما تبدأ في التعاون والمنافسة وتحميل بعضكم المسؤولية. الجزء الأكثر فعالية في أي برنامج لتحسين الذات هو تحمل المسؤولية الاجتماعية، وهل هناك بيئة للمساءلة والمنافسة أفضل من لعبة فيديو؟",
"marketing3Lead2": "**أدوات الطرف الثالث الأخرى** تربط Habitica بجوانب مختلفة من حياتك. توفر واجهة برمجة التطبيقات الخاصة بنا تكاملاً سهلاً لأشياء مثل [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US)، التي تفقدك نقاطاً عند تصفح مواقع الويب غير المنتجة، وتكسبك نقاطاً عندما تكون المواقع منتجة. [شاهد المزيد هنا](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).",
"pkAnswer2": "إن تكوين عادة جديدة أمر صعب لأن الناس يحتاجون حقاً إلى تلك المكافأة الفورية الواضحة. على سبيل المثال، من الصعب البدء في تنظيف الأسنان بالخيط، لأنه على الرغم من أن طبيب الأسنان لدينا يخبرنا أنه أكثر صحة على المدى الطويل، إلا أنه في الوقت الحالي يتسبب في إصابة لثتك. <br /> يضيف أسلوب اللعب في Habitica إحساساً بالإشباع الفوري للأهداف اليومية من خلال مكافأة مهمة صعبة وإعطائك الخبرة، والذهب ... وربما حتى جائزة عشوائية، مثل بيضة التنين! يساعد هذا في الحفاظ على تحفيز الأشخاص حتى عندما لا يكون للمهمة نفسها مكافأة جوهرية، وقد رأينا أشخاصاً يغيرون حياتهم نتيجة لذلك. يمكنك التحقق من قصص النجاح هنا: https://habitversary.tumblr.com",
"marketing1Lead2Title": "احصل على معدات رائعة",
"enterHabitica": "ادخل Habitica",
"pkQuestion6": "من هو مستخدم Habitica التقليدي؟",
"pkQuestion8": "كيف أثرت Habitica على حياة الناس الحقيقية؟",
"pkLogo": "شعارات",
"register": "تسجيل",
"teams": "مجموعات",
"terms": "الأحكام والشروط",
"reportAccountProblems": "الإبلاغ عن مشاكل الحساب",
"subscriptionPaymentIssues": "قضايا الاشتراك والدفع",
"generalQuestionsSite": "أسئلة عامة حول الموقع",
"businessInquiries": "استفسارات الأعمال / التسويق",
"merchandiseInquiries": "استفسارات عن البضائع المادية (قمصان، ملصقات)",
"socialAlreadyExists": "تسجيل الدخول الاجتماعي هذا مرتبط بالفعل بحساب Habitica موجود.",
"invalidReqParams": "معلمات الطلب غير صالحة.",
"confirmPassword": "تأكيد كلمة المرور",
"emailPlaceholder": "على سبيل المثال، gryphon@example.com",
"emailUsernamePlaceholder": "على سبيل المثال، HabitRabbit أو gryphon@example.com",
"passwordPlaceholder": "على سبيل المثال، ******************",
"confirmPasswordPlaceholder": "تأكد من أنها نفس كلمة المرور!",
"joinHabitica": "انضم إلى Habitica",
"or": "أو",
"gamifyYourLife": "حول حياتك إلى لعبة",
"aboutHabitica": "Habitica هو تطبيق مجاني لبناء العادات والإنتاجية يتعامل مع حياتك الواقعية وكأنها لعبة. من خلال المكافآت والعقوبات داخل اللعبة لتحفيزك وشبكة اجتماعية قوية لإلهامك، يمكن أن تساعدك Habitica في تحقيق أهدافك لتصبح صحياً وتعمل بجد وسعادة.",
"trackYourGoalsDesc": "كن مسؤولاً عن طريق تتبع وإدارة عاداتك وأهدافك اليومية وقائمة المهام مع تطبيقات الجوال سهلة الاستخدام وواجهة الويب من Habitica.",
"battleMonstersDesc": "حارب الوحوش مع مستخدمي Habitica الآخرين! استخدم الذهب الذي تربحه لشراء مكافآت داخل اللعبة أو المكافآت الخاصة، مثل مشاهدة حلقة من برنامجك التلفزيوني المفضل.",
"healthAndFitnessDesc": "ليس لديك الحافز لاستعمال خيط الأسنان؟ لا يبدو أنك تريد الذهاب إلى النادي الرياضي؟ Habitica تجعل أخيراً الحصول على صحة جيدة تحدياً ممتعاً.",
"schoolAndWorkDesc": "سواء كنت تقوم بإعداد تقرير لمعلمك أو لرئيسك في العمل، فمن السهل تتبع تقدمك وأنت تتعامل مع أصعب مهامك.",
"muchmuchMoreDesc": "تعني قائمة مهامنا القابلة للتخصيص بالكامل أنه يمكنك تشكيل Habitica لتناسب أهدافك الشخصية. اعمل على مشاريع إبداعية، أو ركز على الرعاية الذاتية، أو اسعى وراء حلم مختلف - الأمر كله متروك لك.",
"levelUpAnywhereDesc": "تجعل تطبيقات الأجهزة المحمولة الخاصة بنا من السهل تتبع مهامك أثناء التنقل. حقق أهدافك بنقرة واحدة، بغض النظر عن مكانك.",
"getStarted": "انطلق!",
"marketing4Lead2Title": "نظام الصحة والراحة عن طريق اللعب",
"marketing4Lead3Title": "أدخل نظام اللعب إلى كل شيء",
"pkQuestion4": "لماذا تنقص الصحة الشخصية عند عدم إتمام المهام؟",
"pkAnswer4": "إذا لم تؤدي أحد أهدافك اليومية، فستفقد بعضاً من صحة شخصيتك الرمزية. يعد هذا العامل التحفيزي مهماً جداً لتشجيع الناس على متابعة أهدافهم اليومية، لأن الناس يكرهون حقاً إيذاء صورتهم الرمزية الصغيرة! بالإضافة إلى ذلك، تعد المساءلة الاجتماعية أمراً بالغ الأهمية لكثير من الأشخاص: أي إذا كنت تقاتل وحشاً مع أصدقائك، فإن تخطي مهامك يضر بصحتهم الرمزية أيضاً.",
"pkAnswer5": "إحدى الطرق التي نجحت بها Habitica في استخدام التحفيز هي أننا بذلنا الكثير من الجهد في التفكير في جوانب اللعبة للتأكد من أنها ممتعة بالفعل. لقد قمنا أيضاً بتضمين العديد من المكونات الاجتماعية، لأننا نشعر أن بعض الألعاب الأكثر تحفيزاً تتيح لك اللعب مع الأصدقاء، ولأن الأبحاث أظهرت أنه من الأسهل تكوين عادات عندما تكون لديك مسؤولية تجاه الآخرين.",
"pkAnswer6": "يستخدم الكثير من الأشخاص المختلفين Habitica! أكثر من نصف مستخدمينا تتراوح أعمارهم بين 18 و 34 عاماً، لكن لدينا أجداد يستخدمون الموقع مع أحفادهم الصغار وفي كل الأعمار. غالباً ما تنضم العائلات إلى الحفلة وتقاتل الوحوش معاً. <br /> يتمتع العديد من مستخدمينا بمعرفة في الألعاب، ولكن من المدهش أنه عندما أجرينا استطلاعاً منذ فترة، تم تحديد 40٪ من مستخدمينا على أنهم ليسوا لاعبين! لذلك يبدو أن طريقتنا يمكن أن تكون فعالة لأي شخص يريد أن يشعر بالإنتاجية والعافية ليشعر بمزيد من المرح.",
"pkAnswer7": "تستخدم Habitica فن البكسل لعدة أسباب، بالإضافة إلى عامل الحنين الممتع، فإن فن البكسل سهل للغاية بالنسبة لفنانينا المتطوعين الذين يرغبون في المشاركة. من الأسهل كثيراً الحفاظ على اتساق فن البكسل حتى عندما يساهم الكثير من الفنانين المختلفين، ويتيح لنا إنشاء الكثير من الأعمال الجديدة بسرعة وزيادة المحتوى!",
"localStorageTryFirst": "إذا كنت تواجه مشكلات في Habitica ، فانقر فوق الزر أدناه لمسح التخزين المحلي ومعظم ملفات تعريف الارتباط لهذا الموقع (لن تتأثر مواقع الويب الأخرى). ستحتاج إلى تسجيل الدخول مرة أخرى بعد ذلك، لذا تأكد أولاً من أنك تعرف معلومات تسجيل الدخول الخاصة بك من اسم مستخدم وكلمة سر. يمكن العثور عليها في الإعدادات -> <%= linkStart %>Site<%= linkEnd %>.",
"missingUsernameEmail": "اسم المستخدم أو البريد الإلكتروني مفقود.",
"emailTaken": "عنوان البريد الإلكتروني مستخدم بالفعل في الحساب.",
"usernameInfo": "أصبحت الآن أسماء تسجيل دخول المستخدمين فريدة ستظهر بجانب اسم العرض الخاص بك وتستخدم للدعوات وإشارات @ للدردشة والمراسلة.<br> <br> إذا كنت ترغب في معرفة المزيد حول هذا التغيير، <a href='https://habitica.fandom.com/wiki/Player_Names' target='_blank'>قم بزيارة موقع wiki الخاص بنا</a>.",
"passwordConfirmationMatch": "تأكيد كلمة المرور لا يتطابق مع كلمة المرور.",
"invalidLoginCredentialsLong": "عذراً، عنوان بريدك الإلكتروني / اسم المستخدم أو كلمة المرور غير صحيحين.\n- تأكد من كتابتها بشكل صحيح. اسم المستخدم وكلمة المرور حساسان لحالة الأحرف الكبيرة والصغيرة.\n- ربما تكون قد اشتركت في حساب Facebook أو Google، وليس عبر البريد الإلكتروني، لذا تحقق جيداً من خلال تجربتها.\n- إذا نسيت كلمة المرور الخاصة بك، انقر فوق \"نسيت كلمة المرور\".",
"alreadyHaveAccountLogin": "لديك بالفعل حساب Habitica؟ <strong> تسجيل الدخول </strong>",
"earnRewardsDesc": "أنجز المهام لترفع مستوى شخصيتك الرمزية الخاصة بك وفتح الميزات داخل اللعبة مثل درع المعركة والحيوانات الأليفة الغامضة والمهارات السحرية وحتى المهام!",
"featuredIn": "أعلن عنها في",
"usernameTOSRequirements": "يجب أن تتوافق أسماء المستخدمين مع <a href='/static/terms' target='_blank'> شروط الخدمة </a> و <a href='/static/community-guidelines' target='_blank'> إرشادات المجتمع < / أ>. إذا لم تكن قد قمت بتعيين اسم تسجيل دخول من قبل، فسيتم إنشاء اسم المستخدم تلقائياً.",
"accountSuspended": "تم حظر هذا الحساب، للمستخدم \"<%= userId %>\"، لخرقه إرشادات المجتمع (https://habitica.com/static/community-guidelines) أو شروط الخدمة (https://habitica.com/static/community-guidelines). للحصول على تفاصيل أو لطلب إلغاء الحظر، يرجى إرسال بريد إلكتروني إلى مدير المجتمع لدينا على <%= communityManagerEmail %> أو اطلب من والديك أو الوصي عليك إرسال بريد إلكتروني إليهم. الرجاء تضمين اسم المستخدم @ في البريد الإلكتروني.",
"cannotFulfillReq": "لا يمكن تلبية طلبك. أرسل بريداً إلكترونياً إلى admin@habitica.com إذا استمر هذا الخطأ.",
"pkAnswer8": "يمكنك العثور على الكثير من الشهادات حول كيفية مساعدة Habitica للأشخاص هنا: https://habitversary.tumblr.com",
"sync": "تحديث",
"tumblr": "تمبلر Tumblr",
"emailOrUsername": "البريد الإلكتروني أو اسم المستخدم (مع الانتباه للأحرف الكبيرة والصغيرة)",
"missingUsername": "اسم المستخدم مفقود.",
"wrongPassword": "كلمة مرور خاطئة.",
"incorrectDeletePhrase": "يرجى كتابة <%= magicWord %> بأحرف كبيرة لحذف حسابك.",
"newEmailRequired": "عنوان البريد الإلكتروني الجديد مفقود.",
"accountSuspendedTitle": "تم تعليق حسابك",
"unsupportedNetwork": "هذه الشبكة غير مدعومة حالياً.",
"onlySocialAttachLocal": "يمكن إضافة المصادقة المحلية إلى تسجيل دخول حساب اجتماعي فقط.",
"loginWithSocial": "قم بالدخول عن طريق <%= social %>",
"usernamePlaceholder": "على سبيل المثال، HabitRabbit",
"motivateYourself": "حفز نفسك لتحقيق أهدافك.",
"timeToGetThingsDone": "حان الوقت للاستمتاع عندما تنجز الأشياء! انضم إلى أكثر من <%= userCountInMillions %> مليون مواطن وحسن حياتك مهمة واحدة في كل مرة.",
"earnRewards": "اكسب مكافآت مقابل تحقيق أهدافك",
"playersUseToImprove": "يستخدم اللاعبون Habitica للترقي",
"healthAndFitness": "الصحة واللياقة",
"muchmuchMore": "والكثير الكثير!",
"joinMany": "انضم إلى أكثر من <%= userCountInMillions %> مليون شخص يستمتعون خلال تحقيق أهدافهم!",
"work": "العمل",
"levelUpAnywhere": "تقدم في المستوى من أي مكان",
"learnMore": "تعلم أكثر",
"usernameTaken": "اسم المستخدم غير متاح.",
"pkBoss": "وحوش",
"username": "اسم المستخدم",
"trackYourGoals": "تتبع عاداتك وأهدافك",
"notAnEmail": "عنوان البريد الإلكتروني غير صالح.",
"missingEmail": "البريد الإلكتروني مفقود.",
"dontHaveAccountSignup": "ليس لديك حساب Habitica؟ <strong> إنشاء حساب </strong>",
"pkQuestion7": "لماذا تستخدم Habitica فن البكسل؟",
"tasks": "المهام",
"localStorageTryNext": "إذا استمرت المشكلة، يرجى <%= linkStart %>الإبلاغ عن الخطأ<%= linkEnd %> إذا لم تكن قد قمت ذلك.",
"pkMoreQuestions": "هل لديك سؤال غير موجود في هذه القائمة؟ أرسل بريد إلكتروني إلى admin@habitica.com!",
"mobileApps": "تطبيقات الموبايل",
"localStorageClearExplanation": "سيؤدي هذا الزر إلى مسح التخزين المحلي ومعظم ملفات تعريف الارتباط وتسجيل خروجك.",
"marketing4Header": "لاستخدام المنظمات",
"pkQuestion5": "ما الذي يميز Habitica عن برامج التلعيب (إضافة نظام اللعب) الأخرى؟",
"marketing4Lead1": "التعليم هو أحد أفضل القطاعات لتطبيق نظام اللعب. نعلم جميعاً مدى تعلق الطلاب بالهواتف والألعاب هذه الأيام؛ نعم لتسخير تلك القوة! إن كنت معلماً؛ حرض طلابك ضد بعضهم البعض في منافسة ودية، وكافئ السلوك الجيد بجوائز نادرة، تشاهد درجاتهم وسلوكهم يرتفع.",
"usernameTime": "حان الوقت لتعيين اسم المستخدم الخاص بك!",
"missingPassword": "كلمة المرور مفقودة.",
"joinToday": "انضم إلى Habitica اليوم",
"marketing4Lead1Title": "نظام التعليم عن طريق اللعب",
"memberIdRequired": "\"member\" يجب أن يكون معرف UUID صالحاً.",
"modelNotFound": "هذا النموذج غير موجود.",
"signUpWithSocial": "قم بالتسجيل عن طريق <%= social %>",
"pkSamples": "عينات لقطات شاشة",
"pkWebsite": "موقع",
"schoolAndWork": "الدراسة والعمل",
"invalidEmailDomain": "لا يمكنك تسجيل البريد الإلكتروني من المخدمات التالية: <%= domains %>",
"missingNewPassword": "كلمة المرور الجديدة مفقودة.",
"heroIdRequired": "\"heroId\" يجب أن يكون معرف UUID صالحاً.",
"signup": "اشتراك",
"minPasswordLength": "يجب أن تتكون كلمة المرور من 8 أحرف أو أكثر.",
"singUpForFree": "سجل مجاناً",
"localStorageClear": "مسح البيانات المحلية",
"pkPromo": "إجراءات",
"tweet": "تغريد",
"privacy": "سياسة الخصوصية",
"reportCommunityIssues": "الإبلاغ عن مشاكل المجتمع",
"checkOutMobileApps": "جرب تطبيقات الجوال!",
"school": "المدرسة",
"missingAuthHeaders": "سلاسل المصادقة مفقودة.",
"passwordReset": "إذا كان لدينا بريدك الإلكتروني أو اسم المستخدم الخاصين بك في الملف، فقد تم إرسال تعليمات تعيين كلمة مرور جديدة إلى بريدك الإلكتروني.",
"invalidCredentials": "لا يوجد حساب يستخدم بيانات الاعتماد هذه.",
"cantDetachSocial": "يفتقر الحساب إلى طريقة مصادقة أخرى؛ لا يمكن فصل طريقة المصادقة هذه.",
"usernameLimitations": "يجب أن يكون اسم المستخدم من 1 إلى 20 حرفاً، ويحتوي فقط على الأحرف، والأرقام من 0 إلى 9، والواصلات، أو الشرطات السفلية، ولا يمكن أن يتضمن أي مصطلحات غير ملائمة.",
"battleMonsters": "حارب الوحوش مع الأصدقاء",
"passwordResetPage": "إعادة تعيين كلمة المرور"
}
+111 -111
View File
@@ -1,39 +1,39 @@
{
"languageName": "العربية",
"stringNotFound": "سلسلة المحارف '<%= string %>' لم توجد.",
"stringNotFound": "سلسلة المحارف '<%= string %>' غير موجودة.",
"habitica": "Habitica",
"onward": "إلي الأمام!",
"done": "Done",
"gotIt": "Got it!",
"onward": "إلى الأمام!",
"done": "انتهى",
"gotIt": "فهمت!",
"titleTimeTravelers": "مسافرين عبر الزمن",
"titleSeasonalShop": "المتجر الموسمي",
"saveEdits": "Save Edits",
"showMore": "Show More",
"showLess": "Show Less",
"markdownHelpLink": "Markdown formatting help",
"bold": "**Bold**",
"saveEdits": "حفظ التغييرات",
"showMore": "إظهار المزيد",
"showLess": "عرض أقل",
"markdownHelpLink": "تعليمات تنسيق لغة Markdown",
"bold": "**سميك**",
"markdownImageEx": "![نص بديل إلزامي](https://habitica.com/cake.png \"ظهور عنوان اختياري عند المرور بالماوس\")",
"code": "`code`",
"achievements": "الإنجازات",
"basicAchievs": "Basic Achievements",
"seasonalAchievs": "Seasonal Achievements",
"specialAchievs": "Special Achievements",
"basicAchievs": "الإنجازات الأساسية",
"seasonalAchievs": "الإنجازات الموسمية",
"specialAchievs": "الإنجازات الخاصة",
"modalAchievement": "إنجاز!",
"special": "خاص",
"site": "الموقع",
"help": "مساعدة",
"user": "المستخدم",
"market": "المتجر",
"newSubscriberItem": "You have new <span class=\"notification-bold-blue\">Mystery Items</span>",
"newSubscriberItem": "لديك <span class=\"notification-bold-blue\"> عناصر غامضة جديدة </span>",
"subscriberItemText": "كل شهر يحصل المشتركون على غرض غامض. عادةً يصبح متاحا في بداية الشهر. راجع صفحة الويكي \"الغرض الغامض\" للمزيد من المعلومات.",
"all": "الجميع",
"none": "لا شيء",
"more": "<%= count %> more",
"more": "<%= count %> أكثر",
"and": "و",
"submit": "إرسال",
"close": "إغلاق",
"saveAndClose": "حفظ وإغلاق",
"saveAndConfirm": "Save & Confirm",
"saveAndConfirm": "حفظ & تأكيد",
"cancel": "إلغاء",
"ok": "حسناً",
"add": "إضافة",
@@ -47,29 +47,29 @@
"delete": "حذف",
"gemsPopoverTitle": "جواهر",
"gems": "الجواهر",
"needMoreGems": "Need More Gems?",
"needMoreGemsInfo": "Purchase Gems now, or become a subscriber to buy Gems with Gold, get monthly mystery items, enjoy increased drop caps and more!",
"needMoreGems": "تحتاج المزيد من الأحجار الكريمة؟",
"needMoreGemsInfo": "قم بشراء الأحجار الكريمة الآن، أو اشترك لتكون قادراً على شراء الأحجار الكريمة بالذهب، واحصل على عناصر غامضة شهرياً، واستمتع بالتميز والجوائز المتزايدة والمزيد!",
"veteran": "متمرس",
"veteranText": "نجا من \"العادة الرمادية\" (موقعنا السابق)، وحصل على العديد من ندب المعارك من أخطائه.",
"originalUser": "مستخدم أصلي!",
"originalUserText": "واحد من المتبنين <em>الأوائل</em>. نتكلم عن مجرب منذ البداية!",
"habitBirthday": "حفلة يوم ميلاد Habitica",
"habitBirthdayText": "احتفل بيوم ميلاد Habitica!",
"habitBirthdayPluralText": "Celebrated <%= count %> Habitica Birthday Bashes!",
"habitBirthdayPluralText": "احتفل <%= count %> أيام ميلاد Habitica!",
"habiticaDay": "يوم تسمية Habitica",
"habiticaDaySingularText": "احتفل بيوم تسمية Habitica! شكراً لكونك مستخدماً رائعاً.",
"habiticaDayPluralText": "Celebrated <%= count %> Naming Days! Thanks for being a fantastic user.",
"habiticaDayPluralText": "احتفل <%= count %> بأيام تسمية Habitica! شكراً لكونك مستخدماً رائعاً.",
"achievementDilatory": "المنقذ من المماطلة",
"achievementDilatoryText": "ساعد على هزيمة تنين المماطلة المروع خلال احتفال صيف 2014!",
"costumeContest": "متسابق الأزياء التنكرية",
"costumeContestText": "Participated in the Habitoween Costume Contest. See some of the awesome entries at blog.habitrpg.com!",
"costumeContestTextPlural": "Participated in <%= count %> Habitoween Costume Contests. See some of the awesome entries at blog.habitrpg.com!",
"newPassSent": "If we have your email on file, instructions for setting a new password have been sent to your email.",
"costumeContestText": "شارك في مسابقة أزياء الهالوين. شاهد بعض الأفكار الرائعة على blog.habitrpg.com!",
"costumeContestTextPlural": "شارك في <%= count %> مسابقات أزياء الهالوين. شاهد بعض الأفكار الرائعة على blog.habitrpg.com!",
"newPassSent": "إذا كان لدينا بريدك الإلكتروني في الملف، فقد تم إرسال تعليمات تعيين كلمة مرور جديدة إلى بريدك الإلكتروني.",
"error": "خطأ",
"menu": "القائمة",
"notifications": "الإشعارات",
"noNotifications": "You're all caught up!",
"noNotificationsText": "The notification fairies give you a raucous round of applause! Well done!",
"noNotifications": "لديك آخر التحديثات!",
"noNotificationsText": "تمنحك جنيات الإشعارات جولة من التصفيق الصاخب! أحسنت!",
"clear": "إزالة",
"audioTheme": "سمة الصوت",
"audioTheme_off": "تعطيل",
@@ -77,17 +77,17 @@
"audioTheme_wattsTheme": "سمة واتس",
"audioTheme_gokulTheme": "سمة غوكل",
"audioTheme_luneFoxTheme": "سمة لونفوكس",
"audioTheme_rosstavoTheme": "Rosstavo's Theme",
"audioTheme_dewinTheme": "Dewin's Theme",
"audioTheme_airuTheme": "Airu's Theme",
"audioTheme_beatscribeNesTheme": "Beatscribe's NES Theme",
"audioTheme_arashiTheme": "Arashi's Theme",
"audioTheme_triumphTheme": "Triumph Theme",
"audioTheme_lunasolTheme": "Lunasol Theme",
"audioTheme_spacePenguinTheme": "SpacePenguin's Theme",
"audioTheme_maflTheme": "MAFL Theme",
"audioTheme_pizildenTheme": "Pizilden's Theme",
"audioTheme_farvoidTheme": "Farvoid Theme",
"audioTheme_rosstavoTheme": "سمة روسستافو",
"audioTheme_dewinTheme": "سمة ديوين",
"audioTheme_airuTheme": "سمة آيرو",
"audioTheme_beatscribeNesTheme": "سمة بيتسكرايب NES",
"audioTheme_arashiTheme": "سمة أراشي",
"audioTheme_triumphTheme": "سمة الانتصار الساحق",
"audioTheme_lunasolTheme": "سمة لوناسول",
"audioTheme_spacePenguinTheme": "سمة بطريق الفضاء",
"audioTheme_maflTheme": "سمة مافل",
"audioTheme_pizildenTheme": "سمة بيزيلدن",
"audioTheme_farvoidTheme": "سمة فارفويد",
"reportBug": "بلّغ عن خطأ",
"overview": "لمحة عامة للمستخدمين الجدد",
"dateFormat": "صيغة التاريخ",
@@ -95,110 +95,110 @@
"achievementStressbeastText": "ساعد على هزيمة وحش التوتر الفظيع خلال احتفال شتاء 2014!",
"achievementBurnout": "المنقذ من الحقول المزدهرة",
"achievementBurnoutText": "ساعد على هزيمة احتراقي واستعادة أشباح العادم خلال احتفال خريف 2015!",
"achievementBewilder": "Savior of Mistiflying",
"achievementBewilderText": "Helped defeat the Be-Wilder during the 2016 Spring Fling Event!",
"achievementDysheartener": "Savior of the Shattered",
"achievementDysheartenerText": "Helped defeat the Dysheartener during the 2018 Valentine's Event!",
"cards": "Cards",
"sentCardToUser": "You sent a card to <%= profileName %>",
"cardReceived": "You received a <span class=\"notification-bold-blue\"><%= card %></span>",
"achievementBewilder": "المنقذ من الخطأ",
"achievementBewilderText": "ساعد في هزيمة Be-Wilder خلال حدث Spring Fling لعام 2016!",
"achievementDysheartener": "منقذ المحطمين",
"achievementDysheartenerText": "ساعد في هزيمة Dysheartener خلال حدث عيد الحب 2018!",
"cards": "البطاقات",
"sentCardToUser": "لقد أرسلت بطاقة إلى <%= profileName %>",
"cardReceived": "لقد وصلتك <span class=\"notification-bold-blue\"><%= card %></span>",
"greetingCard": "بطاقة معايدة",
"greetingCardExplanation": "كلاكما ستحصلان على إنجاز الصاحب المبتهج!",
"greetingCardNotes": "أرسل بطاقة تحية لعضو بالفريق.",
"greeting0": "مرحباً!",
"greeting1": "فقط أحببت أن أقول مرحباً :)",
"greeting2": "`waves frantically`",
"greeting2": "`موجات حميمية`",
"greeting3": "مرحباً يا!",
"greetingCardAchievementTitle": "الصاحب المبتهج",
"greetingCardAchievementText": "Hey! Hi! Hello! Sent or received <%= count %> greeting cards.",
"greetingCardAchievementText": "مرحباً! لقد أرسلت أو استلمت <%= count %> بطاقة تحية.",
"thankyouCard": "بطاقة شكر",
"thankyouCardExplanation": "كلاكما ستحصلان على إنجاز الممتن كثيراً!",
"thankyouCardNotes": "أرسل بطاقة شكر لعضو فريق.",
"thankyou0": "شكراً جزيلاً لك!",
"thankyou1": "شكراً، شكراً، شكراً!",
"thankyou1": "شكراً جزيلاً، شكراً!",
"thankyou2": "أرسل لك ألف شكر.",
"thankyou3": "أنا ممتن كثيراً، شكراً لك!",
"thankyouCardAchievementTitle": "ممتن لك بشدة",
"thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= count %> Thank-You cards.",
"thankyouCardAchievementText": "شكراً لكونك ممتناً! لقد أرسلت أو استلمت <%= count %> رسالة شكر.",
"birthdayCard": "بطاقة تهنئة بيوم الميلاد",
"birthdayCardExplanation": "كلاكما تحصلان على إنجاز يوم الميلاد المليء بالحظ!",
"birthdayCardNotes": "أرسل بطاقة تهنة يوم الميلاد لأحد أعضاء فريقك.",
"birthday0": "يوم ميلاد سعيد!",
"birthdayCardAchievementTitle": "يوم ميلاد مليء بالحظ",
"birthdayCardAchievementText": "Many happy returns! Sent or received <%= count %> birthday cards.",
"congratsCard": "Congratulations Card",
"congratsCardExplanation": "You both receive the Congratulatory Companion achievement!",
"congratsCardNotes": "Send a Congratulations card to a party member.",
"congrats0": "Congratulations on your success!",
"congrats1": "I'm so proud of you!",
"congrats2": "Well done!",
"congrats3": "A round of applause for you!",
"congrats4": "Bask in your well-deserved success!",
"congratsCardAchievementTitle": "Congratulatory Companion",
"congratsCardAchievementText": "It's great to celebrate your friends' achievements! Sent or received <%= count %> congratulations cards.",
"getwellCard": "Get Well Card",
"getwellCardExplanation": "You both receive the Caring Confidant achievement!",
"getwellCardNotes": "Send a Get Well card to a party member.",
"getwell0": "Hope you feel better soon!",
"getwell1": "Take care! <3",
"getwell2": "You're in my thoughts!",
"getwell3": "Sorry you're not feeling your best!",
"getwellCardAchievementTitle": "Caring Confidant",
"getwellCardAchievementText": "Well-wishes are always appreciated. Sent or received <%= count %> get well cards.",
"goodluckCard": "Good Luck Card",
"goodluckCardExplanation": "You both receive the Lucky Letter achievement!",
"goodluckCardNotes": "Send a good luck card to a party member.",
"goodluck0": "May luck always follow you!",
"goodluck1": "Wishing you lots of luck!",
"goodluck2": "I hope luck is on your side today and always!!",
"goodluckCardAchievementTitle": "Lucky Letter",
"goodluckCardAchievementText": "Wishes for good luck are great encouragement! Sent or received <%= count %> good luck cards.",
"streakAchievement": "You earned a streak achievement!",
"firstStreakAchievement": "21-Day Streak",
"streakAchievementCount": "<%= streaks %> 21-Day Streaks",
"twentyOneDays": "You've completed your Daily for 21 days in a row!",
"dontBreakStreak": "Amazing job. Don't break the streak!",
"birthdayCardAchievementText": "العديد من عوائد سعيدة! لقد أرسلت أو استلمت <%= count %> بطاقة عيد ميلاد سعيد.",
"congratsCard": "بطاقة تهنئة",
"congratsCardExplanation": "كلاكما تلقى إنجاز الرفيق المهنئ!",
"congratsCardNotes": "أرسل بطاقة تهنئة لعضو الفريق.",
"congrats0": "مبارك نجاحك!",
"congrats1": "أنا فخور جداً بك!",
"congrats2": "أحسنت!",
"congrats3": "جولة من التصفيق لك!",
"congrats4": "تشرق في نجاحك الذي تستحقه!",
"congratsCardAchievementTitle": "الرفيق المهنئ",
"congratsCardAchievementText": "إنه لأمر رائع أن تحتفل بإنجازات أصدقائك! لقد أرسلت أو استلمت <%= count %> بطاقة تهنئة.",
"getwellCard": "بطاقة التعافي والشفاء العاجل",
"getwellCardExplanation": "كلاكما حصل على إنجاز رعاية المقرب!",
"getwellCardNotes": "أرسل بطاقة تمنيات بالشفاء العاجل إلى أحد أعضاء الفريق.",
"getwell0": "أتمنى أن تشعر بتحسن عما قريب!",
"getwell1": "اعتن بنفسك! <3",
"getwell2": "أنت في أفكاري!",
"getwell3": "آسف لأنك لست في أفضل حالاتك!",
"getwellCardAchievementTitle": "رعاية المقرب",
"getwellCardAchievementText": "إنه لموضع تقدير، التمنيات الطيبة. لقد أرسلت أو استلمت <%= count %> بطاقة تمنيات طيبة.",
"goodluckCard": "بطاقة حظ سعيد",
"goodluckCardExplanation": "كلاكما تلقيت إنجاز البريد المحظوظ!",
"goodluckCardNotes": "أرسل بطاقة حظ سعيد إلى أحد أعضاء الفريق.",
"goodluck0": "فليتبعك الحظ دائماً!",
"goodluck1": "أتمنى لك الكثير من الحظ!",
"goodluck2": "أتمنى أن يكون الحظ بجانبك اليوم ودائماً !!",
"goodluckCardAchievementTitle": "البريد المحظوظ",
"goodluckCardAchievementText": "التمنيات بالتوفيق هي تشجيع كبير! لقد أرسلت أو استلمت <%= count %> بطاقة حظ سعيد.",
"streakAchievement": "لقد ربحت إنجازاً متتالياً!",
"firstStreakAchievement": "ضربة 21-يوماً",
"streakAchievementCount": "<%= streaks %> ضربة 21-يوماً",
"twentyOneDays": "لقد أكملت برنامجك اليومي لمدة 21 يوماً على التوالي!",
"dontBreakStreak": "عمل مبهر. لا تكسر الضربة المتتالية!",
"dontStop": "لا تتوقف الآن!",
"wonChallengeShare": "فزت بتحد في Habitica!",
"orderBy": "Order By <%= item %>",
"you": "(you)",
"loading": "Loading...",
"userIdRequired": "User ID is required",
"resetFilters": "Clear all filters",
"applyFilters": "Apply Filters",
"wantToWorkOn": "I want to work on:",
"categories": "Categories",
"animals": "Animals",
"exercise": "Exercise",
"creativity": "Creativity",
"health_wellness": "Health & Wellness",
"self_care": "Self-Care",
"habitica_official": "Habitica Official",
"academics": "Academics",
"advocacy_causes": "Advocacy + Causes",
"entertainment": "Entertainment",
"finance": "Finance",
"orderBy": "ترتيب حسب <%= item %>",
"you": "(أنت)",
"loading": "تحميل...",
"userIdRequired": "مطلوب ID المستخدم (User ID)",
"resetFilters": "امسح كل عوامل التصفية",
"applyFilters": "تطبيق عوامل التصفية",
"wantToWorkOn": "أريد العمل على:",
"categories": "الفئات",
"animals": "الحيوانات",
"exercise": "التمرين",
"creativity": "الإِبداع",
"health_wellness": "الصحة & الراحة",
"self_care": "العناية بالنفس",
"habitica_official": "Habitica رسمي",
"academics": "أكاديمي",
"advocacy_causes": "تطوع + مجتمعات الاهتمام",
"entertainment": "وسائل الترفيه",
"finance": "الموارد المالية",
"health_fitness": "الصحة واللياقة البدنية",
"hobbies_occupations": "الهوايات والمهن",
"location_based": "Location-based",
"location_based": "معتمد على الموقع",
"mental_health": "الصحة العقلية + العناية الذاتية",
"getting_organized": "Getting Organized",
"self_improvement": "Self-Improvement",
"spirituality": "Spirituality",
"time_management": "Time-Management + Accountability",
"recovery_support_groups": "Recovery + Support Groups",
"dismissAll": "Dismiss All",
"messages": "Messages",
"emptyMessagesLine1": "You don't have any messages",
"getting_organized": "أن تصبح أكثر تنظيماً",
"self_improvement": "تطوير الذات",
"spirituality": "الروحانية",
"time_management": "إدارة الوقت + المسؤولية",
"recovery_support_groups": "مجموعات التجديد + الدعم",
"dismissAll": "امسح الكل",
"messages": "الرسائل",
"emptyMessagesLine1": "ليس لديك أية رسائل",
"emptyMessagesLine2": "يمكنك إرسال رسالة جديدة إلى مستخدم من خلال زيارة ملفه الشخصي والنقر على زر \"رسالة\".",
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> sent you a message",
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> أرسل لك رسالة",
"letsgo": "لنذهب!",
"selected": "Selected",
"howManyToBuy": "How many would you like to buy?",
"contactForm": "Contact the Moderation Team",
"selected": "محدد",
"howManyToBuy": "كم تريد أن تشتري؟",
"contactForm": "تواصل مع فريق الإشراف",
"congratulations": "تهانينا!",
"finish": "نهاية",
"onboardingAchievs": "إنجازات الإعداد",
"onboardingAchievs": "الإنجازات الترحيبية",
"reportBugHeaderDescribe": "يُرجى وصف الخطأ الذي تواجهه وسيتواصل معك فريقنا.",
"reportEmailText": "سيتم استخدام هذا فقط للاتصال بك بخصوص تقرير الخطأ.",
"reportEmailPlaceholder": "عنوان بريدك الإلكتروني",
+4 -4
View File
@@ -1,10 +1,10 @@
{
"noItemsAvailableForType": "لا يوجد لديك <%= type %>",
"noItemsAvailableForType": "لا يوجد لديك <%= type %>.",
"foodItemType": "طعام الحيوانات الأليفة",
"eggsItemType": "بيض",
"hatchingPotionsItemType": "جرعات الفقس",
"specialItemType": "حاجات خاصة",
"lockedItem": "حاجة مقفلة",
"hatchingPotionsItemType": "جرعات التلقيح",
"specialItemType": "عناصر خاصة",
"lockedItem": "عنصر مقفل",
"petAndMount": "حيوان أليف وحيوان للركوب",
"allItems": "كل العناصر"
}
+21 -21
View File
@@ -1,25 +1,25 @@
{
"unlockedReward": "You have received <%= reward %>",
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"unlockedReward": "لقد استلمت <%= reward %>",
"earnedRewardForDevotion": "لقد حصلت على <%= reward %> لكونك ملتزماً بتحسين حياتك.",
"nextRewardUnlocksIn": "تسجيلات دخول للحصول على جائزتك القادمة: <%= numberOfCheckinsLeft %>",
"awesome": "رائع!",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",
"oneOfAllHatchingPotions": "one of each standard Hatching Potion",
"threeOfEachFood": "three of each standard Pet Food",
"fourOfEachFood": "four of each standard Pet Food",
"twoSaddles": "two Saddles",
"incentivesDescription": "عندما يتعلق الأمر ببناء العادات ، فإن الاستمرار هو المفتاح. كل يوم تقوم بتسجيل الدخول تقترب من مكافأة.",
"checkinEarned": "ازداد عدد تسجيلات الدخول الخاص بك!",
"unlockedCheckInReward": "لقد حررت جائزة تسجيل دخول!",
"checkinProgressTitle": "عملية التقدم للتالي",
"incentiveBackgroundsUnlockedWithCheckins": "التقدم حتى يتم فتح الخلفيات العادية المقفلة التالية مع تسجيلات الدخول اليومية.",
"oneOfAllPetEggs": "واحدة من بيض كل الحيوانات الأليفة القياسية",
"twoOfAllPetEggs": "اثنين من بيض كل الحيوانات الأليفة القياسية",
"threeOfAllPetEggs": "ثلاثة من بيض كل الحيوانات الأليفة القياسية",
"oneOfAllHatchingPotions": "واحدة من كل جرعات التفقيس القياسية",
"threeOfEachFood": "ثلاثة من كل جرعات التفقيس القياسية",
"fourOfEachFood": "أربعة من غذاء كل الحيوانات الأليفة القياسية",
"twoSaddles": "اثنين من السروج",
"threeSaddles": "ثلاثة سروج",
"incentiveAchievement": "the Royally Loyal achievement",
"royallyLoyal": "Royally Loyal",
"royallyLoyalText": "This user has checked in over 500 times, and has earned every Check-In Prize!",
"checkInRewards": "Check-In Rewards",
"backloggedCheckInRewards": "You received Check-In Prizes! Visit your Inventory and Equipment to see what's new."
"incentiveAchievement": "إنجاز الولاء الملكي",
"royallyLoyal": "الولاء الملكي",
"royallyLoyalText": "هذا المستخدم قد قام بتسجيل الدخول أكثر من 500 مرة، وحصل على كل مكافآت تسجيل الدخول!",
"checkInRewards": "مكافآت تسجيل الدخول",
"backloggedCheckInRewards": "لقد استلمت مكافآت تسجيل دخول! ادخل على مخزنك ومعداتك لترى ما هو جديد."
}
+2 -2
View File
@@ -609,7 +609,7 @@
"questSeaSerpentNotes": "Your streaks have you feeling lucky—its the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but youve barely submerged when an impact rocks the sub, sending its occupants tumbling. “Whats going on?” @AriesFaries shouts.<br><br>You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, its coming round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. Maybe if we work together and complete them, you think, we can drive this monster away!",
"questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that theres not a repeat occurrence.",
"questSeaSerpentBoss": "The Mighty Sea Serpent",
"questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)",
"questSeaSerpentDropSeaSerpentEgg": "",
"questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market",
"questKangarooText": "Kangaroo Catastrophe",
"questKangarooNotes": "Maybe you should have finished that last task… you know, the one you keep avoiding, even though it always comes back around? But @Mewrose and @LilithofAlfheim invited you and @stefalupagus to see a rare kangaroo troop hopping through the Sloensteadi Savannah; how could you say no?! As the troop comes into view, something hits you on the back of the head with a mighty <em>whack!</em><br><br>Shaking the stars from your vision, you pick up the responsible object--a dark red boomerang, with the very task you continually push back etched into its surface. A quick glance around confirms the rest of your party met a similar fate. One larger kangaroo looks at you with a smug grin, like shes daring you to face her and that dreaded task once and for all!",
@@ -635,4 +635,4 @@
"questVelociraptorBoss": "Veloci-Rapper",
"questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)",
"questVelociraptorUnlockText": "Unlocks purchasable Velociraptor eggs in the Market"
}
}
+1 -1
View File
@@ -87,7 +87,7 @@
"achievementAllThatGlittersText": "Събрали сте всички оседлани Златни животни.",
"achievementAllThatGlitters": "Златен телец",
"achievementGoodAsGoldModalText": "Събрахте всички Златни домашни любимци!",
"achievementGoodAsGoldText": "Събрали сте всички Златни домашни любимци.",
"achievementGoodAsGoldText": "Събрахте всички Златни домашни любимци.",
"achievementGoodAsGold": "Златно сърце",
"achievementFreshwaterFriendsModalText": "Завършихте мисиите за аксолотъла, жабата и хипопотама!",
"achievementFreshwaterFriendsText": "Завършили сте мисиите за домашни любимци за аксолотъла, жабата и хипопотама.",
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "и",
"chores": "Домакинска работа",
"clearBrowserData": "Изчистване на данните на браузъра",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Добавки и разширения</a>",
"communityExtensions": "Добавки и разширения",
"communityFacebook": "Фейсбук",
"companyAbout": "Как работи",
"companyBlog": "Блог",
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "a",
"chores": "Domácí práce",
"clearBrowserData": "Vyčistit data v prohlížeči",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Doplňky & Rozšírení</a>",
"communityExtensions": "Doplňky & Rozšírení",
"communityFacebook": "Facebook",
"companyAbout": "Jak to funguje",
"companyBlog": "Blog",
+5 -1
View File
@@ -2014,5 +2014,9 @@
"weaponMystery202102Notes": "Zářivý růžový drahokem v této hůlce dokáže šířit radost a přátelství všude možně! Nepřináší žádné výhody. Předmět pro předplatitele, únor 2021.",
"weaponMystery202104Notes": "Tvoji nepřátele by si měli dávat pozor - máš totiž mocnou a pichlavou obranu! Nepřináší žádné výhody. Předmět pro předplatitele duben 2021.",
"weaponMystery202102Text": "Okouzlující hůlka",
"weaponMystery202104Text": "Hůl trnitého bodláku"
"weaponMystery202104Text": "Hůl trnitého bodláku",
"weaponMystery202201Notes": "O silvestrovské půlnoci vypusť oblak zlatého a stříbrného třpytu. Štastný nový rok! Kdo to teď uklidí? Nepřináší žádné výhody. Předmět pro předplatitele leden 2022.",
"weaponMystery202201Text": "Konfetové dělo půlnoci",
"weaponMystery202111Text": "Chronomancerova hůl",
"weaponMystery202111Notes": "Ohýbej tok času s touto tajemnou a mocnou holí. Nepřináší žádné výhody. Předmět pro předplatitele listopad 2021."
}
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "og",
"chores": "Pligter",
"clearBrowserData": "Ryd browserdata",
"communityExtensions": "<a href='https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Tilføjelser og udvidelser</a>",
"communityExtensions": "Tilføjelser og udvidelser",
"communityFacebook": "Facebook",
"companyAbout": "Hvordan det virker",
"companyBlog": "Blog",
+7 -4
View File
@@ -94,8 +94,8 @@
"achievementSkeletonCrewModalText": "Du hast alle Skelett-Reittiere gezähmt!",
"achievementSkeletonCrewText": "Hat alle Skelett-Reittiere gezähmt.",
"achievementSkeletonCrew": "Skelettbande",
"achievementBoneCollectorModalText": "Du hast alle Skelett-Haustiere gesammelt!",
"achievementBoneCollectorText": "Hat alle Skelett-Haustiere gesammelt.",
"achievementBoneCollectorModalText": "Du hast alle Skeletthaustiere gesammelt!",
"achievementBoneCollectorText": "Hat alle Skeletthaustiere gesammelt.",
"achievementBoneCollector": "Knochensammler",
"achievementRedLetterDayModalText": "Du hast alle roten Reittiere gezähmt!",
"achievementRedLetterDayText": "Hat alle roten Reittiere gezähmt.",
@@ -104,7 +104,7 @@
"achievementSeeingRed": "Rot Sehen",
"achievementRedLetterDay": "Roter Faden",
"achievementLegendaryBestiaryModalText": "Du hast alle mystischen Haustiere gesammelt!",
"achievementLegendaryBestiaryText": "Hat alle mystischen Haustiere ausgebrütet: Drachen-Jungtier, Fliegendes Ferkel, Greifen-Jungtier, Seeschlangen-Haustier und Einhorn-Fohlen!",
"achievementLegendaryBestiaryText": "Hat alle mystischen Haustiere in den Standardfarben ausgebrütet: Drache, Fliegendes Ferkel, Greif, Seeschlange und Einhorn!",
"achievementLegendaryBestiary": "Legendäres Bestiarium",
"achievementSeasonalSpecialistModalText": "Du hast alle saisonalen Quests abgeschlossen!",
"achievementSeasonalSpecialistText": "Hat alle Quests der Frühlings- und Winter-Saison abgeschlossen: Eierjagd, Wildernder Weihnachtswichtel, und Finde das Jungtier!",
@@ -138,5 +138,8 @@
"achievementGroupsBeta2022ModalText": "Du hast mit Deinen Gruppen Habitica geholfen, indem ihr getestet und Feedback geschrieben habt!",
"achievementWoodlandWizardModalText": "Du hast alle Wald-Tiere gesammelt!",
"achievementWoodlandWizard": "Wald-Magier",
"achievementWoodlandWizardText": "Du hast alle Standard-Farben der Waldkreaturen ausgebrütet: Dachs, Bär, Hirsch, Fuchs, Frosch, Igel, Eule, Schlange, Eichhörnchen und Bäumling!"
"achievementWoodlandWizardText": "Du hast alle Standard-Farben der Waldkreaturen ausgebrütet: Dachs, Bär, Hirsch, Fuchs, Frosch, Igel, Eule, Schnecke, Eichhörnchen und Bäumling!",
"achievementBoneToPickModalText": "Du hast alle klassischen und Quest-Skeletthaustiere gesammelt!",
"achievementBoneToPick": "Ein harter Knochen",
"achievementBoneToPickText": "Hat alle klassischen und Quest-Skeletthaustiere ausgebrütet!"
}
+20 -1
View File
@@ -721,5 +721,24 @@
"backgrounds082022": "Set 99: Veröffentlicht im August 2022",
"backgroundMessyRoomText": "Unordentlicher Raum",
"backgroundMessyRoomNotes": "Reinige einen unordentlichen Raum.",
"backgroundRainbowEucalyptusNotes": "Bewundere einen Regenbogen-Eukalyptus-Hain."
"backgroundRainbowEucalyptusNotes": "Bewundere einen Regenbogen-Eukalyptus-Hain.",
"backgroundTheatreStageText": "Theaterbühne",
"backgroundTheatreStageNotes": "Tritt auf einer Theaterbühne auf.",
"backgroundAutumnPicnicText": "Herbstpicknick",
"backgroundAutumnPicnicNotes": "Genieße ein Herbstpicknick.",
"backgroundOldPhotoText": "Altes Foto",
"backgroundOldPhotoNotes": "Posiere auf einem alten Foto.",
"backgrounds092022": "Set 100: Veröffentlicht im September 2022",
"backgrounds102022": "Set 101: Veröffentlicht im Oktober 2022",
"backgroundSpookyRuinsText": "Gruselige Ruinen",
"backgroundMaskMakersWorkshopText": "Masken-Macher-Werkstatt",
"backgroundMaskMakersWorkshopNotes": "Probiere in der Masken-Macher-Werkstatt ein neues Gesicht aus.",
"backgroundCemeteryGateText": "Friedhofstor",
"backgroundCemeteryGateNotes": "Suche ein Friedhofstor heim.",
"backgroundSpookyRuinsNotes": "Erkunde gruselige Ruinen.",
"backgrounds112022": "Set 102: Veröffentlicht im November 2022",
"backgroundAmongGiantMushroomsNotes": "Bewundere Riesige Pilze.",
"backgroundAmongGiantMushroomsText": "Unter Riesigen Pilzen",
"backgroundMistyAutumnForestText": "Nebeliger Herbstwald",
"backgroundMistyAutumnForestNotes": "Durchstreife einen nebeligen Herbstwald."
}
+1 -1
View File
@@ -102,7 +102,7 @@
"confirmKeepChallengeTasks": "Möchtest Du die Herausforderungsaufgaben behalten?",
"selectParticipant": "Wähle einen Teilnehmer aus",
"filters": "Filter",
"wonChallengeDesc": "Du hast die Herausforderung <%= challengeName %> gewonnen! Dein Erfolg wird unter den Errungenschaften in Deinem Profil aufgezeichnet.",
"wonChallengeDesc": "<%= challengeName %> hat Dich als Gewinner ausgewählt! Dein Gewinn wurde in Deine Errungenschaften aufgenommen.",
"yourReward": "Deine Belohnung",
"removeTasks": "Aufgaben entfernen"
}
@@ -127,7 +127,7 @@
"commGuideList01E": "Fange in der Taverne keine Streitgespräche an und lass Dich nicht auf solche ein.",
"commGuideList01F": "Kein Betteln um bezahlte Artikel, kein Spamming oder große Überschriften/Großbuchstaben.",
"commGuidePara017": "Hier ist die Kurzfassung, aber wir möchten Dich ermutigen, weiter unten mehr Details zu erfahren:",
"commGuideList02M": "Frage nicht nach Edelsteinen, Abonnements oder der Mitgliedschaft in Gruppenabonnements. Nachfragen dieser Art sind weder in der Taverne, noch in öffentlichen oder privaten Chaträumen und auch nicht in Privatnachrichten erlaubt. Wiederholte oder extreme Betteleien, vor allem nachdem bereits eine Warnung ausgesprochen wurde, können zu einer Sperrung des Accounts führen.",
"commGuideList02M": "Frage nicht nach oder bettle nicht um Edelsteine, Abonnements oder die Mitgliedschaft in Gruppenplänen. Nachrichten dieser Art sind weder in der Taverne, noch in öffentlichen oder privaten Chaträumen, und auch nicht in Privatnachrichten erlaubt. Wenn Du Nachrichten erhältst, in denen man Dich um bezahlte Artikel fragt, melde sie bitte über das Fähnchen. Wiederholte oder extreme Betteleien nach Edelsteinen oder Abonnements, vor allem nachdem bereits eine Warnung ausgesprochen wurde, können zu einer Kontosperre führen.",
"commGuideList09D": "Entfernung oder Herabstufung des Mitwirkenden-Ranges",
"commGuideList05H": "Schwerwiegende oder wiederholte Versuche, andere Spielende zu betrügen oder zu bedrängen, um an Gegenstände zu kommen, die echtes Geld kosten"
}
File diff suppressed because one or more lines are too long
+8 -7
View File
@@ -5,12 +5,12 @@
"accept2Terms": "zu, sowie der",
"chores": "Hausarbeiten",
"clearBrowserData": "Browserdaten löschen",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Add-ons & Erweiterungen</a>",
"communityExtensions": "Add-ons & Erweiterungen",
"communityFacebook": "Facebook",
"companyAbout": "So funktioniert es",
"companyBlog": "Blog",
"companyContribute": "Mitwirken",
"companyDonate": "Spenden",
"companyContribute": "Bei Habitica mitwirken",
"companyDonate": "An Habitica spenden",
"forgotPassword": "Passwort vergessen?",
"emailNewPass": "Einen Link per E-Mail senden, um das Passwort zurückzusetzen",
"forgotPasswordSteps": "Trage Deinen Benutzernamen oder die E-Mail-Adresse ein, mit der Du Deinen Habitica-Account aktiviert hast.",
@@ -53,10 +53,10 @@
"marketing4Lead3-1": "Willst Du Dein Leben einmal als Spiel betrachten?",
"marketing4Lead3-2": "Willst Du eine Gruppe für Ausbildung, Wohlbefinden usw. leiten?",
"marketing4Lead3Title": "Mache Alles zum Spiel",
"mobileAndroid": "Android",
"mobileIOS": "iOS",
"mobileAndroid": "Android App",
"mobileIOS": "iOS App",
"oldNews": "Neuigkeiten",
"newsArchive": "Neuigkeiten-Archiv auf Wikia (mehrsprachig)",
"newsArchive": "Neuigkeiten-Archiv auf Fandom (mehrsprachig)",
"setNewPass": "Neues Passwort setzen",
"password": "Passwort",
"playButton": "Spielen",
@@ -187,5 +187,6 @@
"minPasswordLength": "Das Passwort muss mindestens 8 Zeichen haben.",
"enterHabitica": "Tritt ein in Habitica",
"socialAlreadyExists": "Diese Social-Media-Zugangsdaten sind bereits mit einem schon bestehenden Habitica-Konto verknüpft.",
"emailUsernamePlaceholder": "z.B., habitrabbit oder gryphon@beispiel.com"
"emailUsernamePlaceholder": "z.B., habitrabbit oder gryphon@beispiel.com",
"footerProduct": "Produkt"
}
+47 -1
View File
@@ -2694,5 +2694,51 @@
"weaponMystery202209Text": "Magie-Anleitung",
"weaponMystery202209Notes": "Dieses Buch wird Dich auf Deiner Reise durch die Welt der Magie verzaubern. Gewährt keinen Attributbonus. September 2022 Abonnentengegenstand.",
"shieldMystery202209Text": "Berg magischer Bücher",
"shieldMystery202209Notes": "Bücherberge durchzulesen ist ein guter Weg um viel Zauberei-Wissen anzusammeln diese Ausbildung wird einfach magisch! Gewährt keinen Attributbonus. September 2022 Abonnentengegenstand."
"shieldMystery202209Notes": "Bücherberge durchzulesen ist ein guter Weg um viel Zauberei-Wissen anzusammeln diese Ausbildung wird einfach magisch! Gewährt keinen Attributbonus. September 2022 Abonnentengegenstand.",
"weaponSpecialFall2022MageNotes": "Diese mächtigen Böen bleiben zurück, wenn Du Dich gen Himmel schwingst. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"armorMystery202210Text": "Bedrohliche Schlange Rüstung",
"armorMystery202210Notes": "Probiere einmal das Schlängeln aus, Du könntest feststellen, dass es eine sehr effiziente Art der Fortbewegung ist. Gewährt keinen Attributbonus. Oktober 2022 Abonnentengegenstand.",
"shieldSpecialFall2022WarriorText": "Orkschild",
"shieldSpecialFall2022WarriorNotes": "Süßes oder GRAAA! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"weaponSpecialFall2022RogueText": "Gurkenklinge",
"weaponSpecialFall2022RogueNotes": "Du kannst Dich mit dieser Gurke nicht nur verteidigen, sie gibt auch eine leckere Zwischenmahlzeit ab. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"weaponSpecialFall2022WarriorText": "Orkschwert",
"weaponSpecialFall2022WarriorNotes": "Womöglich besser dafür geeignet, Baumstämme oder knusprige Brotlaibe zu zerschneiden als die Rüstung der Feinde, aber GRAAA! Es sieht in jedem Fall furchterregend aus! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"weaponSpecialFall2022MageText": "Windböen",
"weaponSpecialFall2022HealerText": "Rechtes Beobachterauge",
"weaponSpecialFall2022HealerNotes": "Um Deine Chancen zu verbessern, halte es hoch und sprich die Machtworte: \"Den Sieg fest im Blick!\" Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"armorSpecialFall2022RogueText": "Kappa Rüstung",
"armorSpecialFall2022RogueNotes": "Ob Du schwimmst, umherschleichst oder ringst, in dieser Rüstung bist Du sicher. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"armorSpecialFall2022WarriorText": "Orkrüstung",
"armorSpecialFall2022WarriorNotes": "GRAAA! MASSIGE SCHULTERN zeigen Du hast MASSIG KRAFT! Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"armorSpecialFall2022MageText": "Harpyienrüstung",
"armorSpecialFall2022MageNotes": "Fliege schnell wie der Wind mit diesen wundervollen Flügeln und halte was Dir am wichtigsten ist fest in den furchterregenden Krallen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"armorSpecialFall2022HealerText": "Wuchernde Augenstiele",
"headSpecialFall2022RogueText": "Kappa Maske",
"headSpecialFall2022RogueNotes": "Mit dieser Metallkappe auf dem Kopf hast Du zusätzlichen Schutz für Deine Ausflüge an Land. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"headSpecialFall2022WarriorText": "Orkmaske",
"shieldSpecialFall2022HealerNotes": "Wirf ein Auge auf dieses Kostüm und erzittere. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"headSpecialFall2022WarriorNotes": "Diese Hauer sind hart und scharf genug, um Kürbisse zu durchbohren. GRAAA! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"headSpecialFall2022MageText": "Harpyienmaske",
"headSpecialFall2022HealerText": "Beobachtermaske",
"headSpecialFall2022HealerNotes": "Irgendwo im Innern liegt Schönheit verborgen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"headMystery202210Text": "Bedrohliche Schlange Helm",
"headMystery202210Notes": "Diese schuppige Kapuze wird sicherlich Deine To-Do Liste in die Unterwerfung ängstigen! Gewährt keinen Attributbonus. Oktober 2022 Abonnentengegenstand.",
"shieldSpecialFall2022HealerText": "Linkes Beobachterauge",
"eyewearArmoireComedyMaskText": "Komödienmaske",
"eyewearArmoireTragedyMaskText": "Tragödienmaske",
"armorSpecialFall2022HealerNotes": "Wie viele Beobachter könnte ein Beobachter beobachten, wenn ein Beobachter Beobachter beobachten könnte? Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"headSpecialFall2022MageNotes": "Zieh andere in Deinen Bann und locke sie zu Dir hin mit dieser magischen Maidenmaske. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2022 Herbstausrüstung.",
"eyewearArmoireComedyMaskNotes": "Heiter! Eine malerische Maske für Dein fröhlich' Herz, spielend, Freude verkündend, Heiterkeit und Frohsinn auf der Bühne ausstrahlend. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Theatermaskenset (Gegenstand 1 von 2).",
"eyewearArmoireTragedyMaskNotes": "Ach! Eine schwere Maske für Deinen armen Darsteller, stolzierend, sich grämend, und auf der Bühne Leid und Kummer ausdrückend. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Theatermaskenset (Gegenstand 2 von 2).",
"armorArmoireSheetGhostCostumeText": "Bettuch-Geist-Kostüm",
"weaponMystery202211Text": "Blitzbeschwörer Stab",
"weaponMystery202211Notes": "Bündle die massive Macht eines Blitzgewitters mit diesem Stab. Gewährt keinen Attributbonus. November 2022 Abonnentengegenstand.",
"armorArmoireSheetGhostCostumeNotes": "Boo! Das ist das gruseligste Kostüm in Habitica, also geh vernünftig damit um … und gib Acht, dass Du nicht stolperst. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Unabhängiger Gegenstand.",
"headMystery202211Text": "Blitzbeschwörer Hut",
"headMystery202211Notes": "Sei vorsichtig mit diesem blitzenden Hut, er kann einen sehr schockierenden Eindruck bei Deinen Bewunderern hinteralssen! Gewährt keinen Attributbonus. November 2022 Abonnentengegenstand.",
"weaponArmoireMagicSpatulaText": "Magischer Pfannenwender",
"weaponArmoireMagicSpatulaNotes": "Schau zu, wie Dein Essen durch die Luft fliegt und sich überschlägt. Du hast den Rest des Tages Glück wenn es dreimal magisch überschlägt, bevor es wieder am Pfannenwender landet. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Küchenwerkzeugset (Gegenstand 1 von 2).",
"shieldArmoireBubblingCauldronText": "Übersprudelnder Kessel",
"shieldArmoireBubblingCauldronNotes": "Der perfekte Kessel, um einen Produktivitätstrank zu brühen oder eine würzige Suppe zu kochen. Um genau zu sein gibt es zwischen diesen beiden kaum einen Unterschied! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Küchenwerkzeugset (Gegenstand 2 von 2)."
}
+53 -16
View File
@@ -20,8 +20,8 @@
"dataTool": "Werkzeug zur Datenanzeige",
"resources": "Ressourcen",
"communityGuidelines": "Community-Richtlinien",
"bannedWordUsed": "Hoppla! Es sieht so aus, als würde dieser Beitrag ein Schimpfwort oder einen religiösen Fluch enthalten, oder sich auf Suchtstoffe oder nicht-jugendfreie Themen beziehen (<%= swearWordsUsed %>). Habitica hat Spieler unterschiedlichster Herkunft, weswegen wir unseren Chat besonders sauber halten wollen. Du kannst Deine Nachricht gerne überarbeiten, um sie doch noch posten zu können!",
"bannedSlurUsed": "Dein Beitrag enthielt unangebrachten Inhalt und Deine Chat Privilegien wurden Dir entzogen.",
"bannedWordUsed": "Hoppla! Es sieht so aus, als würde dieser Beitrag ein Schimpfwort enthalten, oder sich auf Suchtstoffe oder nicht-jugendfreie Themen beziehen (<%= swearWordsUsed %>). Habitica achtet darauf, unsere Chats frei von diesen Dingen zu halten. Du kannst Deine Nachricht gerne überarbeiten und sie wieder posten! Die betroffenen Wörter musst Du allerdings löschen, nicht einfach zensieren.",
"bannedSlurUsed": "Dein Beitrag enthielt unangebrachte Inhalte, daher wurden Dir Deine Chat-Privilegien entzogen.",
"party": "Party",
"usernameCopied": "Benutzername in die Zwischenablage kopiert.",
"createGroupPlan": "Erstellen",
@@ -107,7 +107,7 @@
"copyMessageAsToDo": "Nachricht als To-Do übernehmen",
"copyAsTodo": "Als To-Do kopieren",
"messageAddedAsToDo": "Nachricht als To-Do übernommen.",
"leaderOnlyChallenges": "Nur der Gruppenleiter kann Herausforderungen erstellen",
"leaderOnlyChallenges": "Nur die Gruppenleitung kann Herausforderungen erstellen",
"sendGift": "Ein Geschenk schicken",
"inviteFriends": "Lade Freunde ein",
"inviteByEmail": "Lade per E-Mail ein",
@@ -123,7 +123,7 @@
"sendGiftCost": "Insgesamt: $<%= cost %> USD",
"sendGiftFromBalance": "Vom Saldo",
"sendGiftPurchase": "Kauf",
"sendGiftMessagePlaceholder": "Persönliche Nachricht (optional)",
"sendGiftMessagePlaceholder": "Füge eine Geschenknachricht hinzu",
"sendGiftSubscription": "<%= months %> Monat(e): $<%= price %> USD",
"gemGiftsAreOptional": "Bitte nimm zur Kenntnis, dass Habitica niemals von Dir verlangen wird, anderen Spielern Edelsteine zu schenken. Bei anderen Spielern um Edelsteine zu betteln ist ein <strong>Verstoss gegen die Community-Richtlinien</strong>, und jedes Vorkommnis sollte bei <%= hrefTechAssistanceEmail %> gemeldet werden.",
"battleWithFriends": "Besiege mit Freunden Monster",
@@ -163,9 +163,9 @@
"onlyGroupLeaderCanEditTasks": "Nicht berechtigt, Aufgaben zu bearbeiten!",
"onlyGroupTasksCanBeAssigned": "Nur Team-Aufgaben können verteilt werden",
"assignedTo": "Zugewiesen an",
"assignedToUser": "<strong><%- userName %></strong> zugewiesen",
"assignedToMembers": "<strong><%= userCount %></strong> Mitgliedern zugewiesen",
"assignedToYouAndMembers": "Dir und <strong><%= userCount %> Mitliedern</strong> zugewiesen",
"assignedToUser": "Zugewiesen: <strong>@<%- userName %></strong>",
"assignedToMembers": "<%= userCount %> Mitgliedern",
"assignedToYouAndMembers": "<strong>Dir</strong>, <%= userCount %> Mitgliedern",
"youAreAssigned": "Dir zugewiesen",
"taskIsUnassigned": "Diese Aufgabe ist niemandem zugewiesen",
"confirmUnClaim": "Bist Du sicher, dass Du diese Aufgabe abgeben möchtest?",
@@ -190,14 +190,14 @@
"needsWork": "Benötigt Arbeit",
"viewRequests": "Anfragen anzeigen",
"groupSubscriptionPrice": "$9 monatlich + $3 pro Monat für jedes weitere Gruppenmitglied",
"groupBenefitsDescription": "Wir haben gerade die Betaversion der Gruppenpläne gestartet! Das Upgrade auf den Gruppenplan schaltet einige einzigartige Funktionen frei, welche die soziale Seite von Habitica verbessern.",
"groupBenefitsDescription": "Wir haben gerade die Beta-Version unserer Gruppenpläne gestartet! Das Upgrade auf einen Gruppenplan schaltet einige einzigartige Funktionen frei, mit denen Du die sozialen Aspekte von Habitika optimal auszunutzen kannst.",
"teamBasedTasks": "Gruppenorientierte Aufgaben",
"cannotDeleteActiveGroup": "Du kannst keine Gruppe mit einem laufenden Abonnement löschen",
"groupTasksTitle": "Gruppen-Aufgabenliste",
"userIsClamingTask": "`<%= username %> beansprucht:` <%= task %>",
"approvalRequested": "Zustimmung erbeten",
"cantDeleteAssignedGroupTasks": "Du kannst Gruppen-Aufgaben, die Dir zugewiesen wurden, nicht löschen.",
"groupPlanUpgraded": "<strong><%- groupName %></strong> wurde auf einen Gruppenplan hochgestuft!",
"groupPlanUpgraded": "<strong><%- groupName %></strong> wurde erfolgreich auf einen Gruppenplan hochgestuft!",
"groupPlanCreated": "<strong><%- groupName %></strong> wurde erstellt!",
"onlyGroupLeaderCanInviteToGroupPlan": "Nur der Gruppenleiter kann Nutzer zu einer Gruppe mit einem Abonnement hinzufügen.",
"paymentDetails": "Zahlungsinformationen",
@@ -273,7 +273,7 @@
"createParty": "Erstelle eine Party",
"inviteMembersNow": "Möchtest Du jetzt Mitglieder einladen?",
"playInPartyTitle": "Spiele Habitica in einer Party!",
"playInPartyDescription": "Bewältige unglaubliche Quests - mit Freunden oder auf Dich allein gestellt. Besiege Monster, erstelle Wettbewerbe und hilf Dir selbst, verantwortungsvoll zu bleiben, indem Du einer Party beitrittst.",
"playInPartyDescription": "Bewältige unglaubliche Quests mit Freunden oder auf Dich allein gestellt. Besiege Monster, erstelle Herausforderungen und hilf Dir selbst, verantwortungsvoll zu bleiben, indem Du einer Party beitrittst.",
"wantToJoinPartyTitle": "Möchtest Du einer Party beitreten?",
"wantToJoinPartyDescription": "Gib Deinen Benutzernamen einem Freund, der bereits in einer Party ist, oder gehe zur <a href='/groups/guild/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'>Party Wanted Guild</a>, um potenzielle Verbündete zu finden!",
"copy": "Kopieren",
@@ -326,19 +326,19 @@
"whatsIncludedGroup": "Was beinhaltet das Abonnement",
"whatsIncludedGroupDesc": "Alle Mitglieder der Gruppe erhalten volle Abonnementvorteile, einschließlich der monatlichen Abonnentengegenstände, der Möglichkeit Edelsteine mit Gold zu kaufen, und das Königliche Purpurfarbene Wolpertinger-Reittier, das exklusiv für Benutzer mit einer Mitgliedschaft im Gruppenplan verfügbar ist.",
"howDoesBillingWork": "Wie funktioniert die Verrechnung?",
"howDoesBillingWorkDesc": "Gruppenleiter erhalten monatlich auf der Grundlage der Gruppenmitgliederzahl eine Gebühr in Rechnung gestellt. Diese Gebühr beinhaltet den Preis von $9 (USD) für das Abonnement des Gruppenleiters, plus $3 USD für jedes weitere Gruppenmitglied. Zum Beispiel: Eine Gruppe von vier Benutzern kostet $18 USD/Monat, da die Gruppe aus 1 Gruppenleiter + 3 Gruppenmitgliedern besteht.",
"howDoesBillingWorkDesc": "Auf Grundlage der Mitgliederzahl wird der Gruppenleitung monatlich eine Gebühr in Rechnung gestellt. Diese Gebühr beinhaltet den Preis von $9 (USD) für das Abonnement der Gruppenleitung, sowie $3 USD für jedes weitere Gruppenmitglied. Zum Beispiel: Eine Gruppe von vier Personen kostet $18 USD/Monat, da die Gruppe aus 1 Gruppenleitung + 3 weiteren Mitglieder besteht.",
"howToAssignTask": "Wie weise ich eine Aufgabe zu?",
"howToAssignTaskDesc": "Weise eine Aufgabe einem oder mehreren Gruppenmitgliedern (einschließlich des Gruppenleiters oder dem Organisator selbst) zu, indem Du ihre Benutzernamen in das Feld \"Zuweisen an\" im Bereich \"Aufgabe erstellen\" eingibst. Du kannst eine Aufgabe auch jemandem zuzuweisen, nachdem Du sie erstellt hast, indem du die Aufgabe bearbeitest und den Benutzer im Feld \"Zuweisen an\" hinzufügst!",
"howToAssignTaskDesc": "Weise eine Aufgabe einem oder mehreren Gruppenmitgliedern (einschließlich des Gruppenleiters oder dem Organisator selbst) zu, indem Du ihre Benutzernamen in das Feld \"Zuweisen an\" im Bereich \"Aufgabe erstellen\" einträgst. Du kannst eine Aufgabe auch jemandem zuzuweisen, nachdem Du sie erstellt hast, indem du die Aufgabe bearbeitest und den entsprechenden Namen im Feld \"Zuweisen an\" hinzufügst!",
"howToRequireApproval": "Wie markiert man eine Aufgabe mit \"Zustimmung benötigt\"?",
"howToRequireApprovalDesc": "Markiere die \"Zustimmung benötigt\" Einstellung, um eine Aufgabe durch einen Gruppenleiter oder einen Organisator bestätigen zu lassen. Der Benutzer, der die Aufgabe abhakt, erhält seine Belohnung für die Erledigung erst, nachdem die Zustimmung erteilt wurde.",
"howToRequireApprovalDesc2": "Gruppenleiter und Organisatoren können erledigte Aufgaben direkt von der Aufgabenliste oder aus dem Benachrichtigungs-Panel bestätigen.",
"howToRequireApprovalDesc": "Wähle die Option \"Zustimmung benötigt\" aus, um eine Aufgabe durch die Gruppenleitung oder die Organisation bestätigen zu lassen. Benutzende, welche die Aufgabe abhaken, erhalten ihre Belohnung hierfür erst, nachdem die Zustimmung erteilt wurde.",
"howToRequireApprovalDesc2": "Gruppenleitung und Organisation können erledigte Aufgaben direkt von der Aufgabenliste oder aus dem Benachrichtigungs-Panel bestätigen.",
"whatIsGroupManager": "Was ist ein Gruppen-Organisator?",
"whatIsGroupManagerDesc": "Gruppen-Organisatoren haben keinen Zugriff auf die Rechnungs-Details einer Gruppe, aber sie können verteilte Aufgaben für Gruppenmitglieder erstellen, zuweisen und bestätigen. Die Beförderung zum Organisator erfolgt in der Mitgliederliste.",
"goToTaskBoard": "Gehe zur Aufgabenliste",
"sharedCompletion": "Fertigstellungsbedingung",
"recurringCompletion": "Keine - Gruppenaufgabe kann nicht fertiggestellt werden",
"singleCompletion": "Einzeln - Ist erledigt sobald ein zugeteilter Benutzer abschliesst",
"allAssignedCompletion": "Alle - Ist erledigt sobald alle zugeteilten Benutzer abschliessen",
"allAssignedCompletion": "Alle Ist erledigt, sobald alle zugeteilten Benutzer abschliessen",
"pmReported": "Danke dass Du diese Nachricht gemeldet hast.",
"suggestedGroup": "Vorgeschlagen weil Du bei Habitica neu bist.",
"taskClaimed": "<%- userName %> hat die Aufgabe <span class=\"notification-bold\"><%- taskText %></span> übernommen.",
@@ -380,5 +380,42 @@
"viewDetails": "Details ansehen",
"upgradeToGroup": "Auf Gruppenplan upgraden",
"sendGiftTotal": "Insgesamt:",
"chatTemporarilyUnavailable": "Chat aktuell nicht verfügbar. Bitte versuche es später erneut."
"chatTemporarilyUnavailable": "Chat aktuell nicht verfügbar. Bitte versuche es später erneut.",
"assignTo": "Zugewiesen an",
"newGroupsEnjoy": "Wir hoffen, Dir gefallen die neuen Gruppenpläne!",
"groupUseDefault": "Wähle eine Antwort",
"createGroup": "Erstelle eine Gruppe",
"groupUse": "Was beschreibt den Zweck Deiner Gruppe am Besten?*",
"groupParentChildren": "Eltern(teile), die Aufgaben für ihre Kinder erstellen",
"groupCouple": "Ein Paar, das sich Aufgaben teilt",
"groupFriends": "Freunde, die sich Aufgaben teilen",
"groupCoworkers": "Arbeitskollegen, die sich Aufgaben teilen",
"groupManager": "Ein Manager, der Aufgaben für seine Mitarbeiter erstellt",
"groupTeacher": "Ein Lehrer, der Aufgaben für seine Schüler oder Studierenden erstellt",
"nameStar": "Name*",
"descriptionOptional": "Beschreibung",
"descriptionOptionalText": "Füge eine Beschreibung hinzu",
"nameStarText": "Füge einen Titel hinzu",
"nextPaymentMethod": "Weiter: Zahlungsmethode",
"dayStart": "<strong>Tageswechsel</strong>: <%= startTime %>",
"viewStatus": "Status",
"newGroupsWhatsNew": "Schau nach, was neu ist:",
"newGroupsBullet01": "Interagiere mit Aufgaben direkt vom Geteilte-Aufgaben-Brett",
"newGroupsBullet02": "Jeder kann eine unzugewiesene Aufgabe fertigstellen",
"youEmphasized": "<strong>Du</strong>",
"newGroupsBullet06": "Die Aufgabenstatusanzeige ermöglicht Dir schnell zu sehen, wer eine Aufgabe als erledigt markiert hat",
"newGroupsBullet08": "Der Gruppenleiter und die Gruppenmanager können schnell Aufgaben vom oberen Ende der Aufgabenlisten hinzufügen",
"sendGiftLabel": "Möchtest Du eine Geschenknachricht senden?",
"lastCompleted": "Zuletzt fertiggestellt",
"newGroupsBullet03": "Geteilte Aufgaben werden für alle zur selben Zeit zurückgesetzt, um die Zusammenarbeit zu erleichtern",
"newGroupsBullet04": "Geteilte Tagesaufgaben fügen keinen Schaden zu, wenn sie nicht erledigt werden oder im Gestrige-Aktivitäten-festhalten-Fenster erscheinen",
"newGroupsBullet07": "Schalte ein oder aus, dass geteilte Aufgaben auf Deiner persönlichen Aufgabenanzeige erscheinen",
"newGroupsBullet10": "Zuweisungsstatus bestimmt Abschlussbedingung:",
"newGroupsVisitFAQ": "Besuche die <a href='/static/faq#group-plans' target='_blank'>Häufigen Fragen</a> aus dem Hilfe-Dropdownmenü heraus für mehr Informationen.",
"newGroupsBullet05": "Die Farbe geteilter Aufgaben baut sich ab, wenn sie nicht erledigt werden, was das Verfolgen des Fortschritts erleichtert",
"newGroupsWelcome": "Wilkommen beim neuen Geteilte-Aufgaben-Brett!",
"newGroupsBullet10a": "<strong>Weise eine Aufgabe niemandem zu</strong>, wenn sie von jedem Mitglied abgeschlossen werden kann",
"newGroupsBullet10b": "<strong>Weise eine Aufgabe einem Mitglied zu</strong>, damit sie nur von diesem abgeschlossen werden kann",
"newGroupsBullet10c": "<strong>Weise eine Aufgabe mehreren Mitgliedern zu</strong>, wenn sie von allen abgeschlossen werden muss",
"newGroupsBullet09": "Eine geteilte Aufgabe kann als unfertig markiert werden um darauf aufmerksam zu machen, dass daran noch gearbeitet werden muss"
}
+7 -1
View File
@@ -229,5 +229,11 @@
"summer2022MantaRayMageSet": "Mantarochen (Magier)",
"julyYYYY": "Juli <%= year %>",
"octoberYYYY": "Oktober <%= year %>",
"februaryYYYY": "Februar <%= year %>"
"februaryYYYY": "Februar <%= year %>",
"fall2022KappaRogueSet": "Kappa (Schurke)",
"fall2022OrcWarriorSet": "Ork (Krieger)",
"fall2022HarpyMageSet": "Harpyie (Magier)",
"fall2022WatcherHealerSet": "Beobachter (Heiler)",
"gemSaleHow": "Kauf einfach zwischen <%= eventStartMonth %> <%= eventStartOrdinal %>und <%= eventEndOrdinal %> eines der Edelstein-Pakete wie normal und Deinem Konto werden automatisch die zusätzlichen Edelsteine gutgeschrieben. Das heißt insgesamt mehr Edelsteine zum ausgeben, teilen oder ansparen für zukünftige Veröffentlichungen!",
"gemSaleLimitations": "Dieses Sonderangebot gilt nur während der zeitlich beschränkten Aktion. Die Aktion startet am <%= eventStartOrdinal %>. <%= eventStartMonth %> um 8:00 EDT (12:00 UTC) und endet am <%= eventEndOrdinal %>. <%= eventStartMonth %> um 20:00 PM EDT (00:00 UTC). Das Sonderangebot ist nur verfügbar, wenn Du Edelsteine für Dich selbst kaufst."
}
+7 -4
View File
@@ -81,13 +81,13 @@
"newBaileyUpdate": "Neues Update von Bailey!",
"tellMeLater": "Erzähl es mir später",
"dismissAlert": "Als gelesen markieren",
"donateText3": "Als Open-Source-Projekt ist Habitica auf die Hilfe unserer Benutzer angewiesen. Das Geld, was Du für Edelsteine ausgibst, hilft uns dabei unsere Server am Laufen zu halten, ein paar Mitarbeiter zu bezahlen, neue Features zu entwickeln und unseren ehrenamtlichen Programmierern Anreize zu bieten. Vielen Dank für Deine Großzügigkeit!",
"donateText3": "Als Open-Source-Projekt ist Habitica auf die Hilfe unserer Benutzer angewiesen. Das Geld, was Du für Edelsteine ausgibst, hilft uns dabei unsere Server am Laufen zu halten, ein paar Mitarbeiter zu bezahlen, neue Features zu entwickeln und unseren ehrenamtlichen Helferlein Anreize zu bieten.",
"card": "Kreditkarte",
"paymentMethods": "Kauf mit",
"paymentSuccessful": "Die Zahlung war erfolgreich!",
"paymentYouReceived": "Du hast erhalten:",
"paymentYouSentGems": "Du hast <strong><%- name %></strong> geschickt:",
"paymentYouSentSubscription": "Du hast <strong><%- name %></strong> ein <%= months %>-Monate-Abo für Habitica geschickt.",
"paymentYouSentSubscription": "Du hast <strong><%- name %></strong><br> ein <%= months %>-Monate-Abo für Habitica geschickt.",
"paymentSubBilling": "Dein Abonnement wird mit <strong>$<%= amount %></strong> alle <strong><%= months %> Monate</strong> verrechnet.",
"success": "Erfolg!",
"classGear": "Klassenausrüstung",
@@ -128,8 +128,11 @@
"nMonthsSubscriptionGift": "<%= nMonths %> Monat(e) Abonnement (Geschenk)",
"nGemsGift": "<%= nGems %> Edelsteine (Geschenk)",
"limitedAvailabilityMinutes": "Für <%= minutes %>min <%= seconds %>sek verfügbar",
"limitedAvailabilityHours": "Für <%= days %>t <%= hours %>std und <%= minutes %>min verfügbar",
"limitedAvailabilityHours": "Für t <%= hours %>std und <%= minutes %>min verfügbar",
"limitedAvailabilityDays": "Für <%= days %>t <%= hours %>std und <%= minutes %>min verfügbar",
"amountExp": "<%= amount %> Exp",
"newStuffPostedOn": "Veröffentlicht am <%= publishDate %> um <%= publishTime %>"
"newStuffPostedOn": "Veröffentlicht am <%= publishDate %> um <%= publishTime %>",
"helpSupportHabitica": "Hilf Habitica zu unterstützen",
"groupsPaymentSubBilling": "Dein nächstes Rechnungsdatum ist <strong><%= renewalDate %></strong>.",
"groupsPaymentAutoRenew": "Dieses Abonnement läuft automatisch weiter, bis es gekündigt wird. Du kannst es im Gruppen-Abrechnungs-Tab kündigen."
}
+5 -5
View File
@@ -31,13 +31,13 @@
"collected": "Gesammelt",
"abort": "Abbrechen",
"leaveQuest": "Quest verlassen",
"sureLeave": "Willst du die Quest wirklich abbrechen? Dein kompletter Questfortschritt wird verloren gehen.",
"sureLeave": "Willst Du die Quest wirklich abbrechen? Dein ganzer Fortschritt wird verloren gehen.",
"mustComplete": "Du musst vorher die <%= quest %> Quest abschließen.",
"mustLvlQuest": "Du musst Level <%= level %> sein um diese Quest zu erwerben!",
"unlockByQuesting": "Um diese Quest freizuschalten, musst Du erst <%= title %> abschließen.",
"questConfirm": "Bist du sicher, dass du diese Quest starten willst? Nicht alle Mitspieler deiner Party haben die Einladung zu dieser Quest akzeptiert. Quests starten automatisch sobald alle Mitspieler die Einladung angenommen oder abgelehnt haben.",
"questConfirm": "Bist Du sicher, dass Du diese Quest starten willst? Nicht alle Mitglieder Deiner Party haben die Einladung zu dieser Quest akzeptiert. Quests starten automatisch sobald alle Mitspieler die Einladung beantwortet haben.",
"sureCancel": "Bist Du sicher, dass Du diese Quest abbrechen willst? Wenn Du die Quest abbrichst werden alle bereits akzeptierten und noch unbeantworteten Einladungen zurückgenommen und die Questschriftrolle wird an ihren Besitzer zurückgegeben.",
"sureAbort": "Bist Du sicher, dass Du diese Mission abbrechen willst? Aller Questfortschritt wird verloren gehen. Die Questschriftrolle wird dem Besitzer zurückgegeben.",
"sureAbort": "Bist Du sicher, dass Du diese Quest abbrechen willst? Der ganze Fortschritt geht verloren und die Questschriftrolle wird dem Besitzer zurückgegeben.",
"doubleSureAbort": "Bist Du wirklich, wirklich sicher? Sei ganz sicher, dass sie Dich nicht für immer hassen werden!",
"bossRageTitle": "Raserei",
"bossRageDescription": "Wenn sich dieser Balken füllt, wird der Boss eine Spezialattacke ausführen!",
@@ -90,7 +90,7 @@
"selectQuest": "Wähle eine Quest aus",
"noQuestToStartTitle": "Kannst Du keine Quest finden, die du beginnen möchtest?",
"membersParticipating": "<%= accepted %> / <%= invited %> Mitglieder nehmen teil",
"yourPartyIsNotOnQuest": "Deine Gruppe befindet sich nicht auf einer Quest",
"yourPartyIsNotOnQuest": "Deine Party befindet sich nicht auf einer Quest",
"questOwner": "Questbesitzer",
"cancelQuest": "Quest abbrechen",
"backToSelection": "Zurück zur Questauswahl",
@@ -98,5 +98,5 @@
"newItem": "Neuer Gegenstand",
"ownerOnly": "Nur der Besitzer",
"questItemsPending": "<%= amount %> Gegenstände ausstehend",
"selectQuestModal": "Such dir eine Quest aus"
"selectQuestModal": "Such Dir eine Quest aus"
}
+4 -4
View File
@@ -184,7 +184,7 @@
"questTRexCompletion": "Der wilde Dinosaurier hört endlich zu toben und zu randalieren auf, setzt sich ruhig hin und fängt an sich mit den riesigen Hähnen anzufreunden. @Urse strahlt ihn an. \"Sie sind doch gar keine so schlimmen Haustiere! Sie brauchen einfach nur ein bisschen Disziplin. Hier, nimm Dir ein paar Tyrannosaurus-Eier mit!\"",
"questTRexBoss": "Fleischerner Tyrannosaurus",
"questTRexUndeadText": "Der Dinosaurier aus den Tiefen der Erde",
"questTRexUndeadNotes": "Während die uralten Dinosaurier der Stoïstillen Steppen durch HabitCity wandern, hört man auf ein mal einen angstvollen Schrei aus Richtung des Grand Museums. @Baconsaur ruft: \"Das Tyrannosaurus-Skelett im Museum fängt an sich zu bewegen! Es muss die Anwesenheit seiner Artgenossen gewittert haben!\" Das knöcherne Biest bleckt seine monströsen Zähne und klappert auf Dich zu. Wie wirst Du in der Lage sein eine Kreatur zu besiegen, die bereits tot ist? Du wirst schnell zuschlagen müssen, bevor sie sich selbst heilt!",
"questTRexUndeadNotes": "Während die uralten Dinosaurier der Stoïstillen Steppen durch Habit City wandern, hört man auf ein mal einen angstvollen Schrei aus Richtung des Grand Museums. @Baconsaur ruft: \"Das Tyrannosaurus-Skelett im Museum fängt an sich zu bewegen! Es muss die Anwesenheit seiner Artgenossen gewittert haben!\" Das knöcherne Biest bleckt seine monströsen Zähne und klappert auf Dich zu. Wie wirst Du in der Lage sein eine Kreatur zu besiegen, die bereits tot ist? Du wirst schnell zuschlagen müssen, bevor sie sich selbst heilt!",
"questTRexUndeadCompletion": "Die glühenden Augen des Tyrannosaurus werden dunkel und trüb und er begibt sich zurück zu seinem Sockel. Alle atmen vor Erleichterung auf. \"Seht nur!\", sagt @Baconsaur, \"einige der versteinerten Eier sind plötzlich wie neu! Vielleicht werden sie ja für Dich ausschlüpfen.\"",
"questTRexUndeadBoss": "Skelettierter Tyrannosaurus",
"questTRexUndeadRageTitle": "Knöcherne Heilung",
@@ -513,7 +513,7 @@
"questHippoDropHippoEgg": "Nilpferd (Ei)",
"questHippoUnlockText": "Schaltet den Kauf von Nilpferdeiern auf dem Marktplatz frei",
"farmFriendsText": "\"Farmfreunde\" Quest-Paket",
"farmFriendsNotes": "Beinhaltet 'Die Muhtantische Kuh', 'Reite die Nacht-Mähre', und 'Der Donner-Bock'. Verfügbar bis zum 31. August.",
"farmFriendsNotes": "Beinhaltet 'Die Muhtantische Kuh', 'Reite die Nacht-Mähre', und 'Der Donner-Bock'. Verfügbar bis zum 30. September.",
"witchyFamiliarsText": "\"Hexenhafte Haustiere\" Quest-Paket",
"witchyFamiliarsNotes": "Beinhaltet 'Der Rattenkönig', 'Die eisige Arachnoide', und 'Sumpf des Chaos-Froschs'. Verfügbar bis zum 31. Oktober.",
"questGroupLostMasterclasser": "Geheimnis der Klassenmeister",
@@ -659,7 +659,7 @@
"questSilverUnlockText": "Schaltet den Kauf von Silbernen Schlüpfelixieren auf dem Marktplatz frei",
"questRobotCompletion": "Als @Rev und der Rechenschafts-Buddy die letzte Schraube einsetzen, erwacht die Zeitmaschine zum Leben. @FolleMente und @McCoyly springen an Bord. „Danke für die Hilfe! Wir sehen uns in der Zukunft! Übrigens, die hier sollen Dir bei Deiner nächsten Erfindung helfen!\" Damit verschwinden die Zeitreisenden, aber im Wrack des alten Produktivitätsstabilisators verbleiben drei Eier mit Uhrwerken. Vielleicht sind das die entscheidenden Komponenten für eine neue Produktionslinie von Rechenschafts-Buddys!",
"questRobotNotes": "Im Max Kapazitäten-Labor verleiht @Rev der neuesten Erfindung, einem robotischen Rechenschafts-Buddy , den letzten Schliff, als plötzlich ein seltsames Metallfahrzeug in einer Rauchwolke erscheint, nur wenige Zentimeter vom Fluktuationsdetektor des Roboters entfernt! Die Insassen, zwei seltsame, in Silber gekleidete Gestalten, verlassen ihr Gefährt und nehmen ihre Weltraumhelme ab, wobei sie sich als @FolleMente und @McCoyly offenbaren. <br><br>„Ich postuliere, dass unsere Produktivitätsimplementierung eine Anomalie aufwies“, meint @FolleMente verlegen. <br><br>@ McCoyly verschränkt ihre Arme. „Das bedeutet, dass sie es versäumt haben, ihre Tagesaufgaben zu erledigen, was, wie ich postuliere, zur Zersetzung unseres Produktivitätsstabilisators geführt hat. Dabei handelt es sich um eine wesentliche Komponente für Zeitreisen, die zwingend Konsistenz benötigt, um richtig funktionieren zu können. Unsere Leistungen befeuern unsere Bewegung durch Zeit und Raum! Ich habe keine Zeit, um es genauer zu erklären, @Rev. Du wirst es in 37 Jahren entdecken oder vielleicht auch Deine Verbündeten, die Mysteriösen Zeitreisenden. Kannst Du uns vorerst dabei helfen, unsere Zeitmachine zu reparieren?\"",
"rockingReptilesNotes": "Beinhaltet den \"Insta-Gator\", \"Die Schlange der Ablenkung\" und den \"Veloci-Rpper\". Verfügbar bis zum 30. September.",
"rockingReptilesNotes": "Beinhaltet den \"Insta-Gator\", \"Die Schlange der Ablenkung\" und den \"Veloci-Rpper\". Verfügbar bis zum 30. November.",
"rockingReptilesText": "\"Rockendes Reptilien\"-Quest-Bundle",
"questRobotUnlockText": "Schaltet den Kauf von Robotereiern auf dem Markplatz frei",
"questRobotDropRobotEgg": "Roboter (Ei)",
@@ -700,7 +700,7 @@
"questFluoriteBoss": "Fluorit-Elementar",
"questFluoriteText": "Ein leuchtender, furchteinflößender Fluorit",
"questFluoriteCompletion": "Während dem Kampf scheint die kristallene Kreatur mehr und mehr durch eure Lichter abgelenkt. “Das glitzert…” murmelt sie.<br><br>“Natürlich!” ruft @nirbhao. “Das muss ein Fluorit-Elemental sein. Die wollen nur ein wenig Licht, damit sie glimmen können. Lasst uns ihm helfen, so richtig hell zu scheinen.”<br><br>Das Elemental kichert glücklich und glimmt immer heller unter euren Fackeln und den magischen Glanzlichtern. Es scheint glücklich zu sein, wieder scheinen zu können, so dass es euch zu einem reichen Lager von Fluoritkristallen führt.<br><br>“Das ist die perfekte Zutat für ein neues Schlüpfelixier” findet @nirbhao. “Eines, das unsere Haustiere gerade so hell wie unseren neuen fluoreszierenden Freund hier scheinen lassen wird.”",
"questFluoriteNotes": "Ungewöhnliche Mineralien sind sehr gefragt dieser Tage, deshalb bist Du mit einigen Freunden auf der Suche nach aufregenden Erzen tief in die Minen der Mäander-Berge gewandert. Es ist eine lange, langweilige Expedition, bis @-Tyr- über einen grossen Stein stolpert, der genau in der Mitte des Tunnels liegt.<br><br>“Das hier sollte etwas Licht in die Sache bringen” sagt @nirbhao und zaubert eine Lichtkugel hervor.<br><br>Ein warmes Leuchten erfüllt den Tunnel, doch nun passiert etwas seltsames mit dem Stein. Vom magischen Licht zehrend, fängt er in fluoreszierendem Blau, Grün und Violett zu leuchten an. Dann richtet er sich in einer halbwegs humanoiden Form auf, inklusive glühend roten Augen, mit denen er Dich fixiert! Sofort beginnt ihr, blitzende Zaubersprüche zu sprechen und glänzende Waffen zu schwingen.",
"questFluoriteNotes": "Ungewöhnliche Mineralien sind sehr gefragt dieser Tage, deshalb bist Du mit einigen Freunden auf der Suche nach aufregenden Erzen tief in die Minen des Mäandergebirges gewandert. Es ist eine lange, langweilige Expedition, bis @-Tyr- über einen grossen Stein stolpert, der genau in der Mitte des Tunnels liegt.<br><br>“Das hier sollte etwas Licht in die Sache bringen” sagt @nirbhao und zaubert eine Lichtkugel hervor.<br><br>Ein warmes Leuchten erfüllt den Tunnel, doch nun passiert etwas seltsames mit dem Stein. Vom magischen Licht zehrend, fängt er in fluoreszierendem Blau, Grün und Violett zu leuchten an. Dann richtet er sich in einer halbwegs humanoiden Form auf, inklusive glühend roten Augen, mit denen er Dich fixiert! Sofort beginnt ihr, blitzende Zaubersprüche zu sprechen und glänzende Waffen zu schwingen.",
"questWindupUnlockText": "Schaltet den Kauf von Aufziehbaren Schlüpfelixieren auf dem Marktplatz frei",
"questWindupDropWindupPotion": "Aufziehbares Schlüpfelixier",
"questWindupText": "Zähme die zankenden Zahnräder",
+1 -1
View File
@@ -8,7 +8,7 @@
"rebirthOrb": "Hat eine Sphäre der Wiedergeburt verwendet um noch einmal von vorne zu beginnen, nachdem Level <%= level %> erreicht wurde.",
"rebirthOrb100": "Hat eine Sphäre der Wiedergeburt verwendet um noch einmal von vorne zu beginnen, nachdem Level 100 oder höher erreicht wurde.",
"rebirthOrbNoLevel": "Hat eine Sphäre der Wiedergeburt verwendet um noch einmal von vorne zu beginnen.",
"rebirthPop": "Beginne sofort von vorn mit einem Charakter auf Level 1, aber behalte Erfolge, Sammelgegenstände und Ausrüstung. Deine Aufgaben und ihre Verläufe bleiben erhalten, werden aber auf gelb zurückgesetzt. Deine Strähnen verfallen, ausser für Aufgaben, die von aktiven Herausforderungen oder Gruppenplänen stammen. Gold, Erfahrung, Mana und alle Effekte von Fähigkeiten werden entfernt. All das wird sofort in Kraft treten. Für mehr Informationen schau im Wiki auf der Seite <a href='https://habitica.fandom.com/de/wiki/Sph%C3%A4re_der_Wiedergeburt' target='_blank'>Sphäre der Wiedergeburt</a> nach.",
"rebirthPop": "Beginne sofort von vorn mit einem Charakter auf Level 1, aber behalte Erfolge, Sammelgegenstände und Ausrüstung. Deine Aufgaben und ihre Verläufe bleiben erhalten, werden aber auf gelb zurückgesetzt. Deine Strähnen verfallen, außer für Aufgaben, die von aktiven Herausforderungen oder Gruppenplänen stammen. Gold, Erfahrung, Mana und alle Effekte von Fähigkeiten werden entfernt. All das wird sofort in Kraft treten. Für mehr Informationen, schau im Wiki auf der Seite <a href='https://habitica.fandom.com/de/wiki/Sphäre_der_Wiedergeburt' target='_blank'>Sphäre der Wiedergeburt</a> nach.",
"rebirthName": "Sphäre der Wiedergeburt",
"rebirthComplete": "Du wurdest wiedergeboren!",
"nextFreeRebirth": "<strong><%= days %> Tage</strong> bis zur <strong>KOSTENLOSEN</strong> Sphäre der Wiedergeburt"
+20 -12
View File
@@ -67,7 +67,7 @@
"APITokenWarning": "Wenn Du einen neuen API-Token brauchst (z.B. weil Du ihn versehentlich geteilt hast), schreibe eine E-Mail an <%= hrefTechAssistanceEmail %> mit Deiner Benutzer ID und dem aktuellen Schlüssel. Sobald er zurückgesetzt ist, wirst Du Dich auf der Webseite und der mobilen App aus- und neu einloggen müssen und den Schlüssel in jedem anderen Habitica Tool, das Du nutzt, einstellen müssen.",
"thirdPartyApps": "Apps von Drittanbietern",
"dataToolDesc": "Eine Webseite, die Dir Informationen aus Deinem Habitica-Konto anzeigt, z. B. Statistiken über Deine Aufgaben, Deine Ausrüstung und Fähigkeiten.",
"beeminder": "Beeminder",
"beeminder": "Bienenwächter/in",
"beeminderDesc": "Lass Beeminder Deine Habitica-To-Dos automatisch überwachen. Du kannst Dich verpflichten, eine tägliche oder wöchentliche Mindestanzahl an To-Dos zu erledigen, oder Du kannst Dich engagieren, die Zahl Deiner unerledigten To-Dos allmählich zu verringern. (Unter \"verpflichten\" versteht Beeminder, dass Du echtes Geld zahlst, wenn Du Deine Versprechen nicht hältst! Aber Du kannst auch einfach die ausgefallenen Grafiken von Beeminder bewundern.)",
"chromeChatExtension": "Chrome Chat-Erweiterung",
"chromeChatExtensionDesc": "Die Chrome Chat-Erweiterung für Habitica fügt eine intuitive Chat-Box zu habitica.com hinzu. Damit kannst Du in der Taverne chatten, mit Deiner Party und mit allen Gilden, zu denen Du gehörst.",
@@ -190,24 +190,24 @@
"onlyPrivateSpaces": "Nur in privaten Bereichen",
"everywhere": "Überall",
"bannedSlurUsedInProfile": "Dein Anzeigename oder Über-Text beinhaltete eine Verunglimpfung, daher wurden Dir Deine Chat-Privilegien entzogen.",
"transaction_subscription_perks": "Aus der Abonnement-Vergünstigung",
"transaction_subscription_perks": "<b>Abonnement</b>-Vergünstigung",
"transaction_reroll": "Verstärkungstrank benutzt",
"noGemTransactions": "Du hast noch keine Edelstein-Transaktionen.",
"transactions": "Transaktionen",
"gemTransactions": "Edelstein-Transaktionen",
"hourglassTransactions": "Sanduhr-Transaktionen",
"noHourglassTransactions": "Du hast noch keine Sanduhr-Transaktionen.",
"transaction_buy_money": "Mit Geld erworben",
"transaction_buy_gold": "Mit Gold erworben",
"transaction_spend": "Ausgegeben für",
"transaction_gift_send": "Verschenkt an",
"transaction_gift_receive": "Erhalten von",
"transaction_create_challenge": "Herausforderung erstellt",
"transaction_create_guild": "Gilde erstellt",
"transaction_change_class": "Klasse geändert",
"transaction_buy_money": "Mit Geld <b>erworben</b>",
"transaction_buy_gold": "Mit Gold <b>erworben</b>",
"transaction_spend": "<b>Ausgegeben</b> für",
"transaction_gift_send": "<b>Verschenkt</b> an",
"transaction_gift_receive": "<b>Erhalten</b> von",
"transaction_create_challenge": "Herausforderung <b>erstellt</b>",
"transaction_create_guild": "Gilde <b>erstellt</b>",
"transaction_change_class": "<b>Klasse</b> geändert",
"transaction_rebirth": "Sphäre der Wiedergeburt verwendet",
"transaction_debug": "Debug-Aktion",
"transaction_contribution": "Durch Beiträge",
"transaction_contribution": "Neuer <b>Mitwirker-Rang</b>",
"transaction_release_pets": "Haustiere freigelassen",
"transaction_release_mounts": "Reittiere freigelassen",
"addPasswordAuth": "Passwort hinzufügen",
@@ -218,5 +218,13 @@
"dayStartAdjustment": "Änderung des Tageswechsel",
"passwordSuccess": "Passwort erfolgreich geändert",
"giftSubscriptionRateText": "<strong>$<%= price %> $(USD)</strong> für <strong><%= months %> Monate</strong>",
"transaction_admin_update_balance": "Admin gegeben"
"transaction_admin_update_balance": "<b>Admin</b> gegeben",
"transaction_admin_update_hourglasses": "<b>Admin</b> aktualisiert",
"transaction_create_bank_challenge": "Herausforderung mit Edelsteinen des Gildenbankkontos erstellt",
"passwordIssueLength": "Passwörter müssen zwischen 8 und 64 Zeichen lang sein.",
"timestamp": "Zeitstempel",
"amount": "Menge",
"note": "Anmerkung",
"action": "Aktion",
"remainingBalance": "Übriger Kontostand"
}
+5 -2
View File
@@ -120,7 +120,7 @@
"paypalCanceled": "Dein Abonnement wurde gekündigt",
"choosePaymentMethod": "Wähle Deine Zahlungsmethode",
"buyGemsSupportsDevs": "Der Kauf von Edelsteinen unterstützt die Entwickler und hilft Habitica am Laufen zu halten",
"support": "HILFE",
"support": "Hilfe",
"gemBenefitLeadin": "Was kann man mit Edelsteinen kaufen?",
"gemBenefit1": "Einzigartige und modische Verkleidungen für Deinen Avatar.",
"gemBenefit2": "Hintergründe, die Deinen Avatar in die Welt von Habitica eintauchen lassen!",
@@ -213,5 +213,8 @@
"wantToSendOwnGems": "Willst Du von deinen eigenen Edelsteinen senden?",
"needToPurchaseGems": "Willst Du Edelsteine als Geschenk kaufen?",
"mysterySet202208": "Frecher Pferdeschwanz-Set",
"mysterySet202209": "Magisches Gelehrten-Set"
"mysterySet202209": "Magisches Gelehrten-Set",
"mysterySet202210": "Bedrohliche Schlange Set",
"mysteryset202211": "Blitzbeschwörer Set",
"mysterySet202211": "Blitzbeschwörer Set"
}
+4 -1
View File
@@ -138,5 +138,8 @@
"achievementGroupsBeta2022ModalText":"You and your groups helped Habitica by testing and providing feedback!",
"achievementWoodlandWizard": "Woodland Wizard",
"achievementWoodlandWizardText": "Has hatched all standard colors of forest creatures: Badger, Bear, Deer, Fox, Frog, Hedgehog, Owl, Snail, Squirrel, and Treeling!",
"achievementWoodlandWizardModalText": "You collected all the forest pets!"
"achievementWoodlandWizardModalText": "You collected all the forest pets!",
"achievementBoneToPick": "Bone to Pick",
"achievementBoneToPickText": "Has hatched all the Classic and Quest Skeleton Pets!",
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!"
}
@@ -819,6 +819,30 @@
"backgroundOldPhotoText": "Old Photo",
"backgroundOldPhotoNotes": "Strike a pose in an Old Photo.",
"backgrounds102022": "SET 101: Released October 2022",
"backgroundSpookyRuinsText": "Spooky Ruins",
"backgroundSpookyRuinsNotes": "Explore some Spooky Ruins.",
"backgroundMaskMakersWorkshopText": "Mask Maker's Workshop",
"backgroundMaskMakersWorkshopNotes": "Try on a new face at the Mask Maker's Workshop.",
"backgroundCemeteryGateText": "Cemetery Gate",
"backgroundCemeteryGateNotes": "Haunt a Cemetery Gate.",
"backgrounds112022": "SET 102: Released November 2022",
"backgroundAmongGiantMushroomsText": "Among Giant Mushrooms",
"backgroundAmongGiantMushroomsNotes": "Marvel at Giant Mushrooms.",
"backgroundMistyAutumnForestText": "Misty Autumn Forest",
"backgroundMistyAutumnForestNotes": "Wander through a Misty Autumn Forest.",
"backgroundAutumnBridgeText": "Bridge in Autumn",
"backgroundAutumnBridgeNotes": "Admire the beauty of a Bridge in Autumn.",
"backgrounds122022": "SET 103: Released December 2022",
"backgroundBranchesOfAHolidayTreeText": "Branches of a Holiday Tree",
"backgroundBranchesOfAHolidayTreeNotes": "Frolic on the Branches of a Holiday Tree.",
"backgroundInsideACrystalText": "Inside A Crystal",
"backgroundInsideACrystalNotes": "Peer out from Inside A Crystal.",
"backgroundSnowyVillageText": "Snowy Village",
"backgroundSnowyVillageNotes": "Admire a Snowy Village.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
+4 -4
View File
@@ -66,10 +66,10 @@
"androidFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](https://habitica.fandom.com/wiki/World_Bosses) on the wiki.",
"webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual. You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party. A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change. You can read more about [past World Bosses](https://habitica.fandom.com/wiki/World_Bosses) on the wiki.",
"faqQuestion13": "What is a Group Plan?",
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help.",
"faqQuestion13": "What is a Group Plan?",
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app. On the browser version of Habitica, go to your groups shared task board and turn on the copy tasks toggle. Now all open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction."
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help."
}
+1 -1
View File
@@ -55,7 +55,7 @@
"mobileAndroid": "Android App",
"mobileIOS": "iOS App",
"oldNews": "News",
"newsArchive": "News archive on Wikia (multilingual)",
"newsArchive": "News archive on Fandom (multilingual)",
"setNewPass": "Set New Password",
"password": "Password",
"playButton": "Play",
+29 -1
View File
@@ -482,6 +482,10 @@
"weaponMystery202201Notes": "Unleash a cloud of gold and silver glitter when the clock strikes midnight. Happy New Year! Now who's cleaning this up? Confers no benefit. January 2022 Subscriber Item.",
"weaponMystery202209Text": "Magic Manual",
"weaponMystery202209Notes": "This book will guide you through your journey into magic-making. Confers no benefit. September 2022 Subscriber Item.",
"weaponMystery202211Text": "Electromancer Staff",
"weaponMystery202211Notes": "Harness the awesome power of a lightning storm with this staff. Confers no benefit. November 2022 Subscriber Item.",
"weaponMystery202212Text": "Glacial Wand",
"weaponMystery202212Notes": "The glowing snowflake in this wand holds the power to warm hearts on even the coldest winter night! Confers no benefit. December 2022 Subscriber Item.",
"weaponMystery301404Text": "Steampunk Cane",
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
@@ -665,6 +669,10 @@
"weaponArmoirePushBroomNotes": "Take this tidying tool on your adventures and always be able to sweep a sooty stoop or clear cobwebs from corners. Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Cleaning Supplies Set (Item 1 of 3)",
"weaponArmoireFeatherDusterText": "Feather Duster",
"weaponArmoireFeatherDusterNotes": "Let these fancy feathers fly over all your old objects to make them shine like new. Just beware of the disturbed dust so you dont sneeze! Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Cleaning Supplies Set (Item 2 of 3)",
"weaponArmoireMagicSpatulaText": "Magic Spatula",
"weaponArmoireMagicSpatulaNotes": "Watch your food fly and flip in the air. You get good luck for the day if it magically flips over three times and then lands back on your spatula. Increases Perception by <%= per %>. Enchanted Armoire: Cooking Implements Set (Item 1 of 2).",
"weaponArmoireFinelyCutGemText": "Finely Cut Gem",
"weaponArmoireFinelyCutGemNotes": "What a find! This stunning, precision-cut gem will be the prize of your collection. And it might contain some special magic, just waiting for you to tap into it. Increases Constitution by <%= con %>. Enchanted Armoire: Jeweler Set (Item 4 of 4).",
"armor": "armor",
"armorCapitalized": "Armor",
@@ -1211,6 +1219,10 @@
"armorMystery202204Notes": "Looks like doing your tasks now requires pushing these mysterious buttons! What could they do? Confers no benefit. April 2022 Subscriber Item.",
"armorMystery202207Text": "Jammin' Jelly Armor",
"armorMystery202207Notes": "This armor will have you looking glamorous and gelatinous. Confers no benefit. July 2022 Subscriber Item.",
"armorMystery202210Text": "Ominous Ophidian Armor",
"armorMystery202210Notes": "Try slithering for a change, you may find it's quite an efficient mode of transportation! Confers no benefit. October 2022 Subscriber Item.",
"armorMystery202212Text": "Glacial Dress",
"armorMystery202212Notes": "The universe can be cold, but this charming dress will keep you cozy as you fly. Confers no benefit. December 2022 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
"armorMystery301703Text": "Steampunk Peacock Gown",
@@ -1388,6 +1400,10 @@
"armorArmoireStrawRaincoatNotes": "This woven straw cape will keep you dry and your armor from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).",
"armorArmoireFancyPirateSuitText": "Fancy Pirate Jacket",
"armorArmoireFancyPirateSuitNotes": "Wear this fine jacket well as you organize your ships library or talk it through as a crew. Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Fancy Pirate Set (Item 1 of 3).",
"armorArmoireSheetGhostCostumeText": "Sheet Ghost Costume",
"armorArmoireSheetGhostCostumeNotes": "Boo! This is the scariest costume in all of Habitica, so wear it wisely... and watch your step so you dont trip. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
"armorArmoireJewelersApronText": "Jeweler's Apron",
"armorArmoireJewelersApronNotes": "This heavy-duty apron is just the thing to wear when you feel creative. Best of all, there are dozens of small pockets to hold everything you need. Increases Intelligence by <%= int %>. Enchanted Armoire: Jeweler Set (Item 1 of 4).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -1959,7 +1975,10 @@
"headMystery202207Notes": "Need a hand with your tasks? Will several dozen bioluminescent tentacles do? Confers no benefit. July 2022 Subscriber Item.",
"headMystery202208Text": "Perky Ponytail",
"headMystery202208Notes": "Enjoy showing off this voluminous hair - it can double as a whip in a pinch! Confers no benefit. August 2022 Subscriber Item.",
"headMystery202210Text": "Ominous Ophidian Helm",
"headMystery202210Notes": "This scaly hood will surely terrify your To-Do list into submission! Confers no benefit. October 2022 Subscriber Item.",
"headMystery202211Text": "Electromancer Hat",
"headMystery202211Notes": "Be careful with this powerful hat, its effect on admirers can be quite shocking! Confers no benefit. November 2022 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
"headMystery301405Text": "Basic Top Hat",
@@ -2532,6 +2551,11 @@
"shieldArmoireTreasureMapNotes": "X marks the spot! You never know what youll find when you follow this handy map to fabled treasures: gold, jewels, relics, or perhaps a petrified orange? Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Fancy Pirate Set (Item 3 of 3).",
"shieldArmoireDustpanText": "Dustpan",
"shieldArmoireDustpanNotes": "Have this handy handheld dustpan ready every time you clean. A vanishing spell cast on it means you never have to search for a trash can to empty it into. Increases Intelligence and Constitution by <%= attrs %> each. Enchanted Armoire: Cleaning Supplies Set (Item 3 of 3).",
"shieldArmoireBubblingCauldronText": "Bubbling Cauldron",
"shieldArmoireBubblingCauldronNotes": "The perfect cauldron for brewing up a productivity potion or cooking a savory soup. In fact, there is little difference between the two! Increases Constitution by <%= con %>. Enchanted Armoire: Cooking Implements Set (Item 2 of 2).",
"shieldArmoireJewelersPliersText": "Jeweler's Pliers",
"shieldArmoireJewelersPliersNotes": "They cut, twist, pinch, and more. This tool can help you create whatever you can imagine. Increases Strength by <%= str %>. Enchanted Armoire: Jeweler Set (Item 3 of 4).",
"back": "Back Accessory",
"backBase0Text": "No Back Accessory",
@@ -2800,6 +2824,8 @@
"headAccessoryMystery202203Notes": "Need an extra boost of speed? The tiny decorative wings on this circlet are more powerful than they look! Confers no benefit. March 2022 Subscriber Item.",
"headAccessoryMystery202205Text": "Dusk-Winged Dragon Horns",
"headAccessoryMystery202205Notes": "These dazzling horns are as bright as a desert sunset. Confers no benefit. May 2022 Subscriber Item.",
"headAccessoryMystery202212Text": "Glacial Tiara",
"headAccessoryMystery202212Notes": "Magnify your warmth and friendship to new heights with this ornate golden tiara. Confers no benefit. December 2022 Subscriber Item.",
"headAccessoryMystery301405Text": "Headwear Goggles",
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",
@@ -2903,6 +2929,8 @@
"eyewearArmoireComedyMaskNotes": "Cheerily! Here is a quaint mask for thine happy heart, playing, heralding joy, and expressing merriment and mirth upon the stage. Increases Constitution by <%= con %>. Enchanted Armoire: Theatre Masks Set (Item 1 of 2).",
"eyewearArmoireTragedyMaskText": "Tragedy Mask",
"eyewearArmoireTragedyMaskNotes": "Alas! Here sits a heavy mask for thine poor player, strutting, fretting, and expressing woe and sorrow upon the stage. Increases Intelligence by <%= int %>. Enchanted Armoire: Theatre Masks Set (Item 2 of 2).",
"eyewearArmoireJewelersEyeLoupeText": "Jeweler's Eye Loupe",
"eyewearArmoireJewelersEyeLoupeNotes": "This eye loupe magnifies what youre working on so you can see absolutely every detail. Increases Perception by <%= per %>. Enchanted Armoire: Jeweler Set (Item 2 of 4).",
"twoHandedItem": "Two-handed item."
}
+18 -3
View File
@@ -16,7 +16,7 @@
"wiki": "Wiki",
"resources": "Resources",
"communityGuidelines": "Community Guidelines",
"bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!",
"bannedWordUsed": "Oops! Looks like this post contains a swearword or reference to an addictive substance or adult topic (<%= swearWordsUsed %>). Habitica keeps our chat very clean. Feel free to edit your message so you can post it! You must remove the word, not just censor it.",
"bannedSlurUsed": "Your post contained inappropriate language, and your chat privileges have been revoked.",
"party": "Party",
"usernameCopied": "Username copied to clipboard.",
@@ -132,7 +132,8 @@
"sendGiftTotal": "Total:",
"sendGiftFromBalance": "From Balance",
"sendGiftPurchase": "Purchase",
"sendGiftMessagePlaceholder": "Personal message (optional)",
"sendGiftLabel": "Would you like to send a gift message?",
"sendGiftMessagePlaceholder": "Add a gift message",
"sendGiftSubscription": "<%= months %> Month(s): $<%= price %> USD",
"gemGiftsAreOptional": "Please note that Habitica will never require you to gift gems to other players. Begging people for gems is a <strong>violation of the Community Guidelines</strong>, and all such instances should be reported to <%= hrefTechAssistanceEmail %>.",
"giftMessageTooLong": "The maximum length for gift messages is <%= maxGiftMessageLength %>.",
@@ -215,7 +216,7 @@
"userIsClamingTask": "`<%= username %> has claimed:` <%= task %>",
"approvalRequested": "Approval Requested",
"cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.",
"groupPlanUpgraded": "<strong><%- groupName %></strong> was upgraded to a Group Plan!",
"groupPlanUpgraded": "<strong><%- groupName %></strong> was successfully upgraded to a Group Plan!",
"groupPlanCreated": "<strong><%- groupName %></strong> was created!",
"onlyGroupLeaderCanInviteToGroupPlan": "Only the group leader can invite users to a group with a subscription.",
"paymentDetails": "Payment Details",
@@ -342,7 +343,21 @@
"exampleGroupName": "Example: Avengers Academy",
"exampleGroupDesc": "For those selected to join the training academy for The Avengers Superhero Initiative",
"thisGroupInviteOnly": "This group is invitation only.",
"createGroup": "Create a Group",
"groupUse": "Which best describes the use of your Group?*",
"groupUseDefault": "Choose an answer",
"groupParentChildren": "Parent(s) setting up tasks for children",
"groupCouple": "Couple sharing tasks",
"groupFriends": "Friends sharing tasks",
"groupCoworkers": "Coworkers sharing tasks",
"groupManager": "Manager setting up tasks for employees",
"groupTeacher": "Teacher setting up tasks for students",
"gettingStarted": "Getting Started",
"nameStar": "Name*",
"nameStarText": "Add a title",
"descriptionOptional": "Description",
"descriptionOptionalText": "Add a description",
"nextPaymentMethod": "Next: Payment Method",
"congratsOnGroupPlan": "Congratulations on creating your new Group! Here are a few answers to some of the more commonly asked questions.",
"whatsIncludedGroup": "What's included in the subscription",
"whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.",
+3 -1
View File
@@ -230,5 +230,7 @@
"g1g1HowItWorks": "Type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
"limitations": "Limitations",
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"noLongerAvailable": "This item is no longer available."
"noLongerAvailable": "This item is no longer available.",
"gemSaleHow": "Between <%= eventStartMonth %> <%= eventStartOrdinal %> and <%= eventEndOrdinal %>, simply purchase any Gem bundle like usual and your account will be credited with the promotional amount of Gems. More Gems to spend, share, or save for any future releases!",
"gemSaleLimitations": "This promotion only applies during the limited time event. This event starts on <%= eventStartMonth %> <%= eventStartOrdinal %> at 8:00 AM EDT (12:00 UTC) and will end <%= eventStartMonth %> <%= eventEndOrdinal %> at 8:00 PM EDT (00:00 UTC). The promo offer is only available when buying Gems for yourself."
}
+3 -1
View File
@@ -92,10 +92,12 @@
"paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:",
"paymentYouSentGems": "You sent <strong><%- name %></strong>:",
"paymentYouSentSubscription": "You sent <strong><%- name %></strong> a <%= months %>-months Habitica subscription.",
"paymentYouSentSubscription": "You sent <strong><%- name %></strong><br> a <%= months %> month(s) Habitica subscription.",
"paymentSubBilling": "Your subscription will be billed <strong>$<%= amount %></strong> every <strong><%= months %> months</strong>.",
"groupsPaymentSubBilling": "Your next billing date is <strong><%= renewalDate %></strong>.",
"paymentSubBillingWithMethod": "Your subscription will be billed <strong>$<%= amount %></strong> every <strong><%= months %> months</strong> via <strong><%= paymentMethod %></strong>.",
"paymentAutoRenew": "This subscription will auto-renew until it is canceled. If you need to cancel this subscription, you can do so from your settings.",
"groupsPaymentAutoRenew": "This subscription will auto-renew until it is canceled. If you need to cancel, you can do so from the Group Billing tab.",
"paymentCanceledDisputes": "Weve sent a cancelation confirmation to your email. If you dont see the email, please contact us to prevent future billing disputes.",
"success": "Success!",
"classGear": "Class Gear",
+1 -1
View File
@@ -777,7 +777,7 @@
"questRobotUnlockText": "Unlocks purchasable Robot Eggs in the Market",
"rockingReptilesText": "Rocking Reptiles Quest Bundle",
"rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.' Available until September 30.",
"rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.' Available until November 30.",
"delightfulDinosText": "Delightful Dinos Quest Bundle",
"delightfulDinosNotes": "Contains 'The Pterror-dactyl,' 'The Trampling Triceratops,' and 'The Dinosaur Unearthed.' Available until May 31.",
+19 -12
View File
@@ -178,6 +178,7 @@
"usernameIssueForbidden": "Usernames may not contain restricted words.",
"usernameIssueLength": "Usernames must be between 1 and 20 characters.",
"usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.",
"passwordIssueLength": "Passwords must be between 8 and 64 characters.",
"currentUsername": "Current username:",
"displaynameIssueLength": "Display Names must be between 1 and 30 characters.",
"bannedWordUsedInProfile": "Your Display Name or About text contained inappropriate language.",
@@ -192,26 +193,32 @@
"everywhere": "Everywhere",
"onlyPrivateSpaces": "Only in private spaces",
"bannedSlurUsedInProfile": "Your Display Name or About text contained a slur, and your chat privileges have been revoked.",
"timestamp": "Timestamp",
"amount": "Amount",
"action": "Action",
"note": "Note",
"remainingBalance": "Remaining Balance",
"transactions": "Transactions",
"gemTransactions": "Gem Transactions",
"hourglassTransactions": "Hourglass Transactions",
"noGemTransactions": "You don't have any gem transactions yet.",
"noHourglassTransactions": "You don't have any hourglass transactions yet.",
"transaction_debug": "Debug Action",
"transaction_buy_money": "Bought with money",
"transaction_buy_gold": "Bought with gold",
"transaction_contribution": "Through contribution",
"transaction_spend": "Spent on",
"transaction_gift_send": "Gifted to",
"transaction_gift_receive": "Received from",
"transaction_create_challenge": "Created challenge",
"transaction_buy_money": "<b>Bought</b> with money",
"transaction_buy_gold": "<b>Bought</b> with gold",
"transaction_contribution": "<b>Tier</b> change",
"transaction_spend": "<b>Spent</b> on",
"transaction_gift_send": "<b>Gifted</b> to",
"transaction_gift_receive": "<b>Received</b> from",
"transaction_create_challenge": "<b>Created</b> challenge",
"transaction_create_bank_challenge": "<b>Created</b> bank challenge",
"transaction_create_bank_challenge": "Created bank challenge",
"transaction_create_guild": "Created guild",
"transaction_change_class": "Changed class",
"transaction_create_guild": "<b>Created</b> guild",
"transaction_change_class": "<b>Class</b> change",
"transaction_rebirth": "Used Orb of Rebirth",
"transaction_release_pets": "Released pets",
"transaction_release_mounts": "Released mounts",
"transaction_reroll": "Used Fortify Potion",
"transaction_subscription_perks": "From subscription perk",
"transaction_admin_update_balance": "Admin given"
"transaction_subscription_perks": "<b>Subscription</b> perk",
"transaction_admin_update_balance": "<b>Admin</b> given",
"transaction_admin_update_hourglasses": "<b>Admin</b> updated"
}
@@ -142,6 +142,9 @@
"mysterySet202207": "Jammin' Jelly Set",
"mysterySet202208": "Perky Ponytail Set",
"mysterySet202209": "Magical Scholar Set",
"mysterySet202210": "Ominous Ophidian Set",
"mysterySet202211": "Electromancer Set",
"mysterySet202212": "Glacial Guardian Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "an' th'",
"chores": "Tasks fer ye chambers",
"clearBrowserData": "Clear yer Browser Data",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Add-ons n' Extensions</a>",
"communityExtensions": "Add-ons n' Extensions",
"communityFacebook": "Face-log",
"companyAbout": "How It Be Workin'",
"companyBlog": "Blog",
+16 -1
View File
@@ -126,5 +126,20 @@
"achievementShadyCustomerModalText": "You colleted all the Shade Pets!",
"achievementShadeOfItAll": "The Shade of It All",
"achievementShadeOfItAllText": "Has tamed all Shade Mounts.",
"achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!"
"achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!",
"achievementReptacularRumble": "Reptacular Rumble",
"achievementReptacularRumbleModalText": "You collected all the reptile pets!",
"achievementReptacularRumbleText": "Has hatched all the standard colours of reptile pets: Alligator, Pterodactyl, Snake, Triceratops, Turtle, Tyrannosaurus Rex, and Velociraptor!",
"achievementBirdsOfAFeather": "Birds of a Feather",
"achievementBirdsOfAFeatherModalText": "You collected all the flying pets!",
"achievementBirdsOfAFeatherText": "Has hatched all standard colours of flying pets: Flying Pig, Owl, Parrot, Pterodactyl, Gryphon, Falcon, Peacock and Rooster!",
"achievementGroupsBeta2022": "Interactive Beta Tester",
"achievementGroupsBeta2022Text": "You and your group provided invaluable feedback to help Habitica test.",
"achievementGroupsBeta2022ModalText": "You and your groups helped Habitica by testing and providing feedback!",
"achievementWoodlandWizard": "Woodland Wizard",
"achievementWoodlandWizardText": "Has hatched all standard colours of forest creatures: Badger, Bear, Deer, Fox, Frog, Hedgehog, Owl, Snail, Squirrel, and Treeling!",
"achievementWoodlandWizardModalText": "You collected all the forest pets!",
"achievementBoneToPick": "Bone to Pick",
"achievementBoneToPickText": "Has hatched all the Classic and Quest Skeleton Pets!",
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!"
}
@@ -1,14 +1,13 @@
{
"tavernCommunityGuidelinesPlaceholder": "Friendly reminder: this is an all-ages chat, so please keep content and language appropriate! Consult the Community Guidelines in the sidebar if you have questions.",
"lastUpdated": "Last updated:",
"commGuideHeadingWelcome": "Welcome to Habitica!",
"commGuidePara001": "Greetings, adventurer! Welcome to Habitica, the land of productivity, healthy living, and the occasional rampaging gryphon. We have a cheerful community full of helpful people supporting each other on their way to self-improvement. To fit in, all it takes is a positive attitude, a respectful manner, and the understanding that everyone has different skills and limitations -- including you! Habiticans are patient with one another and try to help whenever they can.",
"commGuidePara002": "To help keep everyone safe, happy, and productive in the community, we do have some guidelines. We have carefully crafted them to make them as friendly and easy-to-read as possible. Please take the time to read them before you start chatting.",
"commGuidePara003": "These rules apply to all of the social spaces we use, including (but not necessarily limited to) Trello, GitHub, Weblate, and the Wikia (aka wiki). Sometimes, unforeseen situations will arise, like a new source of conflict or a vicious necromancer. When this happens, the mods may respond by editing these guidelines to keep the community safe from new threats. Fear not: you will be notified by an announcement from Bailey if the guidelines change.",
"commGuidePara003": "These rules apply to all of the social spaces we use, including (but not necessarily limited to) Trello, GitHub, Weblate, and the Habitica Wiki on Fandom. As communities grow and change, their rules may adapt from time to time. When there are substantive changes to these Guidelines, you'll hear about it in a Bailey announcement and/or our social media!",
"commGuideHeadingInteractions": "Interactions in Habitica",
"commGuidePara015": "Habitica has two kinds of social spaces: public, and private. Public spaces include the Tavern, Public Guilds, GitHub, Trello, and the Wiki. Private spaces are Private Guilds, Party chat, and Private Messages. All Display Names must comply with the public space guidelines. To change your Display Name, go on the website to User > Profile and click on the \"Edit\" button.",
"commGuidePara016": "When navigating the public spaces in Habitica, there are some general rules to keep everyone safe and happy. These should be easy for adventurers like you!",
"commGuidePara015": "Habitica has two kinds of social spaces: public, and private. Public spaces include the Tavern, Public Guilds, GitHub, Trello, and the Wiki. Private spaces are Private Guilds, Party chat, and Private Messages. All Display Names and @usernames must comply with the public space guidelines. To change your Display Name and/or @username, on mobile go to Menu > Settings > Profile. On web, go to User > Settings.",
"commGuidePara016": "When navigating the public spaces in Habitica, there are some general rules to keep everyone safe and happy.",
"commGuideList02A": "<strong>Respect each other</strong>. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities. Here are some easy ways to respect each other:",
"commGuideList02B": "<strong>Obey all of the <a href='/static/terms' target='_blank'>Terms and Conditions</a></strong>.",
"commGuideList02C": "<strong>Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group</strong>. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.",
@@ -120,5 +119,6 @@
"commGuideLink05": "<a href='https://trello.com/b/mXK3Eavg/' target='_blank'>The Mobile Trello</a>: for mobile feature requests.",
"commGuideLink06": "<a href='https://trello.com/b/vwuE9fbO/' target='_blank'>The Art Trello</a>: for submitting pixel art.",
"commGuideLink07": "<a href='https://trello.com/b/nnv4QIRX/' target='_blank'>The Quest Trello</a>: for submitting quest writing.",
"commGuidePara069": "The following talented artists contributed to these illustrations:"
"commGuidePara069": "The following talented artists contributed to these illustrations:",
"commGuidePara017": "Here's the quick version, but we encourage you to read in more detail below:"
}
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "and the",
"chores": "Chores",
"clearBrowserData": "Clear Browser Data",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Add-ons & Extensions</a>",
"communityExtensions": "Add-ons & Extensions",
"communityFacebook": "Facebook",
"companyAbout": "How It Works",
"companyBlog": "Blog",
+10 -3
View File
@@ -635,7 +635,7 @@
"backgroundRagingRiverText": "Río Furioso",
"backgroundVineyardNotes": "Explora un fértil viñedo en toda su extensión.",
"backgroundAutumnLakeshoreNotes": "Párate un momento en la orilla de un lago otoñal para apreciar el reflejo del bosque en sus aguas.",
"backgrounds092021": "CONJUNTO 88: Publicado en septiembre de 2021",
"backgrounds092021": "88.ª serie: publicada en septiembre de 2021",
"backgroundAutumnPoplarsNotes": "Regocíjate en las brillantes sombras marrones y doradas de un bosque de álamos otoñales.",
"backgroundVineyardText": "Viñedo",
"backgroundAutumnLakeshoreText": "Orilla de lago otoñal",
@@ -699,7 +699,7 @@
"backgroundOnACastleWallText": "En un Muro de Castillo",
"backgroundEnchantedMusicRoomText": "Sala de Música Encantada",
"backgroundEnchantedMusicRoomNotes": "Tocar en una Sala de Música Encantada.",
"backgrounds052022": "SET 96 : Publicado en Mayo de 2022",
"backgrounds052022": "96.ª serie: publicada en mayo de 2022",
"backgroundUnderwaterStatuesText": "Jardín de Estatuas Subacuático",
"backgroundOnACastleWallNotes": "Mira hacia fuera desde un Muro de Castillo.",
"backgroundUnderwaterStatuesNotes": "Intenta no parpadear en un Jardín de Estatuas Subacuático.",
@@ -717,5 +717,12 @@
"backgroundMountainWaterfallText": "Cascada de Montaña",
"backgroundMountainWaterfallNotes": "Admira una cascada de montaña.",
"backgroundSailboatAtSunsetText": "Velero en la Puesta de Sol",
"backgroundSailboatAtSunsetNotes": "Disfruta de la belleza de un velero en la puesta de sol."
"backgroundSailboatAtSunsetNotes": "Disfruta de la belleza de un velero en la puesta de sol.",
"backgrounds092022": "100.ª serie: publicada en septiembre 2022",
"backgroundTheatreStageText": "Escenario de teatro",
"backgroundTheatreStageNotes": "Actúa en un escenario de teatro.",
"backgroundAutumnPicnicText": "Picnic otoñal",
"backgroundAutumnPicnicNotes": "Disfruta un picnic otoñal.",
"backgroundOldPhotoText": "Foto antigua",
"backgroundOldPhotoNotes": "Posa en una foto antigua."
}
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More