Microsoft Technologies Localization এবং Globalization Techniques গাইড ও নোট

361

Localization এবং Globalization হল দুটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশন বা সফটওয়্যারের বৈশ্বিক ব্যবহারকারীদের জন্য উপযুক্ত করার জন্য ব্যবহৃত হয়। Globalization হলো একটি অ্যাপ্লিকেশন বা সিস্টেমের বিশ্বব্যাপী ব্যবহারকারীকে লক্ষ্য করে ডিজাইন করা এবং Localization হলো সেই ডিজাইনটি নির্দিষ্ট অঞ্চলের বা ভাষার জন্য কাস্টমাইজ করা।

এই টিউটোরিয়ালে Localization এবং Globalization সম্পর্কে বিস্তারিত আলোচনা করা হবে, এবং সেগুলির কার্যকরী কৌশল এবং ব্যবহার দেখানো হবে।


১. Globalization

Globalization (বা G11n) হলো একটি প্রক্রিয়া যা অ্যাপ্লিকেশন বা সিস্টেমকে এমনভাবে তৈরি করে যাতে এটি বিভিন্ন ভাষা, অঞ্চল এবং সংস্কৃতির জন্য উপযুক্ত হয়ে থাকে। এটি সাধারণত আন্তর্জাতিক বাজারে প্রবেশের জন্য প্রয়োজনীয়।

Key Concepts of Globalization:

  • Unicode Support: সমস্ত ভাষা এবং স্ক্রিপ্টের সঠিক প্রদর্শন নিশ্চিত করার জন্য ইউনিকোড ব্যবহার।
  • Culture-Independent Data: ডেটা (যেমন তারিখ, সময়, সংখ্যা) একটি নির্দিষ্ট সংস্কৃতির উপর নির্ভর না করে, একটি স্ট্যান্ডার্ড পদ্ধতিতে প্রক্রিয়া করা।
  • Flexible UI: ইউজার ইন্টারফেস (UI) এমনভাবে তৈরি করা যা বিভিন্ন ভাষার এবং স্ক্রীন সাইজের জন্য উপযুক্ত।
  • External Resources: স্থানীয় ভাষা ও সংস্কৃতি অনুযায়ী বিভিন্ন কনফিগারেশন এবং রিসোর্স ব্যবহার।

উদাহরণ: Globalization in .NET

.NET অ্যাপ্লিকেশনগুলিতে CultureInfo ব্যবহার করা হয় যা নির্দিষ্ট সাংস্কৃতিক এবং আঞ্চলিক সেটিংস নির্ধারণ করতে সহায়ক।

using System.Globalization;
using System.Threading;

public class GlobalizationExample
{
    public void SetCulture(string cultureName)
    {
        CultureInfo culture = new CultureInfo(cultureName);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }
}
  • CultureInfo ব্যবহার করে আপনি কোনো নির্দিষ্ট সংস্কৃতির জন্য অ্যাপ্লিকেশন কনফিগার করতে পারেন।
  • CurrentCulture এবং CurrentUICulture নির্ধারণ করে অ্যাপ্লিকেশনের আঞ্চলিক ভাষা এবং ফরম্যাটিং।

২. Localization

Localization (বা L10n) হলো একটি অ্যাপ্লিকেশনকে নির্দিষ্ট ভাষা, সংস্কৃতি, এবং আঞ্চলিক চাহিদা অনুযায়ী কাস্টমাইজ করা। যখন Globalization অ্যাপ্লিকেশনকে আন্তর্জাতিক ব্যবহারকারীদের জন্য প্রস্তুত করে, তখন Localization সেটিকে নির্দিষ্ট অঞ্চলের জন্য উপযুক্ত করে তোলে।

Key Concepts of Localization:

  • Language Translation: অ্যাপ্লিকেশনের সমস্ত টেক্সট এবং স্ট্যাটিক কনটেন্টের ভাষা অনুবাদ।
  • Cultural Adaptation: স্থানীয় সংস্কৃতি এবং আঞ্চলিক প্রয়োজন অনুযায়ী ডিজাইন এবং উপাদান কাস্টমাইজ করা। যেমন: ছবি, রঙ, সিম্বল এবং থিম।
  • Regional Formats: তারিখ, সময়, মুদ্রা, এবং সংখ্যা ফরম্যাট একটি নির্দিষ্ট অঞ্চলের রীতি অনুযায়ী কাস্টমাইজ করা।
  • Resource Files: সমস্ত ভাষার কনটেন্ট আলাদা আলাদা resource files-এ রাখা হয়, যা অ্যাপ্লিকেশন রুটিনে ভাষার পরিবর্তন সম্ভব করে।

উদাহরণ: Localization in .NET

Resource Files (.resx) ব্যবহার করে ভাষা এবং অঞ্চলের জন্য আলাদা আলাদা কনটেন্ট রাখা হয়।

  1. English (en-US) Resource File (Resources.en-US.resx):

    <data name="WelcomeMessage" xml:space="preserve">
       <value>Welcome to our application!</value>
    </data>
    
  2. French (fr-FR) Resource File (Resources.fr-FR.resx):

    <data name="WelcomeMessage" xml:space="preserve">
       <value>Bienvenue dans notre application!</value>
    </data>
    

C# কোড:

using System.Globalization;
using System.Resources;

public class LocalizationExample
{
    ResourceManager rm = new ResourceManager("YourNamespace.Resources", typeof(LocalizationExample).Assembly);

    public void ShowLocalizedMessage()
    {
        string welcomeMessage = rm.GetString("WelcomeMessage");
        Console.WriteLine(welcomeMessage);
    }

