# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-03 22:14+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../../CONTRIBUTING.rst:2
msgid "Contribute to Funkwhale development"
msgstr ""

#: ../../../CONTRIBUTING.rst:4
msgid "First of all, thank you for your interest in the project! We really appreciate the fact that you're about to take some time to read this and hack on the project."
msgstr ""

#: ../../../CONTRIBUTING.rst:8
msgid "This document will guide you through common operations such as:"
msgstr ""

#: ../../../CONTRIBUTING.rst:10
#: ../../../CONTRIBUTING.rst:141
msgid "Setup your development environment"
msgstr ""

#: ../../../CONTRIBUTING.rst:11
msgid "Working on your first issue"
msgstr ""

#: ../../../CONTRIBUTING.rst:12
msgid "Writing unit tests to validate your work"
msgstr ""

#: ../../../CONTRIBUTING.rst:13
msgid "Submit your work"
msgstr ""

#: ../../../CONTRIBUTING.rst:16
msgid "The quickest way to contribute to the project is through Gitpod!"
msgstr ""

#: ../../../CONTRIBUTING.rst:None
msgid "Open in Gitpod"
msgstr ""

#: ../../../CONTRIBUTING.rst:22
msgid "When you click the button above, you will be redirected to the gitpod.io site. Here you can sign in with your Gitlab or GitHub account and a new workspace will be automatically created for you."
msgstr ""

#: ../../../CONTRIBUTING.rst:26
msgid "The workspace will checkout current ``development`` branch and run a Funkwhale instance with both frontend and backend started so you can jump straight into development."
msgstr ""

#: ../../../CONTRIBUTING.rst:29
msgid "The provided backend instance has a default admin user ``gitpod`` authenticated with password ``gitpod``."
msgstr ""

#: ../../../CONTRIBUTING.rst:32
msgid "In case you want to develop only frontend, you can go to ``File > Open Folder`` and navigate to ``/workspace/funkwhale/front``. This will start a new vite server on port 4000. This server integrates well with the extension provided by Gitpod but is disconnected from any instance by default."
msgstr ""

#: ../../../CONTRIBUTING.rst:37
msgid "Usage with Gitlab"
msgstr ""

#: ../../../CONTRIBUTING.rst:39
msgid "We understand that having to go to the contribution guide and clicking the ``Open in Gitpod`` is not an optimal way to create new branches or test existing ones. That's why we've enabled the Gitpod integration on our Gitlab server."
msgstr ""

#: ../../../CONTRIBUTING.rst:43
msgid "You can now simply choose to use Gitpod instead of Gitlab Web IDE on any of branch, commit or merge request:"
msgstr ""

#: ../../../CONTRIBUTING.rst:None
msgid "Select Gitpod as the default Web IDE."
msgstr ""

#: ../../../CONTRIBUTING.rst:49
msgid "Gitlab Workflow extension"
msgstr ""

#: ../../../CONTRIBUTING.rst:51
msgid "Gitpod offers a `Gitlab Workflow` extension that can help with managing Gitlab issues, merge requests and pipelines. To use it you need to create a personal access token with ``api`` and ``read_user`` scopes. You can create it by visiting `your Gitlab profile settings <https://dev.funkwhale.audio/-/profile/personal_access_tokens>`_."
msgstr ""

#: ../../../CONTRIBUTING.rst:55
msgid "Setting the token through the extension is not an optimal approach as you'd need to do this every single time you start a new workspace. However you can work around this by creating user environment variables in `your Gitpod settings <https://gitpod.io/variables>`_."
msgstr ""

#: ../../../CONTRIBUTING.rst:59
msgid "When you configure your environment variables as follows, you will be signed in to the extension automatically in old and new workspaces."
msgstr ""

#: ../../../CONTRIBUTING.rst:62
msgid "Environment variables"
msgstr ""

#: ../../../CONTRIBUTING.rst:65
#: ../../../CONTRIBUTING.rst:88
msgid "Name"
msgstr ""

#: ../../../CONTRIBUTING.rst:66
#: ../../../CONTRIBUTING.rst:89
msgid "Value"
msgstr ""

#: ../../../CONTRIBUTING.rst:67
#: ../../../CONTRIBUTING.rst:90
msgid "Scope"
msgstr ""

#: ../../../CONTRIBUTING.rst:68
msgid "``GITLAB_WORKFLOW_INSTANCE_URL``"
msgstr ""

#: ../../../CONTRIBUTING.rst:69
msgid "``https://dev.funkwhale.audio``"
msgstr ""

#: ../../../CONTRIBUTING.rst:70
#: ../../../CONTRIBUTING.rst:73
msgid "``funkwhale/*``"
msgstr ""

#: ../../../CONTRIBUTING.rst:71
msgid "``GITLAB_WORKFLOW_TOKEN``"
msgstr ""

#: ../../../CONTRIBUTING.rst:72
msgid "``TOKEN``"
msgstr ""

