সি # তে .resx ফাইল থেকে স্ট্রিং পড়ুন


100

সি # তে .resx ফাইল থেকে স্ট্রিংটি কীভাবে পড়বেন? আমাকে গাইডলাইন প্রেরণ করুন। ধাপে ধাপে


এই লিঙ্কটি একবার দেখুন , এটি সাহায্য করা উচিত।
অ্যাড্রিয়ান স্ট্যান্ডার

15
কেন? যদি তারা আমার প্রশ্নগুলিতে আমাকে সন্তুষ্ট না করে তবে আমাকে কেন ভুল পরামর্শ গ্রহণ করতে হবে?
রেড সোয়ান

4
যদি প্রকল্পের বৈশিষ্ট্যের অধীনে ভিজ্যুয়াল স্টুডিও ব্যবহার করে .resx ফাইলটি যুক্ত করা হয় তবে স্ট্রিংটিতে অ্যাক্সেস করার সহজ এবং কম ত্রুটির প্রবণতার জন্য আমার উত্তরটি দেখুন ।
জোশকড

উত্তর:


74

এই উদাহরণটি রিসোর্স ম্যানেজ.গেটস্ট্রিং () এর এমএসডিএন পৃষ্ঠা থেকে এসেছে :

// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("items", Assembly.GetExecutingAssembly());

// Retrieve the value of the string resource named "welcome".
// The resource manager will retrieve the value of the  
// localized resource using the caller's current culture setting.
String str = rm.GetString("welcome");

4
এমএসডিএন পৃষ্ঠা থেকে আমি উল্লেখ করেছি: বেসনেম সংস্থান ফাইল ছাড়া সম্পদ ফাইলের মূল নাম তবে কোনও সম্পূর্ণ যোগ্যতাসম্পন্ন নামের স্থান সহ। উদাহরণস্বরূপ, মাই অ্যাপ্লিকেশন.মাইআরসোর্স.ইন-ইউএস.সোর্সস নামের রিসোর্স ফাইলের মূল নাম হ'ল মাই অ্যাপ্লিকেশন.মাইআর রিসোর্স।
জেফএইচ

4
আইটেমগুলি == রিসোর্স ফাইলের নাম স্থান

9
দুর্বল উদাহরণ: আপনার ব্যাখ্যা করা উচিত যে আইটেমগুলি হ'ল নামের স্থান + উত্সের মূল ধরণ
অ্যাক্টিভএক্স

আপনি কেবল ResourceManagerতখনই প্রয়োজন যখন আপনি কোনও বাহ্যিক সংস্থান লোড করতে চান। <Namespace>.Propertiesপরিবর্তে ব্যবহার করুন।
ইউশা আলেয়ুব

132

ResourceManagerআপনি যদি কোনও বাহ্যিক উত্স থেকে লোড না করেন তবে প্রয়োজন হবে না ।
বেশিরভাগ জিনিসের জন্য, বলুন যে আপনি একটি প্রকল্প তৈরি করেছেন (ডিএলএল, উইনফোর্ডস, যাই হোক না কেন) আপনি কেবলমাত্র প্রকল্পের নাম স্থান, "সংস্থানগুলি" এবং সংস্থান সনাক্তকারী ব্যবহার করেন use যেমন:

একটি প্রকল্পের নাম স্থান ধরে নেওয়া: UberSoft.WidgetPro

এবং আপনার রেক্সে রয়েছে:

রেক্স কন্টেন্ট উদাহরণ

আপনি কেবল ব্যবহার করতে পারেন:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

4
এই উত্তরের জন্য একটি টন ধন্যবাদ।
বৈশালী

4
ধন্যবাদ, এটি একটি উত্তর হিসাবে চিহ্নিত করা উচিত। এই প্রশ্নের "উত্তর" এর চেয়ে অনেক পরিষ্কার এবং ক্লিনার।
জেরোইন জোনকম্যান