    public void SetCulture(string cultureName)
    {
        CultureInfo culture = new CultureInfo(cultureName);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }
}
  • ResourceManager ব্যবহার করে আপনি নির্দিষ্ট resx ফাইল থেকে কনটেন্ট লোড করতে পারেন এবং সেটি প্রয়োজন অনুযায়ী প্রদর্শন করতে পারেন।

৩. Culture and Regional Settings

Culture এবং Regional Settings ব্যবহারকারীর ভাষা, সংখ্যার ফরম্যাট, তারিখের ফরম্যাট এবং মুদ্রা চিহ্নের মতো উপাদানগুলি কাস্টমাইজ করার জন্য গুরুত্বপূর্ণ।

৩.১ Date and Time Formatting

বিশ্ববিদ্যালয়ের বিভিন্ন অঞ্চলে তারিখ এবং সময়ের ফরম্যাট ভিন্ন হয়। যেমন, যুক্তরাষ্ট্রে MM/dd/yyyy ব্যবহার করা হয়, কিন্তু ইউরোপে dd/MM/yyyy বেশি প্রচলিত।

DateTime date = DateTime.Now;
string formattedDate = date.ToString("D", new CultureInfo("en-GB"));  // For UK format
Console.WriteLine(formattedDate);

৩.২ Currency Formatting

এছাড়াও, মুদ্রা ফরম্যাটও অঞ্চলভিত্তিক আলাদা হতে পারে।

decimal amount = 1234.56m;
string formattedCurrency = amount.ToString("C", new CultureInfo("en-US"));  // US Dollar format
Console.WriteLine(formattedCurrency);

৪. Best Practices for Localization and Globalization

  1. Separation of Code and Content: সমস্ত UI কনটেন্ট (যেমন: টেক্সট) কেবল কোড থেকে আলাদা resource files-এ রাখুন। এটি অনুবাদ এবং রক্ষণাবেক্ষণ সহজ করে।
  2. Use Unicode: সকল ভাষার সঠিক প্রদর্শন নিশ্চিত করতে ইউনিকোড ব্যবহার করুন।
  3. Culture-Sensitive UI: UI উপাদানগুলিকে বিভিন্ন ভাষার জন্য যথাযথভাবে রূপান্তরিত করার জন্য তাদের স্থানীয় সংস্করণে প্রর্দশিত করুন।
  4. Regional Formats: তারিখ, সময়, এবং সংখ্যা ফরম্যাট সমস্ত সংস্কৃতি এবং অঞ্চল অনুসারে কাস্টমাইজ করুন।

৫. Automated Localization Tools

  • ResX File Generator: Visual Studio তে resx ফাইল তৈরি করা সহজ, যা অ্যাপ্লিকেশনের সমস্ত টেক্সট এবং কনটেন্টের জন্য স্বয়ংক্রিয়ভাবে বিভিন্ন ভাষায় রিসোর্স ফাইল তৈরি করতে সাহায্য করে।
  • Localization APIs: কিছু API রয়েছে যেমন Google Translation API বা Microsoft Translator API, যা অ্যাপ্লিকেশনের কনটেন্টের স্বয়ংক্রিয় অনুবাদ করতে সাহায্য করতে পারে।
  • Crowdin: অনলাইন প্ল্যাটফর্ম যা আপনার অ্যাপ্লিকেশনের জন্য অনুবাদ প্রক্রিয়া ম্যানেজ করতে সহায়তা করে।

উপসংহার

Localization এবং Globalization অ্যাপ্লিকেশন ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি বিশ্বব্যাপী ব্যবহারকারীদের লক্ষ্য করছেন। Globalization অ্যাপ্লিকেশনটি আন্তর্জাতিক বাজারের জন্য প্রস্তুত করে এবং Localization এটিকে নির্দিষ্ট ভাষা, অঞ্চল এবং সংস্কৃতি অনুযায়ী কাস্টমাইজ করে। Resource Files, CultureInfo, এবং Format Strings ব্যবহার করে আপনি একটি আন্তর্জাতিক এবং ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন তৈরি করতে পারেন।

Content added By

Multilingual Application তৈরি এবং Resource Management

285

Multilingual Application তৈরি করা একটি গুরুত্বপূর্ণ প্রক্রিয়া, বিশেষ করে যদি আপনার অ্যাপ্লিকেশনটি বিশ্বব্যাপী ব্যবহারের জন্য তৈরি করা হয়। এটি বিভিন্ন ভাষার জন্য সাপোর্ট প্রদান করে, যাতে ব্যবহারকারীরা তাদের প্রিয় ভাষায় অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন। Windows Application Development-এ Multilingual Support এবং Resource Management দক্ষতার সাথে কনফিগার করে, আপনি আপনার অ্যাপ্লিকেশনকে বিভিন্ন ভাষায় কাস্টমাইজ এবং আন্তর্জাতিকীকরণ করতে পারবেন।

এই টিউটোরিয়ালে Multilingual Application তৈরি এবং Resource Management সম্পর্কিত প্রক্রিয়া এবং পদ্ধতিগুলি আলোচনা করা হবে, যা WPF, WinUI, বা .NET অ্যাপ্লিকেশন ডেভেলপমেন্টে প্রয়োগ করা যাবে।


Multilingual Application তৈরি করা

Multilingual Application তৈরি করার জন্য আমাদেরকে প্রধানত Resource Files (যেমন .resx ফাইল) এবং Culture Information ব্যবহার করতে হবে। এই ফাইলগুলো ভাষাগত ডেটা ধারণ করে, যেমন টেক্সট, লেবেল, এবং মেসেজ যা বিভিন্ন ভাষায় প্রদর্শিত হবে।

১. Resource Files (.resx) ব্যবহার করে Multilingual Support