#: ../../../CONTRIBUTING.rst:75
msgid "The scope ``funkwhale/*`` will ensure that you will be signed into our instance on every project that we're hosting, not only Funkwhale itself."
msgstr ""

#: ../../../CONTRIBUTING.rst:79
msgid "Custom instance url"
msgstr ""

#: ../../../CONTRIBUTING.rst:81
msgid "If you want to preview changes on your own Funkwhale server, you can add your domain as an environment variable. This allows you to test your frontend changes against your domain without setting this value each time. To add your domain, set a user environment variable in `your Gitpod settings <https://gitpod.io/variables>`_."
msgstr ""

#: ../../../CONTRIBUTING.rst:85
msgid "Environment variable"
msgstr ""

#: ../../../CONTRIBUTING.rst:91
msgid "``VUE_APP_INSTANCE_URL``"
msgstr ""

#: ../../../CONTRIBUTING.rst:92
msgid "``https://funkwhale.example.com``"
msgstr ""

#: ../../../CONTRIBUTING.rst:93
msgid "``funkwhale/funkwhale``"
msgstr ""

#: ../../../CONTRIBUTING.rst:95
msgid "The scope ``funkwhale/funkwhale`` ensures that this variable only works on Funkwhale."
msgstr ""

#: ../../../CONTRIBUTING.rst:98
msgid "A quick path to contribute on the front-end"
msgstr ""

#: ../../../CONTRIBUTING.rst:100
msgid "The next sections of this document include a full installation guide to help you setup a local, development version of Funkwhale. If you only want to fix small things on the front-end, and don't want to manage a full development environment, there is another way."
msgstr ""

#: ../../../CONTRIBUTING.rst:104
msgid "As the front-end can work with any Funkwhale server, you can work with the front-end only, and make it talk with an existing instance (like the demo one, or you own instance, if you have one)."
msgstr ""

#: ../../../CONTRIBUTING.rst:107
msgid "If even that is too much for you, you can also make your changes without any development environment, and open a merge request. We will be able to review your work easily by spawning automatically a live version of your changes, thanks to Gitlab Review apps."
msgstr ""

#: ../../../CONTRIBUTING.rst:112
msgid "Setup front-end only development environment"
msgstr ""

#: ../../../CONTRIBUTING.rst:114
msgid "Clone the repository::"
msgstr ""

#: ../../../CONTRIBUTING.rst:120
msgid "Install `nodejs <https://nodejs.org/en/download/package-manager/>`_ and `yarn <https://yarnpkg.com/lang/en/docs/install/#debian-stable>`_"
msgstr ""

#: ../../../CONTRIBUTING.rst:122
msgid "Install the dependencies::"
msgstr ""

#: ../../../CONTRIBUTING.rst:126
msgid "Compile the translations::"
msgstr ""

#: ../../../CONTRIBUTING.rst:130
msgid "Launch the development server::"
msgstr ""

#: ../../../CONTRIBUTING.rst:135
msgid "Make the front-end talk with an existing server (like https://demo.funkwhale.audio or https://open.audio), by clicking on the corresponding link in the footer"
msgstr ""

#: ../../../CONTRIBUTING.rst:138
msgid "Start hacking!"
msgstr ""

#: ../../../CONTRIBUTING.rst:143
msgid "If you want to fix a bug or implement a feature, you'll need to run a local, development copy of funkwhale."
msgstr ""

#: ../../../CONTRIBUTING.rst:146
msgid "We provide a docker based development environment, which should be both easy to setup and work similarly regardless of your development machine setup."
msgstr ""

#: ../../../CONTRIBUTING.rst:150
msgid "Instructions for bare-metal setup will come in the future (Merge requests are welcome)."
msgstr ""

#: ../../../CONTRIBUTING.rst:154
msgid "Installing docker and docker-compose"
msgstr ""

#: ../../../CONTRIBUTING.rst:156
msgid "This is already cover in the relevant documentations:"
msgstr ""

#: ../../../CONTRIBUTING.rst:158
msgid "https://docs.docker.com/install/"
msgstr ""

#: ../../../CONTRIBUTING.rst:159
msgid "https://docs.docker.com/compose/install/"
msgstr ""

#: ../../../CONTRIBUTING.rst:163
msgid "If you are on Fedora, know that you can't use `podman` or `moby-engine` to set up the development environment. Stick to `docker-ce` and you'll be fine."
msgstr ""

#: ../../../CONTRIBUTING.rst:167
msgid "Cloning the project"
msgstr ""

#: ../../../CONTRIBUTING.rst:169
msgid "Visit https://dev.funkwhale.audio/funkwhale/funkwhale and clone the repository using SSH or HTTPS. Example using SSH::"
msgstr ""

#: ../../../CONTRIBUTING.rst:176
msgid "As of January 2020, the SSH fingerprints of our Gitlab server are the following::"
msgstr ""

#: ../../../CONTRIBUTING.rst:188
msgid "A note about branches"
msgstr ""

#: ../../../CONTRIBUTING.rst:190
msgid "Next release development occurs on the \"develop\" branch, and releases are made on the \"stable\" branch. Therefore, when submitting Merge Requests, ensure you are merging on the develop branch."
msgstr ""

