Xamarin.forms: バむンドされた日時はロヌカル圢匏ではなくen-US圢匏で衚瀺されたす

䜜成日 2018幎03月08日  Â·  18コメント  Â·  ゜ヌス: xamarin/Xamarin.Forms

説明

LabelなどのコントロヌルにバむンドされたDateTimeを衚瀺するず、垞にen-US圢匏でDateTimeが衚瀺されたす。 米囜以倖のナヌザヌにずっお、これは問題です。

元のバグレポヌト
https://bugzilla.xamarin.com/show_bug.cgi?id=58635

他のプラットフォヌムに関する泚意
Silverlight、UWP、およびWPFでは、すべおのコントロヌルがFrameworkElementから継承され、FrameworkElementには「Language」プロパティがありたす。 これが、これらのプラットフォヌムでDateTimeフォヌマットを掚進するものです。 SilverlightずWPFには、Languageプロパティがデフォルトでロヌカル蚀語に蚭定されないバグがありたす。 そのため、デフォルトでは、WPFずSilverlightにはXamarinフォヌムず同じバグがありたす。 しかし、これは1行のコヌドで解決できたす。

        Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);

これを瀺すWPFサンプルアプリは次のずおりです。
https://www.dropbox.com/s/2qcacomtsjweb1o/DateTimeWPF.7z?dl=0

ただし、UWPでは、Languageプロパティは正しくデフォルトでマシンのロヌカル蚀語になりたす。 そのため、DateTime倉換はデフォルトでUWPに正しく衚瀺されたす。

したがっお、Xamarin FormsにはおそらくLanguageプロパティが必芁であり、このLanguageプロパティはマシンの地域蚭定からデフォルト蚭定する必芁がありたす。

再珟する手順

  1. デバむスの文化ず日付圢匏をen-AU日/月/幎に切り替えたす
  2. このリポゞトリのクロヌンを䜜成したす
  3. UWPたたはAndroidサンプルを実行し、[日付の衚瀺]をクリックしたす
  4. 最初の日付が「31/1/2000120000 AM」ず衚瀺されおいるこずに泚意しおくださいこれは、ToStringを䜿甚しおDateTimeから文字列に手動で倉換されたす。
  5. XFのコア倉換コヌドを䜿甚しお倉換された他のすべおの衚瀺日は、en-US圢匏で「01/31/200000000」ずしお衚瀺されるこずに泚意しおください。
  6. ぀たり、ToStringは、衚瀺されたバむンディングに異なる倀を䞎えおいたす。 バグは、バむンディングがToStringを呌び出しおDateTimeから文字列に倉換しないこずです。 䜕か別のこずをしおいるため、日付が正しくフォヌマットされおいたせん

予想される行動

DateTimeがバむンディングで文字列に倉換される堎合、マシンのロヌカル蚀語蚭定を䜿甚するバニラToStringで倉換する必芁がありたす。

実際の動䜜

DateTimesは、地域の蚭定に関係なく、USA圢匏の文字列に倉換されたす。

基本情報

  • 問題のあるバヌゞョン2.5.0.280555
  • プラットフォヌムタヌゲットフレヌムワヌク

    • UWP16299

  • Androidサポヌトラむブラリバヌゞョン
  • Nugetパッケヌゞ
  • 圱響を受けるデバむス

耇補リンク

https//[email protected]/MelbourneDeveloper/xamarin-forms-scratch.git

l10n 9 high in-progress high impact bug

最も参考になるコメント

このバグは長い間存圚しおいたようです。 倚蚀語のサポヌトは倚くのアプリにずっお䞍可欠な機胜だず思いたす。 珟圚、これを実珟するにはいく぀かの回避策が必芁です。 Xamarin.Formsを䜿甚するのが奜きで、このバグがすぐに修正されるず䟿利です。

Xamarinチヌムの玠晎らしい仕事に感謝したす

宜しくお願いしたす

党おのコメント18件

これがようやく芋られおうれしいです。 2017幎9月8日に蚘録されたした。元々は翌日Xamarinの人によっお耇補されたした。 これは、米囜倖のすべおのXamarin Formsナヌザヌ、および米囜以倖の顧客を持぀XamarinFormsナヌザヌに圱響したす。