Resource Files হলো অ্যাপ্লিকেশনের জন্য স্ট্যাটিক কন্টেন্ট (যেমন টেক্সট, ইমেজ, বা অন্যান্য স্ট্রিং) সংরক্ষণ করার উপায়, যা একাধিক ভাষায় কাস্টমাইজ করা যায়।

উদাহরণ: Resource File তৈরি করা
  1. Add Resource File:
    • Visual Studio-তে আপনার প্রজেক্টের উপর রাইট ক্লিক করুন এবং Add > New Item নির্বাচন করুন।
    • Resources File নির্বাচন করুন, যেমন Strings.resx
    • এই ফাইলটি অ্যাপ্লিকেশনের জন্য ডিফল্ট ভাষার স্ট্রিং ধারণ করবে।
  2. Strings.resx (ডিফল্ট ভাষা - ইংরেজি):
<data name="WelcomeText" xml:space="preserve">
    <value>Welcome to the application!</value>
</data>
<data name="SubmitButton" xml:space="preserve">
    <value>Submit</value>
</data>
  1. Strings.fr.resx (ফরাসি ভাষার জন্য):
<data name="WelcomeText" xml:space="preserve">
    <value>Bienvenue dans l'application!</value>
</data>
<data name="SubmitButton" xml:space="preserve">
    <value>Soumettre</value>
</data>
  • এখানে Strings.resx ফাইলের মাধ্যমে ইংরেজি এবং Strings.fr.resx ফাইলের মাধ্যমে ফরাসি ভাষার জন্য স্ট্রিং সরবরাহ করা হয়েছে।

২. CultureInfo ব্যবহার করে ভাষা পরিবর্তন

এখন, অ্যাপ্লিকেশনটি বিভিন্ন ভাষায় কাজ করার জন্য আমরা CultureInfo এবং Thread.CurrentThread.CurrentUICulture ব্যবহার করব।

C# কোড (ডিফল্ট ভাষা সেট করা):
using System;
using System.Globalization;
using System.Threading;
using System.Windows;

namespace MultilingualAppExample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // ডিফল্ট ভাষা (ইংরেজি) সেট করা
            SetCulture("en-US");
        }

        private void SetCulture(string cultureCode)
        {
            CultureInfo cultureInfo = new CultureInfo(cultureCode);
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;

            // UI-তে পরিবর্তন প্রতিফলিত করা
            Resources.MergedDictionaries.Clear();
            Resources.MergedDictionaries.Add(new ResourceDictionary
            {
                Source = new Uri($"pack://application:,,,/Resources/Strings.{cultureCode}.xaml")
            });
        }

        private void ChangeLanguageButton_Click(object sender, RoutedEventArgs e)
        {
            // ভাষা পরিবর্তন (ফরাসি)
            SetCulture("fr-FR");
        }
    }
}

ব্যাখ্যা:

  • SetCulture মেথডটি নির্বাচিত ভাষা সেট করে এবং ResourceDictionary-এ সেই ভাষার স্ট্রিং লোড করে।
  • Thread.CurrentThread.CurrentUICulture দ্বারা UI সংস্কৃতি পরিবর্তিত হয়, যা UI-তে স্ট্রিং, মেসেজ ইত্যাদি রেন্ডার করে।

Resource Management

Resource Management হল এমন একটি প্রক্রিয়া যা অ্যাপ্লিকেশনের সমস্ত স্ট্যাটিক কনটেন্ট (যেমন টেক্সট, ইমেজ, স্টাইল ইত্যাদি) সঠিকভাবে পরিচালনা এবং সংগঠিত করার জন্য ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনকে একাধিক ভাষা বা সংস্করণে সহজে কনফিগার এবং মেইনটেইন করতে সাহায্য করে।

১. Localized Resources Management

প্রতিটি ভাষার জন্য আলাদা .resx ফাইল তৈরি করা হয় যা নির্দিষ্ট ভাষার স্ট্রিং ধারণ করে। প্রতিটি ফাইল culture-specific হওয়া উচিত। উদাহরণস্বরূপ, ইংরেজি এবং ফরাসি ভাষার জন্য পৃথক .resx ফাইল থাকবে।

উদাহরণ: English (en-US) এবং French (fr-FR) জন্য স্ট্রিং ফাইল
  • Strings.en-US.resx (ইংরেজি)
<data name="HelloMessage" xml:space="preserve">
    <value>Hello, welcome!</value>
</data>
  • Strings.fr-FR.resx (ফরাসি)
<data name="HelloMessage" xml:space="preserve">
    <value>Bonjour, bienvenue!</value>
</data>

২. Dynamic Language Switching

ভাষা পরিবর্তন করার সময় আপনি UI কন্ট্রোলের মধ্যে স্ট্রিংগুলোর মান পরিবর্তন করতে পারেন।

উদাহরণ: Dynamic Language Switcher Button
<Button Content="{Binding WelcomeText}" Click="OnChangeLanguage"/>
C# কোড:
private void OnChangeLanguage(object sender, RoutedEventArgs e)
{
    string currentCulture = Thread.CurrentThread.CurrentUICulture.Name;
    string newCulture = (currentCulture == "en-US") ? "fr-FR" : "en-US";
    SetCulture(newCulture);
}

৩. Custom Resource Types

আপনি কাস্টম রিসোর্স টাইপ (যেমন Image, Brush, Style) ব্যবহার করে UI-এ আরও কাস্টমাইজেশন করতে পারেন।

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="MainButtonStyle" TargetType="Button">
            <Setter Property="Background" Value="LightBlue"/>
            <Setter Property="FontSize" Value="16"/>
        </Style>
    </ResourceDictionary>
</Application.Resources>

৪. App.xaml এবং Resource Management

App.xaml এ আপনার অ্যাপের গ্লোবাল রিসোর্স ডিকশনারি যুক্ত করতে পারেন যা সমস্ত ভাষার জন্য স্টাইল, ব্রাশ, থিম ইত্যাদি কাস্টমাইজেশন পরিচালনা করবে।

<Application x:Class="MultilingualAppExample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Strings.en-US.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

৫. Culture-Specific Resources Merging

আপনি ResourceDictionary-এ culture-specific resources মিশিয়ে দিতে পারেন, যা নির্দিষ্ট ভাষার জন্য প্রয়োজনীয় রিসোর্স লোড করবে।

Resources.MergedDictionaries.Clear();
Resources.MergedDictionaries.Add(new ResourceDictionary
{
    Source = new Uri($"pack://application:,,,/Resources/Strings.{cultureCode}.xaml")
});

উপসংহার

Multilingual Application তৈরি এবং Resource Management অ্যাপ্লিকেশনের বিভিন্ন ভাষায় কাস্টমাইজেশন এবং আন্তর্জাতিকীকরণ সহজ করে তোলে। Resource Files ব্যবহার করে, আপনি একাধিক ভাষার জন্য স্ট্রিং এবং রিসোর্স সংরক্ষণ করতে পারেন, এবং CultureInfo ব্যবহার করে UI-তে ভাষা পরিবর্তন করতে পারেন। এছাড়া, Dynamic Language Switching এবং Custom Resource Types ব্যবহার করে UI কাস্টমাইজেশন আরও উন্নত করতে পারেন।

এই কৌশলগুলির মাধ্যমে আপনি সহজেই একটি বিশ্বব্যাপী ব্যবহারের উপযোগী অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By

Dynamic Language Switching Techniques

328

Dynamic Language Switching হল একটি গুরুত্বপূর্ণ ফিচার, যা অ্যাপ্লিকেশনগুলিকে বিভিন্ন ভাষায় দ্রুত পরিবর্তন করার সুযোগ দেয়, যাতে ব্যবহারকারীরা তাদের পছন্দসই ভাষায় অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন। এটি বিশেষভাবে আন্তর্জাতিক অ্যাপ্লিকেশন এবং ইউজার-বান্ধব অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ, যেখানে বিভিন্ন অঞ্চলের ব্যবহারকারীরা অ্যাপ্লিকেশনটি ব্যবহার করবেন।

Windows অ্যাপ্লিকেশন ডেভেলপমেন্টে dynamic language switching করার জন্য WPF, WinUI 3, এবং UWP-এ Resource Files এবং CultureInfo ব্যবহার করা হয়। এই টিউটোরিয়ালে Dynamic Language Switching Techniques নিয়ে আলোচনা করা হবে।


১. Localization and Resource Files

Windows অ্যাপ্লিকেশনগুলিতে ভাষার পরিবর্তন করার জন্য resource files ব্যবহার করা হয়। প্রতিটি ভাষার জন্য আলাদা .resx ফাইল তৈরি করা হয়, যেখানে স্ট্রিংগুলি সেই ভাষায় অনুবাদ করা থাকে। অ্যাপ্লিকেশনটি চলাকালীন সময়েই ব্যবহারকারী ভাষা পরিবর্তন করতে পারবেন এবং UI স্বয়ংক্রিয়ভাবে পরিবর্তিত হবে।

Step 1: Resource File তৈরি করা

  1. Add New Resource File:

    • Visual Studio-তে Resource File (.resx) তৈরি করুন।
    • এটি স্ট্রিংগুলি সংরক্ষণ করবে যা বিভিন্ন ভাষায় অনুবাদ করা হবে।

    উদাহরণস্বরূপ:

    • Resources.resx (ডিফল্ট ভাষা)
    • Resources.fr.resx (ফরাসি ভাষার জন্য)
    • Resources.es.resx (স্প্যানিশ ভাষার জন্য)

Step 2: Resource ফাইলে স্ট্রিং সংরক্ষণ করা

Resources.resx ফাইলে স্ট্রিং যোগ করা:

<data name="Greeting" xml:space="preserve">
  <value>Hello, welcome to our app!</value>
</data>

Resources.fr.resx ফাইলে ফরাসি অনুবাদ:

<data name="Greeting" xml:space="preserve">
  <value>Bonjour, bienvenue dans notre application!</value>
</data>

Step 3: Language Change করা

UI-তে ডাইনামিক ভাষা পরিবর্তনের জন্য CultureInfo ব্যবহার করতে হবে।

using System.Globalization;
using System.Threading;

public void ChangeLanguage(string languageCode)
{
    // Change the culture info based on the language code
    CultureInfo newCulture = new CultureInfo(languageCode);
    Thread.CurrentThread.CurrentCulture = newCulture;
    Thread.CurrentThread.CurrentUICulture = newCulture;

    // Refresh UI elements to reflect the new culture
    Resources.Culture = newCulture;
}

Step 4: XAML-এ Resource Binding

XAML ফাইলে Binding ব্যবহার করে ডেটা লোকালাইজেশন করা যাবে:

<TextBlock Text="{x:Static properties:Resources.Greeting}" />

এখানে Greeting হচ্ছে .resx ফাইলের কিপর্যন্ত স্ট্রিং।


২. Using CultureInfo for Dynamic Switching

CultureInfo কন্ট্রোলের মাধ্যমে অ্যাপ্লিকেশনটির ভাষা পরিবর্তন করা হয়। এটি CurrentCulture এবং CurrentUICulture সেট করে, যা অ্যাপ্লিকেশনের UI এর ভাষা পরিবর্তন করবে।

উদাহরণ: CultureInfo ব্যবহার করে ভাষা পরিবর্তন করা

using System.Globalization;
using System.Threading;

public void SetLanguage(string cultureName)
{
    var cultureInfo = new CultureInfo(cultureName);
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;

    // Refresh UI after culture change
    Application.Current.Resources.Clear();
    Application.Current.Resources.MergedDictionaries.Clear();
    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri($"pack://application:,,,/Resources/{cultureName}.xaml") });
}

ব্যাখ্যা:

  • CultureInfo কন্ট্রোলের মাধ্যমে যে ভাষা পরিবর্তন হবে তা নির্ধারণ করা হয়।
  • CurrentCulture এবং CurrentUICulture দ্বারা UI কে নতুন ভাষার জন্য কনফিগার করা হয়।
  • Resources.MergedDictionaries-এ নতুন ResourceDictionary লোড করা হয়, যা নতুন ভাষার জন্য প্রয়োজনীয় রিসোর্সকে অন্তর্ভুক্ত করে।

৩. Switching Language at Runtime in WPF

WPF অ্যাপ্লিকেশন-এ runtime-এ ভাষা পরিবর্তন করার জন্য ResourceManager ব্যবহার করা যেতে পারে। এটি ভাষা পরিবর্তনের সময় UI রিফ্রেশ করার সুযোগ দেয়।

Step 1: Create Resource Files

  1. Resources.xaml (ডিফল্ট ভাষা)
  2. Resources.fr.xaml (ফরাসি ভাষা)
  3. Resources.es.xaml (স্প্যানিশ ভাষা)

Step 2: Dynamic Language Switching Code

using System.Globalization;
using System.Windows;

public void ChangeLanguage(string language)
{
    CultureInfo ci = new CultureInfo(language);
    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;
    
    // Reload resources based on selected language
    var resourceDictionary = new ResourceDictionary();
    resourceDictionary.Source = new Uri($"pack://application:,,,/Resources/{language}.xaml", UriKind.Absolute);
    
    Application.Current.Resources.MergedDictionaries.Clear();
    Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}

Step 3: Bind Resources in XAML

<TextBlock Text="{x:Static properties:Resources.Greeting}" />

এখানে Greeting হচ্ছে .resx ফাইলের কিপর্যন্ত স্ট্রিং। ভাষা পরিবর্তন হলে UI তে এই স্ট্রিংটি পরিবর্তিত হবে।


৪. Language Switching in WinUI 3

WinUI 3-এ Localization এবং Dynamic Language Switching করার জন্য প্রায় একই প্রক্রিয়া অনুসরণ করা হয়। তবে WinUI 3-এ ResourceDictionary এবং CultureInfo কৌশল ব্যবহার করা হয়।

Step 1: Create Resource Files

WinUI 3-এ .resw ফাইল ব্যবহার করা হয় যেখানে স্ট্রিং সংরক্ষণ করা থাকে:

  • Strings.resw (ডিফল্ট ভাষা)
  • Strings.fr.resw (ফরাসি ভাষা)
  • Strings.es.resw (স্প্যানিশ ভাষা)

Step 2: Change Language in WinUI 3

using Windows.ApplicationModel.Resources.Core;
using System.Globalization;
using Windows.Globalization;

public void SetLanguage(string languageCode)
{
    var language = new Language(languageCode);
    ApplicationLanguages.PrimaryLanguageOverride = language.Tag;

    // Refresh UI to reflect the language change
    var resourceContext = ResourceContext.GetForCurrentView();
    resourceContext.Languages = new string[] { language.Tag };
    
    // Update the UI with new language
    Resources.DefaultContext = resourceContext;
}

Step 3: Bind Resources in XAML

<TextBlock Text="{Binding Path='Resources.Greeting'}"/>

এখানে Resources.Greeting হল .resw ফাইলের কিপর্যন্ত স্ট্রিং।


৫. Handling Right-to-Left Languages

ডান থেকে বাম (Right-to-Left, RTL) ভাষার জন্য আপনাকে UI কন্ট্রোলের অ্যালাইনমেন্টও পরিবর্তন করতে হবে। উদাহরণস্বরূপ, আরবি বা হিব্রু ভাষার জন্য অ্যাপ্লিকেশনে কন্ট্রোলের অ্যালাইনমেন্ট রিভার্স করা হয়।

উদাহরণ: RTL সমর্থন

<TextBlock Text="{Binding Path=Greeting}" FlowDirection="RightToLeft"/>

এখানে FlowDirection="RightToLeft" দিয়ে কন্ট্রোলের টেক্সট এবং UI রাইট-টু-লেফট ভাষার জন্য সেট করা হয়েছে।


উপসংহার

Dynamic Language Switching অ্যাপ্লিকেশনে ইন্টারন্যাশনালাইজেশন এবং ইউজার কাস্টমাইজেশন নিশ্চিত করার একটি কার্যকরী পদ্ধতি। DataTemplate, CultureInfo, Resource Files এবং ResourceManager ব্যবহার করে অ্যাপ্লিকেশনটি বিভিন্ন ভাষায় স্বয়ংক্রিয়ভাবে রূপান্তরিত হতে পারে। এই টেকনিকগুলো ব্যবহার করে আপনি ডাইনামিক ভাষার পরিবর্তন করতে পারবেন, যা একটি আন্তর্জাতিক অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।

Content added By

Currency, Date, এবং Number Formatting

423