#: ../../../CONTRIBUTING.rst:194
msgid "Working with docker"
msgstr ""

#: ../../../CONTRIBUTING.rst:196
msgid "In development, we use the docker-compose file named ``dev.yml``, and this is why all our docker-compose commands will look like this::"
msgstr ""

#: ../../../CONTRIBUTING.rst:200
msgid "If you do not want to add the ``-f dev.yml`` snippet every time, you can run this command before starting your work::"
msgstr ""

#: ../../../CONTRIBUTING.rst:206
msgid "Creating your env file"
msgstr ""

#: ../../../CONTRIBUTING.rst:208
msgid "We provide a working .env.dev configuration file that is suitable for development. However, to enable customization on your machine, you should also create a .env file that will hold your personal environment variables (those will not be commited to the project)."
msgstr ""

#: ../../../CONTRIBUTING.rst:213
msgid "Create it like this::"
msgstr ""

#: ../../../CONTRIBUTING.rst:217
msgid "These two environment variables must be included for the images to load in front-end and django admin pages::"
msgstr ""

#: ../../../CONTRIBUTING.rst:224
msgid "Create docker network"
msgstr ""

#: ../../../CONTRIBUTING.rst:226
msgid "Create the federation network::"
msgstr ""

#: ../../../CONTRIBUTING.rst:232
msgid "Building the containers"
msgstr ""

#: ../../../CONTRIBUTING.rst:234
msgid "On your initial clone, or if there have been some changes in the app dependencies, you will have to rebuild your containers. This is done via the following command::"
msgstr ""

#: ../../../CONTRIBUTING.rst:242
msgid "Database management"
msgstr ""

#: ../../../CONTRIBUTING.rst:244
msgid "To setup funkwhale's database schema, run this::"
msgstr ""

#: ../../../CONTRIBUTING.rst:248
msgid "This will create all the tables needed for the API to run properly. You will also need to run this whenever changes are made on the database schema."
msgstr ""

#: ../../../CONTRIBUTING.rst:252
msgid "It is safe to run this command multiple times, so you can run it whenever you fetch develop."
msgstr ""

#: ../../../CONTRIBUTING.rst:257
msgid "Development data"
msgstr ""

#: ../../../CONTRIBUTING.rst:259
msgid "You'll need at least an admin user and some artists/tracks/albums to work locally."
msgstr ""

#: ../../../CONTRIBUTING.rst:262
msgid "Create an admin user with the following command::"
msgstr ""

#: ../../../CONTRIBUTING.rst:266
msgid "Injecting fake data is done by running the following script::"
msgstr ""

#: ../../../CONTRIBUTING.rst:272
msgid "The previous command will create 25 artists with random albums, tracks and metadata."
msgstr ""

#: ../../../CONTRIBUTING.rst:277
msgid "Launch all services"
msgstr ""

#: ../../../CONTRIBUTING.rst:279
msgid "Before the first Funkwhale launch, it is required to run this::"
msgstr ""

#: ../../../CONTRIBUTING.rst:283
msgid "Then you can run everything with::"
msgstr ""

#: ../../../CONTRIBUTING.rst:287
msgid "This will launch all services, and output the logs in your current terminal window. If you prefer to launch them in the background instead, use the ``-d`` flag, and access the logs when you need it via ``docker-compose -f dev.yml logs --tail=50 --follow``."
msgstr ""

#: ../../../CONTRIBUTING.rst:290
msgid "Once everything is up, you can access the various funkwhale's components:"
msgstr ""

#: ../../../CONTRIBUTING.rst:292
msgid "The Vue webapp, on http://localhost:8000"
msgstr ""

#: ../../../CONTRIBUTING.rst:293
msgid "The API, on http://localhost:8000/api/v1/"
msgstr ""

#: ../../../CONTRIBUTING.rst:294
msgid "The django admin, on http://localhost:8000/api/admin/"
msgstr ""

#: ../../../CONTRIBUTING.rst:297
msgid "Stopping everything"
msgstr ""

#: ../../../CONTRIBUTING.rst:299
msgid "Once you're down with your work, you can stop running containers, if any, with::"
msgstr ""

#: ../../../CONTRIBUTING.rst:305
msgid "Removing everything"
msgstr ""

#: ../../../CONTRIBUTING.rst:307
msgid "If you want to wipe your development environment completely (e.g. if you want to start over from scratch), just run::"
msgstr ""

#: ../../../CONTRIBUTING.rst:311
msgid "This will wipe your containers and data, so please be careful before running it."
msgstr ""

#: ../../../CONTRIBUTING.rst:313
msgid "You can keep your data by removing the ``-v`` flag."
msgstr ""

#: ../../../CONTRIBUTING.rst:317
msgid "Working with federation locally"
msgstr ""

#: ../../../CONTRIBUTING.rst:319
msgid "This is not needed unless you need to work on federation-related features."
msgstr ""

