diff --git a/README.md b/README.md
index 58b8c9470..b2cc03e8d 100644
--- a/README.md
+++ b/README.md
@@ -84,6 +84,7 @@ It retrieves audio, video and metadata from various Internet sources, such as:
- 한국어 ([@DDinghoya](https://github.com/DDinghoya))
- Polski ([@Lukas-KK](https://github.com/Lukas-KK))
- Русский ([@staniel359](https://github.com/staniel359))
+- Gen Z ([@xyloflake](https://github.com/xyloflake), [@gamersi](https://github.com/gamersi))
### Technical stack
diff --git a/electron/plugins/i18n.js b/electron/plugins/i18n.js
index dd0cfccd0..1421d7659 100644
--- a/electron/plugins/i18n.js
+++ b/electron/plugins/i18n.js
@@ -12,6 +12,7 @@ import ko from './i18n/locales/ko.json' with { type: 'json' }
import pl from './i18n/locales/pl.json' with { type: 'json' }
import ru from './i18n/locales/ru.json' with { type: 'json' }
import zh from './i18n/locales/zh.json' with { type: 'json' }
+import genz from './i18n/locales/genz.json' with { type: 'json' }
// i18n
@@ -32,7 +33,8 @@ const localesData = {
ko,
pl,
ru,
- zh
+ zh,
+ genz
}
const options = {
diff --git a/electron/plugins/i18n/locales/genz.json b/electron/plugins/i18n/locales/genz.json
new file mode 100644
index 000000000..914518e53
--- /dev/null
+++ b/electron/plugins/i18n/locales/genz.json
@@ -0,0 +1,13 @@
+{
+ "show": "Spill the tea",
+ "hide": "Yeet it",
+ "about": "Abt",
+ "exit": "Dip",
+ "update": {
+ "message": "New update droppin', no cap",
+ "buttons": {
+ "download": "Sounds rad, i'm down",
+ "close": "nah, i'm good"
+ }
+ }
+}
diff --git a/src/components/BaseEmojiPicker.vue b/src/components/BaseEmojiPicker.vue
index 38ff8331b..a78989823 100644
--- a/src/components/BaseEmojiPicker.vue
+++ b/src/components/BaseEmojiPicker.vue
@@ -47,7 +47,8 @@ export default {
ko: en,
pl,
ru,
- zh
+ zh,
+ genz: en
}
}
},
diff --git a/src/helpers/data/locales.js b/src/helpers/data/locales.js
index 67c7e7808..0dcf2f137 100644
--- a/src/helpers/data/locales.js
+++ b/src/helpers/data/locales.js
@@ -49,5 +49,9 @@ export default [
{
id: 'zh',
name: '中文'
+ },
+ {
+ id: 'genz',
+ name: 'Gen Z'
}
]
diff --git a/src/plugins/i18n.js b/src/plugins/i18n.js
index 242715b1c..5969b9500 100644
--- a/src/plugins/i18n.js
+++ b/src/plugins/i18n.js
@@ -13,6 +13,7 @@ import ko from './i18n/locales/ko.json'
import pl from './i18n/locales/pl.json'
import ru from './i18n/locales/ru.json'
import zh from './i18n/locales/zh.json'
+import genz from './i18n/locales/genz.json'
import slavicPluralizationRule
from './i18n/rules/pluralization/slavic.js'
@@ -30,7 +31,8 @@ const localesData = {
ko,
pl,
ru,
- zh
+ zh,
+ genz
}
const pluralizationRules = {
@@ -168,6 +170,16 @@ if (import.meta.hot) {
)
}
)
+
+ import.meta.hot.accept(
+ './i18n/locales/genz.json',
+ fileImport => {
+ i18n.global.setLocaleMessage(
+ 'genz',
+ fileImport.default
+ )
+ }
+ )
}
export default i18n
diff --git a/src/plugins/i18n/locales/genz.json b/src/plugins/i18n/locales/genz.json
new file mode 100644
index 000000000..044566c9c
--- /dev/null
+++ b/src/plugins/i18n/locales/genz.json
@@ -0,0 +1,947 @@
+{
+ "navigation": {
+ "home": "go go go",
+ "artists": "Artists",
+ "artist": "Artist",
+ "albums": "Albums",
+ "albumGroups": "Album groups",
+ "tracks": "skibidi bangers",
+ "tags": "Tags",
+ "tag": "Tag",
+ "similar": "Similar",
+ "images": "Images",
+ "lyrics": "Lyrics",
+ "videos": "Videos",
+ "videoChannels": "Video channels",
+ "videoMixes": "Video mixes",
+ "videoPlaylists": "Video playlists",
+ "related": "Related",
+ "top": "Top",
+ "topCollection": {
+ "artists": "Top artists",
+ "albums": "Top albums",
+ "tracks": "Top skibidi bangers",
+ "tags": "Top tags"
+ },
+ "releases": "Releases",
+ "releasesCollection": {
+ "new": "New releases",
+ "upcoming": "Upcoming releases"
+ },
+ "new": "New",
+ "upcoming": "Upcoming",
+ "radio": "Radio",
+ "multitag": "Multitag search",
+ "profiles": "Profiles",
+ "feed": "Feed",
+ "posts": "Posts",
+ "conversations": "Conversations",
+ "library": "Library",
+ "recommendations": "Recommendations",
+ "recommendationsCollection": {
+ "artists": "Recommended artists",
+ "tracks": "Recommended Skibidi Bangers"
+ },
+ "savedTracks": "Saved Skibidi Bangers",
+ "playlists": "Playlists",
+ "favorites": "Favorites",
+ "bookmarks": "Bookmarks",
+ "bookmarksCollection": {
+ "artists": "Bookmarked artists",
+ "albums": "Bookmarked albums",
+ "tracks": "Bookmarked skibidi bangers",
+ "videos": "Bookmarked videos",
+ "videoChannels": "Bookmarked video channels",
+ "videoPlaylists": "Bookmarked video playlists"
+ },
+ "communities": "Communities",
+ "history": "History",
+ "historyCollection": {
+ "activity": "Activity history",
+ "player": "Player history",
+ "browser": "Browser history"
+ },
+ "activity": "Activity",
+ "player": "Player",
+ "browser": "Browser",
+ "settings": "Settings",
+ "model": {
+ "artists": "{modelName} artists",
+ "albums": "{modelName} albums",
+ "tracks": "{modelName} skibidi bangers",
+ "tags": "{modelName} tags",
+ "similar": "{modelName} similar",
+ "images": "{modelName} images",
+ "lyrics": "{modelName} lyrics",
+ "videos": "{modelName} videos",
+ "related": "{modelName} related",
+ "posts": "{modelName} posts",
+ "library": "{modelName} library",
+ "playlists": "{modelName} playlists",
+ "favorites": "{modelName} favorites",
+ "favoritesCollection": {
+ "artists": "{modelName} favorite artists",
+ "albums": "{modelName} favorite albums",
+ "tracks": "{modelName} favorite skibidi banger",
+ "videos": "{modelName} favorite videos"
+ },
+ "communities": "{modelName} communities",
+ "shows": "{modelName} shows"
+ },
+ "search": "Search",
+ "queue": "Queue",
+ "whatsNew": "latest lore drops",
+ "listenedRecently": "Listened recently",
+ "shows": "Shows",
+ "listeningNow": "Listening now",
+ "help": "Help"
+ },
+ "errors": {
+ "badRequest": {
+ "header": "Major L",
+ "content": "You sent some sus data"
+ },
+ "forbidden": {
+ "header": "Ghosted",
+ "content": "This ain't cooking, change the recipe"
+ },
+ "notFound": {
+ "header": "404 vibes",
+ "content": "Nah fam, ain't nothing here"
+ },
+ "internalServer": {
+ "header": "Server acting sus",
+ "content": "Need a hand? We gotchu fam"
+ },
+ "badGateway": {
+ "header": "Remote server trippin",
+ "content": "Holup, let it cook"
+ },
+ "gatewayTimeout": {
+ "header": "Remote server ghosted you",
+ "content": "Chill, let it skibidi bop for a sec, then we ball"
+ },
+ "connection": {
+ "header": "Connection yeeted",
+ "content": "let the rizz marinate, then retry with sigma grindset"
+ },
+ "client": {
+ "header": "Bro, your device got the Ohio virus 💀",
+ "content": "Device acting goofy? Situation looking grim? Call the squad"
+ }
+ },
+ "actions": {
+ "login": "Log in",
+ "logout": "Log out",
+ "signup": "Sign up",
+ "add": "Add",
+ "create": "Create",
+ "edit": "Edit",
+ "save": "Save",
+ "cancel": "Cancel",
+ "delete": "Delete",
+ "clear": "Clear",
+ "retry": "Retry",
+ "post": "Post",
+ "send": "Send",
+ "next": "Next",
+ "upload": "Upload",
+ "back": "Go back",
+ "sendCode": "Send code",
+ "share": "Share",
+ "search": "Search",
+ "filter": "Filter",
+ "confirm": "Confirm",
+ "import": "Import",
+ "close": "Close",
+ "openLink": "Open link",
+ "play": "Play",
+ "shuffle": "Shuffle",
+ "loop": "Loop",
+ "addFrom": {
+ "search": "From search",
+ "library": "From library"
+ },
+ "importFrom": {
+ "drive": "From drive",
+ "account": "From account"
+ },
+ "searchIn": {
+ "source": "Search in source",
+ "sources": "Search in sources"
+ },
+ "searchFor": {
+ "video": "Search for video",
+ "lyrics": "Search for lyrics"
+ },
+ "importFromAccount": {
+ "lastfm": "Import from Last.FM",
+ "spotify": "Import from Spotify"
+ },
+ "selectModel": {
+ "folder": "Select folder"
+ },
+ "createModel": {
+ "playlist": "Create playlist",
+ "community": "Create community",
+ "post": "Create post"
+ },
+ "addModel": {
+ "comment": "Add comment"
+ },
+ "addTo": {
+ "library": "Add to library",
+ "playlist": "Add to playlist",
+ "favorites": "Add to favorites",
+ "bookmarks": "Add to bookmarks",
+ "listened": "Add to listened",
+ "watched": "Add to watched",
+ "queue": "Add to queue",
+ "savedTracks": "Add to saved skibidi banger"
+ },
+ "show": {
+ "library": "Show in library",
+ "page": "Show page"
+ },
+ "deleteFrom": {
+ "favorites": "Delete from favorites",
+ "bookmarks": "Delete from bookmarks",
+ "listened": "Delete from listened",
+ "watched": "Delete from watched"
+ },
+ "externalLink": {
+ "open": "Open external link",
+ "original": "Original",
+ "streaming": "Streaming"
+ }
+ },
+ "links": {
+ "playlists": "All playlists",
+ "communities": "All communities"
+ },
+ "inputs": {
+ "search": "Search...",
+ "content": "Write something..."
+ },
+ "modals": {
+ "delete": {
+ "header": {
+ "libraryModel": {
+ "artist": "Delete artist from library",
+ "album": "Delete album from library",
+ "track": "Delete skibidi banger from library"
+ },
+ "recommendationModel": {
+ "artist": "Delete artist from recommendations",
+ "track": "Delete skibidi banger from recommendations"
+ },
+ "playlist": "Delete playlist",
+ "playlistTrack": "Delete skibidi banger from playlist",
+ "savedTrack": "Delete skibidi banger from saved skibidi banger",
+ "favorite": {
+ "artist": "Delete artist from favorites",
+ "album": "Delete album from favorites",
+ "track": "Delete skibidi banger from favorites",
+ "video": "Delete video from favorites"
+ },
+ "bookmark": {
+ "artist": "Delete artist from bookmarks",
+ "album": "Delete album from bookmarks",
+ "track": "Delete skibidi banger from bookmarks",
+ "video": "Delete video from bookmarks",
+ "videoChannel": "Delete video channel from bookmarks",
+ "videoPlaylist": "Delete video playlist from bookmarks"
+ },
+ "post": "Delete post",
+ "comment": "Delete comment",
+ "community": "Delete community",
+ "account": "Delete account",
+ "library": "Delete library",
+ "history": {
+ "search": "Delete search history",
+ "activity": "Delete activity history",
+ "browser": "Delete browser history",
+ "player": "Delete player history"
+ }
+ },
+ "going": {
+ "libraryModel": "You are going to delete {modelName} from your library.",
+ "recommendationModel": "You are going to delete {modelName} from your recommendations.",
+ "playlist": "You are going to delete {modelName} from your playlists.",
+ "playlistTrack": "You are going to delete {modelName} from {parentModelName} playlist.",
+ "savedTrack": "You are going to delete {modelName} from your saved skibidi bangers.",
+ "favorite": "You are going to delete {modelName} from your favorites.",
+ "bookmark": "You are going to delete {modelName} from your bookmarks.",
+ "post": "You are going to delete this post.",
+ "comment": "You are going to delete this comment.",
+ "community": "You are going to delete this community.",
+ "account": "You are going to delete your account.",
+ "library": "You are going to delete your library.",
+ "history": {
+ "search": "You are going to delete your search history.",
+ "activity": "You are going to delete your activity history.",
+ "browser": "You are going to delete your browser history.",
+ "player": "You are going to delete your player history."
+ }
+ },
+ "also": {
+ "libraryModel": {
+ "artist": "This will also delete all this artist's albums and tracks.",
+ "album": "This will also delete all this album's tracks."
+ },
+ "playlist": "This will also delete all this playlist's tracks.",
+ "community": "This will also delete all this community's posts.",
+ "account": [
+ "This will also delete your following data:",
+ "- library\n- recommendations\n- playlists\n- favorites\n- bookmarks\n- listened\n- your page posts\n- subscriptions\n- history",
+ "This data will remain, but your nickname won't be displayed:",
+ "- created posts\n- created comments\n- conversations with you\n- created communities",
+ "And this data will remain unchanged:",
+ "- saved tracks\n- background images\n- settings"
+ ],
+ "library": [
+ "This will delete your following data:",
+ "- artists\n- albums\n- tracks\n- recommendations"
+ ]
+ },
+ "undo": "You can't undo this action!",
+ "sure": "Are you sure?"
+ }
+ },
+ "forms": {
+ "fields": {
+ "email": "Email",
+ "password": "Password",
+ "passwordConfirmation": "Password confirmation",
+ "passwordResetCode": "Password reset code",
+ "nickname": "Nickname",
+ "title": "Title",
+ "description": "Description",
+ "gender": "Gender",
+ "birthdate": "Birth date",
+ "country": "Country",
+ "city": "City",
+ "status": "Status",
+ "clientId": "Client ID",
+ "clientSecret": "Client secret",
+ "genders": {
+ "male": "Male",
+ "female": "Female",
+ "other": "Other"
+ },
+ "legal": {
+ "header": "I agree to the {privacyPolicy} and the {termsAndConditions}",
+ "privacyPolicy": "Privacy Policy",
+ "termsAndConditions": "Terms And Conditions"
+ },
+ "remember": "Remember me",
+ "asCommunity": "As community"
+ },
+ "extra": "Additional info",
+ "errors": {
+ "notFound": "Profile is not found",
+ "empty": {
+ "email": "Email is empty",
+ "password": "Password is empty",
+ "passwordConfirmation": "Password confirmation is empty",
+ "passwordResetCode": "Password reset code is empty",
+ "nickname": "Nickname is empty",
+ "title": "Title is empty",
+ "clientId": "Client ID is empty",
+ "clientSecret": "Client secret is empty",
+ "legal": "You must agree to the Privacy Policy and the Terms And Conditions"
+ },
+ "invalid": {
+ "email": "Email is invalid"
+ },
+ "taken": {
+ "email": "Email is taken",
+ "nickname": "Nickname is taken",
+ "title": "Title is taken"
+ },
+ "tooShort": {
+ "password": "Password is too short"
+ },
+ "tooLong": {
+ "nickname": "Nickname is too long"
+ },
+ "confirmation": {
+ "passwordConfirmation": "Password and its confirmation don't match"
+ },
+ "wrong": {
+ "password": "Wrong password",
+ "passwordResetCode": "Wrong password reset code"
+ }
+ },
+ "confirm": {
+ "password": "Please confirm your password:"
+ }
+ },
+ "notifications": {
+ "scrobbled": "Track {trackFullTitle} has been scrobbled",
+ "added": {
+ "queue": {
+ "track": "Track {trackFullTitle} has been added to queue",
+ "tracks": "{counter} has been added to queue | {counter} have been added to queue"
+ },
+ "savedTracks": {
+ "track": "Track {trackFullTitle} has been added to saved tracks"
+ }
+ },
+ "updated": {
+ "profile": "Profile has been updated",
+ "post": "Post has been updated",
+ "comment": "Comment has been updated",
+ "playlist": "Playlist {playlistTitle} has been updated",
+ "community": "Community {communityTitle} has been updated"
+ },
+ "deleted": {
+ "libraryModel": {
+ "artist": "Artist {modelName} has been deleted from your library",
+ "album": "Album {modelName} has been deleted from your library",
+ "track": "Track {modelName} has been deleted from your library"
+ },
+ "playlist": "Playlist {playlistTitle} has been deleted",
+ "community": "Community {communityTitle} has been deleted",
+ "account": "Your account has been deleted",
+ "library": "Your library has been deleted",
+ "history": {
+ "search": "Search history has been deleted",
+ "activity": "Activity history has been deleted",
+ "browser": "Browser history has been deleted",
+ "player": "Player history has been deleted"
+ }
+ },
+ "copied": "Link is copied to clipboard",
+ "cleared": {
+ "cache": "Cache has been cleared",
+ "searchHistory": "Search history has been cleared"
+ },
+ "restartToApply": "The setting has been saved and will be applied on the next application start"
+ },
+ "counters": {
+ "nominative": {
+ "artists": "{count} artist | {count} artists",
+ "albums": "{count} album | {count} albums",
+ "tracks": "{count} track | {count} tracks",
+ "videos": "{count} video | {count} videos",
+ "files": "{count} file | {count} files",
+ "plays": "{count} play | {count} plays",
+ "followers": "{count} follower | {count} followers",
+ "following": "{count} following",
+ "members": "{count} member | {count} members",
+ "playlists": "{count} playlist | {count} playlists"
+ },
+ "genitive": {
+ "artists": "{count} artist | {count} artists",
+ "albums": "{count} album | {count} albums",
+ "tracks": "{count} track | {count} tracks",
+ "files": "{count} file | {count} files",
+ "plays": "{count} play | {count} plays",
+ "playlists": "{count} playlist | {count} playlists"
+ },
+ "accusative": {
+ "artists": "{count} artist | {count} artists",
+ "albums": "{count} album | {count} albums",
+ "tracks": "{count} track | {count} tracks",
+ "files": "{count} file | {count} files",
+ "playlists": "{count} playlist | {count} playlists"
+ }
+ },
+ "select": {
+ "source": "Select source:",
+ "type": "Select type:",
+ "album": "Select album:",
+ "group": "Select album group:",
+ "artist": "Select artist:",
+ "track": "Select track:",
+ "country": "Select country:",
+ "video": "Select video:",
+ "lyrics": "Select lyrics:"
+ },
+ "sources": {
+ "audio": "Audio",
+ "other": "Other",
+ "albumTypes": {
+ "album": "Album",
+ "group": "Album group",
+ "track": "Track"
+ },
+ "albumsTypes": {
+ "album": "Albums",
+ "single": "Singles",
+ "ep": "EPs",
+ "singleEp": "Singles / EPs",
+ "compilation": "Compilations",
+ "video": "Videos",
+ "misc": "Miscellaneous",
+ "appearance": "Appearances",
+ "live": "Live"
+ },
+ "videoTypes": {
+ "video": "Video",
+ "track": "Track"
+ }
+ },
+ "player": {
+ "variants": "Variants ({count})",
+ "audio": {
+ "bitrate": "{value} kbit/s",
+ "equalizer": {
+ "decibel": "{value} dB",
+ "hertz": "{value} Hz",
+ "kilohertz": "{value} kHz"
+ }
+ }
+ },
+ "settings": {
+ "tabs": {
+ "app": "App",
+ "profile": "Profile",
+ "connections": "Connections"
+ },
+ "sections": {
+ "interface": "Interface",
+ "theme": "Theme",
+ "window": "Window",
+ "tabs": "Tabs",
+ "sidebar": "Sidebar",
+ "video": "Video",
+ "data": "Data",
+ "info": "Info",
+ "account": "Account",
+ "system": "System",
+ "updates": "Updates"
+ },
+ "options": {
+ "app": {
+ "interface": {
+ "language": "Language",
+ "timezone": "Time zone",
+ "infiniteScroll": "Infinite scroll",
+ "artistPopup": "Show artist info on link hover",
+ "innerCounters": "Show muffon listeners counters",
+ "cachePages": "Cache pages",
+ "scale": "Scale"
+ },
+ "theme": {
+ "dark": "Dark mode",
+ "system": "System theme",
+ "background": "Background",
+ "transparency": "Transparency"
+ },
+ "window": {
+ "maximize": "Maximize on start",
+ "quit": "Quit on close",
+ "showTrayIcon": "Show tray icon"
+ },
+ "tabs": {
+ "newTabSwitch": "Switch to new tab",
+ "closeOnQuit": "Close tabs on quit"
+ },
+ "search": {
+ "source": "Source",
+ "scope": "Scope",
+ "resultsFullSize": "Show results in full size"
+ },
+ "player": {
+ "audioSources": "Audio sources (by priority)",
+ "bitrate": "Show audio bitrate",
+ "album": "Show album",
+ "equalizer": "Show equalizer",
+ "focusPlaying": "Focus on current track",
+ "pauseOnVideoPlay": "Pause on video play"
+ },
+ "queue": {
+ "autoplay": "Autoplay",
+ "clear": "Clear on player close"
+ },
+ "video": {
+ "autoplay": "Autoplay",
+ "pauseOnAudioPlay": "Pause on audio play",
+ "openLinksInNewTab": "Open links in new tab"
+ },
+ "recommendations": {
+ "hideLibraryArtists": "Hide library artists",
+ "tracksCount": "with tracks count",
+ "hideListenedArtists": "Hide listened artists",
+ "hideLibraryTracks": "Hide library tracks",
+ "hideListenedTracks": "Hide listened tracks"
+ },
+ "top": {
+ "country": "Default country"
+ },
+ "lyrics": {
+ "annotations": "Show annotations"
+ },
+ "history": {
+ "search": {
+ "delete": "Delete search history"
+ },
+ "activity": {
+ "delete": "Delete activity history"
+ },
+ "player": {
+ "delete": "Delete player history"
+ },
+ "browser": {
+ "delete": "Delete browser history"
+ }
+ },
+ "system": {
+ "cache": {
+ "enable": "Enable cache",
+ "clear": "Clear cache"
+ }
+ },
+ "updates": {
+ "check": "Check for new versions",
+ "auto": "Enable autoupdate",
+ "autoWarning": "Autoupdates on Linux are still in the experimental phase and may contain bugs.\nDuring the autoupdate process, the app will freeze temporarily.\nPlease avoid force-quitting the application; it will close automatically once the update is complete.\n\nFor details and tracking of this issue, visit [a link=issue]this link[/a]."
+ }
+ },
+ "profile": {
+ "player": {
+ "playing": "Show current track on page"
+ },
+ "data": {
+ "account": {
+ "delete": "Delete account"
+ },
+ "library": {
+ "delete": "Delete library"
+ }
+ }
+ },
+ "connections": {
+ "lastfm": {
+ "scrobbling": "Scrobbling",
+ "scrobbleNotifications": "Scrobble notifications",
+ "scrobblePercent": "Scrobble after"
+ },
+ "spotify": {
+ "link": {
+ "description": "To connect your Spotify account please follow [a link=guide]this guide[/a]."
+ }
+ },
+ "discord": {
+ "richPresence": {
+ "header": "Enable Rich Presence",
+ "client": "Before enabling make sure your Discord desktop client is running",
+ "buttons": {
+ "header": "Buttons",
+ "select": {
+ "first": "Select first:",
+ "second": "Select second:"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "track": {
+ "source": "Via {source}"
+ },
+ "recommended": {
+ "header": "Recommended to you",
+ "based": "Based on your:"
+ },
+ "signup": {
+ "text": "Don't have an account?",
+ "link": "Sign up"
+ },
+ "login": {
+ "text": "Already signed up?",
+ "link": "Log in"
+ },
+ "passwordReset": {
+ "text": "Forgot password?",
+ "link": "Reset",
+ "code": {
+ "sent": "Password reset code has been sent to your email"
+ },
+ "updated": {
+ "header": "Your password has been updated",
+ "content": "Now you may go back and login"
+ }
+ },
+ "anonymous": {
+ "continue": "Continue anonymously",
+ "nickname": "Anonymous"
+ },
+ "roles": {
+ "creator": "Creator"
+ },
+ "relationships": {
+ "followed": "Following you",
+ "following": "You are following",
+ "follow": "Follow",
+ "unfollow": "Unfollow"
+ },
+ "memberships": {
+ "joined": "You have joined",
+ "join": "Join",
+ "leave": "Leave"
+ },
+ "message": {
+ "send": "Send message",
+ "sent": {
+ "header": "Message has been sent",
+ "content": "Go to conversation"
+ }
+ },
+ "compatibility": {
+ "header": "Your compatibility level with {profileNickname}",
+ "common": "You have in common:"
+ },
+ "recommendation": {
+ "similar": "Similar to {counter}:"
+ },
+ "import": {
+ "lastfm": {
+ "historyVisible": "Before import make sure that your Last.FM listening history is visible."
+ },
+ "active": "Importing {count} of {counter}...",
+ "success": {
+ "header": {
+ "files": "{counter} has been imported | {counter} have been imported",
+ "tracks": "{counter} has been imported | {counter} have been imported"
+ },
+ "content": "You may want to check the data before saving to library"
+ },
+ "error": {
+ "files": "{counter} could not be imported. Please make sure that metadata format is valid:"
+ }
+ },
+ "save": {
+ "active": "Saving {count} of {counter}...",
+ "success": {
+ "library": {
+ "artists": "{counter} has been added to library | {counter} have been added to library",
+ "albums": "{counter} has been added to library | {counter} have been added to library",
+ "tracks": "{counter} has been added to library | {counter} have been added to library"
+ },
+ "playlist": {
+ "artists": "{counter} has been added to playlist | {counter} have been added to playlist",
+ "albums": "{counter} has been added to playlist | {counter} have been added to playlist",
+ "tracks": "{counter} has been added to playlist | {counter} have been added to playlist"
+ },
+ "playlists": {
+ "playlists": "{counter} has been added to playlists | {counter} have been added to playlists"
+ },
+ "favorites": {
+ "tracks": "{counter} has been added to favorites | {counter} have been added to favorites"
+ }
+ },
+ "error": "{counter} could not be added:"
+ },
+ "delete": {
+ "active": "Deleting {count} of {counter}..."
+ },
+ "connections": {
+ "connect": "Connect account",
+ "confirm": {
+ "token": "Your browser will now open. Confirm connection there and click this button again.",
+ "code": "Your browser will now open. Confirm connection there, paste the received code and click this button again."
+ },
+ "disconnect": "Disconnect account"
+ },
+ "accounts": {
+ "premium": "Premium"
+ },
+ "noCollection": {
+ "header": {
+ "artists": "No artists",
+ "albums": "No albums",
+ "groups": "No album groups",
+ "tracks": "No skibidi bangers",
+ "similar": "No similar",
+ "tags": "No tags",
+ "posts": "No posts",
+ "feed": "No posts",
+ "conversations": "No conversations",
+ "messages": "No messages",
+ "followers": "No followers",
+ "following": "No following",
+ "recommendations": "No recommendations",
+ "playlists": "No playlists",
+ "communities": "No communities",
+ "members": "No members",
+ "videos": "No videos",
+ "videoChannels": "No video channels",
+ "videoMixes": "No video mixes",
+ "videoPlaylists": "No video playlists",
+ "related": "No related",
+ "listeners": "No listeners",
+ "images": "No images",
+ "events": "No events",
+ "profiles": "No profiles",
+ "shows": "No shows"
+ },
+ "content": "Lowkey empty, no rizz detected"
+ },
+ "deleted": {
+ "artist": "Artist has been deleted",
+ "album": "Album has been deleted",
+ "track": "Track has been deleted",
+ "recommendation": "Recommendation has been deleted",
+ "playlist": "Playlist has been deleted",
+ "post": "Post has been deleted",
+ "comment": "Comment has been deleted",
+ "video": "Video has been deleted",
+ "videoChannel": "Video channel has been deleted",
+ "videoPlaylist": "Video playlist has been deleted"
+ },
+ "messages": {
+ "welcome": "Rizzpectfully, welcome {profileNickname}"
+ },
+ "profile": {
+ "wasOnline": "Was online"
+ },
+ "feed": {
+ "global": "Global feed"
+ },
+ "about": {
+ "license": "Legally vibing under {license} license🔥💀",
+ "homepage": "Digital Rizz HQ",
+ "contact": "Blast our inbox 🚀📩"
+ },
+ "private": {
+ "playlist": "Top-secret sauce 🕵️♂️🔥",
+ "profile": "Top-secret sauce 🕵️♂️🔥"
+ },
+ "donate": {
+ "header": "Secure the bag... for us.",
+ "content": [
+ "muffon's lowkey a charity grindset, zero ads and no paid flexes.",
+ "Real talk: it won't stay lit without some cash to keep the drip strong on dev and infrastructure.",
+ "We poured mad grind and time into building this project, so it'd be a major flex if all that hustle paid off.",
+ "So fam, if you're feeling the rizz, slide in to support muffon.",
+ "You down to drop some cash?"
+ ],
+ "actions": {
+ "decline": "Nah, I'm Gucci",
+ "later": "Maybe later, fam",
+ "accept": "Bet, let's go"
+ }
+ },
+ "lists": {
+ "simple": "Simple list",
+ "table": "Table",
+ "extended": "Detailed list"
+ },
+ "orders": {
+ "createdDesc": "Newest",
+ "createdAsc": "Oldest",
+ "updatedDesc": "Most recently updated",
+ "updatedAsc": "Least recently updated",
+ "artistsCountDesc": "Most artists",
+ "artistsCountAsc": "Least artists",
+ "albumsCountDesc": "Most albums",
+ "albumsCountAsc": "Least albums",
+ "tracksCountDesc": "Most tracks",
+ "tracksCountAsc": "Least tracks",
+ "followersCountDesc": "Most followers",
+ "followersCountAsc": "Least followers",
+ "joinedDesc": "Most recently joined",
+ "joinedAsc": "Least recently joined",
+ "membersCountDesc": "Most members",
+ "membersCountAsc": "Least members"
+ },
+ "deletedModel": {
+ "profile": "Deleted profile"
+ },
+ "events": {
+ "created": {
+ "profile": "Ayo, new profile just spawned, skibidi certified",
+ "bookmarkAlbum": "Album {modelName} got yeeted into the vault, fr",
+ "bookmarkArtist": "Artist {modelName} is now locked in, based move",
+ "bookmarkTrack": "Skibidi banger {modelName} just got bookmarked, quantum rizzics at work",
+ "bookmarkVideo": "Video {modelName} secured, big W",
+ "bookmarkVideoChannel": "Channel {modelName} made it to the stash, no cap",
+ "bookmarkVideoPlaylist": "Playlist {modelName} got saved, fam",
+ "favoriteAlbum": "Album {modelName} just hit top-tier status, absolute rizz",
+ "favoriteArtist": "Artist {modelName} entered the GOAT list, rizzlord approved",
+ "favoriteTrack": "Skibidi banger {modelName} just got favorited, straight heat",
+ "favoriteVideo": "Video {modelName} is now elite, skibidi stamped",
+ "libraryAlbum": "Album {modelName} pulled up to the library, mad respect",
+ "libraryArtist": "Artist {modelName} got added, ultimate rizz move",
+ "libraryTrack": "Skibidi banger {modelName} made it to the collection, we up",
+ "listenedAlbum": "You vibed to album {modelName}, straight-up lit",
+ "listenedArtist": "Artist {modelName} got streamed into existence, based decision",
+ "listenedTrack": "Skibidi banger {modelName} got some playtime, quantum rizzics in motion",
+ "watchedVideo": "Video {modelName} added to the watched list, no cap",
+ "playlistTrack": "Skibidi banger {modelName} secured in playlist {playlistTitle}, yeet",
+ "community": "Community {modelName} just spawned, skibidi bop certified",
+ "relationship": "You followed {modelName}, rizzed up the timeline",
+ "post": "Post {modelName} just dropped, straight fire",
+ "postComment": "Comment {modelName} sent, W take",
+ "playlist": "Playlist {modelName} is live, top G vibes",
+ "conversation": "You started a convo with {modelName}, fam we locked in",
+ "membership": "You just rolled into community {modelName}, skibidi rizz"
+ },
+ "updated": {
+ "profile": "Profile just leveled up, skibidi certified",
+ "community": "Community {modelName} got a glow-up",
+ "post": "Post {modelName} got a remix, straight heat",
+ "postComment": "Comment {modelName} just got buffed, W edit",
+ "playlist": "Playlist {modelName} got a facelift, now it's elite"
+ },
+ "deleted": {
+ "bookmarkAlbum": "Unbookmarked album {modelName}, it's gone",
+ "bookmarkArtist": "Yeeted artist {modelName} from bookmarks",
+ "bookmarkTrack": "Skibidi banger {modelName} got the boot from bookmarks",
+ "bookmarkVideo": "Video {modelName} is outta here",
+ "bookmarkVideoChannel": "Video channel {modelName} got wiped from bookmarks",
+ "bookmarkVideoPlaylist": "Video Playlist {modelName}? Say less, it's gone",
+ "favoriteAlbum": "Unfavorited album {modelName}, no more love for this one",
+ "favoriteArtist": "Artist {modelName} is off the favs list",
+ "favoriteTrack": "Skibidi banger {modelName} is no longer a fav",
+ "favoriteVideo": "Video {modelName} got unhearted",
+ "libraryAlbum": "Album {modelName} removed from the stash",
+ "libraryArtist": "Artist {modelName} got kicked from the stash",
+ "libraryTrack": "Skibidi banger {modelName} is outta the stash",
+ "listenedAlbum": "Album {modelName} yeeted from history",
+ "listenedArtist": "Artist {modelName} erased from listened list",
+ "listenedTrack": "Skibidi banger {modelName} just disappeared from listened",
+ "watchedVideo": "Video {modelName} is gone from watched",
+ "playlistTrack": "Skibidi banger {modelName} got ejected from playlist {playlistTitle}",
+ "community": "Community {modelName} got Thanos-snapped",
+ "recommendationArtist": "Artist {modelName} kicked from recommendations",
+ "recommendationTrack": "Skibidi banger {modelName} is no longer in the recs",
+ "relationship": "You just hit unfollow on {modelName}",
+ "post": "Post {modelName} got nuked",
+ "postComment": "Comment {modelName} got yeeted to the void",
+ "playlist": "Playlist {modelName} got tossed in da trash",
+ "membership": "Dipped out of {modelName} community"
+ }
+ },
+ "created": {
+ "profile": "Been gridning on muffon since",
+ "library": "In da stash since",
+ "community": "Was spawned into existence"
+ },
+ "filter": {
+ "include": {
+ "artists": "With artists",
+ "tags": "With tags"
+ },
+ "exclude": {
+ "artists": "Without artists",
+ "tags": "Without tags"
+ }
+ },
+ "keyboardShortcuts": {
+ "header": "Speedrun Controls",
+ "search": "Summon the search bar",
+ "audioBackward": "Rewind that beat",
+ "audioForward": "Forward the vibes",
+ "radioNextTrack": "Skip to the next banger"
+ },
+ "online": "Vibing online 💻🔥",
+ "error": "System got no rizz 💀🛑",
+ "more": "Drop more heat 🔥👀",
+ "loading": "Skibidi buffering... 🚽💃",
+ "warning": "Major sus detected 🚨🤨"
+}
diff --git a/src/plugins/i18nCountries.js b/src/plugins/i18nCountries.js
index 206f3e7d3..2d4756606 100644
--- a/src/plugins/i18nCountries.js
+++ b/src/plugins/i18nCountries.js
@@ -13,6 +13,8 @@ import ko from 'i18n-iso-countries/langs/ko.json'
import pl from 'i18n-iso-countries/langs/pl.json'
import ru from 'i18n-iso-countries/langs/ru.json'
import zh from 'i18n-iso-countries/langs/zh.json'
+import genz from 'i18n-iso-countries/langs/en.json'
+genz.locale = 'genz'
// i18n
@@ -28,7 +30,8 @@ const locales = [
ko,
pl,
ru,
- zh
+ zh,
+ genz
]
function addLocale (