これらの面癜い地域蚭定

今日は、地域の蚭定に぀いおお話したす。 しかし、最初に、小さなタスク以䞋のコヌドは䜕を出力したすか コヌドはCですが、かなり䞀般的な問題が考慮されおいるため、代わりに他の蚀語を想像できたす。



Console.WriteLine((-42).ToString() == "-42"); Console.WriteLine(double.NaN.ToString() == "NaN"); Console.WriteLine(int.Parse("-42") == -42); Console.WriteLine(1.1.ToString().Contains("?") == false); Console.WriteLine(new DateTime(2014, 1, 1).ToString().Contains("2014")); Console.WriteLine("i".ToUpper() == "I" || "I".ToLower() == "i");
      
      





真の倀をいく぀取埗したしたか 0より倧きい堎合、正解は「䟝存」であるため、地域の蚭定に぀いお詳しく知る必芁はありたせん。 残念ながら、倚くのプログラマヌは、異なる環境でのこれらの蚭定が異なる可胜性があるずはたったく考えおいたせん。 たた、このプログラマヌがすべおのコヌドにInvariantCultureを蚭定するのは面倒で、その結果、矎しいアプリケヌションは非垞に奇劙に動䜜し、他の囜のナヌザヌに届きたす。 。 この蚘事では、地域の蚭定によっお圱響を受けるいく぀かの重芁なポむントの簡単な遞択を提䟛したす。



CultureInfoExplorer Sceenshot



ちょっずした理論.NETでは、特定の蚀語ず地域の蚭定に関するすべおの情報はCultureInfoクラスを䜿甚しお芋぀けるこずができたす。 以前にカルチャに遭遇したこずがない堎合、 この投皿は最初の慣れに適しおいたす。 既存のさたざたな地域蚭定の調査に熱心な経隓豊富なプログラマヌは、すべおのCultureInfoを手動で衚瀺するのにうんざりするかもしれたせん。 個人的には、ある時点で疲れたした。 したがっお、CultureInfoExplorerず呌ばれる小さなWPFアプリケヌション GitHub 、 バむナリ ぞのリンク が衚瀺され、䞊のスクリヌンショットに瀺されおいたす。 次のこずができたす。 このプログラムが圹立぀読者がいるこずを願っおいたす。 さたざたな地域の蚭定に぀いお倚くを孊ぶこずができたす。 さお、䟋のために。



数字



数倀の衚珟に぀いおは、 NumberFormatInfo  CultureInfo.NumberFormatからアクセス可胜を担圓したす 。 そしお、これは通垞の数字だけでなく、パヌセンテヌゞず金銭的䟡倀にも蚀及しおいたす。 正ず負の倀があるこずに泚意しおください。ロヌカリれヌション/グロヌバリれヌションを扱う堎合、これに泚意を払うこずが重芁です。 少なくずもドキュメントに目を通し、利甚可胜なプロパティを確認するこずを匷くお勧めしたす。



人に問題を匕き起こす最も䞀般的なプロパティの1぀は、 NumberDecimalSeparatorず呌ばれたす 。 これは、数倀をデコヌドするずきに敎数郚が䜕から分離されるかを担圓したす。 ゚ラヌの兞型的な䟋プログラマは小数の配列を文字列にマヌゞし、それらをコンマで区切りたす。 その埌、圌は文字列を解析しお配列に戻したす。 NumberDecimalSeparatorがポむントに等しい堎合、すべおが正垞です。 たずえば、en-USカルチャヌが公開されたため、すべおがプログラマヌのために機胜し、圌は補品をリリヌスしたした。 この補品はru-RUカルチャヌを持぀ナヌザヌによっおダりンロヌドされ、悲しみ始めたす結局、圌のNumberDecimalSeparatorはコンマに等しい芁玠1.2および3.4​​の配列は、そのようなマヌゞでストリング「1,2,3,4」にマヌゞされ、解析するのに問題がありたす。 個人的には、同様の問題に遭遇したプログラマヌが、フォヌマット時に正しいNumberFormatInfoを瀺すこずで通垞は解決しようずせず、ドットをコンマに、たたはコンマをドットに眮き換えるこずを思い぀き始めるず、さらに悲しくなりたす。 原則ずしお、 NumberDecimalSeparatorが任意であるこずを理解する必芁がありたす。 たずえば、fa-IRペルシャ文化では、スラッシュ '/'ず同じです。



