الإنجليزيةالفرنسيةالإسبانية

OnWorks فافيكون

Perllocale - عبر الإنترنت في السحابة

قم بتشغيل perllocale في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر perllocale الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


perllocale - التعامل مع لغة Perl (التدويل والتعريب)

الوصف


في البداية كان هناك ASCII، "الرمز القياسي الأمريكي للمعلومات".
Interchange"، والذي يعمل بشكل جيد جدًا بالنسبة للأمريكيين من خلال الأبجدية الإنجليزية والدولار-
العملة المقومة. لكنها لا تعمل بشكل جيد حتى بالنسبة للمتحدثين باللغة الإنجليزية الآخرين
قد يستخدم عملات مختلفة، مثل الجنيه الإسترليني (كرمز لتلك العملة
ليس في ASCII)؛ وهو غير مناسب بشكل ميؤوس منه للعديد من الآلاف من سكان العالم
لغات اخرى.

ولمعالجة أوجه القصور هذه، تم اختراع مفهوم اللغات المحلية (المعروف رسميًا باسم ISO C،
XPG4، POSIX 1.c "النظام المحلي"). والتطبيقات كانت ولا تزال تكتب بهذا الاستخدام
الآلية المحلية. عملية تقديم مثل هذا الطلب تأخذ بعين الاعتبار
تسمى تفضيلات المستخدمين في هذه الأنواع من الأمور تدويل (غالبا
يختصر كـ i18n); إخبار مثل هذا التطبيق عن مجموعة معينة من التفضيلات هو
خضراء على شكل فطيرة تُعرف باسم الموقع (l10n).

لقد تم تمديد لغة Perl لدعم النظام المحلي. يتم التحكم في هذا لكل تطبيق
باستخدام براغما واحدة، واستدعاء دالة واحدة، والعديد من متغيرات البيئة.

لسوء الحظ، هناك عدد لا بأس به من أوجه القصور في التصميم (وغالبًا ما تكون
التنفيذ) من المناطق. تم اختراع Unicode (انظر perlunitut للحصول على مقدمة لـ
ذلك) جزئيًا لمعالجة أوجه القصور في التصميم، وفي الوقت الحاضر، هناك سلسلة من
"لغات UTF-8"، استنادًا إلى Unicode. هذه هي اللغات التي تكون مجموعة أحرفها Unicode،
المشفرة في UTF-8. بدءًا من الإصدار 5.20، يدعم Perl لغات UTF-8 بشكل كامل، باستثناء
الفرز ومقارنات السلسلة. (استخدم Unicode::Collate لهذه.) ويستمر Perl في ذلك
دعم اللغات القديمة غير UTF-8 أيضًا. لا توجد حاليًا أي لغات UTF-8 لـ
منصات EBCDIC.

