সি # তে স্থানীয়করণ কীভাবে ব্যবহার করবেন


268

আমি ঠিক কাজ করতে স্থানীয়করণ পেতে পারে বলে মনে হচ্ছে না।

আমার একটি ক্লাস লাইব্রেরি আছে। এখন আমি সেখানে রেক্স ফাইল তৈরি করতে এবং থ্রেড সংস্কৃতির উপর ভিত্তি করে কিছু মান ফিরিয়ে দিতে চাই।

আমি এটা কিভাবে করবো?


পিএস: আপনি ভিজ্যুয়াল স্টুডিওর জন্য বিনামূল্যে মাইক্রোসফ্ট এমএটি (বহুভাষিক অ্যাপ্লিকেশন টুলকিট) এক্সটেনশনটি ইনস্টল করেছেন তা নিশ্চিত করুন ;-)
জুলি

উত্তর:


571
  • আপনার প্রকল্পে একটি রিসোর্স ফাইল যুক্ত করুন (আপনি এটিকে "স্ট্রিংস্রেসেক্স" বলতে পারেন) নীচের কাজগুলি করে: প্রকল্পটিতে বৈশিষ্ট্যগুলিতে
    ডান ক্লিক করুন , প্রসঙ্গ মেনুতে যোগ করুন -> নতুন আইটেম ... নির্বাচন করুন , তারপরে তালিকার তালিকায় ভিসুয়াল সি # টি আইটেম বাছাই "রিসোর্স ফাইল" এবং এটির নাম দিন ।strings.resx
  • রেজেক্স ফাইলটিতে একটি স্ট্রিং রেজউস যুক্ত করুন এবং এটির একটি ভাল নাম দিন (উদাহরণস্বরূপ: এর সাথে "হ্যালো" নাম দিন এবং এটি "হ্যালো" মান দিন)
  • রিসোর্স ফাইলটি সংরক্ষণ করুন ( দ্রষ্টব্য: এটি একটি ডিফল্ট সংস্থান ফাইল হবে, কারণ এটিতে দ্বি-অক্ষরের ভাষার কোড নেই)
  • আপনার প্রোগ্রামে উল্লেখগুলি যুক্ত করুন: System.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);

কারণ এটি কোনও "এন-ইউএস" রিসোর্স এবং কোনও "এন" রিসোর্স খুঁজে পায় না, তাই এটি ডিফল্টে ফিরে আসবে, এটি আমরা প্রথম থেকেই যুক্ত করেছি।

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


24
উত্তরটি এখানে "পর্দার অন্তরালে" প্লাম্বিংয়ের জন্য উল্লেখ করতে পারে যা ভিজ্যুয়াল স্টুডিও এখানে করছে: রেজেক্স.ডিজাইনার.সি ফাইল, ইন্টেলিজেন্স কাজ করে; স্যাটেলাইট অ্যাসেমব্লিগুলি ক্লাস লাইব্রেরির সাথে সংকলিত, এটি সংকলিত সমাবেশ এবং পরবর্তী যে কোনও প্রকল্পগুলি এটি ব্যবহার করে ইত্যাদি স্থাপন করা দরকার ... উত্তরটি খুব সহজ এবং সহজ, তবে বিষয়গুলি যেখানে ভুল হতে পারে তা ব্যাখ্যা করতে সহায়তা করে না যেমন যদি আপনি ভিজ্যুয়াল স্টুডিও ব্যবহার করবেন না।
তাও

13
+1 পোস্ট! ম্যানুয়ালি ফাইলগুলি তৈরির পরিবর্তে, জিটা রিসোর্স সম্পাদক ( zeta-resource-editor.com/index.html ) চেষ্টা করুন । এটি নিখরচায় এবং এই ধরণের অনুবাদগুলি আপনাকে কেবল ভিএস-এর চেয়ে বেশি দ্রুত করতে সহায়তা করে
কিলনাইন

4
Access ModifierPublicউত্সের শ্রেণীর উত্পন্ন করার জন্য সেট করা উচিত । সম্পত্তিটি নেমস্পেসে ক্লাসটি অপরিহার্যভাবে নয়, আপনি যেখানে .resx ফাইলটি রেখেছেন।
আন্দ্রে মোইসেইভ

3
জেনে থাকুন যে ভিএস 2017 রেক্সেক্সে উইনফর্মের স্থানীয়করণের সাথে বাগের কারণে কমপক্ষে কাজ করা হচ্ছে না (কমপক্ষে সংস্করণ 15.4 পর্যন্ত)। একটি টিকেট পাওয়া যায়: developercommunity.visualstudio.com/content/problem/63772/...
muccix