Currency, Date, এবং Number Formatting হল গুরুত্বপূর্ণ ফিচার যা ইউজার ইন্টারফেস (UI) ডেভেলপমেন্টে ব্যবহারকারীর ভ্যালু বা ডেটা ভালোভাবে প্রদর্শন করতে সাহায্য করে। WPF এবং WinUI অ্যাপ্লিকেশনে এই ফর্ম্যাটিং ফিচারগুলি ডেটাকে আরো পাঠযোগ্য এবং স্থানীয় কনভেনশনের সাথে সামঞ্জস্যপূর্ণ করে তোলে।

এই টিউটোরিয়ালে আমরা Currency, Date, এবং Number Formatting এর বিস্তারিত ব্যবহার এবং উদাহরণ দেখাবো।


১. Currency Formatting

Currency Formatting ব্যবহারকারীর অ্যাপ্লিকেশনে সংখ্যাকে মুদ্রার (Currency) ফর্ম্যাটে প্রদর্শন করতে সাহায্য করে। এটি একটি নির্দিষ্ট দেশের মুদ্রা সিম্বল এবং দশমিক পয়েন্ট ব্যবহার করে অর্থের মানের সঠিক উপস্থাপন করে।

WPF-এ Currency Formatting উদাহরণ

<Window x:Class="CurrencyFormattingExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Currency Formatting Example" Height="350" Width="525">
    <Grid>
        <TextBlock Text="{Binding CurrencyAmount, StringFormat={}{0:C}}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>

C# কোড:

using System.Globalization;
using System.Windows;

namespace CurrencyFormattingExample
{
    public partial class MainWindow : Window
    {
        public decimal CurrencyAmount { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            CurrencyAmount = 1234.56m;
            DataContext = this;
        }
    }
}

ব্যাখ্যা:

  • StringFormat={}{0:C}: এখানে C ব্যবহার করা হয়েছে, যা ডিফল্টভাবে দেশের মুদ্রা সিম্বল এবং দশমিকের সঠিক ফরম্যাট অনুসারে মান প্রদর্শন করবে (যেমন, $1,234.56 বা ₹1,234.56)।
  • CurrencyAmount: এটি একটি ডেসিমাল ভ্যালু যা মুদ্রার মান প্রদর্শন করবে।

২. Date Formatting

Date Formatting ডেটাকে স্থানীয় কনভেনশনের অনুসারে উপস্থাপন করতে ব্যবহৃত হয়, যেমন পূর্ণ তারিখ (e.g., "Sunday, December 1, 2024") বা কেবল মাস, দিন, বছর (e.g., "12/01/2024")।

WPF-এ Date Formatting উদাহরণ

<Window x:Class="DateFormattingExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Date Formatting Example" Height="350" Width="525">
    <Grid>
        <TextBlock Text="{Binding CurrentDate, StringFormat={}{0:D}}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>

C# কোড:

using System;
using System.Windows;

namespace DateFormattingExample
{
    public partial class MainWindow : Window
    {
        public DateTime CurrentDate { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            CurrentDate = DateTime.Now;
            DataContext = this;
        }
    }
}

ব্যাখ্যা:

  • StringFormat={}{0:D}: এখানে D ফরম্যাটটি সম্পূর্ণ তারিখের ফরম্যাটে ডেটা প্রদর্শন করবে, যেমন "Sunday, December 1, 2024"।
  • CurrentDate: এটি বর্তমান তারিখ ধারণ করে, যা DateTime.Now দ্বারা সেট করা হয়েছে।

DateTime Format Options:

  • D: পূর্ণ তারিখ (e.g., "Sunday, December 1, 2024")
  • d: সংক্ষিপ্ত তারিখ (e.g., "12/01/2024")
  • t: সংক্ষিপ্ত সময় (e.g., "12:30 PM")
  • T: পূর্ণ সময় (e.g., "12:30:00 PM")

৩. Number Formatting

Number Formatting সংখ্যা প্রদর্শনের জন্য বিভিন্ন ফরম্যাটিং ব্যবহার করে, যেমন দশমিক স্থান, হাজারের বিভাজক, শতাংশ এবং অন্যান্য।

WPF-এ Number Formatting উদাহরণ

<Window x:Class="NumberFormattingExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Number Formatting Example" Height="350" Width="525">
    <Grid>
        <TextBlock Text="{Binding NumberValue, StringFormat={}{0:N2}}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>

C# কোড:

using System.Windows;

namespace NumberFormattingExample
{
    public partial class MainWindow : Window
    {
        public double NumberValue { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            NumberValue = 1234567.89123;
            DataContext = this;
        }
    }
}

ব্যাখ্যা:

  • StringFormat={}{0:N2}: এখানে N2 ব্যবহার করা হয়েছে, যা সংখ্যাটিকে হাজারের বিভাজক এবং দশমিক স্থান সহ ২ দশমিক পর্যন্ত প্রদর্শন করবে (যেমন: "1,234,567.89")।
  • NumberValue: এটি একটি ডাবল ভ্যালু যা ১২৩৪৫৬৭.৮৯১২৩ নম্বরটি ধারণ করে।

Number Format Options:

  • N: হাজারের বিভাজক সহ সংখ্যা (e.g., "1,234,567.89")
  • F: দশমিক স্থান সহ পূর্ণসংখ্যা (e.g., "1234.56")
  • P: শতাংশ (e.g., "50%")
  • E: বৈজ্ঞানিক নোটেশন (e.g., "1.23E+03")

৪. Combining All Formatting

আপনি Currency, Date, এবং Number Formatting একসাথে ব্যবহার করতে পারেন একটি একক টেমপ্লেটে, যাতে একটি সম্পূর্ণ ফরম্যাটেড স্ট্রিং তৈরি হয়।

উদাহরণ: সমস্ত ফরম্যাটিং একসাথে ব্যবহার করা

