সংস্কৃতিআইএনফো.ইন্টারভেন্ট সংস্কৃতি বলতে কী বোঝায়?


177

আমার কাছে পাঠ্যের একটি স্ট্রিং রয়েছে:

var foo = "FooBar";

আমি দ্বিতীয় একটি স্ট্রিং ডিক্লেয়ার করতে চাই এবং এটিকে barআমার প্রথম এবং চতুর্থ চরিত্রের সমান করতে fooচাই, তাই আমি এটির মতো এটি করি:

var bar = foo[0].ToString() + foo[3].ToString();

এটি প্রত্যাশা মতো কাজ করে, তবে রিসার্পার আমাকে Culture.InvariantCultureআমার বন্ধনীগুলির ভিতরে রাখার পরামর্শ দিচ্ছেন , সুতরাং এই লাইনটি এভাবে শেষ হবে:

var bar = foo[0].ToString(CultureInfo.InvariantCulture)
        + foo[3].ToString(CultureInfo.InvariantCulture);

এর অর্থ কী, এবং এটি কীভাবে আমার প্রোগ্রামটি চালায় তা প্রভাবিত করবে?


2
: এই তাই প্রশ্ন দেখুন stackoverflow.com/questions/8492449/...
msigman

38
যারা 5 দ্বিতীয় উত্তরটির সন্ধান করছেন তাদের জন্য: সংস্কৃতিআইনফো.আইভার্নিয়ান্টকালচার মানে "আমি যত্ন করি না, আমি প্রথমে সংস্কৃতি জড়িত চাই না। এখন আমি বোবা জিনিসটি ব্যবহার করি।"
অ্যান্ড্রু

5
@ অ্যান্ড্রু আপনি কি এমএস এর সমস্ত ডক্স, পিএলএস লিখতে পারবেন?
ইয়াাত্রিক্স

3
@ ইয়াত্রিক্স হ্যাঁ, নিশ্চিত জিনিস। আমি চাই! কে দিচ্ছে?
অ্যান্ড্রু

উত্তর:


154

সমস্ত সংস্কৃতি তারিখ এবং দশমিক / মুদ্রা মানগুলির জন্য একই বিন্যাস ব্যবহার করে না।

এটি আপনার জন্য কোন ব্যাপার যখন আপনি ইনপুট মান রূপান্তর করছি হবে (পড়ুন) যে স্ট্রিং হিসেবে সংরক্ষণ করা হয় DateTime, float, doubleবা decimal। আপনি প্রদর্শন বা সঞ্চয় করার জন্য উপরের বর্ণিত ডেটা ধরণের স্ট্রিংগুলিতে (লেখার) বিন্যাস করার চেষ্টা করলেও এটি গুরুত্বপূর্ণ will

আপনার তারিখ এবং দশমিক / মুদ্রার মান সময়ের আগে হবে এমন নির্দিষ্ট সংস্কৃতি আপনি যদি জানেন তবে আপনি সেই নির্দিষ্ট CultureInfoসম্পত্তিটি (যেমন CultureInfo("en-GB")) ব্যবহার করতে পারেন । উদাহরণস্বরূপ আপনি যদি কোনও ব্যবহারকারীর ইনপুট আশা করেন।

CultureInfo.InvariantCultureসম্পত্তি যদি আপনি বিন্যাস বা একটি স্ট্রিং যা ব্যবহারকারীর স্থানীয় সেটিংস সফটওয়্যার স্বাধীন এক টুকরা দ্বারা parseable হওয়া উচিত পার্স ব্যবহার করা হয়।

ডিফল্ট মান CultureInfo.InstalledUICultureতাই ডিফল্ট সংস্কৃতিআইএনফো বাস্তবায়নকারী ওএসের সেটিংসের উপর নির্ভর করে। এ কারণেই আপনার সর্বদা নিশ্চিত হওয়া উচিত যে সংস্কৃতি তথ্যটি আপনার অভিপ্রায় অনুসারে ফিট করে ( ভাল গাইডলাইনের জন্য মার্টিনের উত্তর দেখুন )।


3
"এন-ইউএস" যদিও, আমি মনে করি এটি আসলে আপনার সিস্টেম সেটিংসের উপর নির্ভর করে।
ট্র্যাকার 1

44
ডিফল্ট মান হয় না en-US। এটি স্থানীয় সংস্কৃতি। এবং InvariantCultureযখন আপনি সংস্কৃতিটি নিরপেক্ষ বিন্যাস চান যা স্থানীয় সিস্টেম থেকে স্বতন্ত্র থাকে তখন ব্যবহৃত হয়। উদাহরণস্বরূপ পাঠ্য ভিত্তিক ফাইল ফর্ম্যাটগুলির সাথে কাজ করার সময়।
কোডসইনচওস