4
.NET 4.5 হিসাবে থ্রেডের পরিবর্তে সিস্টেম.গ্লোবালাইজেশন.ক্ল্যাচারআইনফো.ডাফল্টথ্র্যাড কার্নক্রাচাল্ট ব্যবহার করা সম্ভব urrent বর্তমান সংস্করণ যাতে থ্রেড দ্বারা থ্রেডের পরিবর্তে পুরো অ্যাপ্লিকেশনটির জন্য লোকেল পরিবর্তন করতে পারেন
গ্রিক্সএম

41

এটি আসলে বেশ সহজ। উদাহরণস্বরূপ একটি নতুন সংস্থান ফাইল তৈরি করুন 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শ্রেণি এটি পাশাপাশি ব্যবহার করে।


লোকাল কিভাবে সেট করবেন?
ম্যাথিউস সাইমন

1
@ ম্যাথিউস সিমন: আপনার দরকার নেই। ডিফল্টরূপে, ব্যবহারকারীর বর্তমান লোকেল ব্যবহৃত হয়। আপনি যদি কোনও নির্দিষ্ট লোকেল (যেমন ব্যবহারকারীদের ম্যানুয়ালি ভাষা পরিবর্তন করার অনুমতি দেওয়ার জন্য) জোর করতে চান তবে আপনাকে প্রতিটি থ্রেডে System.Threading.Tread.C करينকালচার এবং কারেন্ট ইউকুলচার সেট করতে হবে, প্রথমবারের জন্য কোনও সংস্থান লোড হওয়ার আগে সম্ভবত। রানটাইম আপডেটের চেয়ে এ জন্য অ্যাপ্লিকেশন পুনরায় চালু করা সহজ।
অরেগনহোস্ট

15

ফর্মটিতে স্থানীয়করণ যুক্ত করতে @ ফ্রেড্রিক মার্কের স্ট্রিংয়ের দুর্দান্ত উত্তরটি নীচে করুন :

  • সেট ফর্ম এর সম্পত্তি "Localizable"থেকেtrue
  • ফর্মের Languageসম্পত্তিটি আপনার পছন্দ মতো ভাষায় পরিবর্তন করুন (সবার সাথে একটি চমৎকার ড্রপ-ডাউন থেকে)
  • নিয়ন্ত্রণগুলি সেই ফর্মটিতে অনুবাদ করুন এবং প্রয়োজনে তাদের সরান (প্রয়োজনে এটি দীর্ঘ দীর্ঘ ফরাসি বাক্যে স্কোয়াশ করুন!)

সম্পাদনা: এটি উইন্ডোজ ফর্ম স্থানীয়করণের উপরের এমএসডিএন নিবন্ধটি মূলত আমার লিঙ্ক করা নয় ... তবে প্রয়োজনে আরও আলো ফেলতে পারে। (পুরানোটি কেড়ে নেওয়া হয়েছে)


এমএসডিএন আর্টিকেল আর পাওয়া যায় না, কোন প্রতিস্থাপন?
ফুওমাগ 9

নিশ্চিত নয় - আমি দেখতে
পেলাম সেরাটিকে

14

এফ.মার্কের দুর্দান্ত উত্তর। অ্যাপ্লিকেশন প্রকাশের পরে আপনি যদি অনুবাদটি আপডেট করতে চান বা নতুন ভাষাগুলি যুক্ত করতে চান তবে আপনি আটকে রয়েছেন, কারণ আপনাকে সর্বদা রিসোম্পাইল করতে হবে রিসোর্সগুলি তৈরি করতে। 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")


2
নেমস্পেস (y) সংরক্ষণের মন্তব্যের জন্য ধন্যবাদ, যা - মিস করা থাকলে - কোনও ত্রুটি তৈরি করে না, তবে কেবল ফ্যালব্যাক রিসোর্সে ফিরে যেতে হবে।
মোসকা পিটি

11

@ ফ্রেড্রিক মার্ক উত্তরের একটি সংশোধন ও সম্প্রসারণ ।

  • 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.resx
  • ভাষা-নির্দিষ্ট সংস্থান থেকে strings.fr.resx
  • ডিফল্ট থেকে strings.resx

নোট করুন যে ভাষা-নির্দিষ্ট সংস্থানগুলি উপগ্রহ সমাবেশগুলি উত্পন্ন করে

এখানCurrentCulture থেকে কীভাবে আলাদা হয় তাও শিখুন ।CurrentUICulture


1

আমার ক্ষেত্রে

[assembly: System.Resources.NeutralResourcesLanguage("ru-RU")]

এসেম্বলিআইএনফো-এর মধ্যে জিনিসগুলি যথারীতি কাজ করতে বাধা দেয়।


0

@ এরিক বোলে-ফেয়েসটের উত্তর ছাড়াও :