প্রকার বা নেমস্পেসের অস্তিত্ব নেই
পল ম্যাকার্থি

53

এটি চেষ্টা করুন, আমার জন্য কাজ করে .. সহজ

ধরে নিন যে আপনার রিসোর্স ফাইলটির নাম "TestResource.resx", এবং আপনি তখন গতিশীলভাবে কী পাস করতে চান,

string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);

নেমস্পেস যুক্ত করুন

using System.Resources;

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

আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: 'সংস্থানগুলি' 'গেটস্ট্রিং'-এর সংজ্ঞা দেয় না definition
লেচুচিকো

আপনি কেবল ResourceManagerতখনই প্রয়োজন যখন আপনি কোনও বাহ্যিক সংস্থান লোড করতে চান। <Namespace>.Propertiesপরিবর্তে ব্যবহার করুন।
ইউশা আলেয়ুব

30

.Resx ফাইলটি খুলুন এবং "অ্যাক্সেস মডিফায়ার "টিকে সর্বজনীনতে সেট করুন।

var <Variable Name> = Properties.Resources.<Resource Name>

4
এই পদ্ধতিটি কি একাধিক রিসোর্স ফাইল (ভাষা) দিয়ে কাজ করে, আমি যেখানে দেখি তারা
রিসোর্সস ম্যানেজার

4
কাজ করে না. সম্পত্তিগুলির পরে আমার সংস্থান ফাইলটি দেখানো হয় না
es উত্স

28

ধরে নিলাম .resx ফাইলটি প্রকল্পের বৈশিষ্ট্যের অধীনে ভিজ্যুয়াল স্টুডিও ব্যবহার করে যুক্ত করা হয়েছে, স্ট্রিংটিতে অ্যাক্সেস করার সহজ এবং কম ত্রুটিযুক্ত প্রবণতা রয়েছে।

  1. সলিউশন এক্সপ্লোরারে .resx ফাইলটি প্রসারিত করার সময় একটি .Designer.cs ফাইল প্রদর্শন করা উচিত।
  2. খোলার সময় .Designer.cs ফাইলটির একটি বৈশিষ্ট্য নেমস্পেস এবং একটি অভ্যন্তরীণ শ্রেণি থাকে। এই উদাহরণের জন্য ধরুন শ্রেণীর নামকরণ করা হয়েছে সংস্থানসমূহ।
  3. স্ট্রিংটি অ্যাক্সেস করা এতটা সহজ:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  4. JoshCodes.Core.Testing.Unitপ্রকল্পের ডিফল্ট নেমস্পেস দিয়ে প্রতিস্থাপন করুন ।

  5. আপনার স্ট্রিং রিসোর্সের নামের সাথে "exampleXML" প্রতিস্থাপন করুন।

4
খুব উপকারী. ধন্যবাদ
এজমিন

17

@ জেফএইচএইচ উত্তর অনুসরণ করে, আমি স্ট্রিম typeof()অ্যাসেম্বলি নামের চেয়ে ব্যবহার করার পরামর্শ দিই ।

    var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
    string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));

10

যদি কোনও কারণে আপনি আপনার রিসোর্স ফাইলগুলি অ্যাপ_গ্লোবাল রিসোর্সগুলিতে রাখতে না পারেন, তবে আপনি সরাসরি রেসএক্সআরসোর্স রিডার বা এক্সএমএল রিডার ব্যবহার করে রিসোর্স ফাইলগুলি খুলতে পারেন।