23
@ কোডসইনচাউস মন্তব্য যুক্ত করতে: দাবি যে ডিফল্ট মান হ'ল কালচারআইনফো ("এন-ইউএস") সহজভাবে ভুল। এছাড়াও, কালচারিআইনফো.আইভার্নিয়ান্টকালচার সম্পত্তিটি বিবৃতি ব্যবহৃত হবে যখন আপনি যখন সময়ের আগে নিশ্চিত হন না যে আপনার তারিখগুলি এবং দশমিক / মুদ্রার মানগুলি কী হবে সেগুলি বিভ্রান্তিকর। বর্তমান, হানাদার বা একটি নির্দিষ্ট সংস্কৃতি ব্যবহার করা এমন একটি বিষয় যা সচেতন সিদ্ধান্ত হওয়া উচিত এবং যদি আপনি এটির ভুল হয়ে থাকেন তবে আপনি আপনার (ইউএস-মার্কিন) ব্যবহারকারীদের বিচ্ছিন্ন করতে পারেন। আপনি যদি "অনিশ্চিত" হন তবে আপনার আক্রমণকারী সংস্কৃতি ব্যবহার করা উচিত নয়। আপনার আগে সময়ের নিশ্চিত হওয়া দরকার।
মার্টিন লিভারেজ

3
অন্যান্য মন্তব্যে উল্লিখিত সমস্যাগুলির কারণে -1। মার্টিনের উত্তরটি আরও সহায়ক কারণ এটি আপনাকে প্রতিটি সংস্কৃতি কখন ব্যবহার করবেন এবং ব্যবহার করবেন না তা বলে।
এড গ্রাভস

"আপনি যদি আমেরিকান ইংরাজীতে একচেটিয়াভাবে কাজ করে থাকেন তবে আপনার এটি নিয়ে চিন্তা করার দরকার নেই" ": ভুল, আপনি আমেরিকান ইংরাজীতে একচেটিয়াভাবে কাজ করতে পারেন তবে সফ্টওয়্যারটি" এন-জিবি "বা একটি" ডি "তে চলতে পারে -ডি "সার্ভার, তারপরে এটি একটি পার্থক্য আনবে, এবং এটি ক্লায়েন্টের সংস্কৃতি নিতে পারে (যদি আপনি ওয়েবকনফাইগ ফাইলটিতে এটি বলেন), এবং এটি" এন-ইউএস "নাও হতে পারে ...
স্টেফান স্টেইগার

151

যখন সংখ্যা, তারিখ এবং সময়গুলিকে স্ট্রিংয়ে ফর্ম্যাট করা হয় বা স্ট্রিং থেকে পার্স করা হয় এটি কীভাবে হয় তা নির্ধারণের জন্য সংস্কৃতি ব্যবহৃত হয়। যেমন প্রভাবশালী en-USসংস্কৃতিতে আপনার এই স্ট্রিং প্রতিনিধিত্ব রয়েছে:

  • 1,000,000.00 - দুই অঙ্কের ভগ্নাংশ সহ এক মিলিয়ন
  • 1/29/2013 - এই পোস্টের তারিখ

আমার সংস্কৃতিতে ( da-DK) মানগুলির এই স্ট্রিং প্রতিনিধিত্ব থাকে:

  • 1.000.000,00 - দুই অঙ্কের ভগ্নাংশ সহ এক মিলিয়ন
  • 29-01-2013 - এই পোস্টের তারিখ

উইন্ডোজ অপারেটিং সিস্টেমে ব্যবহারকারীর নাম্বার এবং তারিখ / সময়গুলি কীভাবে বিন্যাস করা যায় তা কাস্টমাইজ করতে পারে এবং তার অপারেটিং সিস্টেমের সংস্কৃতির চেয়ে অন্য সংস্কৃতিও বেছে নিতে পারে। ব্যবহৃত বিন্যাসটি ব্যবহারকারীর পছন্দ যা এটি হওয়া উচিত।

সুতরাং যখন আপনি একটি মান ফরম্যাট উদাহরণস্বরূপ ব্যবহার ব্যবহারকারীকে প্রদর্শিত করা ToStringবা String.Formatবা ব্যবহার করে একটি স্ট্রিং থেকে পার্স DateTime.Parseবা Decimal.Parseডিফল্ট ব্যবহার করা CultureInfo.CurrentCulture। এটি ব্যবহারকারীকে বিন্যাস নিয়ন্ত্রণ করতে দেয়।