利息ず通貚に぀いおも同様のプロパティがありたす PercentDecimalSeparatorずCurrencyDecimalSeparator 。 これらの3぀の倀すべおが䞀臎する必芁はありたせん。 たずえば、カザフスタンkk-KZの堎合、 NumberDecimalSeparatorずPercentDecimalSeparatorはカンマに等しく、CurrencyDecimalSeparatorはマむナス蚘号に等しくなりたす負の数倀が瀺されるものずたったく同じです。



敎数が文字列に倉換されるず、数字のみで構成される倀が埗られるず考える人もいたす。 ただし、これらの数倀はグルヌプに分けるこずができたす。 NumberGroupSizesプロパティはグルヌプのサむズを担圓し、 NumberGroupSeparatorはセパレヌタを担圓したすパヌセントず通貚は同様のプロパティを持っおいたすが、再び䞀臎する必芁はありたせん。 グルヌプのサむズはさたざたです。たずえば、倚くのカルチャ as-IN、bn-BD、gu-IN、hi-INなど では 、 NumberGroupSizesは{ 3、2 }です。 as-INカルチャの番号1234567は、 「12.34.567」のようになりたす。 \ u0020スペヌスはセパレヌタずしお䜿甚できたすたずえば、af-ZAおよびlt-LTでが、それを芋るずきは、文字列の解析ずフォヌマットに別の束葉杖を駆り立おないでください。 ほずんどの堎合、通垞のスペヌスの代わりに、䞍可解なスペヌスが䜿甚されたす\ u00A0ネむティブru-RU。



負の数ず正の数を瀺す蚘号もカルチャに含たれたす NegativeSign 、 PositiveSign 。 ありがたいこずに、利甚可胜なすべおの文化においお、マむナスずプラスに等しいのですが、これに䟝存するべきではありたせん。環境を再定矩し、プロパティをプロパティに蚭定できたす。 そしお、最も興味深いのは、蚘号ではなく、正ず負の倀のフォヌマットパタヌンです。 たずえば、負の数倀の曞匏蚭定は、次の5぀の倀を持぀NumberNegativePatternを䜿甚しお決定されたす。



 0 (n) 1 -n 2 - n 3 n- 4 n -
      
      





たずえば、ti-ET文化Tigrinya゚チオピアでは、-5の倀がフォヌム5に衚瀺されたす。 パヌセンテヌゞず通貚 PercentNegativePattern 、 PercentPositivePattern 、 CurrencyNegativePattern 、 CurrencyPositivePattern を䜿甚するず、状況はさらに楜しくなりたす。 たずえば、 CurrencyNegativePatternには、最倧16個の倀がありたす。



 0 ($n) 1 -$n 2 $-n 3 $n- 4 (n$) 5 -n$ 6 n-$ 7 n$- 8 -n $ 9 -$ n 10 n $- 11 $ n- 12 $ -n 13 n- $ 14 ($ n) 15 (n $)
      
      





特殊文字ず特別な数倀の特別なプロパティもありたす PercentSymbol 、 PerMilleSymbol 、 NaNSymbol 、 NegativeInfinitySymbol 、 PositiveInfinitySymbol 。 doubleが取埗され、文字列にフォヌマットされたもちろん、珟圚のナヌザヌカルチャヌでは実際のプロゞェクトを芋お、文字列圢匏で"-Infinity"ず比范したした。 この珟圚の文化に応じお、 NegativeInfinitySymbolはさたざたな意味を持ちたす。



 '- ', '-- អនន្ត', '(-) முடிவிலி', '-∞', '-Anfeidredd', '-Anfin', '-begalybė', '-beskonačnost', 'Éigríoch dhiúltach', '-ifedh', '-INF', '-Infini', '-infinit', '-Infinit', '-Infinito', '-Infinitu', '-infinity', 'Infinity-', '-Infinity', 'miinuslõpmatus', 'mínusz végtelen', '-nekonečno', '-neskončnost', '-nieskończoność', '-njekónčne', '-njeskóńcnje', '-onendlech', '-Sonsuz', '-tÃŒkeniksizlik', '-unendlich', '-Unendlich', '-Άπειρο', '-', ' ', '-უსასრულობა', 'אינסוף שלילי', '-لا نهاية', 'منهای ØšÛŒ نهایت', 'مەنٟىي چەكسىزلىك', '-අනන්තය', 'ᠰ᠊ᠬᠡᠷᠬ᠊ ᠬᠢᠵᠠᠭᠠᠷᠭ᠊ᠢ ᠶᠡᠬᠡ', 'àœ˜àœŒàŒ‹àœ‚àŸ²àœ„àœŠàŒ‹àœšàœ‘àŒ‹àœ˜àœºàœ‘àŒ‹àœ†àœŽàœ„àŒ‹àœ–àŒ', 'ߘߊ߲߬ߒߕߊ߲߫-', 'ꀄꊭꌐꀋꉆ', '負無窮倧', '莟无穷倧'
      
      





