تشخیص نصب بودن زبان آلمانی در ویندوز با سی شارپ

در این مقاله، به بررسی و تحلیل کد برنامه‌نویسی به زبان سی شارپ که وظیفه تشخیص نصب بودن زبان آلمانی بر روی سیستم عامل ویندوز را دارد، می‌پردازیم. این برنامه....

انتشار: , زمان مطالعه: 6 دقیقه
تشخیص نصب بودن زبان آلمانی در ویندوز با سی شارپ
دسته بندی: برنامه نویسی تعداد بازدید: 137

تشخیص نصب بودن زبان آلمانی در ویندوز با استفاده از زبان برنامه‌نویسی سی شارپ

چکیده

در این مقاله، به بررسی و تحلیل کد برنامه‌نویسی به زبان سی شارپ که وظیفه تشخیص نصب بودن زبان آلمانی بر روی سیستم عامل ویندوز را دارد، می‌پردازیم. این برنامه با استفاده از کتابخانه‌های استاندارد سیستم و فراخوانی توابع موجود در DLL‌های ویندوز، فهرستی از زبان‌های نصب شده را بازیابی و بررسی می‌کند.

مقدمه

تشخیص نصب بودن زبان‌های مختلف بر روی سیستم‌های عامل مختلف می‌تواند در زمینه‌های مختلفی مانند برنامه‌نویسی چندزبانه، تنظیمات منطقه‌ای، و دسترسی به منابع محلی مفید باشد. سی شارپ، که یکی از زبان‌های برنامه‌نویسی قدرتمند مایکروسافت است، ابزارهای متعددی برای دسترسی و مدیریت این تنظیمات فراهم می‌کند.

کد تشخیص نصب بودن زبان آلمانی در ویندوز با استفاده از زبان برنامه‌نویسی سی شارپ

// Programmer Ebrahim Shafiei (EbraSha)
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;

namespace Abdal.Core
{
    class LangDetect
    {
        [DllImport("user32.dll")]
        static extern int GetKeyboardLayoutList(int nBuff, [Out] IntPtr[] lpList);

        public static bool GermanyIsInstall()
        {
            int size = GetKeyboardLayoutList(0, null);
            IntPtr[] ids = new IntPtr[size];
            GetKeyboardLayoutList(ids.Length, ids);

            HashSet<string> uniqueLanguages = new HashSet<string>();

            foreach (IntPtr ptr in ids)
            {
                int klid = ptr.ToInt32() & 0xFFFF;
                CultureInfo culture = new CultureInfo(klid);
                uniqueLanguages.Add(culture.EnglishName);
            }

            bool isGermanPresent = false;
            foreach (string name in uniqueLanguages)
            {
                if (name.Contains("German"))
                {
                    isGermanPresent = true;
                }
                
            }

            return isGermanPresent;
        }
    }
}

تحلیل کد

کد مورد نظر در فضای نام Abdal.Core و کلاس LangDetect تعریف شده است. در این کلاس، تابع GermanyIsInstall وجود دارد که با استفاده از تابع GetKeyboardLayoutList که از کتابخانه user32.dll فراخوانی می‌شود، فهرستی از زبان‌های نصب‌شده بر روی سیستم کاربر را بازیابی می‌کند. این تابع، ابتدا تعداد زبان‌های نصب‌شده را تعیین می‌کند و سپس با تخصیص فضای کافی، شناسه‌های مربوط به هر زبان را دریافت می‌دارد.

برای هر شناسه زبان، معادل CultureInfo آن زبان با استفاده از کد محلی آن تعیین می‌شود. در نهایت، با جستجو در فهرست نام‌های زبان‌های بازیابی شده، وجود زبان آلمانی بررسی می‌شود.

ارزیابی و نتایج

این روش توانایی تشخیص زبان‌های مختلف را دارد و می‌توان آن را برای زبان‌های دیگر با تغییرات جزئی اعمال کرد. با این حال، اتکا به CultureInfo و شناسه‌های محلی ممکن است در برخی موارد به دلیل تنظیمات خاص کاربر یا نسخه‌های ویندوز، دقت متفاوتی داشته باشد.

کد مورد بررسی نمونه‌ای از توانایی‌های سی شارپ در برقراری ارتباط با سیستم عامل ویندوز و دستکاری تنظیمات سیستمی است. استفاده از کتابخانه‌های بومی ویندوز مانند user32.dll برای دستیابی به اطلاعات سیستمی، تکنیکی قدرتمند برای توسعه‌دهندگان نرم‌افزار است که به آنها امکان می‌دهد تا تطبیق‌پذیری بیشتری با نیازهای کاربران خود داشته باشند.

چگونه کد را فراخوانی کنیم

برای فراخوانی تابع GermanyIsInstall() که در کلاس LangDetect تعریف شده است در کد اصلی، شما باید از کلاس LangDetect نمونه‌سازی کنید و سپس تابع را فراخوانی کنید. اما با توجه به اینکه تابع GermanyIsInstall() به صورت static تعریف شده است، نیازی به نمونه‌سازی از کلاس نیست و می‌توانید مستقیماً آن را از طریق نام کلاس فراخوانی کنید. در زیر نحوه فراخوانی این تابع در برنامه اصلی آورده شده است:

 فراخوانی مستقیم تابع در متد Main

فرض کنید که می‌خواهید در متد Main بررسی کنید که آیا زبان آلمانی بر روی سیستم نصب شده است یا نه. می‌توانید کد زیر را بنویسید:

 // Programmer Ebrahim Shafiei (EbraSha)
using System;

namespace Abdal.Core
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isGermanInstalled = LangDetect.GermanyIsInstall();

            if (isGermanInstalled)
            {
                Console.WriteLine("The German language is installed on the system.");
            }
            else
            {
                Console.WriteLine("The German language is not installed on the system.");
            }
        }
    }
}

 توضیحات کد

  1. فراخوانی تابع: تابع GermanyIsInstall() از کلاس LangDetect به صورت مستقیم فراخوانی می‌شود زیرا به عنوان یک متد static تعریف شده است.
  2. چاپ نتیجه: با توجه به مقدار برگشتی از تابع (که نوع آن bool است)، پیغام مناسب در کنسول چاپ می‌شود تا وضعیت نصب زبان آلمانی را نمایش دهد.

این نحوه فراخوانی تابع به شما اجازه می‌دهد که بدون نیاز به ایجاد نمونه‌ای از کلاس LangDetect، وضعیت نصب زبان آلمانی را بررسی کنید. شما می توانید این کد را برای تمامی زبانها از جمله فارسی سفارشی سازی کنید  فقط کافیست این قسمت name.Contains("German")  را سفارسی سازی کنید و به جای آلمانی نام زبان مورد نظر را بنویسید . اگر نام زبان را نمی دانید متغییر  name که  حلقه استفاده شده را چاپ کنید تا لیست زبان های روی سیستم را ببینید .


دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)