রেসএক্স রিসোর্স রিডার ব্যবহার করার জন্য এখানে নমুনা কোড:

   public static string GetResourceString(string ResourceName, string strKey)
   {


       //Figure out the path to where your resource files are located.
       //In this example, I'm figuring out the path to where a SharePoint feature directory is relative to a custom SharePoint layouts subdirectory.  

       string currentDirectory = Path.GetDirectoryName(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"]));

       string featureDirectory = Path.GetFullPath(currentDirectory + "\\..\\..\\..\\FEATURES\\FEATURENAME\\Resources");

       //Look for files containing the name
       List<string> resourceFileNameList = new List<string>();

       DirectoryInfo resourceDir = new DirectoryInfo(featureDirectory);

       var resourceFiles = resourceDir.GetFiles();

       foreach (FileInfo fi in resourceFiles)
       {
           if (fi.Name.Length > ResourceName.Length+1 && fi.Name.ToLower().Substring(0,ResourceName.Length + 1) == ResourceName.ToLower()+".")
           {
               resourceFileNameList.Add(fi.Name);

           }
        }

       if (resourceFileNameList.Count <= 0)
       { return ""; }


       //Get the current culture
       string strCulture = CultureInfo.CurrentCulture.Name;

       string[] cultureStrings = strCulture.Split('-');

       string strLanguageString = cultureStrings[0];


       string strResourceFileName="";
       string strDefaultFileName = resourceFileNameList[0];
       foreach (string resFileName in resourceFileNameList)
       {
           if (resFileName.ToLower() == ResourceName.ToLower() + ".resx")
           {
               strDefaultFileName = resFileName;
           }

           if (resFileName.ToLower() == ResourceName.ToLower() + "."+strCulture.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
           else if (resFileName.ToLower() == ResourceName.ToLower() + "." + strLanguageString.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
       }

       if (strResourceFileName == "")
       {
           strResourceFileName = strDefaultFileName;
       }



       //Use resx resource reader to read the file in.
       //https://msdn.microsoft.com/en-us/library/system.resources.resxresourcereader.aspx

       ResXResourceReader rsxr = new ResXResourceReader(featureDirectory + "\\"+ strResourceFileName);         

       //IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();
       foreach (DictionaryEntry d in rsxr)
       {
           if (d.Key.ToString().ToLower() == strKey.ToLower())
           {
               return d.Value.ToString();
           }
       }


       return "";
   }

ধন্যবাদ, নোট করুন যে আপনাকে System.Windows.Formsব্যবহারের জন্য একটি রেফারেন্স যুক্ত করতে হবে System.Resources.ResXResourceReader। এছাড়াও, আপনি এর var enumerator = rsxr.OfType<DictionaryEntry>();পরিবর্তে লিনকুইটি করতে এবং ব্যবহার করতে পারেন ।
ডান্ক

কীভাবে একটি রেক্স ফাইল "পড়ুন, পার্স এবং লোড করুন" সম্পর্কে নিবন্ধ বা পোস্টগুলি খুঁজে পাওয়া খুব কঠিন। আপনি যা পান তা হ'ল "আপনার প্রকল্পের স্ট্রিংয়ের জন্য ধারক হিসাবে রেসেক্স ব্যবহার করুন"। এই উত্তরের জন্য আপনাকে ধন্যবাদ!
সাইমন

9

একবার আপনি সমাধান / সমাবেশে কোনও সংস্থান (নাম: রিসোর্সনাম এবং মান: রিসোর্সভ্যালু) যুক্ত করলে প্রয়োজনীয় সংস্থানটি পেতে আপনি কেবল "প্রোপার্টি.সোর্স.সেসোসরনাম" ব্যবহার করতে পারেন।


7

আমি ভিজুয়াল স্টুডিওর মাধ্যমে .resx ফাইলটি যুক্ত করেছি। এটি designer.csচাইলে যে কোনও কীটির মানটি তাত্ক্ষণিকভাবে ফিরিয়ে দিতে সম্পত্তি সহ একটি ফাইল তৈরি করেছে । উদাহরণস্বরূপ, এটি ডিজাইনার ফাইল থেকে কিছু স্বয়ংক্রিয় উত্পন্ন কোড।

/// <summary>
///   Looks up a localized string similar to When creating a Commissioning change request, you must select valid Assignees, a Type, a Component, and at least one (1) affected unit..
/// </summary>
public static string MyErrorMessage {
    get {
        return ResourceManager.GetString("MyErrorMessage", resourceCulture);
    }
}

এইভাবে, আমি সহজভাবে করতে সক্ষম হয়েছি:

string message = Errors.MyErrorMessage;

কোথায় Errorsহয় Errors.resxভিসুয়াল স্টুডিও মাধ্যমে তৈরি ফাইল এবং MyErrorMessageচাবিকাঠি।


হ্যাঁ, আমি সবেমাত্র এটি করেছি VS2015। ডান ক্লিক করুন, "সংস্থানসমূহ" ফাইল যুক্ত করুন এবং যে কোনও কীগুলি "ডটেটেবল" হয়ে যায়। সুতরাং একটি কী "স্ক্রিপ্ট" সহ "MyResx.resx" স্ট্রিং স্ক্রিপ্টভ্যালিউ = MyResx.Script এর মতো অ্যাক্সেস করা যায়;
এমেরি.নোয়েল

5

আমি সরাসরি আমার প্রকল্পে আমার সংস্থান ফাইল যুক্ত করেছি, এবং তাই আমি রেক্স ফাইলের নাম দিয়ে ঠিক সূক্ষ্ম ভিতরে স্ট্রিংগুলি অ্যাক্সেস করতে সক্ষম হয়েছি।

উদাহরণ: রিসোর্স 1.রেক্সে, কী "রিসোর্সকি" -> স্ট্রিং "ডেটাস্ট্রিং"। স্ট্রিংটি "ডেটাস্ট্রিং" পেতে, আমি কেবল রিসোর্স 1. রিসোর্সকি রাখি।

এটি না করার কারণ থাকতে পারে যা সম্পর্কে আমি জানিনা, তবে এটি আমার পক্ষে কাজ করেছিল।


3

এটি করার সবচেয়ে সহজ উপায় হ'ল:

  1. একটি অ্যাপ_গ্লোবাল রিসোর্স সিস্টেম ফোল্ডার তৈরি করুন এবং এটিতে একটি উত্স ফাইল যুক্ত করুন যেমন ম্যাসেজ.সেক্স
  2. রিসোর্স ফাইলে আপনার এন্ট্রিগুলি তৈরি করুন যেমন ত্রুটি এমএসজি = এটি একটি ত্রুটি।
  3. তারপরে সেই প্রবেশটিতে অ্যাক্সেস করতে: স্ট্রিং ত্রুটিগুলি = রিসোর্স.মেসেজগুলি E

2

রিসোর্স ফাইল থেকে মান পাওয়ার সহজ উপায়। প্রকল্পে রিসোর্স ফাইল যুক্ত করুন। এখন আপনি যেখানে স্ট্রিংটি পেতে চান আমার ক্ষেত্রে এটি পাঠ্য ব্লক (সিলভারলাইট) ছিল was কোনও নামস্থানও যুক্ত করার দরকার নেই ts এটি আমার ক্ষেত্রে কাজ করে

txtStatus.Text = Constants.RefractionUpdateMessage;

প্রকল্পে কনস্ট্যান্টগুলি আমার সংস্থান ফাইলের নাম।এখানে আমার সংস্থান ফাইলটি দেখতে কেমন লাগে


0

সংস্থান পুনরুদ্ধার করতে একটি সংস্থান পরিচালক তৈরি করুন।

ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());

String str = rm.GetString("param2");

প্যারা 1

প্যারাম 2 = রিসোর্স ফাইল থেকে পুনরুদ্ধার করা স্ট্রিংয়ের নাম


0

এটি আমার পক্ষে কাজ করে। বলুন আপনার কাছে একটি স্ট্রিংস.রেক্স ফাইল রয়েছে এতে স্ট্রিং ঠিক আছে। এটি পড়তে

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