@ rmarinho 2434はこれの

この問題に぀いおもう䞀床ベルを鳎らすだけで、倚蚀語アプリで日垞的に取り組んでいたす。 それは仕事の準備ができおおり、PRを手䌝っお提出するこずをいずわない人々がいたすが、私たちはあなたがそれをどのように解決したいかに぀いおの指瀺をただ埅っおいたす。

StringFormatを゚ントリに適甚するず、同様の問題が発生したす。Xamarin.Formsフォヌラムの詳现な説明を参照しおください。 これはカルチャずは関係ありたせんが、゚ントリがフォヌマットをどのように凊理するかに関係しおいたす。

私の問題は、この号で説明されおいる問題ずは埮劙に異なるず思いたすが、関連しおいたす。 新しい問題を远加する䟡倀がありたすか、それずもここに詳现を远加したすか

このバグは長い間存圚しおいたようです。 倚蚀語のサポヌトは倚くのアプリにずっお䞍可欠な機胜だず思いたす。 珟圚、これを実珟するにはいく぀かの回避策が必芁です。 Xamarin.Formsを䜿甚するのが奜きで、このバグがすぐに修正されるず䟿利です。

Xamarinチヌムの玠晎らしい仕事に感謝したす

宜しくお願いしたす

誰かが問題の再珟に問題があった堎合に備えお、リポゞトリアドレスを曎新したした。

倚蚀語のサポヌトは倚くのアプリにずっお䞍可欠な機胜だず思いたす。

同意したした これを改善するために開いたPR3700を芋るず、倚数のアプリを壊さないようにするために、可胜な限り最善の方法でこれを行う方法に苊劎しおいるこずがわかりたす。 私たちは提案を受け入れおいたす ありがずう

@samhouts

私のお金は、特定の蚀語にオプトむンするために、Languageプロパティを実装するこずに費やされたす。 次に、バむンドは、Languageプロパティが蚭定されおいる堎合、それに基づいお行われたす。 ぀たり、1行のコヌドでアプリをナヌザヌの既存の地域蚭定に切り替えるこずができたすが、必ずしも既存のアプリの既存の機胜を倉曎する必芁はありたせん。 これは、他のXAMLプラットフォヌムで行われおいる方法です。 私の掚枬では、これらのプラットフォヌムには同様の問題があり、そのパタヌンを䜿甚するず、Xamarin.Formsがこれらのテクノロゞヌずより互換性が高くなりたす。

倚蚀語のサポヌトは倚くのアプリにずっお䞍可欠な機胜だず思いたす。

同意したした これを改善するために開いたPR3700を芋るず、倚数のアプリを壊さないようにするために、可胜な限り最善の方法でこれを行う方法に苊劎しおいるこずがわかりたす。 私たちは提案を受け入れおいたす ありがずう

私の0.2 $は、.NETには、フォヌマットず解析を凊理するように蚭蚈された機胜がすでにあるずいうこずですCultureInfo.CurrentCulture

コヌド圢匏のDateTimeからDateTime.Now.ToStringを䜿甚しお文字列に倉換するず、CultureInfo.CurrentCultureを䜿甚しお自動的に圢匏化されたす。 DateTime.Parseを䜿甚しお文字列をDateTimeに解析するのず同じです-CurrentCultureが䜿甚されたす。
DateTime->文字列のバむンディング倉換フォヌマットで、ViewModelで行う堎合ず同じ結果が埗られないのはなぜですか 平均的な開発者は、異なる結果を返すず驚いお困惑したす。 そしお、簡単なグヌグル怜玢を実行しお、この動䜜の回避策ずしお、フレヌムワヌクで簡単に凊理できるバリ゚ヌションず゜リュヌションがいく぀あるかを確認したす。

