NSDateFormatter
のデフォルトの動作はiOS11で変更されたようです。このコードは、現在選択されているiOS11より前のiPhone/iPad言語に従って、日付フォーマッターを機能させ、生成していました。
_dateFormatterInstance = [[NSDateFormatter alloc] init];
_dateFormatterInstance.timeZone = [NSTimeZone systemTimeZone];
IOS11では、ロケールプロパティを明示的に指定する必要があります。
_dateFormatterInstance = [[NSDateFormatter alloc] init];
_dateFormatterInstance.timeZone = [NSTimeZone systemTimeZone];
_dateFormatterInstance.locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] firstObject]];
誰かが私の調査結果を確認できますか?
これは、実際にはiOS 11の動作の意図的な変更よりもバグのようです。言語セットが1つしかない場合、Locale.current
は常に正しい言語と地域を返すため、この動作は存在しませんアプリがその言語にローカライズされていない場合でも。
ただし、フランス語と英語など、複数の言語がある場合、iOS 11はLocale.current
を使用するときに常に英語またはアプリでサポートされている最も近い言語を優先するようです。
Locale.preferredLanguages
は正しい言語地域情報を返すように見えるため、代わりにそれを使用できる場合があります。
以下は、Locale.current
およびLocale.preferredLanguages
からの出力を示す例で、不整合を示しています。
これは、英語のみをサポートするアプリから生成されました。デバイスでは、フランス語が第一言語と地域の両方として設定され、最初の例では第二言語として英語(オーストラリア)が設定されています。
(間違っています)Locale.current
複数の言語で-フランス語がどのようにフランス語である必要があるか、したがってfr_FRであることに注意してください
- identifier : "en_FR"
- kind : "current"
(正しい)Locale.preferredLanguages
複数言語
- 0 : "fr-FR"
- 1 : "en-AU"
(正しい)Locale.current
(フランス語のみを使用)
- 0 : "fr-FR"
(正しい)Locale.preferredLanguages
(フランス語のみを使用)
- identifier : "fr_FR"
- kind : "current"