This actually appears to be more of a bug than an intentional change in behaviour in iOS 11. If you only have one language set, this behaviour isn't present as Locale.current always returns the correct language and region even if your app isn't localized to that language.
However, if you have more than one language - such as French and English - then iOS 11 appears to always favour English or the closest supported language in your app when using Locale.current.
Locale.preferredLanguages appears to return the correct language-region information, so you might be able to use that instead.
Below is an example showing the output from Locale.current and Locale.preferredLanguages, showing the inconsistencies.
This was generated from an app that only supported English. On the device, French was set as both the primary language and region, with English (Australia) set as a secondary language in the first example.
(Incorrect) Locale.current with multiple languages - note how English is the language, when it should be French and therefore fr_FR
- identifier : "en_FR"
- kind : "current"
(Correct) Locale.preferredLanguages with multiple languages
- 0 : "fr-FR"
- 1 : "en-AU"
(Correct) Locale.current with French as the only language
- 0 : "fr-FR"
(Correct) Locale.preferredLanguages with French as the only language
- identifier : "fr_FR"
- kind : "current"