French translation

Based on #2661.