كيفية تدويل موقع WordPress الخاص بك
نشرت: 2022-03-10في 30 سبتمبر 2017 ، اتحد مجتمع WordPress الدولي لمدة 24 ساعة لترجمة نظام WordPress البيئي. وللمرة الثالثة ، قامت #WPTranslationDay بدمج ماراثون الترجمة طوال اليوم مع الأحداث الرقمية وأحداث يوم المساهمين المصممة لتعزيز قيمة إنشاء تجارب يمكن الوصول إليها للمستخدمين العالميين ، والمعروفة باسم "التوطين".
كمجتمع مفتوح المصدر ، يجب علينا جميعًا أن نسعى جاهدين لتوطين مساهماتنا مفتوحة المصدر. قبل أن تتمكن من نسخ الأصول الرقمية الخاصة بك ، يجب عليك تدويل قاعدة التعليمات البرمجية الخاصة بك.
غالبًا ما يتم استخدام المصطلحين "التدويل" و "التوطين" بالتبادل ، على الرغم من أنهما يمثلان تقنيًا جانبين مختلفين من عملية الترجمة.
- التدويل (I18N) هو عملية تدويل أو تكييف السمة أو المكون الإضافي الخاص بك لترجمته إلى أي لغة في العالم.
- الترجمة (L10N) هي العملية اللاحقة لترجمة أو ترجمة أدواتك الدولية إلى لغة معينة.
WordPress مترجم بالكامل حاليًا لأكثر من 65 لغة ويقدم ترجمات جزئية لـ 95 لغة إضافية. يستمر الاستخدام الدولي في الارتفاع مع إدخال المزيد من عمليات الترجمة.