(يقوم Unicode أيضًا بإنشاء "CLDR"، و"مستودع البيانات المحلية العامة"،
<http://cldr.unicode.org/> والذي يتضمن أنواعًا من المعلومات أكثر مما هو متاح فيه
النظام المحلي POSIX. في وقت كتابة هذه السطور، لم تكن هناك وحدة CPAN تلك
يوفر الوصول إلى هذه البيانات المشفرة بـ XML. ومع ذلك، فإن العديد من مواقعها لديها POSIX-
تم استخراج البيانات فقط، وهي متاحة كمحليات UTF-8 على
<http://unicode.org/Public/cldr/latest/>.)

ما IS A محلي


اللغة هي مجموعة من البيانات التي تصف الجوانب المختلفة لكيفية عمل المجتمعات المختلفة في
العالم يصنف عالمهم. يتم تقسيم هذه الفئات إلى الأنواع التالية
(بعضها يتضمن ملاحظة مختصرة هنا):

الفئة "LC_NUMERIC": التنسيق الرقمي
يشير هذا إلى كيفية تنسيق الأرقام بحيث يسهل على الإنسان قراءتها، على سبيل المثال
الحرف المستخدم كعلامة عشرية.

الفئة "LC_MONETARY": تنسيق المبالغ النقدية

الفئة "LC_TIME": تنسيق التاريخ/الوقت

الفئة "LC_MESSAGES": خطأ ورسائل أخرى
يتم استخدام هذا بواسطة Perl نفسه فقط للوصول إلى رسائل خطأ نظام التشغيل عبر $!
و$^E.

الفئة "LC_COLLATE": ترتيب
وهذا يدل على ترتيب الحروف للمقارنة والفرز. باللاتيني
الحروف الهجائية، على سبيل المثال، "b"، تتبع بشكل عام الحرف "a".

الفئة "LC_CTYPE": أنواع الأحرف
يشير هذا، على سبيل المثال، إلى ما إذا كان الحرف حرفًا كبيرًا.

فئات أخرى
تحتوي بعض المنصات على فئات أخرى تتعامل مع أشياء مثل وحدات القياس
وأحجام الورق. لا يتم استخدام أي من هذه بشكل مباشر بواسطة Perl، ولكن العمليات الخارجية التي تستخدمها
يتفاعل بيرل مع قد يستخدم هذه. راجع "ليس ضمن نطاق "استخدام الإعدادات المحلية"" أدناه.

مزيد من التفاصيل حول الفئات المستخدمة بواسطة Perl مذكورة أدناه في "الفئات المحلية".

تقطع هذه الفئات معًا شوطًا طويلًا نحو القدرة على تخصيص برنامج واحد
للتشغيل في العديد من المواقع المختلفة. ولكن هناك أوجه قصور، لذا استمر في القراءة.

خطة إلى استخدام المحلية


لن تستخدم لغة Perl نفسها (خارج وحدة POSIX) اللغات ما لم يُطلب ذلك على وجه التحديد
إلى (ولكن لاحظ مرة أخرى أن لغة Perl قد تتفاعل مع التعليمات البرمجية التي تستخدمها). حتى لو كان هناك
مثل هذا الطلب، الكل يجب أن يكون ما يلي صحيحًا حتى يعمل بشكل صحيح:

· معلمتك اليوغا تعمل نظام يجب تقنية هيه محلي نظام. إذا كان الأمر كذلك، يجب أن تجد
أن وظيفة "setlocale()" هي جزء موثق من مكتبة C الخاصة بها.

· التعريفات لـ محلي أن لصحتك! تستخدم يجب be تثبيت. أنت أو نظامك
المسؤول، يجب التأكد من أن هذا هو الحال. اللغات المتاحة، و
يختلف الموقع الذي يتم الاحتفاظ بها وطريقة تثبيتها
من نظام إلى نظام. توفر بعض الأنظمة عددًا قليلاً فقط من المناطق المحلية المتصلة ولا تفعل ذلك
السماح بإضافة المزيد. يسمح لك البعض الآخر بإضافة اللغات "المعلبة" التي يوفرها ملف
مورد النظام. لا يزال البعض الآخر يسمح لك أو لمسؤول النظام بالتعريف والإضافة
مواقع تعسفية. (قد يتعين عليك أن تطلب من المورد الخاص بك توفير أماكن معلبة لذلك
لا يتم تسليمها مع نظام التشغيل الخاص بك.) اقرأ وثائق النظام الخاصة بك
مزيد من الإضاءة.

· بيرل يجب اعتقد أن هيه محلي نظام is أيد. إذا كان الأمر كذلك، "بيرل
-V:d_setlocale" سيقول أن قيمة "d_setlocale" هي "تعريف".

إذا كنت تريد أن يقوم تطبيق Perl بمعالجة بياناتك وتقديمها وفقًا لمتطلبات معينة
الإعدادات المحلية، يجب أن يتضمن رمز التطبيق براغما "استخدام الإعدادات المحلية" (راجع "استخدام الإعدادات المحلية"
pragma") عند الاقتضاء، و at الأقل صورة واحدة؟ يجب أن يكون ما يلي صحيحًا:

1. إنّ تحديد اللغة بيئة المتغيرات (انظر "بيئة") يجب be بشكل صحيح طقم
up في وقت بدء التطبيق، إما بنفسك أو بواسطة أي شخص قام بإعداده
حساب النظام الخاص بك؛ أو

2. إنّ استمارتنا يجب طقم انها الخاصة محلي باستخدام الطريقة الموضحة في "The setlocale
وظيفة".

باستخدام المحلية


إنّ "استعمال لغة" براجما
افتراضيًا، يتجاهل Perl نفسه (خارج وحدة POSIX) اللغة المحلية الحالية. ال
تخبر براغما "استخدام اللغة" Perl باستخدام اللغة الحالية لبعض العمليات. يبدأ في
v5.16، هناك معلمات اختيارية لهذه البراغما، الموضحة أدناه، والتي تقيدها
العمليات تتأثر به.

يتم تعيين اللغة الحالية في وقت التنفيذ بواسطة setlocale () هو موضح أدناه. لو كان ذلك
لم يتم استدعاء الوظيفة بعد أثناء تنفيذ البرنامج، الحالي
اللغة هي التي تم تحديدها بواسطة "البيئة" السارية في بداية
برنامج. إذا لم تكن هناك بيئة صالحة، فإن اللغة الحالية هي أيًا كان النظام
تم تعيين الافتراضي ل. في أنظمة POSIX، من المحتمل، ولكن ليس بالضرورة، أن يكون "C"
لغة. في نظام التشغيل Windows، يتم تعيين الإعداد الافتراضي عبر جهاز الكمبيوتر
"لوحة التحكم->الخيارات الإقليمية وخيارات اللغة" (أو ما يعادلها حاليًا).

العمليات التي تتأثر بالإعدادات المحلية هي:

ليس في غضون هيه نطاق of "استعمال لغة"
يجب أن تتأثر فقط بعض العمليات التي تنشأ خارج لغة Perl، كما يلي:

· يتم استخدام اللغة الحالية عند الخروج من لغة Perl مع عمليات مثل
النظام() أو qx//، إذا كانت هذه العمليات حساسة للغة.

· كما يتيح بيرل الوصول إلى وظائف مكتبة C المختلفة من خلال وحدة POSIX.
تتأثر بعض هذه الوظائف دائمًا بالإعدادات المحلية الحالية. على سبيل المثال،
يستخدم "POSIX::strftime()" "LC_TIME"؛ يستخدم "POSIX::strtod()" "LC_NUMERIC"؛
"POSIX::strcoll()" و"POSIX::strxfrm()" استخدم "LC_COLLATE"؛ والشخصية
وظائف التصنيف مثل "POSIX::isalnum()" تستخدم "LC_CTYPE". كل هذا
سوف تتصرف الوظائف وفقًا للغة المحلية الأساسية الحالية، حتى لو كان ذلك
لا تتعرض اللغة لمساحة بيرل.

· وحدات XS لجميع الفئات ولكن "LC_NUMERIC" تحصل على اللغة الأساسية، و
ومن ثم فإن أي وظائف مكتبة C تستدعيها ستستخدم تلك اللغة الأساسية. للمزيد من
المناقشة، راجع "التحذيرات" في perlxs.

لاحظ أن جميع برامج C (بما في ذلك مترجم Perl، المكتوب بلغة C)
لديك دائمًا لغة أساسية. هذه اللغة هي اللغة "C" ما لم يتم تغييرها بواسطة a
دعوة ل setlocale (). عندما يبدأ تشغيل Perl، فإنه يغير اللغة الأساسية إلى تلك
والذي يشار إليه بـ "البيئة". عند استخدام وحدة POSIX أو كتابة XS
الكود، من المهم أن تضع في اعتبارك أن اللغة الأساسية قد تكون شيئًا ما
بخلاف "C"، حتى لو لم يقم البرنامج بتغييره بشكل صريح.

دائم الآثار of "استعمال لغة"
تحتفظ بعض عمليات Perl التي تم إعدادها ضمن نطاق "لغة الاستخدام" بذلك
تأثير حتى خارج النطاق. وتشمل هذه:

· تنسيق الإخراج أ اكتب() يتم تحديده بواسطة إعلان تنسيق سابق
("التنسيق" في perlfunc)، لذلك ما إذا كان الإخراج يتأثر بالإعدادات المحلية أم لا
يتم تحديده من خلال ما إذا كان "format()" يقع ضمن نطاق "لغة الاستخدام المحلية"، وليس ما إذا كان
"الكتابة ()" هي.

· يمكن تجميع أنماط التعبير العادي باستخدام qr// مع المطابقة الفعلية
مؤجلة إلى وقت لاحق. مرة أخرى، يتعلق الأمر بما إذا كان التجميع قد تم في الداخل أم لا
نطاق "استخدام اللغة" الذي يحدد سلوك المطابقة، وليس إذا كانت التطابقات
تتم ضمن هذا النطاق أم لا.

تحت ""يستخدم "";"
· جميع العمليات المذكورة أعلاه

· شكل الإعلانات ("تنسيق" في perlfunc) وبالتالي أي استخدام لاحق لـ "write()".
"LC_NUMERIC".

· التوحيد الناتج استخدم "LC_NUMERIC". وتشمل هذه النتائج
"print()" و"printf()" و"say()" و"sprintf()".

· إنّ مقارنة مشغلي ("lt"، "le"، "cmp"، "ge"، و"gt") استخدم "LC_COLLATE".
يتأثر "sort()" أيضًا إذا تم استخدامه بدون وظيفة مقارنة صريحة، لأنه
ويستخدم "cmp" بشكل افتراضي.

ملحوظة: "eq" و"ne" لا يتأثران بالإعدادات المحلية: فهما يؤديان دائمًا حرفًا تلو الآخر
مقارنة المعاملات العددية الخاصة بهم. علاوة على ذلك، إذا اكتشف "cmp" أن الأمر كذلك
المعاملات متساوية وفقًا لتسلسل الترتيب المحدد بواسطة التيار
locale، فإنه يستمر في إجراء مقارنة بين الأحرف، ويعود فقط 0
(يساوي) إذا كانت المعاملات متطابقة مع char-for-char. إذا كنت تريد حقا أن تعرف
ما إذا كانت السلسلتان - اللتان قد يعتبرهما "eq" و"cmp" مختلفتين - متساويتين بقدر ما
فيما يتعلق بالترتيب في الإعدادات المحلية، راجع المناقشة في "الفئة
"LC_COLLATE": ترتيب".

· منتظم التعبيرات تعديل الحالة وظائف ("uc()"، "lc()"، "ucfirst()"،
و"lcfirst()") استخدم "LC_CTYPE"

· إنّ المتغيرات $! (ومرادفاتها $ERRNO و$OS_ERROR) $ ^ إي (و مرادفه
$EXTENDED_OS_ERROR) عند استخدامه كسلاسل، استخدم "LC_MESSAGES".

تتم استعادة السلوك الافتراضي باستخدام pragma "no locale"، أو عند الوصول إلى نهاية
الكتلة التي تحتوي على "استخدام اللغة". لاحظ أن استدعاءات "استخدام الإعدادات المحلية" قد تكون متداخلة، وهذا
ما هو ساري المفعول داخل النطاق الداخلي سيعود إلى قواعد النطاق الخارجي في النهاية
من النطاق الداخلي.

نتيجة السلسلة لأي عملية تستخدم معلومات الإعدادات المحلية تكون ملوثة، كما هي
من الممكن أن تكون اللغة غير جديرة بالثقة. انظر "الأمن".

بدءًا من الإصدار 5.16 من Perl بطريقة محدودة جدًا، وبشكل أعم في الإصدار 5.22، يمكنك
تقييد الفئة أو الفئات التي يتم تمكينها بواسطة هذا المثيل المحدد لـ
pragma عن طريق إضافة المعلمات إليها. على سبيل المثال،

استخدم اللغة qw(:ctype :numeric);

يمكّن الوعي المحلي ضمن نطاقه فقط لتلك العمليات (المذكورة أعلاه).
متأثرًا بـ "LC_CTYPE" و"LC_NUMERIC".

الفئات المحتملة هي: ":collate"، ":ctype"، ":messages"، ":m minor"، ":numeric"،
":time"، والفئة الزائفة ":characters" (الموصوفة أدناه).

هكذا يمكنك أن تقول

استخدام اللغة ': الرسائل'؛

و$ فقط! و$^E سيكون على دراية باللغة المحلية. كل شيء آخر لا يتأثر.

نظرًا لأن Perl لا يفعل حاليًا أي شيء مع فئة "LC_MONETARY"، فهو محدد
": نقدي" لا يفعل شيئًا فعليًا. تحتوي بعض الأنظمة على فئات أخرى، مثل
"LC_PAPER_SIZE"، لكن بيرل أيضًا لا يعرف شيئًا عنها، ولا توجد طريقة لذلك
حددها في حجج هذه البراغما.

يمكنك أيضًا أن تقول بسهولة استخدام جميع الفئات باستثناء فئة واحدة، عن طريق أي منهما، على سبيل المثال،

استخدم اللغة ':!ctype';
استخدم اللغة ':not_ctype'؛

وكلاهما يعني تمكين الوعي المحلي لجميع الفئات باستثناء "LC_CTYPE". واحد فقط
يمكن تحديد وسيطة الفئة في "لغة الاستخدام" إذا كانت بالصيغة المرفوضة.

قبل الإصدار v5.22، يتوفر نموذج واحد فقط من البراغما مع الوسائط:

استخدم اللغة ':not_characters'؛

(وعليك أن تقول "not_"؛ لا يمكنك استخدام نموذج الانفجار "!"). هذه الفئة الزائفة هي أ
اختصار لتحديد كل من ":collate" و":ctype". وبالتالي فهو بصيغة النفي
تقريبا نفس الشيء كما يقول

استخدم الإعدادات المحلية qw(:messages :نقدي :رقمي :time);

نحن نستخدم المصطلح "تقريبًا"، لأن ":not_characters" يتم تشغيله أيضًا
"استخدام الميزة 'unicode_strings'" ضمن نطاقها. هذا النموذج أقل فائدة في الإصدار 5.20 و
لاحقًا، وتم وصفه بالكامل في "Unicode وUTF-8"، ولكن باختصار، يطلب من Perl عدم القيام بذلك
استخدم أجزاء الأحرف الخاصة بالتعريف المحلي، وهو "LC_CTYPE" و
فئات "LC_COLLATE". وبدلاً من ذلك ستستخدم مجموعة الأحرف الأصلية (الموسعة بواسطة
يونيكود). عند استخدام هذه المعلمة، أنت مسؤول عن الحصول على الخارجية
تمت ترجمة مجموعة الأحرف إلى المجموعة الأصلية/Unicode (والتي ستكون موجودة بالفعل إذا كانت كذلك
إحدى لغات UTF-8 ذات الشعبية المتزايدة). هناك طرق مريحة للقيام بذلك،
كما هو موضح في "Unicode وUTF-8".

إنّ مجموعة وظيفة
يمكنك تبديل اللغات بقدر ما تريد في وقت التشغيل باستخدام "POSIX::setlocale()"
وظيفة:

# مجموعة أدوات معالجة الإعدادات المحلية من وحدة POSIX.
# يستخدم هذا المثال: setlocale - استدعاء الوظيفة
# LC_CTYPE - موضح أدناه
# (إظهار اختبار نجاح/فشل العمليات هو
# تم حذفه في هذه الأمثلة لتجنب تشتيت الانتباه عن الشيء الرئيسي
# نقطة)

استخدم POSIX qw(locale_h);
استخدام اللغة؛
بلدي $old_locale؛

# الاستعلام وحفظ اللغة القديمة
$old_locale = setlocale(LC_CTYPE);

setlocale(LC_CTYPE, "fr_CA.ISO8859-1");
# LC_CTYPE الآن باللغة المحلية "الفرنسية، كندا، مجموعة الرموز ISO 8859-1"

setlocale(LC_CTYPE, "");
# يتم الآن إعادة تعيين LC_CTYPE إلى الوضع الافتراضي المحدد بواسطة ملف
# متغيرات البيئة LC_ALL/LC_CTYPE/LANG أو للنظام
# تقصير. انظر أدناه للحصول على الوثائق.

# استعادة اللغة القديمة
setlocale(LC_CTYPE, $old_locale);

يؤثر هذا في نفس الوقت على كافة سلاسل عمليات البرنامج، لذلك قد يكون من الصعب استخدامه
اللغات في التطبيقات المترابطة إلا في حالة وجود لغة واحدة تنطبق على الجميع
الخيوط.

الوسيطة الأولى لـ "setlocale()" تعطي التابع الفئة، والثاني محلي.
تخبر الفئة أي جانب من جوانب معالجة البيانات تريد تطبيق القواعد الخاصة بالإعدادات المحلية.
تمت مناقشة أسماء الفئات في "الفئات المحلية" و"البيئة". المنطقة هي
اسم مجموعة من معلومات التخصيص المقابلة لعنصر معين
مزيج من اللغة والبلد أو الإقليم ومجموعة الرموز. تابع القراءة للحصول على تلميحات حول
تسمية اللغات: لا تقوم كافة الأنظمة بتسمية اللغات كما في المثال.

إذا لم يتم توفير وسيطة ثانية والفئة شيء آخر غير "LC_ALL"، فإن
ترجع الدالة سلسلة تسمي اللغة الحالية للفئة. يمكنك استخدام هذا
value كوسيطة ثانية في استدعاء لاحق إلى "setlocale()"، لكن على بعض المنصات
السلسلة مبهمة، وليس شيئًا يستطيع معظم الناس فهم ماهيته
لغة يعني.

إذا لم يتم توفير وسيطة ثانية والفئة هي "LC_ALL"، فستكون النتيجة
تعتمد على التنفيذ. قد تكون سلسلة من أسماء اللغات المتسلسلة (الفاصل أيضًا
يعتمد على التنفيذ) أو اسم لغة واحد. يرجى استشارة الخاص بك مجموعة(3) رجل
صفحة للحصول على التفاصيل.

إذا تم تقديم وسيطة ثانية وتتوافق مع لغة صالحة، فإن اللغة الخاصة بـ
يتم تعيين الفئة على تلك القيمة، وتقوم الدالة بإرجاع القيمة المحلية الحالية. أنت
يمكن بعد ذلك استخدام هذا في استدعاء آخر لـ "setlocale()". (في بعض التطبيقات،
قد تختلف قيمة الإرجاع أحيانًا عن القيمة التي قدمتها كوسيطة ثانية - فكر في ذلك
كاسم مستعار للقيمة التي قدمتها.)

كما يوضح المثال، إذا كانت الوسيطة الثانية عبارة عن سلسلة فارغة، فإن لغة الفئة هي
تم إرجاعها إلى الوضع الافتراضي المحدد بواسطة متغيرات البيئة المقابلة. عمومًا،
يؤدي هذا إلى العودة إلى الوضع الافتراضي الذي كان ساريًا عند بدء تشغيل Perl: التغييرات إلى
البيئة التي أنشأها التطبيق بعد بدء التشغيل قد تتم ملاحظتها أو لا يتم ملاحظتها، اعتمادًا على ذلك
في مكتبة C الخاصة بنظامك.

لاحظ أنه عند تحديد نموذج "استخدام الإعدادات المحلية" الذي لا يتضمن جميع الفئات،
يتجاهل Perl الفئات المستبعدة.

إذا فشلت "set_locale()" لسبب ما (على سبيل المثال، محاولة التعيين إلى لغة محلية
غير معروف للنظام)، لم يتم تغيير لغة الفئة، والوظيفة
ترجع "undef".

لمزيد من المعلومات حول الفئات، راجع مجموعة(3).

العثور على محلي
للتعرف على اللغات المتوفرة في نظامك، استشر أيضًا مجموعة(٣) لمعرفة ما إذا كان يؤدي إلى
قائمة اللغات المتاحة (ابحث عن رؤية أيضا قسم). إذا فشل ذلك، حاول
أسطر الأوامر التالية:

اللغة - أ

com.nlsinfo

ليرة سورية /usr/lib/nls/loc

ls /usr/lib/locale

ليرة سورية /usr/lib/nls

ls / usr / share / locale

وانظر هل يذكرون شيئًا يشبه هذه

en_US.ISO8859-1 de_DE.ISO8859-1 ru_RU.ISO8859-5
ar_US.iso88591 de_DE.iso88591 ru_RU.iso88595
ar_US de_DE ru_RU
أون دي رو
الانجليزية الألمانية الروسية
الإنجليزية.iso88591 الألمانية.iso88591 الروسية.iso88595
english.roman8 الروسية.koi8r

للأسف، على الرغم من أن واجهة الاتصال لـ "setlocale()" قد تم توحيدها، إلا أن أسماء
اللغات والدلائل حيث يوجد التكوين لم تكن. الشكل الأساسي
من الاسم هو language_territory.كود مجموعةولكن الأجزاء الأخيرة بعد ذلك لغة ليست
يقدم دائما. ال لغة البلد عادة ما تكون من المعايير ISO 3166 ISO
639، الاختصارات المكونة من حرفين لدول ولغات العالم،
على التوالي. ال كود مجموعة جزء غالبا ما يذكر بعض ISO 8859 مجموعة الأحرف اللاتينية
مجموعات الرموز. على سبيل المثال، "ISO 8859-1" هو ما يسمى "مجموعة الأكواد الأوروبية الغربية" التي يمكنها
يمكن استخدامها لترميز معظم لغات أوروبا الغربية بشكل مناسب. مرة أخرى، هناك عدة
طرق لكتابة حتى اسم هذا المعيار واحد. للأسف.

هناك منطقتان خاصتان تستحقان الذكر بشكل خاص: "C" و"POSIX". حاليا هذه هي
نفس اللغة بشكل فعال: الفرق هو أن الأول يتم تعريفه بواسطة
معيار C، والثاني بمعيار POSIX. إنهم يحددون الافتراضي محلي التي
يبدأ كل برنامج في حالة عدم وجود معلومات محلية في بيئته. (ال
الافتراضي اللغة الافتراضية، إذا صح التعبير.) لغتها هي الإنجليزية (الأمريكية) ولها
مجموعة رموز الأحرف ASCII أو، نادرًا، مجموعة شاملة منها (مثل "DEC Multinational
مجموعة الأحرف (DEC-MCS)"). تحذير. قد لا تكون لغة C التي يقدمها بعض البائعين كذلك
في الواقع يتطابق تمامًا مع ما يدعو إليه معيار C. و لذلك احذر.

نوت: ليست كل الأنظمة لها لغة "POSIX" (ليست كل الأنظمة متوافقة مع POSIX)، لذلك
استخدم "C" عندما تحتاج بشكل صريح إلى تحديد هذه اللغة الافتراضية.

محلي مشاكل
قد تواجه رسالة التحذير التالية عند بدء تشغيل Perl:

perl: تحذير: فشل إعداد اللغة.
perl: تحذير: الرجاء التحقق من إعدادات اللغة الخاصة بك:
LC_ALL = "En_US" ،
LANG = (غير محدّد)
مدعومة ومثبتة على نظامك.
perl: تحذير: الرجوع إلى اللغة القياسية ("C").

هذا يعني أن إعداداتك المحلية قد تم ضبط "LC_ALL" على "En_US" وأن LANG موجود ولكنه موجود
لا قيمة. حاول بيرل أن يصدقك لكنه لم يستطع. وبدلاً من ذلك، استسلم بيرل وتراجع
إلى اللغة "C"، اللغة الافتراضية التي من المفترض أن تعمل مهما كان الأمر. (على
في نظام التشغيل Windows، يحاول أولاً الرجوع إلى الإعدادات المحلية الافتراضية للنظام.) وهذا يعني عادةً
إعدادات اللغة الخاصة بك كانت خاطئة، أو أنها تذكر لغات لم يسمع عنها نظامك من قبل، أو
يواجه التثبيت المحلي في نظامك مشكلات (على سبيل المثال، بعض ملفات النظام
مكسورة أو مفقودة). هناك حلول سريعة ومؤقتة لهذه المشاكل، كذلك
إصلاحات أكثر شمولاً ودائمة.

الاختبار لـ مكسورة محلي
إذا كنت تقوم ببناء لغة Perl من المصدر، فإن ملف مجموعة اختبار Perl lib / locale.t يمكن استخدامها ل
اختبار اللغات على النظام الخاص بك. تعيين متغير البيئة "PERL_DEBUG_FULL_TEST"
إلى 1 سيؤدي إلى إخراج نتائج مفصلة. على سبيل المثال، على نظام التشغيل Linux، يمكنك القول

PERL_DEBUG_FULL_TEST=1 ./perl -T -Ilib lib/locale.t > locale.log 2>&1

إلى جانب العديد من الاختبارات الأخرى، فإنه سيختبر كل لغة يجدها على نظامك لمعرفة ما إذا كانت موجودة أم لا
تتوافق مع معيار POSIX. إذا كان هناك أي أخطاء، فسوف يتضمن ملخصًا بالقرب من النهاية
من مخرجات اللغات التي اجتازت جميع اختباراتها، وأيها فشلت، ولماذا.

مؤقتا تحديد محلي مشاكل
أسرع إصلاحين هما إما جعل لغة Perl صامتة بشأن أي تناقضات محلية
أو لتشغيل لغة Perl ضمن اللغة الافتراضية "C".

يمكن إسكات أنين بيرل بشأن مشاكل اللغة عن طريق تعيين متغير البيئة
"PERL_BADLANG" إلى "0" أو "". هذه الطريقة في الواقع تكتسح المشكلة تحت السجادة:
تطلب من بيرل أن يصمت حتى عندما يرى بيرل أن هناك خطأ ما. لا تتفاجأ
إذا أساء التصرف لاحقًا شيئًا يعتمد على اللغة.

يمكن تشغيل لغة Perl ضمن اللغة "C" عن طريق تعيين متغير البيئة "LC_ALL" إلى "C".
ربما تكون هذه الطريقة أكثر تحضرًا قليلاً من طريقة "PERL_BADLANG"، ولكن الإعداد
قد يؤثر "LC_ALL" (أو المتغيرات المحلية الأخرى) على البرامج الأخرى أيضًا، وليس فقط على Perl. في
وعلى وجه الخصوص، فإن البرامج الخارجية التي يتم تشغيلها من داخل لغة Perl ستشهد هذه التغييرات. إذا قمت بإجراء
الإعدادات الجديدة دائمة (تابع القراءة)، جميع البرامج التي تقوم بتشغيلها ترى التغييرات. يرى
"البيئة" للحصول على القائمة الكاملة لمتغيرات البيئة ذات الصلة و"استخدام اللغات المحلية" لـ
آثارها في بيرل. يمكن استنتاج التأثيرات الموجودة في البرامج الأخرى بسهولة. على سبيل المثال،
قد يؤثر المتغير "LC_COLLATE" بشكل جيد على ملفك sort البرنامج (أو أيا كان البرنامج الذي
يرتب "السجلات" أبجديًا في نظامك).

يمكنك اختبار تغيير هذه المتغيرات مؤقتًا، وإذا بدت الإعدادات الجديدة كذلك
مساعدة، ضع هذه الإعدادات في ملفات بدء تشغيل Shell. راجع الوثائق المحلية الخاصة بك
للحصول على التفاصيل الدقيقة. لقذائف تشبه بورن (sh, KSH, سحق, zsh):

LC_ALL=en_US.ISO8859-1
تصدير LC_ALL

يفترض هذا أننا رأينا الإعدادات المحلية "en_US.ISO8859-1" باستخدام الأوامر التي تمت مناقشتها أعلاه.
قررنا أن نجرب ذلك بدلاً من اللغة الخاطئة المذكورة أعلاه "En_US" - وفي قذائف Cshish
(مستشفى الدعم القتالي, tcsh)

setenv LC_ALL en_US.ISO8859-1

أو إذا كان لديك تطبيق "env" يمكنك القيام به (في أي غلاف)

env LC_ALL=en_US.ISO8859-1 بيرل ...

إذا كنت لا تعرف نوع الصدفة التي لديك، فاستشر مكتب المساعدة المحلي لديك أو ما يعادله.

بشكل دائم تحديد محلي مشاكل
الإصلاحات الأبطأ ولكن الأفضل هي عندما تكون قادرًا على إصلاح المشكلة بنفسك
التكوين الخاطئ لمتغيرات البيئة الخاصة بك. التكوين الخاطئ (الغناء) لـ
تتطلب الإعدادات المحلية للنظام بأكمله عادةً مساعدة مسؤول النظام الودود لديك.

أولاً، راجع سابقًا في هذا المستند حول "البحث عن اللغات المحلية". هذا يحكي كيفية العثور على أي
اللغات مدعومة حقًا - والأهم من ذلك، مثبتة - على نظامك. في لدينا
على سبيل المثال رسالة خطأ، يتم سرد متغيرات البيئة التي تؤثر على الإعدادات المحلية بالترتيب
ذات أهمية متناقصة (والمتغيرات غير المحددة لا يهم). ولذلك، وجود LC_ALL
لا بد أن التعيين على "En_US" كان اختيارًا سيئًا، كما هو موضح في رسالة الخطأ. أول محاولة
إصلاح الإعدادات المحلية المدرجة أولا.

ثانيًا، إذا كنت تستخدم الأوامر المذكورة، فإنك ترى شيئًا ما بالضبط (مطابقات البادئة لا
العد والحالة عادة ما يتم حسابهما) مثل "En_US" بدون علامتي الاقتباس، فيجب أن تكون على ما يرام
لأنك تستخدم اسمًا محليًا يجب تثبيته وتوافره في نظامك.
في هذه الحالة، راجع "إصلاح التكوين المحلي لنظامك بشكل دائم".

بشكل دائم تحديد لك في نظام محلي ترتيب
هذا عندما ترى شيئًا مثل:

perl: تحذير: الرجاء التحقق من إعدادات اللغة الخاصة بك:
LC_ALL = "En_US" ،
LANG = (غير محدّد)
مدعومة ومثبتة على نظامك.

ولكن بعد ذلك لا يمكن رؤية "En_US" مدرجًا بواسطة الأوامر المذكورة أعلاه. قد ترى
أشياء مثل "en_US.ISO8859-1"، ولكن هذا ليس هو نفسه. في هذه الحالة، حاول الركض تحت ملف
اللغة التي يمكنك إدراجها والتي تتطابق بطريقة أو بأخرى مع ما حاولت. قواعد المطابقة
أسماء اللغات غامضة بعض الشيء لأن التقييس ضعيف في هذا المجال. انظر مرة أخرى
"البحث عن اللغات" حول القواعد العامة.

اصلاح نظام محلي ترتيب
اتصل بمسؤول النظام (ويفضل أن يكون مسؤولاً عنك) وأبلغه برسالة الخطأ الدقيقة
تحصل عليه، واطلب منهم قراءة نفس الوثائق التي تقرأها الآن. ينبغي أن يكونوا كذلك
قادر على التحقق مما إذا كان هناك خطأ ما في التكوين المحلي لـ
نظام. لسوء الحظ، فإن قسم "البحث عن اللغات" غامض بعض الشيء فيما يتعلق بالتحديد
الأوامر والأماكن لأن هذه الأشياء ليست موحدة.

إنّ محلي وظيفة
تتيح لك وظيفة "POSIX::localeconv()" الحصول على تفاصيل اللغة المعتمدة
معلومات التنسيق الرقمي المحددة بواسطة "LC_NUMERIC" الأساسي الحالي و
اللغات المحلية "LC_MONETARY" (بغض النظر عما إذا تم استدعاؤها من داخل نطاق "الاستخدام المحلي"
أم لا). (إذا كنت تريد فقط اسم اللغة الحالية لفئة معينة، فاستخدم
"POSIX::setlocale()" بمعلمة واحدة - راجع "وظيفة setlocale".)

استخدم POSIX qw(locale_h);

# احصل على مرجع لتجزئة المعلومات المعتمدة على اللغة
$locale_values ​​= localeconv();

# إخراج قائمة القيم مرتبة
لـ (مفاتيح الفرز %$locale_values) {
printf "%-20s = %s\n"، $_، $locale_values->{$_}
}

"localeconv()" لا تأخذ أي وسائط، وترجع a مرجع إلى تجزئة. مفاتيح هذا
التجزئة هي أسماء متغيرة للتنسيق، مثل "decimal_point" و"thousands_sep". ال
القيم هي القيم المقابلة. راجع "localeconv" في POSIX للحصول على مثال أطول
سرد الفئات التي من المتوقع أن يقدمها التنفيذ؛ البعض يقدم المزيد
وآخرون أقل. لا تحتاج إلى "استخدام الإعدادات المحلية" بشكل صريح، لأن "localeconv()" دائمًا
يلاحظ اللغة الحالية.

فيما يلي مثال لبرنامج بسيط التفكير يعيد كتابة معلمات سطر الأوامر الخاصة به كـ
الأعداد الصحيحة المنسقة بشكل صحيح في اللغة الحالية:

استخدم POSIX qw(locale_h);

# احصل على بعض معلمات التنسيق الرقمي للغة
بلدي ($thousands_sep، $grouping) =
@{localeconv()}{'thousands_sep', 'grouping'};

# تطبيق الإعدادات الافتراضية إذا كانت القيم مفقودة
$thousands_sep = '،' ما لم $thousands_sep؛

# التجميع وmon_grouping عبارة عن قوائم معبأة
# من الأعداد الصحيحة الصغيرة (الأحرف) التي تخبرنا
# التجميع (ألف_سيبس و مون_ألف_سيبس
# كونها مقسمات المجموعة) من الأرقام و
# الكميات النقدية . معاني الأعداد الصحيحة:
# 255 يعني عدم وجود المزيد من التجميع، 0 يعني تكرار
# المجموعة السابقة 1-254 تعني استخدم ذلك
# كالمجموعة الحالية. التجمع يذهب من
# من اليمين إلى اليسار (من الأقل إلى الأعلى). في ال
# أدناه نغش قليلًا بعدم استخدام أي شيء أبدًا
#غير المجموعة الأولى (مهما كانت).
إذا ($التجميع) {
@grouping = unpack("C*", $grouping);
{} آخر
@التجميع = (3);
}

# تنسيق معلمات سطر الأوامر للغة الحالية
لـ (@ARGV) {
$_ = int; # قطع الجزء غير الصحيح
1 حين
s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
اطبع "$_";
}
طباعة "\ n" ؛

لاحظ أنه إذا لم يكن النظام الأساسي متاحًا "LC_NUMERIC" و/أو "LC_MONETARY" أو
عند تمكينه، ستكون العناصر المقابلة للتجزئة مفقودة.

I18N :: Langinfo
واجهة أخرى للاستعلام عن المعلومات المعتمدة على اللغة هي
وظيفة "I18N::Langinfo::langinfo()"، متاحة على الأقل في الأنظمة المشابهة لـ Unix وVMS.

سيقوم المثال التالي باستيراد الدالة "langinfo()" نفسها وثلاثة ثوابت إليها
يمكن استخدامها كوسائط لـ "langinfo()": ثابت لليوم الأول المختصر من الأسبوع
(يبدأ الترقيم من الأحد = 1) وثابتين آخرين للإيجاب و
الإجابات السلبية لسؤال نعم/لا في اللغة الحالية.

استخدم I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);

بلدي ($abday_1، $yesstr، $nostr)
= خريطة { langinfo } qw(ABDAY_1 YESSTR NOSTR);

طباعة "$abday_1? [$yesstr/$nostr] ";

بمعنى آخر، في اللغة "C" (أو الإنجليزية) من المحتمل أن يطبع ما ورد أعلاه شيئًا ما
مثل:

شمس؟ [نعم / لا]

راجع I18N::Langinfo لمزيد من المعلومات.

محلي الاقسام


تصف الأقسام الفرعية التالية الفئات المحلية الأساسية. أبعد من هذا، بعض
تسمح الفئات المركبة بمعالجة أكثر من فئة أساسية في نفس الوقت. يرى
"البيئة" لمناقشة هذه الأمور.

الفئة "LC_COLLATE": الترتيب
في نطاق نموذج "استخدام الإعدادات المحلية" الذي يتضمن الترتيب، يبحث Perl في
متغير البيئة "LC_COLLATE" لتحديد مفاهيم التطبيق عند الترتيب
(ترتيب) الحروف. على سبيل المثال، "b" يتبع "a" في الحروف الهجائية اللاتينية، ولكن أين
"أ" و "أأ" تنتمي؟ وبينما تأتي كلمة "color" بعد كلمة "chocolate" في اللغة الإنجليزية، فماذا عن in
الاسبانية التقليدية؟

جميع عمليات الترتيب التالية منطقية وقد تقابل أيًا منها إذا كنت "تستخدم اللغة".

ABCDE abde
أ أ ب ب ج ج د هـ
أ أ ب ب ج ج د د هـ
ABCDE ABCDE

فيما يلي مقتطف من التعليمات البرمجية لمعرفة أحرف "الكلمة" الموجودة في اللغة الحالية
الترتيب المحلي:

استخدام اللغة؛
print +(sort grep /\w/, Map { chr } 0..255), "\n";

قارن ذلك بالأحرف التي تراها وترتيبها إذا ذكرت ذلك صراحةً
يجب تجاهل اللغة:

لا لغة.
print +(sort grep /\w/, Map { chr } 0..255), "\n";

هذا الترتيب الأصلي للجهاز (وهو ما تحصل عليه ما لم تظهر عبارة "استخدام الإعدادات المحلية".
سابقًا في نفس الكتلة) لفرز البيانات الثنائية الأولية، في حين أن اللغة-
يعد الترتيب التابع للمثال الأول مفيدًا للنص الطبيعي.

كما هو مذكور في "استخدام اللغات المحلية"، تتم مقارنة "cmp" وفقًا للغة الترتيب المحلية الحالية
"استخدام اللغة" ساري المفعول، ولكنه يعود إلى مقارنة شار تلو الآخر للسلاسل التي
تقول اللغة متساوية. يمكنك استخدام "POSIX::strcoll()" إذا كنت لا تريد هذا الخريف-
الى الخلف:

استخدم POSIX qw(strcoll);
$equal_in_locale =
!strcoll("تم تجاهل المسافة وحالة الأحرف"، "SpaceAndCaseIgnored");

سيكون $equal_in_locale صحيحًا إذا كانت لغة الترتيب تحدد ترتيبًا يشبه القاموس
الذي يتجاهل أحرف المسافة تمامًا والذي يطوي الحالة.

يدعم Perl حاليًا اللغات أحادية البايت فقط لـ "LC_COLLATE". وهذا يعني أن أ
من المحتمل أن تمنحك لغة UTF-8 طلبًا أصليًا على الجهاز. استخدم Unicode::Collate لـ
التنفيذ الكامل لخوارزمية ترتيب Unicode.

إذا كان لديك سلسلة واحدة تريد التحقق من "المساواة في اللغة" مقابلها
والعديد من الآخرين، قد تعتقد أنه يمكنك الحصول على القليل من الكفاءة باستخدام
"POSIX::strxfrm()" بالتزامن مع "eq":

استخدم POSIX qw(strxfrm);
$xfrm_string = strxfrm("سلسلة ذات حالة مختلطة");
طباعة "ترتيب الإعدادات المحلية يتجاهل المسافات\n"
إذا $xfrm_string eq strxfrm("سلسلة حالة مختلطة");
طباعة "ترتيب الإعدادات المحلية يتجاهل الواصلات\n"
إذا $xfrm_string eq strxfrm("سلسلة حالة مختلطة");
طباعة "ترتيب الإعدادات المحلية يتجاهل حالة الأحرف\n"
إذا $xfrm_string eq strxfrm("سلسلة حالة مختلطة");

"strxfrm ()" يأخذ سلسلة ويعينها إلى سلسلة محولة لاستخدامها في char-by-char
مقارنات مع السلاسل المحولة الأخرى أثناء الترتيب. "تحت الغطاء"، لغة-
يقوم مشغلو مقارنة Perl المتأثرون باستدعاء "strxfrm()" لكلا المعاملين، ثم يقومون بإجراء عملية char-by-
مقارنة شار للسلاسل المحولة. من خلال استدعاء "strxfrm ()" بشكل صريح واستخدام ملف
مقارنة غير متأثرة بالإعدادات المحلية، يحاول المثال حفظ بعض التحويلات.
ولكن في الواقع، لا يحفظ أي شيء: سحر بيرل (انظر "المتغيرات السحرية" في perlguts)
ينشئ النسخة المحولة من السلسلة في المرة الأولى التي تكون هناك حاجة إليها في المقارنة،
ثم يحتفظ بهذا الإصدار في حالة الحاجة إليه مرة أخرى. مثال إعادة كتابة السهل
الطريقة مع "cmp" تعمل بنفس السرعة تقريبًا. كما أنه يتواءم مع الأحرف الفارغة المضمنة
سلاسل؛ إذا اتصلت بـ "strxfrm()" مباشرةً، فإنها تتعامل مع القيمة الخالية الأولى التي تجدها على أنها a
فاصل. لا تتوقع أن تكون السلاسل المحولة التي تنتجها قابلة للنقل عبرها
الأنظمة - أو حتى من مراجعة واحدة لنظام التشغيل الخاص بك إلى المراجعة التالية. باختصار، لا تفعل ذلك
اتصل بـ "strxfrm ()" مباشرة: اسمح لـ Perl بالقيام بذلك نيابةً عنك.

ملاحظة: لا يظهر "استخدام الإعدادات المحلية" في بعض هذه الأمثلة لأنه غير مطلوب:
"strcoll()" و"strxfrm()" هما دالتان POSIX تستخدمان الوظائف القياسية التي يوفرها النظام
وظائف "libc" التي تتبع دائمًا لغة "LC_COLLATE" الحالية.

الفئة "LC_CTYPE": حرف الأنواع
في نطاق نموذج "استخدام الإعدادات المحلية" الذي يتضمن "LC_CTYPE"، يتبع Perl "LC_CTYPE"
الإعداد المحلي. يتحكم هذا في فكرة التطبيق عن الشخصيات
أبجدية، رقمية، علامات الترقيم، إلخ. يؤثر هذا على التعبير العادي "\w" الخاص بـ Perl
الوصف الوصفي، الذي يرمز إلى الأحرف الأبجدية الرقمية - أي الحروف الأبجدية والأرقام و
الشرطة السفلية الأصلية للمنصة. (استشر perlre لمزيد من المعلومات حول العادية
التعبيرات.) بفضل "LC_CTYPE"، اعتمادًا على إعدادات اللغة الخاصة بك، فإن الأحرف مثل
يمكن فهم "ae" و"`" و"ss" و"o" على أنها أحرف "\w". كما أنه يؤثر على الأشياء
مثل "\s" و"\D" وفئات أحرف POSIX، مثل "[[:graph:]]". (يرى
perlrecharclass لمزيد من المعلومات حول كل هذه.)

توفر الإعدادات المحلية "LC_CTYPE" أيضًا الخريطة المستخدمة في كتابة الأحرف بين الحروف
الصغيرة والكبيرة. يؤثر هذا على وظائف تعيين الحالة--"fc()"، "lc()"،
"lcfirst()"، و"ucfirst()"، و"ucfirst()"؛ استيفاء تعيين الحالة باستخدام "\F" و"\l" و"\L"
"\u" أو "\U" في سلاسل ذات علامات اقتباس مزدوجة وبدائل "s///"؛ ومستقلة عن الحالة
مطابقة نمط التعبير العادي باستخدام المعدل "i".

أخيرًا، يؤثر "LC_CTYPE" على اختبار فئة الأحرف POSIX (المهمل).
الوظائف--"POSIX::isalpha()"، و"POSIX::islower()"، وما إلى ذلك. على سبيل المثال، إذا انتقلت
من لغة "C" إلى لغة ISO 7 ذات 646 بت، قد تجد - ربما لدهشتك - أن
"|" ينتقل من فئة "POSIX::ispunct()" إلى "POSIX::isalpha()". لسوء الحظ، هذا
يخلق مشاكل كبيرة للتعبيرات العادية. "|" لا يزال يعني التناوب على الرغم من ذلك
يطابق "\w". بدءًا من الإصدار 5.22، سيتم إصدار تحذير عند تبديل هذه الإعدادات المحلية
داخل. يتم إعطاء المزيد من التفاصيل بعدة فقرات في الأسفل.

بدءًا من الإصدار 5.20، يدعم Perl لغات UTF-8 لـ "LC_CTYPE"، لكن بخلاف ذلك، يدعم Perl فقط
يدعم اللغات أحادية البايت، مثل سلسلة ISO 8859. وهذا يعني أن الشخصية واسعة
اللغات المحلية، على سبيل المثال للغات الآسيوية، ليست مدعومة بشكل جيد. (إذا كان النظام الأساسي
قدرة Perl على اكتشاف مثل هذه الإعدادات المحلية، بدءًا من Perl v5.22، سوف يحذر Perl،
تم تمكينه افتراضيًا، باستخدام فئة التحذير "اللغة المحلية"، عندما يتم تبديل هذه اللغة
إلى.) يعد دعم لغة UTF-8 في الواقع مجموعة شاملة من لغات POSIX، لأنه كذلك
سلوك Unicode الكامل حقًا كما لو لم تكن الإعدادات المحلية "LC_CTYPE" سارية على الإطلاق (باستثناء
تلويث. انظر "الأمن"). تفتقر لغات POSIX، حتى لغات UTF-8، إلى مفاهيم معينة
في Unicode، مثل فكرة أن تغيير حالة الحرف يمكن أن يتوسع ليصبح أكثر
من حرف واحد. سوف يمنحك Perl في لغة UTF-8 هذا التوسع. قبل ذ لك
v5.20، تعامل Perl مع لغة UTF-8 على بعض الأنظمة الأساسية مثل ISO 8859-1، مع بعض
القيود، وعلى منصات أخرى تشبه لغة "C". للإصدارات v5.16 و
الإصدار 5.18، يمكن استخدام "استخدام اللغة 'not_characters'" كحل بديل لهذا (راجع "Unicode
وUTF-8").

لاحظ أن هناك عددًا لا بأس به من الأشياء التي لا تتأثر باللغة الحالية. أي
الحرف الحرفي هو الحرف الأصلي للنظام الأساسي المحدد. ومن ثم فإن "أ" تعني
الحرف عند نقطة الرمز 65 على منصات ASCII، و193 على EBCDIC. قد يكون ذلك أو لا يكون
"A" في اللغة الحالية، إذا كانت تلك اللغة تحتوي على "A". وبالمثل، كل الهروب
تسلسلات لأحرف معينة، "\n" على سبيل المثال، تعني دائمًا النظام الأساسي الأصلي
واحد. وهذا يعني، على سبيل المثال، أن "\N" في التعبيرات العادية (كل حرف ما عدا الجديد-
line) يعمل على مجموعة أحرف النظام الأساسي.

بدءًا من الإصدار 5.22، ستحذر لغة Perl افتراضيًا عند التبديل إلى لغة تعيد تعريفها
أي حرف ASCII قابل للطباعة (بالإضافة إلى "\t" و"\n") في فئة مختلفة عن المتوقع.
من المحتمل أن يحدث هذا في اللغات الحديثة فقط على منصات EBCDIC، حيث، على سبيل المثال، أ
تقوم لغة CCSID 0037 على جهاز CCSID 1047 بنقل "["، ولكن يمكن أن يحدث ذلك على منصات ASCII
مع ISO 646 وغيرها من اللغات ذات 7 بت التي عفا عليها الزمن بشكل أساسي. ربما لا تزال الأمور كذلك
العمل، اعتمادًا على ميزات Perl التي يستخدمها البرنامج. على سبيل المثال، في
مثال من الأعلى حيث "|" يصبح "\w"، ولا توجد تعبيرات عادية حيث
وهذا مهم، فقد يظل البرنامج يعمل بشكل صحيح. يسرد التحذير كافة الأحرف
التي يمكن تحديدها يمكن أن تتأثر سلبًا.

ملحوظة: قد يؤدي تعريف اللغة "LC_CTYPE" المعطوب أو الضار إلى عدم الأهلية بشكل واضح
الأحرف التي يعتبرها التطبيق الخاص بك أبجدية رقمية. لمطابقة صارمة
من حروف وأرقام ASCII (العادية) - على سبيل المثال، في سلاسل الأوامر - مع مراعاة اللغة
يجب أن تستخدم التطبيقات "\w" مع معدّل التعبير العادي "/a". انظر "الأمن".

الفئة "LC_NUMERIC": رقمية التنسيق
بعد استدعاء "POSIX::setlocale()" المناسب، وفي نطاق نموذج "استخدام الإعدادات المحلية"
التي تتضمن أرقامًا، فإن لغة Perl تتبع المعلومات المحلية "LC_NUMERIC"، التي تتحكم في
فكرة التطبيق حول كيفية تنسيق الأرقام لسهولة القراءة البشرية. على الأغلب
التنفيذ التأثير الوحيد هو تغيير الحرف المستخدم للعلامة العشرية
نقطة--ربما من "." ل "،". الوظائف ليست على علم بمثل هذه التفاصيل الدقيقة مثل الآلاف
الانفصال وما إلى ذلك. (راجع "وظيفة localeconv" إذا كنت مهتمًا بهذه الأشياء.)

استخدم POSIX qw(strtod setlocale LC_NUMERIC);
استخدام اللغة؛

setlocale LC_NUMERIC, "";

$ن = 5/2؛ # قم بتعيين رقم 2.5 إلى $n

$a = "$n"; # التحويل المعتمد على اللغة إلى سلسلة

طباعة "نصف خمسة هو $n\n"; # الإخراج المعتمد على اللغة

printf "نصف خمسة هو %g\n"، $n; # الإخراج المعتمد على اللغة

طباعة "النقطة العشرية هي فاصلة\n"
if $n == (strtod("2,5"))[0]; # التحويل المعتمد على اللغة

انظر أيضًا I18N::Langinfo و"RADIXCHAR".

الفئة "LC_MONETARY": التنسيق of نقدي المبالغ
يحدد معيار C فئة "LC_MONETARY"، ولكن ليس الوظيفة التي تتأثر بها
محتوياته. (أولئك الذين لديهم خبرة في لجان المعايير سوف يدركون أن
قررت مجموعة العمل مناقشة هذه القضية.) وبالتالي، فإن بيرل لا يقبل بشكل أساسي
إشعار بذلك. إذا كنت تريد حقًا استخدام "LC_MONETARY"، فيمكنك الاستعلام عن محتوياته--راجع
"وظيفة localeconv"--واستخدم المعلومات التي ترجعها في التطبيق الخاص بك
التنسيق الخاص لمبالغ العملة. ومع ذلك، قد تجد أن المعلومات،
على الرغم من أنها ضخمة ومعقدة، إلا أنها لا تلبي متطلباتك تمامًا:
يعد تنسيق العملة أمرًا صعبًا.

انظر أيضًا I18N::Langinfo و"CRNCYSTR".

"LC_TIME"
الإخراج الذي تم إنتاجه بواسطة "POSIX::strftime()"، والذي ينشئ تاريخًا/وقتًا منسقًا يمكن قراءته بواسطة الإنسان
تتأثر السلسلة باللغة المحلية "LC_TIME" الحالية. وهكذا، في لغة فرنسية، الإخراج
يتم إنتاجه بواسطة عنصر التنسيق %B (اسم الشهر الكامل) للشهر الأول من العام
يكون "جانفييه". إليك كيفية الحصول على قائمة بأسماء الأشهر الطويلة باللغة الحالية:

استخدم POSIX qw(strftime);
لـ (0..11) {
$long_month_name[$_] =
strftime("%B", 0, 0, 0, 1, $_, 96);
}

ملاحظة: "استخدام الإعدادات المحلية" غير مطلوب في هذا المثال: "strftime()" هي دالة POSIX والتي
يستخدم وظيفة "libc" القياسية التي يوفرها النظام والتي تخضع دائمًا لـ "LC_TIME" الحالي
المحلية.

راجع أيضًا I18N::Langinfo و"ABDAY_1".."ABDAY_7"، "DAY_1".."DAY_7"، "ABMON_1".."ABMON_12"،
و"ABMON_1".."ABMON_12".

أخرى الفئات
لا يتم حاليًا استخدام الفئات المحلية المتبقية بواسطة Perl نفسها. ولكن لاحظ مرة أخرى
أن الأشياء التي يتفاعل معها Perl قد تستخدم هذه، بما في ذلك الامتدادات خارج المعيار
توزيع بيرل، ونظام التشغيل وأدواته المساعدة. لاحظ ذلك بشكل خاص
قيمة السلسلة $! وقد يتم تغيير رسائل الخطأ المقدمة من الأدوات المساعدة الخارجية
بواسطة "LC_MESSAGES". إذا كنت تريد الحصول على رموز خطأ محمولة، فاستخدم "%!". انظر إرنو.

الأمن


على الرغم من أن المناقشة الرئيسية حول مشكلات أمان Perl يمكن العثور عليها في perlsec، إلا أنها مناقشة
ستكون معالجة لغة Perl غير مكتملة إذا لم تلفت انتباهك إلى اللغة-
القضايا الأمنية التابعة. اللغات - خاصة على الأنظمة التي تسمح للمستخدمين غير المميزين
لبناء مواقع خاصة بهم - غير جديرة بالثقة. لغة ضارة (أو معطلة فقط).
يمكن أن يجعل التطبيق المدرك للغة يعطي نتائج غير متوقعة. وهنا عدد قليل
الاحتمالات:

· قد يتم التحقق من التعبير العادي لأسماء الملفات الآمنة أو عناوين البريد باستخدام "\w".
تم انتحاله بواسطة لغة "LC_CTYPE" التي تدعي وجود أحرف مثل ">" و"|" نكون
أبجدية رقمية.

· استيفاء السلسلة باستخدام تعيين الحالة، كما في "$dest = "C:\U$name.$ext""، على سبيل المثال، قد
تؤدي إلى نتائج خطيرة إذا كان جدول تعيين الحالة "LC_CTYPE" الزائف ساري المفعول.

· قد تؤدي لغة "LC_COLLATE" الخادعة إلى ظهور أسماء الطلاب الحاصلين على درجات "D".
تظهر قبل أولئك الذين لديهم "A".

· قد يتم تنسيق أحد التطبيقات التي تتحمل عناء استخدام المعلومات الموجودة في "LC_MONETARY".
الديون كما لو كانت ائتمانات والعكس صحيح إذا تم تخريب تلك اللغة. أو
وقد تقوم بتسديد الدفعات بالدولار الأمريكي بدلاً من دولار هونج كونج.

· يمكن التلاعب بأسماء التاريخ واليوم في التواريخ المنسقة بواسطة "strftime()".
ميزة بواسطة مستخدم ضار قادر على تخريب لغة "LC_DATE". ("انظر - يقول أنا
لم يكن في المبنى يوم الأحد.")

مثل هذه المخاطر ليست خاصة بالنظام المحلي: أي جانب من جوانب التطبيق
البيئة التي قد يتم تعديلها بشكل ضار تمثل تحديات مماثلة. بصورة مماثلة،
فهي ليست خاصة بـ Perl: أي لغة برمجة تسمح لك بكتابة البرامج
أن تأخذ في الاعتبار بيئتها يعرضك لهذه القضايا.

لا تستطيع لغة Perl حمايتك من كافة الاحتمالات الموضحة في الأمثلة - لا يوجد
استبدل يقظتك الخاصة - ولكن عندما يكون "استخدام اللغة" ساري المفعول، يستخدم Perl
آلية التشويه (انظر بيرلسيك) لوضع علامة على نتائج السلسلة التي تصبح معتمدة على اللغة، و
والتي قد تكون غير جديرة بالثقة نتيجة لذلك. فيما يلي ملخص لسلوك التلويث
العوامل والوظائف التي قد تتأثر بالإعدادات المحلية:

· مقارنة مشغلي ("lt" و"le" و"ge" و"gt" و"cmp"):

النتيجة العددية صواب/خطأ (أو أقل/مساوية/أكبر) لن تكون ملوثة أبدًا.

· رسم خرائط الحالة إقحام (مع "\l" أو "\L" أو "\u" أو "\U" أو "\F")

تكون سلسلة النتائج التي تحتوي على مادة محرفة ملوثة إذا كان نموذج "استخدام الإعدادات المحلية".
الذي يتضمن "LC_CTYPE" ساري المفعول.

· مطابقة عامل ("م//"):

النتيجة العددية الحقيقية/الخاطئة لم تلوث أبدًا.

جميع الأنماط الفرعية، إما يتم تسليمها كنتيجة لسياق القائمة أو كـ $1 إلخ.، ملوثة
إذا كان نموذج "استخدام الإعدادات المحلية" الذي يتضمن "LC_CTYPE" ساريًا، والنمط الفرعي
يحتوي التعبير العادي على بنية تعتمد على اللغة. وتشمل هذه البنيات
"\w" (لمطابقة حرف أبجدي رقمي)، "\W" (حرف غير أبجدي رقمي)، "\b" و
"\B" (حدود الكلمة وغير الحدود، والتي تعتمد على ما يتطابق معه "\w" و"\W")، "\s"
(حرف مسافة بيضاء)، "\S" (حرف غير مسافة بيضاء)، "\d" و "\D" (أرقام و
غير أرقام)، وفئات أحرف POSIX، مثل "[:alpha:]" (راجع "POSIX
فئات الأحرف" في perlrecharclass).

من المحتمل أيضًا أن يكون هناك تلوث إذا تمت مطابقة النمط بشكل غير حساس لحالة الأحرف (عبر "/i").
الاستثناء هو إذا كانت جميع نقاط الكود المراد مطابقتها بهذه الطريقة أعلى من 255 وتفعل
لا تحتوي على طيات بموجب قواعد Unicode إلى أقل من 256. ولم يتم إجراء أي تشويه لهذه
لأن Perl يستخدم فقط قواعد Unicode لنقاط التعليمات البرمجية هذه، وهذه القواعد هي
نفسه بغض النظر عن اللغة الحالية.

متغيرات النمط المتطابقة، $&، و"$`" (ما قبل المباراة)، و"$'" (ما بعد المباراة)، و$+ (الأخيرة)
مباراة) ملوثة أيضا.

· الاستبدال عامل ("س///"):

لديه نفس سلوك عامل المطابقة. أيضًا، يصبح المعامل الأيسر لـ "=~".
ملوث عندما يكون نموذج "استخدام اللغة" الذي يتضمن "LC_CTYPE" ساري المفعول، إذا تم تعديله كـ
نتيجة الاستبدال بناءً على مطابقة التعبير العادي التي تتضمن أيًا من
الأشياء المذكورة في العنصر السابق، أو تعيين الحالة، مثل "\l"، "\L"،"\u"،
"\U" أو "\F".

· الناتج التنسيق وظائف ("printf ()" و"الكتابة ()"):

النتائج لن تكون ملوثة أبدًا، وإلا حتى الناتج من الطباعة، على سبيل المثال
"print(1/7)" يجب أن تكون ملوثة إذا كان "استخدام اللغة" ساري المفعول.

· رسم خرائط الحالة وظائف ("lc()"، "lcfirst()"، "uc()"، "ucfirst()"):

تكون النتائج ملوثة إذا كان نموذج "استخدام الإعدادات المحلية" الذي يتضمن "LC_CTYPE" ساري المفعول.

· POSIX تعتمد على اللغة وظائف ("localeconv()"، "strcoll()"، "strftime()"،
"ستركسفرم ()"):

النتائج ليست ملوثة أبدا.

· POSIX حرف فئة اختبارات ("POSIX::isalnum()"، "POSIX::isalpha()"،
"POSIX::isdigit()"، "POSIX::isgraph()"، "POSIX::islower()"، "POSIX::isprint()"،
"POSIX::ispunct()"، "POSIX::isspace()"، "POSIX::isupper()"، "POSIX::isxdigit()"):

النتائج الصحيحة/الخاطئة لا تشوبها شائبة أبدًا.

توضح ثلاثة أمثلة التلوث المعتمد على اللغة. البرنامج الأول الذي يتجاهل
locale، لن يتم تشغيلها: لا يجوز استخدام القيمة المأخوذة مباشرة من سطر الأوامر لتسمية ملف
ملف الإخراج عند تمكين التحقق من الشوائب.

#/usr/local/bin/Perl -T
# تشغيل مع فحص الشوائب

# تم حذف التحقق من سلامة سطر الأوامر ...
$tainted_output_file = Shift;

افتح (F، ">$tainted_output_file")
أو تحذير "فشل فتح ملف $tainted_output_file: $!\n";

يمكن جعل البرنامج يعمل عن طريق "غسل" القيمة الملوثة من خلال برنامج منتظم
التعبير: المثال الثاني - الذي لا يزال يتجاهل المعلومات المحلية - يعمل، مما يؤدي إلى إنشاء ملف
الملف المسمى في سطر الأوامر الخاص به إذا كان ذلك ممكنًا.

#/usr/local/bin/Perl -T

$tainted_output_file = Shift;
$tainted_output_file =~ m%[\w/]+%;
$untainted_output_file = $&;

فتح (F، ">$untainted_output_file")
أو تحذير "فشل فتح ملف $untainted_output_file: $!\n";

قارن ذلك ببرنامج مشابه ولكنه مدرك للغة المحلية:

#/usr/local/bin/Perl -T

$tainted_output_file = Shift;
استخدام اللغة؛
$tainted_output_file =~ m%[\w/]+%;
$localized_output_file = $&;

فتح (F، ">$localized_output_file")
أو تحذير "فشل فتح ملف $localized_output_file: $!\n";

يفشل هذا البرنامج الثالث في التشغيل لأن $& ملوث: فهو نتيجة تطابق
تتضمن "\w" بينما يكون "استخدام الإعدادات المحلية" ساري المفعول.

البيئة


PERL_SKIP_LOCALE_INIT
متغير البيئة هذا، متاح بدءًا من Perl v5.20، إذا تم تعيينه (على Any
value)، يخبر Perl بعدم استخدام بقية متغيرات البيئة
التهيئة مع. بدلاً من ذلك، يستخدم Perl الإعدادات المحلية الحالية مهما كانت.
وهذا مفيد بشكل خاص في البيئات المضمنة، راجع "استخدام Perl المضمن".
مع لغات POSIX" في حيرة.

بيرل_بادلانج
سلسلة يمكنها منع تحذير Perl بشأن إعدادات اللغة الفاشلة في
بدء. يمكن أن يحدث الفشل إذا كان دعم اللغة في نظام التشغيل
تفتقر (مكسورة) بطريقة ما - أو إذا أخطأت في كتابة اسم اللغة عندما تكون
إعداد البيئة الخاصة بك. إذا كان متغير البيئة هذا غائبًا أو يحتوي على
قيمة أخرى غير "0" أو ""، سوف يشكو Perl من فشل الإعداد المحلي.

نوت: "PERL_BADLANG" يمنحك فقط طريقة لإخفاء رسالة التحذير. ال
تحكي الرسالة عن بعض المشاكل في الدعم المحلي لنظامك، وأنت
ينبغي التحقيق في ما هي المشكلة.

DPKG_RUNNING_VERSION
في أنظمة دبيان، إذا تم تعيين متغير البيئة DPKG_RUNNING_VERSION (إلى
أي قيمة)، سيتم منع تحذيرات فشل الإعدادات المحلية تمامًا كما هو الحال مع
إعداد PERL_BADLANG صفر. يتم ذلك لتجنب فيضانات التحذيرات الزائفة
أثناء ترقيات النظام. يرىhttp://bugs.debian.org/508764>.

متغيرات البيئة التالية ليست خاصة بـ Perl: فهي جزء من
طريقة موحدة (ISO C، XPG4، POSIX 1.c) "setlocale()" للتحكم في
رأي التطبيق على البيانات. Windows ليس POSIX، لكن Perl يرتب لما يلي
للعمل كما هو موضح على أي حال. إذا كانت الإعدادات المحلية التي يحددها متغير البيئة غير صالحة،
يحاول Perl الخيار الأدنى التالي في الأولوية. إذا لم يكن أي شيء صالحًا، على نظام التشغيل Windows، فإن النظام
ثم تتم تجربة اللغة الافتراضية. إذا فشل كل شيء آخر، يتم استخدام اللغة "C". إذا حتى ذلك
لا يعمل، شيء ما مكسور بشدة، لكن بيرل يحاول المضي قدمًا في أي شيء
قد تكون الإعدادات المحلية.

"LC_ALL" "LC_ALL" هو متغير البيئة المحلي "تجاوز الكل". إذا تم تعيينه، فإنه
يتجاوز كافة متغيرات البيئة المحلية الأخرى.

"لغة" نوت: "LANGUAGE" هو امتداد GNU، وهو يؤثر عليك فقط إذا كنت تستخدم
جنو ليبك. هذا هو الحال إذا كنت تستخدم Linux على سبيل المثال. إذا كنت تستخدم
يونكس "التجارية" أنت على الأرجح ليس باستخدام GNU libc ويمكنك
تجاهل "اللغة".

ومع ذلك، في حالة استخدامك "LANGUAGE": فإنها تؤثر على لغة
يتم إخراج رسائل إعلامية وتحذيرية ورسائل خطأ عن طريق الأوامر (وبعبارة أخرى،
إنه يشبه "LC_MESSAGES") ولكن له أولوية أعلى من "LC_ALL". علاوة على ذلك،
إنها ليست قيمة واحدة ولكنها بدلاً من ذلك "مسار" (: "-قائمة مفصولة) من اللغات
(وليس اللغات). راجع وثائق مكتبة GNU "gettext" للمزيد
معلومات.

"LC_CTYPE" في غياب "LC_ALL"، يختار "LC_CTYPE" لغة نوع الحرف. في
في غياب كل من "LC_ALL" و"LC_CTYPE"، يختار "LANG" نوع الحرف
المحلية.

"LC_COLLATE"
في حالة عدم وجود "LC_ALL"، يختار "LC_COLLATE" الترتيب (الفرز)
لغة. في حالة عدم وجود كل من "LC_ALL" و"LC_COLLATE"، يختار "LANG" الخيار
لغة الترتيب.

"LC_MONETARY"
في غياب "LC_ALL"، يختار "LC_MONETARY" التنسيق النقدي
لغة. في حالة عدم وجود كل من "LC_ALL" و"LC_MONETARY"، يختار "LANG" الخيار
لغة التنسيق النقدي.

"LC_NUMERIC"
في غياب "LC_ALL"، يختار "LC_NUMERIC" لغة التنسيق الرقمي.
في حالة عدم وجود كل من "LC_ALL" و"LC_NUMERIC"، تختار "LANG" الرقم الرقمي
تنسيق.

"LC_TIME" في حالة عدم وجود "LC_ALL"، يختار "LC_TIME" تنسيق التاريخ والوقت
لغة. في حالة عدم وجود كل من "LC_ALL" و"LC_TIME"، يختار "LANG" الخيار
لغة تنسيق التاريخ والوقت.

"LANG" "LANG" هو متغير البيئة المحلي "التقاط الكل". إذا تم تعيينه، فهو كذلك
يتم استخدامه كملاذ أخير بعد "LC_ALL" الشامل والفئة المحددة
"LC_فو ".

أمثلة
يتحكم "LC_NUMERIC" في الإخراج الرقمي:

استخدام اللغة؛
استخدم POSIX qw(locale_h); # يستورد setlocale() وثوابت LC_.
setlocale(LC_NUMERIC, "fr_FR") أو يموت "عفوا";
برينتف "%g\n"، 1.23؛ # إذا نجح "fr_FR"، فمن المحتمل أن يظهر 1,23.

وأيضًا كيفية تحليل السلاسل بواسطة "POSIX::strtod()" كأرقام:

استخدام اللغة؛
استخدم POSIX qw(locale_h strtod);
setlocale(LC_NUMERIC, "de_DE") أو يموت "Entschuldigung";
$x = strtod("2,34") + 5;
اطبع $x, "\n"; # من المحتمل أن يظهر 7,34.

الملاحظات


خيط "تقييم" "LC_NUMERIC"
يقوم تقييم السلسلة بتوزيع تعبيرها على أنه لغة Perl القياسية. ولذلك فإنه يتوقع
العلامة العشرية لتكون نقطة. إذا تم تعيين "LC_NUMERIC" بحيث يكون هذا فاصلة بدلاً من ذلك، فسيتم استخدام
سيتم الخلط بين التحليل، وربما بصمت.

استخدام اللغة؛
استخدم POSIX qw(locale_h);
setlocale(LC_NUMERIC, "fr_FR") أو يموت "عفوا";
بلدي $a = 1.2؛
طباعة التقييم "$a + 1.5";
طباعة "\ n" ؛

طباعة "13,5". وذلك لأنه في تلك اللغة، تكون الفاصلة هي حرف العلامة العشرية.
وهكذا يمتد "التقييم" إلى:

تقييم "1,2 + 1.5"

والنتيجة ليست ما كنت تتوقعه على الأرجح. يتم إنشاء أية تحذيرات. اذا فعلت
السلسلة "eval" ضمن نطاق "استخدام الإعدادات المحلية"، يجب عليك بدلاً من ذلك تغيير "eval"
خط للقيام بشيء مثل:

تقييم الطباعة "بدون لغة؛ $a + 1.5";

هذا يطبع 2.7.

يمكنك أيضًا استبعاد "LC_NUMERIC"، إذا لم تكن بحاجة إليه، من خلال

استخدم اللغة ':!numeric';

الى الوراء التوافق
إصدارات Perl السابقة للإصدار 5.004 خاصة تجاهل المعلومات المحلية، يتصرف بشكل عام
إذا كان هناك شيء مشابه للغة "C" ساري المفعول دائمًا، حتى لو كان البرنامج
اقترحت البيئة خلاف ذلك (راجع "وظيفة setlocale"). افتراضيا، بيرل لا يزال
يتصرف بهذه الطريقة للتوافق مع الإصدارات السابقة. إذا كنت تريد أن يدفع تطبيق Perl
الاهتمام بالمعلومات المحلية، أنت يجب استخدم براغما "استخدام اللغة" (راجع "استخدام".
locale" pragma") أو في حالة رغبتك في القيام بذلك من أجل النمط فقط
المطابقة، مُعدِّل التعبير العادي "/l" (راجع "معدِّلات مجموعة الأحرف" في perlre)
ليأمره بذلك.

استخدمت إصدارات Perl من 5.002 إلى 5.003 معلومات "LC_CTYPE" إذا كانت متوفرة؛ الذي - التي
هو أن "\w" لم يفهم ما هي الحروف وفقًا للبيئة المحلية
المتغيرات. كانت المشكلة هي أن المستخدم لم يكن لديه أي سيطرة على الميزة: إذا كان C
اللغات المدعومة بالمكتبة، استخدمها بيرل.

I18N: ترتيب مهمل
في إصدارات Perl السابقة للإصدار 5.004، كان الترتيب لكل لغة ممكنًا باستخدام التابع
وحدة المكتبة "I18N::Collate". أصبحت هذه الوحدة الآن قديمة بعض الشيء ويجب تجنبها
في التطبيقات الجديدة. تم الآن دمج وظيفة "LC_COLLATE" في قلب Perl
اللغة: يمكن للمرء استخدام البيانات العددية الخاصة بالإعدادات المحلية بشكل طبيعي تمامًا باستخدام "استخدام الإعدادات المحلية"،
لذلك لم تعد هناك حاجة للتوفيق بين المراجع العددية لـ "I18N::Collate".

تصنيف حسب: سرعة ذاكرة تستخدم الآثار
عادةً ما تكون المقارنة والفرز حسب الإعدادات المحلية أبطأ من الفرز الافتراضي؛ تباطؤ
وقد لوحظت مرتين إلى أربع مرات. سوف يستهلك أيضًا المزيد من الذاكرة: مرة واحدة بيرل
شارك المتغير العددي في أي مقارنة سلسلة أو عملية فرز تخضع لـ
وفقًا لقواعد الترتيب المحلية، سوف يستغرق الأمر ذاكرة أكبر من 3 إلى 15 مرة عن ذي قبل. (بالضبط
يعتمد المضاعف على محتويات السلسلة ونظام التشغيل والإعدادات المحلية.) هذه
يتم تحديد الجوانب السلبية بشكل أكبر من خلال تطبيق نظام التشغيل للنظام المحلي
من بيرل.

بحرية متاح محلي التعاريف
يقوم مشروع Unicode CLDR باستخراج جزء POSIX من العديد من لغاته المحلية، وهو متاح على

http://unicode.org/Public/cldr/latest/

توجد مجموعة كبيرة من التعريفات المحلية على:

http://std.dkuug.dk/i18n/WG15-collection/locales/

يجب أن تدرك أنه غير معتمد، ولا يُزعم أنه مناسب لأي غرض.
إذا كان نظامك يسمح بتثبيت لغات عشوائية، فقد تجد التعريفات
مفيدة كما هي، أو كأساس لتطوير مناطقك الخاصة.

I18n l10n
غالبًا ما يتم اختصار كلمة "التدويل" على أنها i18n لأن حروفه الأولى والأخيرة هي
يفصل بينهم ثمانية عشر آخرون. (يمكنك تخمين السبب في أن Internalin ... Internaliti ... i18n
يميل إلى الاختصار.) وبنفس الطريقة، غالبًا ما يتم اختصار كلمة "التوطين" إلى l10n.

An ناقص معيار
يمكن انتقاد التدويل، كما هو محدد في معايير C وPOSIX، على أنه
غير مكتملة، وغير مربحة، ولها تفاصيل كبيرة جدًا. (تنطبق اللغات على الكل
العملية، عندما يكون من المفيد تطبيقها على خيط واحد،
مجموعة النافذة، أو أيًا كان.) كما أن لديهم ميلًا، مثل مجموعات المعايير، إلى الانقسام
العالم إلى أمم، عندما نعلم جميعًا أنه يمكن تقسيم العالم إلى دول بالتساوي
المصرفيين وسائقي الدراجات النارية واللاعبين وما إلى ذلك.

يونيكود UTF-8


يعد دعم Unicode جديدًا بدءًا من إصدار Perl v5.6، ويتم تنفيذه بشكل كامل
في الإصدارات v5.8 والإصدارات الأحدث. انظر بيرلوني مقدمة.

بدءًا من الإصدار 5.20 من Perl، يتم دعم لغات UTF-8 في Perl، باستثناء "LC_COLLATE" (استخدم
Unicode::Collate بدلاً من ذلك). إذا كان لديك الإصدار 5.16 أو الإصدار 5.18 من لغة Perl ولا يمكنك الترقية، فيمكنك استخدام

استخدم اللغة ':not_characters'؛

عند استخدام هذا النموذج من البراجما، يتم استخدام الأجزاء التي لا تحتوي على أحرف من اللغات
بواسطة Perl، على سبيل المثال "LC_NUMERIC". يفترض بيرل أنك قمت بترجمة جميع ملفات
الأحرف التي سيتم تشغيلها في Unicode (في الواقع مجموعة الأحرف الأصلية للنظام الأساسي
(ASCII أو EBCDIC) بالإضافة إلى Unicode). بالنسبة للبيانات الموجودة في الملفات، يمكن القيام بذلك بسهولة أيضًا
تحديد

استخدم مفتوح ': لغة'؛

تقوم هذه العملية بترتيب جميع المدخلات من الملفات التي سيتم ترجمتها إلى Unicode من ملف
اللغة المحلية الحالية كما هو محدد في البيئة (انظر "البيئة")، وجميع المخرجات إلى
الملفات المراد ترجمتها مرة أخرى إلى اللغة. (انظر الفتح). على أساس كل ملف، يمكنك
يمكنك بدلاً من ذلك استخدام وحدة PerlIO::locale، أو وحدة Encode::Locale، وكلاهما متاح
من CPAN. تحتوي الوحدة الأخيرة أيضًا على طرق لتسهيل التعامل مع "ARGV" و
متغيرات البيئة، ويمكن استخدامها على سلاسل فردية. إذا كنت تعلم أن كل ما تبذلونه من
اللغات المحلية ستكون UTF-8، كما هو الحال كثيرًا هذه الأيام، يمكنك استخدام -C تبديل سطر الأوامر.

يسمح هذا النموذج من البراجما بالتعامل السلس مع اللغات المحلية باستخدام Unicode. ال
سيتم ترتيب الترتيب حسب ترتيب نقطة رمز Unicode. ويوصى بشدة أنه عندما
تحتاج إلى ترتيب وفرز السلاسل التي تستخدمها الوحدة القياسية Unicode::Collate والتي
يعطي نتائج أفضل بكثير في كثير من الحالات مما يمكنك الحصول عليه باستخدام اللغة ذات الطراز القديم
معالجة.

يمكن استخدام جميع الوحدات والمفاتيح الموضحة للتو في الإصدار 5.20 باستخدام "استخدام" عادي فقط
locale"، وإذا لم تكن لغات الإدخال UTF-8، فستحصل على أقل من المثالي
السلوك، الموضح أدناه، الذي تحصل عليه مع Perls السابقة للإصدار 5.16، أو عند استخدام الإعدادات المحلية
pragma بدون المعلمة ":not_characters" في الإصدارين v5.16 وv5.18. إذا كنت تستخدم
حصريًا لغات UTF-8 في الإصدار 5.20 والإصدارات الأحدث، ولا ينطبق باقي هذا القسم على
أنت.

هناك حالتان، لغات متعددة البايت وبايت واحد. أول متعدد البايت:

اللغة المحلية الوحيدة متعددة البايت (أو الأحرف العريضة) التي من المحتمل أن يدعمها Perl هي
ترميز UTF-8. ويرجع ذلك إلى صعوبة التنفيذ، حيث أن جودة UTF-8 عالية
يتم الآن نشر اللغات في كل منطقة من العالم
(<http://unicode.org/Public/cldr/latest/>)، وهذا فشل في كل ما يمكنك استخدامه
وحدة التشفير للترجمة من/إلى لغتك. لذلك، سيكون عليك القيام بأحد هذه الأشياء
إذا كنت تستخدم إحدى هذه اللغات، مثل Big5 أو Shift JIS. بالنسبة للغات UTF-8، في
Perls (ما قبل الإصدار 5.20) التي لا تتمتع بدعم كامل للغة UTF-8، قد تعمل بشكل جيد إلى حد معقول
(اعتمادًا على تنفيذ مكتبة C الخاصة بك) ببساطة لأنهم هم وPerl يخزنون
الأحرف التي تشغل بايتات متعددة بنفس الطريقة. ومع ذلك، فإن بعض، إن لم يكن معظم، C
قد لا تقوم تطبيقات المكتبة بمعالجة الأحرف الموجودة في النصف العلوي من اللاتينية-1
النطاق (128 - 255) بشكل صحيح ضمن "LC_CTYPE". لمعرفة ما إذا كانت الشخصية هي نوع معين
ضمن لغة معينة، يستخدم Perl وظائف مثل "isalnum()". قد لا تعمل مكتبة C الخاصة بك
لغات UTF-8 مع هذه الوظائف، بدلاً من ذلك تعمل فقط ضمن المكتبة الواسعة الأحدث
وظائف مثل "iswalnum()" والتي لا يستخدمها Perl. هذه اللغات متعددة البايت هي
يتم التعامل معها مثل اللغات ذات البايت الواحد، وستكون لها القيود الموضحة أدناه.
بدءًا من الإصدار 5.22 من Perl، تظهر رسالة تحذير عندما يكتشف Perl لغة متعددة البايتات
أنه لا يدعم بشكل كامل.

بالنسبة للغات المحلية ذات البايت الواحد، تتخذ لغة Perl عمومًا المسار لاستخدام قواعد اللغة المحلية في نقاط التعليمات البرمجية
يمكن احتواؤها في بايت واحد، وقواعد Unicode لأولئك الذين لا يستطيعون ذلك (على الرغم من أن هذا ليس كذلك
تطبق بشكل موحد، انظر الملاحظة في نهاية هذا القسم). وهذا يمنع العديد من المشاكل
في اللغات التي ليست UTF-8. لنفترض أن اللغة هي ISO8859-7، اليونانية. الشخصية عند
0xD7 هناك عاصمة تشي. ولكن في لغة ISO8859-1، Latin1، يعد هذا عملية ضرب
لافتة. ستتطابق فئة أحرف التعبير العادي POSIX "[[:alpha:]]" بطريقة سحرية
0xD7 باللغة اليونانية ولكن ليس باللغة اللاتينية.

ومع ذلك، هناك أماكن حيث ينهار هذا. بعض بنيات Perl مخصصة لـ Unicode
فقط، مثل "\p{Alpha}". يفترضون أن 0xD7 له دائمًا معنى Unicode الخاص به (أو
مكافئة على منصات EBCDIC). نظرًا لأن Latin1 هي مجموعة فرعية من Unicode و0xD7 هي
علامة الضرب في كل من Latin1 وUnicode، "\p{Alpha}" لن تتطابق معها أبدًا،
بغض النظر عن اللغة. تحدث مشكلة مشابهة مع "\N{...}". قبل الإصدار 5.20، كان كذلك
لذلك يعد استخدام "\p{}" أو "\N{}" ضمن "استخدام الإعدادات المحلية" فكرة سيئة -ما لم تستطيع
ضمان أن اللغة ستكون ISO8859-1. استخدم فئات أحرف POSIX بدلاً من ذلك.

هناك مشكلة أخرى في هذا الأسلوب وهي العمليات التي تعبر البايت المفرد/المتعدد
حدود البايت غير محددة بشكل جيد، وبالتالي فهي غير مسموح بها. (هذه الحدود بين
نقاط التشفير عند 255/256.) على سبيل المثال، الغلاف السفلي LATIN CAPITAL LETTER Y مع DIAERESIS
(U+0178) يجب أن يُرجع الحرف اللاتيني الصغير Y مع DIAERESIS (U+00FF). لكن باللغة اليونانية
locale، على سبيل المثال، لا يوجد حرف في 0xFF، وليس لدى Perl طريقة لمعرفة ما هو
من المفترض حقًا أن يمثل الحرف الموجود في 0xFF. وبالتالي فهو لا يسمح بالعملية.
في هذا الوضع، يكون الحرف الصغير U+0178 هو نفسه.

تحدث نفس المشكلات إذا قمت بتمكين التحديد التلقائي لـ UTF-8 لملفك القياسي
المقابض، وطبقة "open()" الافتراضية، و@ARGV على لغات غير ISO8859-1، وغير UTF-8 (باستخدام
إما -C مفتاح سطر الأوامر أو متغير البيئة "PERL_UNICODE"؛ يرى
بيرلون). تتم قراءة الأشياء كـ UTF-8، وهو ما يعني عادةً وجود Unicode
التفسير، ولكن وجود لغة يؤدي إلى تفسيرها في تلك اللغة
بدلاً من. على سبيل المثال، نقطة الرمز 0xD7 في إدخال Unicode، والتي يجب أن تعني
علامة الضرب، لن يتم تفسيرها بواسطة بيرل بهذه الطريقة تحت اللغة اليونانية. هذا
ليست مشكلة المقدمة عليك التأكد من أن جميع اللغات ستكون دائمًا وفقط
ISO8859-1، أو، إذا لم يكن لديك مكتبة C ناقصة، لغة UTF-8.

لا تزال هناك مشكلة أخرى وهي أن هذا الأسلوب يمكن أن يؤدي إلى نقطتين رمزيتين لهما نفس المعنى
شخصية. وهكذا في اللغة اليونانية، كل من U+03A7 وU+00D7 هما الحرف الكبير اليوناني CHI.

بسبب كل هذه المشاكل، بدءًا من الإصدار 5.22، ستطلق لغة Perl تحذيرًا إذا كان هناك خطأ متعدد
يتم استخدام نقطة رمز البايت (وبالتالي Unicode) عندما تكون الإعدادات المحلية ذات البايت الواحد سارية المفعول. (بالرغم من
ولا يتحقق من ذلك إذا كان القيام بذلك سيؤدي إلى إبطاء التنفيذ بشكل غير معقول.)

من المعروف أن اللغات المحلية للموردين بها أخطاء، ومن الصعب على Perl اختبار لغتها المحلية.
التعامل مع التعليمات البرمجية لأن هذا يتفاعل مع التعليمات البرمجية التي ليس لدى Perl أي سيطرة عليها؛ لذلك
قد يكون رمز التعامل مع الإعدادات المحلية في Perl به أخطاء أيضًا. (ومع ذلك، فإن ملف Unicode الذي تم توفيره
يجب أن تكون اللغات أفضل، كما توجد آلية تغذية راجعة لتصحيح أية مشكلات. يرى
"تعريفات محلية متاحة مجانًا".)

إذا كان لديك الإصدار 5.16 من Perl، فستختفي المشاكل المذكورة أعلاه إذا استخدمت الإصدار XNUMX
المعلمة ":not_characters" إلى pragma المحلية (باستثناء أخطاء البائع في غير
أجزاء الحرف). إذا لم يكن لديك الإصدار 5.16، وأنت do لديك اللغات التي تعمل، وذلك باستخدام
قد تكون مفيدة لأغراض محددة معينة، طالما أنك تضع في اعتبارك
مسكتك المذكورة بالفعل. على سبيل المثال، إذا كان ترتيب اللغات الخاصة بك يعمل، فسيتم تشغيله
أسرع ضمن اللغات منه تحت Unicode::Collate؛ ويمكنك الوصول إلى أشياء مثل
رمز العملة المحلية وأسماء أشهر وأيام الأسبوع. (لكن من أجل
قم بتوضيح النقطة، في الإصدار 5.16، يمكنك الحصول على هذا الوصول دون الجوانب السلبية للغات
باستخدام النموذج ":not_characters" للبراغما.)

ملاحظة: سياسة استخدام القواعد المحلية لنقاط التعليمات البرمجية التي يمكن احتواؤها في البايت، وUnicode
لا يتم تطبيق القواعد الخاصة بأولئك الذين لا يستطيعون ذلك بشكل موحد. قبل الإصدار 5.12، كان الأمر كذلك إلى حد ما
عشوائي؛ في الإصدار 5.12 تم تطبيقه بشكل متسق إلى حد ما على مطابقة التعبير العادي
باستثناء فئات الأحرف بين قوسين؛ في الإصدار 5.14، تم توسيعه ليشمل جميع مطابقات التعبير العادي؛ و
في الإصدار 5.16 إلى عمليات الغلاف مثل "\L" و"uc()". للتجميع، في جميع الإصدارات
حتى الآن، يتم استدعاء وظيفة "strxfrm ()" الخاصة بالنظام، وكل ما تفعله هو ما تحصل عليه.

استخدم perllocale عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    PSI
    PSI
    Psi هو برنامج XMPP قوي عبر الأنظمة الأساسية
    عميل مصمم للمستخدمين ذوي الخبرة.
    هناك تصميمات متاحة لـ MS
    Windows و GNU / Linux و macOS .. الجمهور:
    المستخدمين النهائيين...
    تحميل Psi
  • 2
    Blobby Volley 2 تحديث
    Blobby Volley 2 تحديث
    استمرار الرسمي الشهير
    لعبة بلوبي فولي 1.x أركيد..
    الجمهور: المستخدمون النهائيون / سطح المكتب. مستخدم
    الواجهة: برنامج OpenGL، SDL. برمجة
    اللغة: C++، لوا. ج...
    تحميل لعبة بلوبي فولي 2
  • 3
    SuiteCRM
    SuiteCRM
    SuiteCRM هو العميل الحائز على جائزة
    إدارة العلاقات (CRM)
    التطبيق الذي قدمه لك المؤلفون
    والمحافظون ، SalesAgility. انها
    أشهر العالم ...
    قم بتنزيل SuiteCRM
  • 4
    بورادمين
    بورادمين
    Poweradmin هو DNS قائم على الويب
    أداة إدارية لخادم PowerDNS.
    الواجهة لديها دعم كامل لمعظم
    من ميزات PowerDNS. إنه ممتلئ
    الدعم...
    تحميل Poweradmin
  • 5
    إطار عمل ويب الجن
    إطار عمل ويب الجن
    Gin هو إطار عمل ويب سريع بشكل لا يصدق
    مكتوب في Golang يمكنه أداء ما يصل إلى
    40 مرة أسرع بفضل
    واجهة برمجة تطبيقات تشبه مارتيني وإصدار مخصص من
    هتتبروت ...
    تحميل إطار عمل جين ويب
  • 6
    سيريوس لينوكس
    سيريوس لينوكس
    CEREUS LINUX مبني على MX LINUX
    العديد من المكاتب. هذا هو
    أحد التطبيقات التي يمكن جلبها أيضًا
    تبدأ من
    https://sourceforge.net/projects/cereu...
    تحميل سيريوس لينكس
  • أكثر "

أوامر لينكس

Ad