উপগ্রহ সমাবেশগুলির জন্য ধন্যবাদ, .dll / .exe ফাইলের উপর ভিত্তি করে স্থানীয়করণ তৈরি করা যেতে পারে । এই পথে:

  • উত্স কোড (ভিএস প্রকল্প) ভাষা প্রকল্প থেকে আলাদা করা যেতে পারে,
  • একটি নতুন ভাষা যুক্ত করার জন্য প্রকল্পটি পুনরায় সংশোধনের প্রয়োজন হবে না,
  • অনুবাদটি শেষ-ব্যবহারকারী দ্বারাও করা যেতে পারে।

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


0

রিসোর্স ম্যানেজার এবং .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) );
    }
}

¹ (আমি সেই লাইব্রেরির রক্ষণাবেক্ষণকারী)


0

সাধারণভাবে আপনি আপনার অনুবাদগুলি রিসোর্স ফাইলগুলিতে রেখেছেন, যেমন: রিসোর্সেসেস।

প্রতিটি নির্দিষ্ট সংস্কৃতির আলাদা নাম থাকে, যেমন: উত্স.এনএল.রেক্স, রিসোর্স.ফ্রেসেক্স, রিসোর্স.ডি.এক্সেক্স,…

এখন কোনও সমাধানের সবচেয়ে গুরুত্বপূর্ণ অংশটি হ'ল আপনার অনুবাদগুলি বজায় রাখা। ভিজ্যুয়াল স্টুডিওতে মাইক্রোসফ্ট এমএটি সরঞ্জামটি ইনস্টল করুন: বহুভাষিক অ্যাপ্লিকেশন টুলকিট (এমএটি)। উইনফর্মস, ডাব্লুপিএফ, এসপ নেট (কোর), ইউডব্লিউপি,…

সাধারণভাবে, যেমন ডাব্লুপিএফ প্রকল্পে ডাব্লুপিএফ সমাধানের জন্য

  • ভিজ্যুয়াল স্টুডিওর জন্য মাইক্রোসফ্ট এমএটি এক্সটেনশন ইনস্টল করুন।
  • সলিউশন এক্সপ্লোরারে আপনার প্রজেক্ট> প্রোপার্টি> অ্যাসেম্বলিআইএনফো-সিগুলিতে নেভিগেট করুন
  • আপনার ডিফল্ট, নিরপেক্ষ ভাষা (আমার ক্ষেত্রে ইংরাজী) এসেম্বলিআইএনফো.কে যোগ করুন: [assembly: System.Resources.NeutralResourcesLanguage("en")]
  • সলিউশন এক্সপ্লোরার এবং ভিজ্যুয়াল স্টুডিওতে আপনার প্রকল্পটি শীর্ষ মেনু থেকে নির্বাচন করুন, প্রকল্পের জন্য এমএটি সক্ষম করতে "সরঞ্জাম"> "বহুভাষিক অ্যাপ্লিকেশন সরঞ্জামদণ্ড"> "নির্বাচন সক্ষম করুন" ক্লিক করুন।
    • সলিউশন এক্সপ্লোরারের প্রোজেক্টটিতে ডান মাউস ক্লিক করুন, "বহুভাষিক অ্যাপ্লিকেশন সরঞ্জামদণ্ড"> "অনুবাদ ভাষাগুলি যুক্ত করুন ..." নির্বাচন করুন এবং আপনি যে ভাষায় অনুবাদ যুক্ত করতে চান তা নির্বাচন করুন। যেমন ডাচ

আপনি যা দেখবেন তা হ'ল একটি নতুন ফোল্ডার তৈরি করা হবে, যাকে একটি ....nl.xlfফাইল যুক্ত "মাল্টলিংগুয়াল রিসোর্সস" বলা হয় ।

আপনার এখন একমাত্র কাজটি হ'ল:

  1. আপনার ডিফল্ট রিসোর্স ফাইলগুলিতে আপনার অনুবাদ যুক্ত করুন (আমার ক্ষেত্রে ইংরাজী)
  2. .Xlf ফাইলগুলি .resx ফাইলগুলি উত্পন্ন / আপডেট করবে বলে .xlf ফাইলটি (.resx ফাইল নয়) ক্লিক করে অনুবাদ করুন।

(.xlf ফাইলগুলি "বহুভাষিক সম্পাদক" দিয়ে খোলা উচিত, যদি এটি না হয় তবে .xlf ফাইলটিতে ডান মাউস ক্লিক করুন, "ওপেন করুন ..." নির্বাচন করুন এবং "বহুভাষিক সম্পাদক" নির্বাচন করুন।

আনন্দ কর! এখন আপনি এটিও দেখতে পারেন যা অনূদিত হয়নি, এক্সএলএফ অনুবাদগুলি বহিরাগত অনুবাদ সংস্থাগুলিতে রফতানি করুন, সেগুলি আবার আমদানি করুন, অন্যান্য প্রকল্পগুলি থেকে অনুবাদগুলি পুনরায় ব্যবহার করুন ইত্যাদি ...

অধিক তথ্য:

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