<Window x:Class="AdvancedFormattingExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Advanced Formatting Example" Height="350" Width="525">
    <Grid>
        <TextBlock>
            <TextBlock.Inlines>
                <Run Text="{Binding CurrencyAmount, StringFormat={}{0:C}}"/>
                <Run Text=" " />
                <Run Text="{Binding CurrentDate, StringFormat={}{0:D}}"/>
                <Run Text=" " />
                <Run Text="{Binding NumberValue, StringFormat={}{0:N2}}"/>
            </TextBlock.Inlines>
        </TextBlock>
    </Grid>
</Window>

C# কোড:

using System;
using System.Windows;

namespace AdvancedFormattingExample
{
    public partial class MainWindow : Window
    {
        public decimal CurrencyAmount { get; set; }
        public DateTime CurrentDate { get; set; }
        public double NumberValue { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            CurrencyAmount = 1234.56m;
            CurrentDate = DateTime.Now;
            NumberValue = 1234567.89123;
            DataContext = this;
        }
    }
}

আউটপুট:

  • CurrencyAmount: $1,234.56 (বা দেশীয় মুদ্রার সিম্বল)
  • CurrentDate: Sunday, December 1, 2024
  • NumberValue: 1,234,567.89

উপসংহার

Currency, Date, এবং Number Formatting ব্যবহার করে আপনার অ্যাপ্লিকেশনে ডেটাকে আরও পাঠযোগ্য এবং ব্যবহারকারী-বান্ধব করে তোলা সম্ভব। WPF এবং WinUI তে StringFormat এবং DataTemplate ব্যবহার করে আপনি ডেটার ফরম্যাটিংকে আরও কাস্টমাইজ এবং কার্যকরভাবে পরিচালনা করতে পারবেন।

এই টেকনিক্সগুলো ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের UI-তে ডেটা উপস্থাপন এবং ডেটা টেমপ্লেট এবং কাস্টম ফরম্যাটিং ব্যবহার করে আরো উন্নত ইউজার ইন্টারফেস তৈরি করতে পারবেন।

Content added By

Right-to-Left (RTL) এবং Left-to-Right (LTR) Layout Support

390

Right-to-Left (RTL) এবং Left-to-Right (LTR) লেআউট সাপোর্ট অ্যাপ্লিকেশনের ভাষা এবং ব্যবহারকারীর অঞ্চলের ওপর নির্ভর করে। যখন আপনি একটি আন্তর্জাতিক (International) অ্যাপ্লিকেশন তৈরি করেন, তখন আপনাকে বিভিন্ন ভাষার জন্য সঠিক লেআউট সমর্থন নিশ্চিত করতে হবে। উদাহরণস্বরূপ, English, French, Spanish প্রভৃতি ভাষাগুলি Left-to-Right (LTR) লেআউট ব্যবহার করে, যখন Arabic, Hebrew, এবং Urdu প্রভৃতি ভাষাগুলি Right-to-Left (RTL) লেআউট ব্যবহার করে।

এটি বিশেষভাবে গুরুত্বপূর্ণ, কারণ ব্যবহারকারীরা তাদের নিজের ভাষার জন্য উপযুক্ত ইউজার ইন্টারফেস (UI) চাইবে এবং যদি UI সঠিকভাবে লেআউট না হয়, তবে তা ইউজার এক্সপেরিয়েন্স (UX) নষ্ট করতে পারে।


LTR এবং RTL লেআউট সাপোর্ট কিভাবে কাজ করে?

LTR এবং RTL লেআউট সাপোর্ট করার জন্য অ্যাপ্লিকেশনকে সঠিকভাবে কনফিগার করতে হবে। উইন্ডোজ অ্যাপ্লিকেশনগুলোতে সাধারণত TextFlowDirection বা FlowDirection প্রপার্টি ব্যবহার করা হয়, যা ডানদিকে বা বামদিকে টেক্সট প্রবাহ পরিচালনা করে।

১. LTR Layout

LTR (Left-to-Right) লেআউট এমন একটি লেআউট যেখানে ইউজারের ইনপুট এবং টেক্সট বাম থেকে ডানে প্রবাহিত হয়। এটি বেশিরভাগ পশ্চিমী ভাষা, যেমন ইংরেজি, স্প্যানিশ, ফরাসী, প্রভৃতির জন্য ব্যবহৃত হয়।

২. RTL Layout

RTL (Right-to-Left) লেআউট এমন একটি লেআউট যেখানে ইউজারের ইনপুট এবং টেক্সট ডান থেকে বামে প্রবাহিত হয়। এটি আরবী, হিব্রু, উর্দু ইত্যাদি ভাষার জন্য ব্যবহৃত হয়।

WinUI 3 এবং WPF-এ LTR এবং RTL সাপোর্ট

1. WinUI 3 (Windows App SDK) for RTL and LTR

WinUI 3 এবং UWP (Universal Windows Platform) অ্যাপ্লিকেশনে FlowDirection প্রপার্টি ব্যবহার করে লেআউট পরিবর্তন করা যায়। এটি TextBlock, Button, ListBox, ComboBox ইত্যাদি কন্ট্রোলের জন্য কাজ করে।

উদাহরণ: WinUI 3-এ RTL এবং LTR লেআউট

XAML:

<Window x:Class="RTL_LTR_Example.MainWindow"
        xmlns="using:Microsoft.UI.Xaml.Controls"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="RTL/LTR Layout" Height="350" Width="525">
    <Grid FlowDirection="{Binding FlowDirection}">
        <TextBlock Text="Hello, world!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>

C# কোড:

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Windows.Globalization;