#: ../../../CONTRIBUTING.rst:321
msgid "To achieve that, you'll need:"
msgstr ""

#: ../../../CONTRIBUTING.rst:323
msgid "to update your dns resolver to resolve all your .dev hostnames locally"
msgstr ""

#: ../../../CONTRIBUTING.rst:324
msgid "a reverse proxy (such as traefik) to catch those .dev requests and and with https certificate"
msgstr ""

#: ../../../CONTRIBUTING.rst:326
msgid "two instances (or more) running locally, following the regular dev setup"
msgstr ""

#: ../../../CONTRIBUTING.rst:329
msgid "Resolve .dev names locally"
msgstr ""

#: ../../../CONTRIBUTING.rst:331
msgid "If you use dnsmasq, this is as simple as doing::"
msgstr ""

#: ../../../CONTRIBUTING.rst:336
msgid "If you use NetworkManager with dnsmasq integration, use this instead::"
msgstr ""

#: ../../../CONTRIBUTING.rst:342
msgid "Add wildcard certificate to the trusted certificates"
msgstr ""

#: ../../../CONTRIBUTING.rst:344
msgid "Simply copy bundled certificates::"
msgstr ""

#: ../../../CONTRIBUTING.rst:349
msgid "This certificate is a wildcard for ``*.funkwhale.test``"
msgstr ""

#: ../../../CONTRIBUTING.rst:352
msgid "Run a reverse proxy for your instances"
msgstr ""

#: ../../../CONTRIBUTING.rst:356
msgid "Launch everything"
msgstr ""

#: ../../../CONTRIBUTING.rst:358
msgid "Launch the traefik proxy::"
msgstr ""

#: ../../../CONTRIBUTING.rst:362
msgid "Then, in separate terminals, you can setup as many different instances as you need::"
msgstr ""

#: ../../../CONTRIBUTING.rst:371
msgid "Note that by default, if you don't export the COMPOSE_PROJECT_NAME, we will default to node1 as the name of your instance."
msgstr ""

#: ../../../CONTRIBUTING.rst:374
msgid "Assuming your project name is ``node1``, your server will be reachable at ``https://node1.funkwhale.test/``. Not that you'll have to trust the SSL Certificate as it's self signed."
msgstr ""

#: ../../../CONTRIBUTING.rst:378
msgid "When working on federation with traefik, ensure you have this in your ``env``::"
msgstr ""

#: ../../../CONTRIBUTING.rst:391
msgid "Typical workflow for a contribution"
msgstr ""

#: ../../../CONTRIBUTING.rst:393
msgid "Fork the project if you did not already or if you do not have access to the main repository"
msgstr ""

#: ../../../CONTRIBUTING.rst:394
msgid "Checkout the development branch and pull most recent changes: ``git checkout develop && git pull``"
msgstr ""

#: ../../../CONTRIBUTING.rst:395
msgid "If working on an issue, assign yourself to the issue. Otherwise, consider open an issue before starting to work on something, especially for new features."
msgstr ""

#: ../../../CONTRIBUTING.rst:396
msgid "Create a dedicated branch for your work ``42-awesome-fix``. It is good practice to prefix your branch name with the ID of the issue you are solving."
msgstr ""

#: ../../../CONTRIBUTING.rst:397
msgid "Work on your stuff"
msgstr ""

#: ../../../CONTRIBUTING.rst:398
msgid "[Optional] Consider running ``yarn lint`` in ``front`` if you changed something there. Consider fixing some linting errors in the files you touched."
msgstr ""

#: ../../../CONTRIBUTING.rst:400
msgid "Commit small, atomic changes to make it easier to review your contribution"
msgstr ""

#: ../../../CONTRIBUTING.rst:401
msgid "Add a changelog fragment to summarize your changes: ``echo \"Implemented awesome stuff (#42)\" > changes/changelog.d/42.feature``"
msgstr ""

#: ../../../CONTRIBUTING.rst:402
msgid "Push your branch"
msgstr ""

#: ../../../CONTRIBUTING.rst:403
msgid "Create your merge request"
msgstr ""

#: ../../../CONTRIBUTING.rst:404
msgid "Take a step back and enjoy, we're really grateful you did all of this and took the time to contribute!"
msgstr ""

#: ../../../CONTRIBUTING.rst:407
msgid "Changelog management"
msgstr ""

#: ../../../CONTRIBUTING.rst:409
msgid "To ensure we have extensive and well-structured changelog, any significant work such as closing an issue must include a changelog fragment. Small changes may include a changelog fragment as well but this is not mandatory. If you're not sure about what to do, do not panic, open your merge request normally and we'll figure everything during the review ;)"
msgstr ""

#: ../../../CONTRIBUTING.rst:415
msgid "Changelog fragments are text files that can contain one or multiple lines that describe the changes occurring in a bunch of commits. Those files reside in ``changes/changelog.d``."
msgstr ""

#: ../../../CONTRIBUTING.rst:420
msgid "Content"
msgstr ""

