আমি ঠিক কাজ করতে স্থানীয়করণ পেতে পারে বলে মনে হচ্ছে না।
আমার একটি ক্লাস লাইব্রেরি আছে। এখন আমি সেখানে রেক্স ফাইল তৈরি করতে এবং থ্রেড সংস্কৃতির উপর ভিত্তি করে কিছু মান ফিরিয়ে দিতে চাই।
আমি এটা কিভাবে করবো?
আমি ঠিক কাজ করতে স্থানীয়করণ পেতে পারে বলে মনে হচ্ছে না।
আমার একটি ক্লাস লাইব্রেরি আছে। এখন আমি সেখানে রেক্স ফাইল তৈরি করতে এবং থ্রেড সংস্কৃতির উপর ভিত্তি করে কিছু মান ফিরিয়ে দিতে চাই।
আমি এটা কিভাবে করবো?
উত্তর:
strings.resxSystem.ThreadingএবংSystem.Globalizationএই কোডটি চালান:
Console.WriteLine(Properties.strings.Hello);
এটি "হ্যালো" মুদ্রণ করা উচিত।
এখন, "স্ট্রিংস.ফারেক্সেক্স" নামে একটি নতুন সংস্থান ফাইল যুক্ত করুন ("ফ্রি" অংশটি নোট করুন; এটিতে ফরাসি ভাষায় সংস্থান থাকবে)। স্ট্রিংস.রেক্সের মতো একই নামের সাথে একটি স্ট্রিং রিসোর্স যুক্ত করুন তবে ফ্রেঞ্চ (নাম = "হ্যালো", মান = "সালুট") সহ মান সহ। এখন, আপনি যদি নিম্নলিখিত কোডটি চালনা করেন তবে এটি সলুট মুদ্রণ করা উচিত:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);
যা ঘটে তা হ'ল সিস্টেমটি "ফ্রি-এফআর" এর জন্য কোনও সংস্থার সন্ধান করবে। এটি কোনওটি খুঁজে পাবে না (যেহেতু আমরা আপনার ফাইলে "ফরাসী" নির্দিষ্ট করেছি) It এটি "আরআর" যাচাই করে (এবং ব্যবহার করে) তা পরীক্ষা করে ফিরে আসবে।
নিম্নলিখিত কোডটি "হ্যালো" মুদ্রণ করবে:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Properties.strings.Hello);
কারণ এটি কোনও "এন-ইউএস" রিসোর্স এবং কোনও "এন" রিসোর্স খুঁজে পায় না, তাই এটি ডিফল্টে ফিরে আসবে, এটি আমরা প্রথম থেকেই যুক্ত করেছি।
প্রয়োজনে আপনি আরও সুনির্দিষ্ট সংস্থান সহ ফাইলগুলি তৈরি করতে পারেন (উদাহরণস্বরূপ ফ্রান্স এবং কানাডায় ফরাসী ভাষার জন্য যথাক্রমে স্ট্রিংস.ফ্র-এফআর.রেক্স এবং স্ট্রিংস.ফ্র-সিএ.রেক্স)। এই জাতীয় প্রতিটি ফাইলে আপনাকে সেই স্ট্রিংগুলির জন্য সংস্থান যুক্ত করতে হবে যা এটিতে ফিরে আসার সংস্থান থেকে পৃথক হবে। সুতরাং যদি কোনও পাঠ্য ফ্রান্স এবং কানাডায় একই থাকে তবে আপনি এটি স্ট্রিংস.ফ্রেরেসেক্সে রাখতে পারেন, যখন কানাডিয়ান ফরাসিতে আলাদা স্ট্রিংগুলি স্ট্রিংস.ফ্রে-সিএ.রেক্সে যেতে পারে।
Access ModifierPublicউত্সের শ্রেণীর উত্পন্ন করার জন্য সেট করা উচিত । সম্পত্তিটি নেমস্পেসে ক্লাসটি অপরিহার্যভাবে নয়, আপনি যেখানে .resx ফাইলটি রেখেছেন।
এটি আসলে বেশ সহজ। উদাহরণস্বরূপ একটি নতুন সংস্থান ফাইল তৈরি করুন Strings.resx। সেট Access Modifierকরুন Public। অ্যাপ্রিরিওয়েট ফাইল টেম্পলেট ব্যবহার করুন, সুতরাং ভিজ্যুয়াল স্টুডিও স্বয়ংক্রিয়ভাবে একটি অ্যাক্সেসর শ্রেণি তৈরি করবে (নামটি Stringsএই ক্ষেত্রে হবে)। এটি আপনার ডিফল্ট ভাষা।
এখন, আপনি যখন জার্মান স্থানীয়করণ যুক্ত করতে চান, একটি স্থানীয় রেক্স ফাইল যুক্ত করুন। এটি সাধারণত Strings.de.resxএই ক্ষেত্রে হবে। যদি আপনি অস্ট্রিয়া এর জন্য অতিরিক্ত স্থানীয়করণ যুক্ত করতে চান তবে আপনি অতিরিক্ত একটি তৈরি করবেন Strings.de-AT.resx।
এখন একটি স্ট্রিং তৈরি করুন - আসুন নামের সাথে একটি স্ট্রিং বলি HelloWorld। আপনার মধ্যে Strings.resx, "হ্যালো, ওয়ার্ল্ড!" মান সহ এই স্ট্রিংটি যুক্ত করুন। ইন Strings.de.resx, "হ্যালো, ওয়েল্ট!" যোগ করুন। এবং এর মধ্যে Strings.de-AT.resx, "সার্ভাস, ওয়েল্ট!" যোগ করুন। এতক্ষণে এটাই।
এখন আপনার কাছে এই উত্পন্ন Stringsশ্রেণিটি রয়েছে এবং এটির একজন গেটর সহ একটি সম্পত্তি রয়েছে HelloWorld। এই সম্পত্তিটি পাওয়ার ফলে "সার্ভাস, ওয়েল্ট!" যখন আপনার লোকেল ডি-এটি, "হ্যালো, ওয়েল্ট! যখন আপনার লোকেলটি অন্য কোনও ডি লোকেল (ডি-ডি এবং ডি-সিএইচ সহ) এবং যখন আপনার লোকেল অন্য কোনও কিছু থাকে তখন" হ্যালো, ওয়ার্ল্ড! " স্থানীয়ীকৃত সংস্করণে অনুপস্থিত, উত্সের পরিচালকটি সবচেয়ে বেশি বিশেষজ্ঞ থেকে শুরু করে আক্রমণকারী সংস্থান পর্যন্ত চেইনটি স্বয়ংক্রিয়ভাবে চালিয়ে যাবে।
আপনি ResourceManagerকীভাবে জিনিস লোড করছেন সে সম্পর্কে আরও নিয়ন্ত্রণের জন্য আপনি ক্লাসটি ব্যবহার করতে পারেন । উত্পন্ন Stringsশ্রেণি এটি পাশাপাশি ব্যবহার করে।
ফর্মটিতে স্থানীয়করণ যুক্ত করতে @ ফ্রেড্রিক মার্কের স্ট্রিংয়ের দুর্দান্ত উত্তরটি নীচে করুন :
"Localizable"থেকেtrueLanguageসম্পত্তিটি আপনার পছন্দ মতো ভাষায় পরিবর্তন করুন (সবার সাথে একটি চমৎকার ড্রপ-ডাউন থেকে)সম্পাদনা: এটি উইন্ডোজ ফর্ম স্থানীয়করণের উপরের এমএসডিএন নিবন্ধটি মূলত আমার লিঙ্ক করা নয় ... তবে প্রয়োজনে আরও আলো ফেলতে পারে। (পুরানোটি কেড়ে নেওয়া হয়েছে)
এফ.মার্কের দুর্দান্ত উত্তর। অ্যাপ্লিকেশন প্রকাশের পরে আপনি যদি অনুবাদটি আপডেট করতে চান বা নতুন ভাষাগুলি যুক্ত করতে চান তবে আপনি আটকে রয়েছেন, কারণ আপনাকে সর্বদা রিসোম্পাইল করতে হবে রিসোর্সগুলি তৈরি করতে। Dll।
রিসোর্স ডেলকে ম্যানুয়ালি সংকলনের এখানে একটি সমাধান। এটি resgen.exe এবং al.exe সরঞ্জামগুলি ব্যবহার করে (এসডিকে দিয়ে ইনস্টল করা)।
বলুন যে আপনার কাছে স্ট্রিংস.ফ্রেসেক্স রিসোর্স ফাইল রয়েছে, আপনি নীচের ব্যাচটি দিয়ে একটি সংস্থানীয় সংস্থান সংকলন করতে পারেন:
resgen.exe /compile Strings.fr.resx,WpfRibbonApplication1.Strings.fr.resources
Al.exe /t:lib /embed:WpfRibbonApplication1.Strings.fr.resources /culture:"fr" /out:"WpfRibbonApplication1.resources.dll"
del WpfRibbonApplication1.Strings.fr.resources
pause
ফাইলের নামগুলিতে আসল নেমস্পেসটি নিশ্চিত রাখবেন (এখানে "WpfRibbon অ্যাপ্লিকেশন 1")
@ ফ্রেড্রিক মার্ক উত্তরের একটি সংশোধন ও সম্প্রসারণ ।
strings.resxআপনার প্রকল্পে একটি সংস্থান ফাইল যুক্ত করুন (বা অন্য কোনও ফাইলের নাম)Access Modifierকরুন Public(খোলা strings.resxফাইল ট্যাবে)Hello, মান Hello)ভিজ্যুয়াল স্টুডিও একটি স্বতন্ত্র stringsশ্রেণি স্বয়ংক্রিয়ভাবে উত্পন্ন করে , যা প্রকৃতপক্ষে স্থাপন করা হয় strings.Designer.cs। ক্লাসটি একই নামস্থানে রয়েছে যা আপনি প্রত্যাশা করবেন যে একটি নতুন তৈরি করা .csফাইলটি স্থাপন করা হবে।
এই কোডটি সর্বদা মুদ্রণ করে Hello, কারণ এটি ডিফল্ট সংস্থান এবং কোনও ভাষা-নির্দিষ্ট সংস্থান উপলভ্য নয়:
Console.WriteLine(strings.Hello);
এখন একটি নতুন ভাষা-নির্দিষ্ট সংস্থান যুক্ত করুন:
strings.fr.resx(ফরাসী ভাষায়)Hello, মান Salut)নিম্নলিখিত কোড মুদ্রণ Salut:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(strings.Hello);
কি সংস্থান ব্যবহৃত হয় উপর নির্ভর করে Thread.CurrentThread.CurrentUICulture। এটি উইন্ডোজ ইউআই ভাষা সেটিংয়ের উপর নির্ভর করে সেট করা আছে, বা এই উদাহরণ হিসাবে ম্যানুয়ালি সেট করা যেতে পারে। এখানে এই সম্পর্কে আরও জানুন ।
তোমার মত দেশ-ভিত্তিক সম্পদ যোগ করতে পারেন strings.fr-FR.resxবা strings.fr-CA.resx।
ব্যবহৃত স্ট্রিংটি এই অগ্রাধিকার ক্রমে নির্ধারিত হয়:
strings.fr-CA.resxstrings.fr.resxstrings.resxনোট করুন যে ভাষা-নির্দিষ্ট সংস্থানগুলি উপগ্রহ সমাবেশগুলি উত্পন্ন করে ।
এখানCurrentCulture থেকে কীভাবে আলাদা হয় তাও শিখুন ।CurrentUICulture
আমার ক্ষেত্রে
[assembly: System.Resources.NeutralResourcesLanguage("ru-RU")]
এসেম্বলিআইএনফো-এর মধ্যে জিনিসগুলি যথারীতি কাজ করতে বাধা দেয়।
@ এরিক বোলে-ফেয়েসটের উত্তর ছাড়াও :
উপগ্রহ সমাবেশগুলির জন্য ধন্যবাদ, .dll / .exe ফাইলের উপর ভিত্তি করে স্থানীয়করণ তৈরি করা যেতে পারে । এই পথে:
এলএসএক্রিটার নামে পরিচিত একটি অল্প পরিচিত সরঞ্জাম রয়েছে (অ-বাণিজ্যিক ব্যবহারের জন্য বা কেনার বিকল্পের জন্য নিখরচায় ) যা আপনাকে .dll / .exe ফাইলের উপর ভিত্তি করে স্থানীয়করণ তৈরি করতে দেয়। প্রকৃতপক্ষে, অভ্যন্তরীণভাবে (ভাষা প্রকল্পের ডিরেক্টরিতে) এটি রেক্স ফাইলগুলির স্থানীয় সংস্করণ তৈরি করে / পরিচালনা করে এবং @ এরিক বোলে-ফেয়সোট বর্ণিত অনুরূপভাবে একটি সমাবেশ তৈরি করে ।
রিসোর্স ম্যানেজার এবং .resx কিছুটা অগোছালো।
আপনি ব্যবহার করতে পারেন লেক্সিকাল.লোক্যালাইজেশন যা কোডের মধ্যে ডিফল্ট মান এবং সংস্কৃতি নির্দিষ্ট মানগুলিকে এম্বেড করতে দেয় এবং ভবিষ্যত সংস্কৃতিগুলির জন্য বহিরাগত স্থানীয়করণের ফাইলগুলিতে প্রসারিত করা যায় (যেমন .json বা .resx)।
public class MyClass
{
/// <summary>
/// Localization root for this class.
/// </summary>
static ILine localization = LineRoot.Global.Type<MyClass>();
/// <summary>
/// Localization key "Ok" with a default string, and couple of inlined strings for two cultures.
/// </summary>
static ILine ok = localization.Key("Success")
.Text("Success")
.fi("Onnistui")
.sv("Det funkar");
/// <summary>
/// Localization key "Error" with a default string, and couple of inlined ones for two cultures.
/// </summary>
static ILine error = localization.Key("Error")
.Format("Error (Code=0x{0:X8})")
.fi("Virhe (Koodi=0x{0:X8})")
.sv("Sönder (Kod=0x{0:X8})");
public void DoOk()
{
Console.WriteLine( ok );
}
public void DoError()
{
Console.WriteLine( error.Value(0x100) );
}
}
¹ (আমি সেই লাইব্রেরির রক্ষণাবেক্ষণকারী)
সাধারণভাবে আপনি আপনার অনুবাদগুলি রিসোর্স ফাইলগুলিতে রেখেছেন, যেমন: রিসোর্সেসেস।
প্রতিটি নির্দিষ্ট সংস্কৃতির আলাদা নাম থাকে, যেমন: উত্স.এনএল.রেক্স, রিসোর্স.ফ্রেসেক্স, রিসোর্স.ডি.এক্সেক্স,…
এখন কোনও সমাধানের সবচেয়ে গুরুত্বপূর্ণ অংশটি হ'ল আপনার অনুবাদগুলি বজায় রাখা। ভিজ্যুয়াল স্টুডিওতে মাইক্রোসফ্ট এমএটি সরঞ্জামটি ইনস্টল করুন: বহুভাষিক অ্যাপ্লিকেশন টুলকিট (এমএটি)। উইনফর্মস, ডাব্লুপিএফ, এসপ নেট (কোর), ইউডব্লিউপি,…
সাধারণভাবে, যেমন ডাব্লুপিএফ প্রকল্পে ডাব্লুপিএফ সমাধানের জন্য
[assembly: System.Resources.NeutralResourcesLanguage("en")]আপনি যা দেখবেন তা হ'ল একটি নতুন ফোল্ডার তৈরি করা হবে, যাকে একটি ....nl.xlfফাইল যুক্ত "মাল্টলিংগুয়াল রিসোর্সস" বলা হয় ।
আপনার এখন একমাত্র কাজটি হ'ল:
(.xlf ফাইলগুলি "বহুভাষিক সম্পাদক" দিয়ে খোলা উচিত, যদি এটি না হয় তবে .xlf ফাইলটিতে ডান মাউস ক্লিক করুন, "ওপেন করুন ..." নির্বাচন করুন এবং "বহুভাষিক সম্পাদক" নির্বাচন করুন।
আনন্দ কর! এখন আপনি এটিও দেখতে পারেন যা অনূদিত হয়নি, এক্সএলএফ অনুবাদগুলি বহিরাগত অনুবাদ সংস্থাগুলিতে রফতানি করুন, সেগুলি আবার আমদানি করুন, অন্যান্য প্রকল্পগুলি থেকে অনুবাদগুলি পুনরায় ব্যবহার করুন ইত্যাদি ...
অধিক তথ্য: