Browse Source

Merge branch 'master' into feature/new-friends-page

pull/4412/head
Edho Arief 1 month ago
parent
commit
a7e492b292
No account linked to committer's email address
100 changed files with 388 additions and 296 deletions
  1. 0
    8
      .github/pull_request_template.md
  2. 1
    0
      app/Http/Controllers/AccountController.php
  3. 14
    9
      app/Http/Controllers/ChangelogController.php
  4. 2
    2
      app/Http/Controllers/Forum/TopicCoversController.php
  5. 4
    0
      app/Http/Controllers/Forum/TopicsController.php
  6. 2
    2
      app/Libraries/NewForumTopic.php
  7. 37
    9
      app/Libraries/OsuAuthorize.php
  8. 9
    3
      app/Libraries/ReplayFile.php
  9. 1
    1
      app/Models/BeatmapMirror.php
  10. 1
    1
      app/Models/DeletedUser.php
  11. 7
    0
      app/Models/Forum/Forum.php
  12. 0
    13
      app/Models/Forum/Topic.php
  13. 1
    0
      app/Models/ReplayViewCount/Fruits.php
  14. 1
    0
      app/Models/ReplayViewCount/Mania.php
  15. 0
    6
      app/Models/ReplayViewCount/Model.php
  16. 1
    0
      app/Models/ReplayViewCount/Osu.php
  17. 1
    0
      app/Models/ReplayViewCount/Taiko.php
  18. 1
    1
      app/Models/Score/Best/Model.php
  19. 7
    1
      app/Models/User.php
  20. 1
    1
      app/Models/UserNotFound.php
  21. 4
    0
      database/migrations/2015_01_01_133337_base_tables.php
  22. 32
    0
      database/migrations/2019_04_09_053403_add_allow_topic_covers_to_forums.php
  23. 1
    1
      resources/assets/coffee/_classes/beatmap-discussion-helper.coffee
  24. 1
    1
      resources/assets/coffee/react/admin/contest/user-art-entry.coffee
  25. 1
    1
      resources/assets/coffee/react/admin/contest/user-entry.coffee
  26. 0
    1
      resources/assets/coffee/react/beatmap-discussions/header.coffee
  27. 2
    0
      resources/assets/coffee/react/beatmap-discussions/post.coffee
  28. 0
    15
      resources/assets/coffee/react/beatmap-discussions/user-filter.coffee
  29. 1
    1
      resources/assets/coffee/react/mp-history/event.coffee
  30. 1
    1
      resources/assets/coffee/react/mp-history/game-header.coffee
  31. 0
    1
      resources/assets/less/bem/qtip.less
  32. 20
    1
      resources/assets/less/bem/user-card.less
  33. 1
    1
      resources/assets/less/colors.less
  34. 0
    6
      resources/assets/lib/notification-widget/item.tsx
  35. 1
    0
      resources/lang/be/beatmap_discussions.php
  36. 1
    0
      resources/lang/bg/beatmap_discussions.php
  37. 1
    0
      resources/lang/cs/beatmap_discussions.php
  38. 1
    1
      resources/lang/da/artist.php
  39. 1
    0
      resources/lang/da/beatmap_discussions.php
  40. 1
    1
      resources/lang/da/beatmaps.php
  41. 1
    1
      resources/lang/da/forum.php
  42. 1
    1
      resources/lang/da/news.php
  43. 1
    1
      resources/lang/da/oauth.php
  44. 1
    1
      resources/lang/da/wiki.php
  45. 1
    0
      resources/lang/de/beatmap_discussions.php
  46. 1
    0
      resources/lang/el/beatmap_discussions.php
  47. 5
    0
      resources/lang/en/accounts.php
  48. 3
    0
      resources/lang/en/authorization.php
  49. 1
    0
      resources/lang/es/beatmap_discussions.php
  50. 1
    1
      resources/lang/es/store.php
  51. 8
    8
      resources/lang/fi/authorization.php
  52. 1
    0
      resources/lang/fi/beatmap_discussions.php
  53. 3
    3
      resources/lang/fi/beatmappacks.php
  54. 6
    6
      resources/lang/fi/beatmaps.php
  55. 1
    1
      resources/lang/fi/beatmapset_events.php
  56. 4
    4
      resources/lang/fi/beatmapsets.php
  57. 6
    6
      resources/lang/fi/community.php
  58. 3
    3
      resources/lang/fi/contest.php
  59. 1
    1
      resources/lang/fi/errors.php
  60. 3
    3
      resources/lang/fi/layout.php
  61. 1
    1
      resources/lang/fi/model_validation/store/product.php
  62. 10
    10
      resources/lang/fi/oauth.php
  63. 1
    1
      resources/lang/fi/store.php
  64. 1
    1
      resources/lang/fi/users.php
  65. 1
    0
      resources/lang/fr/beatmap_discussions.php
  66. 1
    0
      resources/lang/hu/beatmap_discussions.php
  67. 1
    0
      resources/lang/id/beatmap_discussions.php
  68. 1
    0
      resources/lang/it/beatmap_discussions.php
  69. 1
    1
      resources/lang/it/users.php
  70. 4
    4
      resources/lang/ja/accounts.php
  71. 3
    3
      resources/lang/ja/authorization.php
  72. 1
    0
      resources/lang/ja/beatmap_discussions.php
  73. 25
    25
      resources/lang/ja/beatmaps.php
  74. 6
    6
      resources/lang/ja/beatmapset_events.php
  75. 12
    12
      resources/lang/ja/beatmapsets.php
  76. 2
    2
      resources/lang/ja/home.php
  77. 1
    1
      resources/lang/ja/layout.php
  78. 1
    1
      resources/lang/ja/users.php
  79. 1
    0
      resources/lang/ko/beatmap_discussions.php
  80. 1
    0
      resources/lang/nl/beatmap_discussions.php
  81. 4
    4
      resources/lang/no/accounts.php
  82. 1
    1
      resources/lang/no/api.php
  83. 2
    2
      resources/lang/no/artist.php
  84. 9
    9
      resources/lang/no/authorization.php
  85. 3
    2
      resources/lang/no/beatmap_discussions.php
  86. 4
    4
      resources/lang/no/beatmaps.php
  87. 11
    11
      resources/lang/no/beatmapsets.php
  88. 3
    3
      resources/lang/no/changelog.php
  89. 2
    2
      resources/lang/no/chat.php
  90. 3
    3
      resources/lang/no/comments.php
  91. 9
    9
      resources/lang/no/common.php
  92. 6
    6
      resources/lang/no/community.php
  93. 13
    13
      resources/lang/no/contest.php
  94. 2
    2
      resources/lang/no/errors.php
  95. 1
    1
      resources/lang/no/events.php
  96. 6
    6
      resources/lang/no/forum.php
  97. 3
    3
      resources/lang/no/friends.php
  98. 11
    11
      resources/lang/no/home.php
  99. 7
    7
      resources/lang/no/layout.php
  100. 0
    0
      resources/lang/no/livestreams.php

+ 0
- 8
.github/pull_request_template.md View File

@@ -1,8 +0,0 @@
1
-Add any details pertaining to developers above the break.
2
-
3
-- [ ] Depends on #PR
4
-- Closes #ISSUE
5
-
6
----
7
-
8
-Add a sentence or two describing this change in plain english. This will be displayed on the [changelog](https://osu.ppy.sh/home/changelog). A single screenshot or short gif is also welcomed.

+ 1
- 0
app/Http/Controllers/AccountController.php View File

@@ -135,6 +135,7 @@ class AccountController extends Controller
135 135
                 'user_from:string',
136 136
                 'user_interests:string',
137 137
                 'user_msnm:string',
138
+                'user_notify:bool',
138 139
                 'user_occ:string',
139 140
                 'user_sig:string',
140 141
                 'user_twitter:string',

+ 14
- 9
app/Http/Controllers/ChangelogController.php View File

@@ -39,14 +39,6 @@ class ChangelogController extends Controller
39 39
     {
40 40
         $this->getUpdateStreams();
41 41
 
42
-        $chartConfig = Cache::remember(
43
-            'chart_config_global',
44
-            config('osu.changelog.build_history_interval'),
45
-            function () {
46
-                return $this->chartConfig(null);
47
-            }
48
-        );
49
-
50 42
         $search = [
51 43
             'stream' => presence(request('stream')),
52 44
             'from' => presence(request('from')),
@@ -75,6 +67,7 @@ class ChangelogController extends Controller
75 67
         ]);
76 68
 
77 69
         $indexJson = [
70
+            'streams' => $this->updateStreams,
78 71
             'builds' => $buildsJson,
79 72
             'search' => $search,
80 73
         ];
@@ -82,6 +75,14 @@ class ChangelogController extends Controller
82 75
         if (request()->expectsJson()) {
83 76
             return $indexJson;
84 77
         } else {
78
+            $chartConfig = Cache::remember(
79
+                'chart_config_global',
80
+                config('osu.changelog.build_history_interval'),
81
+                function () {
82
+                    return $this->chartConfig(null);
83
+                }
84
+            );
85
+
85 86
             return view('changelog.index', compact('chartConfig', 'indexJson'));
86 87
         }
87 88
     }
@@ -136,7 +137,11 @@ class ChangelogController extends Controller
136 137
                 return $this->chartConfig($build->updateStream);
137 138
             });
138 139
 
139
-        return view('changelog.build', compact('build', 'buildJson', 'chartConfig', 'commentBundle'));
140
+        if (request()->expectsJson()) {
141
+            return $buildJson;
142
+        } else {
143
+            return view('changelog.build', compact('build', 'buildJson', 'chartConfig', 'commentBundle'));
144
+        }
140 145
     }
141 146
 
142 147
     private function getUpdateStreams()

+ 2
- 2
app/Http/Controllers/Forum/TopicCoversController.php View File

@@ -53,9 +53,9 @@ class TopicCoversController extends Controller
53 53
         $topic = null;
54 54
 
55 55
         if (presence(Request::input('topic_id')) !== null) {
56
-            $topic = Topic::findOrFail(Request::input('topic_id'));
56
+            $topic = Topic::with('forum')->findOrFail(Request::input('topic_id'));
57 57
 
58
-            priv_check('ForumTopicEdit', $topic)->ensureCan();
58
+            priv_check('ForumTopicCoverStore', $topic->forum)->ensureCan();
59 59
             if ($topic->cover !== null) {
60 60
                 abort(422);
61 61
             }

+ 4
- 0
app/Http/Controllers/Forum/TopicsController.php View File

@@ -377,6 +377,10 @@ class TopicsController extends Controller
377 377
             return error_popup($e->getMessage());
378 378
         }
379 379
 