#: ../../../CONTRIBUTING.rst:422
msgid "A typical fragment looks like that:"
msgstr ""

#: ../../../CONTRIBUTING.rst:424
msgid "Fixed broken audio player on Chrome 42 for ogg files (#567)"
msgstr ""

#: ../../../CONTRIBUTING.rst:426
msgid "If the work fixes one or more issues, the issue number should be included at the end of the fragment (``(#567)`` is the issue number in the previous example)."
msgstr ""

#: ../../../CONTRIBUTING.rst:429
msgid "If your work is not related to a specific issue, use the merge request identifier instead, like this:"
msgstr ""

#: ../../../CONTRIBUTING.rst:432
msgid "Fixed a typo in landing page copy (!342)"
msgstr ""

#: ../../../CONTRIBUTING.rst:435
msgid "Naming"
msgstr ""

#: ../../../CONTRIBUTING.rst:437
msgid "Fragment files should respect the following naming pattern: ``changes/changelog.d/<name>.<category>``. Name can be anything describing your work, or simply the identifier of the issue number you are fixing. Category can be one of:"
msgstr ""

#: ../../../CONTRIBUTING.rst:441
msgid "``feature``: for new features"
msgstr ""

#: ../../../CONTRIBUTING.rst:442
msgid "``enhancement``: for enhancements on existing features"
msgstr ""

#: ../../../CONTRIBUTING.rst:443
msgid "``bugfix``: for bugfixes"
msgstr ""

#: ../../../CONTRIBUTING.rst:444
msgid "``doc``: for documentation"
msgstr ""

#: ../../../CONTRIBUTING.rst:445
msgid "``i18n``: for internationalization-related work"
msgstr ""

#: ../../../CONTRIBUTING.rst:446
msgid "``misc``: for anything else"
msgstr ""

#: ../../../CONTRIBUTING.rst:449
msgid "Shortcuts"
msgstr ""

#: ../../../CONTRIBUTING.rst:451
msgid "Here is a shortcut you can use/adapt to easily create new fragments from command-line:"
msgstr ""

#: ../../../CONTRIBUTING.rst:460
msgid "You can of course create fragments by hand in your text editor, or from Gitlab's interface as well."
msgstr ""

#: ../../../CONTRIBUTING.rst:464
msgid "Internationalization"
msgstr ""

#: ../../../CONTRIBUTING.rst:466
msgid "We're using https://github.com/Polyconseil/vue-gettext to manage i18n in the project."
msgstr ""

#: ../../../CONTRIBUTING.rst:468
msgid "When working on the front-end, any end-user string should be marked as a translatable string, with the proper context, as described below."
msgstr ""

#: ../../../CONTRIBUTING.rst:472
msgid "Translations in HTML"
msgstr ""

#: ../../../CONTRIBUTING.rst:474
msgid "Translations in HTML use the ``<translate>`` tag::"
msgstr ""

#: ../../../CONTRIBUTING.rst:498
msgid "Anything between the `<translate>` and `</translate>` delimiters will be considered as a translatable string. You can use variables in the translated string via the ``:translate-params=\"{var: 'value'}\"`` directive, and reference them like this: ``val value is %{ value }``."
msgstr ""

#: ../../../CONTRIBUTING.rst:502
msgid "For pluralization, you need to use ``translate-params`` in conjunction with ``translate-plural`` and ``translate-n``:"
msgstr ""

#: ../../../CONTRIBUTING.rst:504
msgid "``translate-params`` should contain the variable you're using for pluralization (which is usually shown to the user)"
msgstr ""

#: ../../../CONTRIBUTING.rst:505
msgid "``translate-n`` should match the same variable"
msgstr ""

#: ../../../CONTRIBUTING.rst:506
msgid "The ``<translate>`` delimiters contain the non-pluralized version of your string"
msgstr ""

#: ../../../CONTRIBUTING.rst:507
msgid "The ``translate-plural`` directive contains the pluralized version of your string"
msgstr ""

#: ../../../CONTRIBUTING.rst:511
msgid "Translations in javascript"
msgstr ""

#: ../../../CONTRIBUTING.rst:513
msgid "Translations in javascript work by calling the ``this.$*gettext`` functions::"
msgstr ""

#: ../../../CONTRIBUTING.rst:528
msgid "The first argument of the ``$pgettext`` and ``$npgettext`` functions is the string context."
msgstr ""

#: ../../../CONTRIBUTING.rst:531
msgid "Contextualization"
msgstr ""

#: ../../../CONTRIBUTING.rst:533
msgid "Translation contexts provided via the ``translate-context`` directive and the ``$pgettext`` and ``$npgettext`` are never shown to end users but visible by Funkwhale translators. They help translators where and how the strings are used, especially with short or ambiguous strings, like ``May``, which can refer a month or a verb."
msgstr ""

#: ../../../CONTRIBUTING.rst:537
msgid "While we could in theory use free form context, like ``This string is inside a button, in the main page, and is a call to action``, Funkwhale use a hierarchical structure to write contexts and keep them short and consistents accross the app. The previous context, rewritten correctly would be: ``Content/Home/Button/Call to action``."
msgstr ""

