Units
Translation components API.
See the Weblate's Web API documentation for detailed description of the API.
GET /api/translations/documentation/developer-architecture/fr/units/?format=api
https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Project architecture" ], "previous_source": "", "target": [ "" ], "id_hash": 9058575281241197723, "content_hash": 9058575281241197723, "location": "../../developer_documentation/architecture.md:1", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 1, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 2, "source_unit": "https://translate.funkwhale.audio/api/units/372746/?format=api", "priority": 100, "id": 373113, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=fdb6863951840c9b", "url": "https://translate.funkwhale.audio/api/units/373113/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.337569Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale is made up of several components. Understanding these components and what they do is important when contributing to Funkwhale's codebase. In this article, we'll break down each part of Funkwhale's architecture to help you understand what each component does." ], "previous_source": "", "target": [ "" ], "id_hash": -4366815679088269388, "content_hash": -4366815679088269388, "location": "../../developer_documentation/architecture.md:3", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 2, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 40, "source_unit": "https://translate.funkwhale.audio/api/units/372748/?format=api", "priority": 100, "id": 373115, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=4365f446b85667b4", "url": "https://translate.funkwhale.audio/api/units/373115/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.338544Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Below is a diagram of Funkwhale's project setup." ], "previous_source": "", "target": [ "" ], "id_hash": -786957679890523460, "content_hash": -786957679890523460, "location": "../../developer_documentation/architecture.md:5", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 3, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 8, "source_unit": "https://translate.funkwhale.audio/api/units/372752/?format=api", "priority": 100, "id": 373117, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=75142a28dcdc1abc", "url": "https://translate.funkwhale.audio/api/units/373117/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.339460Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Select a link below to see information about each component." ], "previous_source": "", "target": [ "" ], "id_hash": -7792994935670003838, "content_hash": -7792994935670003838, "location": "../../developer_documentation/architecture.md:29", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 4, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 10, "source_unit": "https://translate.funkwhale.audio/api/units/372756/?format=api", "priority": 100, "id": 373119, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=13d9b86522f8a782", "url": "https://translate.funkwhale.audio/api/units/373119/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.340275Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Entrypoints" ], "previous_source": "", "target": [ "" ], "id_hash": -3083733017616802841, "content_hash": -3083733017616802841, "location": "../../developer_documentation/architecture.md:35", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 5, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 1, "source_unit": "https://translate.funkwhale.audio/api/units/372760/?format=api", "priority": 100, "id": 373120, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=55346128a6ce9be7", "url": "https://translate.funkwhale.audio/api/units/373120/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.341055Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Users can access Funkwhale using a variety of entrypoints. They can make use of a Funkwhale application, a Subsonic-compatible application, or by calling the API directly. Each entrypoint interacts with the Funkwhale backend in the same way." ], "previous_source": "", "target": [ "" ], "id_hash": 3956485180186554477, "content_hash": 3956485180186554477, "location": "../../developer_documentation/architecture.md:37", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 6, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 37, "source_unit": "https://translate.funkwhale.audio/api/units/372764/?format=api", "priority": 100, "id": 373122, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=b6e8424f1c1df06d", "url": "https://translate.funkwhale.audio/api/units/373122/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.341848Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale web app" ], "previous_source": "", "target": [ "" ], "id_hash": -6341551261603375256, "content_hash": -6341551261603375256, "location": "../../developer_documentation/architecture.md:39", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 7, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372769/?format=api", "priority": 100, "id": 373124, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=27fe48b9ff335768", "url": "https://translate.funkwhale.audio/api/units/373124/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.342732Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale web app is a {abbr}`SPA (Single Page Application)` written in [Vue.js](https://vuejs.org) and [Typescript](https://typescriptlang.org). This is the application most people associate with Funkwhale. Server admins usually run an instance of the web app alongside their Funkwhale {term}`pod`, but you can also connect a standalone web app to another pod." ], "previous_source": "", "target": [ "" ], "id_hash": -5239898872774402856, "content_hash": -5239898872774402856, "location": "../../developer_documentation/architecture.md:41", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 8, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 50, "source_unit": "https://translate.funkwhale.audio/api/units/372773/?format=api", "priority": 100, "id": 373126, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=374823bcc54fdcd8", "url": "https://translate.funkwhale.audio/api/units/373126/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.343607Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale web app interacts with the Funkwhale API to fetch and update data. Using a service worker, the web app caches important information for offline use." ], "previous_source": "", "target": [ "" ], "id_hash": 5615768252335002, "content_hash": 5615768252335002, "location": "../../developer_documentation/architecture.md:43", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 9, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 27, "source_unit": "https://translate.funkwhale.audio/api/units/372777/?format=api", "priority": 100, "id": 373128, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=8013f382efd2439a", "url": "https://translate.funkwhale.audio/api/units/373128/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.344453Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale for Android" ], "previous_source": "", "target": [ "" ], "id_hash": -34967440246001958, "content_hash": -34967440246001958, "location": "../../developer_documentation/architecture.md:45", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 10, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372779/?format=api", "priority": 100, "id": 373129, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=7f83c54c616eaeda", "url": "https://translate.funkwhale.audio/api/units/373129/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.345256Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale for Android is the Funkwhale collective's official Android app written in [Kotlin](https://kotlinlang.org/). It interacts with the Funkwhale API to fetch and update data and stores information for offline playback." ], "previous_source": "", "target": [ "" ], "id_hash": 7207162699831573027, "content_hash": 7207162699831573027, "location": "../../developer_documentation/architecture.md:47", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 11, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 30, "source_unit": "https://translate.funkwhale.audio/api/units/372782/?format=api", "priority": 100, "id": 373132, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=e404fc4a51e7fa23", "url": "https://translate.funkwhale.audio/api/units/373132/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.346044Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Subsonic app" ], "previous_source": "", "target": [ "" ], "id_hash": 3825452207477468939, "content_hash": 3825452207477468939, "location": "../../developer_documentation/architecture.md:49", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 12, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 2, "source_unit": "https://translate.funkwhale.audio/api/units/372784/?format=api", "priority": 100, "id": 373134, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=b516bc83bbedaf0b", "url": "https://translate.funkwhale.audio/api/units/373134/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.346898Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale supports a limited subset of the [Subsonic API](http://www.subsonic.org/pages/api.jsp) to support existing Subsonic apps. These apps can request data stored on a Funkwhale server by calling these endpoints." ], "previous_source": "", "target": [ "" ], "id_hash": -7619597894564116065, "content_hash": -7619597894564116065, "location": "../../developer_documentation/architecture.md:51", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 13, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 28, "source_unit": "https://translate.funkwhale.audio/api/units/372786/?format=api", "priority": 100, "id": 373136, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=1641c015d331099f", "url": "https://translate.funkwhale.audio/api/units/373136/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.347693Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Nginx/Apache reverse proxy" ], "previous_source": "", "target": [ "" ], "id_hash": 5715641236079520574, "content_hash": 5715641236079520574, "location": "../../developer_documentation/architecture.md:53", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 14, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372788/?format=api", "priority": 100, "id": 373138, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=cf52096be4182b3e", "url": "https://translate.funkwhale.audio/api/units/373138/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.348532Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The reverse proxy acts as a layer between a Funkwhale pod and the open internet. It enhances the pod's security and provides additional options to help increase performance." ], "previous_source": "", "target": [ "" ], "id_hash": -2300292846662773804, "content_hash": -2300292846662773804, "location": "../../developer_documentation/architecture.md:55", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 15, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 28, "source_unit": "https://translate.funkwhale.audio/api/units/372790/?format=api", "priority": 100, "id": 373139, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=6013b7d7eb4b13d4", "url": "https://translate.funkwhale.audio/api/units/373139/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.349341Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "When a user tries to communicate with a Funkwhale pod, the reverse proxy:" ], "previous_source": "", "target": [ "" ], "id_hash": -3941850313406551024, "content_hash": -3941850313406551024, "location": "../../developer_documentation/architecture.md:57", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 16, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 13, "source_unit": "https://translate.funkwhale.audio/api/units/372792/?format=api", "priority": 100, "id": 373141, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=494bbc0657a3ec10", "url": "https://translate.funkwhale.audio/api/units/373141/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.350170Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Handles the HTTP/HTTPS requests and proxies them to the Funkwhale API server" ], "previous_source": "", "target": [ "" ], "id_hash": -7885371614292459262, "content_hash": -7885371614292459262, "location": "../../developer_documentation/architecture.md:59", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 17, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 12, "source_unit": "https://translate.funkwhale.audio/api/units/372794/?format=api", "priority": 100, "id": 373144, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=1291884b98264102", "url": "https://translate.funkwhale.audio/api/units/373144/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.351073Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Serves requested static files, such as audio files and stylesheets" ], "previous_source": "", "target": [ "" ], "id_hash": -3711030035443864690, "content_hash": -3711030035443864690, "location": "../../developer_documentation/architecture.md:60", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 18, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 10, "source_unit": "https://translate.funkwhale.audio/api/units/372796/?format=api", "priority": 100, "id": 373145, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=4c7fc5d83a902b8e", "url": "https://translate.funkwhale.audio/api/units/373145/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.352057Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Backend" ], "previous_source": "", "target": [ "" ], "id_hash": -3629367083509855576, "content_hash": -3629367083509855576, "location": "../../developer_documentation/architecture.md:62", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 19, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 1, "source_unit": "https://translate.funkwhale.audio/api/units/372798/?format=api", "priority": 100, "id": 373147, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=4da1e5dde3e64aa8", "url": "https://translate.funkwhale.audio/api/units/373147/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.353021Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale backend is made up of a few components which are responsible for:" ], "previous_source": "", "target": [ "" ], "id_hash": 7095296660888690915, "content_hash": 7095296660888690915, "location": "../../developer_documentation/architecture.md:64", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 20, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 14, "source_unit": "https://translate.funkwhale.audio/api/units/372800/?format=api", "priority": 100, "id": 373152, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=e2778eb8784920e3", "url": "https://translate.funkwhale.audio/api/units/373152/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.354095Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Communicating with the user's entrypoint and actioning requests" ], "previous_source": "", "target": [ "" ], "id_hash": 8909966439284496774, "content_hash": 8909966439284496774, "location": "../../developer_documentation/architecture.md:66", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 21, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 8, "source_unit": "https://translate.funkwhale.audio/api/units/372802/?format=api", "priority": 100, "id": 373155, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=fba68f44fe345986", "url": "https://translate.funkwhale.audio/api/units/373155/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.355143Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Maintaining data consistency" ], "previous_source": "", "target": [ "" ], "id_hash": -3213835878152464801, "content_hash": -3213835878152464801, "location": "../../developer_documentation/architecture.md:67", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 22, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372804/?format=api", "priority": 100, "id": 373158, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=5366294be451165f", "url": "https://translate.funkwhale.audio/api/units/373158/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.356092Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Communicating with other Funkwhale pods (if federation is enabled)" ], "previous_source": "", "target": [ "" ], "id_hash": -8333181357862520526, "content_hash": -8333181357862520526, "location": "../../developer_documentation/architecture.md:68", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 23, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 9, "source_unit": "https://translate.funkwhale.audio/api/units/372807/?format=api", "priority": 100, "id": 373161, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=0c5a97b4c3b27932", "url": "https://translate.funkwhale.audio/api/units/373161/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.357063Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Django API server" ], "previous_source": "", "target": [ "" ], "id_hash": 1466814829890135649, "content_hash": 1466814829890135649, "location": "../../developer_documentation/architecture.md:70", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 24, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372809/?format=api", "priority": 100, "id": 373164, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=945b2c50f6e06661", "url": "https://translate.funkwhale.audio/api/units/373164/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.358024Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale API is a [REST API](https://developer.mozilla.org/en-US/docs/Glossary/REST) written in [Python](https://www.python.org/) using the [Django REST framework](https://www.django-rest-framework.org/). It is the central piece of the project and houses the application's logic." ], "previous_source": "", "target": [ "" ], "id_hash": 5584947622217829205, "content_hash": 5584947622217829205, "location": "../../developer_documentation/architecture.md:72", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 25, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 28, "source_unit": "https://translate.funkwhale.audio/api/units/372811/?format=api", "priority": 100, "id": 373166, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=cd81b845a774cb55", "url": "https://translate.funkwhale.audio/api/units/373166/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.359029Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale API is responsible for:" ], "previous_source": "", "target": [ "" ], "id_hash": 1570446272070562140, "content_hash": 1570446272070562140, "location": "../../developer_documentation/architecture.md:74", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 26, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 6, "source_unit": "https://translate.funkwhale.audio/api/units/372821/?format=api", "priority": 100, "id": 373168, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=95cb5890599a315c", "url": "https://translate.funkwhale.audio/api/units/373168/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.360036Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Fetching requested data from the cache/database and returning it to the requester in a meaningful way" ], "previous_source": "", "target": [ "" ], "id_hash": -7836351000383268093, "content_hash": -7836351000383268093, "location": "../../developer_documentation/architecture.md:76", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 27, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 16, "source_unit": "https://translate.funkwhale.audio/api/units/372825/?format=api", "priority": 100, "id": 373170, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=133fb048aee0db03", "url": "https://translate.funkwhale.audio/api/units/373170/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.360953Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Processing incoming data and writing it to the database in a meaningful way" ], "previous_source": "", "target": [ "" ], "id_hash": 8536989128305438304, "content_hash": 8536989128305438304, "location": "../../developer_documentation/architecture.md:77", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 28, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 13, "source_unit": "https://translate.funkwhale.audio/api/units/372827/?format=api", "priority": 100, "id": 373172, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=f6797a619c046e60", "url": "https://translate.funkwhale.audio/api/units/373172/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.361958Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Delegating long-running tasks to workers to reduce load" ], "previous_source": "", "target": [ "" ], "id_hash": 2562115255376384713, "content_hash": 2562115255376384713, "location": "../../developer_documentation/architecture.md:78", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 29, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 8, "source_unit": "https://translate.funkwhale.audio/api/units/372829/?format=api", "priority": 100, "id": 373175, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=a38e7640065192c9", "url": "https://translate.funkwhale.audio/api/units/373175/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.362823Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "PostgreSQL database" ], "previous_source": "", "target": [ "" ], "id_hash": 4299928399852199991, "content_hash": 4299928399852199991, "location": "../../developer_documentation/architecture.md:80", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 30, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 2, "source_unit": "https://translate.funkwhale.audio/api/units/372831/?format=api", "priority": 100, "id": 373177, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=bbac6a1900cde037", "url": "https://translate.funkwhale.audio/api/units/373177/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.363636Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale uses a [PostgreSQL database](https://www.postgresql.org/) to store data. All information that is served by and sent to the Funkwhale API is stored in this database." ], "previous_source": "", "target": [ "" ], "id_hash": -902085482501743383, "content_hash": -902085482501743383, "location": "../../developer_documentation/architecture.md:82", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 31, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 25, "source_unit": "https://translate.funkwhale.audio/api/units/372833/?format=api", "priority": 100, "id": 373179, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=737b26087a725ce9", "url": "https://translate.funkwhale.audio/api/units/373179/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.364818Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "The Funkwhale database makes heavy use of [indexes](https://www.postgresql.org/docs/current/indexes.html) for enhanced performance." ], "previous_source": "", "target": [ "" ], "id_hash": -4827488238868443162, "content_hash": -4827488238868443162, "location": "../../developer_documentation/architecture.md:84", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 32, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 11, "source_unit": "https://translate.funkwhale.audio/api/units/372835/?format=api", "priority": 100, "id": 373181, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=3d0151061cdecfe6", "url": "https://translate.funkwhale.audio/api/units/373181/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.365618Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Redis cache and message queue" ], "previous_source": "", "target": [ "" ], "id_hash": -5896297132677406536, "content_hash": -5896297132677406536, "location": "../../developer_documentation/architecture.md:86", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 33, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 5, "source_unit": "https://translate.funkwhale.audio/api/units/372837/?format=api", "priority": 100, "id": 373183, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=2e2c24ff6c9be0b8", "url": "https://translate.funkwhale.audio/api/units/373183/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.366424Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale uses [Redis](https://redis.io/) to cache information from the database and to store a queue of messages to send. We use this cache to avoid locking database resources and to speed up requests." ], "previous_source": "", "target": [ "" ], "id_hash": -7065883611738233641, "content_hash": -7065883611738233641, "location": "../../developer_documentation/architecture.md:88", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 34, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 32, "source_unit": "https://translate.funkwhale.audio/api/units/372839/?format=api", "priority": 100, "id": 373185, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=1df0f04ab216a4d7", "url": "https://translate.funkwhale.audio/api/units/373185/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.367301Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Celery worker" ], "previous_source": "", "target": [ "" ], "id_hash": 8671052587644678337, "content_hash": 8671052587644678337, "location": "../../developer_documentation/architecture.md:90", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 35, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 2, "source_unit": "https://translate.funkwhale.audio/api/units/372841/?format=api", "priority": 100, "id": 373188, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=f855c463234af0c1", "url": "https://translate.funkwhale.audio/api/units/373188/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.368128Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Funkwhale has to handle a lot of tasks that take longer than the average HTTP request/response cycle. To ensure these tasks complete and don't impact the API's performance, they are offloaded to a [Celery](https://docs.celeryq.dev/en/stable/userguide/workers.html) task worker. The worker then works through all the tasks in its queue while the API handles real-time responses." ], "previous_source": "", "target": [ "" ], "id_hash": -2354775990916530024, "content_hash": -2354775990916530024, "location": "../../developer_documentation/architecture.md:92", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 36, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 53, "source_unit": "https://translate.funkwhale.audio/api/units/372843/?format=api", "priority": 100, "id": 373190, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=5f5227b65fcd4098", "url": "https://translate.funkwhale.audio/api/units/373190/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.368913Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Some common tasks the Celery worker handles are:" ], "previous_source": "", "target": [ "" ], "id_hash": -6813416482567844659, "content_hash": -6813416482567844659, "location": "../../developer_documentation/architecture.md:94", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 37, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 8, "source_unit": "https://translate.funkwhale.audio/api/units/372847/?format=api", "priority": 100, "id": 373192, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=2171e1cee1c08ccd", "url": "https://translate.funkwhale.audio/api/units/373192/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.369797Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Importing uploaded music to the database" ], "previous_source": "", "target": [ "" ], "id_hash": 5606028419656629557, "content_hash": 5606028419656629557, "location": "../../developer_documentation/architecture.md:96", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 38, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 6, "source_unit": "https://translate.funkwhale.audio/api/units/372856/?format=api", "priority": 100, "id": 373195, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=cdcc9d254a60bd35", "url": "https://translate.funkwhale.audio/api/units/373195/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.370646Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Handling [ActivityPub](https://www.w3.org/TR/activitypub/) messages from other {term}`Fediverse` servers" ], "previous_source": "", "target": [ "" ], "id_hash": 9002622885099556934, "content_hash": 9002622885099556934, "location": "../../developer_documentation/architecture.md:97", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 39, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 7, "source_unit": "https://translate.funkwhale.audio/api/units/372858/?format=api", "priority": 100, "id": 373197, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=fcefbdd0e9295046", "url": "https://translate.funkwhale.audio/api/units/373197/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.371442Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Scanning new content on remote pods" ], "previous_source": "", "target": [ "" ], "id_hash": -2720962179469472400, "content_hash": -2720962179469472400, "location": "../../developer_documentation/architecture.md:98", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 40, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 6, "source_unit": "https://translate.funkwhale.audio/api/units/372860/?format=api", "priority": 100, "id": 373199, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=5a3d335065730d70", "url": "https://translate.funkwhale.audio/api/units/373199/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.372229Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Celery beat task scheduler" ], "previous_source": "", "target": [ "" ], "id_hash": -189417895420337106, "content_hash": -189417895420337106, "location": "../../developer_documentation/architecture.md:100", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 41, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 4, "source_unit": "https://translate.funkwhale.audio/api/units/372862/?format=api", "priority": 100, "id": 373200, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=7d5f0d6d7d5e642e", "url": "https://translate.funkwhale.audio/api/units/373200/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.373008Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "In addition to handling tasks from the API, the Celery worker also needs to handle some recurring tasks. To manage these, we implement a [Celery beat](https://docs.celeryq.dev/en/stable/reference/celery.apps.beat.html#celery.apps.beat.Beat) scheduler. The scheduler is responsible for triggering tasks on a schedule and adding messages to the [queue](#redis-cache-and-message-queue) so the worker can work through them." ], "previous_source": "", "target": [ "" ], "id_hash": -6577433357293560664, "content_hash": -6577433357293560664, "location": "../../developer_documentation/architecture.md:102", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 42, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 50, "source_unit": "https://translate.funkwhale.audio/api/units/372864/?format=api", "priority": 100, "id": 373202, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=24b84335d4b65ca8", "url": "https://translate.funkwhale.audio/api/units/373202/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.373796Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Some common recurring tasks are:" ], "previous_source": "", "target": [ "" ], "id_hash": 3859770201619268123, "content_hash": 3859770201619268123, "location": "../../developer_documentation/architecture.md:104", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 43, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 5, "source_unit": "https://translate.funkwhale.audio/api/units/372866/?format=api", "priority": 100, "id": 373204, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=b590a88c6627821b", "url": "https://translate.funkwhale.audio/api/units/373204/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.374663Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Clearing the cache" ], "previous_source": "", "target": [ "" ], "id_hash": -6872401245818784319, "content_hash": -6872401245818784319, "location": "../../developer_documentation/architecture.md:106", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 44, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372868/?format=api", "priority": 100, "id": 373205, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=20a0537a7d04f5c1", "url": "https://translate.funkwhale.audio/api/units/373205/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.375417Z" }, { "translation": "https://translate.funkwhale.audio/api/translations/documentation/developer-architecture/fr/?format=api", "source": [ "Refreshing content metadata" ], "previous_source": "", "target": [ "" ], "id_hash": -5223748200811071863, "content_hash": -5223748200811071863, "location": "../../developer_documentation/architecture.md:107", "context": "", "note": "", "flags": "", "labels": [], "state": 0, "fuzzy": false, "translated": false, "approved": false, "position": 45, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 3, "source_unit": "https://translate.funkwhale.audio/api/units/372869/?format=api", "priority": 100, "id": 373206, "web_url": "https://translate.funkwhale.audio/translate/documentation/developer-architecture/fr/?checksum=378184b01e91f689", "url": "https://translate.funkwhale.audio/api/units/373206/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2023-03-25T08:06:53.376146Z" } ] }{ "count": 45, "next": null, "previous": null, "results": [ { "translation": "