تجاوز مستخدمو WordPress غير الناطقين باللغة الإنجليزية المستخدمين الناطقين باللغة الإنجليزية في عام 2014 ، واستمروا عن غير قصد في تقليل نسبة مستخدمي اللغة الإنجليزية من الفطيرة في عام 2017 مع نمو جهود مثل #WPTranslateDay.
نظرًا لأن WordPress أصبح متاحًا أكثر فأكثر من الناحية اللغوية ، فإن معرفة I18N و L10N ضرورية لمطوري المكونات الإضافية والقوالب للازدهار في اقتصاد WordPress العالمي. لتوسيع نطاق الأعمال ، يمكن لمهارات التطوير هذه أن تفتح الأبواب للأسواق الخارجية. تعد إمكانية الوصول إلى الويب ، بما في ذلك إمكانية الوصول إلى اللغة ، أمرًا جيدًا للأعمال وأفضل للأشخاص.
استمرارًا لـ #WPTranslationDay ، إليك دليل محدث لتدويل المكونات الإضافية والسمات الخاصة بك في WordPress.
فيما يلي لمحة موجزة عن العملية التي سنستكشفها اليوم.
- اكتشاف
- تعرف على ملفات الترجمة
- ملف POT
- ملف PO
- ملف MO
- حزم GlotPress واللغة
- النسخ الاحتياطي وإعداد البيئة الخاصة بك
- تعرف على ملفات الترجمة
- البرنامج المساعد I18N
- رأس البرنامج المساعد
- تحميل مجال النص
- تدقيق السلاسل
- إنشاء ملف POT
- موضوع I18N
- رأس الموضوع
- تحميل مجال النص
- تدقيق السلاسل
- إنشاء ملف POT
- جافا سكريبت I18N
- مصادر إضافية
اكتشاف
تعرف على ملفات الترجمة
يستخدم WordPress مكتبة GNU gettext لتسهيل I18N.
أولاً ، دعنا نتعرف على ملفات ترجمة gettext التي تم إنشاؤها خلال العملية.
ملف قالب كائن محمول (POT)
أثناء عملية I18N ، سنستخدم أداة للعثور على سلاسل دولية وإنشاء ملف POT يحتوي على كل النص القابل للترجمة في المكونات الإضافية والقالب.
ملف كائن محمول (PO)
في المظهر ، لا توجد اختلافات ملحوظة بين ملف POT وملف PO . إنهما متماثلان نحويًا ولا يتم تمييزهما إلا من خلال الأغراض المقصودة منه.
بعد إنشاء ملف POT ، يجب ترجمة السلاسل النصية بواسطة مترجم إلى لغتك المفضلة. سيحتوي ملف PO في النهاية على سلاسل نصية بلغتك الأم ، بالإضافة إلى الترجمات المناسبة.
ملف كائن الجهاز (MO)
أخيرًا ، يتم تحويل ملف PO إلى مستند يمكن قراءته آليًا أو ملف Machine Object. سيعيش هذا الملف في دليل السمة أو المكون الإضافي الخاص بك ليقوم WordPress بالاتصال به عندما يحين وقت تقديم نسخة مترجمة.
النسخ الاحتياطي وإعداد البيئة الخاصة بك
قبل تعديل أي ترميز ، احتفظ بنسخة احتياطية من المكون الإضافي أو السمة أو موقعك بالكامل (أيًا كان ما تقوم بتدويله!) وقم بترتيب بيئات التطوير الخاصة بك.
تأكد من إجراء تدقيق سريع للمكونات الإضافية إذا كنت تخطط لترجمة موقع الويب الخاص بك. احذف أو ألغِ تنشيط أي مكونات إضافية لم تعد تستخدمها بشكل نشط. سيوفر لك هذا التدقيق السريع الوقت على المدى الطويل.
تدويل الإضافات الخاصة بك
رأس التوصيل
أولاً ، سنقوم بتحديث رأس المكون الإضافي. على وجه التحديد ، مجال النص ومسار المجال .
مثال رأس البرنامج المساعد
/* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */
مجال النص
مجال النص هو معرف فريد لـ WordPress للتعرف على كل النص الذي ينتمي إلى المكون الإضافي ويجب أن يتطابق مع slug الخاص بالمكون الإضافي .
هذا مهم بشكل خاص إذا كان المكون الإضافي الخاص بك مستضافًا على WordPress.org ؛ يجب أن تتطابق هذه من أجل GlotPress لاستيراد الترجمات بشكل صحيح للمكون الإضافي الخاص بك.
في مثالنا ، يسمى ملف البرنامج المساعد rad-plugin.php ومجال النص هو rad-plugin
قد يكون لديك بالفعل مجموعة مجال نصي. إذا لم تفعل ذلك ، فتذكر استخدام الواصلات وليس الشرطات السفلية.
مسار المجال
مسار المجال هو المجلد الذي ستعيش فيه ملفات الترجمة النهائية. يجب عليك إنشاء مجلد جديد داخل دليل البرنامج المساعد ، مثل / languages / ، وتحديث مسار المجال ، بحيث يعرف WordPress بالضبط مكان البحث عن ملفات الترجمة.
تحميل المجال النصي
بعد ذلك ، سنقوم بتحميل مجال النص عن طريق إضافة الوظيفة التالية إلى الكود الخاص بنا.
load_plugin_textdomain ()
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );
إذا كان ملف الترجمة متاحًا للغة المستخدم ، فإن وظيفة نطاق النص ستخبر WordPress بتسليمه.
حدود
- المجال $ - المجال النصي (مطلوب)
- $ abs_rel_path - خطأ (اختياري ، مهمل)
- $ plugin_rel_path - / languages / (اختياري ، هذا هو المسار النسبي للدليل الذي يحتوي على ملفات الترجمة الخاصة بك. في مثالنا ، / languages /. اعتبارًا من 4.6 ، سيبحث WordPress عن هذه الملفات في الملحق / languages / directory ، إذا كان هذا يذهب غير محدد.)
مثال البرنامج المساعد راد
لتحميل المجال النصي ، سنربط الإجراء "plugins_loaded".
add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }
تدقيق السلاسل
والخطوة التالية هي لف كل السلاسل النصية للإضافة في وظائف الترجمة.
وظائف الترجمة الأكثر شيوعًا هي __()
لإرجاع سلسلة مترجمة و _e()
لتكرار سلسلة مترجمة.
مثال البرنامج المساعد راد
__() $text = __( 'Super Rad!', 'rad-plugin' );
ستعمل هذه الوظيفة للترجمات البسيطة. يأخذ في الاعتبار معلمتين ؛ سلسلة النص والمجال النصي .
_e( 'Super Rad!', 'rad-plugin' );
هذه الوظيفة ببساطة تعكس القيمة. وإلا ، فإنها تعمل تمامًا كما تعمل الوظيفة السابقة.
هناك عدد كبير من وظائف الترجمة الإضافية التي يجب استخدامها أيضًا عند الاقتضاء.
وظائف أساسية أخرى
__() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()
وظائف التاريخ والرقم
number_format_i18n() date_i18n()
وظائف الهروب
لا تنس الهروب من أي بيانات يتم إخراجها باستخدام وظائف الهروب التالية.
esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()
في مثال Rad الخاص بنا ، قد يكون لدينا سطر من كود البرنامج المساعد يبدو كالتالي:
function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }
إنشاء ملف POT
الخطوة الأخيرة هي إنشاء ملف POT. هناك عدد قليل من الأدوات المختلفة المتاحة لإنشاء هذا النوع من الملفات ، ولكن في هذا البرنامج التعليمي ، سنلتزم بالتوصيات من كود WordPress ونستخدم Poedit ، واجهة المستخدم الرسومية سهلة الاستخدام لإدارة الترجمات.