যাইহোক, প্রচুর স্ট্রিং ফর্ম্যাটিং এবং পার্সিং আসলে অ্যাপ্লিকেশন এবং ব্যবহারকারীর মধ্যে নয় বরং অ্যাপ্লিকেশন এবং কিছু ডেটা ফর্ম্যাট (যেমন একটি এক্সএমএল বা সিএসভি ফাইল) এর মধ্যে বিনিময় হয়। CultureInfo.CurrentCultureসেক্ষেত্রে আপনি ব্যবহার করতে চান না কারণ যদি বিভিন্ন সংস্কৃতির সাথে ফর্ম্যাট এবং পার্সিং করা হয় তবে এটি ভেঙে যেতে পারে। CultureInfo.InvariantCultureসেক্ষেত্রে আপনি ব্যবহার করতে চান (যা en-USসংস্কৃতির উপর ভিত্তি করে )। এটি নিশ্চিত করে যে মানগুলি সমস্যা ছাড়াই রাউন্ডট্রিপ করতে পারে।

রিশার্পার আপনাকে সতর্কবার্তা দেওয়ার কারণটি হ'ল কিছু অ্যাপ্লিকেশন লেখক এই পার্থক্য সম্পর্কে অবগত নয় যা অনিচ্ছাকৃত ফলাফলের দিকে নিয়ে যেতে পারে তবে তারা এটিকে কখনই আবিষ্কার করতে পারে না কারণ তাদের CultureInfo.CurrentCultureসাথে en-USএকই আচরণ রয়েছে CultureInfo.InvariantCulture। তবে অ্যাপ্লিকেশনটি অন্য সংস্কৃতিতে ব্যবহার করা মাত্রই যেখানে একটি সংস্কৃতি বিন্যাসকরণের জন্য এবং অন্যটি অ্যাপ্লিকেশনকে বিশ্লেষণের জন্য ব্যবহার করার সুযোগ রয়েছে তা ভেঙে যেতে পারে।

সুতরাং এটি সংক্ষেপে:

  • CultureInfo.CurrentCultureআপনি যদি কোনও ব্যবহারকারীর স্ট্রিংটি ফর্ম্যাট করতে বা পার্সিং করেন তবে (ডিফল্ট) ব্যবহার করুন ।
  • ব্যবহার করুন CultureInfo.InvariantCultureযদি আপনি বিন্যাস বা একটি স্ট্রিং, যাতে সফ্টওয়্যার এক টুকরা দ্বারা parseable হওয়া উচিত পার্স।
  • কদাচিৎ একটি নির্দিষ্ট জাতীয় সংস্কৃতি ব্যবহার করুন কারণ ব্যবহারকারী কীভাবে ফর্ম্যাট এবং পার্সিং করা হয় তা নিয়ন্ত্রণ করতে অক্ষম।

1
শেষ পয়েন্টটি সম্পর্কে, "সুনির্দিষ্টভাবে একটি নির্দিষ্ট জাতীয় সংস্কৃতি ব্যবহার করুন ...", কি মুদ্রার বিন্যাসটি ব্যতিক্রম হতে পারে? উদাহরণস্বরূপ, আমার যদি Decimalইউএস ডলারের একটি নির্দিষ্ট মান সমেত একটি ভেরিয়েবল থাকে তবে আমি কি en-USইউরোতে কোনও সংখ্যার মতো ফলাফল পাবে না তা নিশ্চিত করার জন্য আমি এটি ব্যতিক্রম করে সংস্কৃতি হিসাবে ব্যবহার করতে চাই? আমি চেষ্টা করেছিলাম CultureInfo.InvariantCulture , তবে এটি মুদ্রার চিহ্নিতকারীর জন্য পেয়েছি ¤, সুতরাং আমি নিশ্চিত নই যে এটি সঠিক উপায়।
জেফ বি

1
@ জেফব্রিডগম্যান: আমার পরামর্শটি কেবলমাত্র সাধারণ পরামর্শ এবং আপনার নির্দিষ্ট ক্ষেত্রে প্রয়োগ নাও হতে পারে। তবে আমি ভাবব যে আপনি দশমিক পয়েন্টটি (কমা বা বিন্দু) প্রদর্শনের উপায়টি এমন কিছু হওয়া উচিত যা ব্যবহারকারীরা নিয়ন্ত্রণ করে (যেমন ব্যবহার CultureInfo.CurrentCulture)। আপনার যদি কোনও সংখ্যা প্রদর্শন করার পাশাপাশি মুদ্রার প্রয়োজন হয় তবে সম্ভবত আপনার এটি একটি সামঞ্জস্যপূর্ণ পদ্ধতিতে করা উচিত, অর্থাত্ একটি ব্যবহার না করে CultureInfoপরিবর্তে তিনটি বর্ণের মুদ্রার কোডটি ব্যবহার করুন USD 1,234.56। তারপরে আপনি কোনও সংস্কৃতিতে মুদ্রা ম্যাপিংয়ের সমস্যায় পড়বেন না।
মার্টিন লিভারেজ