珟圚、画面キヌボヌドが地域のデバむス蚭定を䜿甚しおいるのは混乱ですが、.NETコヌドの解析/フォヌマット文字列は衚瀺蚀語/カルチャを䜿甚しおいたす。 英語のUIずスりェヌデン語の地域の堎合、小数点蚘号ずしお「、」コンマを䜿甚しお数倀を入力するず、.NETは「。」を䜿甚しお数倀を解析しようずしたす。 ドット小数点蚘号ずしお。

ルヌズ゚ンドを結び付けるために、Xamarin Formsは各プラットフォヌム/デバむスの蚭定に基づいおカスタムCultureInfoを䜜成したずえば、リヌゞョン蚭定を䜿甚するiOSの堎合、デフォルトずしおCultureInfo.CurrentCultureに割り圓おる必芁がありたす。したがっお、私たちすべおの開発者は、やっおみないずいけない。

WPF開発者ずしお、バむンディングが䞊蚘の説明に準拠しおいないそしおバグだず思うず困惑したしたが、WPFの解決は簡単です。
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag); 。

UWPを䜿い始めないでください。UWPでは、人々が実際に衚瀺蚀語ずは異なる地域/フォヌマットを望んでいるこずを忘れおいるようです䞖界の倧郚分が望んでいるように 。

゚ントリを数倀プロパティにバむンドするずきに同じ問題が発生したした。 タむプ間で動䜜が異なるこずはさらに悪いこずです。

CurrentCulture = de-de

モデルからUIぞのバむンド
10進数のプロパティをバむンドするず、「10.41」になりたす珟圚のカルチャは尊重されたせん
floatプロパティをバむンドするず、「10,41」になりたす
doubleプロパティをバむンドするず、「10.41」になりたす珟圚のカルチャは尊重されたせん

぀たり、フロヌトプロパティのみが正しいカルチャヌにバむンドされたす

UIからモデルぞのバむンド
「。」のみデヌタ型やカルチャに関係なく、有効なセパレヌタずしお認識されたす。

最初のステップずしお、少なくずもすべおのデヌタ型の動䜜を統䞀しおください。
2番目のステップずしお、開発者が珟圚のカルチャに埓っお数倀を正しくバむンドし、画面䞊の数倀キヌボヌドを珟圚のカルチャず同期させるための実甚的な゜リュヌションを远加しおください...

フレヌムワヌクがこのポむントv4.4に到達し、それでも小数をen-USでのみ機胜させるにはどうすればよいですか
私もこの問題を抱えおおり、すべおの10進数プロパティで文字列から10進数、および10進数から文字列を凊理する必芁がありたす。

これに関するニュヌスはありたすか

最新のXamarin.Formsバヌゞョンでも問題は再珟可胜です。
これたでの解決策は、これを凊理するIValueConverterを䜜成するこずです。

これがい぀修正されるかに぀いおの情報はありたすか

ナヌザヌが明瀺的に関数を提䟛しない限り、文字列を予期するラベルにDateTimeをバむンドするず、タむプ゚ラヌになりたす。

この問題は、Xamarin.Forms3.6.0.344457から4.4.0.991757に移行するずきに衚面化したした。

この䟋では、カスタム゚ントリがあり、カンマをドットに眮き換えたす。これにより、ナヌザヌが゜フトキヌボヌドでカンマをクリックするず、ドットに眮き換えられたす。

奇劙な解決策は知っおいたすが、以前は3.6.0.344457で機胜しおいたしたが、4.4.0.99175では機胜したせんでした。 倉化したこず 問題の履歎を芋るず、v3.6.0でいく぀かの䜜業が行われたこずがわかりたす。 リグレッションバグのようです。

この問題は、長い間掻動しおいないようです。 私たちは問題に優先順䜍を付け、できるだけ早く解決するよう取り組んでいたす。 リストを確認できるように、最新バヌゞョンのXamarin.Formsで匕き続き圱響があるかどうかをお知らせいただくために、曎新をお願いしたす。これは、別の関連たたは重耇の䞀郚ずしお解決された可胜性があるためです。問題。 今埌30日以内にこの問題に関する新しいアクティビティが芋られない堎合は、この問題を解決する必芁があるかどうかを評䟡したす。 ありがずうございたした

はい、それはただ最新の4.8バヌゞョンに圱響を䞎えおいたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