#: ../../../CONTRIBUTING.rst:541
msgid "This hierarchical structure is made of several parts:"
msgstr ""

#: ../../../CONTRIBUTING.rst:550
msgid "The location part, which is required and refers to the big blocks found in Funkwhale UI where the translated string is displayed:"
msgstr ""

#: ../../../CONTRIBUTING.rst:544
msgid "``Content``"
msgstr ""

#: ../../../CONTRIBUTING.rst:545
msgid "``Footer``"
msgstr ""

#: ../../../CONTRIBUTING.rst:546
msgid "``Head``"
msgstr ""

#: ../../../CONTRIBUTING.rst:547
#: ../../../CONTRIBUTING.rst:591
msgid "``Menu``"
msgstr ""

#: ../../../CONTRIBUTING.rst:548
msgid "``Popup``"
msgstr ""

#: ../../../CONTRIBUTING.rst:549
msgid "``Sidebar``"
msgstr ""

#: ../../../CONTRIBUTING.rst:550
msgid "``*`` for strings that are not tied to a specific location"
msgstr ""

#: ../../../CONTRIBUTING.rst:573
msgid "The feature part, which is required, and refers to the feature associated with the translated string:"
msgstr ""

#: ../../../CONTRIBUTING.rst:553
msgid "``About``"
msgstr ""

#: ../../../CONTRIBUTING.rst:554
msgid "``Admin``"
msgstr ""

#: ../../../CONTRIBUTING.rst:555
msgid "``Album``"
msgstr ""

#: ../../../CONTRIBUTING.rst:556
msgid "``Artist``"
msgstr ""

#: ../../../CONTRIBUTING.rst:557
msgid "``Embed``"
msgstr ""

#: ../../../CONTRIBUTING.rst:558
msgid "``Home``"
msgstr ""

#: ../../../CONTRIBUTING.rst:559
msgid "``Login``"
msgstr ""

#: ../../../CONTRIBUTING.rst:560
msgid "``Library``"
msgstr ""

#: ../../../CONTRIBUTING.rst:561
msgid "``Moderation``"
msgstr ""

#: ../../../CONTRIBUTING.rst:562
msgid "``Player``"
msgstr ""

#: ../../../CONTRIBUTING.rst:563
msgid "``Playlist``"
msgstr ""

#: ../../../CONTRIBUTING.rst:564
msgid "``Profile``"
msgstr ""

#: ../../../CONTRIBUTING.rst:565
msgid "``Favorites``"
msgstr ""

#: ../../../CONTRIBUTING.rst:566
msgid "``Notifications``"
msgstr ""

#: ../../../CONTRIBUTING.rst:567
msgid "``Radio``"
msgstr ""

#: ../../../CONTRIBUTING.rst:568
msgid "``Search``"
msgstr ""

#: ../../../CONTRIBUTING.rst:569
msgid "``Settings``"
msgstr ""

#: ../../../CONTRIBUTING.rst:570
msgid "``Signup``"
msgstr ""

#: ../../../CONTRIBUTING.rst:571
msgid "``Track``"
msgstr ""

#: ../../../CONTRIBUTING.rst:572
msgid "``Queue``"
msgstr ""

#: ../../../CONTRIBUTING.rst:573
msgid "``*`` for strings that are not tied to a specific feature"
msgstr ""

#: ../../../CONTRIBUTING.rst:599
msgid "The component part, which is required and refers to the type of element that contain the string:"
msgstr ""

#: ../../../CONTRIBUTING.rst:576
msgid "``Button``"
msgstr ""

#: ../../../CONTRIBUTING.rst:577
msgid "``Card``"
msgstr ""

#: ../../../CONTRIBUTING.rst:578
msgid "``Checkbox``"
msgstr ""

#: ../../../CONTRIBUTING.rst:579
msgid "``Dropdown``"
msgstr ""

#: ../../../CONTRIBUTING.rst:580
msgid "``Error message``"
msgstr ""

#: ../../../CONTRIBUTING.rst:581
msgid "``Form``"
msgstr ""

#: ../../../CONTRIBUTING.rst:582
msgid "``Header``"
msgstr ""

#: ../../../CONTRIBUTING.rst:583
msgid "``Help text``"
msgstr ""

#: ../../../CONTRIBUTING.rst:584
msgid "``Hidden text``"
msgstr ""

#: ../../../CONTRIBUTING.rst:585
msgid "``Icon``"
msgstr ""

#: ../../../CONTRIBUTING.rst:586
msgid "``Input``"
msgstr ""

#: ../../../CONTRIBUTING.rst:587
msgid "``Image``"
msgstr ""

#: ../../../CONTRIBUTING.rst:588
msgid "``Label``"
msgstr ""

#: ../../../CONTRIBUTING.rst:589
msgid "``Link``"
msgstr ""

#: ../../../CONTRIBUTING.rst:590
msgid "``List item``"
msgstr ""

