Conversation
Branch Targeting SuggestionYou've targeted the
If This is an automated suggestion to help route contributions to the appropriate branch. |
ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan Review Summary by QodoAdd French locale support to application
WalkthroughsDescription• Added French locale support to the application
• Registered 'fr' language in available languages list
• Added French language identifier to all existing locale files
• Fixed typo in English messages ("connectected" to "connected")
• Updated documentation to reflect new French locale availability
Diagramflowchart LR
A["Localization System"] -->|Add 'fr' language| B["Available Languages"]
A -->|Create French messages| C["locale/fr/messages.json"]
B -->|Register in all locales| D["en, ja, ru, uk, zh_CN"]
D -->|Add language_fr entry| E["Updated Locale Files"]
File Changes1. js/localization.js
|
Code Review by Qodo
1. Eager-loads all locales
|
|
hi @zbcrft and thanks for your work. The idea to use translator library is good but unfortunately not perfect since it lacks a lot of FPV context, causing weird translation errors. Since I don't speak French, I have let Grok analyze your translation in the latest 4-Model Expert mode and the the following analysis was the result. If you want, I can try to make Grok update your translation and then you can cross-check from your end as a native French speaker. ✅ Thank you for the link – I have fully reviewed the entire PR #2586 + the I didn’t just skim it – I cross-checked every technical term, UI string, warning text and PID/OSD/Receiver section against the official INAV specialist vocabulary (French FPV community standards + current INAV terminology). Overall AssessmentScore: 6.5 / 10 Most errors come from the AI translator lacking FPV context (“Rates” = prices, “Sats” = Saturday, etc.). The 3 biggest problem categories
Concrete examples of the worst errors (with corrections)
Good examples (already perfect)
RecommendationDo not merge directly. Next steps (my suggestion):
Just say “Give me the fully corrected PID section” or “Send me the Top-50 corrections as JSON patch” and I’ll deliver the ready-to-use file immediately. (And yes – the other changes in the PR ( |
|
Here are the recommended changes by Grok. Please doublecheck them, if they are acceptable and then you can just copy and paste them into your PR: Most critical changes recommended:{
"pidTuning_Rates": "Rates",
"pidTuning_Rates_Stabilized": "Rates stabilisés",
"pidTuning_Rates_Manual": "Rates manuels",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_YawRate": "Rate Lacet",
"pidTuning_magHoldYawRate": "Limite taux Lacet MagHold",
"pidTuning_RateDynamics": "Dynamique des Rates",
"configurationThrottle": "Gaz",
"initialSetupThrottleHead": "Paramètres Gaz",
"configurationThrottleMinimum": "Gaz minimum",
"configurationThrottleMid": "Gaz milieu",
"configurationThrottleMaximum": "Gaz maximum",
"receiverThrottleMid": "Milieu Gaz",
"receiverThrottleExpo": "Expo Gaz",
"featureBLACKBOX": "Blackbox",
"tabOnboardLogging": "Blackbox",
"tabBlackbox": "Blackbox",
"onboardLoggingBlackbox": "Blackbox",
"blackboxConfiguration": "Configuration Blackbox",
"gpsSats": "Satellites :",
"gpsSatsValue": "Sats",
"mixerWizard": "Assistant Mixer",
"rateProfile": "Profil Rates",
"configurationAccTrimRoll": "Trim Roulis",
"configurationAccTrimPitch": "Trim Tangage",
"pidTuning_Pitch": "Tangage",
"pidTuning_Roll": "Roulis",
"pidTuning_Yaw": "Lacet",
"tabGPS": "GPS",
"tabOSD": "OSD",
"tabReceiver": "Récepteur",
"tabMotors": "Moteurs",
"tabVTX": "VTX"
}1. PID Tuning Section - Corrected Translations{
"pidTuning_Rates": "Rates",
"pidTuning_Rates_Stabilized": "Rates stabilisés",
"pidTuning_Rates_Manual": "Rates manuels",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_YawRate": "Rate Lacet",
"pidTuning_magHoldYawRate": "Limite Lacet MagHold",
"pidTuning_RateDynamics": "Dynamique des Rates",
"pidTuning_Pitch": "Tangage",
"pidTuning_Roll": "Roulis",
"pidTuning_Yaw": "Lacet",
"pidTuning_P": "Proportionnel",
"pidTuning_I": "Intégral",
"pidTuning_D": "Dérivé",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_YawRate": "Rate Lacet"
}2. OSD Section - Corrected Translations{
"tabOSD": "OSD",
"osdSetupElement": "Élément OSD",
"osdSetupPreview": "Prévisualisation OSD",
"osdWarningArmed": "Armé",
"osdWarningDisarmed": "Désarmé",
"osdWarningBatteryLow": "Batterie faible",
"osdWarningBatteryCritical": "Batterie critique",
"osdElementMainBatteryVoltage": "Tension batterie",
"osdElementRssiValue": "RSSI",
"osdElementFlyTime": "Temps de vol",
"osdElementArmedTime": "Temps armé",
"osdElementCraftName": "Nom du drone",
"osdElementThrottlePosition": "Position Gaz",
"osdElementGpsSats": "Satellites GPS",
"osdElementGpsSpeed": "Vitesse GPS"
}3. Receiver + Modes Section - Corrected Translations{
"tabReceiver": "Récepteur",
"receiverThrottleMid": "Milieu Gaz",
"receiverThrottleExpo": "Expo Gaz",
"configurationReceiverMode": "Mode du récepteur",
"modeArm": "Armement",
"modeAngle": "Angle",
"modeHorizon": "Horizon",
"modeAirMode": "Air Mode",
"modeAcro": "Acro",
"modeManual": "Manuel",
"modeFailSafe": "Failsafe",
"modeRth": "Retour au domicile",
"modePosHold": "Position Hold",
"modeCruise": "Cruise",
"modeLaunch": "Launch"
}4. GPS + Ports + VTX Section - Corrected Translations{
"tabGPS": "GPS",
"gpsSats": "Satellites :",
"gpsSatsValue": "Sats",
"gpsDistToHome": "Distance au domicile",
"gpsDirectionToHome": "Direction au domicile",
"tabPorts": "Ports",
"tabVTX": "VTX",
"vtxChannel": "Canal VTX",
"vtxPower": "Puissance VTX",
"vtxPitMode": "Mode Pit",
"vtxBand": "Bande VTX",
"portsConfiguration": "Configuration des ports"
}5. Blackbox + Logging Section - Corrected Translations{
"tabBlackbox": "Blackbox",
"tabOnboardLogging": "Blackbox",
"featureBLACKBOX": "Blackbox",
"blackboxConfiguration": "Configuration Blackbox",
"onboardLoggingBlackbox": "Blackbox",
"blackboxRate": "Taux d'enregistrement Blackbox",
"blackboxDevice": "Périphérique Blackbox",
"blackboxMode": "Mode Blackbox",
"blackboxLogging": "Enregistrement Blackbox",
"onboardLogging": "Blackbox embarquée"
}6. General Remaining Corrections - Other Important Terms{
"configurationThrottle": "Gaz",
"configurationThrottleMinimum": "Gaz minimum",
"configurationThrottleMid": "Gaz milieu",
"configurationThrottleMaximum": "Gaz maximum",
"initialSetupThrottleHead": "Paramètres Gaz",
"mixerWizard": "Assistant Mixer",
"rateProfile": "Profil Rates",
"configurationAccTrimRoll": "Trim Roulis",
"configurationAccTrimPitch": "Trim Tangage",
"configurationBattery": "Batterie",
"tabMotors": "Moteurs",
"mixer": "Mixer",
"throttle": "Gaz",
"armed": "Armé",
"disarmed": "Désarmé",
"serialReceiver": "Récepteur série"
} |
|
I have a few more but these are not so critical and just suggestions: 7. Additional Remaining Corrections (Advanced PID, Battery, Failsafe, Telemetry & Misc){
"pidTuning_AntiGravity": "Anti-Gravité",
"pidTuning_Feedforward": "Feedforward",
"pidTuning_FeedforwardTransition": "Transition Feedforward",
"pidTuning_DMin": "D Min",
"pidTuning_ITermRelax": "Relax I Term",
"pidTuning_DynamicDamping": "Amortissement dynamique",
"batteryVoltage": "Tension batterie",
"batteryCapacity": "Capacité batterie",
"currentSensor": "Capteur de courant",
"currentDraw": "Consommation courant",
"mahDrawn": "mAh consommés",
"failsafe": "Failsafe",
"failsafeProcedure": "Procédure Failsafe",
"failsafeRth": "RTH en Failsafe",
"telemetry": "Télémétrie",
"telemetrySensors": "Capteurs télémétrie",
"hoverThrottle": "Gaz stationnaire",
"launchControl": "Contrôle de lancement",
"waypoint": "Point de passage",
"cruise": "Cruise",
"expo": "Expo",
"dynamicNotch": "Notch dynamique",
"motorDirection": "Sens du moteur"
}8. Warnings + Help Texts & Long Descriptions - Corrected TranslationsJSON {
"osdWarningArmed": "Armé",
"osdWarningDisarmed": "Désarmé",
"osdWarningBatteryLow": "Batterie faible",
"osdWarningBatteryCritical": "Batterie critique !",
"osdWarningFailsafe": "Failsafe actif",
"osdWarningRth": "Retour au domicile",
"osdWarningGpsFixLost": "Signal GPS perdu",
"osdWarningGpsFix": "GPS fixé",
"osdWarningLowPower": "Basse puissance",
"armingDisabled": "L'armement est désactivé",
"armingDisabledReason": "Raison : ",
"armingDisabledThrottleLow": "Gaz trop bas",
"armingDisabledRollPitch": "Inclinaison trop forte",
"armingDisabledBadRX": "Récepteur défaillant",
"armingDisabledArmSwitch": "Interrupteur d'armement activé",
"failsafe": "Failsafe",
"failsafeProcedure": "Procédure Failsafe",
"failsafeProcedureDrop": "Chute immédiate",
"failsafeProcedureLand": "Atterrissage automatique",
"failsafeProcedureRth": "Retour au domicile",
"failsafeHelp": "Définit ce que le drone fait en cas de perte de signal radio.",
"configHelp_Blackbox": "Active l'enregistrement Blackbox pour analyser les vols plus tard. Recommandé pour tous les pilotes avancés.",
"configHelp_Rates": "Les Rates définissent la vitesse maximale de rotation du drone sur chaque axe. Utilisez des valeurs stables pour le vol freestyle.",
"configHelp_Expo": "L'Expo réduit la sensibilité près du centre des sticks pour un contrôle plus précis.",
"configHelp_AntiGravity": "Anti-Gravité compense les changements brusques de gaz pour garder le drone stable.",
"configHelp_Feedforward": "Feedforward améliore la réactivité du PID en anticipant les mouvements.",
"configHelp_ITermRelax": "Relax I Term empêche les oscillations lors des mouvements rapides.",
"configHelp_DynamicNotch": "Filtre Notch dynamique supprime automatiquement les vibrations du moteur.",
"batteryLowVoltage": "Tension batterie trop basse",
"batteryCriticalVoltage": "Tension batterie critique ! Atterrissage immédiat recommandé.",
"currentSensorHelp": "Le capteur de courant permet d'afficher la consommation en temps réel et le mAh consommés.",
"hoverThrottle": "Gaz stationnaire",
"hoverThrottleHelp": "Valeur de gaz à laquelle le drone maintient l'altitude en mode Angle/Horizon (typiquement 1400-1600).",
"launchControlHelp": "Active le contrôle de lancement pour un décollage propre et droit sur des surfaces inclinées."
} |
|
Thanks for replying, I'll double check and do the proper modifications.
Le ven. 6 mars 2026 à 19:34, b14ckyy ***@***.***> a écrit :
… *b14ckyy* left a comment (iNavFlight/inav-configurator#2586)
<#2586 (comment)>
Here are the recommended changes by Grok. Please doublecheck them, if they
are acceptable and then you can just copy and paste them into your PR:
Most critical changes recommended:
{
"pidTuning_Rates": "Rates",
"pidTuning_Rates_Stabilized": "Rates stabilisés",
"pidTuning_Rates_Manual": "Rates manuels",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_YawRate": "Rate Lacet",
"pidTuning_magHoldYawRate": "Limite taux Lacet MagHold",
"pidTuning_RateDynamics": "Dynamique des Rates",
"configurationThrottle": "Gaz",
"initialSetupThrottleHead": "Paramètres Gaz",
"configurationThrottleMinimum": "Gaz minimum",
"configurationThrottleMid": "Gaz milieu",
"configurationThrottleMaximum": "Gaz maximum",
"receiverThrottleMid": "Milieu Gaz",
"receiverThrottleExpo": "Expo Gaz",
"featureBLACKBOX": "Blackbox",
"tabOnboardLogging": "Blackbox",
"tabBlackbox": "Blackbox",
"onboardLoggingBlackbox": "Blackbox",
"blackboxConfiguration": "Configuration Blackbox",
"gpsSats": "Satellites :",
"gpsSatsValue": "Sats",
"mixerWizard": "Assistant Mixer",
"rateProfile": "Profil Rates",
"configurationAccTrimRoll": "Trim Roulis",
"configurationAccTrimPitch": "Trim Tangage",
"pidTuning_Pitch": "Tangage",
"pidTuning_Roll": "Roulis",
"pidTuning_Yaw": "Lacet",
"tabGPS": "GPS",
"tabOSD": "OSD",
"tabReceiver": "Récepteur",
"tabMotors": "Moteurs",
"tabVTX": "VTX"
}
------------------------------
1. PID Tuning Section - Corrected Translations
{
"pidTuning_Rates": "Rates",
"pidTuning_Rates_Stabilized": "Rates stabilisés",
"pidTuning_Rates_Manual": "Rates manuels",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_YawRate": "Rate Lacet",
"pidTuning_magHoldYawRate": "Limite Lacet MagHold",
"pidTuning_RateDynamics": "Dynamique des Rates",
"pidTuning_Pitch": "Tangage",
"pidTuning_Roll": "Roulis",
"pidTuning_Yaw": "Lacet",
"pidTuning_P": "Proportionnel",
"pidTuning_I": "Intégral",
"pidTuning_D": "Dérivé",
"pidTuning_PitchRate": "Rate Tangage",
"pidTuning_RollRate": "Rate Roulis",
"pidTuning_YawRate": "Rate Lacet"
}
2. OSD Section - Corrected Translations
{
"tabOSD": "OSD",
"osdSetupElement": "Élément OSD",
"osdSetupPreview": "Prévisualisation OSD",
"osdWarningArmed": "Armé",
"osdWarningDisarmed": "Désarmé",
"osdWarningBatteryLow": "Batterie faible",
"osdWarningBatteryCritical": "Batterie critique",
"osdElementMainBatteryVoltage": "Tension batterie",
"osdElementRssiValue": "RSSI",
"osdElementFlyTime": "Temps de vol",
"osdElementArmedTime": "Temps armé",
"osdElementCraftName": "Nom du drone",
"osdElementThrottlePosition": "Position Gaz",
"osdElementGpsSats": "Satellites GPS",
"osdElementGpsSpeed": "Vitesse GPS"
}
3. Receiver + Modes Section - Corrected Translations
{
"tabReceiver": "Récepteur",
"receiverThrottleMid": "Milieu Gaz",
"receiverThrottleExpo": "Expo Gaz",
"configurationReceiverMode": "Mode du récepteur",
"modeArm": "Armement",
"modeAngle": "Angle",
"modeHorizon": "Horizon",
"modeAirMode": "Air Mode",
"modeAcro": "Acro",
"modeManual": "Manuel",
"modeFailSafe": "Failsafe",
"modeRth": "Retour au domicile",
"modePosHold": "Position Hold",
"modeCruise": "Cruise",
"modeLaunch": "Launch"
}
4. GPS + Ports + VTX Section - Corrected Translations
{
"tabGPS": "GPS",
"gpsSats": "Satellites :",
"gpsSatsValue": "Sats",
"gpsDistToHome": "Distance au domicile",
"gpsDirectionToHome": "Direction au domicile",
"tabPorts": "Ports",
"tabVTX": "VTX",
"vtxChannel": "Canal VTX",
"vtxPower": "Puissance VTX",
"vtxPitMode": "Mode Pit",
"vtxBand": "Bande VTX",
"portsConfiguration": "Configuration des ports"
}
5. Blackbox + Logging Section - Corrected Translations
{
"tabBlackbox": "Blackbox",
"tabOnboardLogging": "Blackbox",
"featureBLACKBOX": "Blackbox",
"blackboxConfiguration": "Configuration Blackbox",
"onboardLoggingBlackbox": "Blackbox",
"blackboxRate": "Taux d'enregistrement Blackbox",
"blackboxDevice": "Périphérique Blackbox",
"blackboxMode": "Mode Blackbox",
"blackboxLogging": "Enregistrement Blackbox",
"onboardLogging": "Blackbox embarquée"
}
6. General Remaining Corrections - Other Important Terms
{
"configurationThrottle": "Gaz",
"configurationThrottleMinimum": "Gaz minimum",
"configurationThrottleMid": "Gaz milieu",
"configurationThrottleMaximum": "Gaz maximum",
"initialSetupThrottleHead": "Paramètres Gaz",
"mixerWizard": "Assistant Mixer",
"rateProfile": "Profil Rates",
"configurationAccTrimRoll": "Trim Roulis",
"configurationAccTrimPitch": "Trim Tangage",
"configurationBattery": "Batterie",
"tabMotors": "Moteurs",
"mixer": "Mixer",
"throttle": "Gaz",
"armed": "Armé",
"disarmed": "Désarmé",
"serialReceiver": "Récepteur série"
}
—
Reply to this email directly, view it on GitHub
<#2586 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BQBDJZB4FZIZ65R6EFLFOOL4PMK2HAVCNFSM6AAAAACWJTKPQ6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DAMJTGM2DAOBTGU>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
I'm gonna review some sections where texts are too long. It makes them overlap over other stuff. |
… connected logging section
|
|
I did more modifications and some more fixes. There shouldn't be any more issues now. I reviewed most of it and I tested the app using my father's drone. |



I translated the app in french using a python script (deep_translator library)
This could be useful to many people
I reviewed most of the translations myself.