namespace RTL_LTR_Example
{
    public sealed partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();
            SetFlowDirection();
        }

        private void SetFlowDirection()
        {
            var currentLanguage = ApplicationLanguages.Languages[0];
            // Check if the current language is RTL (for example, Arabic)
            if (currentLanguage == "ar")
            {
                this.FlowDirection = FlowDirection.RightToLeft;
            }
            else
            {
                this.FlowDirection = FlowDirection.LeftToRight;
            }
        }
    }
}

ব্যাখ্যা:

  • FlowDirection: উইন্ডোতে বা কন্ট্রোলগুলিতে LTR বা RTL লেআউট নির্ধারণ করে। যখন বর্তমান ভাষা আরবি (Arabic) হবে, তখন UI-টি RTL লেআউট অনুসরণ করবে, অন্যথায় LTR হবে।

2. WPF (Windows Presentation Foundation) for RTL and LTR

WPF-এ, আপনি FlowDirection প্রপার্টি ব্যবহার করে TextBlock, Button, ListBox, ComboBox ইত্যাদির জন্য RTL এবং LTR সাপোর্ট কনফিগার করতে পারেন।

উদাহরণ: WPF-এ RTL এবং LTR সাপোর্ট

XAML:

<Window x:Class="RTL_LTR_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WPF RTL/LTR Layout" Height="350" Width="525">
    <Grid FlowDirection="{Binding FlowDirection}">
        <TextBlock Text="Hello, World!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>

C# কোড:

using System.Windows;

namespace RTL_LTR_WPF
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            SetFlowDirection();
        }

        private void SetFlowDirection()
        {
            var currentLanguage = System.Globalization.CultureInfo.CurrentCulture.Name;
            // Check if the current language is RTL (e.g., Arabic)
            if (currentLanguage.StartsWith("ar"))
            {
                this.FlowDirection = System.Windows.FlowDirection.RightToLeft;
            }
            else
            {
                this.FlowDirection = System.Windows.FlowDirection.LeftToRight;
            }
        }
    }
}

ব্যাখ্যা:

  • FlowDirection: WPF-এ ব্যবহার করা হয়েছে, যা LTR বা RTL লেআউট সিলেক্ট করতে সাহায্য করে। CultureInfo.CurrentCulture.Name এর মাধ্যমে বর্তমান ভাষা চেক করা হয় এবং তার ভিত্তিতে লেআউট পরিবর্তিত হয়।

3. Auto Detection of RTL or LTR Based on Language

যেহেতু RTL এবং LTR লেআউট সাধারণত ভাষার ওপর নির্ভর করে, আপনাকে এমন একটি সিস্টেম তৈরি করতে হবে যা স্বয়ংক্রিয়ভাবে ব্যবহারকারীর ভাষার উপর ভিত্তি করে লেআউট সিলেক্ট করবে। আপনি CultureInfo বা ApplicationLanguages ব্যবহার করে এরকম কাজ করতে পারেন।

উদাহরণ: Auto Detection (Auto RTL/LTR) - WinUI 3

private void SetFlowDirection()
{
    var currentLanguage = ApplicationLanguages.Languages[0];
    if (currentLanguage == "ar" || currentLanguage == "he" || currentLanguage == "fa")
    {
        this.FlowDirection = FlowDirection.RightToLeft;  // RTL Languages
    }
    else
    {
        this.FlowDirection = FlowDirection.LeftToRight;  // LTR Languages
    }
}

উদাহরণ: Auto Detection (Auto RTL/LTR) - WPF

private void SetFlowDirection()
{
    var currentLanguage = System.Globalization.CultureInfo.CurrentCulture.Name;
    if (currentLanguage.StartsWith("ar") || currentLanguage.StartsWith("he") || currentLanguage.StartsWith("fa"))
    {
        this.FlowDirection = System.Windows.FlowDirection.RightToLeft; // RTL Languages
    }
    else
    {
        this.FlowDirection = System.Windows.FlowDirection.LeftToRight; // LTR Languages
    }
}

4. RTL and LTR Support for Text

TextBlock বা অন্যান্য টেক্সট-ভিত্তিক কন্ট্রোলগুলোতে, যদি LTR বা RTL লেআউট সঠিকভাবে সাপোর্ট না করা হয়, তবে টেক্সট সঠিকভাবে প্রদর্শিত হবে না। এজন্য আপনাকে TextAlignment এবং FlowDirection-এর ব্যবহার সঠিকভাবে করতে হবে।

উদাহরণ: RTL টেক্সটের জন্য TextAlignment

<TextBlock Text="مرحبا بالعالم" FlowDirection="RightToLeft" TextAlignment="Right"/>
  • TextAlignment="Right": RTL লেআউটে টেক্সট ডান দিকে সজ্জিত হবে।
  • FlowDirection="RightToLeft": RTL ভাষার জন্য প্রবাহ সঠিকভাবে সেট করা হবে।

Conclusion

Right-to-Left (RTL) এবং Left-to-Right (LTR) লেআউট সাপোর্ট অ্যাপ্লিকেশনটির আন্তর্জাতিককরণ (i18n) এবং স্থানিককরণ (l10n) প্রক্রিয়ার জন্য অত্যন্ত গুরুত্বপূর্ণ। FlowDirection প্রপার্টি, CultureInfo, ApplicationLanguages, এবং TextAlignment ব্যবহার করে, আপনি সহজেই LTR এবং RTL লেআউট সঠিকভাবে কনফিগার এবং প্রয়োগ করতে পারবেন। এটি অ্যাপ্লিকেশনটির ইউজার এক্সপেরিয়েন্সে উন্নতি করে এবং বিশ্বের বিভিন্ন ভাষাভাষী ব্যবহারকারীদের জন্য অ্যাপ্লিকেশনটি ব্যবহারের উপযোগী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...