380
+        if (Auth::user()->user_notify || $forum->isHelpForum()) {
381
+            TopicWatch::setState($topic, Auth::user(), 'watching_mail');
382
+        }
383
+
380 384
         ForumUpdateNotifier::onNew([
381 385
             'topic' => $topic,
382 386
             'post' => $topic->posts->last(),

+ 2
- 2
app/Libraries/NewForumTopic.php View File

@@ -42,7 +42,7 @@ class NewForumTopic
42 42
     {
43 43
         $body = null;
44 44
 
45
-        if ($this->forum->forum_id === config('osu.forum.help_forum_id')) {
45
+        if ($this->forum->isHelpForum()) {
46 46
             $client = $this->user->clients()->last('timestamp');
47 47
 
48 48
             $buildName = '';
@@ -73,7 +73,7 @@ class NewForumTopic
73 73
 
74 74
     public function titlePlaceholder()
75 75
     {
76
-        if ($this->forum->forum_id === config('osu.forum.help_forum_id')) {
76
+        if ($this->forum->isHelpForum()) {
77 77
             // In English language forum, no localization.
78 78
             return 'What is your problem (50 characters)';
79 79
         }

+ 37
- 9
app/Libraries/OsuAuthorize.php View File

@@ -25,10 +25,11 @@ use App\Models\Beatmapset;
25 25
 use App\Models\BeatmapsetEvent;
26 26
 use App\Models\Chat\Channel;
27 27
 use App\Models\Forum\Authorize as ForumAuthorize;
28
+use App\Models\Forum\Topic;
29
+use App\Models\Forum\TopicCover;
28 30
 use App\Models\Multiplayer\Match as MultiplayerMatch;
29 31
 use App\Models\User;
30 32
 use App\Models\UserContestEntry;
31
-use App\Models\UserGroup;
32 33
 use Carbon\Carbon;
33 34
 
34 35
 class OsuAuthorize
@@ -45,7 +46,7 @@ class OsuAuthorize
45 46
         $cacheKey = serialize([
46 47
             $ability,
47 48
             $user === null ? null : $user->getKey(),
48
-            $object === null ? null : $object->getKey(),
49
+            $object === null ? null : [$object->getTable(), $object->getKey()],
49 50
         ]);
50 51
 
51 52
         if (!isset($this->cache[$cacheKey])) {
@@ -353,7 +354,7 @@ class OsuAuthorize
353 354
     {
354 355
         $this->ensureLoggedIn($user);
355 356
 
356
-        if (!($user->isGMT() || $user->isNAT() || $user->isGroup(UserGroup::GROUPS['loved']))) {
357
+        if (!$user->isProjectLoved()) {
357 358
             return 'unauthorized';
358 359
         }
359 360
 
@@ -549,12 +550,13 @@ class OsuAuthorize
549 550
         $prefix = 'chat.';
550 551
 
551 552
         $this->ensureLoggedIn($user);
552
-        $this->ensureCleanRecord($user, $prefix);
553 553
 
554 554
         if ($channel->type === Channel::TYPES['public']) {
555 555
             return 'ok';
556 556
         }
557 557
 
558
+        $this->ensureCleanRecord($user, $prefix);
559
+
558 560
         // FIXME: needs further check before allowing other types.
559 561
         if (false) {
560 562
             switch ($channel->type) {
@@ -943,28 +945,54 @@ class OsuAuthorize
943 945
         return 'ok';
944 946
     }
945 947
 
946
-    public function checkForumTopicCoverEdit($user, $cover)
948
+    /**
949
+     * @param  User $user
950
+     * @param  Topic|TopicCover $object
951
+     * @return string
952
+     */
953
+    public function checkForumTopicCoverEdit($user, $object)
947 954
     {
948 955
         $prefix = 'forum.topic_cover.edit.';
949 956
 
950 957
         $this->ensureLoggedIn($user);
951 958
         $this->ensureCleanRecord($user);
952 959
 
953
-        if ($cover->topic !== null) {
954
-            return $this->checkForumTopicEdit($user, $cover->topic);
960
+        $topic = $object instanceof Topic ? $object : $object->topic;
961
+
962
+        if ($topic !== null) {
963
+            $forumTopicCoverStorePermission = $this->doCheckUser($user, 'ForumTopicCoverStore', $topic->forum);
964
+            if (!$forumTopicCoverStorePermission->can()) {
965
+                return $forumTopicCoverStorePermission->rawMessage();
966
+            }
967
+
968
+            return $this->checkForumTopicEdit($user, $topic);
955 969
         }
956 970
 
957
-        if ($cover->owner() === null) {
971
+        if ($object->owner() === null) {
958 972
             return $prefix.'uneditable';
959 973
         }
960 974
 
961
-        if ($cover->owner()->user_id !== $user->user_id) {
975
+        if ($object->owner()->user_id !== $user->user_id) {
962 976
             return $prefix.'not_owner';
963 977
         }
964 978
 
965 979
         return 'ok';
966 980
     }
967 981
 
982
+    public function checkForumTopicCoverStore($user, $forum)
983
+    {
984
+        $prefix = 'forum.topic_cover.store.';
985
+
986
+        $this->ensureLoggedIn($user);
987
+        $this->ensureCleanRecord($user);
988
+
989
+        if (!$forum->allow_topic_covers && !$this->doCheckUser($user, 'ForumModerate', $forum)->can()) {
990
+            return $prefix.'forum_not_allowed';
991
+        }
992
+
993
+        return 'ok';
994
+    }
995
+
968 996
     public function checkForumTopicPollEdit($user, $topic)
969 997
     {
970 998
         if ($this->doCheckUser($user, 'ForumModerate', $topic->forum)->can()) {

+ 9
- 3
app/Libraries/ReplayFile.php View File

@@ -25,6 +25,8 @@ use Storage;
25 25
 
26 26
 class ReplayFile
27 27
 {
28
+    const DEFAULT_VERSION = 20151228;
29
+
28 30
     private $diskName;
29 31
     private $filename;
30 32
     private $score;
@@ -57,13 +59,17 @@ class ReplayFile
57 59
         return pack('q', $this->score->score_id);
58 60
     }
59 61
 
62
+    public function getVersion()
63
+    {
64
+        return optional($this->score->replayViewCount)->version ?? static::DEFAULT_VERSION;
65
+    }
66
+
60 67
     /**
61 68
      * Generates the header chunk for replay files.
62 69
      *
63
-     * @param string $version client version.
64 70
      * @return string Binary string of the chunk.
65 71
      */
66
-    public function headerChunk(string $version = '20151228') : string
72
+    public function headerChunk() : string
67 73
     {
68 74
         $score = $this->score;
69 75
         $beatmap = $score->beatmap;
@@ -76,7 +82,7 @@ class ReplayFile
76 82
         // easier debugging with array and implode instead of plain string concatenation.
77 83
         $components = [
78 84
             pack('c', $mode),
79
-            pack('i', $version),
85
+            pack('i', $this->getVersion()),
80 86
             pack_str($beatmap->checksum),
81 87
             pack_str($user->username),
82 88
             pack_str($md5),

+ 1
- 1
app/Models/BeatmapMirror.php View File

@@ -99,7 +99,7 @@ class BeatmapMirror extends Model
99 99
         $userId = Auth::check() ? Auth::user()->user_id : 0;
100 100
         $checksum = md5("{$beatmapset->beatmapset_id}{$diskFilename}{$serveFilename}{$time}{$noVideo}{$this->secret_key}");
101 101
 
102
-        $url = "{$this->base_url}d/{$beatmapset->beatmapset_id}?fs=".rawurlencode($serveFilename).'&fd='.rawurlencode($diskFilename)."&ts=$time&cs=$checksum&u=$userId&nv=$noVideo";
102
+        $url = "{$this->base_url}d/{$beatmapset->beatmapset_id}?fs=".rawurlencode($serveFilename).'&fd='.rawurlencode($diskFilename)."&ts=$time&cs=$checksum&nv=$noVideo";
103 103
 
104 104
         return $url;
105 105
     }

+ 1
- 1
app/Models/DeletedUser.php View File

@@ -73,7 +73,7 @@ namespace App\Models;
73 73
  * @property string $user_msnm
74 74
  * @property int $user_new_privmsg
75 75
  * @property string $user_newpasswd
76
- * @property int $user_notify
76
+ * @property bool $user_notify
77 77
  * @property int $user_notify_pm
78 78
  * @property int $user_notify_type
79 79
  * @property string|null $user_occ

+ 7
- 0
app/Models/Forum/Forum.php View File

@@ -24,6 +24,7 @@ use App\Models\User;
24 24
 use Carbon\Carbon;
25 25
 
26 26
 /**
27
+ * @property bool $allow_topic_covers
27 28
  * @property ForumCover $cover
28 29
  * @property int $display_on_index
29 30
  * @property int $enable_icons
@@ -82,6 +83,7 @@ class Forum extends Model
82 83
     public $timestamps = false;
83 84
 
84 85
     protected $casts = [
86
+        'allow_topic_covers' => 'boolean',
85 87
         'enable_indexing' => 'boolean',
86 88
         'enable_sigs' => 'boolean',
87 89
         'moderator_groups' => 'array',
@@ -268,6 +270,11 @@ class Forum extends Model
268 270
         return $this->forum_id === $id || isset($this->forum_parents[$id]);
269 271
     }
270 272
 
273
+    public function isHelpForum()
274
+    {
275
+        return $this->forum_id === config('osu.forum.help_forum_id');
276
+    }
277
+
271 278
     public function topicsAdded($count)
272 279
     {
273 280
         $this->getConnection()->transaction(function () use ($count) {

+ 0
- 13
app/Models/Forum/Topic.php View File

@@ -768,19 +768,6 @@ class Topic extends Model implements AfterCommit
768 768
         }
769 769
     }
770 770
 
771
-    public function setCover($path, $user)
772
-    {
773
-        if ($this->cover === null) {
774
-            TopicCover::upload($path, $user, $this);
775
-        } else {
776
-            $this->cover->storeFile($path);
777
-            $this->cover->user()->associate($user);
778
-            $this->cover->save();
779
-        }
780
-
781
-        return $this->fresh();
782
-    }
783
-
784 771
     public function lock($lock = true)
785 772
     {
786 773
         $this->update([

+ 1
- 0
app/Models/ReplayViewCount/Fruits.php View File

@@ -23,6 +23,7 @@ namespace App\Models\ReplayViewCount;
23 23
 /**
24 24
  * @property int $play_count
25 25
  * @property int $score_id
26
+ * @property int $version
26 27
  */
27 28
 class Fruits extends Model
28 29
 {

+ 1
- 0
app/Models/ReplayViewCount/Mania.php View File

@@ -23,6 +23,7 @@ namespace App\Models\ReplayViewCount;
23 23
 /**
24 24
  * @property int $play_count
25 25
  * @property int $score_id
26
+ * @property int $version
26 27
  */
27 28
 class Mania extends Model
28 29
 {

+ 0
- 6
app/Models/ReplayViewCount/Model.php View File

@@ -20,7 +20,6 @@
20 20
 
21 21
 namespace App\Models\ReplayViewCount;
22 22
 
23
-use App\Libraries\ReplayFile;
24 23
 use App\Models\Model as BaseModel;
25 24
 use App\Models\Score\Best as ScoreBest;
26 25
 
@@ -41,9 +40,4 @@ abstract class Model extends BaseModel
41 40
 
42 41
         return $this->belongsTo($class, 'score_id');
43 42
     }
44
-
45
-    public function file()
46
-    {
47
-        return new ReplayFile($this);
48
-    }
49 43
 }

+ 1
- 0
app/Models/ReplayViewCount/Osu.php View File

@@ -23,6 +23,7 @@ namespace App\Models\ReplayViewCount;
23 23
 /**
24 24
  * @property int $play_count
25 25
  * @property int $score_id
26
+ * @property int $version
26 27
  */
27 28
 class Osu extends Model
28 29
 {

+ 1
- 0
app/Models/ReplayViewCount/Taiko.php View File

@@ -23,6 +23,7 @@ namespace App\Models\ReplayViewCount;
23 23
 /**
24 24
  * @property int $play_count
25 25
  * @property int $score_id
26
+ * @property int $version
26 27
  */
27 28
 class Taiko extends Model
28 29
 {

+ 1
- 1
app/Models/Score/Best/Model.php View File

@@ -52,7 +52,7 @@ abstract class Model extends BaseModel
52 52
         'XH' => 'xh_rank_count',
53 53
     ];
54 54
 
55
-    public function replayFile()
55
+    public function replayFile() : ?ReplayFile
56 56
     {
57 57
         if ($this->replay) {
58 58
             return new ReplayFile($this);

+ 7
- 1
app/Models/User.php View File

@@ -140,7 +140,7 @@ use Request;
140 140
  * @property string $user_msnm
141 141
  * @property int $user_new_privmsg
142 142
  * @property string $user_newpasswd
143
- * @property int $user_notify
143
+ * @property bool $user_notify
144 144
  * @property int $user_notify_pm
145 145
  * @property int $user_notify_type
146 146
  * @property string|null $user_occ
@@ -192,6 +192,7 @@ class User extends Model implements AuthenticatableContract
192 192
         'osu_subscriber' => 'boolean',
193 193
         'user_allow_pm' => 'boolean',
194 194
         'user_allow_viewonline' => 'boolean',
195
+        'user_notify' => 'boolean',
195 196
         'user_timezone' => 'float',
196 197
     ];
197 198
 
@@ -713,6 +714,11 @@ class User extends Model implements AuthenticatableContract
713 714
         return $this->isGroup(UserGroup::GROUPS['default']);
714 715
     }
715 716
 
717
+    public function isProjectLoved()
718
+    {
719
+        return $this->isGroup(UserGroup::GROUPS['loved']);
720
+    }
721
+
716 722
     public function isBot()
717 723
     {
718 724
         return $this->group_id === UserGroup::GROUPS['bot'];

+ 1
- 1
app/Models/UserNotFound.php View File

@@ -73,7 +73,7 @@ namespace App\Models;
73 73
  * @property string $user_msnm
74 74
  * @property int $user_new_privmsg
75 75
  * @property string $user_newpasswd
76
- * @property int $user_notify
76
+ * @property bool $user_notify
77 77
  * @property int $user_notify_pm
78 78
  * @property int $user_notify_type
79 79
  * @property string|null $user_occ

+ 4
- 0
database/migrations/2015_01_01_133337_base_tables.php View File

@@ -494,6 +494,7 @@ class BaseTables extends Migration
494 494
 
495 495
             $table->unsignedInteger('score_id')->default(0)->primary();
496 496
             $table->unsignedInteger('play_count')->default(0);
497
+            $table->integer('version')->nullable();
497 498
         });
498 499
         $this->setRowFormat('osu_replays', 'DYNAMIC');
499 500
 
@@ -503,6 +504,7 @@ class BaseTables extends Migration
503 504
 
504 505
             $table->unsignedInteger('score_id')->default(0)->primary();
505 506
             $table->unsignedInteger('play_count')->default(0);
507
+            $table->integer('version')->nullable();
506 508
         });
507 509
         $this->setRowFormat('osu_replays_fruits', 'DYNAMIC');
508 510
 
@@ -512,6 +514,7 @@ class BaseTables extends Migration
512 514
 
513 515
             $table->unsignedInteger('score_id')->default(0)->primary();
514 516
             $table->unsignedInteger('play_count')->default(0);
517
+            $table->integer('version')->nullable();
515 518
         });
516 519
         $this->setRowFormat('osu_replays_mania', 'DYNAMIC');
517 520
 
@@ -521,6 +524,7 @@ class BaseTables extends Migration
521 524
 
522 525
             $table->unsignedInteger('score_id')->default(0)->primary();
523 526
             $table->unsignedInteger('play_count')->default(0);
527
+            $table->integer('version')->nullable();
524 528
         });
525 529
         $this->setRowFormat('osu_replays_taiko', 'DYNAMIC');
526 530
 

+ 32
- 0
database/migrations/2019_04_09_053403_add_allow_topic_covers_to_forums.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+class AddAllowTopicCoversToForums extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::table('phpbb_forums', function (Blueprint $table) {
17
+            $table->boolean('allow_topic_covers')->default(1);
18
+        });
19
+    }
20
+
21
+    /**
22
+     * Reverse the migrations.
23
+     *
24
+     * @return void
25
+     */
26
+    public function down()
27
+    {
28
+        Schema::table('phpbb_forums', function (Blueprint $table) {
29
+            $table->dropColumn('allow_topic_covers');
30
+        });
31
+    }
32
+}

+ 1
- 1
resources/assets/coffee/_classes/beatmap-discussion-helper.coffee View File

@@ -127,7 +127,7 @@ class @BeatmapDiscussionHelper
127 127
 
128 128
 
129 129
   @moderationGroup: (user) =>
130
-    _.intersection(_.concat(user.default_group, user.groups), ['nat', 'bng'])[0]
130
+    _.intersection(_.concat(user.default_group, user.groups), ['nat', 'bng', 'bng_limited'])[0]
131 131
 
132 132
 
133 133
   @previewMessage = (message) =>

+ 1
- 1
resources/assets/coffee/react/admin/contest/user-art-entry.coffee View File

@@ -45,7 +45,7 @@ export class UserArtEntry extends React.Component
45 45
           dt className: 'admin-contest__meta-row', 'Filesize'
46 46
           dd className: 'admin-contest__meta-row', osu.formatBytes(@props.entry.filesize)
47 47
 
48
-        el Admin.Contest.UserEntryDeleteButton,
48
+        el UserEntryDeleteButton,
49 49
           entry: @props.entry
50 50
 
51 51
       td {},

+ 1
- 1
resources/assets/coffee/react/admin/contest/user-entry.coffee View File

@@ -46,5 +46,5 @@ export class UserEntry extends React.Component
46 46
           osu.formatBytes(@props.entry.filesize)
47 47
 
48 48
       td className: 'admin-contest-entry__column admin-contest-entry__column--button',
49
-        el Admin.Contest.UserEntryDeleteButton,
49
+        el UserEntryDeleteButton,
50 50
           entry: @props.entry

+ 0
- 1
resources/assets/coffee/react/beatmap-discussions/header.coffee View File

@@ -113,7 +113,6 @@ export class Header extends React.PureComponent
113 113
           div
114 114
             className: "#{bn}__filter-group #{bn}__filter-group--stats"
115 115
             el UserFilter,
116
-              ownerId: @props.beatmapset.user_id
117 116
               selectedUser: if @props.selectedUserId? then @props.users[@props.selectedUserId] else null
118 117
               users: @props.discussionStarters
119 118
 

+ 2
- 0
resources/assets/coffee/react/beatmap-discussions/post.coffee View File

@@ -70,6 +70,8 @@ export class Post extends React.PureComponent
70 70
     userBadge =
71 71
       if @isOwner()
72 72
         'owner'
73
+      else if @userModerationGroup() == 'bng_limited'
74
+        'bng'
73 75
       else
74 76
         @userModerationGroup()
75 77
 

+ 0
- 15
resources/assets/coffee/react/beatmap-discussions/user-filter.coffee View File

@@ -46,8 +46,6 @@ export class UserFilter extends React.PureComponent
46 46
 
47 47
   mapUserProperties: (user) ->
48 48
     id: user.id
49
-    colour: user.profile_colour
50
-    groups: user.groups
51 49
     text: user.username
52 50
 
53 51
 
@@ -60,18 +58,5 @@ export class UserFilter extends React.PureComponent
60 58
       children
61 59
 
62 60
 
63
-  isOwner: (user) =>
64
-    user? && user.id == @props.ownerId
65
-
66
-
67
-  userGroup: (user) =>
68
-    return unless user?
69
-
70
-    if @isOwner(user)
71
-      'owner'
72
-    else
73
-      BeatmapDiscussionHelper.moderationGroup(user)
74
-
75
-
76 61
   onItemSelected: (item) ->
77 62
     $.publish 'beatmapsetDiscussions:update', selectedUserId: item.id

+ 1
- 1
resources/assets/coffee/react/mp-history/event.coffee View File

@@ -41,7 +41,7 @@ export class Event extends React.Component
41 41
 
42 42
     div className: 'mp-history-event',
43 43
       div className: 'mp-history-event__time',
44
-        moment(@props.event.timestamp).format 'LT'
44
+        moment(@props.event.timestamp).format 'LTS'
45 45
       div className: "mp-history-event__type mp-history-event__type--#{event_type}",
46 46
         @icons[event_type].map (m) ->
47 47
           i key: m, className: m

+ 1
- 1
resources/assets/coffee/react/mp-history/game-header.coffee View File

@@ -22,7 +22,7 @@ import { div, a, span, h1, h2 } from 'react-dom-factories'
22 22
 el = React.createElement
23 23
 
24 24
 export class GameHeader extends React.Component
25
-  timeFormat: 'LT'
25
+  timeFormat: 'LTS'
26 26
 
27 27
   render: ->
28 28
     timeStart = moment(@props.game.start_time).format @timeFormat

+ 0
- 1
resources/assets/less/bem/qtip.less View File

@@ -17,7 +17,6 @@
17 17
  */
18 18
 
19 19
 .qtip--user-card {
20
-  width: @user-card-width;
21 20
   max-width: unset;
22 21
   min-width: unset;
23 22
   font-size: unset;

+ 20
- 1
resources/assets/less/bem/user-card.less View File

@@ -40,6 +40,10 @@
40 40
   // to make broken cover images less ugly
41 41
   overflow: hidden;
42 42
 
43
+  .qtip--user-card & {
44
+    width: @user-card-width;
45
+  }
46
+
43 47
   &--has-outline::after {
44 48
     .@{top}:hover&, .@{top}--active& {
45 49
       .full-size();
@@ -189,9 +193,24 @@
189 193
       font-size: 10px;
190 194
       background-color: #333;
191 195
       opacity: 0;
196
+      transition:
197
+        background-color 120ms ease-in-out,
198
+        opacity 120ms ease-in-out;
199
+
200
+      // NB: there is a issue where clicking on the button to close the menu
201
+      // causes the state to momentarily unhover and rehover
202
+      .@{top}:hover & {
203
+        opacity: 1;
204
+
205
+        &:hover {
206
+          background-color: @blue-darker;
207
+        }
208
+      }
192 209
 
193
-      .@{top}:hover &, .@{top}--active & {
210
+      // needs the higher specificity over .@{top}:hover
211
+      .@{top}--active && {
194 212
         opacity: 1;
213
+        background-color: @blue-darker;
195 214
       }
196 215
     }
197 216
   }

+ 1
- 1
resources/assets/less/colors.less View File

@@ -133,9 +133,9 @@
133 133
 @greycyan: #293d3e;
134 134
 @greycyan-dark: #243536;
135 135
 @greycyan-darker: #1e2929;
136
-@greylime-lighter: #deff87;
137 136
 
138 137
 @lime: #82ff05;
138
+@greylime-lighter: #deff87;
139 139
 @greylime-light: #657259;
140 140
 @greylime: #3f443a;
141 141
 @greylime-dark: #32352e;

+ 0
- 6
resources/assets/lib/notification-widget/item.tsx View File

@@ -80,12 +80,6 @@ export default class Item extends React.Component<Props, State> {
80 80
 
81 81
     const item = this.props.items[0];
82 82
 
83
-    let blockClass = 'notification-popup-item';
84
-
85
-    if (this.props.items.length > 0) {
86
-      blockClass += ' notification-popup-item--multi';
87
-    }
88
-
89 83
     return (
90 84
       <div className='notification-popup-item clickable-row' onClick={this.markRead}>
91 85
         <div

+ 1
- 0
resources/lang/be/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'кіраўнік',
79 79
         'bng' => 'намінатар',
80 80
         'owner' => 'мапер',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/bg/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'админ',
79 79
         'bng' => 'номинатор',
80 80
         'owner' => 'мапър',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/cs/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'admin',
79 79
         'bng' => 'nominátor',
80 80
         'owner' => 'mappér',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 1
resources/lang/da/artist.php View File

@@ -43,7 +43,7 @@ return [
43 43
 
44 44
     'songs' => [
45 45
         '_' => 'Sange',
46
-        'count' => ':count sang|:count sange',
46
+        'count' => ':count_delimited sang|:count_delimited sange',
47 47
         'exclusive' => 'osu! exklusive',
48 48
     ],
49 49
 

+ 1
- 0
resources/lang/da/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'admin',
79 79
         'bng' => 'nominator',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 1
resources/lang/da/beatmaps.php View File

@@ -200,7 +200,7 @@ return [
200 200
                 'favourites' => 'Favoritter',
201 201
                 'updated' => 'Opdateret',
202 202
                 'ranked' => 'Rangeret',
203
-                'rating' => '',
203
+                'rating' => 'Vurdering',
204 204
                 'plays' => 'Afspilninger',
205 205
                 'relevance' => '',
206 206
                 'nominations' => 'Nomineringer',

+ 1
- 1
resources/lang/da/forum.php View File

@@ -171,7 +171,7 @@ return [
171 171
         'create' => [
172 172
             'create_poll' => 'Oprettelse af afstemning',
173 173
 
174
-            'preview' => '',
174
+            'preview' => 'Indlæg forhåndsvisning',
175 175
 
176 176
             'create_poll_button' => [
177 177
                 'add' => 'Lav en afstemning',

+ 1
- 1
resources/lang/da/news.php View File

@@ -29,7 +29,7 @@ return [
29 29
 
30 30
         'title' => [
31 31
             '_' => 'Nyheder :info',
32
-            'info' => '',
32
+            'info' => 'Forside',
33 33
         ],
34 34
     ],
35 35
 

+ 1
- 1
resources/lang/da/oauth.php View File

@@ -23,7 +23,7 @@ return [
23 23
 
24 24
     'authorise' => [
25 25
         'authorise' => '',
26
-        'request' => '',
26
+        'request' => 'anmoder om tilladelse til at få adgang til din konto.',
27 27
         'scopes_title' => 'Denne applikation vil være i stand til at:',
28 28
         'title' => '',
29 29
 

+ 1
- 1
resources/lang/da/wiki.php View File

@@ -22,7 +22,7 @@ return [
22 22
     'show' => [
23 23
         'fallback_translation' => 'Den anmodede side er endnu ikke blevet oversat til (:language). Viser den engelske version.',
24 24
         'languages' => 'Sprog',
25
-        'missing' => 'Den anmodede side kunne ikke blive fundet.',
25
+        'missing' => 'Den anmodede side ":keyword" kunne ikke blive fundet.',
26 26
         'missing_title' => 'Ikke fundet',
27 27
         'missing_translation' => 'Den anmodede side kunne ikke blive fundet på det valgte sprog.',
28 28
         'search' => 'Søg eksisterende sider for :link.',

+ 1
- 0
resources/lang/de/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'Admin',
79 79
         'bng' => 'Nominator',
80 80
         'owner' => 'Mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/el/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'διαχειριστής',
79 79
         'bng' => 'nominator',
80 80
         'owner' => 'δημιουργός',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 5
- 0
resources/lang/en/accounts.php View File

@@ -86,6 +86,11 @@ return [
86 86
         'hide_online' => 'hide your online presence',
87 87
     ],
88 88
 
89
+    'notifications' => [
90
+        'title' => 'Notifications',
91
+        'topic_auto_subscribe' => 'automatically subscribe to forum topics that you post',
92
+    ],
93
+
89 94
     'security' => [
90 95
         'current_session' => 'current',
91 96
         'end_session' => 'End Session',

+ 3
- 0
resources/lang/en/authorization.php View File

@@ -144,6 +144,9 @@ return [
144 144
                 'uneditable' => 'Invalid cover specified.',
145 145
                 'not_owner' => 'Only owner can edit cover.',
146 146
             ],
147
+            'store' => [
148
+                'forum_not_allowed' => 'This forum does not accept topic covers.',
149
+            ],
147 150
         ],
148 151
 
149 152
         'view' => [

+ 1
- 0
resources/lang/es/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'administrador',
79 79
         'bng' => 'nominador',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 1
resources/lang/es/store.php View File

@@ -25,7 +25,7 @@ return [
25 25
 
26 26
     'cart' => [
27 27
         'checkout' => 'Pagar',
28
-        'more_goodies' => 'Quiero ver más manjares antes de completar el pedido',
28
+        'more_goodies' => 'Quiero ver más productos antes de completar el pedido',
29 29
         'shipping_fees' => 'gastos de envío',
30 30
         'title' => 'Carrito de compras',
31 31
         'total' => 'total',

+ 8
- 8
resources/lang/fi/authorization.php View File

@@ -78,14 +78,14 @@ return [
78 78
             'delete' => [
79 79
                 'only_last_post' => 'Vain viimeisin viesti voidaan poistaa.',
80 80
                 'locked' => 'Lukitun aiheen viestejä ei voi poistaa.',
81
-                'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
81
+                'no_forum_access' => 'Tarvitset pääsyn tälle foorumille.',
82 82
                 'not_owner' => 'Vain lähettäjä voi poistaa viestin.',
83 83
             ],
84 84
 
85 85
             'edit' => [
86 86
                 'deleted' => 'Poistettuja viestejä ei voi muokata.',
87 87
                 'locked' => 'Viestin muokkaaminen on estetty.',
88
-                'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
88
+                'no_forum_access' => 'Tarvitset pääsyn tälle foorumille.',
89 89
                 'not_owner' => 'Vain lähettäjä voi muokata viestiä.',
90 90
                 'topic_locked' => 'Lukitun aiheen viestiä ei voi muokata.',
91 91
             ],
@@ -98,7 +98,7 @@ return [
98 98
 
99 99
         'topic' => [
100 100
             'reply' => [
101
-                'double_post' => 'Muokkaa entistä postaustasi sen sijaan kun postaat uuden.',
101
+                'double_post' => 'Muokkaa edellistä viestiä uuden lähettämisen sijaan.',
102 102
                 'locked' => 'Et voi vastata lukittuun aiheeseen.',
103 103
                 'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
104 104
                 'no_permission' => 'Ei vastausoikeutta.',
@@ -112,13 +112,13 @@ return [
112 112
 
113 113
             'store' => [
114 114
                 'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
115
-                'no_permission' => 'Uuden aiheen luontiin ei ole oikeuksia.',
115
+                'no_permission' => 'Oikeudet uuden aiheen luomiseen puuttuvat.',
116 116
                 'forum_closed' => 'Foorumi on suljettu, eikä siihen voi lähettää viestejä.',
117 117
             ],
118 118
 
119 119
             'vote' => [
120
-                'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
121
-                'over' => 'Äänestys on ohi eikä siinä voi enää äänestää.',
120
+                'no_forum_access' => 'Tarvitset pääsyn tälle foorumille.',
121
+                'over' => 'Äänestys on loppunut eikä uusia ääniä voida antaa.',
122 122
                 'voted' => 'Äänen vaihtaminen ei ole sallittua.',
123 123
 
124 124
                 'user' => [
@@ -129,7 +129,7 @@ return [
129 129
             ],
130 130
 
131 131
             'watch' => [
132
-                'no_forum_access' => 'Pääsy kyseiselle foorumille vaaditaan.',
132
+                'no_forum_access' => 'Tarvitset pääsyn tälle foorumille.',
133 133
             ],
134 134
         ],
135 135
 
@@ -158,7 +158,7 @@ return [
158 158
             'edit' => [
159 159
                 'locked' => 'Käyttäjäsivu on lukittu.',
160 160
                 'not_owner' => 'Voit muokata vain omaa käyttäjäsivuasi.',
161
-                'require_supporter_tag' => 'osu!supporter-tagi vaaditaan.',
161
+                'require_supporter_tag' => 'Sinun on oltava Tukija.',
162 162
             ],
163 163
         ],
164 164
     ],

+ 1
- 0
resources/lang/fi/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'ylläpitäjä',
79 79
         'bng' => 'suosittelija',
80 80
         'owner' => 'mappaaja',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 3
- 3
resources/lang/fi/beatmappacks.php View File

@@ -30,19 +30,19 @@ return [
30 30
                 'scary' => 'ÄLÄ',
31 31
             ],
32 32
             'note' => [
33
-                '_' => 'Huomaa myös, että on erittäin suositeltavaa :scary, koska vanhemmat mapit ovat paljon huonompia kuin uudemmat mapit.',
33
+                '_' => 'Huomaa myös, että on erittäin suositeltavaa :scary, koska vanhemmat mapit ovat paljon huonompia kuin uudet.',
34 34
                 'scary' => 'ladata uusimpia kokoelmia vanhojen sijaan',
35 35
             ],
36 36
         ],
37 37
         'title' => 'Beatmap-Kokoelmat',
38
-        'description' => 'Valmiiksi pakattuja beatmap kokoelmia perustuen yleisiin teemoihin.',
38
+        'description' => 'Valmiiksi kasattuja beatmap kokoelmia, joissa yhdistyy tietty teema.',
39 39
     ],
40 40
 
41 41
     'show' => [
42 42
         'download' => 'Lataa',
43 43
         'item' => [
44 44
             'cleared' => 'läpäisty',
45
-            'not_cleared' => 'ei läpäisty',
45
+            'not_cleared' => 'läpäisemätön',
46 46
         ],
47 47
     ],
48 48
 

+ 6
- 6
resources/lang/fi/beatmaps.php View File

@@ -27,7 +27,7 @@ return [
27 27
 
28 28
     'discussion-votes' => [
29 29
         'update' => [
30
-            'error' => 'Äänen päivittäminen epäonnistui',
30
+            'error' => 'Äänen päivitys ei onnistunut',
31 31
         ],
32 32
     ],
33 33
 
@@ -55,7 +55,7 @@ return [
55 55
 
56 56
         'empty' => [
57 57
             'empty' => 'Keskustelut puuttuu!',
58
-            'hidden' => 'Mikään keskustelu ei vastaa valittua suodatinta.',
58
+            'hidden' => 'Yksikään keskusteluista ei täsmää hakuehtoihisi.',
59 59
         ],
60 60
 
61 61
         'message_hint' => [
@@ -118,7 +118,7 @@ return [
118 118
 
119 119
         'status-messages' => [
120 120
             'approved' => 'Tämä beatmappi hyväksyttiiin :date!',
121
-            'graveyard' => "Tätä beatmappia ei ole päivitetty sitten :date ja sen tekijä on todennäköisesti hyljännyt sen...",
121
+            'graveyard' => "Tätä beatmappia ei ole päivitetty sitten :date ja sen tekijä on todennäköisesti hylännyt sen...",
122 122
             'loved' => 'Tämä beatmap lisättiin Rakastettuihin :date!',
123 123
             'ranked' => 'Tämä beatmap hyväksyttiin :date!',
124 124
             'wip' => 'Huomaa: Tämän beatmapin tekijä on merkannut sen keskeneräiseksi.',
@@ -147,7 +147,7 @@ return [
147 147
         'delete' => 'Poista',
148 148
         'delete_own_confirm' => 'Oletko varma? Tämä beatmap poistetaan ja sinut uudelleenohjataan takaisin profiiliisi.',
149 149
         'delete_other_confirm' => 'Oletko varma? Tämä beatmap poistetaan ja sinut uudelleenohjataan käyttäjän profiiliin.',
150
-        'disqualification_prompt' => 'Syy hylkäykseen?',
150
+        'disqualification_prompt' => 'Hylkäyksen syy?',
151 151
         'disqualified_at' => 'Hylättiin :time_ago sitten (:reason).',
152 152
         'disqualified_no_reason' => 'ei määriteltyä syytä',
153 153
         'disqualify' => 'Hylkää',
@@ -171,7 +171,7 @@ return [
171 171
 
172 172
         'reset_confirm' => [
173 173
             'nomination_reset' => 'Oletko varma? Uuden ongelman lähettäminen kumoaa suositusprosessin.',
174
-            'disqualify' => 'Oletko varma? Tämä poistaa kappaleen hyväksynnästä ja resetoi äänestysprosessin.',
174
+            'disqualify' => 'Oletko varma? Tämä poistaa beatmapin esihyväksytyistä ja kumoaa suositusprosessin.',
175 175
         ],
176 176
     ],
177 177
 
@@ -182,7 +182,7 @@ return [
182 182
             'options' => 'Enemmän Hakuasetuksia',
183 183
             'supporter_filter' => 'Tunnisteella :filters rajaaminen vaatii aktiivisen osu!supporter-tagin',
184 184
             'not-found' => 'ei tuloksia',
185
-            'not-found-quote' => '... Eip, mitään ei löytynyt.',
185
+            'not-found-quote' => '... mitään ei löytynyt.',
186 186
             'filters' => [
187 187
                 'general' => 'Yleinen',
188 188
                 'mode' => 'Pelitila',

+ 1
- 1
resources/lang/fi/beatmapset_events.php View File

@@ -37,7 +37,7 @@ return [
37 37
         'love' => ':user rakastaa',
38 38
         'nominate' => 'Käyttäjän :user suosittelema.',
39 39
         'nomination_reset' => 'Uusi ongelma :discussion (:text) nollasi suositukset.',
40
-        'qualify' => 'Tämä beatmap sai vaaditun määrän suosituksia tarkasteluvaihetta varten.',
40
+        'qualify' => 'Tämä beatmap sai vaaditun määrän suosituksia hyväksymisvaihetta varten.',
41 41
         'rank' => 'Hyväksytty.',
42 42
     ],
43 43
 

+ 4
- 4
resources/lang/fi/beatmapsets.php View File

@@ -65,13 +65,13 @@ return [
65 65
         ],
66 66
 
67 67
         'hype' => [
68
-            'action' => 'Äänestä tätä kappaletta jos nautit sen pelaamisesta auttaaksesi sitä saamaan <strong>Ranked</strong> statuksen.',
68
+            'action' => 'Jos nautit tästä kartasta, hurraa sitä edistääksesi sen siirtymistä <strong>Hyväksyttyyn</strong> tilaan.',
69 69
 
70 70
             'current' => [
71
-                '_' => 'Tämä kappale on tällä hetkellä :status.',
71
+                '_' => 'Tämä kartta on :status.',
72 72
 
73 73
                 'status' => [
74
-                    'pending' => 'odottaa',
74
+                    'pending' => 'vireillä',
75 75
                     'qualified' => 'hyväksytty',
76 76
                     'wip' => 'keskeneräinen',
77 77
                 ],
@@ -126,7 +126,7 @@ return [
126 126
 
127 127
         'stats' => [
128 128
             'cs' => 'Ympyräkoko',
129
-            'cs-mania' => 'Koskettimien määrä',
129
+            'cs-mania' => 'Näppäinten määrä',
130 130
             'drain' => 'HP Drain',
131 131
             'accuracy' => 'Tarkkuus',
132 132
             'ar' => 'Lähestymisnopeus',

+ 6
- 6
resources/lang/fi/community.php View File

@@ -30,9 +30,9 @@ return [
30 30
 
31 31
         'dev_quote' => 'osu! on täysin ilmainen peli, mutta sen pystyssä pitäminen ei todellakaan ole ilmaista.
32 32
         Palvelimien järjestämisen ja korkealaatuisen kansainvälisen kaistan lisäksi järjestelmän -ja yhteisön ylläpito,  
33
-        palkintojen tarjoaminen kilpailuihin, tukipyyntöihin vastaaminen ja yleisesti porukan pitäminen tyytyväisenä kuluttaa huomattavan summan rahaa!
34
-        Äläkä unohda, teemme tämän kaiken ilman mainoksia, työkalupalkkeja tai vastaavia.
35
-            <br/><br/>Minä, joka yleisimmin tunnetaan nimellä "peppy" pitää osun! toiminnassa suurilta osin yksinään.
33
+        palkintojen tarjoaminen kilpailuihin, tukipyyntöihin vastaaminen ja yleisesti porukan pitäminen tyytyväisenä kuluttaa huomattavan määrän rahaa!
34
+        Äläkä unohda, että teemme tämän kaiken ilman mainoksia, työkalupalkkeja tai vastaavia.
35
+            <br/><br/>Minä, joka yleisimmin tunnetaan nimestä "peppy" pidän osun! toiminnassa suurilta osin yksin.
36 36
             Jouduin Lopettamaan päivätyöni pysyäkseni osun! mukana
37 37
             ja silti itse asettamieni laatuvaatimusten pitäminen on ajoittain hankalaa.
38 38
             Haluaisin henkilökohtaisesti kiittää kaikkia, jotka ovat tukeneet osun! toimintaa tähän mennessä 
@@ -77,7 +77,7 @@ return [
77 77
 
78 78
             'early_access' => [
79 79
                 'title' => 'Ennakkojulkaisut',
80
-                'description' => 'Pääsy uusimpiin versioihin, joissa voit kokeilla uusia ominaisuuksia ennen päivitysten julkaisua!',
80
+                'description' => 'Pääsy uusimpiin versioihin, joissa voit kokeilla uusia ominaisuuksia ennen niiden julkaisua!',
81 81
             ],
82 82
 
83 83
             'customisation' => [
@@ -86,13 +86,13 @@ return [
86 86
             ],
87 87
 
88 88
             'beatmap_filters' => [
89
-                'title' => 'Beatmappien Suodatus',
89
+                'title' => 'Beatmap Suodattimet',
90 90
                 'description' => 'Suodata beatmappien hakua pelatun, pelaamattoman sekä kartassa saavutetun luokituksen mukaan.',
91 91
             ],
92 92
 
93 93
             'yellow_fellow' => [
94 94
                 'title' => 'Keltainen Kaveri',
95
-                'description' => 'Sinut tunnistaa pelinsisäisissä keskusteluissa kirkkaankeltaisesta käyttäjänimen väristä.',
95
+                'description' => 'Saat pelinsisäisiin keskusteluihin keltaisen käyttäjänimen, jolla sinut otetaan varmasti huomioon.',
96 96
             ],
97 97
 
98 98
             'speedy_downloads' => [

+ 3
- 3
resources/lang/fi/contest.php View File

@@ -54,7 +54,7 @@ return [
54 54
         'too_big' => 'Tähän kilpailuun voi lähettää korkeintaan :limit työtä.',
55 55
     ],
56 56
     'beatmaps' => [
57
-        'download' => 'Lataa tuotos',
57
+        'download' => 'Lataa ehdokas',
58 58
     ],
59 59
     'vote' => [
60 60
         'list' => 'äänet',
@@ -70,8 +70,8 @@ return [
70 70
         ],
71 71
     ],
72 72
     'states' => [
73
-        'entry' => 'Osallistuminen Avoinna',
74
-        'voting' => 'Äänestys on alkanut',
73
+        'entry' => 'Avoinna',
74
+        'voting' => 'Äänestys Alkanut',
75 75
         'results' => 'Tulokset Julkistettu',
76 76
     ],
77 77
 ];

+ 1
- 1
resources/lang/fi/errors.php View File

@@ -35,7 +35,7 @@ return [
35 35
         'standard_converts_only' => 'Tuloksia valitulle pelimuodolle ei löydy tässä vaikeustasossa.',
36 36
     ],
37 37
     'checkout' => [
38
-        'generic' => '',
38
+        'generic' => 'Ostoksesi valmistelussa tapahtui virhe.',
39 39
     ],
40 40
     'logged_out' => 'Sinut on kirjattu ulos. Kirjaudu sisään ja yritä uudelleen.',
41 41
     'supporter_only' => 'Sinun täytyy olla Tukija käyttääksesi tätä ominaisuutta.',

+ 3
- 3
resources/lang/fi/layout.php View File

@@ -127,8 +127,8 @@ return [
127 127
             'modding-history-posts' => 'käyttäjän modausviestit',
128 128
             'modding-history-votesGiven' => 'käyttäjän antamat modausäänet',
129 129
             'modding-history-votesReceived' => 'käyttäjän saamat modausäänet',
130
-            'oauth_login' => '',
131
-            'oauth_request' => '',
130
+            'oauth_login' => 'oauth kirjautuminen',
131
+            'oauth_request' => 'oauth yhdistäminen',
132 132
             'settings' => 'Asetukset',
133 133
         ],
134 134
         'store' => [
@@ -256,7 +256,7 @@ return [
256 256
             'account-edit' => 'Asetukset',
257 257
             'friends' => 'Kaverit',
258 258
             'logout' => 'Kirjaudu ulos',
259
-            'profile' => 'Profiili',
259
+            'profile' => 'Profiilini',
260 260
         ],
261 261
     ],
262 262
 

+ 1
- 1
resources/lang/fi/model_validation/store/product.php View File

@@ -20,7 +20,7 @@
20 20
 
21 21
 return [
22 22
     'insufficient_stock' => 'Tätä tuotetta ei ole tarpeeksi jäljellä!',
23
-    'must_separate' => '',
23
+    'must_separate' => 'Tämä tuote on ostettava erillään muista tuotteista',
24 24
     'not_available' => 'Tämä tuote ei ole saatavilla.',
25 25
     'too_many' => 'Voit tilata vain :count kappaletta tätä tuotetta tilausta kohden.',
26 26
 ];

+ 10
- 10
resources/lang/fi/oauth.php View File

@@ -19,23 +19,23 @@
19 19
  */
20 20
 
21 21
 return [
22
-    'cancel' => '',
22
+    'cancel' => 'Peruuta',
23 23
 
24 24
     'authorise' => [
25
-        'authorise' => '',
26
-        'request' => '',
27
-        'scopes_title' => '',
28
-        'title' => '',
25
+        'authorise' => 'Salli',
26
+        'request' => 'pyytää lupaa yhdistää tilillesi.',
27
+        'scopes_title' => 'Tämä sovellus voi:',
28
+        'title' => 'Yhdistyspyyntö',
29 29
 
30 30
         'wrong_user' => [
31
-            '_' => '',
32
-            'logout_link' => '',
31
+            '_' => 'Olet kirjautunut sisään käyttäjänä :user:. :logout_link.',
32
+            'logout_link' => 'Paina tästä kirjautuaksesi sisään toisella käyttäjällä',
33 33
         ],
34 34
     ],
35 35
 
36 36
     'login' => [
37
-        'download' => '',
38
-        'label' => '',
39
-        'title' => '',
37
+        'download' => 'Paina tästä ladataksesi pelin ja luodaksesi käyttäjän',
38
+        'label' => 'Ensiksi, kirjaudutaan käyttäjällesi!',
39
+        'title' => 'Kirjaudu Käyttäjälle',
40 40
     ],
41 41
 ];

+ 1
- 1
resources/lang/fi/store.php View File

@@ -90,7 +90,7 @@ return [
90 90
 
91 91
         'invoice' => 'Näytä lasku',
92 92
         'no_orders' => 'Ei tilauksia katsottavissa.',
93
-        'resume' => '',
93
+        'resume' => 'Jatka Kassalle',
94 94
 
95 95
         'item' => [
96 96
             'display_name' => [

+ 1
- 1
resources/lang/fi/users.php View File

@@ -353,7 +353,7 @@ return [
353 353
             'maximum_combo' => 'Suurin combo',
354 354
             'medals' => 'Mitalit',
355 355
             'play_count' => 'Pelikertoja',
356
-            'play_time' => 'Pelaamisaika yhteensä',
356
+            'play_time' => 'Pelattu aika',
357 357
             'ranked_score' => 'Tilastopisteet',
358 358
             'replays_watched_by_others' => 'Muiden Katsomat Uusinnat',
359 359
             'score_ranks' => 'Luokitukset',

+ 1
- 0
resources/lang/fr/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'administrateur',
79 79
         'bng' => 'nominateur',
80 80
         'owner' => 'mappeur',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/hu/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'admin',
79 79
         'bng' => 'nomináló',
80 80
         'owner' => 'készítő',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/id/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'admin',
79 79
         'bng' => 'nominator',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/it/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'amministratore',
79 79
         'bng' => 'nominatore',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 1
resources/lang/it/users.php View File

@@ -189,7 +189,7 @@ href="mailto:accounts@ppy.sh">contattare il supporto</a>.',
189 189
                     'title' => 'Beatmap Classificate e Approvate',
190 190
                 ],
191 191
                 'unranked' => [
192
-                    'title' => 'Beatmap In Attesa (:count)',
192
+                    'title' => 'Beatmap In Attesa',
193 193
                 ],
194 194
             ],
195 195
             'historical' => [

+ 4
- 4
resources/lang/ja/accounts.php View File

@@ -58,17 +58,17 @@ return [
58 58
 
59 59
         'signature' => [
60 60
             'title' => '署名',
61
-            'update' => '適用',
61
+            'update' => '更新',
62 62
         ],
63 63
     ],
64 64
 
65 65
     'update_email' => [
66
-        'email_subject' => 'osu! メールアドレス変更の確認',
66
+        'email_subject' => 'メールアドレス変更の確認',
67 67
         'update' => '更新',
68 68
     ],
69 69
 
70 70
     'update_password' => [
71
-        'email_subject' => 'osu!パスワード変更の確認',
71
+        'email_subject' => 'パスワード変更の確認',
72 72
         'update' => '更新',
73 73
     ],
74 74
 
@@ -89,7 +89,7 @@ return [
89 89
     'security' => [
90 90
         'current_session' => '現在',
91 91
         'end_session' => 'セッション終了',
92
-        'end_session_confirmation' => 'これによりこのデバイスでのセッションが終了します。本当によろしいですか?',
92
+        'end_session_confirmation' => 'このデバイスでのセッションが終了します。本当によろしいですか',
93 93
         'last_active' => '最終ログイン:',
94 94
         'title' => 'セキュリティ',
95 95
         'web_sessions' => 'webセッション',

+ 3
- 3
resources/lang/ja/authorization.php View File

@@ -30,17 +30,17 @@ return [
30 30
             'owner' => "自分のビートマップをノミネートすることはできません。",
31 31
         ],
32 32
         'resolve' => [
33
-            'not_owner' => 'スレッド作者とビートマップの者のみがディスカッションを解決できます。',
33
+            'not_owner' => 'スレッド作者とビートマップの所有者のみがディスカッションを解決できます。',
34 34
         ],
35 35
 
36 36
         'store' => [
37
-            'mapper_note_wrong_user' => 'ビートマップの所有者か、管理者/QATグループのメンバーのみマッパーノートに投稿できます。',
37
+            'mapper_note_wrong_user' => 'ビートマップの所有者か、ノミネーター/QATグループのメンバーのみマッパーノートに投稿できます。',
38 38
         ],
39 39
 
40 40
         'vote' => [
41 41
             'limit_exceeded' => '再度評価するには少し間を置いてください。',
42 42
             'owner' => "自分のディスカッションは評価できません。",
43
-            'wrong_beatmapset_state' => '保留中のビートマップはディスカッションでのみ評価できます。',
43
+            'wrong_beatmapset_state' => 'Pendingビートマップはディスカッションでのみ評価できます。',
44 44
         ],
45 45
     ],
46 46
 

+ 1
- 0
resources/lang/ja/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => '管理者',
79 79
         'bng' => 'ノミネーター',
80 80
         'owner' => 'マッパー',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 25
- 25
resources/lang/ja/beatmaps.php View File

@@ -96,7 +96,7 @@ return [
96 96
         ],
97 97
 
98 98
         'show' => [
99
-            'title' => ':title 作成 by :mapper',
99
+            'title' => ':title 作成 :mapper',
100 100
         ],
101 101
 
102 102
         'sort' => [
@@ -108,7 +108,7 @@ return [
108 108
 
109 109
         'stats' => [
110 110
             'deleted' => '削除済み',
111
-            'mapper_notes' => 'メモ',
111
+            'mapper_notes' => '注意',
112 112
             'mine' => '自分',
113 113
             'pending' => '未解決',
114 114
             'praises' => '称賛',
@@ -117,11 +117,11 @@ return [
117 117
         ],
118 118
 
119 119
         'status-messages' => [
120
-            'approved' => 'このビートマップは:dateに承認済みになりました!',
120
+            'approved' => 'このビートマップは:dateにApprovedになりました!',
121 121
             'graveyard' => "このビートマップは:dateから更新止まっているため放棄された可能性があります・・・",
122 122
             'loved' => 'このビートマップは:dateにLovedに追加しました!',
123
-            'ranked' => 'このビートマップは:dateにランクになりました!',
124
-            'wip' => '注:このビートマップは作者によって作成途中とされています。',
123
+            'ranked' => 'このビートマップは:dateにRankedになりました!',
124
+            'wip' => '注:このビートマップは作者によって作成途中とされています。',
125 125
         ],
126 126
 
127 127
     ],
@@ -130,8 +130,8 @@ return [
130 130
         'button' => 'ビートマップにHype!',
131 131
         'button_done' => 'Hype済みです!',
132 132
         'confirm' => "あなたの残りHype数は:n回です。Hypeは取り消しできません。Hypeしますか?",
133
-        'explanation' => 'このビートマップにHypeすることで注目が集まり、ノミネーションやランクがされやすくなります!',
134
-        'explanation_guest' => 'このビートマップにログインしてHypeすることで注目が集まり、ノミネーションやランクがされやすくなります!',
133
+        'explanation' => 'このビートマップにHypeすることで注目が集まり、ノミネーションやRankedがされやすくなります!',
134
+        'explanation_guest' => 'このビートマップにログインしてHypeすることで注目が集まり、ノミネーションやRankedがされやすくなります!',
135 135
         'new_time' => ":new_timeでhype数が回復します。",
136 136
         'remaining' => 'あなたの残りHype数は:remaining回です',
137 137
         'required_text' => 'Hype: :current/:required',
@@ -140,16 +140,16 @@ return [
140 140
     ],
141 141
 
142 142
     'feedback' => [
143
-        'button' => 'コメントを残す',
143
+        'button' => 'フィードバックを残す',
144 144
     ],
145 145
 
146 146
     'nominations' => [
147 147
         'delete' => '削除',
148
-        'delete_own_confirm' => '譜面は削除され、あなたはプロフィール画面にリダイレクトされます。本当によろしいですか?',
149
-        'delete_other_confirm' => 'ビートマップは削除され、あなたはユーザーのプロフィール画面にリダイレクトされます。本当によろしいですか?',
148
+        'delete_own_confirm' => '本当によろしいですか?ビートマップは削除され、プロフィール画面にリダイレクトされます。',
149
+        'delete_other_confirm' => '本当によろしいですか?ビートマップは削除され、ユーザーのプロフィール画面にリダイレクトされます。',
150 150
         'disqualification_prompt' => 'Disqualification(Qualifyの取り消し)の理由',
151 151
         'disqualified_at' => ':time_agoにDisqualifyされました(:reason).',
152
-        'disqualified_no_reason' => '理由が明示されていません',
152
+        'disqualified_no_reason' => '理由が設定されていません',
153 153
         'disqualify' => 'Disqualify',
154 154
         'incorrect_state' => 'エラーが発生しました。ページの再読み込みを試してください。',
155 155
         'love' => 'Lovedに追加',
@@ -157,7 +157,7 @@ return [
157 157
         'nominate' => 'ノミネート',
158 158
         'nominate_confirm' => 'このビートマップをノミネートしますか?',
159 159
         'nominated_by' => ':usersにノミネートされました。',
160
-        'qualified' => '特に問題がなかった場合、:dateにランク予定です。',
160
+        'qualified' => '特に問題がなかった場合、:dateにranked予定です。',
161 161
         'qualified_soon' => '特に問題がなかった場合、間もなくランクされる予定です。',
162 162
         'required_text' => 'ノミネート数: :current/:required',
163 163
         'reset_message_deleted' => '削除済み',
@@ -165,13 +165,13 @@ return [
165 165
         'unresolved_issues' => 'まだ未解決の問題があります。',
166 166
 
167 167
         'reset_at' => [
168
-            'nomination_reset' => ':userが:time_agoに新しい問題:discussion (:message)によりノミネーションをリセットしました。',
169
-            'disqualify' => ':userが:time_agoに新しい問題:discussion (:message)によりDisqualifyしました。',
168
+            'nomination_reset' => 'ノミネーション審査が:userによる新しい問題:discussion (:message)により、:time_agoにリセットされました。',
169
+            'disqualify' => ':userの新しい問題:discussion(:message)により、:time_agoにDisqualifyしました。',
170 170
         ],
171 171
 
172 172
         'reset_confirm' => [
173
-            'nomination_reset' => '本当によろしいですか?新しい問題を投稿すると審査中ではなくなります。',
174
-            'disqualify' => '本当にいですか?これによりビートマップがQualifiedから外され、ノミネーションがリセットされます。',
173
+            'nomination_reset' => '本当によろしいですか?新しい問題を投稿するとノミネーション審査中ではなくなります。',
174
+            'disqualify' => '本当によろしいですか?これによりビートマップがQualifiedから外され、ノミネーション審査がリセットされます。',
175 175
         ],
176 176
     ],
177 177
 
@@ -190,7 +190,7 @@ return [
190 190
                 'genre' => 'ジャンル',
191 191
                 'language' => '言語',
192 192
                 'extra' => '追加情報',
193
-                'rank' => 'ランク取得日',
193
+                'rank' => 'Rank取得日',
194 194
                 'played' => 'プレイ済み',
195 195
             ],
196 196
             'sorting' => [
@@ -199,7 +199,7 @@ return [
199 199
                 'difficulty' => '難易度',
200 200
                 'favourites' => 'お気に入り',
201 201
                 'updated' => '更新',
202
-                'ranked' => 'ランク',
202
+                'ranked' => 'Ranked',
203 203
                 'rating' => '評価',
204 204
                 'plays' => 'プレイ数',
205 205
                 'relevance' => '関連性',
@@ -213,7 +213,7 @@ return [
213 213
     ],
214 214
     'general' => [
215 215
         'recommended' => '推奨難易度',
216
-        'converts' => 'コンバートビートマップを含',
216
+        'converts' => 'コンバートビートマップを含める',
217 217
     ],
218 218
     'mode' => [
219 219
         'any' => '全て',
@@ -224,12 +224,12 @@ return [
224 224
     ],
225 225
     'status' => [
226 226
         'any' => '全て',
227
-        'ranked-approved' => 'ランク&承認済み',
228
-        'approved' => '承認済み',
227
+        'ranked-approved' => 'Ranked & Approved',
228
+        'approved' => 'Approved',
229 229
         'qualified' => 'Qualified',
230 230
         'loved' => 'Loved',
231 231
         'faves' => 'お気に入り',
232
-        'pending' => '保留中・製作中',
232
+        'pending' => 'Pending & WIP',
233 233
         'graveyard' => 'Graveyard',
234 234
         'my-maps' => 'マイマップ',
235 235
     ],
@@ -290,13 +290,13 @@ return [
290 290
     ],
291 291
     'extra' => [
292 292
         'video' => '動画あり',
293
-        'storyboard' => 'Storyboardあり',
293
+        'storyboard' => 'ストーリーボードあり',
294 294
     ],
295 295
     'rank' => [
296 296
         'any' => '全て',
297
-        'XH' => 'SS',
297
+        'XH' => 'Silver SS',
298 298
         'X' => 'SS',
299
-        'SH' => 'S',
299
+        'SH' => 'Silver S',
300 300
         'S' => 'S',
301 301
         'A' => 'A',
302 302
         'B' => 'B',

+ 6
- 6
resources/lang/ja/beatmapset_events.php View File

@@ -20,7 +20,7 @@
20 20
 
21 21
 return [
22 22
     'event' => [
23
-        'approve' => '承認済み',
23
+        'approve' => 'Approved',
24 24
         'discussion_delete' => 'モデレーターが:discussionを削除しました。',
25 25
         'discussion_post_delete' => 'モデレーターが:discussionから投稿を削除しました。',
26 26
         'discussion_post_restore' => 'モデレーターが:discussionから投稿を復元しました。',
@@ -37,8 +37,8 @@ return [
37 37
         'love' => ':userがLovedに追加しました。',
38 38
         'nominate' => ':userがノミネートしました。',
39 39
         'nomination_reset' => '新しい問題:discussionによりノミネートがリセットされました。',
40
-        'qualify' => 'このビートマップは既に必要なノミネーション数に達しており、申請されています。',
41
-        'rank' => 'ランクされました。',
40
+        'qualify' => 'このビートマップは既に必要なノミネーション数に達しており、Qualifiedされています。',
41
+        'rank' => 'Rankedされました。',
42 42
     ],
43 43
 
44 44
     'index' => [
@@ -65,9 +65,9 @@ return [
65 65
         'disqualify' => 'Disqualification(申請取り消し)',
66 66
         'issue_reopen' => 'ディスカッションを再開する',
67 67
         'issue_resolve' => 'ディスカッションを解決する',
68
-        'kudosu_allow' => '許可したKudosu',
69
-        'kudosu_deny' => '拒否したKudosu',
70
-        'kudosu_gain' => 'Kudosuを獲得する',
68
+        'kudosu_allow' => 'Kudosuを許可',
69
+        'kudosu_deny' => 'Kudosuを拒否',
70
+        'kudosu_gain' => 'Kudosuを獲得',
71 71
         'kudosu_lost' => 'Kudosuを失う',
72 72
         'kudosu_recalculate' => 'Kudosuの再計算',
73 73
         'love' => 'Love',

+ 12
- 12
resources/lang/ja/beatmapsets.php View File

@@ -34,18 +34,18 @@ return [
34 34
         'discussion' => 'ディスカッション',
35 35
 
36 36
         'details' => [
37
-            'approved' => '承認日時 ',
37
+            'approved' => 'Approved日 ',
38 38
             'favourite' => 'ビートマップセットをお気に入りに追加する',
39 39
             'favourited_count' => '+ そのほか:count人!',
40 40
             'logged-out' => 'ビートマップをダウンロードするにはログインが必要です!',
41
-            'loved' => 'loved追加された日 ',
41
+            'loved' => 'loved追加日 ',
42 42
             'mapped_by' => '作者 :mapper',
43 43
             'qualified' => 'qualifiedされた日',
44
-            'ranked' => 'ランクされた日 ',
44
+            'ranked' => 'Ranked日 ',
45 45
             'submitted' => '投稿日 ',
46 46
             'unfavourite' => 'ビートマップをお気に入りから外す',
47
-            'updated' => '最終更新',
48
-            'updated_timeago' => '最終更新時刻: :timeago',
47
+            'updated' => '最終更新 ',
48
+            'updated_timeago' => '最終更新 :timeago',
49 49
 
50 50
             'download' => [
51 51
                 '_' => 'ダウンロード',
@@ -56,7 +56,7 @@ return [
56 56
 
57 57
             'login_required' => [
58 58
                 'bottom' => 'より多くの機能にアクセスする',
59
-                'top' => 'サインイン',
59
+                'top' => 'ログイン',
60 60
             ],
61 61
         ],
62 62
 
@@ -65,14 +65,14 @@ return [
65 65
         ],
66 66
 
67 67
         'hype' => [
68
-            'action' => 'もしこのビートマップが良かった場合、Hypeすることでビートマップのステータスが<strong>ランク</strong>状態になります。',
68
+            'action' => 'もしこのビートマップが良かった場合、Hypeすることでビートマップのステータスが<strong>Ranked</strong>状態になります。',
69 69
 
70 70
             'current' => [
71 71
                 '_' => 'このビートマップは現在:statusです。',
72 72
 
73 73
                 'status' => [
74
-                    'pending' => '保留中',
75
-                    'qualified' => 'qualified',
74
+                    'pending' => 'Pending',
75
+                    'qualified' => 'Qualified',
76 76
                     'wip' => '作業中',
77 77
                 ],
78 78
             ],
@@ -83,11 +83,11 @@ return [
83 83
             'genre' => 'ジャンル',
84 84
             'language' => '言語',
85 85
             'no_scores' => 'データはまだ現在計算中です・・・',
86
-            'points-of-failure' => '失敗地点',
86
+            'points-of-failure' => 'Fail地点',
87 87
             'source' => 'ソース',
88 88
             'success-rate' => 'クリア率',
89 89
             'tags' => 'タグ',
90
-            'unranked' => 'ランクなしのビートマップ',
90
+            'unranked' => 'Unrankedビートマップ',
91 91
         ],
92 92
 
93 93
         'scoreboard' => [
@@ -95,7 +95,7 @@ return [
95 95
             'country' => '国別ランキング',
96 96
             'friend' => 'フレンドランキング',
97 97
             'global' => '世界ランキング',
98
-            'supporter-link' => '<a href=":link">ここ</a>をクリックする事でサポーターの詳細が見れます。',
98
+            'supporter-link' => '<a href=":link">ここ</a>をクリックする事でosu!サポーターの詳細が見れます。',
99 99
             'supporter-only' => 'フレンドランキングと国別ランキングを利用するにはosu!サポータータグが必要です!',
100 100
             'title' => 'スコアボード',
101 101
 

+ 2
- 2
resources/lang/ja/home.php View File

@@ -128,8 +128,8 @@ return [
128 128
             ],
129 129
         ],
130 130
         'beatmaps' => [
131
-            'new' => '最新のRanked譜面',
132
-            'popular' => '人気の譜面',
131
+            'new' => '最新のRankedビートマップ',
132
+            'popular' => '人気のビートマップ',
133 133
             'by' => 'by',
134 134
             'plays' => ':count plays',
135 135
         ],

+ 1
- 1
resources/lang/ja/layout.php View File

@@ -53,7 +53,7 @@ return [
53 53
         ],
54 54
         'beatmaps' => [
55 55
             '_' => 'ビートマップ',
56
-            'artists' => 'おすすめアーティスト',
56
+            'artists' => '注目アーティスト',
57 57
             'beatmap_discussion_posts-index' => 'ディスカッション投稿',
58 58
             'beatmap_discussions-index' => 'ディスカッション',
59 59
             'beatmapset-watches-index' => 'moddingウォッチリスト',

+ 1
- 1
resources/lang/ja/users.php View File

@@ -185,7 +185,7 @@ return [
185 185
                     'title' => 'Lovedされたビートマップ',
186 186
                 ],
187 187
                 'ranked_and_approved' => [
188
-                    'title' => 'ランク&承認済みのビートマップ',
188
+                    'title' => 'Ranked & Approvedのビートマップ',
189 189
                 ],
190 190
                 'unranked' => [
191 191
                     'title' => '保留中のビートマップ',

+ 1
- 0
resources/lang/ko/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => '관리자',
79 79
         'bng' => 'nominator',
80 80
         'owner' => '매퍼',
81
+        'qat' => 'QAT',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 1
- 0
resources/lang/nl/beatmap_discussions.php View File

@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'administrator',
79 79
         'bng' => 'nominator',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 4
- 4
resources/lang/no/accounts.php View File

@@ -20,7 +20,7 @@
20 20
 
21 21
 return [
22 22
     'edit' => [
23
-        'title' => '<strong>Kontoinnstillinger</strong>',
23
+        'title' => '<strong>Konto</strong> Innstillinger',
24 24
         'title_compact' => 'innstillinger',
25 25
         'username' => 'brukernavn',
26 26
 
@@ -68,12 +68,12 @@ return [
68 68
     ],
69 69
 
70 70
     'update_password' => [
71
-        'email_subject' => 'Bekreft endring av passord på osu!',
71
+        'email_subject' => 'bekreft endring av osu! passord',
72 72
         'update' => 'oppdater',
73 73
     ],
74 74
 
75 75
     'playstyles' => [
76
-        'title' => 'Spillestiler',
76
+        'title' => 'Spillemåter',
77 77
         'mouse' => 'mus',
78 78
         'keyboard' => 'tastatur',
79 79
         'tablet' => 'tegnebrett',
@@ -89,7 +89,7 @@ return [
89 89
     'security' => [
90 90
         'current_session' => 'nåværende',
91 91
         'end_session' => 'Avslutt økt',
92
-        'end_session_confirmation' => 'Dette vil ummidelbart avslutte økten på denne enheten. Er du sikker?',
92
+        'end_session_confirmation' => 'Dette vil umiddelbart avslutte økten på denne enheten. Er du sikker?',
93 93
         'last_active' => 'Sist aktiv:',
94 94
         'title' => 'Sikkerhet',
95 95
         'web_sessions' => 'websideøkter',

+ 1
- 1
resources/lang/no/api.php View File

@@ -27,7 +27,7 @@ return [
27 27
     ],
28 28
 
29 29
     'scopes' => [
30
-        'identify' => 'Identifiser deg og les din offentlige profil.',
30
+        'identify' => 'Identifiser deg selv og les din offentlige profil.',
31 31
 
32 32
         'friends' => [
33 33
             'read' => 'Se hvem du følger.',

+ 2
- 2
resources/lang/no/artist.php View File

@@ -19,8 +19,8 @@
19 19
  */
20 20
 
21 21
 return [
22
-    'page_description' => 'Utvalgte artister på osu!',
23
-    'title' => 'Fremhevede Artister',
22
+    'page_description' => 'Featured artists på osu!',
23
+    'title' => 'Featured Artists',
24 24
 
25 25
     'admin' => [
26 26
         'hidden' => 'ARTISTEN ER FOR ØYEBLIKKET SKJULT',

+ 9
- 9
resources/lang/no/authorization.php View File

@@ -27,7 +27,7 @@ return [
27 27
         'nominate' => [
28 28
             'exhausted' => 'Du har nådd din nominasjons-grense for dagen, vennligst prøv igjen i morgen.',
29 29
             'incorrect_state' => 'Feil under utføringen av denne handlingen, prøv å oppdatere siden.',
30
-            'owner' => "Du kan ikke nominere ditt eget beatmap.",
30
+            'owner' => "Du kan ikke nominere din egen beatmap.",
31 31
         ],
32 32
         'resolve' => [
33 33
             'not_owner' => 'Bare personen som startet tråden og beatmapeieren kan markere en diskusjon som løst.',
@@ -52,7 +52,7 @@ return [
52 52
     ],
53 53
 
54 54
     'chat' => [
55
-        'blocked' => 'Kan ikke sende melding til en bruker som blokkerer deg eller som du har blokkert.',
55
+        'blocked' => 'Kan ikke sende en melding til en bruker som blokkerer deg eller som du har blokkert.',
56 56
         'friends_only' => 'Brukeren blokkerer meldinger fra personer som ikke er på deres venneliste.',
57 57
         'moderated' => 'Denne kanalen er for tiden moderert.',
58 58
         'no_access' => 'Du har ingen adgang til denne kanalen.',
@@ -98,13 +98,13 @@ return [
98 98
 
99 99
         'topic' => [
100 100
             'reply' => [
101
-                'double_post' => 'Vær så snill å rediger ditt siste innlegg, i steden for å legge til et nytt innlegg.',
101
+                'double_post' => 'Vær så snill å rediger det siste innlegget ditt, i steden for å legge til et nytt innlegg.',
102 102
                 'locked' => 'Kan ikke svare på en låst tråd.',
103 103
                 'no_forum_access' => 'Adgang til forespurt forum kreves.',
104 104
                 'no_permission' => 'Ingen tillatelse til å svare.',
105 105
 
106 106
                 'user' => [
107
-                    'require_login' => 'Vennligst logg  for å svare.',
107
+                    'require_login' => 'Vennligst logg inn for å svare.',
108 108
                     'restricted' => "Kan ikke svare mens kontoen din er begrenset.",
109 109
                     'silenced' => "Kan ikke svare mens kontoen din er stum.",
110 110
                 ],
@@ -118,7 +118,7 @@ return [
118 118
 
119 119
             'vote' => [
120 120
                 'no_forum_access' => 'Adgang til forespurt forum kreves.',
121
-                'over' => 'Avstemningen er over, og derfor kan det ikke stemmes lenger.',
121
+                'over' => 'Avstemningen er over, og derfor kan det ikke stemmes lenger.',
122 122
                 'voted' => 'Å endre stemme er ikke tillatt.',
123 123
 
124 124
                 'user' => [
@@ -129,7 +129,7 @@ return [
129 129
             ],
130 130
 
131 131
             'watch' => [
132
-                'no_forum_access' => 'Tilgang til forespurte forum er nødvendig.',
132
+                'no_forum_access' => 'Adgang til forespurt forum er nødvendig.',
133 133
             ],
134 134
         ],
135 135
 
@@ -145,7 +145,7 @@ return [
145 145
         ],
146 146
     ],
147 147
 
148
-    'require_login' => 'Vennligst logg  for å fortsette.',
148
+    'require_login' => 'Vennligst logg inn for å fortsette.',
149 149
 
150 150
     'unauthorized' => 'Ingen tilgang.',
151 151
 
@@ -157,8 +157,8 @@ return [
157 157
         'page' => [
158 158
             'edit' => [
159 159
                 'locked' => 'Brukersiden er låst.',
160
-                'not_owner' => 'Kan bare redigere egne brukersiden.',
161
-                'require_supporter_tag' => 'osu!supporter merke kreves.',
160
+                'not_owner' => 'Kan kun redigere egen brukerside.',
161
+                'require_supporter_tag' => 'osu!supporter tag kreves.',
162 162
             ],
163 163
         ],
164 164
     ],

+ 3
- 2
resources/lang/no/beatmap_discussions.php View File

@@ -21,7 +21,7 @@
21 21
 return [
22 22
     'authorizations' => [
23 23
         'update' => [
24
-            'null_user' => 'Du må være logget  for å redigere.',
24
+            'null_user' => 'Du må være logget inn for å redigere.',
25 25
             'system_generated' => 'Systemgenererte innlegg kan ikke redigeres.',
26 26
             'wrong_user' => 'Du må være eier av innlegget for å redigere.',
27 27
         ],
@@ -62,7 +62,7 @@ return [
62 62
 
63 63
     'reply' => [
64 64
         'open' => [
65
-            'guest' => 'Logg  for å svare',
65
+            'guest' => 'Logg inn for å svare',
66 66
             'user' => 'Svar',
67 67
         ],
68 68
     ],
@@ -78,6 +78,7 @@ return [
78 78
         'admin' => 'admin',
79 79
         'bng' => 'nominator',
80 80
         'owner' => 'mapper',
81
+        'qat' => 'qat',
81 82
     ],
82 83
 
83 84
     'user_filter' => [

+ 4
- 4
resources/lang/no/beatmaps.php View File

@@ -43,7 +43,7 @@ return [
43 43
         'message_type_select' => 'Velg kommentartype',
44 44
         'reply_notice' => 'Trykk enter for å svare.',
45 45
         'reply_placeholder' => 'Skriv din respons her',
46
-        'require-login' => 'Vennligst logg  for å skrive et innlegg eller svare',
46
+        'require-login' => 'Vennligst logg inn for å skrive et innlegg eller svare',
47 47
         'resolved' => 'Løst',
48 48
         'restore' => 'gjenopprett',
49 49
         'title' => 'Diskusjoner',
@@ -162,7 +162,7 @@ return [
162 162
         'required_text' => 'Nominasjoner :current/:required',
163 163
         'reset_message_deleted' => 'slettet',
164 164
         'title' => 'Nominasjon Status',
165
-        'unresolved_issues' => 'Det er fortsatt uløste problemer som må tas opp først.',
165
+        'unresolved_issues' => 'Det er fortsatt uløste problemer som må løses først.',
166 166
 
167 167
         'reset_at' => [
168 168
             'nomination_reset' => 'Nominasjonsprosessen ble tilbakestilt :time_ago av :user med et nytt problem :discussion (:message).',
@@ -178,7 +178,7 @@ return [
178 178
     'listing' => [
179 179
         'search' => [
180 180
             'prompt' => 'skriv inn nøkkelord...',
181
-            'login_required' => 'Logg  for å søke.',
181
+            'login_required' => 'Logg inn for å søke.',
182 182
             'options' => 'Flere søkemuligheter',
183 183
             'supporter_filter' => 'Filtrering ved bruk av :filters krever en aktiv osu!supporter tag',
184 184
             'not-found' => 'ingen treff',
@@ -206,7 +206,7 @@ return [
206 206
                 'nominations' => 'Nominasjoner',
207 207
             ],
208 208
             'supporter_filter_quote' => [
209
-                '_' => 'Filtrering av :filters krever en aktiv :link',
209
+                '_' => 'Filtrering ved bruk av :filters krever en aktiv :link',
210 210
                 'link_text' => 'osu!supporter tag',
211 211
             ],
212 212
         ],

+ 11
- 11
resources/lang/no/beatmapsets.php View File

@@ -21,7 +21,7 @@
21 21
 return [
22 22
     'availability' => [
23 23
         'disabled' => 'Dette beatmappet er for øyeblikket ikke tilgjengelig for nedlastning.',
24
-        'parts-removed' => 'Deler av dette beatmappet har blitt fjernet etter forespørsel fra skaperen eller en tredjepart rettighetshaver.',
24
+        'parts-removed' => 'Deler av dette beatmappet har blitt fjernet etter forespørsel av skaperen eller en tredjepart rettighetshaver.',
25 25
         'more-info' => 'Klikk her for mer informasjon.',
26 26
     ],
27 27
 
@@ -34,16 +34,16 @@ return [
34 34
         'discussion' => 'Diskusjon',
35 35
 
36 36
         'details' => [
37
-            'approved' => 'godjent  ',
37
+            'approved' => 'godjent den ',
38 38
             'favourite' => 'Marker dette beatmapsettet som en favoritt',
39
-            'favourited_count' => '+ 1 annen!|+ :count andre!',
39
+            'favourited_count' => '+ :count_delimited annen!|+ :count_delimited andre!',
40 40
             'logged-out' => 'Du må logge inn før du kan laste ned beatmaps!',
41
-            'loved' => 'elsket  ',
41
+            'loved' => 'elsket den ',
42 42
             'mapped_by' => 'mappet av :mapper',
43
-            'qualified' => 'kvalifisert  ',
44
-            'ranked' => 'rangert  ',
43
+            'qualified' => 'kvalifisert den ',
44
+            'ranked' => 'rangert den ',
45 45
             'submitted' => 'innsendt på ',
46
-            'unfavourite' => 'Fjern favorittmarkeringen på dette beatmapsettet',
46
+            'unfavourite' => 'Fjern dette beatmapsettet som en favoritt',
47 47
             'updated' => 'sist oppdatert på ',
48 48
             'updated_timeago' => 'sist oppdatert :timeago',
49 49
 
@@ -56,7 +56,7 @@ return [
56 56
 
57 57
             'login_required' => [
58 58
                 'bottom' => 'for å få tilgang til flere funksjoner',
59
-                'top' => 'Logg ',
59
+                'top' => 'Logg inn',
60 60
             ],
61 61
         ],
62 62
 
@@ -73,7 +73,7 @@ return [
73 73
                 'status' => [
74 74
                     'pending' => 'ventende',
75 75
                     'qualified' => 'kvalifisert',
76
-                    'wip' => 'arbeid pågår',
76
+                    'wip' => 'under konstruksjon',
77 77
                 ],
78 78
             ],
79 79
         ],
@@ -101,7 +101,7 @@ return [
101 101
 
102 102
             'headers' => [
103 103
                 'accuracy' => 'Presisjon',
104
-                'combo' => 'Maks Combo',
104
+                'combo' => 'Maks Kombo',
105 105
                 'miss' => 'Bom',
106 106
                 'mods' => 'Modifikasjoner',
107 107
                 'player' => 'Spiller',
@@ -130,7 +130,7 @@ return [
130 130
             'drain' => 'HP avløp',
131 131
             'accuracy' => 'Presisjon',
132 132
             'ar' => 'Tilnærmingsrate',
133
-            'stars' => 'Stjerne Vanskelighetsgrad',
133
+            'stars' => 'Vanskelighetsgrad (*)',
134 134
             'total_length' => 'Lengde',
135 135
             'bpm' => 'BPM',
136 136
             'count_circles' => 'Antall Sirkler',

+ 3
- 3
resources/lang/no/changelog.php View File

@@ -36,7 +36,7 @@ return [
36 36
 
37 37
     'index' => [
38 38
         'page_title' => [
39
-            '_' => 'endringslogg listing',
39
+            '_' => 'endringslogg liste',
40 40
             '_from' => 'endringer siden :from',
41 41
             '_from_to' => 'endringer mellom :from og :to',
42 42
             '_stream' => 'endringer i :stream',
@@ -48,14 +48,14 @@ return [
48 48
 
49 49
         'title' => [
50 50
             '_' => 'Endringslogg :info',
51
-            'info' => 'Listing',
51
+            'info' => 'Oversikt',
52 52
         ],
53 53
     ],
54 54
 
55 55
     'support' => [
56 56
         'heading' => 'Liker du denne oppdateringen?',
57 57
         'text_1' => 'Støtt videreutviklingen av osu! og :link i dag!',
58
-        'text_1_link' => 'bli en "supporter"',
58
+        'text_1_link' => 'bli en osu!supporter',
59 59
         'text_2' => 'Du vil ikke bare hjelpe til med å framskynde utviklingen, men du vil også da tilgang til ekstra funksjoner og tilpasninger!',
60 60
     ],
61 61
 ];

+ 2
- 2
resources/lang/no/chat.php View File

@@ -20,7 +20,7 @@
20 20
 
21 21
 return [
22 22
     'coming_soon' => 'kommer snart',
23
-    'limitation_notice' => 'Merk: Bare folk som bruker <a href=":lazer_link">osu!lazer</a> eller den nye nettsiden vil motta direktemeldinger gjennom dette syetemet. <br/>Hvis du er usikker, send dem en melding via <a href=":oldpm_link">den gamle forumsiden for private meldinger</a> isteden.',
23
+    'limitation_notice' => 'Merk: Bare folk som bruker <a href=":lazer_link">osu!lazer</a> eller den nye nettsiden vil motta direktemeldinger gjennom dette syetemet. <br/>Hvis du er usikker, send dem en melding via <a href=":oldpm_link">private meldinger på den gamle forumsiden</a> isteden.',
24 24
     'talking_in' => 'snakker i :channel',
25 25
     'talking_with' => 'snakker med :name',
26 26
     'title_compact' => 'chat',
@@ -43,7 +43,7 @@ return [
43 43
     ],
44 44
     'no-conversations' => [
45 45
         'howto' => "Start samtaler gjennom en brukers profil eller deres brukerkort.",
46
-        'lazer' => 'Offentlige kanaler som du deltar via <a href=":link">osu!lazer</a> vil også bli synlig her.',
46
+        'lazer' => 'Offentlige kanaler som du deltar i via <a href=":link">osu!lazer</a> vil også bli synlig her.',
47 47
         'pm_limitations' => 'Bare folk som bruker <a href=":link">osu!lazer</a> eller den nye nettsiden vil motta direktemeldinger.',
48 48
         'title' => 'ingen samtaler ennå',
49 49
     ],

+ 3
- 3
resources/lang/no/comments.php View File

@@ -37,20 +37,20 @@ return [
37 37
         'textarea_hint' => [
38 38
             '_' => 'Trykk enter for å dele :action. Bruk skift+enter for å forskyve en linje nedover.',
39 39
             'edit' => 'lagre',
40
-            'new' => 'innlegg',
40
+            'new' => 'del',
41 41
             'reply' => 'svar',
42 42
         ],
43 43
     ],
44 44
 
45 45
     'guest_button' => [
46
-        'new' => 'Logg  for å kommentere',
46
+        'new' => 'Logg inn for å kommentere',
47 47
         'reply' => 'Logg inn for å svare',
48 48
     ],
49 49
 
50 50
     'index' => [
51 51
         'title' => [
52 52
             '_' => 'Kommentarer :info',
53
-            'info' => 'Listing',
53
+            'info' => 'Liste',
54 54
         ],
55 55
     ],
56 56
 

+ 9
- 9
resources/lang/no/common.php View File

@@ -31,7 +31,7 @@ return [
31 31
 
32 32
     'buttons' => [
33 33
         'admin' => 'Admin',
34
-        'back_to_previous' => 'Gå tilbake til forrige posisjon',
34
+        'back_to_previous' => 'Returner til forrige posisjon',
35 35
         'back_to_top' => 'Tilbake til toppen',
36 36
         'cancel' => 'Avbryt',
37 37
         'change' => 'endre',
@@ -44,7 +44,7 @@ return [
44 44
         'hide' => 'skjul',
45 45
         'permalink' => 'permalenke',
46 46
         'permalink_copied' => 'lenke kopiert',
47
-        'post' => 'Innlegg',
47
+        'post' => 'Del',
48 48
         'reply' => 'Svar',
49 49
         'reply_reopen' => 'Svar og åpne igjen',
50 50
         'reply_resolve' => 'Svar og marker som løst',
@@ -61,16 +61,16 @@ return [
61 61
     ],
62 62
 
63 63
     'count' => [
64
-        'badges' => ':count merke|:count merker',
65
-        'days' => ':count dag|:count dager',
64
+        'badges' => ':count_delimited merke|:count_delimited merker',
65
+        'days' => ':count_delimited dag|:count_delimited dager',
66 66
         'hour_short_unit' => 't|t',
67
-        'hours' => ':count time|:count timer',
68
-        'item' => ':count enhet|:count enheter',
67
+        'hours' => ':count_delimited time|:count_delimited timer',
68
+        'item' => ':count_delimited enhet|:count_delimited enheter',
69 69
         'minute_short_unit' => 'm|m',
70
-        'minutes' => ':count minutt|:count minutter',
71
-        'months' => ':count måned|:count måneder',
70
+        'minutes' => '::count_delimited minutt|:count_delimited minutter',
71
+        'months' => '::count_delimited måned|:count_delimited måneder',
72 72
         'second_short_unit' => 's|s',
73
-        'years' => ':count år|:count år',
73
+        'years' => ':count_delimited år|:count_delimited år',
74 74
     ],
75 75
 
76 76
     'countdown' => [

+ 6
- 6
resources/lang/no/community.php View File

@@ -23,7 +23,7 @@ return [
23 23
         'header' => [
24 24
             // size in font-size
25 25
             'big_description' => 'Elsker du osu!?<br/>
26
-                                Støtt utviklerne av osu! :D',
26
+                                Støtt utviklingen av osu! :D',
27 27
             'small_description' => '',
28 28
             'support_button' => 'Jeg vil støtte osu!',
29 29
         ],
@@ -50,8 +50,8 @@ return [
50 50
         'why_support' => [
51 51
             'title' => 'Hvorfor burde jeg støtte osu!?',
52 52
             'blocks' => [
53
-                'dev' => 'Hovedsakelig ttviklet og vedlikeholdt av en fyr i Australia',
54
-                'time' => 'Det tar så mye tid å holde det kjørende at det ikke lenger er mulig å kalle det en "hobby".',
53
+                'dev' => 'Hovedsakelig utviklet og vedlikeholdt av en fyr i Australia',
54
+                'time' => 'Det tar så mye tid å vedlikeholde det at det ikke lenger er mulig å kalle det en "hobby".',
55 55
                 'ads' => 'Ingen annonser noen steder. <br/><br/>
56 56
                         I motsetning til 99.95% av websider, tjener vi ikke på å skyve ting i ansiktet ditt.',
57 57
                 'goodies' => 'Du får noen ekstra godbiter!',
@@ -67,7 +67,7 @@ return [
67 67
 
68 68
             'auto_downloads' => [
69 69
                 'title' => 'Automatiske nedlastinger',
70
-                'description' => 'Automatisk nedlasting mens du er i flerspiller spill, tilskuer andre, eller klikker på hyperkoblinger i chatten!',
70
+                'description' => 'Automatiske nedlastinger når du deltar i flerspiller spill, mens du ser på andre, eller hvis du klikker på hyperkoblinger i chatten!',
71 71
             ],
72 72
 
73 73
             'upload_more' => [
@@ -77,7 +77,7 @@ return [
77 77
 
78 78
             'early_access' => [
79 79
                 'title' => 'Tidlig tilgang',
80
-                'description' => 'Tilgang til tidlig utgivelser, hvor du kan prøve nye funksjoner før de r offentlige!',
80
+                'description' => 'Tilgang til tidlig utgivelser, hvor du kan prøve nye funksjoner før de blir offentlige!',
81 81
             ],
82 82
 
83 83
             'customisation' => [
@@ -117,7 +117,7 @@ return [
117 117
 
118 118
             'sort_options' => [
119 119
                 'title' => 'Sorteringsalternativer',
120
-                'description' => 'Evnen til å se landsrangering / vennerangering / modifikasjons-spesifikke rangeringer på beatmaps i spillet.',
120
+                'description' => 'Evnen til å se landsrangering / vennerangering / modifikasjons-spesifikke rangeringer i spillet.',
121 121
             ],
122 122
 
123 123
             'feel_special' => [

+ 13
- 13
resources/lang/no/contest.php View File

@@ -21,11 +21,11 @@
21 21
 return [
22 22
     'header' => [
23 23
         'small' => 'Konkurrer i flere måter enn bare å trykke på sirkler.',
24
-        'large' => 'Felleskapskonkurranser',
24
+        'large' => 'Fellesskapskonkurranser',
25 25
     ],
26 26
     'voting' => [
27 27
         'over' => 'Avstemmingen for denne konkurransen har avsluttet',
28
-        'login_required' => 'Vennligst logg  for å stemme.',
28
+        'login_required' => 'Vennligst logg inn for å stemme.',
29 29
 
30 30
         'best_of' => [
31 31
             'none_played' => "Det ser ikke ut som du har spilt noen av beatmappene som kvaliseres for denne konkurransen!",
@@ -38,31 +38,31 @@ return [
38 38
         ],
39 39
     ],
40 40
     'entry' => [
41
-        '_' => 'påmelding',
42
-        'login_required' => 'Vennligst logg  for å delta i konkurransen.',
41
+        '_' => 'deltager',
42
+        'login_required' => 'Vennligst logg inn for å delta i konkurransen.',
43 43
         'silenced_or_restricted' => 'Du kan ikke bli med i konkurranser mens du er begrenset eller stum.',
44 44
         'preparation' => 'Vi driver for tiden å forbereder denne konkurransen. Vennligst vent tålmodig!',
45
-        'over' => 'Takk for dine påmeldinger! Muligheten for innleveringer har lukket seg for denne konkurransen og avstemning vil åpne snart.',
46
-        'limit_reached' => 'Du har nådd påmeldingsgrensen for denne konkurransen',
47
-        'drop_here' => 'Slipp påmeldingen din her',
45
+        'over' => 'Takk for dine bidrag! Påmeldingen for denne konkurransen har stengt og avstemningen vil åpne snart.',
46
+        'limit_reached' => 'Du har nådd maks antall bidrag for denne konkurransen',
47
+        'drop_here' => 'Slipp bidraget ditt her',
48 48
         'download' => 'Last ned .osz',
49 49
         'wrong_type' => [
50 50
             'art' => 'Bare .jpg og .png filer er akseptert for denne konkurransen.',
51 51
             'beatmap' => 'Bare .osu filer er akseptert for denne konkurransen.',
52
-            'music' => 'Bare .mp3 filer er aksepter for denne konkurransen.',
52
+            'music' => 'Bare .mp3 filer er akseptert for denne konkurransen.',
53 53
         ],
54
-        'too_big' => 'Påmeldinger for denne konkurransen kan bare være opp til :limit.',
54
+        'too_big' => 'Bidrag til denne konkurransen kan maks være :limit.',
55 55
     ],
56 56
     'beatmaps' => [
57
-        'download' => 'Last ned Påmeldingen',
57
+        'download' => 'Last ned bidraget',
58 58
     ],
59 59
     'vote' => [
60 60
         'list' => 'stemmer',
61
-        'count' => ':count stemme|:count stemmer',
62
-        'points' => ':count poeng|:count poeng',
61
+        'count' => ':count_delimited stemme|:count_delimited stemmer',
62
+        'points' => ':count_delimited poeng|:count_delimited poeng',
63 63
     ],
64 64
     'dates' => [
65
-        'ended' => 'Avslutter :date',
65
+        'ended' => 'Avsluttet :date',
66 66
 
67 67
         'starts' => [
68 68
             '_' => 'Starter :date',

+ 2
- 2
resources/lang/no/errors.php View File

@@ -20,7 +20,7 @@
20 20
 
21 21
 return [
22 22
     'codes' => [
23
-        'http-401' => 'Vennligst logg  for å fortsette.',
23
+        'http-401' => 'Vennligst logg inn for å fortsette.',
24 24
         'http-403' => 'Ingen tillatelse.',
25 25
         'http-404' => 'Fantes ikke.',
26 26
         'http-429' => 'For mange forsøk. Prøv igjen senere.',
@@ -37,7 +37,7 @@ return [
37 37
     'checkout' => [
38 38
         'generic' => 'En feil oppstod under klargjøring av kjøpet ditt.',
39 39
     ],
40
-    'logged_out' => 'Du har blitt avlogget. Vennligst logg på og prøv på nytt.',
40
+    'logged_out' => 'Du har blitt logget ut. Vennligst logg inn og prøv på nytt.',
41 41
     'supporter_only' => 'Du må være en osu!supporter for å bruke denne funksjonen.',
42 42
     'no_restricted_access' => 'Du kan ikke utføre denne handlingen mens kontoen din er i begrenset tilstand.',
43 43
     'unknown' => 'En ukjent feil har oppstått.',

+ 1
- 1
resources/lang/no/events.php View File

@@ -19,7 +19,7 @@
19 19
  */
20 20
 
21 21
 return [
22
-    'achievement' => '<strong><em>:user</em></strong> har opplåst "<strong>:achievement</strong>" medaljen!',
22
+    'achievement' => '<strong><em>:user</em></strong> har oppnådd "<strong>:achievement</strong>" medaljen!',
23 23
     'beatmap_playcount' => ':beatmap har blitt spilt :count ganger!',
24 24
     'beatmapset_approve' => ':beatmapset av <strong>:user</strong> har blitt :approval!',
25 25
     'beatmapset_delete' => ':beatmapset har blitt slettet.',

+ 6
- 6
resources/lang/no/forum.php View File

@@ -62,15 +62,15 @@ return [
62 62
     ],
63 63
 
64 64
     'post' => [
65
-        'confirm_destroy' => 'Virkelig slette innlegget?',
66
-        'confirm_restore' => 'Virkelig gjenopprette innlegget?',
65
+        'confirm_destroy' => 'Vil du virkelig slette innlegget?',
66
+        'confirm_restore' => 'Vil du virkelig gjenopprette innlegget?',
67 67
         'edited' => 'Sist endret av :user :when, redigert :count ganger totalt.',
68 68
         'posted_at' => 'lagt ut :when',
69 69
 
70 70
         'actions' => [
71 71
             'destroy' => 'Slett innlegg',
72 72
             'restore' => 'Gjenopprett innlegg',
73
-            'edit' => 'Rediger innlegg',
73
+            'edit' => 'Rediger innlegget',
74 74
         ],
75 75
 
76 76
         'info' => [
@@ -102,10 +102,10 @@ return [
102 102
             // TL note: this is used in the topic reply preview, when
103 103
             // the user goes back from previewing to editing the reply
104 104
             'preview_hide' => 'Skriv',
105
-            'submit' => 'Innlegg',
105
+            'submit' => 'Del',
106 106
 
107 107
             'necropost' => [
108
-                'default' => 'Dette emnet har vært inaktivt i en stund. Skriv et svar bare hvis du har en spesifikk grunn til å gjøre det.',
108
+                'default' => 'Dette emnet har vært inaktivt i en stund. Svar bare hvis du har en spesifikk grunn til å gjøre det.',
109 109
 
110 110
                 'new_topic' => [
111 111
                     '_' => "Dette emne har vært inaktivt i en stund. Hvis du ikke har en spesifikk grunn til å svare her, vennligst :create istedenfor.",
@@ -114,7 +114,7 @@ return [
114 114
             ],
115 115
 
116 116
             'placeholder' => [
117
-                'body' => 'Skriv innhold til innlegget her',
117
+                'body' => 'Skriv innholdet til innlegget her',
118 118
                 'title' => 'Klikk her for å sette tittelen',
119 119
             ],
120 120
         ],

+ 3
- 3
resources/lang/no/friends.php View File

@@ -20,9 +20,9 @@
20 20
 
21 21
 return [
22 22
     'buttons' => [
23
-      'add' => 'legg til venn',
23
+      'add' => 'legg til som venn',
24 24
       'disabled' => 'venner',
25
-      'remove' => 'fjern venn',
25
+      'remove' => 'fjern som venn',
26 26
     ],
27 27
 
28 28
     'state' => [
@@ -33,5 +33,5 @@ return [
33 33
     'title' => 'Venner',
34 34
     'title_compact' => 'venner',
35 35
 
36
-    'too_many' => 'Vennegrensen er nådd',
36
+    'too_many' => 'Maksimal antall venner nådd',
37 37
 ];

+ 11
- 11
resources/lang/no/home.php View File

@@ -28,7 +28,7 @@ return [
28 28
 
29 29
         'slogan' => [
30 30
             'main' => 'det besteste gratis-å-vinne rytmespillet',
31
-            'sub' => 'rytme er bare et klikk unna',