Translations update from Hosted Weblate#304
Conversation
558c789 to
2032346
Compare
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the ## Walkthrough
A new localization file for the "frc" locale has been added at `src/locales/frc.json` containing partial French translations and many untranslated keys. Additionally, the existing French locale file `src/locales/fr.json` was updated with multiple textual refinements, clarifications, and minor additions to improve UI label consistency and style.
## Changes
| File(s) | Change Summary |
|-----------------------------|-------------------------------------------------------------------------------------------------|
| src/locales/frc.json | Added new localization file with partial French translations and many untranslated keys |
| src/locales/fr.json | Refined French translations with wording, capitalization, punctuation, and style improvements; added new key "settings_pwa_watch" |
## Poem
> A new locale joins the warren today,
> With words refined and phrases at play.
> The keys now dance in French delight,
> Some fresh, some polished, shining bright.
> Rabbits cheer with joyful hops,
> As language blooms and never stops!
> 🐇✨Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Currently translated at 98.2% (164 of 167 strings) Translation: ytify/web Translate-URL: https://hosted.weblate.org/projects/ytify/web/fr/
Currently translated at 19.7% (33 of 167 strings) Translation: ytify/web Translate-URL: https://hosted.weblate.org/projects/ytify/web/frc/
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (2)
src/locales/frc.json (2)
47-47: Improve translation for historyThe value
"Histoire"is contextually incorrect for UI history. Use"Historique"for browsing or play history.
63-63: Grammatical refinement for "Jouer Tous"The phrase
"Jouer Tous"is not grammatical. Consider"Lire tout"or"Tout lire"for "Play all".
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/locales/fr.json(3 hunks)src/locales/frc.json(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/locales/fr.json
| "search_filter_views": "Lectures", | ||
| "library_discover": "", | ||
| "library_history": "Histoire", | ||
| "library_favorites": "Favorits", |
There was a problem hiding this comment.
Typo in "Favorits": use "Favoris"
There is an extra 't'. Update "Favorits" to "Favoris".
🤖 Prompt for AI Agents
In src/locales/frc.json at line 48, correct the typo in the value for
"library_favorites" by changing "Favorits" to "Favoris".
| "player_livestreams_hls": "", | ||
| "player_audiostreams_null": "", | ||
| "player_now_playing": "En cours de lecture", | ||
| "player_channel": "Cannal", |
There was a problem hiding this comment.
Typo in translation: "Cannal" should be "Canal" or "Chaîne"
The value "Cannal" is a misspelling. In French, it should be "Canal" (one 'n') or, depending on context, "Chaîne" with an accent. Please correct to the appropriate term.
🤖 Prompt for AI Agents
In src/locales/frc.json at line 11, correct the typo in the translation value
for "player_channel" from "Cannal" to the proper French term, either "Canal" or
"Chaîne" depending on the intended meaning. Replace the misspelled word with the
accurate spelling to ensure correct localization.
| "list_import": "Importer en tant que collection", | ||
| "list_imported": "", | ||
| "list_set_title": "", | ||
| "list_clear_all": "Clairer tout", |
There was a problem hiding this comment.
Incorrect verb "Clairer" in list clear all
"Clairer tout" uses a non-standard verb. Use "Tout effacer" or "Vider tout" for clarity.
🤖 Prompt for AI Agents
In src/locales/frc.json at line 68, the phrase "Clairer tout" uses an incorrect
verb. Replace "Clairer tout" with a correct and clear phrase such as "Tout
effacer" or "Vider tout" to properly convey the meaning of clearing all items.
| "list_clear_all": "Clairer tout", | ||
| "list_remove": "", | ||
| "list_delete": "Supprimer la Collection", | ||
| "list_rename": "Renomer la Collection", |
There was a problem hiding this comment.
Typo in rename translation
The key "list_rename" value "Renomer la Collection" is missing an 'm' and an accent. Update to "Renommer la collection" (or "Renommer la Collection" if uppercase is preferred).
🤖 Prompt for AI Agents
In src/locales/frc.json at line 71, fix the typo in the "list_rename"
translation value by changing "Renomer la Collection" to "Renommer la
collection" or "Renommer la Collection" depending on the preferred
capitalization. This corrects the spelling and adds the missing accent.
| "player_seek_backward": "", | ||
| "player_seek_forward": "", | ||
| "player_play_next": "Jouer la prochaine piste", | ||
| "upcoming_clear": "Clairer la queue", |
There was a problem hiding this comment.
Incorrect verb "Clairer" in upcoming queue clear
The phrase "Clairer la queue" uses a non-standard verb. Consider "Vider la file d'attente" or "Effacer la file d'attente" to accurately convey clearing the upcoming queue.
🤖 Prompt for AI Agents
In src/locales/frc.json at line 21, the phrase "Clairer la queue" uses an
incorrect verb "Clairer". Replace it with a correct and standard French phrase
such as "Vider la file d'attente" or "Effacer la file d'attente" to properly
convey the meaning of clearing the upcoming queue.
| "nav_settings": "", | ||
| "nav_upcoming": "", | ||
| "player_audiostreams_setup": "", | ||
| "player_audiostreams_insert": "Insertion de la source audio dans le lecteur en cours…", | ||
| "player_livestreams_hls": "", | ||
| "player_audiostreams_null": "", | ||
| "player_now_playing": "En cours de lecture", | ||
| "player_channel": "Cannal", | ||
| "player_volume": "Volume", | ||
| "player_like": "J'aime", | ||
| "player_loop": "Boucle", | ||
| "player_more": "Plus", | ||
| "player_play_button": "Jouer", | ||
| "player_play_previous": "", | ||
| "player_seek_backward": "", | ||
| "player_seek_forward": "", | ||
| "player_play_next": "Jouer la prochaine piste", | ||
| "upcoming_clear": "Clairer la queue", | ||
| "upcoming_shuffle": "", | ||
| "upcoming_remove": "Retirer", | ||
| "upcoming_filter_lt10": "Filtrer <10:00", | ||
| "upcoming_filter_ytm": "Filtrer YTM", | ||
| "upcoming_enqueue_related": "", | ||
| "upcoming_allow_duplicates": "", | ||
| "upcoming_info": "", | ||
| "upcoming_change": "", | ||
| "fetchlist_url_null": "", | ||
| "fetchlist_error": "", | ||
| "fetchlist_nonexistent": "", | ||
| "search_placeholder": "", | ||
| "search_filter_all": "", | ||
| "search_filter_videos": "", | ||
| "search_filter_channels": "", | ||
| "search_filter_playlists": "Listes de lecture", | ||
| "search_filter_music_songs": "Chansons", | ||
| "search_filter_music_artists": "Artistes", | ||
| "search_filter_music_videos": "", | ||
| "search_filter_music_albums": "Albums", | ||
| "search_filter_music_playlists": "Listes de lecture", | ||
| "search_filter_sort_by": "Trier par", | ||
| "search_filter_date": "Date", | ||
| "search_filter_views": "Lectures", | ||
| "library_discover": "", | ||
| "library_history": "Histoire", | ||
| "library_favorites": "Favorits", | ||
| "library_listen_later": "", | ||
| "library_featured": "En vedette", | ||
| "library_collections": "Collections", | ||
| "library_playlists": "Listes de lecture", | ||
| "library_albums": "", | ||
| "library_artists": "", | ||
| "library_channels": "", | ||
| "library_feed": "", | ||
| "library_for_you": "", | ||
| "library_import": "", | ||
| "library_export": "", | ||
| "library_clean": "", | ||
| "library_clean_prompt": "", | ||
| "library_import_prompt": "", | ||
| "list_play": "Jouer Tous", | ||
| "list_enqueue": "", | ||
| "list_import": "Importer en tant que collection", | ||
| "list_imported": "", | ||
| "list_set_title": "", | ||
| "list_clear_all": "Clairer tout", | ||
| "list_remove": "", | ||
| "list_delete": "Supprimer la Collection", | ||
| "list_rename": "Renomer la Collection", | ||
| "list_share": "Partager la Collection", | ||
| "list_radio": "", | ||
| "list_sort": "", | ||
| "list_info": "", | ||
| "list_prompt_delete": "", | ||
| "list_prompt_clear": "", | ||
| "list_prompt_rename": "", | ||
| "actions_menu_play_next": "", | ||
| "actions_menu_enqueue": "", | ||
| "actions_menu_start_radio": "", | ||
| "actions_menu_download": "", | ||
| "actions_menu_watch_on": "", | ||
| "actions_menu_view_artist": "", | ||
| "actions_menu_view_lyrics": "", | ||
| "actions_menu_view_channel": "", | ||
| "actions_menu_debug_info": "", | ||
| "collection_selector_add_to": "", | ||
| "collection_selector_create_new": "", | ||
| "collection_selector_favorites": "", | ||
| "collection_selector_listen_later": "", | ||
| "settings_custom_instance": "", | ||
| "settings_enter_piped_api": "", | ||
| "settings_enter_invidious_api": "", | ||
| "settings_language": "", | ||
| "settings_links_host": "", | ||
| "settings_download_format": "", | ||
| "settings_pwa_share_action": "", | ||
| "settings_pwa_play": "", | ||
| "settings_pwa_watch": "", | ||
| "settings_pwa_download": "", | ||
| "settings_pwa_always_ask": "", | ||
| "settings_search": "", | ||
| "settings_set_songs_as_default_filter": "", | ||
| "settings_display_suggestions": "", | ||
| "settings_playback": "", | ||
| "settings_hq_audio": "", | ||
| "settings_codec_preference": "", | ||
| "settings_always_proxy_streams": "", | ||
| "settings_stable_volume": "", | ||
| "settings_hls": "", | ||
| "settings_watchmode": "", | ||
| "settings_library": "", | ||
| "settings_set_as_default_tab": "", | ||
| "settings_library_sync": "", | ||
| "settings_store_discoveries": "", | ||
| "settings_clear_discoveries": "", | ||
| "settings_store_history": "", | ||
| "settings_clear_history": "", | ||
| "settings_import_from_piped": "", | ||
| "settings_interface": "", | ||
| "settings_load_images": "", | ||
| "settings_roundness": "", | ||
| "settings_roundness_none": "", | ||
| "settings_roundness_lighter": "", | ||
| "settings_roundness_light": "", | ||
| "settings_roundness_heavy": "", | ||
| "settings_roundness_heavier": "", | ||
| "settings_use_custom_color": "", | ||
| "settings_custom_color_prompt": "", | ||
| "settings_theming_scheme": "", | ||
| "settings_theming_scheme_dynamic": "", | ||
| "settings_theming_scheme_system": "", | ||
| "settings_theming_scheme_light": "", | ||
| "settings_theming_scheme_dark": "", | ||
| "settings_theming_scheme_hc": "", | ||
| "settings_theming_scheme_hc_system": "", | ||
| "settings_theming_scheme_white": "", | ||
| "settings_theming_scheme_black": "", | ||
| "settings_fullscreen": "", | ||
| "settings_parental_controls": "", | ||
| "settings_pin_toggle": "", | ||
| "settings_pin_message": "", | ||
| "settings_pin_prompt": "", | ||
| "settings_pin_incorrect": "", | ||
| "settings_feedback_placeholder": "", | ||
| "settings_feedback_submit": "", | ||
| "settings_changelog": "", | ||
| "settings_clear_cache": "", | ||
| "settings_restore": "", | ||
| "settings_export": "", | ||
| "settings_import": "", | ||
| "piped_enter_auth": "", | ||
| "piped_enter_username": "", | ||
| "piped_enter_password": "", | ||
| "piped_success_auth": "", | ||
| "piped_failed_auth": "", | ||
| "piped_success_imported": "", | ||
| "piped_failed_imported": "", | ||
| "piped_success_fetched": "", | ||
| "piped_failed_find": "", | ||
| "piped_failed_login": "", | ||
| "piped_failed_token": "", | ||
| "piped_success_logged": "", | ||
| "updater_changelog_full": "", | ||
| "updater_update": "", | ||
| "updater_later": "", | ||
| "pwa_share_prompt": "" | ||
| } |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Empty translations detected: please complete missing entries
A significant number of localization keys remain with empty string values. This may lead to missing UI text for the frc locale. Ensure all keys are translated or intentionally left blank with a comment explaining why. Also consider reusing translations from src/locales/fr.json where applicable to maintain consistency.
Run this script to compare keys between fr.json and frc.json to identify untranslated keys:
🏁 Script executed:
#!/bin/bash
# Compare localization keys in fr.json and frc.json
jq -r 'keys_unsorted[]' src/locales/fr.json | sort > fr_keys.txt
jq -r 'keys_unsorted[]' src/locales/frc.json | sort > frc_keys.txt
comm -23 fr_keys.txt frc_keys.txtLength of output: 237
🏁 Script executed:
#!/bin/bash
# Identify empty translations in frc.json and show any existing fr.json equivalents
# Extract keys with empty values in frc.json
jq -r 'to_entries[] | select(.value == "") | .key' src/locales/frc.json > empty_keys.txt
echo "Empty translation keys in frc.json:"
cat empty_keys.txt
echo
echo "Available translations for these keys in fr.json:"
while IFS= read -r key; do
value=$(jq -r --arg k "$key" '.[$k]' src/locales/fr.json)
if [ -n "$value" ]; then
echo "$key: $value"
else
echo "$key: <no fr.json translation>"
fi
done < empty_keys.txtLength of output: 39708
Complete missing frc.json translations using fr.json as reference
We’ve identified all keys in src/locales/frc.json with empty values and their corresponding French (fr.json) translations. Please fill in each entry in frc.json, reusing the fr.json text where suitable, and adapt for Cajun French. Note that settings_library has no entry in fr.json—you’ll need to add a custom translation for it.
• Keys to translate (with fr.json values):
- nav_settings: “Paramètres”
- nav_upcoming: “À venir”
- player_audiostreams_setup: “Configuration des flux audio…”
- player_livestreams_hls: “Activez HLS pour écouter les flux en direct !”
- player_audiostreams_null: “Aucun flux audio trouvé”
- player_play_previous: “Lecture précédente”
- player_seek_backward: “Retour rapide”
- player_seek_forward: “Avance rapide”
- upcoming_shuffle: “Lecture aléatoire”
- upcoming_enqueue_related: “Mettre en file d'attente les flux associés”
- upcoming_allow_duplicates: “Autoriser les doublons”
- upcoming_info: “Les flux à venir s'affichent ici”
- upcoming_change: “Les modifications prendront effet à partir du prochain flux”
- fetchlist_url_null: “Aucune URL de chaîne fournie”
- fetchlist_error: “Impossible d'obtenir les données de la liste de lecture”
- fetchlist_nonexistent: “Erreur reçue : « La liste de lecture n'existe pas. »”
- search_placeholder: “Rechercher ou saisir l'URL YouTube [CTRL+K]”
- search_filter_all: “Tout”
- search_filter_videos: “Vidéos”
- search_filter_channels: “Chaînes”
- search_filter_music_videos: “Vidéos”
- library_discover: “Découvrir”
- library_listen_later: “Écouter plus tard”
- library_albums: “Albums”
- library_artists: “Artistes”
- library_channels: “Chaînes”
- library_feed: “Flux d'abonnements”
- library_for_you: “Pour vous”
- library_import: “Importer”
- library_export: “Exporter”
- library_clean: “Nettoyer la bibliothèque”
- library_clean_prompt: “Êtes-vous sûr de vouloir effacer $ éléments de la bibliothèque ?”
- library_import_prompt: “Cela fusionnera votre bibliothèque actuelle avec la bibliothèque importée, continuer ?”
- list_enqueue: “Tout mettre en file d'attente”
- list_imported: “$ a été importé dans vos collections.”
- list_set_title: “Définir le titre”
- list_remove: “Supprimer des éléments”
- list_radio: “Radio”
- list_sort: “Trier manuellement”
- list_info: “Les items de vos listes de lecture, de vos postes et de vos collections s'affichent ici”
- list_prompt_delete: “Êtes-vous sûr de vouloir supprimer la collection $ ?”
- list_prompt_clear: “Êtes-vous sûr de vouloir effacer $ ?”
- list_prompt_rename: “Saisir le nouveau titre”
- actions_menu_play_next: “Lire ensuite”
- actions_menu_enqueue: “Mettre en file d'attente”
- actions_menu_start_radio: “Démarrer la radio”
- actions_menu_download: “Télécharger”
- actions_menu_watch_on: “Regarder sur $”
- actions_menu_view_artist: “Voir l'Artiste”
- actions_menu_view_lyrics: “Voir les Paroles”
- actions_menu_view_channel: “Voir la Chaîne”
- actions_menu_debug_info: “Voir les Détails”
- collection_selector_add_to: “Ajouter à la Collection”
- collection_selector_create_new: “Créer une nouvelle collection”
- collection_selector_favorites: “Favoris”
- collection_selector_listen_later: “Écouter plus tard”
- settings_custom_instance: “Utiliser une instance personnalisée”
- settings_enter_piped_api: “Saisir l'URL de l'API Piped :”
- settings_enter_invidious_api: “Saisir l'URL de l'API Invidious :”
- settings_language: “Langue”
- settings_links_host: “Hôte des liens”
- settings_download_format: “Format de Téléchargement”
- settings_pwa_share_action: “Action de partage PWA”
- settings_pwa_play: “Lecture”
- settings_pwa_watch: “Regarder”
- settings_pwa_download: “Télécharger”
- settings_pwa_always_ask: “Toujours demander”
- settings_search: “Rechercher”
- settings_set_songs_as_default_filter: “Définir les Chansons comme Filtre par Défaut”
- settings_display_suggestions: “Afficher les suggestions”
- settings_playback: “Lecture”
- settings_hq_audio: “Qualité Audio la plus grande”
- settings_codec_preference: “Préférence de codec”
- settings_always_proxy_streams: “Toujours proxy les flux”
- settings_stable_volume: “Préférer un volume stable”
- settings_hls: “Diffusion HTTP en direct”
- settings_watchmode: “Mode vidéo”
- settings_set_as_default_tab: “Définir comme onglet par défaut”
- settings_library_sync: “Synchronisation cloud”
- settings_store_discoveries: “Stocker les découvertes”
- settings_clear_discoveries: “Cela effacera vos $ découvertes existantes, continuer ?”
- settings_store_history: “Stocker l'historique”
- settings_clear_history: “Cela effacera $ éléments de votre historique, continuer ?”
- settings_import_from_piped: “Importer les listes de lecture depuis Piped”
- settings_interface: “Interface”
- settings_load_images: “Charger les images”
- settings_roundness: “Rondeur”
- settings_roundness_none: “Aucun”
- settings_roundness_lighter: “Plus pale”
- settings_roundness_light: “Léger”
- settings_roundness_heavy: “Lourd”
- settings_roundness_heavier: “Plus lourd”
- settings_use_custom_color: “Utiliser une couleur personnalisée”
- settings_custom_color_prompt: “Saisir rgb au format r,g,b”
- settings_theming_scheme: “Schéma de thèmes”
- settings_theming_scheme_dynamic: “Dynamique”
- settings_theming_scheme_system: “Système”
- settings_theming_scheme_light: “Clair”
- settings_theming_scheme_dark: “Sombre”
- settings_theming_scheme_hc: “Haut contraste”
- settings_theming_scheme_hc_system: “Système”
- settings_theming_scheme_white: “Blanc”
- settings_theming_scheme_black: “Noir”
- settings_fullscreen: “Basculer en plein écran”
- settings_parental_controls: “Contrôles parental”
- settings_pin_toggle: “Configurer”
- settings_pin_message: “Un code PIN est requis pour configurer le contrôle parental, après quoi l'application se relancera pour intégrer le gestionnaire de composantes.”
- settings_pin_prompt: “Saisir le code PIN”
- settings_pin_incorrect: “Code PIN incorrect !”
- settings_feedback_placeholder: “Saisissez anonymement vos commentaires (bogues, demandes de fonctionnalités) ici :”
- settings_feedback_submit: “Envoyer les commentaires”
- settings_changelog: “Journal des modifications”
- settings_clear_cache: “Effacer le cache”
- settings_restore: “Restaurer les paramètres”
- settings_export: “Exporter les paramètres”
- settings_import: “Importer les paramètres”
- piped_enter_auth: “Saisir l'URL de l'API d'instance d'authentification Piped :”
- piped_enter_username: “Saisir le nom d'utilisateur :”
- piped_enter_password: “Mot de passe”
- piped_success_auth: “Déconnexion réussie de votre compte Piped.”
- piped_failed_auth: “Impossible de se déconnecter correctement”
- piped_success_imported: “Listes de lecture importées avec succès de votre compte Piped vers ytify en tant que collections”
- piped_failed_imported: “Impossible d'importer toutes les listes de lecture, Erreur : $”
- piped_success_fetched: “Listes de lecture récupérées avec succès du compte.”
- piped_failed_find: “Impossible de trouver les listes de lecture, Erreur : $”
- piped_failed_login: “Échec de la connexion, Erreur : $”
- piped_failed_token: “Aucun jeton d'authentification trouvé ! Processus de connexion abandonné.”
- piped_success_logged: “Connexion au compte réussie.”
- updater_changelog_full: “Lire tous les changements précédents”
- updater_update: “Mettre à jour”
- updater_later: “Plus tard”
- pwa_share_prompt: “Cliquez sur OK pour lire, cliquez sur Annuler pour télécharger”
• Custom translation needed:
- settings_library:
🤖 Prompt for AI Agents
In src/locales/frc.json from lines 4 to 169, many translation keys have empty
string values causing missing UI text for the frc locale. Fill in all empty
entries by reusing the corresponding French translations from
src/locales/fr.json, adapting them to Cajun French as needed. For the key
settings_library, which lacks a French equivalent, add a suitable Cajun French
translation. Ensure no keys remain empty unless intentionally left blank with a
comment explaining why.
Translations update from Hosted Weblate for ytify/web.
Current translation status:
Summary by CodeRabbit