分析したさたざたな有甚な特性の䟋。 そしお、ちょっずしたトリックをやっおみたしょう。ロシアの文化を少し倉えお、新しい意味が私たちの人生を台無しにするように、投皿の最初から䟋を瀺したす。



 var myCulture = (CultureInfo)new CultureInfo("ru-RU").Clone(); myCulture.NumberFormat.NegativeSign = "!"; myCulture.NumberFormat.PositiveSign = "-"; myCulture.NumberFormat.PositiveInfinitySymbol = "+Inf"; myCulture.NumberFormat.NaNSymbol = "Not a number"; myCulture.NumberFormat.NumberDecimalSeparator = "?"; Thread.CurrentThread.CurrentCulture = myCulture; Console.WriteLine(-42); // !42 Console.WriteLine(double.NaN); // Not a number Console.WriteLine(int.Parse("-42")); // 42 Console.WriteLine(1.1); // 1?1
      
      





おそらくここの誰かが私に蚀う「なぜそのような䟋が考慮されるべきなのか」 プログラマヌがそのようなこずを曞くこずはありたせん」 そしお、私は答えたす「たあ、たあ、誰もいないでしょう、どうしお」 あるラむブラリを配垃するず状況は悲しくなり、そのナヌザヌの1人が文化を楜しむこずにしたした。 たぶん、圌はただ楜しんでいるのが奜きなだけかもしれたせん。あるいは、ある皮の颚倉わりな文化死んだ、たたは架空の蚀語のアプリケヌションを曞いおいるかもしれたせん。 しかし、それは問題ではありたせん。 そしお、重芁なこずは、あなたのラむブラリがそれに察する珍しい環境で奇劙に振る舞い始めるずいうこずです。 したがっお、 NegativeSignずPositiveSignが決しお倉わらないずいう事実に䟝存しないでください。 必芁な文化を明瀺し、幞せに暮らすこずをお勧めしたす。



たた、John Skeetによる最近の投皿The BobbyTables cultureを読むこずをみんなに勧めたす。 簡単な芁玄John Skeetは、SQLク゚リのパラメヌタヌが数字や日付であっおも、それらを゚スケヌプしない人を誓いたす。 そしお、ゞョンはいく぀かのリク゚ストを受け取りたす



 "SELECT * FROM Foo WHERE BarDate > '" + DateTime.Today + "'" "SELECT * FROM Foo WHERE BarValue = " + (-10)
      
      





そしお奇跡の文化を定矩したす



 CultureInfo bobby = (CultureInfo) CultureInfo.InvariantCulture.Clone(); bobby.DateTimeFormat.ShortDatePattern = @"yyyy-MM-dd'' OR ' '=''"; bobby.DateTimeFormat.LongTimePattern = ""; bobby.NumberFormat.NegativeSign = "1 OR 1=1 OR 1=";
      
      





手を振るず、ク゚リは次のようになりたす。



 SELECT * FROM Foo WHERE BarDate > '2014-08-08' OR ' '=' ' SELECT * FROM Foo WHERE BarValue = 1 OR 1=1 OR 1=10
      
      





さお、これ以䞊の説明は必芁ないず思いたす。



日時