26

মাইক্রোসফ্ট অনুসারে:

সংস্কৃতিআইএনফো.আইভার্নিয়ান্টকালচার সম্পত্তিটি নিরপেক্ষ বা নির্দিষ্ট সংস্কৃতি নয়। এটি একটি তৃতীয় ধরণের সংস্কৃতি যা সংস্কৃতি-সংবেদনশীল। এটি ইংরেজি ভাষার সাথে সম্পর্কিত তবে কোনও দেশ বা অঞ্চলের সাথে নয়।

( http://msdn.microsoft.com/en-us/library/4c5zdc6a(vs.71).aspx থেকে )

সুতরাং ইনভেরেন্ট কালচার সংস্কৃতি "এন-ইউএস" এর সাথে সমান হলেও একই নয়। আপনি যদি লিখেন:

var d = DateTime.Now;
var s1 = d.ToString(CultureInfo.InvariantCulture);   // "05/21/2014 22:09:28"
var s2 = d.ToString(new CultureInfo("en-US"));       // "5/21/2014 10:09:28 PM"

তারপরে এস 1 এবং এস 2 এর মিল ফর্ম্যাট থাকবে তবে ইনভায়ারান্টকালচার নেতৃস্থানীয় জিরো যুক্ত করে এবং "এন-ইউএস" এএম বা প্রধানমন্ত্রী ব্যবহার করে।

সুতরাং ইনভারিয়েন্টকালচার অভ্যন্তরীণ ব্যবহারের জন্য ভাল, যখন আপনি যেমন কোনও পাঠ্য-ফাইলে একটি তারিখ সংরক্ষণ করেন বা ডেটা পার্স করেন। এবং আপনি নির্দিষ্ট ব্যবহারকারীর কাছে ডেটা (তারিখ, মুদ্রা ...) উপস্থাপন করার সময় একটি নির্দিষ্ট সংস্কৃতিআইএনফো আরও ভাল।


3
আমি নিশ্চিত করার জন্য আপনার উদাহরণ কোডটি চালিয়েছি: ইনভায়ারেন্ট কালচার আমেরিকান এমএম / ডিডি / ইয়েআই ব্যবহার করে আইএসও 8601 বছর-প্রথম-প্রথম ফর্ম্যাটটি অনুসরণ না করে। তা সত্ত্বেও এটি মানুষের ব্যবহারের পরিবর্তে পোর্টেবল স্টোরেজ এবং যান্ত্রিক প্রক্রিয়াজাতকরণের উদ্দেশ্যে intended কী বিভ্রান্তিকর
ম্যাক্স ব্যারাক্লফ

4

সংখ্যার (দশমিক পয়েন্ট, পরিমাণে কমা) মতো জিনিসগুলির জন্য এগুলি সাধারণত নির্দিষ্ট সংস্কৃতিতে পছন্দ করা হয়।

এটি করার একটি উপযুক্ত উপায় এটি সংস্কৃতি স্তরে (জার্মানদের জন্য) এটির মতো সেট করা হবে:

Thread.CurrentThread.CurrentCulture.NumberFormat = new CultureInfo("de").NumberFormat;

4

জেটব্রেইনগুলি যুক্তিসঙ্গত ব্যাখ্যা দেয় ,

"ডেটা স্ট্রাকচারকে টেক্সটে রূপান্তরণ মূলত বর্তমান সংস্কৃতির উপর নির্ভরশীল এবং কোডটি এমন কোনও মেশিনে কার্যকর করা হয় যখন এর লোকেল মূল বিকাশকারীটির থেকে পৃথক হয় amb অস্পষ্টতা রোধ করতে, রিসার্ফ আপনাকে সতর্ক করে দেয় কোডে এমন কোনও দৃষ্টান্ত রয়েছে যেখানে এই জাতীয় সমস্যা দেখা দিতে পারে। "

তবে আমি যদি জানি এমন একটি সাইটে কাজ করছি যেটি কেবল ইংরেজী ভাষায় থাকবে তবে আমি কেবল পরামর্শটি এড়িয়ে চলেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.