ماژول محلی دسترسی به پایگاه داده و عملکرد POSIX Locale را باز می کند. مکانیسم محلی POSIX به برنامه نویسان اجازه می دهد تا با برخی از مسائل فرهنگی در یک برنامه ، بدون نیاز به برنامه نویس ، همه مشخصات هر کشوری را که در آن نرم افزار اجرا می شود ، مقابله کند.
ماژول محلی در بالای ماژول _locale اجرا می شود که به نوبه خود در صورت وجود از اجرای محلی ANSI C استفاده می کند.
ماژول محلی استثناء و توابع زیر را تعریف می کند:
محل استثناخطا
استثناء مطرح شده هنگامی که محلی به SetLocale () منتقل شد ، تشخیص داده نمی شود.
محلیsetLocale (دسته ، محلی = هیچ)
اگر محلی داده شود و هیچ کدام نباشد ، SetLocale () تنظیم محلی را برای این دسته تغییر می دهد. دسته های موجود در توضیحات داده زیر ذکر شده است. محلی ممکن است یک رشته باشد ، یا قابل تکرار از دو رشته (کد زبان و رمزگذاری) باشد. اگر این یک تکرار باشد ، با استفاده از موتور محلی محلی به نام محلی تبدیل می شود. یک رشته خالی تنظیمات پیش فرض کاربر را مشخص می کند. اگر اصلاح محلی انجام شود ، خطای استثنا مطرح می شود. در صورت موفقیت ، تنظیمات محلی جدید بازگردانده می شود.
اگر Locale حذف نشده باشد یا هیچ کدام ، تنظیمات فعلی برای گروه بازگردانده می شود.
SetLocale () در اکثر سیستم ها از امنیت موضوع نیست. برنامه ها به طور معمول با فراخوانی شروع می شوند
این مکان محلی را برای همه دسته ها به تنظیم پیش فرض کاربر (که به طور معمول در متغیر محیط LANG مشخص شده است) تنظیم می کند. اگر محلی پس از آن تغییر نکرده باشد ، استفاده از چند رشته ای نباید مشکلاتی ایجاد کند.
پایگاه داده کنوانسیون های محلی را به عنوان فرهنگ لغت باز می گرداند. این فرهنگ لغت رشته های زیر را به عنوان کلیدها دارد:
شخصیت نقطه اعشاری.
توالی اعداد مشخص می کند که کدام موقعیت نسبی "هزاران_ه" را انتظار می رود. اگر دنباله با char_max خاتمه یابد ، گروه بندی دیگری انجام نمی شود. اگر دنباله با 0 خاتمه یابد ، از آخرین اندازه گروه به طور مکرر استفاده می شود.
شخصیت مورد استفاده بین گروه ها.
نماد ارز بین المللی.
نماد ارز محلی.
این که آیا نماد ارز قبل از ارزش (برای احترام مثبت. مقادیر منفی).
این که آیا نماد ارزی توسط یک فضا از مقدار جدا شده است (برای احترام مثبت. مقادیر منفی).
نقطه اعشار مورد استفاده برای مقادیر پولی.
تعداد ارقام کسری مورد استفاده در قالب بندی محلی مقادیر پولی.
تعداد ارقام کسری مورد استفاده در قالب بندی بین المللی مقادیر پولی.
جداکننده گروه مورد استفاده برای مقادیر پولی.
معادل "گروه بندی" ، که برای مقادیر پولی استفاده می شود.
نمادی که برای حاشیه نویسی یک ارزش پولی مثبت استفاده می شود.
نمادی که برای حاشیه نویسی یک ارزش پولی منفی استفاده می شود.
موقعیت علامت (برای احترام مثبت. مقادیر منفی) ، در زیر مشاهده کنید.
تمام مقادیر عددی را می توان روی char_max تنظیم کرد تا نشان دهد که هیچ مقداری مشخص شده در این محل وجود ندارد.
مقادیر ممکن برای "p_sign_posn" و "n_sign_posn" در زیر آورده شده است.
ارز و ارزش توسط پرانتز احاطه شده است.
علامت باید قبل از نماد ارزش و ارز باشد.
علامت باید از نماد ارزش و ارز پیروی کند.
علامت باید بلافاصله قبل از مقدار باشد.
علامت باید بلافاصله مقدار را دنبال کند.
هیچ چیز در این محلی مشخص نشده است.
این تابع به طور موقت محلی LC_CTYPE را به محل LC_NUMERIC یا محل LC_MONETARY در صورتی که محلی متفاوت باشد و رشته های عددی یا پولی غیر ASCII باشند ، تنظیم می کند. این تغییر موقتی بر موضوعات دیگر تأثیر می گذارد.
تغییر در نسخه 3. 7: عملکرد اکنون به طور موقت محل LC_CTYPE را در بعضی موارد به محل LC_NUMERIC تنظیم می کند.
برخی از اطلاعات خاص محلی را به عنوان یک رشته برگردانید. این عملکرد در همه سیستم ها در دسترس نیست و مجموعه گزینه های ممکن نیز ممکن است در سیستم عامل ها متفاوت باشد. مقادیر آرگومان احتمالی اعداد هستند که ثابت های نمادین در ماژول محلی در دسترس هستند.
تابع NL_LANGINFO () یکی از کلیدهای زیر را می پذیرد. بیشتر توضیحات از توضیحات مربوطه در کتابخانه GNU C گرفته شده است.
رشته ای را با نام رمزگذاری کاراکتر مورد استفاده در محل انتخاب شده دریافت کنید.
رشته ای را بدست آورید که می تواند به عنوان یک رشته قالب برای زمان استفاده شود. Strftime () برای نشان دادن تاریخ و زمان به روشی خاص محلی.
رشته ای را دریافت کنید که می تواند به عنوان یک رشته فرمت برای زمان استفاده شود. Strftime () برای نشان دادن تاریخ به روشی خاص محلی.
رشته ای را بدست آورید که می تواند به عنوان یک رشته قالب برای زمان استفاده شود. Strftime () برای نشان دادن زمانی به روشی خاص محلی.
یک رشته فرمت را برای زمان دریافت کنید. Strftime () برای نشان دادن زمان در قالب AM/PM.
نام روز N-Th هفته را دریافت کنید.
این به دنبال کنوانسیون Day_1 یکشنبه است ، نه کنوانسیون بین المللی (ISO 8601) که دوشنبه اولین روز هفته است.
نام اختصاری روز N-Th هفته را دریافت کنید.
نام ماه N را دریافت کنید.
نام مختصر ماه N را دریافت کنید.
شخصیت Radix را دریافت کنید (نقطه اعشاری ، کاما اعشاری و غیره).
شخصیت جداکننده را برای هزاران نفر دریافت کنید (گروه های سه رقم).
یک عبارت منظم دریافت کنید که می تواند با تابع regex برای تشخیص پاسخ مثبت به یک سوال بله/خیر استفاده شود.
یک عبارت منظم دریافت کنید که می تواند با تابع regex(3) برای تشخیص پاسخ منفی به یک سوال بله/خیر استفاده شود.
عبارات منظم برای YESEXPR و NOEXPR از نحو مناسب برای تابع regex() از کتابخانه C استفاده می کنند که ممکن است با نحو استفاده شده در re متفاوت باشد.
اگر نماد باید قبل از مقدار ظاهر شود، نماد ارز را قبل از "-"، اگر نماد باید بعد از مقدار ظاهر شود "+" یا "" را دریافت کنید. اگر نماد باید جایگزین کاراکتر ریشه شود.
رشته ای دریافت کنید که نشان دهنده دوران مورد استفاده در منطقه فعلی باشد.
اکثر محلی ها این مقدار را تعریف نمی کنند. نمونه ای از محلی که این مقدار را تعریف می کند، زبان ژاپنی است. در ژاپن، نمایش سنتی خرما شامل نام دوران مربوط به سلطنت امپراتور آن زمان است.
معمولاً نباید نیازی به استفاده مستقیم از این مقدار باشد. تعیین اصلاح کننده E در رشته های فرمت آنها باعث می شود که تابع time. strftime() از این اطلاعات استفاده کند. قالب رشته برگشتی مشخص نشده است و بنابراین نباید در سیستم های مختلف اطلاعاتی از آن را فرض کنید.
یک رشته قالب برای time. strftime() دریافت کنید تا تاریخ و زمان را به روشی مبتنی بر دوره محلی خاص نشان دهد.
یک رشته فرمت برای time. strftime() دریافت کنید تا تاریخ را به روشی مبتنی بر دوره محلی خاص نشان دهد.
یک رشته فرمت برای time. strftime() دریافت کنید تا زمان را به روشی مبتنی بر دوره محلی خاص نشان دهد.
نمایشی از حداکثر 100 مقدار مورد استفاده برای نشان دادن مقادیر 0 تا 99 را دریافت کنید.
محلgetdefaultlocale ( [ envvars ] ) ¶
سعی می کند تنظیمات محلی پیش فرض را تعیین کند و آن ها را به صورت چند تایی از فرم (کد زبان، رمزگذاری) برمی گرداند.
طبق POSIX، برنامه ای که setlocale (LC_ALL، '') نامیده نشده است با استفاده از محلی C قابل حمل اجرا می شود. فراخوانی setlocale (LC_ALL، '') به آن اجازه می دهد از محلی پیش فرض همانطور که توسط متغیر LANG تعریف شده است استفاده کند. از آنجایی که نمی خواهیم با تنظیمات محلی فعلی تداخل داشته باشیم، بنابراین رفتار را به روشی که در بالا توضیح داده شد تقلید می کنیم.
برای حفظ سازگاری با سایر پلتفرم ها، نه تنها متغیر LANG آزمایش می شود، بلکه لیستی از متغیرها به عنوان پارامتر envvars ارائه می شود. اولین موردی که باید تعریف شود استفاده خواهد شد. envvars مسیر جستجوی مورد استفاده در gettext گنو را پیش فرض می کند. همیشه باید نام متغیر "LANG" داشته باشد. مسیر جستجوی متن GNU به ترتیب شامل «LC_ALL»، «LC_CTYPE»، «LANG» و «LANGUAGE» است.
به جز کد "C" ، کد زبان با RFC 1766 مطابقت دارد. در صورت عدم تعیین مقادیر آنها ، کد زبان و رمزگذاری ممکن است هیچ کدام نباشند.
از زمان نسخه 3. 11 مستهلک می شود ، در نسخه 3. 13 حذف می شود.
تنظیم فعلی را برای دسته محلی داده شده به عنوان دنباله حاوی کد زبان ، رمزگذاری باز می گرداند. دسته ممکن است یکی از مقادیر LC_* به جز LC_ALL باشد. این به طور پیش فرض به LC_CTYPE است.
به جز کد "C" ، کد زبان با RFC 1766 مطابقت دارد. در صورت عدم تعیین مقادیر آنها ، کد زبان و رمزگذاری ممکن است هیچ کدام نباشند.
محلیgetPreferredEncoding (do_setlocale = true)
با توجه به ترجیحات کاربر ، رمزگذاری محلی مورد استفاده برای داده های متن را برگردانید. ترجیحات کاربر در سیستم های مختلف متفاوت بیان می شود و ممکن است در برخی از سیستم ها به صورت برنامه ای در دسترس نباشد ، بنابراین این عملکرد فقط یک حدس را برمی گرداند.
در برخی از سیستم ها ، لازم است برای به دست آوردن ترجیحات کاربر ، از SetLocale () استفاده کنید ، بنابراین این عملکرد از موضوع ایمن نیست. اگر استناد به SetLocale لازم یا مورد نظر نباشد ، DO_SETLOCALE باید روی کاذب تنظیم شود.
در Android یا اگر حالت Python UTF-8 فعال باشد ، همیشه "UTF-8" را برگردانید ، رمزگذاری محلی و آرگومان do_setlocale نادیده گرفته می شود.
تغییر در نسخه 3. 7: عملکرد اکنون همیشه "UTF-8" را در Android باز می گرداند یا اگر حالت Python UTF-8 فعال است.
در Android و VXWorks ، "UTF-8" را برگردانید.
در UNIX ، رمزگذاری محل فعلی LC_CTYPE را برگردانید. اگر NL_LANGINFO (CODESET) یک رشته خالی را برگرداند "UTF-8" را برگردانید: به عنوان مثال ، اگر محل فعلی LC_CTYPE پشتیبانی نشود.
در ویندوز ، صفحه کد ANSI را برگردانید.
این عملکرد مشابه GetPreferredEncoding (false) است به جز این عملکرد ، حالت Python UTF-8 را نادیده می گیرد.
جدید در نسخه 3. 11.
یک کد محلی عادی را برای نام محلی محلی نشان می دهد. کد محلی برگشتی برای استفاده با SetLocale () فرمت شده است. در صورت عدم موفقیت عادی ، نام اصلی بدون تغییر بازگردانده می شود.
اگر رمزگذاری داده شده مشخص نباشد ، عملکرد پیش فرض رمزگذاری پیش فرض برای کد محلی درست مانند SetLocale () است.
محلیRESETLOCALE (دسته = LC_ALL)
محلی را برای دسته بندی در تنظیمات پیش فرض تنظیم می کند.
تنظیم پیش فرض با فراخوانی GetDefaultLocale () تعیین می شود. دسته بندی پیش فرض به LC_ALL.
از زمان نسخه 3. 11 مستهلک می شود ، در نسخه 3. 13 حذف می شود.
دو رشته را با توجه به تنظیمات فعلی LC_COLLATE مقایسه می کند. مانند هر عملکرد مقایسه دیگر ، بسته به اینکه String1 قبل یا بعد از string2 جمع می شود یا با آن برابر است ، یک مقدار منفی یا یک مقدار مثبت یا 0 را برمی گرداند.
محلیstrxfrm (رشته)
محلیformat_string (قالب ، val ، گروه بندی = نادرست ، پولی = نادرست)
با توجه به تنظیمات فعلی LC_NUMERIC ، یک عدد Val را فرمت کنید. این قالب از کنوانسیون های اپراتور ٪ پیروی می کند. برای مقادیر نقطه شناور ، نقطه اعشار در صورت لزوم اصلاح می شود. اگر گروه بندی صحیح باشد ، گروه بندی را نیز در نظر می گیرد.
اگر پولی صحیح باشد ، تبدیل از هزاران پول جداکننده و رشته های گروه بندی استفاده می کند.
فرآیندهای قالب بندی مشخصات را با فرمت ٪ val ، اما تنظیمات محلی فعلی را در نظر می گیرد.
تغییر در نسخه 3. 7: پارامتر کلمه کلیدی پولی اضافه شد.
لطفاً توجه داشته باشید که این عملکرد مانند Format_String () کار می کند اما فقط برای مشخص کننده کاراکتر دقیقاً یک ٪ کار خواهد کرد. به عنوان مثال ، "٪ f" و "٪ . 0f" هر دو مشخصات معتبر هستند ، اما "٪ f kib" نیست.
برای رشته های کامل ، از format_string () استفاده کنید.
از نسخه 3. 7 مستهلک می شود: به جای آن از format_string () استفاده کنید.
با توجه به تنظیمات فعلی LC_MONETARY ، یک عدد Val را فرمت کنید.
رشته برگشتی شامل نماد ارز در صورت صحت نماد است ، که پیش فرض است. اگر گروه بندی صحیح باشد (که پیش فرض نیست) ، گروه بندی با مقدار انجام می شود. اگر بین المللی صحیح باشد (که پیش فرض نیست) ، از نماد بین المللی ارز استفاده می شود.
این عملکرد با محلی "C" کار نمی کند ، بنابراین شما باید ابتدا یک مکان را از طریق SetLocale () تنظیم کنید.
یک شماره نقطه شناور را با استفاده از همان قالب با عملکرد داخلی STR (شناور) قالب بندی می کند ، اما نقطه اعشاری را در نظر می گیرد.
محلیDELOCALIAL (رشته)
به دنبال تنظیمات LC_NUMERIC ، یک رشته را به یک رشته عدد عادی تبدیل می کند.
جدید در نسخه 3. 5.
یک رشته عدد عادی را به دنبال تنظیمات LC_NUMERIC به یک رشته فرمت تبدیل می کند.
جدید در نسخه 3. 10.
با استفاده از تنظیمات LC_NUMERIC ، با فراخوانی Func در نتیجه تماس با Delocalize () در رشته ، یک رشته را به یک شماره تبدیل می کند.
محلیatoi (رشته)
به دنبال کنوانسیون های LC_NUMERIC ، یک رشته را به یک عدد صحیح تبدیل می کند.
دسته محلی برای توابع نوع کاراکتر. بسته به تنظیمات این گروه ، توابع رشته ماژول که با Case برخورد می کند رفتار آنها را تغییر می دهد.
دسته محلی برای مرتب سازی رشته ها. توابع strcoll () و strxfrm () ماژول محلی تحت تأثیر قرار می گیرند.
دسته محلی برای قالب بندی زمان. زمان عملکرد . strftime () این کنوانسیون ها را دنبال می کند.
دسته محلی برای قالب بندی مقادیر پولی. گزینه های موجود از عملکرد LocalEconv () در دسترس است.
دسته محلی برای نمایش پیام. Python در حال حاضر از پیام های خاص آگاه از برنامه پشتیبانی نمی کند. پیام های نمایش داده شده توسط سیستم عامل ، مانند مواردی که توسط OS. sterror () بازگردانده شده اند ممکن است تحت تأثیر این گروه قرار بگیرند.
دسته محلی برای قالب بندی اعداد. قالب توابع () ، ATOI () ، ATOF () و STR () ماژول محلی تحت تأثیر آن دسته قرار می گیرند. سایر عملیات قالب بندی عددی تحت تأثیر قرار نمی گیرند.
ترکیبی از تمام تنظیمات محلی. اگر این پرچم هنگام تغییر محل استفاده شود ، تنظیم محل برای همه دسته ها تلاش می شود. اگر این کار برای هر مقوله انجام شود ، هیچ دسته بندی به هیچ وجه تغییر نمی کند. هنگامی که محلی با استفاده از این پرچم بازیابی می شود ، رشته ای که نشانگر تنظیم همه دسته ها است ، بازگردانده می شود. بعداً می توان از این رشته برای بازگرداندن تنظیمات استفاده کرد.
این یک ثابت نمادین است که برای مقادیر مختلفی که توسط localeconv () بازگردانده شده است ، استفاده می شود.
زمینه ، جزئیات ، نکات ، نکات و احتیاط ها
استاندارد C محلی را به عنوان یک ویژگی گسترده برنامه تعریف می کند که ممکن است برای تغییر نسبتاً گران باشد. مهمتر از آن ، برخی از پیاده سازی ها به گونه ای شکسته می شوند که تغییرات مکرر محلی ممکن است باعث زباله های اصلی شود. این امر باعث می شود تا محلی برای استفاده صحیح از آن دردناک باشد.
در ابتدا ، هنگامی که یک برنامه آغاز می شود ، محلی محلی است ، مهم نیست که محل مورد نظر کاربر چیست. یک استثنا وجود دارد: دسته LC_CTYPE در هنگام راه اندازی تغییر می یابد تا رمزگذاری محلی فعلی را برای رمزگذاری محلی مورد نظر کاربر تنظیم کنید. این برنامه صریحاً باید بگوید که با فراخوانی SetLocale (LC_ALL ، '') تنظیمات محلی مورد نظر کاربر را برای دسته های دیگر می خواهد.
به طور کلی ایده بد است که در بعضی از کارهای روزمره با SetLocale () تماس بگیرید ، زیرا به عنوان یک اثر جانبی بر کل برنامه تأثیر می گذارد. صرفه جویی و بازیابی آن تقریباً بد است: گران است و موضوعات دیگری را که قبل از ترمیم تنظیمات اجرا می شود ، تحت تأثیر قرار می دهد.
اگر هنگام کدگذاری یک ماژول برای استفاده عمومی ، به یک نسخه مستقل محلی از عملیاتی که تحت تأثیر محلی قرار دارد (مانند قالب های خاصی که با زمان استفاده می شود. Strftime ()) نیاز دارید ، باید راهی برای انجام این کار پیدا کنیدبا استفاده از روال استاندارد کتابخانه. حتی بهتر خود را متقاعد می کند که استفاده از تنظیمات محلی اشکالی ندارد. فقط به عنوان آخرین راه حل باید مستند کنید که ماژول شما با تنظیمات محلی غیر C سازگار نیست.
تنها راه برای انجام عملیات عددی با توجه به محلی استفاده از توابع ویژه تعریف شده توسط این ماژول است: ATOF () ، ATOI () ، قالب () ، STR ().
هیچ راهی برای انجام تبدیل های موردی و طبقه بندی شخصیت ها با توجه به محلی وجود ندارد. برای رشته های متن (یونیکد) این موارد فقط با توجه به مقدار کاراکتر انجام می شود ، در حالی که برای رشته های بایت ، تبدیل و طبقه بندی ها با توجه به مقدار ASCII بایت و بایت هایی انجام می شود که بیت بالای آن تنظیم شده است (یعنی بایت های غیر ASCII) هرگز بخشی از کلاس شخصیت مانند نامه یا فضای سفید تبدیل نمی شوند و در نظر گرفته نمی شوند.
برای نویسندگان و برنامه هایی که پایتون را تعبیه کرده اند
ماژول های پسوند هرگز نباید با SetLocale () تماس بگیرند ، مگر اینکه دریابند محلی فعلی چیست. اما از آنجا که مقدار بازگشت فقط می تواند به طور قابل توجهی برای بازگرداندن آن استفاده شود ، این بسیار مفید نیست (به جز شاید برای یافتن اینکه آیا محلی C است یا خیر).
هنگامی که کد پایتون از ماژول محلی برای تغییر محل استفاده می کند ، این امر بر برنامه تعبیه نیز تأثیر می گذارد. اگر برنامه تعبیه نمی خواهد این اتفاق بیفتد ، باید ماژول پسوند _locale (که تمام کارها را انجام می دهد) را از جدول ماژول های داخلی در پرونده Config. C حذف کنید ، و اطمینان حاصل کنید که ماژول _locale نیستبه عنوان یک کتابخانه مشترک قابل دسترسی است.
دسترسی به کاتالوگ پیام
محلیGetText (MSG) ¶ محلی. dgettext (دامنه ، msg) ¶ محلی. DCGETTEXT (دامنه ، MSG ، دسته) ¶ محلی. TextDomain (دامنه) ¶ محلی. BindTextDomain (دامنه ، دیر)
ماژول محلی رابط GetText کتابخانه C را در سیستم هایی که این رابط را ارائه می دهند ، افشا می کند. این شامل توابع getText () ، dgettext () ، dcgettext () ، textdomain () ، bindtextdomain () و bind_textdomain_codeset () است. اینها مشابه توابع مشابه در ماژول GetText است ، اما از قالب باینری کتابخانه C برای کاتالوگ پیام و الگوریتم های جستجوی کتابخانه C برای یافتن کاتالوگ پیام استفاده کنید.
برنامه های پایتون به طور معمول نباید نیازی به استناد به این کارکردها پیدا کنند و به جای آن باید از GetText استفاده کنند. یک استثناء شناخته شده از این قاعده برنامه هایی است که با کتابخانه های C اضافی که در داخل از GetText () یا DCGETTEXT () استفاده می کنند ، پیوند دارند. برای این برنامه ها ، ممکن است لازم باشد که دامنه متن را به هم وصل کنید تا کتابخانه ها بتوانند کاتالوگ پیام خود را به درستی پیدا کنند.
کسب درآمد از فارکس...
ما را در سایت کسب درآمد از فارکس دنبال می کنید
برچسب :
نویسنده : عسلی سهیال
بازدید : <-PostHit->
تاريخ : سه
شنبه
26 ارديبهشت
1402 ساعت: 15:21