#: ../../../CONTRIBUTING.rst:592
msgid "``Message``"
msgstr ""

#: ../../../CONTRIBUTING.rst:593
msgid "``Paragraph``"
msgstr ""

#: ../../../CONTRIBUTING.rst:594
msgid "``Placeholder``"
msgstr ""

#: ../../../CONTRIBUTING.rst:595
msgid "``Tab``"
msgstr ""

#: ../../../CONTRIBUTING.rst:596
msgid "``Table``"
msgstr ""

#: ../../../CONTRIBUTING.rst:597
msgid "``Title``"
msgstr ""

#: ../../../CONTRIBUTING.rst:598
msgid "``Tooltip``"
msgstr ""

#: ../../../CONTRIBUTING.rst:599
msgid "``*`` for strings that are not tied to a specific component"
msgstr ""

#: ../../../CONTRIBUTING.rst:607
msgid "The detail part, which is optional and refers to the contents of the string itself, such as:"
msgstr ""

#: ../../../CONTRIBUTING.rst:602
msgid "``Adjective``"
msgstr ""

#: ../../../CONTRIBUTING.rst:603
msgid "``Call to action``"
msgstr ""

#: ../../../CONTRIBUTING.rst:604
msgid "``Noun``"
msgstr ""

#: ../../../CONTRIBUTING.rst:605
msgid "``Short``"
msgstr ""

#: ../../../CONTRIBUTING.rst:606
msgid "``Unit``"
msgstr ""

#: ../../../CONTRIBUTING.rst:607
msgid "``Verb``"
msgstr ""

#: ../../../CONTRIBUTING.rst:609
msgid "Here are a few examples of valid context hierarchies:"
msgstr ""

#: ../../../CONTRIBUTING.rst:611
msgid "``Sidebar/Player/Button``"
msgstr ""

#: ../../../CONTRIBUTING.rst:612
msgid "``Content/Home/Button/Call to action``"
msgstr ""

#: ../../../CONTRIBUTING.rst:613
msgid "``Footer/*/Help text``"
msgstr ""

#: ../../../CONTRIBUTING.rst:614
msgid "``*/*/*/Verb, Short``"
msgstr ""

#: ../../../CONTRIBUTING.rst:615
msgid "``Popup/Playlist/Button``"
msgstr ""

#: ../../../CONTRIBUTING.rst:616
msgid "``Content/Admin/Table.Label/Short, Noun (Value is a date)``"
msgstr ""

#: ../../../CONTRIBUTING.rst:618
msgid "It's possible to nest multiple component parts to reach a higher level of detail. The component parts are then separated by a dot:"
msgstr ""

#: ../../../CONTRIBUTING.rst:620
msgid "``Sidebar/Queue/Tab.Title``"
msgstr ""

#: ../../../CONTRIBUTING.rst:621
msgid "``Content/*/Button.Title``"
msgstr ""

#: ../../../CONTRIBUTING.rst:622
msgid "``Content/*/Table.Header``"
msgstr ""

#: ../../../CONTRIBUTING.rst:623
msgid "``Footer/*/List item.Link``"
msgstr ""

#: ../../../CONTRIBUTING.rst:624
msgid "``Content/*/Form.Help text``"
msgstr ""

#: ../../../CONTRIBUTING.rst:627
msgid "Collecting translatable strings"
msgstr ""

#: ../../../CONTRIBUTING.rst:629
msgid "If you want to ensure your translatable strings are correctly marked for translation, you can try to extract them."
msgstr ""

#: ../../../CONTRIBUTING.rst:632
msgid "Extraction is done by calling ``yarn run i18n-extract``, which will pull all the strings from source files and put them in a PO files."
msgstr ""

#: ../../../CONTRIBUTING.rst:635
msgid "You can then inspect the PO files to ensure everything is fine (but don't commit them, it's not needed)."
msgstr ""

#: ../../../CONTRIBUTING.rst:638
msgid "Contributing to the API"
msgstr ""

#: ../../../CONTRIBUTING.rst:641
msgid "Project structure"
msgstr ""

#: ../../../CONTRIBUTING.rst:655
msgid "Unless trivial, API contributions must include unittests to ensure your fix or feature is working as expected and won't break in the future"
msgstr ""

#: ../../../CONTRIBUTING.rst:659
#: ../../../CONTRIBUTING.rst:817
msgid "Running tests"
msgstr ""

#: ../../../CONTRIBUTING.rst:661
msgid "To run the pytest test suite, use the following command::"
msgstr ""

#: ../../../CONTRIBUTING.rst:665
msgid "This is regular pytest, so you can use any arguments/options that pytest usually accept::"
msgstr ""

#: ../../../CONTRIBUTING.rst:675
msgid "Writing tests"
msgstr ""

#: ../../../CONTRIBUTING.rst:677
msgid "Although teaching you how to write unit tests is outside of the scope of this document, you'll find below a collection of tips, snippets and resources you can use if you want to learn on that subject."
msgstr ""

#: ../../../CONTRIBUTING.rst:681
msgid "Useful links:"
msgstr ""

