diff --git a/.gitignore b/.gitignore index 2582cc534..2b1de550a 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,4 @@ data/ po/*.po docs/swagger _build +front/src/translations.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3165213e2..fa41fbd25 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,9 +19,12 @@ review_front: when: manual allow_failure: true before_script: + - apt-get update + - apt-get install jq -y - cd front script: - yarn install + - yarn run i18n-compile # this is to ensure we don't have any errors in the output, # cf https://code.eliotberriot.com/funkwhale/funkwhale/issues/169 - INSTANCE_URL=$REVIEW_INSTANCE_URL yarn run build | tee /dev/stderr | (! grep -i 'ERROR in') @@ -175,11 +178,11 @@ build_front: stage: build image: node:9 before_script: + - apt-get update + - apt-get install jq -y - cd front - script: - yarn install - - yarn run i18n-extract - yarn run i18n-compile # this is to ensure we don't have any errors in the output, # cf https://code.eliotberriot.com/funkwhale/funkwhale/issues/169 diff --git a/CONTRIBUTING b/CONTRIBUTING index 24a3a78ff..dffe99d71 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -289,8 +289,9 @@ Typical workflow for a contribution Internationalization -------------------- +We're using https://github.com/Polyconseil/vue-gettext to manage i18n in the project. When working on the front-end, any end-user string should be translated -using either ```` or the ``$t('yourstring')`` +using either ``yourstring`` or ``$gettext('yourstring')`` function. Extraction is done by calling ``yarn run i18n-extract``, which diff --git a/README.rst b/README.rst index ef3998d11..6f9772ea6 100644 --- a/README.rst +++ b/README.rst @@ -26,4 +26,9 @@ Contribute ---------- Contribution guidelines as well as development installation instructions -are outlined in `CONTRIBUTING `_ +are outlined in `CONTRIBUTING `_. + +Translate +^^^^^^^^^ + +Translators willing to help can refer to `TRANSLATORS `_ for instructions. diff --git a/TRANSLATORS.rst b/TRANSLATORS.rst new file mode 100644 index 000000000..f20150995 --- /dev/null +++ b/TRANSLATORS.rst @@ -0,0 +1,28 @@ +Translating Funkwhale +===================== + +Thank you for reading this! If you want to help translate Funkwhale, +you found the proper place :) + +Translation is done via our own Weblate instance at https://translate.funkwhale.audio/projects/funkwhale/front/. + +You can signup/login using your Gitlab account (from https://code.eliotberriot.com). + +Translation workflow +-------------------- + +Once you're logged-in on the Weblate instance, you can suggest translations. Your suggestions will then be reviewer +by the project maintainer or other translators to ensure consistency. + +Guidelines +---------- + +Respecting those guidelines is mandatory if you want your translation to be included: + +- Use gender-neutral language and wording + +Requesting a new language +------------------------- + +If you'd like to see a new language in Funkwhale, please open an issue here: +https://code.eliotberriot.com/funkwhale/funkwhale/issues diff --git a/changes/changelog.d/161.feature b/changes/changelog.d/161.feature new file mode 100644 index 000000000..4c48387cb --- /dev/null +++ b/changes/changelog.d/161.feature @@ -0,0 +1 @@ +New translation workflow (#161, #167) diff --git a/docs/index.rst b/docs/index.rst index 7d200da54..b107739ae 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -23,6 +23,7 @@ Funkwhale is a self-hosted, modern free and open-source music server, heavily in api third-party contributing + translators changelog Indices and tables diff --git a/docs/translators.rst b/docs/translators.rst new file mode 100644 index 000000000..6728e9ad4 --- /dev/null +++ b/docs/translators.rst @@ -0,0 +1 @@ +.. include:: ../TRANSLATORS.rst diff --git a/front/build/dev-server.js b/front/build/dev-server.js index f9c389e72..634a6d41e 100644 --- a/front/build/dev-server.js +++ b/front/build/dev-server.js @@ -14,8 +14,6 @@ var webpackConfig = process.env.NODE_ENV === 'testing' ? require('./webpack.prod.conf') : require('./webpack.dev.conf') -require('./i18n') - // default port where dev server listens for incoming traffic var port = process.env.PORT || config.dev.port var host = process.env.HOST || config.dev.host diff --git a/front/build/i18n.js b/front/build/i18n.js deleted file mode 100644 index ef31070c7..000000000 --- a/front/build/i18n.js +++ /dev/null @@ -1,49 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { gettextToI18next } = require('i18next-conv'); - -const poDir = path.join(__dirname, '..', '..', 'po') -const outDir = path.join(__dirname, '..', 'static', 'translations') -if (!fs.existsSync(outDir) || !fs.statSync(outDir).isDirectory()) { - fs.mkdirSync(outDir) -} - -// Convert .po files to i18next files -fs.readdir(poDir, (err, files) => { - if (err) { - return console.log(err) - } - - for (const file of files) { - if (file.endsWith('.po')) { - const lang = file.replace(/\.po$/, '') - const output = path.join(outDir, `${lang}.json`) - fs.readFile(path.join(poDir, file), (err, content) => { - if (err) { - return console.log(err) - } - - gettextToI18next(lang, content).then(res => { - fs.writeFile(output, res, err => { - if (err) { - console.log(err) - } else { - console.log(`Wrote translation file: ${output}`) - if (lang === 'en') { - // for english, we need to specify that json values are equal to the keys. - // otherwise we end up with empty strings on the front end for english - var contents = fs.readFileSync(output) - var jsonContent = JSON.parse(contents) - var finalContent = {} - Object.keys(jsonContent).forEach(function(key) { - finalContent[key] = key - }) - fs.writeFile(output, JSON.stringify(finalContent)) - } - } - }) - }) - }) - } - } -}) diff --git a/front/locales/app.pot b/front/locales/app.pot new file mode 100644 index 000000000..8adc51986 --- /dev/null +++ b/front/locales/app.pot @@ -0,0 +1,1315 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: front 1.0.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-30 16:25+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgid "\"%{ title }\", by %{ artist }" +msgstr "" + +#: front/src/components/Sidebar.vue:24 +msgid "(%{ index } of %{ length })" +msgstr "" + +#: front/src/components/common/ActionTable.vue:43 +#: front/src/components/common/ActionTable.vue:51 +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/Sidebar.vue:115 src/views/federation/LibraryDetail.vue:87 +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/Artist.vue:13 +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/radios/Builder.vue:66 +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/playlists/Card.vue:19 +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/activity/Like.vue:7 +msgid "%{ user } favorited a track" +msgstr "" + +#: front/src/components/activity/Listen.vue:7 +msgid "%{ user } listened to a track" +msgstr "" + +#: front/src/components/audio/artist/Card.vue:41 +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/favorites/List.vue:10 +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/album/Card.vue:54 +#: front/src/components/federation/LibraryCard.vue:25 +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/App.vue:51 +msgid "About Funkwhale" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:111 +msgid "Access disabled" +msgstr "" + +#: front/src/components/common/ActionTable.vue:82 +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:21 +msgid "Add to favorites" +msgstr "" + +#: front/src/components/metadata/Search.vue:129 +#: front/src/components/audio/track/Table.vue:9 +#: front/src/components/manage/library/FilesTable.vue:40 +msgid "Album" +msgstr "" + +#: front/src/components/library/import/ReleaseImport.vue:3 +msgid "Album %{ title } (%{ count } track) by %{ artist }" +msgid_plural "Album %{ title } (%{ count } tracks) by %{ artist }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/Album.vue:12 +msgid "Album containing %{ count } track, by %{ artist }" +msgid_plural "Album containing %{ count } tracks, by %{ artist }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/metadata/Search.vue:125 +#: front/src/components/federation/LibraryTrackTable.vue:34 +#: front/src/components/manage/library/RequestsTable.vue:50 +msgid "Artist" +msgstr "" + +#: front/src/components/audio/album/Card.vue:13 +msgid "By %{ artist }" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:57 +msgid "By confirming, %{ username } will be denied access to your library." +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:73 +msgid "By confirming, %{ username } will be granted access to your library." +msgstr "" + +#: front/src/components/manage/library/FilesTable.vue:184 +#: front/src/components/manage/library/RequestsTable.vue:190 +#: front/src/components/manage/users/InvitationsTable.vue:161 +msgid "Delete" +msgstr "" + +#: front/src/components/playlists/Editor.vue:42 +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/views/playlists/Detail.vue:34 +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/components/common/ActionTable.vue:29 +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:82 +msgid "Error reporting" +msgstr "" + +#: front/src/components/playlists/Form.vue:84 +msgid "Everyone" +msgstr "" + +#: front/src/components/playlists/Form.vue:80 +msgid "Everyone on this instance" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:175 +#: front/src/views/admin/Settings.vue:79 src/views/admin/users/UsersDetail.vue:156 +msgid "Federation" +msgstr "" + +#: front/src/components/federation/LibraryCard.vue:44 +msgid "Follow" +msgstr "" + +#: front/src/components/activity/Like.vue:12 src/components/activity/Listen.vue:12 +msgid "from %{ album } by %{ artist }" +msgstr "" + +#: front/src/components/library/Track.vue:13 +msgid "From album %{ album } by %{ artist }" +msgstr "" + +#: front/src/App.vue:53 +msgid "Funkwhale is a free and open-source project run by volunteers. You can help us improve the platform by reporting bugs, suggesting features and share the project with your friends!" +msgstr "" + +#: front/src/components/Home.vue:77 +msgid "" +"Get quality metadata about your music thanks to\n" +" \n" +" MusicBrainz\n" +" " +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:159 +#: front/src/components/library/Library.vue:18 +msgid "Import" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:42 +msgid "Import #%{ id } launched" +msgstr "" + +#: front/src/components/library/import/Main.vue:38 +msgid "Import %{ count } track" +msgid_plural "Import %{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:77 +msgid "Imports" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgid "In favorites" +msgstr "" + +#: front/src/components/playlists/Editor.vue:31 +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:75 +msgid "Instance information" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:171 +#: front/src/views/admin/users/UsersDetail.vue:152 src/components/Sidebar.vue:70 +msgid "Library" +msgstr "" + +#: front/src/App.vue:29 +msgid "Links" +msgstr "" + +#: front/src/components/Sidebar.vue:38 +msgid "Logged in as %{ username }" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:192 +msgid "Mark as closed" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:191 +msgid "Mark as imported" +msgstr "" + +#: front/src/components/library/import/Main.vue:115 +msgid "" +"Metadata is the data related to the music you want to import. This includes all the information about the artists, albums and tracks. In order to have a high quality library, it is recommended to grab data from the\n" +" \n" +" MusicBrainz\n" +" \n" +" project, which you can think about as the Wikipedia of music." +msgstr "" + +#: front/src/components/playlists/Form.vue:76 +msgid "Nobody except me" +msgstr "" + +#: front/src/App.vue:60 +msgid "Options" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:95 +msgid "Password updated" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:47 +msgid "Play immediatly" +msgstr "" + +#: front/src/views/playlists/Detail.vue:11 +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:78 src/components/library/Library.vue:14 +msgid "Playlists" +msgstr "" + +#: front/src/components/audio/Player.vue:183 +msgid "Queue shuffled!" +msgstr "" + +#: front/src/components/auth/Profile.vue:11 +msgid "Registered since %{ date }" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:19 +msgid "Remove from favorites" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:31 +msgid "Result %{ current }/%{ total }" +msgstr "" + +#: front/src/components/common/ActionTable.vue:61 +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/federation/LibraryCard.vue:43 +msgid "Send a follow request" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:179 +#: front/src/views/admin/users/UsersDetail.vue:160 +msgid "Settings" +msgstr "" + +#: front/src/components/audio/artist/Card.vue:30 +msgid "Show 1 more album" +msgid_plural "Show %{ count } more albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/album/Card.vue:40 +msgid "Show 1 more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/federation/LibraryFollowTable.vue:97 +#: front/src/components/federation/LibraryTrackTable.vue:83 +#: front/src/components/library/import/BatchDetail.vue:128 +#: front/src/components/library/import/BatchList.vue:73 +#: front/src/components/manage/library/FilesTable.vue:97 +#: front/src/components/manage/library/RequestsTable.vue:104 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:87 +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "" + +#: front/src/App.vue:38 +msgid "Source code" +msgstr "" + +#: front/src/App.vue:37 +msgid "Source code (%{version})" +msgstr "" + +#: front/src/views/admin/Settings.vue:81 +msgid "Statistics" +msgstr "" + +#: front/src/views/admin/Settings.vue:80 +msgid "Subsonic" +msgstr "" + +#: front/src/App.vue:56 +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "" + +#: front/src/components/audio/PlayButton.vue:50 +msgid "This track is not imported and cannot be played" +msgstr "" + +#: front/src/App.vue:130 +msgid "This will erase your local data and disconnect you, do you want to continue?" +msgstr "" + +#: front/src/components/metadata/Search.vue:133 +#: front/src/components/library/import/BatchDetail.vue:85 +msgid "Track" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:167 +#: front/src/views/admin/users/UsersDetail.vue:148 +msgid "Upload" +msgstr "" + +#: front/src/views/admin/Settings.vue:76 src/views/admin/users/UsersList.vue:4 +#: front/src/views/admin/users/Base.vue:6 +msgid "Users" +msgstr "" + +#: front/src/components/auth/Logout.vue:7 +msgid "You are currently logged in as %{ username }" +msgstr "" + +#: front/src/App.vue:5 +msgid "Choose your instance" +msgstr "" + +#: front/src/App.vue:7 +msgid "You need to select an instance in order to continue" +msgstr "" + +#: front/src/App.vue:33 +msgid "About this instance" +msgstr "" + +#: front/src/App.vue:36 +msgid "Documentation" +msgstr "" + +#: front/src/App.vue:43 +msgid "Use another instance" +msgstr "" + +#: front/src/components/radios/Button.vue:5 +msgid "Start" +msgstr "" + +#: front/src/components/discussion/Comment.vue:15 +msgid "Expand" +msgstr "" + +#: front/src/components/instance/Stats.vue:6 +msgid "User activity" +msgstr "" + +#: front/src/components/instance/Stats.vue:43 src/components/library/Library.vue:8 +msgid "Artists" +msgstr "" + +#: front/src/components/instance/Stats.vue:55 +msgid "tracks" +msgstr "" + +#: front/src/components/playlists/Editor.vue:22 +msgid "Changes synced with server" +msgstr "" + +#: front/src/components/playlists/Editor.vue:41 +msgid "Clear playlist" +msgstr "" + +#: front/src/components/playlists/Editor.vue:45 +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:4 +msgid "Manage playlists" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:27 +msgid "Available playlists" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:32 +msgid "Name" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:34 +#: front/src/components/library/Album.vue:44 +msgid "Tracks" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:64 +#: front/src/components/common/DangerousButton.vue:18 +msgid "Cancel" +msgstr "" + +#: front/src/components/playlists/Form.vue:3 +msgid "Create a new playlist" +msgstr "" + +#: front/src/components/playlists/Form.vue:10 +msgid "Playlist created" +msgstr "" + +#: front/src/components/playlists/Form.vue:26 +msgid "Playlist visibility" +msgstr "" + +#: front/src/components/playlists/Form.vue:35 +msgid "Create playlist" +msgstr "" + +#: front/src/components/auth/Signup.vue:5 +msgid "Create a funkwhale account" +msgstr "" + +#: front/src/components/auth/Signup.vue:14 +msgid "We cannot create your account" +msgstr "" + +#: front/src/components/auth/Signup.vue:20 +#: front/src/components/manage/users/UsersTable.vue:38 +msgid "Username" +msgstr "" + +#: front/src/components/auth/Signup.vue:30 +msgid "Email" +msgstr "" + +#: front/src/components/auth/Signup.vue:39 +msgid "Password" +msgstr "" + +#: front/src/components/auth/Signup.vue:44 +msgid "Invitation code (optional)" +msgstr "" + +#: front/src/components/auth/Signup.vue:52 +msgid "Create my account" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:3 +msgid "Subsonic API password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:8 +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:9 +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:15 +msgid "Discover how to use Funkwhale from other apps" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:21 +msgid "Error" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +msgid "Request a new password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:36 +msgid "Request a new Subsonic API password?" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:44 +msgid "Request a password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:52 +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "" + +#: front/src/components/auth/Login.vue:5 +msgid "Log in to your Funkwhale account" +msgstr "" + +#: front/src/components/auth/Login.vue:10 +msgid "Please double-check your username/password couple is correct" +msgstr "" + +#: front/src/components/auth/Login.vue:16 +msgid "Username or email" +msgstr "" + +#: front/src/components/auth/Login.vue:18 +msgid "Create an account" +msgstr "" + +#: front/src/components/auth/Profile.vue:16 +msgid "This is you!" +msgstr "" + +#: front/src/components/auth/Profile.vue:20 +#: front/src/components/manage/users/UsersTable.vue:71 +msgid "Staff member" +msgstr "" + +#: front/src/components/auth/Logout.vue:6 +msgid "Are you sure you want to log out?" +msgstr "" + +#: front/src/components/auth/Logout.vue:9 +msgid "Yes, log me out!" +msgstr "" + +#: front/src/components/auth/Settings.vue:6 +msgid "Account settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:28 +msgid "Update settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:35 +msgid "Change my password" +msgstr "" + +#: front/src/components/auth/Settings.vue:44 +msgid "Cannot change your password" +msgstr "" + +#: front/src/components/auth/Settings.vue:51 +msgid "Old password" +msgstr "" + +#: front/src/components/auth/Settings.vue:63 +msgid "Change password" +msgstr "" + +#: front/src/components/auth/Settings.vue:64 +msgid "Change your password?" +msgstr "" + +#: front/src/components/auth/Settings.vue:68 +msgid "You will be logged out from this session and have to log out with the new one" +msgstr "" + +#: front/src/components/auth/Settings.vue:72 +msgid "Disable access" +msgstr "" + +#: front/src/components/favorites/List.vue:6 +msgid "Loading your favorites..." +msgstr "" + +#: front/src/components/favorites/List.vue:34 src/components/library/Radios.vue:29 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/federation/LibraryList.vue:29 +msgid "Ascending" +msgstr "" + +#: front/src/components/favorites/List.vue:39 src/components/library/Radios.vue:37 +#: front/src/views/federation/LibraryList.vue:34 +msgid "Results per page" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:6 +msgid "Error while saving settings" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:12 +msgid "Settings updated successfully." +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:64 +#: front/src/components/library/radios/Builder.vue:20 +msgid "Save" +msgstr "" + +#: front/src/components/library/Radios.vue:5 +msgid "Browsing radios" +msgstr "" + +#: front/src/components/library/Radios.vue:8 +msgid "Create your own radio" +msgstr "" + +#: front/src/components/library/Radios.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:6 +#: front/src/components/manage/library/FilesTable.vue:6 +#: front/src/components/manage/library/RequestsTable.vue:6 +#: front/src/components/manage/users/InvitationsTable.vue:6 +#: front/src/components/manage/users/UsersTable.vue:6 +#: front/src/views/federation/LibraryList.vue:15 +msgid "Search" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:6 +msgid "Builder" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:12 +msgid "Radio name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:17 +msgid "Display publicly" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:27 +msgid "Add filters to customize your radio" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:37 +msgid "Add filter" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:47 +msgid "Filter name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:49 +msgid "Config" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:51 +#: front/src/components/common/ActionTable.vue:9 +msgid "Actions" +msgstr "" + +#: front/src/components/library/Library.vue:5 +msgid "Browse" +msgstr "" + +#: front/src/components/library/Library.vue:11 +msgid "Radios" +msgstr "" + +#: front/src/components/library/Library.vue:21 +msgid "Import batches" +msgstr "" + +#: front/src/components/library/Artists.vue:5 +msgid "Browsing artists" +msgstr "" + +#: front/src/components/library/Artists.vue:16 src/views/playlists/List.vue:18 +msgid "Ordering" +msgstr "" + +#: front/src/components/library/Artists.vue:24 src/views/playlists/List.vue:26 +msgid "Ordering direction" +msgstr "" + +#: front/src/components/library/Artist.vue:45 +msgid "Albums by this artist" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:5 +msgid "Ensure your music files are properly tagged before uploading them." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:6 +msgid "We recommend using Picard for that purpose." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:37 +msgid "Once all your files are uploaded, simply click the following button to check the import status." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:44 +msgid "File name" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:46 +#: front/src/components/library/import/BatchDetail.vue:67 +#: front/src/components/library/import/BatchList.vue:12 +#: front/src/components/library/import/BatchList.vue:38 +#: front/src/components/federation/LibraryFollowTable.vue:24 +#: front/src/components/federation/LibraryTrackTable.vue:32 +#: front/src/components/manage/library/RequestsTable.vue:25 +#: front/src/components/manage/users/UsersTable.vue:44 +msgid "Status" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:57 +#: front/src/components/library/import/BatchDetail.vue:72 +#: front/src/components/library/import/BatchList.vue:17 +msgid "Success" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:60 +#: front/src/components/library/import/BatchDetail.vue:34 +#: front/src/components/library/import/BatchDetail.vue:70 +#: front/src/components/library/import/BatchList.vue:15 +#: front/src/components/federation/LibraryFollowTable.vue:47 +#: front/src/components/manage/library/RequestsTable.vue:28 +#: front/src/components/manage/library/RequestsTable.vue:64 +msgid "Pending" +msgstr "" + +#: front/src/components/library/import/ArtistImport.vue:8 +msgid "Filter album types" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:18 +#: front/src/components/library/import/BatchDetail.vue:83 +msgid "Source" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:43 +msgid "Search query" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:45 +msgid "Imported URL" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:11 +msgid "Import batch" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:19 +#: front/src/components/library/import/BatchList.vue:36 +msgid "Launch date" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:38 +msgid "Skipped" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:42 +msgid "Errored" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:55 +msgid "Finished" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:81 +msgid "Job ID" +msgstr "" + +#: front/src/components/library/import/Main.vue:7 +msgid "Import source" +msgstr "" + +#: front/src/components/library/import/Main.vue:13 +msgid "Metadata" +msgstr "" + +#: front/src/components/library/import/Main.vue:19 +msgid "Music" +msgstr "" + +#: front/src/components/library/import/Main.vue:30 +msgid "Next step" +msgstr "" + +#: front/src/components/library/import/Main.vue:66 +msgid "External source. Supported backends" +msgstr "" + +#: front/src/components/library/import/Main.vue:86 +msgid "Search an entity you want to import:" +msgstr "" + +#: front/src/components/library/import/Main.vue:94 +msgid "Or" +msgstr "" + +#: front/src/components/library/import/Main.vue:104 +msgid "You will import:" +msgstr "" + +#: front/src/components/library/import/Main.vue:150 +msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled." +msgstr "" + +#: front/src/components/library/import/BatchList.vue:23 +#: front/src/components/federation/LibraryTrackTable.vue:12 +msgid "Any" +msgstr "" + +#: front/src/components/library/import/BatchList.vue:25 +msgid "API" +msgstr "" + +#: front/src/components/library/import/BatchList.vue:40 +msgid "Submitted by" +msgstr "" + +#: front/src/components/library/Track.vue:24 +msgid "Artist page" +msgstr "" + +#: front/src/components/library/Track.vue:31 +msgid "Play" +msgstr "" + +#: front/src/components/library/Track.vue:41 +msgid "Search on Wikipedia" +msgstr "" + +#: front/src/components/library/Track.vue:45 +msgid "View on MusicBrainz" +msgstr "" + +#: front/src/components/library/Track.vue:49 src/components/audio/track/Table.vue:24 +msgid "Download" +msgstr "" + +#: front/src/components/library/Track.vue:59 +#: front/src/components/manage/library/FilesTable.vue:44 +msgid "Duration" +msgstr "" + +#: front/src/components/library/Track.vue:65 src/components/library/Track.vue:76 +#: front/src/components/manage/library/FilesTable.vue:64 +#: front/src/components/manage/library/FilesTable.vue:76 +#: front/src/components/manage/library/FilesTable.vue:82 +#: front/src/components/manage/library/RequestsTable.vue:72 +#: front/src/components/manage/library/RequestsTable.vue:83 +#: front/src/components/manage/users/UsersTable.vue:62 +msgid "N/A" +msgstr "" + +#: front/src/components/library/Track.vue:70 +msgid "Size" +msgstr "" + +#: front/src/components/library/Track.vue:81 +msgid "Bitrate" +msgstr "" + +#: front/src/components/library/Home.vue:10 +msgid "Latest artists" +msgstr "" + +#: front/src/components/library/Home.vue:27 +msgid "Music requests" +msgstr "" + +#: front/src/components/requests/Card.vue:26 +#: front/src/components/manage/library/RequestsTable.vue:89 +msgid "Create import" +msgstr "" + +#: front/src/components/requests/Form.vue:4 +msgid "Something's missing in the library? Let us know what you would like to listen!" +msgstr "" + +#: front/src/components/requests/Form.vue:11 +msgid "Leave this field empty if you're requesting the whole discography." +msgstr "" + +#: front/src/components/requests/Form.vue:15 +#: front/src/components/manage/library/RequestsTable.vue:52 +msgid "Comment" +msgstr "" + +#: front/src/components/requests/Form.vue:22 +msgid "We've received your request, you'll get some groove soon ;)" +msgstr "" + +#: front/src/components/requests/Form.vue:27 +msgid "Pending requests" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:12 +msgid "Pending approval" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:22 +msgid "Actor" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:39 +msgid "Approved" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:43 +msgid "Refused" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:64 +msgid "Deny" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:53 +msgid "Not imported" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:36 +msgid "Published date" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:51 +msgid "In library" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:4 +msgid "Federate with a new instance" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:11 +msgid "Error while scanning library" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:32 +msgid "Launch scan" +msgstr "" + +#: front/src/components/audio/album/Card.vue:44 +#: front/src/components/audio/artist/Card.vue:34 +msgid "Collapse" +msgstr "" + +#: front/src/components/audio/album/Card.vue:51 +msgid "Play all" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:14 +msgid "Add to queue" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:15 +msgid "Play next" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:16 +msgid "Play now" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:145 +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/FilesTable.vue:38 +msgid "Title" +msgstr "" + +#: front/src/components/audio/track/Table.vue:30 +msgid "There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks." +msgstr "" + +#: front/src/components/audio/Search.vue:3 +msgid "Search for some music" +msgstr "" + +#: front/src/components/PageNotFound.vue:8 +msgid "Page not found!" +msgstr "" + +#: front/src/components/PageNotFound.vue:11 +msgid "We're sorry, the page you asked for does not exist:" +msgstr "" + +#: front/src/components/PageNotFound.vue:15 +msgid "Go to home page" +msgstr "" + +#: front/src/components/About.vue:16 +msgid "Unfortunately, owners of this instance did not yet take the time to complete this page." +msgstr "" + +#: front/src/components/Sidebar.vue:21 +msgid "Queue" +msgstr "" + +#: front/src/components/Sidebar.vue:23 +msgid "(empty)" +msgstr "" + +#: front/src/components/Sidebar.vue:43 +msgid "Logout" +msgstr "" + +#: front/src/components/Sidebar.vue:44 +msgid "Login" +msgstr "" + +#: front/src/components/Sidebar.vue:64 +msgid "Administration" +msgstr "" + +#: front/src/components/Sidebar.vue:124 +msgid "Yes" +msgstr "" + +#: front/src/components/Sidebar.vue:158 +msgid "New tracks will be appended here automatically." +msgstr "" + +#: front/src/components/manage/library/FilesTable.vue:42 +msgid "Type" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:30 +#: front/src/components/manage/library/RequestsTable.vue:62 +msgid "Imported" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:48 +msgid "User" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:54 +msgid "Import date" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:5 +msgid "Error while creating invitation" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:12 +msgid "Invitation code" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:27 +#: front/src/components/manage/users/InvitationsTable.vue:43 +msgid "Code" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:38 +msgid "Clear" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgid "All" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:22 +msgid "Expired/used" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:39 +msgid "Owner" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +msgid "Creation date" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgid "Used" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:52 +msgid "Not used" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgid "Account status" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:42 +msgid "Last activity" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgid "Active" +msgstr "" + +#: front/src/components/common/ActionTable.vue:22 +msgid "Go" +msgstr "" + +#: front/src/components/common/ActionTable.vue:40 +msgid "Launch" +msgstr "" + +#: front/src/components/Home.vue:6 +msgid "Welcome on Funkwhale" +msgstr "" + +#: front/src/components/Home.vue:14 +msgid "Get me to the library" +msgstr "" + +#: front/src/components/Home.vue:25 +msgid "Why funkwhale?" +msgstr "" + +#: front/src/components/Home.vue:40 +msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists." +msgstr "" + +#: front/src/components/Home.vue:45 +msgid "Click once, listen for hours using built-in radios" +msgstr "" + +#: front/src/components/Home.vue:57 +msgid "Playlists? We got them" +msgstr "" + +#: front/src/components/Home.vue:67 +msgid "Funkwhale takes care of handling your music" +msgstr "" + +#: front/src/components/Home.vue:72 +msgid "Import music from various platforms, such as YouTube or SoundCloud" +msgstr "" + +#: front/src/components/Home.vue:89 +msgid "Covers, lyrics, our goal is to have them all ;)" +msgstr "" + +#: front/src/components/Home.vue:99 +msgid "Funkwhale is dead simple to use." +msgstr "" + +#: front/src/components/Home.vue:104 +msgid "No add-ons, no plugins : you only need a web library" +msgstr "" + +#: front/src/components/Home.vue:118 +msgid "Your music, your way" +msgstr "" + +#: front/src/components/Home.vue:131 +msgid "We do not track you or bother you with ads" +msgstr "" + +#: front/src/views/instance/Timeline.vue:5 +msgid "Loading timeline..." +msgstr "" + +#: front/src/views/instance/Timeline.vue:8 +msgid "Recent activity on this instance" +msgstr "" + +#: front/src/views/playlists/Detail.vue:30 +msgid "Edit..." +msgstr "" + +#: front/src/views/playlists/Detail.vue:38 +msgid "Delete playlist" +msgstr "" + +#: front/src/views/playlists/List.vue:4 +msgid "Browsing playlists" +msgstr "" + +#: front/src/views/playlists/List.vue:9 +msgid "Manage your playlists" +msgstr "" + +#: front/src/views/playlists/List.vue:29 +msgid "Descending" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:5 +msgid "Reset your password" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:15 +msgid "Account's email" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:19 +#: front/src/views/auth/EmailConfirm.vue:18 +msgid "Back to login" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:5 +msgid "Change your password" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgid "Password updated successfully" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:32 +msgid "Proceed to login" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:5 +msgid "Confirm your email" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:25 +msgid "Your email address was confirmed, you can now use the service without limitations." +msgstr "" + +#: front/src/views/admin/library/RequestsList.vue:4 +msgid "Import requests" +msgstr "" + +#: front/src/views/admin/library/FilesList.vue:4 +msgid "Library files" +msgstr "" + +#: front/src/views/admin/library/Base.vue:6 +msgid "Files" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:30 +msgid "Email address" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:55 +msgid "Account active" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:85 +msgid "Refresh" +msgstr "" + +#: front/src/views/admin/users/InvitationsList.vue:4 +msgid "Invitations" +msgstr "" + +#: front/src/views/federation/LibraryFollowersList.vue:4 +msgid "Browsing followers" +msgstr "" + +#: front/src/views/federation/LibraryTrackList.vue:4 +msgid "Browsing federated tracks" +msgstr "" + +#: front/src/views/federation/LibraryList.vue:4 +msgid "Browsing libraries" +msgstr "" + +#: front/src/views/federation/LibraryList.vue:9 +msgid "Add a new library" +msgstr "" + +#: front/src/views/federation/LibraryDetail.vue:57 +msgid "Auto importing" +msgstr "" + +#: front/src/views/federation/LibraryDetail.vue:85 +msgid "Library size" +msgstr "" + +#: front/src/views/federation/Base.vue:6 +msgid "Libraries" +msgstr "" + +#: front/src/views/federation/Base.vue:14 +msgid "Followers" +msgstr "" diff --git a/front/locales/en_US/LC_MESSAGES/app.po b/front/locales/en_US/LC_MESSAGES/app.po new file mode 100644 index 000000000..b5abf8088 --- /dev/null +++ b/front/locales/en_US/LC_MESSAGES/app.po @@ -0,0 +1,1323 @@ +# English translations for front package. +# Copyright (C) 2018 THE front'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# Automatically generated, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: front 1.0.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-30 16:25+0200\n" +"PO-Revision-Date: 2018-06-30 11:34+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgid "\"%{ title }\", by %{ artist }" +msgstr "" + +#: front/src/components/Sidebar.vue:24 +msgid "(%{ index } of %{ length })" +msgstr "" + +#: front/src/components/common/ActionTable.vue:43 +#: front/src/components/common/ActionTable.vue:51 +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/Sidebar.vue:115 +#: src/views/federation/LibraryDetail.vue:87 +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/Artist.vue:13 +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/radios/Builder.vue:66 +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/playlists/Card.vue:19 +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/activity/Like.vue:7 +msgid "%{ user } favorited a track" +msgstr "" + +#: front/src/components/activity/Listen.vue:7 +msgid "%{ user } listened to a track" +msgstr "" + +#: front/src/components/audio/artist/Card.vue:41 +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/favorites/List.vue:10 +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/album/Card.vue:54 +#: front/src/components/federation/LibraryCard.vue:25 +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/App.vue:51 +msgid "About Funkwhale" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:111 +msgid "Access disabled" +msgstr "" + +#: front/src/components/common/ActionTable.vue:82 +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:21 +msgid "Add to favorites" +msgstr "" + +#: front/src/components/metadata/Search.vue:129 +#: front/src/components/audio/track/Table.vue:9 +#: front/src/components/manage/library/FilesTable.vue:40 +msgid "Album" +msgstr "" + +#: front/src/components/library/import/ReleaseImport.vue:3 +msgid "Album %{ title } (%{ count } track) by %{ artist }" +msgid_plural "Album %{ title } (%{ count } tracks) by %{ artist }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/Album.vue:12 +msgid "Album containing %{ count } track, by %{ artist }" +msgid_plural "Album containing %{ count } tracks, by %{ artist }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/metadata/Search.vue:125 +#: front/src/components/federation/LibraryTrackTable.vue:34 +#: front/src/components/manage/library/RequestsTable.vue:50 +msgid "Artist" +msgstr "" + +#: front/src/components/audio/album/Card.vue:13 +msgid "By %{ artist }" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:57 +msgid "By confirming, %{ username } will be denied access to your library." +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:73 +msgid "By confirming, %{ username } will be granted access to your library." +msgstr "" + +#: front/src/components/manage/library/FilesTable.vue:184 +#: front/src/components/manage/library/RequestsTable.vue:190 +#: front/src/components/manage/users/InvitationsTable.vue:161 +msgid "Delete" +msgstr "" + +#: front/src/components/playlists/Editor.vue:42 +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/views/playlists/Detail.vue:34 +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/components/common/ActionTable.vue:29 +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:82 +msgid "Error reporting" +msgstr "" + +#: front/src/components/playlists/Form.vue:84 +msgid "Everyone" +msgstr "" + +#: front/src/components/playlists/Form.vue:80 +msgid "Everyone on this instance" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:175 +#: front/src/views/admin/Settings.vue:79 +#: src/views/admin/users/UsersDetail.vue:156 +msgid "Federation" +msgstr "" + +#: front/src/components/federation/LibraryCard.vue:44 +msgid "Follow" +msgstr "" + +#: front/src/components/activity/Like.vue:12 +#: src/components/activity/Listen.vue:12 +msgid "from %{ album } by %{ artist }" +msgstr "" + +#: front/src/components/library/Track.vue:13 +msgid "From album %{ album } by %{ artist }" +msgstr "" + +#: front/src/App.vue:53 +msgid "Funkwhale is a free and open-source project run by volunteers. You can help us improve the platform by reporting bugs, suggesting features and share the project with your friends!" +msgstr "" + +#: front/src/components/Home.vue:77 +msgid "" +"Get quality metadata about your music thanks to\n" +" \n" +" MusicBrainz\n" +" " +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:159 +#: front/src/components/library/Library.vue:18 +msgid "Import" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:42 +msgid "Import #%{ id } launched" +msgstr "" + +#: front/src/components/library/import/Main.vue:38 +msgid "Import %{ count } track" +msgid_plural "Import %{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:77 +msgid "Imports" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgid "In favorites" +msgstr "" + +#: front/src/components/playlists/Editor.vue:31 +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:75 +msgid "Instance information" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:171 +#: front/src/views/admin/users/UsersDetail.vue:152 +#: src/components/Sidebar.vue:70 +msgid "Library" +msgstr "" + +#: front/src/App.vue:29 +msgid "Links" +msgstr "" + +#: front/src/components/Sidebar.vue:38 +msgid "Logged in as %{ username }" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:192 +msgid "Mark as closed" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:191 +msgid "Mark as imported" +msgstr "" + +#: front/src/components/library/import/Main.vue:115 +msgid "" +"Metadata is the data related to the music you want to import. This includes all the information about the artists, albums and tracks. In order to have a high quality library, it is recommended to grab data from the\n" +" \n" +" MusicBrainz\n" +" \n" +" project, which you can think about as the Wikipedia of music." +msgstr "" + +#: front/src/components/playlists/Form.vue:76 +msgid "Nobody except me" +msgstr "" + +#: front/src/App.vue:60 +msgid "Options" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:95 +msgid "Password updated" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:47 +msgid "Play immediatly" +msgstr "" + +#: front/src/views/playlists/Detail.vue:11 +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/admin/Settings.vue:78 src/components/library/Library.vue:14 +msgid "Playlists" +msgstr "" + +#: front/src/components/audio/Player.vue:183 +msgid "Queue shuffled!" +msgstr "" + +#: front/src/components/auth/Profile.vue:11 +msgid "Registered since %{ date }" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:19 +msgid "Remove from favorites" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:31 +msgid "Result %{ current }/%{ total }" +msgstr "" + +#: front/src/components/common/ActionTable.vue:61 +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/federation/LibraryCard.vue:43 +msgid "Send a follow request" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:179 +#: front/src/views/admin/users/UsersDetail.vue:160 +msgid "Settings" +msgstr "" + +#: front/src/components/audio/artist/Card.vue:30 +msgid "Show 1 more album" +msgid_plural "Show %{ count } more albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/album/Card.vue:40 +msgid "Show 1 more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/federation/LibraryFollowTable.vue:97 +#: front/src/components/federation/LibraryTrackTable.vue:83 +#: front/src/components/library/import/BatchDetail.vue:128 +#: front/src/components/library/import/BatchList.vue:73 +#: front/src/components/manage/library/FilesTable.vue:97 +#: front/src/components/manage/library/RequestsTable.vue:104 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:87 +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "" + +#: front/src/App.vue:38 +msgid "Source code" +msgstr "" + +#: front/src/App.vue:37 +msgid "Source code (%{version})" +msgstr "" + +#: front/src/views/admin/Settings.vue:81 +msgid "Statistics" +msgstr "" + +#: front/src/views/admin/Settings.vue:80 +msgid "Subsonic" +msgstr "" + +#: front/src/App.vue:56 +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "" + +#: front/src/components/audio/PlayButton.vue:50 +msgid "This track is not imported and cannot be played" +msgstr "" + +#: front/src/App.vue:130 +msgid "This will erase your local data and disconnect you, do you want to continue?" +msgstr "" + +#: front/src/components/metadata/Search.vue:133 +#: front/src/components/library/import/BatchDetail.vue:85 +msgid "Track" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:167 +#: front/src/views/admin/users/UsersDetail.vue:148 +msgid "Upload" +msgstr "" + +#: front/src/views/admin/Settings.vue:76 src/views/admin/users/UsersList.vue:4 +#: front/src/views/admin/users/Base.vue:6 +msgid "Users" +msgstr "" + +#: front/src/components/auth/Logout.vue:7 +msgid "You are currently logged in as %{ username }" +msgstr "" + +#: front/src/App.vue:5 +msgid "Choose your instance" +msgstr "" + +#: front/src/App.vue:7 +msgid "You need to select an instance in order to continue" +msgstr "" + +#: front/src/App.vue:33 +msgid "About this instance" +msgstr "" + +#: front/src/App.vue:36 +msgid "Documentation" +msgstr "" + +#: front/src/App.vue:43 +msgid "Use another instance" +msgstr "" + +#: front/src/components/radios/Button.vue:5 +msgid "Start" +msgstr "" + +#: front/src/components/discussion/Comment.vue:15 +msgid "Expand" +msgstr "" + +#: front/src/components/instance/Stats.vue:6 +msgid "User activity" +msgstr "" + +#: front/src/components/instance/Stats.vue:43 +#: src/components/library/Library.vue:8 +msgid "Artists" +msgstr "" + +#: front/src/components/instance/Stats.vue:55 +msgid "tracks" +msgstr "" + +#: front/src/components/playlists/Editor.vue:22 +msgid "Changes synced with server" +msgstr "" + +#: front/src/components/playlists/Editor.vue:41 +msgid "Clear playlist" +msgstr "" + +#: front/src/components/playlists/Editor.vue:45 +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:4 +msgid "Manage playlists" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:27 +msgid "Available playlists" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:32 +msgid "Name" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:34 +#: front/src/components/library/Album.vue:44 +msgid "Tracks" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:64 +#: front/src/components/common/DangerousButton.vue:18 +msgid "Cancel" +msgstr "" + +#: front/src/components/playlists/Form.vue:3 +msgid "Create a new playlist" +msgstr "" + +#: front/src/components/playlists/Form.vue:10 +msgid "Playlist created" +msgstr "" + +#: front/src/components/playlists/Form.vue:26 +msgid "Playlist visibility" +msgstr "" + +#: front/src/components/playlists/Form.vue:35 +msgid "Create playlist" +msgstr "" + +#: front/src/components/auth/Signup.vue:5 +msgid "Create a funkwhale account" +msgstr "" + +#: front/src/components/auth/Signup.vue:14 +msgid "We cannot create your account" +msgstr "" + +#: front/src/components/auth/Signup.vue:20 +#: front/src/components/manage/users/UsersTable.vue:38 +msgid "Username" +msgstr "" + +#: front/src/components/auth/Signup.vue:30 +msgid "Email" +msgstr "" + +#: front/src/components/auth/Signup.vue:39 +msgid "Password" +msgstr "" + +#: front/src/components/auth/Signup.vue:44 +msgid "Invitation code (optional)" +msgstr "" + +#: front/src/components/auth/Signup.vue:52 +msgid "Create my account" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:3 +msgid "Subsonic API password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:8 +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:9 +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:15 +msgid "Discover how to use Funkwhale from other apps" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:21 +msgid "Error" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +msgid "Request a new password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:36 +msgid "Request a new Subsonic API password?" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:44 +msgid "Request a password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:52 +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "" + +#: front/src/components/auth/Login.vue:5 +msgid "Log in to your Funkwhale account" +msgstr "" + +#: front/src/components/auth/Login.vue:10 +msgid "Please double-check your username/password couple is correct" +msgstr "" + +#: front/src/components/auth/Login.vue:16 +msgid "Username or email" +msgstr "" + +#: front/src/components/auth/Login.vue:18 +msgid "Create an account" +msgstr "" + +#: front/src/components/auth/Profile.vue:16 +msgid "This is you!" +msgstr "" + +#: front/src/components/auth/Profile.vue:20 +#: front/src/components/manage/users/UsersTable.vue:71 +msgid "Staff member" +msgstr "" + +#: front/src/components/auth/Logout.vue:6 +msgid "Are you sure you want to log out?" +msgstr "" + +#: front/src/components/auth/Logout.vue:9 +msgid "Yes, log me out!" +msgstr "" + +#: front/src/components/auth/Settings.vue:6 +msgid "Account settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:28 +msgid "Update settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:35 +msgid "Change my password" +msgstr "" + +#: front/src/components/auth/Settings.vue:44 +msgid "Cannot change your password" +msgstr "" + +#: front/src/components/auth/Settings.vue:51 +msgid "Old password" +msgstr "" + +#: front/src/components/auth/Settings.vue:63 +msgid "Change password" +msgstr "" + +#: front/src/components/auth/Settings.vue:64 +msgid "Change your password?" +msgstr "" + +#: front/src/components/auth/Settings.vue:68 +msgid "You will be logged out from this session and have to log out with the new one" +msgstr "" + +#: front/src/components/auth/Settings.vue:72 +msgid "Disable access" +msgstr "" + +#: front/src/components/favorites/List.vue:6 +msgid "Loading your favorites..." +msgstr "" + +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Radios.vue:29 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/federation/LibraryList.vue:29 +msgid "Ascending" +msgstr "" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Radios.vue:37 +#: front/src/views/federation/LibraryList.vue:34 +msgid "Results per page" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:6 +msgid "Error while saving settings" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:12 +msgid "Settings updated successfully." +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:64 +#: front/src/components/library/radios/Builder.vue:20 +msgid "Save" +msgstr "" + +#: front/src/components/library/Radios.vue:5 +msgid "Browsing radios" +msgstr "" + +#: front/src/components/library/Radios.vue:8 +msgid "Create your own radio" +msgstr "" + +#: front/src/components/library/Radios.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:6 +#: front/src/components/manage/library/FilesTable.vue:6 +#: front/src/components/manage/library/RequestsTable.vue:6 +#: front/src/components/manage/users/InvitationsTable.vue:6 +#: front/src/components/manage/users/UsersTable.vue:6 +#: front/src/views/federation/LibraryList.vue:15 +msgid "Search" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:6 +msgid "Builder" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:12 +msgid "Radio name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:17 +msgid "Display publicly" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:27 +msgid "Add filters to customize your radio" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:37 +msgid "Add filter" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:47 +msgid "Filter name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:49 +msgid "Config" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:51 +#: front/src/components/common/ActionTable.vue:9 +msgid "Actions" +msgstr "" + +#: front/src/components/library/Library.vue:5 +msgid "Browse" +msgstr "" + +#: front/src/components/library/Library.vue:11 +msgid "Radios" +msgstr "" + +#: front/src/components/library/Library.vue:21 +msgid "Import batches" +msgstr "" + +#: front/src/components/library/Artists.vue:5 +msgid "Browsing artists" +msgstr "" + +#: front/src/components/library/Artists.vue:16 src/views/playlists/List.vue:18 +msgid "Ordering" +msgstr "" + +#: front/src/components/library/Artists.vue:24 src/views/playlists/List.vue:26 +msgid "Ordering direction" +msgstr "" + +#: front/src/components/library/Artist.vue:45 +msgid "Albums by this artist" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:5 +msgid "Ensure your music files are properly tagged before uploading them." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:6 +msgid "We recommend using Picard for that purpose." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:37 +msgid "Once all your files are uploaded, simply click the following button to check the import status." +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:44 +msgid "File name" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:46 +#: front/src/components/library/import/BatchDetail.vue:67 +#: front/src/components/library/import/BatchList.vue:12 +#: front/src/components/library/import/BatchList.vue:38 +#: front/src/components/federation/LibraryFollowTable.vue:24 +#: front/src/components/federation/LibraryTrackTable.vue:32 +#: front/src/components/manage/library/RequestsTable.vue:25 +#: front/src/components/manage/users/UsersTable.vue:44 +msgid "Status" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:57 +#: front/src/components/library/import/BatchDetail.vue:72 +#: front/src/components/library/import/BatchList.vue:17 +msgid "Success" +msgstr "" + +#: front/src/components/library/import/FileUpload.vue:60 +#: front/src/components/library/import/BatchDetail.vue:34 +#: front/src/components/library/import/BatchDetail.vue:70 +#: front/src/components/library/import/BatchList.vue:15 +#: front/src/components/federation/LibraryFollowTable.vue:47 +#: front/src/components/manage/library/RequestsTable.vue:28 +#: front/src/components/manage/library/RequestsTable.vue:64 +msgid "Pending" +msgstr "" + +#: front/src/components/library/import/ArtistImport.vue:8 +msgid "Filter album types" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:18 +#: front/src/components/library/import/BatchDetail.vue:83 +msgid "Source" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:43 +msgid "Search query" +msgstr "" + +#: front/src/components/library/import/TrackImport.vue:45 +msgid "Imported URL" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:11 +msgid "Import batch" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:19 +#: front/src/components/library/import/BatchList.vue:36 +msgid "Launch date" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:38 +msgid "Skipped" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:42 +msgid "Errored" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:55 +msgid "Finished" +msgstr "" + +#: front/src/components/library/import/BatchDetail.vue:81 +msgid "Job ID" +msgstr "" + +#: front/src/components/library/import/Main.vue:7 +msgid "Import source" +msgstr "" + +#: front/src/components/library/import/Main.vue:13 +msgid "Metadata" +msgstr "" + +#: front/src/components/library/import/Main.vue:19 +msgid "Music" +msgstr "" + +#: front/src/components/library/import/Main.vue:30 +msgid "Next step" +msgstr "" + +#: front/src/components/library/import/Main.vue:66 +msgid "External source. Supported backends" +msgstr "" + +#: front/src/components/library/import/Main.vue:86 +msgid "Search an entity you want to import:" +msgstr "" + +#: front/src/components/library/import/Main.vue:94 +msgid "Or" +msgstr "" + +#: front/src/components/library/import/Main.vue:104 +msgid "You will import:" +msgstr "" + +#: front/src/components/library/import/Main.vue:150 +msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled." +msgstr "" + +#: front/src/components/library/import/BatchList.vue:23 +#: front/src/components/federation/LibraryTrackTable.vue:12 +msgid "Any" +msgstr "" + +#: front/src/components/library/import/BatchList.vue:25 +msgid "API" +msgstr "" + +#: front/src/components/library/import/BatchList.vue:40 +msgid "Submitted by" +msgstr "" + +#: front/src/components/library/Track.vue:24 +msgid "Artist page" +msgstr "" + +#: front/src/components/library/Track.vue:31 +msgid "Play" +msgstr "" + +#: front/src/components/library/Track.vue:41 +msgid "Search on Wikipedia" +msgstr "" + +#: front/src/components/library/Track.vue:45 +msgid "View on MusicBrainz" +msgstr "" + +#: front/src/components/library/Track.vue:49 +#: src/components/audio/track/Table.vue:24 +msgid "Download" +msgstr "" + +#: front/src/components/library/Track.vue:59 +#: front/src/components/manage/library/FilesTable.vue:44 +msgid "Duration" +msgstr "" + +#: front/src/components/library/Track.vue:65 +#: src/components/library/Track.vue:76 +#: front/src/components/manage/library/FilesTable.vue:64 +#: front/src/components/manage/library/FilesTable.vue:76 +#: front/src/components/manage/library/FilesTable.vue:82 +#: front/src/components/manage/library/RequestsTable.vue:72 +#: front/src/components/manage/library/RequestsTable.vue:83 +#: front/src/components/manage/users/UsersTable.vue:62 +msgid "N/A" +msgstr "" + +#: front/src/components/library/Track.vue:70 +msgid "Size" +msgstr "" + +#: front/src/components/library/Track.vue:81 +msgid "Bitrate" +msgstr "" + +#: front/src/components/library/Home.vue:10 +msgid "Latest artists" +msgstr "" + +#: front/src/components/library/Home.vue:27 +msgid "Music requests" +msgstr "" + +#: front/src/components/requests/Card.vue:26 +#: front/src/components/manage/library/RequestsTable.vue:89 +msgid "Create import" +msgstr "" + +#: front/src/components/requests/Form.vue:4 +msgid "Something's missing in the library? Let us know what you would like to listen!" +msgstr "" + +#: front/src/components/requests/Form.vue:11 +msgid "Leave this field empty if you're requesting the whole discography." +msgstr "" + +#: front/src/components/requests/Form.vue:15 +#: front/src/components/manage/library/RequestsTable.vue:52 +msgid "Comment" +msgstr "" + +#: front/src/components/requests/Form.vue:22 +msgid "We've received your request, you'll get some groove soon ;)" +msgstr "" + +#: front/src/components/requests/Form.vue:27 +msgid "Pending requests" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:12 +msgid "Pending approval" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:22 +msgid "Actor" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:39 +msgid "Approved" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:43 +msgid "Refused" +msgstr "" + +#: front/src/components/federation/LibraryFollowTable.vue:64 +msgid "Deny" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:53 +msgid "Not imported" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:36 +msgid "Published date" +msgstr "" + +#: front/src/components/federation/LibraryTrackTable.vue:51 +msgid "In library" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:4 +msgid "Federate with a new instance" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:11 +msgid "Error while scanning library" +msgstr "" + +#: front/src/components/federation/LibraryForm.vue:32 +msgid "Launch scan" +msgstr "" + +#: front/src/components/audio/album/Card.vue:44 +#: front/src/components/audio/artist/Card.vue:34 +msgid "Collapse" +msgstr "" + +#: front/src/components/audio/album/Card.vue:51 +msgid "Play all" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:14 +msgid "Add to queue" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:15 +msgid "Play next" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:16 +msgid "Play now" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:145 +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/FilesTable.vue:38 +msgid "Title" +msgstr "" + +#: front/src/components/audio/track/Table.vue:30 +msgid "There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks." +msgstr "" + +#: front/src/components/audio/Search.vue:3 +msgid "Search for some music" +msgstr "" + +#: front/src/components/PageNotFound.vue:8 +msgid "Page not found!" +msgstr "" + +#: front/src/components/PageNotFound.vue:11 +msgid "We're sorry, the page you asked for does not exist:" +msgstr "" + +#: front/src/components/PageNotFound.vue:15 +msgid "Go to home page" +msgstr "" + +#: front/src/components/About.vue:16 +msgid "Unfortunately, owners of this instance did not yet take the time to complete this page." +msgstr "" + +#: front/src/components/Sidebar.vue:21 +msgid "Queue" +msgstr "" + +#: front/src/components/Sidebar.vue:23 +msgid "(empty)" +msgstr "" + +#: front/src/components/Sidebar.vue:43 +msgid "Logout" +msgstr "" + +#: front/src/components/Sidebar.vue:44 +msgid "Login" +msgstr "" + +#: front/src/components/Sidebar.vue:64 +msgid "Administration" +msgstr "" + +#: front/src/components/Sidebar.vue:124 +msgid "Yes" +msgstr "" + +#: front/src/components/Sidebar.vue:158 +msgid "New tracks will be appended here automatically." +msgstr "" + +#: front/src/components/manage/library/FilesTable.vue:42 +msgid "Type" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:30 +#: front/src/components/manage/library/RequestsTable.vue:62 +msgid "Imported" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:48 +msgid "User" +msgstr "" + +#: front/src/components/manage/library/RequestsTable.vue:54 +msgid "Import date" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:5 +msgid "Error while creating invitation" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:12 +msgid "Invitation code" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:27 +#: front/src/components/manage/users/InvitationsTable.vue:43 +msgid "Code" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:38 +msgid "Clear" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgid "All" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:22 +msgid "Expired/used" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:39 +msgid "Owner" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +msgid "Creation date" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgid "Used" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:52 +msgid "Not used" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgid "Account status" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:42 +msgid "Last activity" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgid "Active" +msgstr "" + +#: front/src/components/common/ActionTable.vue:22 +msgid "Go" +msgstr "" + +#: front/src/components/common/ActionTable.vue:40 +msgid "Launch" +msgstr "" + +#: front/src/components/Home.vue:6 +msgid "Welcome on Funkwhale" +msgstr "" + +#: front/src/components/Home.vue:14 +msgid "Get me to the library" +msgstr "" + +#: front/src/components/Home.vue:25 +msgid "Why funkwhale?" +msgstr "" + +#: front/src/components/Home.vue:40 +msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists." +msgstr "" + +#: front/src/components/Home.vue:45 +msgid "Click once, listen for hours using built-in radios" +msgstr "" + +#: front/src/components/Home.vue:57 +msgid "Playlists? We got them" +msgstr "" + +#: front/src/components/Home.vue:67 +msgid "Funkwhale takes care of handling your music" +msgstr "" + +#: front/src/components/Home.vue:72 +msgid "Import music from various platforms, such as YouTube or SoundCloud" +msgstr "" + +#: front/src/components/Home.vue:89 +msgid "Covers, lyrics, our goal is to have them all ;)" +msgstr "" + +#: front/src/components/Home.vue:99 +msgid "Funkwhale is dead simple to use." +msgstr "" + +#: front/src/components/Home.vue:104 +msgid "No add-ons, no plugins : you only need a web library" +msgstr "" + +#: front/src/components/Home.vue:118 +msgid "Your music, your way" +msgstr "" + +#: front/src/components/Home.vue:131 +msgid "We do not track you or bother you with ads" +msgstr "" + +#: front/src/views/instance/Timeline.vue:5 +msgid "Loading timeline..." +msgstr "" + +#: front/src/views/instance/Timeline.vue:8 +msgid "Recent activity on this instance" +msgstr "" + +#: front/src/views/playlists/Detail.vue:30 +msgid "Edit..." +msgstr "" + +#: front/src/views/playlists/Detail.vue:38 +msgid "Delete playlist" +msgstr "" + +#: front/src/views/playlists/List.vue:4 +msgid "Browsing playlists" +msgstr "" + +#: front/src/views/playlists/List.vue:9 +msgid "Manage your playlists" +msgstr "" + +#: front/src/views/playlists/List.vue:29 +msgid "Descending" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:5 +msgid "Reset your password" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:15 +msgid "Account's email" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:19 +#: front/src/views/auth/EmailConfirm.vue:18 +msgid "Back to login" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:5 +msgid "Change your password" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgid "Password updated successfully" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:32 +msgid "Proceed to login" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:5 +msgid "Confirm your email" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:25 +msgid "Your email address was confirmed, you can now use the service without limitations." +msgstr "" + +#: front/src/views/admin/library/RequestsList.vue:4 +msgid "Import requests" +msgstr "" + +#: front/src/views/admin/library/FilesList.vue:4 +msgid "Library files" +msgstr "" + +#: front/src/views/admin/library/Base.vue:6 +msgid "Files" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:30 +msgid "Email address" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:55 +msgid "Account active" +msgstr "" + +#: front/src/views/admin/users/UsersDetail.vue:85 +msgid "Refresh" +msgstr "" + +#: front/src/views/admin/users/InvitationsList.vue:4 +msgid "Invitations" +msgstr "" + +#: front/src/views/federation/LibraryFollowersList.vue:4 +msgid "Browsing followers" +msgstr "" + +#: front/src/views/federation/LibraryTrackList.vue:4 +msgid "Browsing federated tracks" +msgstr "" + +#: front/src/views/federation/LibraryList.vue:4 +msgid "Browsing libraries" +msgstr "" + +#: front/src/views/federation/LibraryList.vue:9 +msgid "Add a new library" +msgstr "" + +#: front/src/views/federation/LibraryDetail.vue:57 +msgid "Auto importing" +msgstr "" + +#: front/src/views/federation/LibraryDetail.vue:85 +msgid "Library size" +msgstr "" + +#: front/src/views/federation/Base.vue:6 +msgid "Libraries" +msgstr "" + +#: front/src/views/federation/Base.vue:14 +msgid "Followers" +msgstr "" diff --git a/front/locales/fr_FR/LC_MESSAGES/app.po b/front/locales/fr_FR/LC_MESSAGES/app.po new file mode 100644 index 000000000..217bbc30b --- /dev/null +++ b/front/locales/fr_FR/LC_MESSAGES/app.po @@ -0,0 +1,1382 @@ +# French translations for front package. +# Copyright (C) 2018 THE front'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# Automatically generated, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: front 1.0.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-30 16:25+0200\n" +"PO-Revision-Date: 2018-06-30 18:18+0000\n" +"Last-Translator: Eliot Berriot \n" +"Language-Team: French \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 2.20\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgid "\"%{ title }\", by %{ artist }" +msgstr "\"%{ title }\", de %{ artist }" + +#: front/src/components/Sidebar.vue:24 +msgid "(%{ index } of %{ length })" +msgstr "(%{ index } sur %{ length })" + +#: front/src/components/common/ActionTable.vue:43 +#: front/src/components/common/ActionTable.vue:51 +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "%{ count } sur %{ total } élément sélectionné" +msgstr[1] "%{ count } sur %{ total } éléments sélectionnés" + +#: front/src/components/Sidebar.vue:115 +#: src/views/federation/LibraryDetail.vue:87 +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } piste" +msgstr[1] "%{ count } pistes" + +#: front/src/components/library/Artist.vue:13 +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "%{ count } piste dans %{ albumsCount } albums" +msgstr[1] "%{ count } pistes dans %{ albumsCount } albums" + +#: front/src/components/library/radios/Builder.vue:66 +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "%{ count } piste correspondant aux filtres sélectionnés" +msgstr[1] "%{ count } pistes correspondant aux filtres sélectionnés" + +#: front/src/components/playlists/Card.vue:19 +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count} piste" +msgstr[1] "%{ count } pistes" + +#: front/src/components/activity/Like.vue:7 +msgid "%{ user } favorited a track" +msgstr "%{ user } a ajouté une piste a ses favoris" + +#: front/src/components/activity/Listen.vue:7 +msgid "%{ user } listened to a track" +msgstr "%{ user } a écouté une piste" + +#: front/src/components/audio/artist/Card.vue:41 +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "1 album" +msgstr[1] "%{ count } albums" + +#: front/src/components/favorites/List.vue:10 +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "1 favoris" +msgstr[1] "%{ count } favoris" + +#: front/src/components/audio/album/Card.vue:54 +#: front/src/components/federation/LibraryCard.vue:25 +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "1 piste" +msgstr[1] "%{ count } pistes" + +#: front/src/App.vue:51 +msgid "About Funkwhale" +msgstr "À propos de Funkwhale" + +#: front/src/components/auth/SubsonicTokenForm.vue:111 +msgid "Access disabled" +msgstr "Accès désactivé" + +#: front/src/components/common/ActionTable.vue:82 +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "L'action %{ action } a été lancée avec succès sur %{ count } élément" +msgstr[1] "L'action %{ action } a été lancée avec succès sur %{ count } éléments" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:21 +msgid "Add to favorites" +msgstr "Ajouter aux favoris" + +#: front/src/components/metadata/Search.vue:129 +#: front/src/components/audio/track/Table.vue:9 +#: front/src/components/manage/library/FilesTable.vue:40 +msgid "Album" +msgstr "Album" + +#: front/src/components/library/import/ReleaseImport.vue:3 +msgid "Album %{ title } (%{ count } track) by %{ artist }" +msgid_plural "Album %{ title } (%{ count } tracks) by %{ artist }" +msgstr[0] "Album %{ title } (%{ count } piste) par %{ artist }" +msgstr[1] "Album %{ title } (%{ count } pistes) by %{ artist }" + +#: front/src/components/library/Album.vue:12 +msgid "Album containing %{ count } track, by %{ artist }" +msgid_plural "Album containing %{ count } tracks, by %{ artist }" +msgstr[0] "Album incluant %{ count } piste, de %{ artist }" +msgstr[1] "Album incluant %{ count } pistes, de %{ artist }" + +#: front/src/components/metadata/Search.vue:125 +#: front/src/components/federation/LibraryTrackTable.vue:34 +#: front/src/components/manage/library/RequestsTable.vue:50 +msgid "Artist" +msgstr "Artiste" + +#: front/src/components/audio/album/Card.vue:13 +msgid "By %{ artist }" +msgstr "De %{ artist }" + +#: front/src/components/federation/LibraryFollowTable.vue:57 +msgid "By confirming, %{ username } will be denied access to your library." +msgstr "" +"Si vous confirmez, %{ username } se verra refuser l'accès à votre " +"bibliothèque." + +#: front/src/components/federation/LibraryFollowTable.vue:73 +msgid "By confirming, %{ username } will be granted access to your library." +msgstr "" +"Si vous confirmez, %{ username } se verra accorder l'accès à votre " +"bitliothèque." + +#: front/src/components/manage/library/FilesTable.vue:184 +#: front/src/components/manage/library/RequestsTable.vue:190 +#: front/src/components/manage/users/InvitationsTable.vue:161 +msgid "Delete" +msgstr "Supprimer" + +#: front/src/components/playlists/Editor.vue:42 +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "Voulez-vous vider la playlist \"%{ playlist }\" ?" + +#: front/src/views/playlists/Detail.vue:34 +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "Voulez-vous supprimer la playlist \"%{ playlist }\" ?" + +#: front/src/components/common/ActionTable.vue:29 +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "Voulez-vous effectuer l'action \"%{ action } sur %{ count } élément ?" +msgstr[1] "Voulez-vous effectuer l'action \"%{ action } sur %{ count } éléments ?" + +#: front/src/views/admin/Settings.vue:82 +msgid "Error reporting" +msgstr "Rapports d'erreur" + +#: front/src/components/playlists/Form.vue:84 +msgid "Everyone" +msgstr "Tout le monde" + +#: front/src/components/playlists/Form.vue:80 +msgid "Everyone on this instance" +msgstr "Tout le monde sur cette instance" + +#: front/src/components/manage/users/UsersTable.vue:175 +#: front/src/views/admin/Settings.vue:79 +#: src/views/admin/users/UsersDetail.vue:156 +msgid "Federation" +msgstr "Fédération" + +#: front/src/components/federation/LibraryCard.vue:44 +msgid "Follow" +msgstr "Suivre" + +#: front/src/components/activity/Like.vue:12 +#: src/components/activity/Listen.vue:12 +msgid "from %{ album } by %{ artist }" +msgstr "de l'album %{ album } par %{ artist }" + +#: front/src/components/library/Track.vue:13 +msgid "From album %{ album } by %{ artist }" +msgstr "De l'album %{ album } par %{ artist }" + +#: front/src/App.vue:53 +msgid "Funkwhale is a free and open-source project run by volunteers. You can help us improve the platform by reporting bugs, suggesting features and share the project with your friends!" +msgstr "" +"Funkwale est un projet open-source et gratuit, animé par des bénévoles. Vous " +"pouvez nous aider à améliorer le service en remontant les problèmes que vous " +"rencontrez, en suggérant des améliorations et en parlant du projet autour de " +"vous !" + +#: front/src/components/Home.vue:77 +msgid "" +"Get quality metadata about your music thanks to\n" +" \n" +" MusicBrainz\n" +" " +msgstr "" +"Obtenez des métadonnées de qualité grâce à \n" +" MusicBrainz\n" +" " + +#: front/src/components/federation/LibraryTrackTable.vue:159 +#: front/src/components/library/Library.vue:18 +msgid "Import" +msgstr "Import" + +#: front/src/components/federation/LibraryTrackTable.vue:42 +msgid "Import #%{ id } launched" +msgstr "Import #%{ id } démarré" + +#: front/src/components/library/import/Main.vue:38 +msgid "Import %{ count } track" +msgid_plural "Import %{ count } tracks" +msgstr[0] "Import %{ count } track" +msgstr[1] "Importer %{ count } pistes" + +#: front/src/views/admin/Settings.vue:77 +msgid "Imports" +msgstr "Imports" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgid "In favorites" +msgstr "Dans les favoris" + +#: front/src/components/playlists/Editor.vue:31 +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "Insérer depuis la queue (%{ count } piste)" +msgstr[1] "Insérer depuis la queue (%{ count } pistes)" + +#: front/src/views/admin/Settings.vue:75 +msgid "Instance information" +msgstr "Informations relatives à cette instance" + +#: front/src/components/manage/users/UsersTable.vue:171 +#: front/src/views/admin/users/UsersDetail.vue:152 +#: src/components/Sidebar.vue:70 +msgid "Library" +msgstr "Bibliothèque" + +#: front/src/App.vue:29 +msgid "Links" +msgstr "Liens" + +#: front/src/components/Sidebar.vue:38 +msgid "Logged in as %{ username }" +msgstr "Connecté·e en tant que %{ username }" + +#: front/src/components/manage/library/RequestsTable.vue:192 +msgid "Mark as closed" +msgstr "Marquer comme fermé" + +#: front/src/components/manage/library/RequestsTable.vue:191 +msgid "Mark as imported" +msgstr "Marquer comme importé" + +#: front/src/components/library/import/Main.vue:115 +msgid "" +"Metadata is the data related to the music you want to import. This includes all the information about the artists, albums and tracks. In order to have a high quality library, it is recommended to grab data from the\n" +" \n" +" MusicBrainz\n" +" \n" +" project, which you can think about as the Wikipedia of music." +msgstr "" +"Les métadonnées sont les informations relatives à la musique que vous " +"souhaitez importer. Cela inclut notamment toutes les informations concernant " +"les artistes, albums et pistes. Afin d'avoir des métadonnées de qualité, il " +"est recommandé d'utiliser les métadonnées du projet \n" +" MusicBrainz\n" +" \n" +" qui est une base de données musicale fonctionnant sur le même " +"modèle que Wikipédia." + +#: front/src/components/playlists/Form.vue:76 +msgid "Nobody except me" +msgstr "Personne à part moi" + +#: front/src/App.vue:60 +msgid "Options" +msgstr "Options" + +#: front/src/components/auth/SubsonicTokenForm.vue:95 +msgid "Password updated" +msgstr "Mot de passe mis à jour" + +#: front/src/components/audio/PlayButton.vue:47 +msgid "Play immediatly" +msgstr "Jouer immédiatement" + +#: front/src/views/playlists/Detail.vue:11 +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "Playlist contenant %{ count } piste, par %{ username }" +msgstr[1] "Playlist contenant %{ count } pistes, par %{ username }" + +#: front/src/views/admin/Settings.vue:78 src/components/library/Library.vue:14 +msgid "Playlists" +msgstr "Playlists" + +#: front/src/components/audio/Player.vue:183 +msgid "Queue shuffled!" +msgstr "La queue a été mélangée !" + +#: front/src/components/auth/Profile.vue:11 +msgid "Registered since %{ date }" +msgstr "Inscrit·e depuis le %{ date }" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:19 +msgid "Remove from favorites" +msgstr "Retirer des favoris" + +#: front/src/components/library/import/TrackImport.vue:31 +msgid "Result %{ current }/%{ total }" +msgstr "Résultat %{ current }/%{ total }" + +#: front/src/components/common/ActionTable.vue:61 +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "Selectionner l'ensemble des %{ total } élément" +msgstr[1] "Selectionner l'ensemble des %{ total } éléments" + +#: front/src/components/federation/LibraryCard.vue:43 +msgid "Send a follow request" +msgstr "Envoyer une demande d'abonnement" + +#: front/src/components/manage/users/UsersTable.vue:179 +#: front/src/views/admin/users/UsersDetail.vue:160 +msgid "Settings" +msgstr "Paramètres" + +#: front/src/components/audio/artist/Card.vue:30 +msgid "Show 1 more album" +msgid_plural "Show %{ count } more albums" +msgstr[0] "Montrer 1 album supplémentaire" +msgstr[1] "Montrer %{ count } albums supplémentaires" + +#: front/src/components/audio/album/Card.vue:40 +msgid "Show 1 more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "Afficher 1 piste de plus" +msgstr[1] "Afficher %{ count } pistes de plus" + +#: front/src/components/federation/LibraryFollowTable.vue:97 +#: front/src/components/federation/LibraryTrackTable.vue:83 +#: front/src/components/library/import/BatchDetail.vue:128 +#: front/src/components/library/import/BatchList.vue:73 +#: front/src/components/manage/library/FilesTable.vue:97 +#: front/src/components/manage/library/RequestsTable.vue:104 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:87 +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "Affichage des résultats %{ start }-%{ end } sur %{ total }" + +#: front/src/App.vue:38 +msgid "Source code" +msgstr "Code source" + +#: front/src/App.vue:37 +msgid "Source code (%{version})" +msgstr "Code source (%{version})" + +#: front/src/views/admin/Settings.vue:81 +msgid "Statistics" +msgstr "Statistiques" + +#: front/src/views/admin/Settings.vue:80 +msgid "Subsonic" +msgstr "Subsonic" + +#: front/src/App.vue:56 +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "" +"Le logo de Funkwhale a été généreusement dessiné et fourni par Francis " +"Gading." + +#: front/src/components/audio/PlayButton.vue:50 +msgid "This track is not imported and cannot be played" +msgstr "Cette piste n'est pas importée et ne peut pas être jouée" + +#: front/src/App.vue:130 +msgid "This will erase your local data and disconnect you, do you want to continue?" +msgstr "" +"Cela va effacer vos données locales et vous déconnecter, voulez-vous " +"continuer ?" + +#: front/src/components/metadata/Search.vue:133 +#: front/src/components/library/import/BatchDetail.vue:85 +msgid "Track" +msgstr "Piste" + +#: front/src/components/manage/users/UsersTable.vue:167 +#: front/src/views/admin/users/UsersDetail.vue:148 +msgid "Upload" +msgstr "Envoi" + +#: front/src/views/admin/Settings.vue:76 src/views/admin/users/UsersList.vue:4 +#: front/src/views/admin/users/Base.vue:6 +msgid "Users" +msgstr "Utilisateur·ice·s" + +#: front/src/components/auth/Logout.vue:7 +msgid "You are currently logged in as %{ username }" +msgstr "Vous êtes actuellement connecté·e en tant que %{ username }" + +#: front/src/App.vue:5 +msgid "Choose your instance" +msgstr "Choisissez votre instance" + +#: front/src/App.vue:7 +msgid "You need to select an instance in order to continue" +msgstr "Vous devez choisir une instance pour continuer" + +#: front/src/App.vue:33 +msgid "About this instance" +msgstr "A propos de cette instance" + +#: front/src/App.vue:36 +msgid "Documentation" +msgstr "Documentation" + +#: front/src/App.vue:43 +msgid "Use another instance" +msgstr "Utiliser une autre instance" + +#: front/src/components/radios/Button.vue:5 +msgid "Start" +msgstr "Démarrer" + +#: front/src/components/discussion/Comment.vue:15 +msgid "Expand" +msgstr "Ouvrir" + +#: front/src/components/instance/Stats.vue:6 +msgid "User activity" +msgstr "Activité des utilisateur·ice·s" + +#: front/src/components/instance/Stats.vue:43 +#: src/components/library/Library.vue:8 +msgid "Artists" +msgstr "Artistes" + +#: front/src/components/instance/Stats.vue:55 +msgid "tracks" +msgstr "pistes" + +#: front/src/components/playlists/Editor.vue:22 +msgid "Changes synced with server" +msgstr "Changements synchronisés avec le serveur" + +#: front/src/components/playlists/Editor.vue:41 +msgid "Clear playlist" +msgstr "Vider la playlist" + +#: front/src/components/playlists/Editor.vue:45 +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "" +"Cela supprimera toutes les pistes de la playlist et ne pourra pas être " +"annulé." + +#: front/src/components/playlists/PlaylistModal.vue:4 +msgid "Manage playlists" +msgstr "Gérer les playlists" + +#: front/src/components/playlists/PlaylistModal.vue:27 +msgid "Available playlists" +msgstr "Playlists disponibles" + +#: front/src/components/playlists/PlaylistModal.vue:32 +msgid "Name" +msgstr "Nom" + +#: front/src/components/playlists/PlaylistModal.vue:34 +#: front/src/components/library/Album.vue:44 +msgid "Tracks" +msgstr "Pistes" + +#: front/src/components/playlists/PlaylistModal.vue:64 +#: front/src/components/common/DangerousButton.vue:18 +msgid "Cancel" +msgstr "Annuler" + +#: front/src/components/playlists/Form.vue:3 +msgid "Create a new playlist" +msgstr "Créer une nouvelle playlist" + +#: front/src/components/playlists/Form.vue:10 +msgid "Playlist created" +msgstr "Playlist créée" + +#: front/src/components/playlists/Form.vue:26 +msgid "Playlist visibility" +msgstr "Visibilité de la playlist" + +#: front/src/components/playlists/Form.vue:35 +msgid "Create playlist" +msgstr "Créer une playlist" + +#: front/src/components/auth/Signup.vue:5 +msgid "Create a funkwhale account" +msgstr "Créer un compte funkwhale" + +#: front/src/components/auth/Signup.vue:14 +msgid "We cannot create your account" +msgstr "Nous ne pouvons pas créer votre compte" + +#: front/src/components/auth/Signup.vue:20 +#: front/src/components/manage/users/UsersTable.vue:38 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: front/src/components/auth/Signup.vue:30 +msgid "Email" +msgstr "Email" + +#: front/src/components/auth/Signup.vue:39 +msgid "Password" +msgstr "Mot de passe" + +#: front/src/components/auth/Signup.vue:44 +msgid "Invitation code (optional)" +msgstr "Code d'invitation (optionnel)" + +#: front/src/components/auth/Signup.vue:52 +msgid "Create my account" +msgstr "Créer votre compte" + +#: front/src/components/auth/SubsonicTokenForm.vue:3 +msgid "Subsonic API password" +msgstr "Mot de passe de l'API Subsonic" + +#: front/src/components/auth/SubsonicTokenForm.vue:8 +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "" +"Funkwhale est compatible avec d'autres lecteurs de musique qui supportent " +"l'API Subsonic." + +#: front/src/components/auth/SubsonicTokenForm.vue:9 +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "" +"Vous pouvez les utiliser pour profiter de vos playlists et de votre musique " +"en mode hors-ligne sur votre smatphone ou tablette, par exemple." + +#: front/src/components/auth/SubsonicTokenForm.vue:15 +msgid "Discover how to use Funkwhale from other apps" +msgstr "Découvrez comment utiliser Funkwhale sur d'autres applications" + +#: front/src/components/auth/SubsonicTokenForm.vue:21 +msgid "Error" +msgstr "Erreur" + +#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +msgid "Request a new password" +msgstr "Demander un nouveau mot de passe" + +#: front/src/components/auth/SubsonicTokenForm.vue:36 +msgid "Request a new Subsonic API password?" +msgstr "Demander un nouveau mot de passe pour l'API Subsonic ?" + +#: front/src/components/auth/SubsonicTokenForm.vue:44 +msgid "Request a password" +msgstr "Demander un mot de passe" + +#: front/src/components/auth/SubsonicTokenForm.vue:52 +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "" +"Cela désactivera complétement l'accès à l'API Subsonic depuis votre compte." + +#: front/src/components/auth/Login.vue:5 +msgid "Log in to your Funkwhale account" +msgstr "Connectez vous à votre compte Funkwhale" + +#: front/src/components/auth/Login.vue:10 +msgid "Please double-check your username/password couple is correct" +msgstr "" +"Merci de vérifier que votre nom d'utilisateur et mot de passe sont corrects" + +#: front/src/components/auth/Login.vue:16 +msgid "Username or email" +msgstr "Nom d'utilisateur ou email" + +#: front/src/components/auth/Login.vue:18 +msgid "Create an account" +msgstr "Créer un compte" + +#: front/src/components/auth/Profile.vue:16 +msgid "This is you!" +msgstr "C'est vous !" + +#: front/src/components/auth/Profile.vue:20 +#: front/src/components/manage/users/UsersTable.vue:71 +msgid "Staff member" +msgstr "Membre de l'équipe" + +#: front/src/components/auth/Logout.vue:6 +msgid "Are you sure you want to log out?" +msgstr "Êtes-vous sur de vouloir vous déconnecter ?" + +#: front/src/components/auth/Logout.vue:9 +msgid "Yes, log me out!" +msgstr "Oui, déconnectez-moi !" + +#: front/src/components/auth/Settings.vue:6 +msgid "Account settings" +msgstr "Paramètres du compte" + +#: front/src/components/auth/Settings.vue:28 +msgid "Update settings" +msgstr "Mettre à jour les paramètres" + +#: front/src/components/auth/Settings.vue:35 +msgid "Change my password" +msgstr "Changer mon mot de passe" + +#: front/src/components/auth/Settings.vue:44 +msgid "Cannot change your password" +msgstr "Mot de passe ne peut pas être changé" + +#: front/src/components/auth/Settings.vue:51 +msgid "Old password" +msgstr "Ancien mot de passe" + +#: front/src/components/auth/Settings.vue:63 +msgid "Change password" +msgstr "Changer le mot de passe" + +#: front/src/components/auth/Settings.vue:64 +msgid "Change your password?" +msgstr "Changer le mot de passe ?" + +#: front/src/components/auth/Settings.vue:68 +msgid "You will be logged out from this session and have to log out with the new one" +msgstr "" +"Vous allez être déconnecté de cette session et vous allez devoir vous " +"connecter avec votre nouveau mot de passe" + +#: front/src/components/auth/Settings.vue:72 +msgid "Disable access" +msgstr "Désactiver l'accès" + +#: front/src/components/favorites/List.vue:6 +msgid "Loading your favorites..." +msgstr "Chargement de vos favoris ..." + +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Radios.vue:29 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/federation/LibraryList.vue:29 +msgid "Ascending" +msgstr "Ascendant" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Radios.vue:37 +#: front/src/views/federation/LibraryList.vue:34 +msgid "Results per page" +msgstr "Résultats par page" + +#: front/src/components/admin/SettingsGroup.vue:6 +msgid "Error while saving settings" +msgstr "Erreur pendant l'enregistrement des paramètres" + +#: front/src/components/admin/SettingsGroup.vue:12 +msgid "Settings updated successfully." +msgstr "Paramètres modifiés avec succès." + +#: front/src/components/admin/SettingsGroup.vue:64 +#: front/src/components/library/radios/Builder.vue:20 +msgid "Save" +msgstr "Enregistrer" + +#: front/src/components/library/Radios.vue:5 +msgid "Browsing radios" +msgstr "Parcourir les radios" + +#: front/src/components/library/Radios.vue:8 +msgid "Create your own radio" +msgstr "Créer votre propre radio" + +#: front/src/components/library/Radios.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:6 +#: front/src/components/manage/library/FilesTable.vue:6 +#: front/src/components/manage/library/RequestsTable.vue:6 +#: front/src/components/manage/users/InvitationsTable.vue:6 +#: front/src/components/manage/users/UsersTable.vue:6 +#: front/src/views/federation/LibraryList.vue:15 +msgid "Search" +msgstr "Rechercher" + +#: front/src/components/library/radios/Builder.vue:6 +msgid "Builder" +msgstr "Éditeur" + +#: front/src/components/library/radios/Builder.vue:12 +msgid "Radio name" +msgstr "Nom de la radio" + +#: front/src/components/library/radios/Builder.vue:17 +msgid "Display publicly" +msgstr "Afficher publiquement" + +#: front/src/components/library/radios/Builder.vue:27 +msgid "Add filters to customize your radio" +msgstr "Ajouter des filtres pour personnaliser votre radio" + +#: front/src/components/library/radios/Builder.vue:37 +msgid "Add filter" +msgstr "Ajouter des filtres" + +#: front/src/components/library/radios/Builder.vue:47 +msgid "Filter name" +msgstr "Nom du filtre" + +#: front/src/components/library/radios/Builder.vue:49 +msgid "Config" +msgstr "Configuration" + +#: front/src/components/library/radios/Builder.vue:51 +#: front/src/components/common/ActionTable.vue:9 +msgid "Actions" +msgstr "Actions" + +#: front/src/components/library/Library.vue:5 +msgid "Browse" +msgstr "Parcourir" + +#: front/src/components/library/Library.vue:11 +msgid "Radios" +msgstr "Radios" + +#: front/src/components/library/Library.vue:21 +msgid "Import batches" +msgstr "Lots d'imports" + +#: front/src/components/library/Artists.vue:5 +msgid "Browsing artists" +msgstr "Parcourir les artistes" + +#: front/src/components/library/Artists.vue:16 src/views/playlists/List.vue:18 +msgid "Ordering" +msgstr "Ordre" + +#: front/src/components/library/Artists.vue:24 src/views/playlists/List.vue:26 +msgid "Ordering direction" +msgstr "Direction" + +#: front/src/components/library/Artist.vue:45 +msgid "Albums by this artist" +msgstr "Albums de cet·te artiste" + +#: front/src/components/library/import/FileUpload.vue:5 +msgid "Ensure your music files are properly tagged before uploading them." +msgstr "" +"Vérifier que vos fichiers musicaux sont correctement taggués avant de les " +"envoyer." + +#: front/src/components/library/import/FileUpload.vue:6 +msgid "We recommend using Picard for that purpose." +msgstr "Nous recommandons d'utiliser le logiciel Picard pour cela." + +#: front/src/components/library/import/FileUpload.vue:37 +msgid "Once all your files are uploaded, simply click the following button to check the import status." +msgstr "" +"Une fois que tous vos fichiers sont chargés, cliquez sur le bouton suivant " +"pour vérifier le statut d'import." + +#: front/src/components/library/import/FileUpload.vue:44 +msgid "File name" +msgstr "Nom du fichier" + +#: front/src/components/library/import/FileUpload.vue:46 +#: front/src/components/library/import/BatchDetail.vue:67 +#: front/src/components/library/import/BatchList.vue:12 +#: front/src/components/library/import/BatchList.vue:38 +#: front/src/components/federation/LibraryFollowTable.vue:24 +#: front/src/components/federation/LibraryTrackTable.vue:32 +#: front/src/components/manage/library/RequestsTable.vue:25 +#: front/src/components/manage/users/UsersTable.vue:44 +msgid "Status" +msgstr "Statut" + +#: front/src/components/library/import/FileUpload.vue:57 +#: front/src/components/library/import/BatchDetail.vue:72 +#: front/src/components/library/import/BatchList.vue:17 +msgid "Success" +msgstr "Succès" + +#: front/src/components/library/import/FileUpload.vue:60 +#: front/src/components/library/import/BatchDetail.vue:34 +#: front/src/components/library/import/BatchDetail.vue:70 +#: front/src/components/library/import/BatchList.vue:15 +#: front/src/components/federation/LibraryFollowTable.vue:47 +#: front/src/components/manage/library/RequestsTable.vue:28 +#: front/src/components/manage/library/RequestsTable.vue:64 +msgid "Pending" +msgstr "En attente" + +#: front/src/components/library/import/ArtistImport.vue:8 +msgid "Filter album types" +msgstr "Filtrer le type d'album" + +#: front/src/components/library/import/TrackImport.vue:18 +#: front/src/components/library/import/BatchDetail.vue:83 +msgid "Source" +msgstr "Source" + +#: front/src/components/library/import/TrackImport.vue:43 +msgid "Search query" +msgstr "Recherche" + +#: front/src/components/library/import/TrackImport.vue:45 +msgid "Imported URL" +msgstr "URL importée" + +#: front/src/components/library/import/BatchDetail.vue:11 +msgid "Import batch" +msgstr "Lot d'import" + +#: front/src/components/library/import/BatchDetail.vue:19 +#: front/src/components/library/import/BatchList.vue:36 +msgid "Launch date" +msgstr "Date de lancement" + +#: front/src/components/library/import/BatchDetail.vue:38 +msgid "Skipped" +msgstr "Ignoré" + +#: front/src/components/library/import/BatchDetail.vue:42 +msgid "Errored" +msgstr "En erreur" + +#: front/src/components/library/import/BatchDetail.vue:55 +msgid "Finished" +msgstr "Terminé" + +#: front/src/components/library/import/BatchDetail.vue:81 +msgid "Job ID" +msgstr "ID de la tâche" + +#: front/src/components/library/import/Main.vue:7 +msgid "Import source" +msgstr "Source de l'import" + +#: front/src/components/library/import/Main.vue:13 +msgid "Metadata" +msgstr "Metadonnées" + +#: front/src/components/library/import/Main.vue:19 +msgid "Music" +msgstr "Musique" + +#: front/src/components/library/import/Main.vue:30 +msgid "Next step" +msgstr "Prochaine étape" + +#: front/src/components/library/import/Main.vue:66 +msgid "External source. Supported backends" +msgstr "Source externe. Services supportés" + +#: front/src/components/library/import/Main.vue:86 +msgid "Search an entity you want to import:" +msgstr "Rechercher une ressource que vous voulez importer :" + +#: front/src/components/library/import/Main.vue:94 +msgid "Or" +msgstr "Ou" + +#: front/src/components/library/import/Main.vue:104 +msgid "You will import:" +msgstr "Vous allez importer :" + +#: front/src/components/library/import/Main.vue:150 +msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled." +msgstr "" +"Cet import sera associé à la requête ci dessous. Une fois l'import terminé, " +"la requête sera marquée comme complétée." + +#: front/src/components/library/import/BatchList.vue:23 +#: front/src/components/federation/LibraryTrackTable.vue:12 +msgid "Any" +msgstr "Tous" + +#: front/src/components/library/import/BatchList.vue:25 +msgid "API" +msgstr "API" + +#: front/src/components/library/import/BatchList.vue:40 +msgid "Submitted by" +msgstr "Proposé par" + +#: front/src/components/library/Track.vue:24 +msgid "Artist page" +msgstr "Page de l'artiste" + +#: front/src/components/library/Track.vue:31 +msgid "Play" +msgstr "Jouer" + +#: front/src/components/library/Track.vue:41 +msgid "Search on Wikipedia" +msgstr "Rechercher sur Wikipédia" + +#: front/src/components/library/Track.vue:45 +msgid "View on MusicBrainz" +msgstr "Voir sur MusicBrainz" + +#: front/src/components/library/Track.vue:49 +#: src/components/audio/track/Table.vue:24 +msgid "Download" +msgstr "Télécharger" + +#: front/src/components/library/Track.vue:59 +#: front/src/components/manage/library/FilesTable.vue:44 +msgid "Duration" +msgstr "Durée" + +#: front/src/components/library/Track.vue:65 +#: src/components/library/Track.vue:76 +#: front/src/components/manage/library/FilesTable.vue:64 +#: front/src/components/manage/library/FilesTable.vue:76 +#: front/src/components/manage/library/FilesTable.vue:82 +#: front/src/components/manage/library/RequestsTable.vue:72 +#: front/src/components/manage/library/RequestsTable.vue:83 +#: front/src/components/manage/users/UsersTable.vue:62 +msgid "N/A" +msgstr "ND" + +#: front/src/components/library/Track.vue:70 +msgid "Size" +msgstr "Taille" + +#: front/src/components/library/Track.vue:81 +msgid "Bitrate" +msgstr "Bitrate" + +#: front/src/components/library/Home.vue:10 +msgid "Latest artists" +msgstr "Derniers artistes" + +#: front/src/components/library/Home.vue:27 +msgid "Music requests" +msgstr "Requête musicale" + +#: front/src/components/requests/Card.vue:26 +#: front/src/components/manage/library/RequestsTable.vue:89 +msgid "Create import" +msgstr "Créer un import" + +#: front/src/components/requests/Form.vue:4 +msgid "Something's missing in the library? Let us know what you would like to listen!" +msgstr "" +"Quelque chose manque dans la bibliothèque ? Dîtes nous ce que vous voulez " +"écouter !" + +#: front/src/components/requests/Form.vue:11 +msgid "Leave this field empty if you're requesting the whole discography." +msgstr "Laisser ce champ vide si vous voulez suggérer toute la discographie." + +#: front/src/components/requests/Form.vue:15 +#: front/src/components/manage/library/RequestsTable.vue:52 +msgid "Comment" +msgstr "Commentaire" + +#: front/src/components/requests/Form.vue:22 +msgid "We've received your request, you'll get some groove soon ;)" +msgstr "" +"Nous avons bien reçu votre requête, vous aurez bientôt de nos nouvelles ;)" + +#: front/src/components/requests/Form.vue:27 +msgid "Pending requests" +msgstr "Requêtes en attente" + +#: front/src/components/federation/LibraryFollowTable.vue:12 +msgid "Pending approval" +msgstr "En attente de validation" + +#: front/src/components/federation/LibraryFollowTable.vue:22 +msgid "Actor" +msgstr "Acteur·rice" + +#: front/src/components/federation/LibraryFollowTable.vue:39 +msgid "Approved" +msgstr "Approuvé" + +#: front/src/components/federation/LibraryFollowTable.vue:43 +msgid "Refused" +msgstr "Refusé" + +#: front/src/components/federation/LibraryFollowTable.vue:64 +msgid "Deny" +msgstr "Refuser" + +#: front/src/components/federation/LibraryTrackTable.vue:14 +#: front/src/components/federation/LibraryTrackTable.vue:53 +msgid "Not imported" +msgstr "Non importé" + +#: front/src/components/federation/LibraryTrackTable.vue:36 +msgid "Published date" +msgstr "Date de sortie" + +#: front/src/components/federation/LibraryTrackTable.vue:51 +msgid "In library" +msgstr "Dans la bibliothèque" + +#: front/src/components/federation/LibraryForm.vue:4 +msgid "Federate with a new instance" +msgstr "Fédérer avec une nouvelle instance" + +#: front/src/components/federation/LibraryForm.vue:11 +msgid "Error while scanning library" +msgstr "Erreur lors du scan de la bibliothèque" + +#: front/src/components/federation/LibraryForm.vue:32 +msgid "Launch scan" +msgstr "Démarrer le scan" + +#: front/src/components/audio/album/Card.vue:44 +#: front/src/components/audio/artist/Card.vue:34 +msgid "Collapse" +msgstr "Réduire" + +#: front/src/components/audio/album/Card.vue:51 +msgid "Play all" +msgstr "Tout lire" + +#: front/src/components/audio/PlayButton.vue:14 +msgid "Add to queue" +msgstr "Ajouter à la queue" + +#: front/src/components/audio/PlayButton.vue:15 +msgid "Play next" +msgstr "Lire ensuite" + +#: front/src/components/audio/PlayButton.vue:16 +msgid "Play now" +msgstr "Lire maintenant" + +#: front/src/components/audio/PlayButton.vue:145 +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "%{ count } piste a été ajouté à votre queue" +msgstr[1] "%{ count } pistes ont été ajoutées à votre queue" + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/FilesTable.vue:38 +msgid "Title" +msgstr "Titre" + +#: front/src/components/audio/track/Table.vue:30 +msgid "There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks." +msgstr "" +"Il n'est pas possible pour le moment de télécharger un ensemble de pistes " +"sous forme d'archive. Cependant, vous pouvez utiliser un outil en ligne de " +"commande tel que cURL pour télécharger facilement une liste de pistes." + +#: front/src/components/audio/Search.vue:3 +msgid "Search for some music" +msgstr "Rechercher de la musique" + +#: front/src/components/PageNotFound.vue:8 +msgid "Page not found!" +msgstr "Page non trouvée !" + +#: front/src/components/PageNotFound.vue:11 +msgid "We're sorry, the page you asked for does not exist:" +msgstr "Désolés, la page demandée n’existe pas :" + +#: front/src/components/PageNotFound.vue:15 +msgid "Go to home page" +msgstr "Retourner à la page d'accueil" + +#: front/src/components/About.vue:16 +msgid "Unfortunately, owners of this instance did not yet take the time to complete this page." +msgstr "" +"Malheureusement, les gestionnaires de cette instance n'ont pas encore pris " +"le temps de compléter cette page." + +#: front/src/components/Sidebar.vue:21 +msgid "Queue" +msgstr "Queue" + +#: front/src/components/Sidebar.vue:23 +msgid "(empty)" +msgstr "(vide)" + +#: front/src/components/Sidebar.vue:43 +msgid "Logout" +msgstr "Déconnexion" + +#: front/src/components/Sidebar.vue:44 +msgid "Login" +msgstr "Connexion" + +#: front/src/components/Sidebar.vue:64 +msgid "Administration" +msgstr "Administration" + +#: front/src/components/Sidebar.vue:124 +msgid "Yes" +msgstr "Oui" + +#: front/src/components/Sidebar.vue:158 +msgid "New tracks will be appended here automatically." +msgstr "Les nouvelles pistes seront ajoutées ici automatiquement." + +#: front/src/components/manage/library/FilesTable.vue:42 +msgid "Type" +msgstr "Type" + +#: front/src/components/manage/library/RequestsTable.vue:30 +#: front/src/components/manage/library/RequestsTable.vue:62 +msgid "Imported" +msgstr "Importé" + +#: front/src/components/manage/library/RequestsTable.vue:48 +msgid "User" +msgstr "Utilisateur·rice" + +#: front/src/components/manage/library/RequestsTable.vue:54 +msgid "Import date" +msgstr "Date d'import" + +#: front/src/components/manage/users/InvitationForm.vue:5 +msgid "Error while creating invitation" +msgstr "Erreur lors de la création de l'invitation" + +#: front/src/components/manage/users/InvitationForm.vue:12 +msgid "Invitation code" +msgstr "Code d'invitation" + +#: front/src/components/manage/users/InvitationForm.vue:27 +#: front/src/components/manage/users/InvitationsTable.vue:43 +msgid "Code" +msgstr "Code" + +#: front/src/components/manage/users/InvitationForm.vue:38 +msgid "Clear" +msgstr "Effacer" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgid "All" +msgstr "Tout" + +#: front/src/components/manage/users/InvitationsTable.vue:22 +msgid "Expired/used" +msgstr "Expirée/utilisée" + +#: front/src/components/manage/users/InvitationsTable.vue:39 +msgid "Owner" +msgstr "Propriétaire" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +msgid "Creation date" +msgstr "Date de création" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgid "Used" +msgstr "Utilisé" + +#: front/src/components/manage/users/InvitationsTable.vue:52 +msgid "Not used" +msgstr "Pas utilisé" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgid "Account status" +msgstr "Statut du compte" + +#: front/src/components/manage/users/UsersTable.vue:42 +msgid "Last activity" +msgstr "Dernière activité" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgid "Active" +msgstr "Actif" + +#: front/src/components/common/ActionTable.vue:22 +msgid "Go" +msgstr "Aller" + +#: front/src/components/common/ActionTable.vue:40 +msgid "Launch" +msgstr "Démarrer" + +#: front/src/components/Home.vue:6 +msgid "Welcome on Funkwhale" +msgstr "Bienvenue sur Funkwhale" + +#: front/src/components/Home.vue:14 +msgid "Get me to the library" +msgstr "Amenez moi à la bibliothèque" + +#: front/src/components/Home.vue:25 +msgid "Why funkwhale?" +msgstr "Pourquoi Funkwhale ?" + +#: front/src/components/Home.vue:40 +msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists." +msgstr "" +"Funkwhale est conçu pour faciliter l'écoute des musiques que vous aimez et " +"découvrir de nouveaux artistes." + +#: front/src/components/Home.vue:45 +msgid "Click once, listen for hours using built-in radios" +msgstr "" +"Écoutez de la musique pendant des heures, en un clic, grâce aux radios " +"intégrées." + +#: front/src/components/Home.vue:57 +msgid "Playlists? We got them" +msgstr "Les playlists ? Elles sont là !" + +#: front/src/components/Home.vue:67 +msgid "Funkwhale takes care of handling your music" +msgstr "Funkwhale prend soin de votre musique" + +#: front/src/components/Home.vue:72 +msgid "Import music from various platforms, such as YouTube or SoundCloud" +msgstr "" +"Importez de la musique de différentes plate-formes, comme YouTube ou " +"Soundcloud" + +#: front/src/components/Home.vue:89 +msgid "Covers, lyrics, our goal is to have them all ;)" +msgstr "Pochettes d'albums, paroles, notre but est de tout implémenter ;)" + +#: front/src/components/Home.vue:99 +msgid "Funkwhale is dead simple to use." +msgstr "Funkwhale est très simple à utiliser." + +#: front/src/components/Home.vue:104 +msgid "No add-ons, no plugins : you only need a web library" +msgstr "" + +#: front/src/components/Home.vue:118 +msgid "Your music, your way" +msgstr "Votre musique, à votre façon" + +#: front/src/components/Home.vue:131 +msgid "We do not track you or bother you with ads" +msgstr "Nous ne vous pistons pas et ne vous exposons pas à des publicités" + +#: front/src/views/instance/Timeline.vue:5 +msgid "Loading timeline..." +msgstr "Chargement de la timeline ..." + +#: front/src/views/instance/Timeline.vue:8 +msgid "Recent activity on this instance" +msgstr "Activité récente sur cette instance" + +#: front/src/views/playlists/Detail.vue:30 +msgid "Edit..." +msgstr "Éditer..." + +#: front/src/views/playlists/Detail.vue:38 +msgid "Delete playlist" +msgstr "Supprimer la playlist" + +#: front/src/views/playlists/List.vue:4 +msgid "Browsing playlists" +msgstr "Parcourir les playlists" + +#: front/src/views/playlists/List.vue:9 +msgid "Manage your playlists" +msgstr "Gérer vos playlists" + +#: front/src/views/playlists/List.vue:29 +msgid "Descending" +msgstr "Descendant" + +#: front/src/views/auth/PasswordReset.vue:5 +msgid "Reset your password" +msgstr "Réinitialiser votre mot de passe" + +#: front/src/views/auth/PasswordReset.vue:15 +msgid "Account's email" +msgstr "Email du compte" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:19 +#: front/src/views/auth/EmailConfirm.vue:18 +msgid "Back to login" +msgstr "Retour à la page de connexion" + +#: front/src/views/auth/PasswordResetConfirm.vue:5 +msgid "Change your password" +msgstr "Changer votre mot de passe" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgid "Password updated successfully" +msgstr "Mot de passe modifié avec succès" + +#: front/src/views/auth/PasswordResetConfirm.vue:32 +msgid "Proceed to login" +msgstr "Poursuivre vers la page de connexion" + +#: front/src/views/auth/EmailConfirm.vue:5 +msgid "Confirm your email" +msgstr "Confirmer votre email" + +#: front/src/views/auth/EmailConfirm.vue:25 +msgid "Your email address was confirmed, you can now use the service without limitations." +msgstr "" +"Votre adresse email a été confirmée, vous pouvez maintenant utiliser le " +"service sans limitations." + +#: front/src/views/admin/library/RequestsList.vue:4 +msgid "Import requests" +msgstr "Requêtes d'import" + +#: front/src/views/admin/library/FilesList.vue:4 +msgid "Library files" +msgstr "Fichiers de la bibliothèque" + +#: front/src/views/admin/library/Base.vue:6 +msgid "Files" +msgstr "Fichiers" + +#: front/src/views/admin/users/UsersDetail.vue:30 +msgid "Email address" +msgstr "Adresse email" + +#: front/src/views/admin/users/UsersDetail.vue:55 +msgid "Account active" +msgstr "Compte actif" + +#: front/src/views/admin/users/UsersDetail.vue:85 +msgid "Refresh" +msgstr "Rafraîchir" + +#: front/src/views/admin/users/InvitationsList.vue:4 +msgid "Invitations" +msgstr "Invitations" + +#: front/src/views/federation/LibraryFollowersList.vue:4 +msgid "Browsing followers" +msgstr "Parcourir les abonnés" + +#: front/src/views/federation/LibraryTrackList.vue:4 +msgid "Browsing federated tracks" +msgstr "Parcourir les pistes fédérées" + +#: front/src/views/federation/LibraryList.vue:4 +msgid "Browsing libraries" +msgstr "Parcourir les bibliothèques" + +#: front/src/views/federation/LibraryList.vue:9 +msgid "Add a new library" +msgstr "Ajouter une nouvelle bibliothèque" + +#: front/src/views/federation/LibraryDetail.vue:57 +msgid "Auto importing" +msgstr "Import automatique" + +#: front/src/views/federation/LibraryDetail.vue:85 +msgid "Library size" +msgstr "Taille de la bibliothèque" + +#: front/src/views/federation/Base.vue:6 +msgid "Libraries" +msgstr "Bibliothèques" + +#: front/src/views/federation/Base.vue:14 +msgid "Followers" +msgstr "Abonnés" diff --git a/front/package.json b/front/package.json index 3dec9c257..9837479ba 100644 --- a/front/package.json +++ b/front/package.json @@ -5,11 +5,11 @@ "author": "Eliot Berriot ", "private": true, "scripts": { - "dev": "node build/dev-server.js", - "start": "node build/dev-server.js", + "dev": "scripts/i18n-compile.sh && node build/dev-server.js", + "start": "scripts/i18n-compile.sh && node build/dev-server.js", "build": "node build/build.js", - "i18n-extract": "find src/ -name '*.vue' | xargs vendor/vue-i18n-xgettext/index.js > ../po/en.po", - "i18n-compile": "node build/i18n.js", + "i18n-extract": "scripts/i18n-extract.sh", + "i18n-compile": "scripts/i18n-compile.sh", "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", "unit-watch": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js", "e2e": "node test/e2e/runner.js", @@ -21,9 +21,6 @@ "axios": "^0.17.1", "dateformat": "^2.0.0", "django-channels": "^1.1.6", - "i18next": "^11.1.1", - "i18next-conv": "^6.0.0", - "i18next-fetch-backend": "^0.1.0", "js-logger": "^1.3.0", "jwt-decode": "^2.2.0", "lodash": "^4.17.4", @@ -34,6 +31,7 @@ "semantic-ui-css": "^2.2.10", "showdown": "^1.8.6", "vue": "^2.5.16", + "vue-gettext": "^2.0.31", "vue-lazyload": "^1.1.4", "vue-masonry": "^0.10.16", "vue-router": "^2.3.1", @@ -61,6 +59,7 @@ "cross-env": "^4.0.0", "cross-spawn": "^5.0.1", "css-loader": "^0.28.0", + "easygettext": "^2.5.0", "es6-promise": "^4.2.2", "eslint": "^3.19.0", "eslint-config-standard": "^6.2.1", @@ -104,7 +103,6 @@ "sinon-chai": "^2.8.0", "sinon-stub-promise": "^4.0.0", "url-loader": "^0.5.8", - "vue-i18n-xgettext": "^0.0.4", "vue-loader": "^12.1.0", "vue-style-loader": "^3.0.1", "vue-template-compiler": "^2.3.3", diff --git a/front/scripts/i18n-compile.sh b/front/scripts/i18n-compile.sh new file mode 100755 index 000000000..211f8ee8c --- /dev/null +++ b/front/scripts/i18n-compile.sh @@ -0,0 +1,3 @@ +#!/bin/bash -eux +locales=$(tail -n +2 src/locales.js | sed -e 's/export default //' | jq '.locales[].code' | xargs echo) +find locales -name '*.po' | xargs $(yarn bin gettext-extract)/gettext-compile --output src/translations.json diff --git a/front/scripts/i18n-extract.sh b/front/scripts/i18n-extract.sh new file mode 100755 index 000000000..d4fea4b62 --- /dev/null +++ b/front/scripts/i18n-extract.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eux +locales=$(tail -n +2 src/locales.js | sed -e 's/export default //' | jq '.locales[].code' | xargs echo) +locales_dir="locales" +sources=$(find src -name '*.vue' -o -name '*.html' 2> /dev/null) +js_sources=$(find src -name '*.vue' -o -name '*.js') +touch $locales_dir/app.pot + +# Create a main .pot template, then generate .po files for each available language. +# Extract gettext strings from templates files and create a POT dictionary template. +$(yarn bin gettext-extract)/gettext-extract --attribute v-translate --quiet --output $locales_dir/app.pot $sources +xgettext --language=JavaScript --keyword=npgettext:1c,2,3 \ + --from-code=utf-8 --join-existing --no-wrap \ + --package-name=$(node -e "console.log(require('./package.json').name);") \ + --package-version=$(node -e "console.log(require('./package.json').version);") \ + --output $locales_dir/app.pot $js_sources + +# Fix broken files path/lines in pot +sed -e 's|#: src/|#: front/src/|' -i $locales_dir/app.pot + +# Generate .po files for each available language. +echo $locales +for lang in $locales; do \ + po_file=$locales_dir/$lang/LC_MESSAGES/app.po; \ + echo "msgmerge --update $po_file "; \ + mkdir -p $(dirname $po_file); \ + [ -f $po_file ] && msgmerge --lang=$lang --update $po_file $locales_dir/app.pot || msginit --no-translator --locale=$lang --input=$locales_dir/app.pot --output-file=$po_file; \ + msgattrib --no-wrap --no-obsolete -o $po_file $po_file; \ +done; diff --git a/front/src/App.vue b/front/src/App.vue index 56dbe0aad..6efd3e582 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -2,14 +2,14 @@
-

{{ $t('Choose your instance') }}

+

{{ $gettext('Choose your instance') }}

-

{{ $t('You need to select an instance in order to continue') }}

+

{{ $gettext('You need to select an instance in order to continue') }}

- +
-

{{ $t('Suggested choices') }}

+

{{ $gettext('Suggested choices') }}