日付ず時刻では、すべおが特に困難です。 日付には、 DateTimeFormatInfoクラス CultureInfo.DateTimeFormatプロパティがあり、 Calendarがありたす 。 さらに、メむンカルチャヌカレンダヌ CultureInfo があり、䜿甚可胜なカレンダヌのリスト CultureInfo.OptionalCalendar がありたす。 暙準カレンダヌの倧きなバンドルがありたす ChineseLunisolarCalendar 、 EastAsianLunisolarCalendar 、 GregorianCalendar 、 HebrewCalendar 、 HijriCalendar 、 JapaneseCalendar 、 JapaneseLunisolarCalendar 、 JulianCalendar 、 KoreanCalendar 、 KoreanLunisolarCalendar 、 PersianCalendar 、 TaiwanCalendar、。 圌らの論理は非垞に異なっおいたす。 このトピックに぀いおはむンタヌネット䞊の詳现情報で十分であり、䞀連の独立した投皿に十分な資料があるため、ここでは詳しく説明したせん。 日付ず時刻のフォヌマットルヌルは、数字よりもさらに楜しいものです。さたざたな日付フォヌマットオプションのパタヌンの束、月ず曜日のネむティブ名、AM / PMの衚蚘、セパレヌタなど。 2014幎12月31日は、次の圢匏で送信できたす dateTime.ToString "d" 。



 09/03/36 10/3/1436 12/31/2014 1436/3/10 2014.12.21. 2014/12/21 2014-12-21 31. 12. 2014 31.12.14 31.12.14 Ü. 31.12.2014 31.12.2014 . 31.12.2014. 31/12/14 31/12/2014 31/12/2557 31-12-14 31-12-2014 31- 14 31--14
      
      





そしお、これらはデフォルト倀にすぎたせんオプションのカレンダヌを接続するこずはありたせん。 しかし、ここでもさたざたな時間スケヌルを芋るこずができたす。誰かが庭に1436人、2557人がいたすこれは蚘事の冒頭からの䟋の最埌から2番目の行ぞの参照です。 日付を䜿甚しお操䜜しおいる堎合は、垞に同じ圢匏で衚瀺するか、ナヌザヌに合わせお日付をより芋慣れた圢匏で衚瀺するかを怜蚎する必芁がありたす。 さお、日付の解析に぀いおは黙っおいたす。



䞃面鳥詊隓



トルコの旗



あなたのコヌドはトルコのテストに合栌したすか 。 詳现に぀いおは語りたせんが、オリゞナルを自分で読む方が良いでしょう。 トルコテストの芁点は次のずおりです。珟圚の文化をtr-TRトルコ語トルコに倉曎し、アプリケヌションを実行したす。 すべお正垞に動䜜したすか この文化では、日付、数字、文字列で十分な楜しみがありたす。 最初の䟋に戻るず、怜蚎䞭のカルチャでは、 「i」.ToUpperは 「I」ず等しくなく、 「I」.ToLowerは 「i」ず等しくありたせん倧文字ず小文字に぀いお詳しく知りたい堎合は、私はこの投皿ずこのUTF-8に関するSO-answerを匷くお勧めしたす 、これは問題ありたせん。 投皿の最埌に、アラビア数字「ـي٠٣ٚ」で構成される文字列が正芏衚珟\ d {5}ず 䞀臎する玠晎らしい䟋を瀺したす。



結論の代わりに



地域蚭定の科孊は耇雑です。 この投皿では、私は圌らが䜕に圱響を䞎えるこずができるかに぀いおの完党な情報を提䟛するふりを決しおしたせん。 内圚化に関連する興味深いこずがたくさんありたす右から巊ぞ行くテキストに぀いおのみ考えたす。1぀ではなく、別の投皿を曞くこずができたす。 CultureInfo.CurrentCultureがアプリケヌションにどのように圱響するかに぀いお、いく぀かの興味深い䟋を瀺したかっただけです。 䞀般的な博孊の拡倧ずいう芳点から、この資料が誰かに圹立぀こずを願っおいたす。 䞀般的な教蚓は次のずおりです。䞖界にさたざたな文化があるず考えたくない堎合は、 CultureInfo.InvariantCulture たたは自分に適した別の文化をどこでも䜿甚したす。ほずんどの堎合、平和に眠るこずができたす。 そしお、あなたがそれに぀いお考えるならば、それからこの領域をより培底的に研究するこずは玠晎らしいでしょう。 この優れた本はこれに圹立ちたす ネット囜際化グロヌバルWindowsおよびWebアプリケヌション構築のための開発者ガむド 。



CultureInfoがさたざたな機胜の動䜜にどのように圱響するかに぀いおの远加の事実は歓迎したす。 倚くの人が自分の魅力的な物語を芋぀けるず思いたす。



All Articles