#: ../../../CONTRIBUTING.rst:683
msgid "`A quick introduction to unit test writing with pytest <https://semaphoreci.com/community/tutorials/testing-python-applications-with-pytest>`_"
msgstr ""

#: ../../../CONTRIBUTING.rst:684
msgid "`A complete guide to Test-Driven Development (although not using Pytest) <https://www.obeythetestinggoat.com/>`_"
msgstr ""

#: ../../../CONTRIBUTING.rst:685
msgid "`pytest <https://docs.pytest.org/en/latest/>`_: documentation of our testing engine and runner"
msgstr ""

#: ../../../CONTRIBUTING.rst:686
msgid "`pytest-mock <https://pypi.org/project/pytest-mock/>`_: project page of our mocking engine"
msgstr ""

#: ../../../CONTRIBUTING.rst:687
msgid "`factory-boy <http://factoryboy.readthedocs.io/>`_: documentation of factory-boy, which we use to easily generate fake objects and data"
msgstr ""

#: ../../../CONTRIBUTING.rst:689
msgid "Recommendations:"
msgstr ""

#: ../../../CONTRIBUTING.rst:691
msgid "Test files must target a module and mimic ``funkwhale_api`` directory structure: if you're writing tests for ``funkwhale_api/myapp/views.py``, you should put thoses tests in ``tests/myapp/test_views.py``"
msgstr ""

#: ../../../CONTRIBUTING.rst:692
msgid "Tests should be small and test one thing. If you need to test multiple things, write multiple tests."
msgstr ""

#: ../../../CONTRIBUTING.rst:694
msgid "We provide a lot of utils and fixtures to make the process of writing tests as painless as possible. You'll find some usage examples below."
msgstr ""

#: ../../../CONTRIBUTING.rst:697
msgid "Use factories to create arbitrary objects:"
msgstr ""

#: ../../../CONTRIBUTING.rst:732
msgid "We offer factories for almost if not all models. Factories are located in a ``factories.py`` file inside each app."
msgstr ""

#: ../../../CONTRIBUTING.rst:735
msgid "Mocking: mocking is the process of faking some logic in our code. This is useful when testing components that depend on each other:"
msgstr ""

#: ../../../CONTRIBUTING.rst:790
msgid "Views: you can find some readable views tests in file: ``api/tests/users/test_views.py``"
msgstr ""

#: ../../../CONTRIBUTING.rst:794
msgid "A complete list of available-fixtures is available by running ``docker-compose -f dev.yml run --rm api pytest --fixtures``"
msgstr ""

#: ../../../CONTRIBUTING.rst:799
msgid "Contributing to the front-end"
msgstr ""

#: ../../../CONTRIBUTING.rst:802
msgid "Styles and themes"
msgstr ""

#: ../../../CONTRIBUTING.rst:804
msgid "Our UI framework is Fomantic UI (https://fomantic-ui.com/), and Funkwhale's custom styles are written in SCSS. All the styles are configured in ``front/src/styles/_main.scss``, including imporing of Fomantic UI styles and components."
msgstr ""

#: ../../../CONTRIBUTING.rst:807
msgid "We're applying several changes on top of the Fomantic CSS files, before they are imported:"
msgstr ""

#: ../../../CONTRIBUTING.rst:809
msgid "Many hardcoded color values are replaced by CSS vars: e.g ``color: orange`` is replaced by ``color: var(--vibrant-color)``. This makes theming way easier."
msgstr ""

#: ../../../CONTRIBUTING.rst:810
msgid "Unused components variations and icons are stripped from the source files, in order to reduce the final size of our CSS files"
msgstr ""

#: ../../../CONTRIBUTING.rst:812
msgid "This changes are applied automatically when running ``yarn install``, through a ``postinstall`` hook. Internally, ``front/scripts/fix-fomantic-css.py`` is called and handle both kind of modifications. Please refer to this script if you need to use new icons to the project, or restore some components variations that were stripped in order to use them."
msgstr ""

#: ../../../CONTRIBUTING.rst:819
msgid "To run the front-end test suite, use the following command::"
msgstr ""

#: ../../../CONTRIBUTING.rst:823
msgid "We also support a \"watch and test\" mode were we continually relaunch tests when changes are recorded on the file system::"
msgstr ""

#: ../../../CONTRIBUTING.rst:828
msgid "The latter is especially useful when you are debugging failing tests."
msgstr ""

#: ../../../CONTRIBUTING.rst:832
msgid "The front-end test suite coverage is still pretty low"
msgstr ""

#: ../../../CONTRIBUTING.rst:836
msgid "Making a release"
msgstr ""

#: ../../../CONTRIBUTING.rst:838
msgid "To make a new 3.4 release::"
msgstr ""

#: ../../../CONTRIBUTING.rst:877
msgid "Then, visit https://dev.funkwhale.audio/funkwhale/funkwhale/-/tags, copy-paste the changelog on the corresponding tag, and announce the good news ;)"
msgstr ""