ملاحظة : إذا كان المكون الإضافي أو المظهر الخاص بك موجودًا بالفعل في مستودع WordPress.org ، فيمكنك تخطي هذه العملية وإنشاء ملف POT من صفحة المسؤول. في هذه الحالة ، ليس من الضروري إنشاء ملف .po لكل لغة. أدى تقديم GlotPress وحزم اللغات في عام 2015 إلى تبسيط عملية الترجمة ؛ كل ما هو مطلوب لبرنامج GlotPress هو ملف .pot ، والذي سيتم استيراده بواسطة WordPress.org وتقديمه إلى المترجمين من خلال لوحة معلومات translate.wordpress.org. سيستخدم المتعاونون من جميع أنحاء العالم لوحة المعلومات هذه لتقديم ترجمات في #WPTranslateDay.
تحميل Poedit
تكوين Poedit
خصائص الترجمة
ابدأ بالانتقال إلى ملف > جديد . ثم حدد اللغة الأصلية للمكون الإضافي الخاص بك واضغط على موافق .

بعد ذلك ، حدد كتالوج > جديد . أدخل اسم المشروع والإصدار والاتصال واللغة.

مسارات
حدد علامة التبويب " مسارات المصادر " بعد ذلك. إذا كان هذا ملفًا جديدًا ، فسيتعين عليك حفظ الملف أولاً.
باتباع مثالنا ، سنختار ملف > حفظ باسم لحفظه كملف .po في / languages / directory داخل المكون الإضافي rad. مرة أخرى ، يجب أن يتطابق اسم الملف مع ارتباط البرنامج المساعد الخاص بك.
rad-plugin.po
بعد الحفظ ، أدخل المسار النسبي للدليل حيث ستعيش ملفات الترجمة الخاصة بك. في هذا السيناريو ، اللغات .

الكلمات الدالة
حدد علامة التبويب " مصادر الكلمات الرئيسية ". انقر فوق الرمز + لإضافة أسماء الوظائف المناسبة.

