feat(i18n): complete message parity across all 25 locales
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 37s
CI / tests-unit (push) Successful in 1m49s
CI / tests-integration (push) Successful in 1m50s
CI / tests-ui (push) Successful in 2m29s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 1m37s
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 37s
CI / tests-unit (push) Successful in 1m49s
CI / tests-integration (push) Successful in 1m50s
CI / tests-ui (push) Successful in 2m29s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 1m37s
The admin.studio.nitroCleanup section (102 keys) only existed in en and nl, so 23 locales fell back to English for the entire Nitro Cleanup panel. The referrals and dailyRewards keys were missing from the same 23 locales, and en itself was missing 6 keys that nl had. Add the missing keys to every locale with translations, so all 25 locales now carry the same 6063 keys.
This commit is contained in:
1 parent
944527e078
commit
bc00ecf08c
24 files changed
+4483
-182
No files matched your search
+194
-7
@@ -818,8 +818,8 @@
|
||||
"rateLimit": "Too many attempts. Please wait before trying again."
|
||||
},
|
||||
"title": "Συνδεδεμένοι λογαριασμοί",
|
||||
"subtitle": "Συνδέστε έναν λογαριασμό κοινωνικής δικτύωσης για να μπορείτε να συνδεθείτε με ένα κλικ",
|
||||
"connected": "Συνδεδεμένος",
|
||||
"subtitle": "Συνδέστε έναν κοινωνικό λογαριασμό για σύνδεση με ένα κλικ",
|
||||
"connected": "Συνδεδεμένο",
|
||||
"unavailable": "Μη διαθέσιμο",
|
||||
"login": {
|
||||
"title": "Συνδεθείτε",
|
||||
@@ -882,7 +882,9 @@
|
||||
"hidePassword": "Hide",
|
||||
"accountDetails": "Account details",
|
||||
"credentials": "Credentials & security",
|
||||
"newestCitizens": "Newest citizens"
|
||||
"newestCitizens": "Newest citizens",
|
||||
"ageVerified": "Είμαι 18+ και αποδέχομαι την απαίτηση ηλικίας.",
|
||||
"invitedBy": "Προσκλήθηκε από {username}"
|
||||
},
|
||||
"forgot": {
|
||||
"title": "Επαναφορά κωδικού πρόσβασης",
|
||||
@@ -1048,7 +1050,9 @@
|
||||
"cmsErrors": "CMS errors",
|
||||
"themeBuilder": "Theme builder",
|
||||
"openSidebar": "Open menu",
|
||||
"closeSidebar": "Close menu"
|
||||
"closeSidebar": "Close menu",
|
||||
"referrals": "Παραπομπές",
|
||||
"dailyRewards": "Ημερήσιες ανταμοιβές"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Ταμπλό",
|
||||
@@ -4336,7 +4340,9 @@
|
||||
"importAudit": "Audit",
|
||||
"themeBuilder": "Theme Builder",
|
||||
"studio": "Studio",
|
||||
"cmsErrors": "CMS errors"
|
||||
"cmsErrors": "CMS errors",
|
||||
"referrals": "Παραπομπές",
|
||||
"dailyRewards": "Ημερήσιες ανταμοιβές"
|
||||
},
|
||||
"events": "Events",
|
||||
"eventsSubtitle": "Hotel events and event types",
|
||||
@@ -5843,6 +5849,64 @@
|
||||
"NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.",
|
||||
"Rename": "Rename"
|
||||
}
|
||||
},
|
||||
"referrals": {
|
||||
"title": "Παραπομπές",
|
||||
"subtitle": "Σύστημα προσκλήσεων",
|
||||
"referralsToday": "Παραπομπές σήμερα",
|
||||
"referralsTotal": "Σύνολο παραπομπών",
|
||||
"invitedTotal": "Μετρημένες προσκλήσεις",
|
||||
"claims": "Ανταμοιβές που τράβηξαν",
|
||||
"settings": "Ρυθμίσεις ανταμοιβής",
|
||||
"needed": "Απαιτούμενες παραπομπές",
|
||||
"rewardAmount": "Ποσό ανταμοιβής",
|
||||
"rewardCurrency": "Νόμισμα ανταμοιβής",
|
||||
"blockSameIp": "Απόρριψη παραπομπών που μοιράζονται την τρέχουσα IP του προσκαλούντος",
|
||||
"save": "Αποθήκευση ρυθμίσεων",
|
||||
"saving": "Αποθήκευση…",
|
||||
"saved": "Οι ρυθμίσεις παραπομπών αποθηκεύτηκαν.",
|
||||
"saveError": "Οι ρυθμίσεις παραπομπών δεν μπόρεσαν να αποθηκευτούν.",
|
||||
"recent": "Πρόσφατες παραπομπές",
|
||||
"unavailable": "Τα δεδομένα παραπομπών είναι προσωρινά μη διαθέσιμα.",
|
||||
"empty": "Δεν υπάρχουν παραπομπές ακόμη.",
|
||||
"inviter": "Προσκαλών",
|
||||
"invitee": "Προσκληθείς χρήστης",
|
||||
"ip": "IP",
|
||||
"date": "Ημερομηνία"
|
||||
},
|
||||
"dailyRewards": {
|
||||
"title": "Ημερήσιες ανταμοιβές σύνδεσης",
|
||||
"subtitle": "Πρόγραμμα ημερήσιων ανταμοιβών σύνδεσης",
|
||||
"enabled": "Κατάσταση λειτουργίας",
|
||||
"yes": "Ενεργοποιημένο",
|
||||
"no": "Απενεργοποιημένο",
|
||||
"scheduleDays": "Ημέρες προγράμματος",
|
||||
"claimsToday": "Τραβήξεις σήμερα",
|
||||
"claimsTotal": "Σύνολο τραβηγμάτων",
|
||||
"status": "Κατάσταση λειτουργίας",
|
||||
"statusHint": "Όταν απενεργοποιηθεί, η κάρτα ανταμοιβής κρύβεται και οι νέες τραβήξεις απορρίπτονται.",
|
||||
"disable": "Απενεργοποίηση",
|
||||
"enable": "Ενεργοποίηση",
|
||||
"schedule": "Πρόγραμμα ανταμοιβών",
|
||||
"day": "Ημέρα {day}",
|
||||
"reward": "Ανταμοιβή",
|
||||
"amount": "Ποσό",
|
||||
"actions": "Ενέργειες",
|
||||
"addDay": "Ημέρα",
|
||||
"add": "Προσθήκη ημέρας",
|
||||
"save": "Αποθήκευση",
|
||||
"saving": "Αποθήκευση…",
|
||||
"saved": "Το πρόγραμμα ανταμοιβών αποθηκεύτηκε.",
|
||||
"cancel": "Ακύρωση",
|
||||
"edit": "Επεξεργασία",
|
||||
"delete": "Διαγραφή",
|
||||
"created": "Η ημέρα ανταμοιβής προστέθηκε.",
|
||||
"updated": "Η ημέρα ανταμοιβής ενημερώθηκε.",
|
||||
"deleted": "Η ημέρα ανταμοιβής αφαιρέθηκε.",
|
||||
"saveError": "Η ημέρα ανταμοιβής δεν μπόρεσε να αποθηκευτεί.",
|
||||
"deleteError": "Η ημέρα ανταμοιβής δεν μπόρεσε να αφαιρεθεί.",
|
||||
"confirmDeleteTitle": "Αφαίρεση ημέρας ανταμοιβής",
|
||||
"confirmDeleteBody": "Αυτή η ημέρα ανταμοιβής δεν θα δίνεται πια. Οι προηγούμενες τραβήξεις παραμένουν καταγεγραμμένες."
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
@@ -6223,8 +6287,27 @@
|
||||
"empty": "You're all caught up. No actions waiting.",
|
||||
"unavailable": "Some actions could not be checked. Available actions are shown above.",
|
||||
"retry": "Try again",
|
||||
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again."
|
||||
}
|
||||
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again.",
|
||||
"dailyReward": "Η ημερήσια ανταμοιβή σου είναι έτοιμη για τράβηγμα"
|
||||
},
|
||||
"dailyClaimed": "Η ημερήσια ανταμοιβή τράβηξε — τα λέμε αύριο!",
|
||||
"dailyErrors": {
|
||||
"already_claimed": "Έχεις ήδη τραβήξει τη σημερινή ημερήσια ανταμοιβή.",
|
||||
"disabled": "Οι ημερήσιες ανταμοιβές είναι απενεργοποιημένες αυτή τη στιγμή.",
|
||||
"bad_config": "Το πρόγραμμα ημερήσιας ανταμοιβής δεν είναι σωστά ρυθμισμένο. Επικοινώνησε με το προσωπικό.",
|
||||
"ratelimit": "Πάρα πολλές προσπάθειες. Περίμενε μια στιγμή και δοκίμασε ξανά.",
|
||||
"error": "Η ημερήσια ανταμοιβή δεν μπόρεσε να τραβηχτεί. Δοκίμασε ξανά παρακαλώ."
|
||||
},
|
||||
"dailyRewardTitle": "Ημερήσιες ανταμοιβές",
|
||||
"dailyRewardHint": "Συνδέσου κάθε μέρα και τράβα την ανταμοιβή σου — οι σειρές μεγαλώνουν μέχρι τις μεγάλες μέρες.",
|
||||
"dailyRewardDay": "Ημέρα {day}",
|
||||
"dailyRewardStreak": "{count, plural, one {Σειρά: # ημέρα} other {Σειρά: # ημέρες}}",
|
||||
"dailyRewardNextClaim": "Επόμενη τραβήξη: {amount} {currency}",
|
||||
"dailyRewardTomorrow": "Αύριο: {amount} {currency}",
|
||||
"dailyRewardClaim": "Τράβα ημερήσια ανταμοιβή",
|
||||
"dailyRewardClaimedToday": "Τράβηξες σήμερα — γύρνα αύριο για την επόμενη ανταμοιβή.",
|
||||
"dailyRewardDisabled": "Οι ημερήσιες ανταμοιβές είναι απενεργοποιημένες αυτή τη στιγμή. Μπορείς να εξερευνήσεις το ξενοδοχείο.",
|
||||
"dailyRewardUnavailable": "Το πρόγραμμα ημερήσιας ανταμοιβής δεν μπόρεσε να φορτωθεί. Δοκίμασε ξανά παρακαλώ."
|
||||
},
|
||||
"housekeeping": {
|
||||
"preview": {
|
||||
@@ -6502,6 +6585,110 @@
|
||||
},
|
||||
"admin": {
|
||||
"studio": {
|
||||
"nitroCleanup": {
|
||||
"alreadyRunning": "Μια σάρωση εκτελείται ήδη — συνδέθηκε σε αυτήν.",
|
||||
"ageUnknown": "ηλικία άγνωστη",
|
||||
"ageBelow": "< 1η",
|
||||
"scanButton": "Σάρωση περιουσιών επίπλων",
|
||||
"scanningAssets": "Σάρωση περιουσιών…",
|
||||
"cancelButton": "Ακύρωση",
|
||||
"deleteSelected": "Διαγραφή επιλεγμένων ({count})",
|
||||
"deleting": "Διαγραφή…",
|
||||
"redownloadBroken": "Επαναφόρτωση κατεστραμμένων",
|
||||
"redownloading": "Επαναφόρτωση…",
|
||||
"autoClean": "Αυτόματος καθαρισμός παλιών ψευδών",
|
||||
"cleaning": "Καθαρισμός…",
|
||||
"exportManifest": "Εξαγωγή μανιφέστου",
|
||||
"exporting": "Εξαγωγή…",
|
||||
"phaseStems": "Φόρτωση βλαστών επίπλων…",
|
||||
"phaseReaddir": "Ανάγνωση καταλόγων περιουσιών…",
|
||||
"phaseValidate": "Επικύρωση πακέτων .nitro…",
|
||||
"phaseScanning": "Σάρωση…",
|
||||
"scanProgressFiles": "{count} αρχεία",
|
||||
"repairProgress": "ok {ok}, απέτυχαν {failed}",
|
||||
"attachedNotice": "Η σάρωση συνεχίζεται στο παρασκήνιο — τα αποτελέσματα θα εμφανιστούν όταν ολοκληρωθεί.",
|
||||
"sessionCancelled": "Η σάρωση ακυρώθηκε.",
|
||||
"onlyOldLabel": "Εμφάνιση μόνο αρχείων παλαιότερων από",
|
||||
"onlyOldAgeLabel": "Ελάχιστη ηλικία σε ημέρες για εμφάνιση",
|
||||
"onlyOldToggle": "Απόκρυψη πρόσφατων αρχείων",
|
||||
"daysLabel": "ημέρες",
|
||||
"autoAgeLabel": "Ελάχιστη ηλικία σε ημέρες για αυτόματο καθαρισμό",
|
||||
"loadingResult": "Φόρτωση αποτελέσματος σάρωσης…",
|
||||
"scannedStat": "αρχεία περιουσιών σαρώθηκαν",
|
||||
"cachedNotice": "(σε προσωρινή μνήμη — οι κατάλογοι δεν άλλαξαν)",
|
||||
"fakeStat": "Ψευδή nitro (χωρίς αντίστοιχο στοιχείο)",
|
||||
"brokenStat": "Κατεστραμμένα nitro (μη αναγνώσιμα)",
|
||||
"groupEmpty": "Δεν βρέθηκε τίποτα",
|
||||
"selectedCount": "επιλέχθηκαν {count}",
|
||||
"copiesBadge": "{count} αντίγραφα",
|
||||
"groupFakeLabel": "Ψευδή nitro",
|
||||
"groupFakeDescription": "Αυτά τα αρχεία δεν ταιριάζουν με κανένα στοιχείο στο items_base — υπολείμματα διαγραμμένων ή μετονομασμένων επίπλων.",
|
||||
"groupBrokenLabel": "Κατεστραμμένα nitro",
|
||||
"groupBrokenDescription": "Αυτά τα αρχεία ανήκουν σε ένα στοιχείο αλλά δεν μπορούν να αναγνωστούν ως έγκυρο πακέτο Nitro.",
|
||||
"groupSwfLabel": "Ορφανά SWF",
|
||||
"groupSwfDescription": "Αρχεία .swf που δεν ταιριάζουν με κανένα στοιχείο στο items_base.",
|
||||
"groupIconLabel": "Ορφανά εικονίδια",
|
||||
"groupIconDescription": "Αρχεία εικονιδίων που δεν ταιριάζουν με κανένα στοιχείο στο items_base.",
|
||||
"warningText": "Η διαγραφή ενός κατεστραμμένου .nitro αφήνει το στοιχείο του στη βάση δεδομένων χωρίς πακέτο — προτιμήστε επαναφόρτωση ή αφήστε τον έλεγχο καταλόγου να το αποκτήσει αργότερα. Οι γραμμές της βάσης δεν αφαιρούνται ποτέ από αυτό το εργαλείο.",
|
||||
"onlyAssetsTouched": "Αλλάζουν μόνο τα αρχεία περιουσιών — το FurnitureData.json και οι γραμμές της βάσης παραμένουν ανέπαφες.",
|
||||
"emptyHint": "Σαρώστε κάθε κατάλογο περιουσιών επίπλων για να βρείτε ψευδή και κατεστραμμένα πακέτο nitro καθώς και ορφανά SWF και εικονίδια. Διαγράψτε τα, επαναφορτώστε τα κατεστραμμένα ή καθαρίστε αυτόματα τα παλιά υπολείμματα.",
|
||||
"noResult": "Κανένα αποτέλεσμα σάρωσης ακόμη — εκτελέστε πρώτα σάρωση περιουσιών επίπλων.",
|
||||
"scanFailed": "Η σάρωση απέτυχε.",
|
||||
"confirmDeleteTitle": "Διαγραφή {count} αρχείου(ων);",
|
||||
"confirmDeleteDescription": "Τα αρχεία θα αφαιρεθούν από κάθε κατάλογο (public + κατοπτρισμένα gamedata). Οι γραμμές της βάσης δεν αλλάζουν ποτέ.",
|
||||
"confirmDeleteLabel": "Διαγραφή",
|
||||
"confirmRepairTitle": "Επαναφόρτωση {count} κατεστραμμένου(ων) πακέτου(ων) .nitro;",
|
||||
"confirmRepairDescription": "Τα πακέτα θα ανακτηθούν ξανά από τις ρυθμισμένες πηγές nitro και θα επικαλύψουν κάθε κατάλογο (public + κατοπτρισμένα gamedata).",
|
||||
"confirmRepairLabel": "Επαναφόρτωση",
|
||||
"confirmAutoCleanTitle": "Αυτόματος καθαρισμός ψευδών nitro παλαιότερων από {days} ημέρα(ες);",
|
||||
"confirmAutoCleanDescription": "Αφαιρούνται μόνο ψευδή αρχεία .nitro (χωρίς αντίστοιχο στοιχείο) παλαιότερα από το όριο. Τα κατεστραμμένα πακέτα και τα πρόσφατα αρχεία δεν αλλάζουν ποτέ.",
|
||||
"confirmAutoCleanLabel": "Αυτόματος καθαρισμός",
|
||||
"toastDeletePartial": "Διαγράφηκαν {copies} αντίγραφα, αλλά ορισμένα αρχεία δεν μπόρεσαν να αφαιρεθούν",
|
||||
"toastDeleteDone": "Διαγράφηκαν {copies} αντίγραφα αρχείων ({deleted} αρχεία)",
|
||||
"toastRepairDone": "Επιδιορθώθηκαν {count} πακέτα .nitro",
|
||||
"toastRepairFailed": "Δεν ήταν δυνατή η απόκτηση πακέτου ({failed} απέτυχαν)",
|
||||
"toastRepairCancelled": "Η επιδιόρθωση ακυρώθηκε",
|
||||
"toastAutoCleanDone": "Καθαρίστηκαν {deleted} παλιά ψευδή αρχεία .nitro ({copies} αντίγραφα). Παραλείφθηκαν {recent} πρόσφατα + {broken} κατεστραμμένα.",
|
||||
"toastAutoCleanNothing": "Τίποτα αρκετά παλιό για αφαίρεση (παραλείφθηκαν {recent} πρόσφατα, {broken} κατεστραμμένα)",
|
||||
"toastManifestDownload": "Το μανιφέστο σάρωσης λήφθηκε",
|
||||
"gamedataTitle": "Καθαρισμός δεδομένων παιχνιδιού",
|
||||
"gamedataHint": "Προεπισκόπηση πρώτα: Αυτό ξαναγράφει τα FurnitureData.json, FigureMap.json και FigureData.json. Σε αντίθεση με τα εργαλεία περιουσιών παραπάνω, αφαιρεί γραμμές που δεν αναφέρουν τίποτα — ελέγξτε τους αριθμούς πριν το εκτελέσετε.",
|
||||
"gamedataScan": "Προεπισκόπηση δεδομένων παιχνιδιού",
|
||||
"gamedataScanning": "Σάρωση…",
|
||||
"gamedataRun": "Εκτέλεση επιλεγμένων",
|
||||
"gamedataRunning": "Καθαρισμός…",
|
||||
"gamedataNoResult": "Καμία προεπισκόπηση ακόμη — σαρώστε πρώτα τα αρχεία JSON δεδομένων παιχνιδιού.",
|
||||
"gamedataCount_duplicates": "Διπλότυπα FurnitureData",
|
||||
"gamedataCount_orphans": "Ορφανά FurnitureData",
|
||||
"gamedataCount_figureMap": "Προβλήματα FigureMap",
|
||||
"gamedataCount_figureData": "Αχρησιμοποιητό FigureData",
|
||||
"gamedataPass_dedupeFurnitureData": "Απομάκρυνση διπλοτύπων FurnitureData",
|
||||
"gamedataPassDesc_dedupeFurnitureData": "Αφαιρεί επαναλαμβανόμενα classnames μέσα σε μία ενότητα, διατηρώντας την καταχώρηση με την υψηλότερη αναθεώρηση.",
|
||||
"gamedataPass_cleanFurnitureData": "Καθαρισμός FurnitureData",
|
||||
"gamedataPassDesc_cleanFurnitureData": "Αφαιρεί καταχωρήσεις των οποίων το πακέτο .nitro λείπει από κάθε κατάλογο.",
|
||||
"gamedataPass_cleanFigureMap": "Καθαρισμός FigureMap",
|
||||
"gamedataPassDesc_cleanFigureMap": "Αφαιρεί μέρη που αναφέρονται σε ανύπαρκτο σύνολο στο FigureData, καθώς και ακριβή διπλότυπα.",
|
||||
"gamedataPass_cleanFigureData": "Καθαρισμός FigureData",
|
||||
"gamedataPassDesc_cleanFigureData": "Αφαιρεί σύνολα στα οποία δεν αναφέρεται κανένα μέρος FigureMap, έπειτα παλέτες που δεν χρησιμοποιεί κανένας τύπος συνόλου. Πρέπει να εκτελεστεί μετά τον Καθαρισμό FigureMap.",
|
||||
"gamedataNothingSelected": "Επιλέξτε τουλάχιστον ένα βήμα καθαρισμού",
|
||||
"gamedataConfirmTitle": "Επανεγγραφή αρχείων JSON δεδομένων παιχνιδιού;",
|
||||
"gamedataConfirmDescription": "{passes} βήμα(τα) θα εκτελεστούν σε {duplicates} ομάδες διπλοτύπων, {orphans} ορφανές γραμμές, {figureMap} προβλήματα FigureMap και {figureData} αχρησιμοποιητές καταχωρήσεις FigureData. Οι γραμμές αφαιρούνται χωρίς αντίγραφο ασφαλείας — αυτό δεν μπορεί να αναιρεθεί.",
|
||||
"gamedataConfirmLabel": "Επανεγγραφή αρχείων",
|
||||
"gamedataDifferingWarning": "Τουλάχιστον ένα διπλότυπο δεν είναι ακριβές αντίγραφο της καταχώρησης που διατηρείται, οπότε η διαγραμμένη γραμμή κρατούσε δεδομένα που δεν έχει ο επιζών.",
|
||||
"gamedataCrossSectionNote": "{count} classname(s) υπάρχουν τόσο στο roomitemtypes όσο και στο wallitemtypes. Αυτές αναφέρονται μόνο — η αφαίρεση μιας θα άλλαζε τον τύπο ενός στοιχείου.",
|
||||
"gamedataToastDone": "Ο καθαρισμός δεδομένων παιχνιδιού αφαίρεσε {removed} γραμμές",
|
||||
"gamedataToastNothing": "Τα δεδομένα παιχνιδιού ήταν ήδη καθαρά",
|
||||
"gamedataMaxRemovalsLabel": "Μέγ. γραμμές ανά βήμα",
|
||||
"gamedataMaxRemovalsHint": "Το 0 χρησιμοποιεί την προεπιλογή 500. Ένα βήμα που θα αφαιρούσε περισσότερες σταματά και ρωτά αντί να γράψει.",
|
||||
"gamedataLimitTitle": "{pass} θα αφαιρούσε {wouldRemove} γραμμές, πάνω από το όριο των {maxRemovals}.",
|
||||
"gamedataLimitDescription": "Αυτό το βήμα δεν έγραψε τίποτα, οπότε τα αρχεία είναι αμετάβλητα. Ελέγξτε πρώτα τις διαδρομές περιουσιών — ένας λάθος κατάλογος κάνει κάθε γραμμή να φαίνεται ορφανή. Η αύξηση του ορίου είναι ξεχωριστή, σκόπιμη εκτέλεση.",
|
||||
"gamedataLimitOverride": "Αφαίρεση {wouldRemove} γραμμών ούτως ή άλλως",
|
||||
"historyTitle": "Ιστορικό αυτόματου καθαρισμού",
|
||||
"historyScheduled": "προγραμματισμένο",
|
||||
"historyManual": "χειροκίνητο",
|
||||
"historyEntry": "Αφαιρέθηκαν {deleted} ({copies} αντίγραφα); παραλείφθηκαν {recent} πρόσφατα και {broken} κατεστραμμένα",
|
||||
"historyErrors": "{count} σφάλματα"
|
||||
},
|
||||
"importDiagnostics": {
|
||||
"attempts": "Διαγνωστικός έλεγχος αρχείων",
|
||||
"preliminary": "Προκαταρκτικός έλεγχος διευθύνσεων· το περιεχόμενο ελέγχεται στην εισαγωγή.",
|
||||
|
||||
Reference in new issue
Block a user