ورقة الغش
__ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x
بعد ذلك ، يمكنك النقر فوق "موافق" ثم "ملف"> "حفظ" .
سوف يقوم Poedit بحفظ كل من ملف .mo و .po. يمكنك إنشاء ملف .pot عن طريق نسخ ملف .po وإضافة ملحق .pot. يمكن للمستخدمين الدوليين استخدام ملف .pot النموذجي لترجمة السلاسل إلى لغتهم.
تدويل الموضوع الخاص بك
عملية تدويل السمة الخاصة بك مطابقة عمليا لـ I18N للمكونات الإضافية. سنبدأ بالتحقق من رأس الموضوع وننتهي بإنشاء ملف POT آخر.
رأس الموضوع
تحقق مرة أخرى من رأس السمة الخاصة بك للتأكد من تعيين مجال النص ومسار المجال.
مثال رأس الموضوع
/* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */
تحميل المجال النصي
الخطوة التالية هي تحميل مجال نصي في ملف jobs.php الخاص بقالبك هذه المرة.
load_theme_textdomain ()
load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );
لكي يتم تحميل هذه الملفات ، يجب عليك تسجيلها باستخدام الإجراء after_setup_theme.
add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }
تدقيق السلاسل
حان الوقت لتدقيق السلاسل الأخرى! يجب أن تكون على دراية بوظائف الترجمة الأساسية في هذه المرحلة.
دعونا نلقي نظرة على بعض الترجمات الأكثر تعقيدًا.
العناصر النائبة
لن يتم ترجمة متغيرات PHP مثل المثال أدناه بشكل صحيح دون استخدام العناصر النائبة.
echo "We added $count rad points.";
printf () و sprintf ()
تستخدم هذه الوظائف عناصر نائبة مثل ٪ s ، أو ٪ d للأعداد الصحيحة ، لإقحام سلسلة نصية ذات محتوى ديناميكي.
مثال موضوع راد
/* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );
صيغ الجمع
يمكن للوظيفة _n()
التعامل مع ترجمات سلسلة أكثر تعقيدًا مثل صيغ الجمع ، ولكن لا يوصى بها بسبب قيودها داخل برامج الترجمة. بدلاً من ذلك ، يمكنك كتابة عبارة if بسيطة للتمييز بين كلمات المفرد والجمع.
مثال البرنامج المساعد راد
If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }
إنشاء ملف القدر
عملية إنشاء ملفات POT الخاصة بالسمة هي نفسها عملية إنشاء ملفات POT للمكوِّن الإضافي. استكشف بعض الطرق أدناه.
سطر الأوامر
باستخدام WordPress Trunk وتثبيت حزمة gettext GNU ، يمكنك تنفيذ هذه الخطوة بسهولة عن طريق تشغيل البرنامج النصي makepot.php في سطر الأوامر.
افتح سطر الأوامر وانتقل إلى دليل أدوات I18N.
cd wpdev/tools/i18n/
يجب أن يبدو النص كما يلي:
php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot
سيقوم البرنامج النصي بعمله وسينتهي الملف النهائي ، rad-theme.pot ، في الدليل الحالي.
مهام Grunt
هناك طريقة أخرى لإنشاء ملف POT وهي تشغيل مهام Grunt باستخدام grunt-wp-i18n أو grunt-pot. يمكن لمتسابقي المهام مثل Grunt أتمتة الكثير من المهام الشاقة ، مثل إنشاء ملفات POT.
لإنشاء ملف POT الخاص بك ، تأكد من تثبيت node.js أولاً. بعد ذلك ، قم بتثبيت Grunt في دليل اللغة الخاص بك عبر سطر الأوامر ، وانطلق بعيدًا. الآن ، يمكنك تشغيل أوامر I18N هذه بسرعة وإنشاء ملف الترجمة الخاص بك دون ترك سطر الأوامر المريح.
جافا سكريبت I18N
إذا كنت مطورًا حديثًا أو مطورًا للمكونات الإضافية ، فمن المحتمل أنك تستخدم JavaScript للتعامل مع بعض مكونات مشروعك. wp_localize_script هي وظيفة فعالة لاستخراج بيانات PHP لتزويدها بنصوصك ، وهي الطريقة الوحيدة لترجمة JavaScript داخل WordPress.
WP_LOCALIZE_SCRIPT ()
ستسمح لنا هذه الوظيفة بترجمة النصوص من جانب الخادم في PHP وتوفير سلاسل نصية ككائن JavaScript إلى البرنامج النصي.
wp_localize_script( $handle, $name, $data );
المعلمات
- التعامل مع البرنامج النصي - يجب أن يكون التعامل مع البيانات متاحًا لـ (مطلوب - يحتاج إلى مطابقة مقبض البرنامج النصي لهذه البيانات ، انظر المثال أدناه)
- اسم $ - اسم العنصر الذي يحتوي على البيانات (مطلوب - يجب أن يكون فريدًا)
- بيانات $ - مجموعة من البيانات لتمريرها إلى البرنامج النصي (مطلوب) .
مثال على PLUGIN RAD
add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }
الوصول إلى البيانات في JAVASCRIPT
يُعد مقتطف الشفرة البسيط أدناه مثالاً على كيفية الوصول إلى هذه البيانات في ملف JavaScript الخاص بك.
alert( rad-I18n.message );
مصادر إضافية
- I18N لمطوري WordPress
- كتيب موضوع WordPress: التدويل
- دليل البرنامج المساعد WordPress: التدويل
- WordPress.tv: I18N
قم بتغليفه
تهانينا! لقد قمت للتو بإضفاء الطابع الدولي على المظهر و / أو المكون الإضافي الخاص بك ، مما جعله في متناول الأشخاص من جميع اللغات الأصلية للاستفادة منه. سواء تم توزيع مشروعك من خلال مستودع WordPress ، أو تم تطويره خصيصًا لموقع الويب الخاص بمؤسستك ، فهناك فقط جانب إيجابي لتدويل ملفاتك من البداية.
- اجعل مساهماتك مفتوحة المصدر متاحة للجميع.
- إنشاء محادثات مع عملاء جدد في الأسواق الخارجية.
- وفر الوقت وقلل من التحديثات الشاقة في المستقبل.
تدويل دائما.