المحتوى عن 'ترجمة'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 4 نتائج

  1. سنتحدث في هذا الدرس عن محتوى قائمة الأدوات في تطبيق مستندات جوجل. تحتوي هذه القائمة على بعض الخيارات والأدوات المفيدة منها التدقيق الإملائي والاستكشاف والكتابة بالصوت وتدوين الملاحظات في المفكرة والتفضيلات. التدقيق الإملائي يُستعمل هذا الخيار للبحث عن الأخطاء الإملائيَّة في المستند وتصحيحها. صراحةً، القاموس الذي يوفِّره التطبيق ليس ذو كفاءة عالية وقد تجد أنَّه يشير لبعض الكلمات على أنَّها خاطئة وهي صحيحة مثل إضافة حرف زائد للكلمة (الواو أو الفاء) لذا لا تعتمد كل الاعتماد عليه في تدقيق المستند. عندما يضع التطبيق خطًّا أحمرًا تحت كلمة صحيحة يمكنك الضغط عليها بالزر الأيمن واختيار "إضافة إلى القاموس الشخصي". توضح الصورة التالية إحدى الكلمات التي وُضِعَ تحتها خط باعتبارها خاطئة، والكلمة هي "فالتنبيه" لذا نضيفها إلى القاموس الشخصي. يمكن أيضًا اختيار "تجاهل الكل" أي التجاهل في كل مرة تُكتب فيها هذه الكلمة أو تصحيحها أينما وردت إلى الكلمة المقترحة. القاموس الشخصي هو قاموس محلي خاص بك يمكنك أن تضيف فيه جميع الكلمات التي تراها صحيحة وهو شبيهٌ بخيار "إضافة إلى القاموس" في التطبيقات المشابهة. يمكن الإطلاع على محتوى القاموس الشخصي وإضافة الكلمات الجديدة أو التي تختارها من قائمة أدوات ← القاموس الشخصي. مراجعة التعديلات المقترحة سبق وأن تحدثنا في الدرس السابق (كيفية المشاركة في كتابة وتعديل مستند باستعمال مستندات جوجل) عن هذا الخيار وهو عرض التعديلات التي أجراها الآخرون الذين يشاركونك المستند وقبولها أو رفضها والتعليق عليها. البحث عن كلمة أو شرح لها إذا كنت تكتب أو تقرأ حول أمر معين وأنت ضمن مستندات جوجل وصادفك مصطلح أو جملة تريد البحث عنها أو تعريفها ومعرفة الكلمة المرادفة لها فماذا تفعل؟ تنتقل بالتأكيد إلى أحد محركات البحث وتكتب العبارة ضمنه وتبحث عنها. توقف قليلًا فأنت في تطبيق مستندات جوجل ولدى شركة جوجل محرك بحث لذا لن تضطر إلى الانتقال إلى نافذة أو صفحة أخرى بعد الآن. وظيفة خيار "الاستكشاف" هو البحث عن العبارة المحدَّدة في محرك البحث جوجل، وبضغطة رز واحدة تُعرض النتائج في قائمة تظهر على الطرف الأيسر. يُبحث عن العبارة المطلوبة في الويب والصور وحساب درايف الخاص بك. هنالك تسهيل كبير للوصول إلى هذه الأداة وذلك من ثلاثة مواقع: أولها عبر أدوات ← استكشاف، ومن القائمة عند الضغط بالزر الأيمن بعد تحديد أي جملة، ومن مربع صغير موجود أسفل يسار النافذة. تقتصر وظيفة الخيار "تعريف" في قائمة الأدوات على البحث عن معنًى للكلمة المحدَّدة وتعريفها بالإضافة إلى البحث عن كلمات مرادفة لها. إظهار مخطط المستند وعدد كلماته يُستعمل الخيار "مخطط المستند" لعرض عناوين فقرات المستند بحيث يسهل التنقل بينها والوصول إلى عنوان معيَّن بسرعة، ويشبه إلى حد ما جدول المحتويات. تظهر قائمة بالعناوين عند الضغط على خيار "مخطط مستند" في الطرف الأيسر تشبه القائمة الموضحة بالصورة. يمكن معرفة بعض المعلومات عن المستند بمساعدة الخيار "عدد الكلمات" مثل عدد صفحات المستند، وعدد الكلمات، والأحرف مع المسافات، والأحرف دون مسافات. إن استعملت تطبيقات أوفيس (Microsoft office) أو ليبر أوفيس (LiberOffice) فإنَّ هذه المعلومات تُعرض ضمن شريطٍ في الأسفل. الكتابة بالصوت يوفر تطبيق مستندات جوجل خدمة الكتابة بالصوت الشبيهة بتلك الموجودة في الهواتف المحمولة ذات نظام آندرويد (Andriod). حقيقةً، تحوي خدمة الكتابة بالصوت في هذا التطبيق مزايا كثيرة، منها الأوامر الصوتيَّة، ولكنَّها متوافرة باللغة الإنجليزية فقط. يدعم جوجل اللغة العربيَّة الفصحى بالإضافة إلى لهجات بعض الدول العربيَّة وهي الجزائر والبحرين ومصر والأردن والكويت ولبنان والمغرب وعمان وفلسطين وقطر والسعودية وتونس والإمارات. حاول عندما تتحدث أن يكون الصوت واضحًا وخاليًا من التشويش وبعيدًا عن الضجيج وأن تكون سرعة التحدث معتدلة ولا تتحدث بعُجالة. تفحَّص الميكروفون قبل البدء وإن لم يعمل جيدًا جرب استعمال ميكروفون خارجي (إن كنت تستعمل هاتفك أو حاسوبًا محمولًا). دوِّن ملاحظاتك عبر مفكرة keep لا بدَّ وأنت تكتب مقالة ما أو بحثًا أو أي شيء أن تنبثق بعض الملاحظات التي لا ترغب أن تنشغل بها خوفًا من التشويش، أو تريد تدوينها بغية الرجوع إليها لاحقًا، أو بعض الأفكار التي لمعت في ذهنك وتريد إضافتها للمستند بعد حين لذا لا تخف إن صادفك ذلك ولا داعي لوضع أوراق الملاحظات بجانبك. يوفِّر مستندات جوجل خدمة استعمال تطبيق google keep الذي هو أحد تطبيقات جوجل ووظيفته هي حفظ الملاحظات ومزامنتها مع حسابك ثمَّ الرجوع إليها وتعديلها أو الإضافة عليها أينما كنت وفي أي وقتٍ تريد لذا وداعًا لورق الملاحظات (sticky note). هنا تأتي الكفاءة، إذ تُحفظ ملاحظاتك في keep وتُعرض أيضًا في مستندات جوجل عند الضغط على "مفكرة keep". توضح الصورة السابقة أنَّ الملاحظة الأولى والثانية مرتبطة بالمستند بينما الملاحظة الثالثة هي ملاحظة عامة أضيفت إلى keep مباشرةً. يمكن كتابة ملاحظة ثمَّ الرجوع إليها بعد فترة وإضافتها إلى المستند بالضغط على الخيارات ثمَّ "إضافة إلى المستند" لإدراجها في موقع المؤشر. ترجمة المستند إلى لغات أخرى لا يخفى على أي شخص يستعمل منتجات جوجل خدمات الترجمة التي تتيحها سواءً بطريقة مباشرة عبر موقع ترجمة جوجل (google translate) وتطبيقات الترجمة أو غير المباشرة مثل أداة الترجمة الموجودة في متصفح كروم أي الرسالة التي يسألك فيها إن كنت تريد ترجمة هذه الصفحة إلى لغتك أو لغة أخرى أو ترجمة المنشورات من لغة إلى أخرى على مواقع التواصل الاجتماعي تلقائيًّا. عند الضغط على "ترجمة مستند" تظهر رسالة تخبرك بإنشاء مستند جديد يحمل اسمًا ما وخيارًا في أسفله تختار منه اللغة التي تريد الترجمة إليها. لا يمكن الاعتماد على هذه الأداة لترجمة مستند إن كنت تود ترجمته ترجمة جيِّدة خالية من الأخطاء وتنقل مضمون المحتوى نقلًا صحيحًا. محرر النص البرمجي عند الضغط على "محرر النص البرمجي" تُفتح صفحة جديدة ثمَّ تنتقل إلى تطبيق Google Script لإنشاء مشروع جديدة عليه. إنَّ هذا التطبيق هو لغة سكربت مبني بالاعتماد على لغة جافا سكربت، وإذا أردت استعماله فلن تضطر لتثبيت أي شيء على حاسوبك وستستعمل متصفحك فقط لكتابة الأكواد وتشغيلها على خواديم جوجل. إنَّ تطبيق google script متعدِّد الجوانب والاستعمالات ويمكنك بوساطته: إضافة القوائم ومربعات الحوار والأشرطة الجانبيَّة. نشر المستندات بشكل مستقل أو عبر جوجل. التواصل والتفاعل مع مختلف خدمات جوجل. تصميم وتطوير إضافات ونشرهم. التفضيلات تحتوي التفضيلات على خيارات تسرِّع من أداء المستخدم أثناء الكتابة مثل استعمال علامات الاقتباس الذكيَّة واكتشاف الروابط وتعيين اتجاه الفقرة تلقائيًّا والبديل التلقائي الذي هو أهمها. أحيانًا تريد إدراج بعض الرموز أو الأسهم أو حتى كسر واحد مثلًا ولفعل ذلك تتوقف عن الكتابة وتدرج رمزًا أو معادلة وسيأخذ ذلك بعض الوقت؛ تأتي هنا الفائدة من خيار "البديل التلقائي" إذ يمكنك إدراج سلسلة من الأحرف والرموز وسيُستبدل بها رمزًا تختاره أنت تلقائيًّا مثل عند كتابة (c) فيستبدل بها الرمز © وهكذا. توجد خيارات استبدال افتراضيَّة ويمكنك أيضًا أن تضيف لها ما تشاء.
  2. يكون WooCommerce جاهزا بشكل افتراضي للترجمة عندما تقوم بتنصيبه في البداية. وكلّ ما تحتاجه هو ملف ترجمة للغة المرغوبة. هناك العديد من الطرق للقيام بالترجمة، في أغلب الحالات يمكنك المساهمة في الترجمة على translate.wordpress.org، أو إنشاء ترجمة مخصصة باستخدام ملحق Loco Translate الذي يُمكن اعتباره من أسهل الطرق للقيام بذلك. كما يمكن استخدام ملحق PoEdit للمستخدمين المتقدمين. وسنوضّح كلا الطريقتين في هذا الدرس. ضبط لغة ووردبريس قم بتحديد اللغة التي تريد أن يعمل بها ووردبريس بالذهاب إلى: Dashboard > Settings > General ثم قم بتغيير لغة الموقع Site Language. عند القيام بذلك سيُعرض المتجر بلغتك إذا كان ملف اللغة موجودًا. وبخلاف ذلك، يجب أن تقوم بإنشاء ملفات الترجمة للغة المرغوبة بنفسك، وكما سنوضّح أدناه. المساهمة في ترجمة ملحق WooCommerce الأساسي تتم ترجمة WooCommerce على GlotPress، فإذا كنت ترغب في المساهمة في ترجمة سلاسل نصية strings إلى لغتك أو تريد أن تبدأ بإنشاء ترجمة جديدة، قم بالتسجيل في WordPress.org واشرع في الترجمة. ترجمة WooCommerce إلى لغتك تتم إدارة عملية الترجمة من قبل الفرق على translate.wordpress.org، حيث تترجم على هذا الموقع الإصدارات الثابتة وإصدارات التطوير من WooCommerce، ويمكن أن يساهم الجميع في ذلك. عندما تقوم بتنصيب WooCommerce أو تحديثه، سيبحث ووردبريس عن ملف ترجمة بلغتك مكتمل 100% وتنزيله تلقائيًا. علمًا أنّه يمكنك تنزيل الملفات غير المكتملة 100% يدويًا. ونحن نحث دائمًا على المساهمة في إكمال ملف الترجمة 100% لكي يستفيد منه جميع المستخدمين. إذا كنت مبتدئًا بالترجمة، ألقِ نظرة على دليل المترجمين لتبدأ الترجمة. تنزيل ملفات الترجمة من translate.wordpress.org يدويا قم بتنزيل ملحق Loco Translate. هذا الملحق مجاني ويمكنك أيضًا إضافته مباشرة من لوحة تحكم ووردبريس من: إضافات Plugins > إضافة جديد Add New بعد أن تقوم بتنزيل الملحق وتثبيته، سيتم إنشاء قائمة "Loco Translate" جديدة بالإضافة إلى قسمين فرعيين. سيعرض قسم "Manage Translation"بشكل افتراضي قائمة قوالبك وملحقاتك بالإضافة إلى جميع الترجمات المتوفرة لها: بإمكانك إضافة لغة جديدة إلى القالب أو الملحق بسهولة باستخدام رابط Add New Language: بعد ذلك اختر لغة لإضافتها إلى القائمة، أو قم بإدخال رمز ISO للغة (مثل fr_FR ،en_US، إلخ)، ثم اختر المجلد الذي تريد حفظ ملفات الترجمة فيه وانقر على Start Translating: ابدأ الترجمة ثم احفظها عند الانتهاء: إنشاء ترجمة مخصصة باستخدام PoEdit PoEdit هو أحد بدائل ملحق Loco Translate ولكنه أكثر تقدمًا. ويفضّل استخدام هذه الطريقة من طرف المستخدمين والمترجمين المتقدمين فقط والذين يرغبون في المساهمة في ترجمة WooCommerce الأساسي. يأتي WooCommerce مع ملفي POT يمكن تصديرهما إلى PoEdit لترجمتهما. وقد تم تقسيم هذه الملفات إلى قسمين لجعل الواجهة الأمامية frontend أكثر كفاءة. woocommerce.pot: يحتوي هذا الملف على السلاسل النصية الخاصة بالواجهة الأمامية. woocommerce-admin.pot: يحتوي على السلاسل النصية الخاصة بالإدارة. يتم ترجمة هذه الملفات بشكل منفصل. ولكي تبدأ الترجمة، قم بفتح PoEdit واذهب إلى: File > New catalog from POT file بعد ذلك اختر إما woocommerce.pot أو woocommerce-admin.pot، وسيقوم PoEdit بعرض نافذة تفاصيل الترجمة: قم بإدخال اسمك والتفاصيل لكي يتمكّن بقية المترجمين من معرفتك، ثم انقر على OK. سوف يطلب منك حفظ ملف .po قم بتسميته استنادًا إلى اللغة التي تترجم إليها. على سبيل المثال سيتم حفظ ملف الترجمة إلى لغة GB (الإنجليزية البريطانية) باسم woocommerce-en_GB.po و woocommerce-admin-en_GB.po على التوالي. بعد ذلك سيتم عرض السلاسل النصية: يمكنك حفظ السلاسل النصية بعد ترجمتها، وسيتم توليد ملف .mo تلقائيًا. كما بإمكانك تحديث ملف po. بفتحه ثم الذهاب إلى: Catalog > Update from POT file اختر الملف وسيتم تحديثه وفقًا لذلك. ترقية upgrade الترجمة بشكل آمن يحتفظ WooCommerce بملفات الترجمة في woocommerce/i18n/languages، وهذه الملفات تكون مؤمّنة خلال تحديثات الملحق. مع ذلك، احذر من أن يتم استبدال هذه الملفات بملفات الترجمة المكتملة 100% عند تنزيلها من translate.wordpress.org. بإمكانك استخدام هذه الشيفرة لرفع الترجمة المخصصة المخزونة في مكان آخر. add_filter( 'load_textdomain_mofile', 'load_custom_plugin_translation_file', 10, 2 ); /* * Replace 'textdomain' with your plugin's textdomain. e.g. 'woocommerce'. * File to be named, for example, yourtranslationfile-en_GB.mo * File to be placed, for example, wp-content/lanaguages/textdomain/yourtranslationfile-en_GB.mo */ function load_custom_plugin_translation_file( $mofile, $domain ) { if ( 'textdomain' === $domain ) { $mofile = WP_LANG_DIR . '/textdomain/yourtranslationfile-' . get_locale() . '.mo'; } return $mofile; } ترجمة النصوص بدون ملف ترجمة ترجمة أو استبدال نص افتراضي بإمكانك الاستعانة بملحق ?Say What إذا كنت ترغب في ترجمة أو تغيير بعض الكلمات فقط دون تحرير ملف PO الخاص بقالب ووردبريس. وهذا الأمر لا يتطلب شيفرة مخصصة. عندما تقوم بتفعيل الملحق سيُطلب منك: Original String (النص الأصلي): وهو النص الذي تريد ترجمته. اعرض شيفرة المصدر للملحق لمعرفة النص بالضبط. Text domain (نطاق النص): woocommerce. النص الذي تريد عرضه بدلا من النص الأصلي. ترجمة -وبتصرّف- للدرس (Translating WooCommerce (Localization.
  3. كل يوم ينمو ووردبريس ويتطور أكثر فأكثر وفي جميع الدول العالم الناطقة باللغة الإنجليزية وغيرها، وأغلب البرمجة في ووردبريس تتم باللغة الإنجليزية بالإضافة إلى أغلب الإضافات والقوالب تكتب بسلاسل نصية باللغة الإنجليزية على الرغم من أن أكثر من نصف مستخدميه لغتهم الأصلية ليست الإنجليزية. هذا المقال، تعزيز للمقال الموجود مسبقا على أكاديمية حسوب، حول دليل المطور لتهيئة إضافات ووردبريس للترجمة. وهذا هو السبب الذي جعلنا نشهد على المدى العقد الماضي المزيد من المناقشات لدعم التدويل التي ستجعل ووردبريس يدعم جميع اللغات الأخرى، وهذا سيكون ضروريا لو كنت تعمل على إضافات أو قوالب عالمية الانتشار. يجب علينا القيام بثلاثة خطوات حتى نتمكن من ترجمة السلاسل النصية لعناصر الواجهة: اختر، صرّح، و استخدم "مجال النص".استخدم وظائف مناسبة لسلاسلك النصية ومجال النص المختار.سيسمح لك هذا بإنشاء ملفات الترجمة.بفضل ملفات الترجمة هذه، ستسمح للناس بترجمة قوالبك و إضافاتك. ما هو "مجال النص" ؟مجال النص هو "ترجمة مساحة الأسماء" (translation namespace) لإضافاتك أو ثيماتك وهي طريقة لوردبريس لفصل قائمة من "السلاسل النصية لترجمتها" من بقية السلاسل النصية. وتكمن أهمية مجال النص في أن بعض السلاسل النصية قد تعني معاني كثيرة في الإضافات والقوالب، فمثلا كلمة "!Let’s go" قد تعني "Create a membership account" في سياق وقد تعني "Start the survey" في سياق آخر. لذلك بعد تعريف مجال النص، واستخدامه مع "gettext" أو مع دوال الترجمة التي سوف نقوم بشرحها فيما بعد. (إن مشروع gettext جزء أساسي من طريقة عمل نظام الترجمة في الووردبريس) إذا أردت أن تضع مجال النص في إضافتك أو في قالبك في الجزء العلوي للتعليقات الموجود في ملف style.css للقوالب أو في ملف PHP الرئيسي لإضافتك. فسيكون مشابهًا لهذا بالنسبة للقوالب: <?php /* Plugin Name: Pretend Plugin [Other comment-block information goes here] Text Domain: wpshout */أما للقوالب فسيكون مشابهًا لهذا: /* Theme Name: Pretend Theme [Other comment-block information goes here] Text Domain: wpshout */دوال Gettext: أبقِ ()__ و ()e_ و ()x_ و ()n_ صحيحةلجعل النصوص الخاصة بك قابلة للترجمة، تحتاج إلى تمرير دالة سوف تقوم باستبدال "!Let’s go" مع ترجمتها باللغة الإسبانية أو العربية أو الفرنسية أو غيرها، ولتسهيل هذا الأمر، يقوم ووردبريس بإعطاء أسماء قصيرة جدا للدوال التي تقوم بهذه الوظيفة. الدالة ()__أعتقد أن هذه الدالة هي الدالة الأهم، فلقد حصلت على أكثر اسم مبهم وغريب. لكن هدفها الرئيسي هو السماح لجميع السلاسل النصية بأن تترجم إلى لغة أخرى إذا كان يجب ذلك. وتُستخدم هذه الدالة مع معاملين الأول للسلسلة النصية والثاني لمجال النص، على سبيل المثال: echo __( 'WPShout is a great WordPress site!', 'wpshout' );الطباعة الذاتية بواسطة () e_الدالة الأولى ستقوم بإرجاع نص فقط ويجب عليك طباعة (عرض) النص بنفسك، فإذا كان هذا يزعجك فيمكنك استخدام ()e_ فهي مثل ()__ echo . ستقوم هذه الدالة باختصار كتابة بعض الأحرف، لكنها لن تقوم بأي شيئ آخر، وهذا مثال تطبيقي على استخدام هذه الدالة: _e( 'WPShout is a great WordPress site!', 'wpshout' );والآن سنبدأ بالتعامل مع الجوانب الدقيقة للترجمة. توفير نص للشرح بواسطة ()x_في بعض الأحيان كلمة أو جملة تكون مبهمة وصعبة الترجمة فقد تعني العديد من المعاني، فمثلا كلمة "post" قد تعني اسما مثل "مشاركة" أو "تدوينة" وقد تعني فعلا مثل "نشر" (to post - to publish). على عكس الدالتين السابقتين، يمكنك بواسطة ()x_ وضع نص لشرح الكلمة أو الجملة مثل المثال التالي: _x( 'Post', 'verb, as in "to publish"', 'wpshout' );النص الأوسط لن يظهر للمستخدم، لكنه سيظهر للمترجم حتى يفهم النص. (يذكر أنه توجد دالة ()ex_ و التي تجمع ما بين e_ و x_). الجمع بواسطة ()n_من المشاكل التي قد تواجهها في الترجمة هو الجمع. ففي اللغة الإنجليزية، "I have 1 Comment" (أنا أملك 1 تعليق) أو "I have 3 Comments" (أنا أملك 3 تعليقات)، لأجل معالجة مشكلة جمع كلمة تعليق، ووردبريس يوفر لك دالة ()n_ التي ستقوم بمعالجة الفرق بين الإثنين. في العادة، عندما تستخدم دالة ()n_ سوف تحتاج إلى استدعاء دالة الكتابة ()printf. (أو sprintf التي تقوم بإرجاع سلسلة نصية على عكس printf التي تقوم بطباعة النص). وهذه الدوال ستقوم باستبدال قيمة في سلسلة نصية مع قيمة تم تمريرها لهم. لتفهم أكثر أنظر للكود أدناه: printf( _n( 'One comment', '%s comments', $comments, 'wpshout' ), $comments );ستلاحظ أننا استخدمنا قيمة عددية مسندة إلى متغير comments$ مرتين. نفترض أن comments$ تمتلك قيمة "3". في المرة الأولى استخدمنا comments$ مع n__ لتحديد هل سنستخدم الجمع أو لا، وبما أن 3 أكبر من 1 سوف يختار " s% comments" بدلا من "One comment". أما في المرة الثانية فاستخدمناها مع printf لوضع الرقم في السلسلة النصية، عن طريق استبدال s% بـ 3 والتي هي قيمة المتغير comments$، لتكون الجملة الكاملة المطبوعة هي "3 comments". دوال Gettext أخرىسوف نقوم بشرح جميع الدوال المهمة والأساسية، وهذا لا يعني أنه لا توجد دوال أخرى جديرة بالاهتمام: ()__esc_attr: هذه الدالة تقوم بنفس وظيفة ()__ لكنها سوف تراعي ()esc_attr (سمة الخروج للـ HTML) لدواعي السلامة. (يوجد أيضا دالة ()esc_attr_e و دالة ()esc_attr_x).()__esc_html: نفس الشيء مع هذه الدالة، ففي سبيل السلامة يمكنك الجمع بين سمة الخروج للـ HTML وبين ترجمتك. (و بالطبع توجد دالة ()esc_html_e و دالة ()esc_html_x). ()n_noop_ : هذه الدالة تقوم بنفس وظيفة دالة ()n_ لكن بدون عمليات.تسليم الترجمة إلى جافا سكريبت عن طريق دالة ()wp_localize_scriptبسبب أن الترجمات في الووردبريس يتم التعامل معها عن طريق PHP، سوف تحتاج إلى تمرير السلاسل النصية لاستخدمها مع الجافا سكريبت، ويمكنك فعل هذا عن طريق دالة ()wp_localize_script. هذه الدالة مفيدة للغاية وتستخدم كثيرا خارج الترجمة، لأنها تمكنك من تمرير أية قيمة أو متغير من PHP إلى جافا سكريبت. لكن الاستخدام الأساسي لها للترجمة ولذلك سميت باسمها. وهذا هو مثال لطريقة استخدام هذه الدالة: wp_localize_script( 'wpshout-js', 'strings', array( 'hello' => __( 'Hello!', 'wpshout' ); ) );وللوصول إلى هذه القيم عن طريق ووردبريس، فستقوم بشيء مثل: alert(strings.hello);تمتلك دالة ()wp_localize_script ثلاثة معاملات: المعرّف (handle) الذي استخدمناه في ()wp_enqueue_script (أو ()wp_register_script) للجافا سكريبت التي نقوم بترجمتها.اسم كائن جافا سكريبت الذي نريد أن ترتبط به ترجمتنا.مصفوفة (array) مترابطة للترجمات، مع مؤشر index أو اسم خاص كمفتاح و قيمة كسلسلة نصية ابتدائية لاستخدمها.يتم التعامل مع الترجمة نفسها عن طريق نفس دوال PHP التي شرحناها في الجزء السابق من الدرس. ما هي ملفات POT ،PO و MO ؟حتى الأن كنا نتحدث عن البرمجة باستخدام PHP، لكن هنالك جزء ثاني لا يعتمد على الـ PHP، وهذا الجزء هو الذي يقوم بإنشاء ملفات الترجمة. يعتبر هذا الجزء صعبا بالنسبة لي، فببطء يقوم نظام ووردبريس ببناء حلول أكثر قوة و أكثر إفادة للتعامل مع العمل الحالي للترجمة (أنظر إلى GlotPress ،translate.wordpress.org و the Polyglot Make blog) لكن يبقى هذا الجزء صعبا للمستخدم ذا الخبرة المتوسطة، على الرغم من أننا سنقوم بشرح أساسياته لكننا لن نخوض في التفاصيل، بالنسبة لي اعتدت على استخدام Poedit كمحرر للترجمة. مهما كانت الطريقة الذي اعتدت بها أن تقوم بإنشاء وتعديل و قراءة ملفات الترجمة، يوجد ثلاثة أنواع أساسية من ملفات الترجمة: ملفات pot.: الملفات الرئيسية للإضافات والقوالب، والتي قامت بجمع جميع السلاسل النصية من الدوال ()s__ وغيرها.ملفات po.: هذه الملفات عبارة عن نص ترجمة السلاسل النصية الإنجليزية إلى اللغة المستهدفة، نادرا ما سوف تقوم بتعديل واحدة مباشرة (لأن الصيغة بها الكثير من الكلمات والرموز المبهمة والغريبة) لكن يمكنك فتحها باستخدام محرر نصوص والقيام بتعديلات سريعة للترجمة.ملفات mo.: الترجمة النهائية من اللغة الإنجليزية إلى اللغة المستهدفة، وهذه الملفات عبارة عن ملفات ثنائية (binary files) تستخدم وتقرأ عن طريق ووردبريس، لذلك عندما تقوم بفتحها مع محرر النصوص لن تستطيع معالجتها، لذا إذا أردت القيام بذلك يجب عليك العودة إلى ملفات PO و التعديل عليها و إعادة إنشاء ملفات MO.كما أخبرتك سابقا، هذا هو الجزء الأصعب بالنسبة لي، لكن إذا كان إضافتك أو قالبك في مستودعات WordPress.org، سوف تجد ملفات pot. جاهزة بالنسبة لك وسيفهم مترجميك كيف يهتمون بالباقي. إذا أردت المزيد من التفاصيل أو الأدوات، قم بزيارة صفحة Translating WordPress. ماذا تعلمنا حول تدويل كود ووردبريسلقد قمنا في هذا الدرس بتغطية الأجزاء الثلاثة الرئيسية لجعل كود ووردبريس الخاص بك جاهزا للترجمة: اختر مجال النص، استخدم دوال gettext ومن ثم أحصل على ملف POT لصنع ملفات الترجمة PO و MO. الخطوات سهلة و قابلة للتنفيذ، ولها تأثير كبير للناطقين بغير اللغة الإنجليزية، أو أولئك الذين يحسون براحة أكبر عند استخدامهم لغة أخرى تعلموها مؤخرا. ترجمة -وبتصرف- للمقال Making plugins and themes translation ready لصاحبه: David Hayes.
  4. توجد الكثير من المقالات التّتي تتحدّث عن ترجمة إضافات Plugins ووردبريس، إلّا أنّ القليل منها يتطرّق لتفاصيل عمليّة التّرجمة عندما تكون مهمَّة يوميّة. مالّذي يحدُث عند تغيير جزء من الشّفرة البرمجيّة Code؟ مالّذي يحدُث عند إضافة سلاسل محارف Strings جديدة؟ مالّذي يحدُث عند تحديث إضافة إلى إصدار جديد؟ هذه هي نوعيّة الأسئلة الّتي سيُجيب عليها هذا المقال. سنتطرَّق، خطوة بخطوة، كيف نعمل من أجل أن تكون الإضافات الجديدة أو المُحدَّثة جاهزةً للتّرجمة إلى أيّ لغة. يتوفّر ووردبريس بلغات عدّة: تُضَمَّن في نظام ووردبريس لإدارة المحتوى قابليّةُ الاستخدام بأيّ لغة، على الرّغم من أنّ لغة الواجهة الافتراضيّة هي الإنجليزية الأميركية (التّرميز en_US). إنشاء إضافةأوّل ما يجب تنفيذه هو إنشاء إضافة. سننشئ إضافةً للتّطبيق عليها. يُمكنك متابعة درس مُقدّمة إلى برمجة إضافات Wordpress للمزيد حول برمجة إضافات ووردبريس. ستعمل الإضافة على كتابة نصّ تحفيزي في التّرويسة Header. أولًا أنشئ مجلَّدًا جديدًا ضمن مجلَّد الإضافات وسمِّه wp-admin-motivation. ثمّ أنشئ ملفًّا ضمن هذا المجلّد وسمِّه wp-admin-motivation.php. في ما يلي الشّفرة الّتي يجب وضعها في الملفّ: <?php /* Plugin Name: Admin Motivation Plugin URI: http://danielpataki.com Description: Shows motivational messages in the admoin bar Author: Daniel Pataki Version: 1.0 Author URI: http://danielpataki.com Text Domain: wp-admin-motivation */ function get_motivation_text() { $motivation = array( 'You are awesome', 'This website is boss', 'You look great today', 'Your earlobes are well rounded, good job!' ); shuffle( $motivation ); return $motivation[0]; } add_action( 'admin_notices', 'show_motivation_text' ); function show_motivation_text() { $text = get_motivation_text(); echo "<p id='wp-admin-motivation'>$text</p>"; } add_action( 'admin_enqueue_scripts', 'motivation_assets' ); function motivation_assets($hook) { wp_enqueue_style( 'motivation-styles', plugin_dir_url( __FILE__ ) . 'styles.css' ); }تخلِط الدّالّة الأولى ()get_motivation_text مصفوفة Array من العبارات التّحفيزيّة باستخدام دالّة shuffle الموجودة في PHP، ثمّ بعد الخلط تختار العبارة الأولى من المصفوفة. يُمكن عدّ دالّة ()get_motivation_text وسيلةً لتوزيع العبارات التّحفيزيّة عشوائيًّا. نربُط في الخطوة التّاليّة بين دالّة ()show_motivation_text والخطّاف Hook المسمَّى admin_notices. تحصُل دالّة ()show_motivation_text على عبارة تحفيزيّة عشوائيّة عن طريق ()get_motivation_text ثمّ تطبع العبارة داخل فقرة ذات معرّف wp-admin-motivation. تكون العبارة التّحفيزيّة، بالوصول إلى هذه النّقطة، مرئيّة؛ ولكنّنا سنغيّر موضعها لتكون إلى جانب تبويب خيّارات/مساعدة (Options/help). نستخدم CSS لهذا الغرض. تكتفي بعض الإضافات بوضع بضعة أسطر CSS في التّرويسة، إلّا أنّ الطّريقة الصّحيحة للتّعامل مع CSS هيّ إدراج الأسطُر ضمن الطّابور Queue؛ وذلك عن طريق ربط دالّة ()motivation_assets بالخطّاف admin_enqueue_scripts وإدراج CSS في الطّابور هناك. يحدّد النّمط مواضع النّصّ مع أخذ اتّجاه الكتابة من اليمين إلى اليسار Right-to-left, RTL في الحسبان. #wp-admin-motivation { float: right; padding-right: 15px; padding-top: 7px; margin: 0; font-size: 11px; } .rtl #wp-admin-motivation { float: left; padding-left: 15px; }الإضافة جاهزة الآن للعمل. المشكل الوحيد هو أنّ العبارات التّحفيزيّة تستخدم الإنجليزيّة فقط. إن أردت استخدام لغة أخرى فسيتطلّب الأمر إنشاء إضافة مماثلة وإبدال العبارات الإنجليزيّة بعبارات اللّغة المستهدفة. تخيّل أنّك تُريد استهداف عشرين لغةً، يعني هذا أنّك ستحتاج لعشرين إضافة لا يوجد فرق بينها سوى في العبارات المعروضة. الكثير من الجهد المهدور، لا بدّ من وجود وسيلة أخرى. تدويل Internationalizing إضافةيهدف تدويل الإضافات في الأساس إلى جعلها جاهزةً لتُترجَم. يتطلّب التّدويل تغليفَ سلاسل المحارف Strings في دوالّ خاصّة تُسخدَم لتحميل التّرجمات الصّحيحة. توجد العديد من دوالّ التّدويل إلّا أنّنا سنأخذ فقط واحدةً منها، وهي دالّة ()__، ونترك البقيّة إلى أن نفهم المثال. تأخذ الدّالّة ()__ معطييْن: النّص الّذي نُريد ترجمته ونطاق النّصّ Text domain. في ما يلي الصّيغة العامّة لاستخدام هذه الدّالّة: <?php $greeting = __( 'Hello There!', 'text-domain' ); ?>نحصُل بعد استخدام دالّة ()__ على ترجمة النّصّ إن كانت موجودة، وإلّا فإنّ الدّالّة تُعيد النّصّ الأصليّ. تستخدم الدّالّةُ اللّغةَ الحاليّة لتحديد التّرجمة المطلوبة. يُمكنك الانتقال بين لغات ووردبريس في الإعدادات. تُطبَّق اللّغة المُختارة في الإعدادات على جميع التّرجمات. نأتي الآن لنطاق النّصّ، حتّى تكتمل عندنا الصّورة. نطاق النّصّ هو طريقة لتجميع التّرجمات مع بعض. لدى القالب Theme الّذي تستخدمه نطاق نصّ خاصّ به، نفس الشّيء بالنّسبة لجميع الإضافات. تجعل نطاقات النّصوص من التّفريق بين التّرجمات عمليّةً أيسر. يجب أن يكون نطاق النّصّ، بالنّسبة للإضافات، مطابقًا لاسم مجلّد الإضافة. يعني هذا، في مثالنا، أنّ نطاق النّصّ يجب أن يكون wp-admin-motivation. كلّ ما ياوجّب علينا فعله، من أجل تدويل الإضافة، هو تغليف سلاسل المحارف بالدّالّة ()__. $motivation = array( __( 'You are awesome', 'wp-admin-motivation'), __( 'This website is boss', 'wp-admin-motivation'), __( 'You look great today', 'wp-admin-motivation'), __( 'Your earlobes are well rounded, good job!, 'wp-admin-motivation')' );تنفيذ التّرجماتجعلنا في الخطوة السّابقة سلاسل المحارف جاهزةً للتّرجمة، لكن لحدّ الآن لا توجد أيّ ترجمات على الموقع. يجب أن نخبر ووردبريس أين توجد ترجمات الإضافة. الطّريقة المعياريّة لذلك هي إنشاء مجلّد فرعيّ باسم lang ضمن مجلَّد الإضافة. أنشئ مجلّد lang الآن وأضف الشّفرة التّاليّة في الملفّ الرّئيس للإضافة حتى يعرف ووردبريس أين توجد التّرجمات: add_action('plugins_loaded', 'wan_load_textdomain'); function wan_load_textdomain() { load_plugin_textdomain( 'wp-admin-motivation', false, dirname( plugin_basename(__FILE__) ) . '/lang/' );تعدّ دالة ()load_plugin_textdomain أساسيّةً هنا ويجب أن تُستدعى من دالّة مربوطة بالخطّاف plugins_loaded. أوّل معطى لدالّة ()load_plugin_textdomain هو اسم نطاق النّصّ الّذي تحدّثنا عنه سابقًا، الثّاني مهجور Deprecated، والثّالث هو مجلّّد اللّغة. ستكون أسماء ملفّات التّرجمات على صيغة plugin_name-locale.mo. حيثُ plugin_name اسم الإضافة وlocale المحلّيّة. سنرى في ما بعد كيفيّة إنشاء هذه التّرجمات. تذكّر، في الوقت الحاليّ، أنّك يجب أن تضع ملفّات التّرجمات هنا. ملحوظة: المحليّة Locale هي مجموعة من المُعطيات تحدّد لغة المستخدم، دولته، وأيّ تفضيلات خاصّة قد يودّ المستخدم رؤيتها في لغة الواجهة. سنختار ترجمة العبارات التّحفيزيّة الموجودة في الإضافة إلى اللّغة العربيّة؛ لذا سيكون المفّ باسم wp-admin-motivation-ar.mo. بالوصول إلى هذه النّقطة سيعمل كلّ شيء بالطريقة المرجوَّة، ينقُصُنا فقط إنشاء التّرجمات. إنشاء التّرجماتتوجد طُرُق متعدّدة لإنشاء ترجمات إلّا أنّ النّتيجة في النّهاية متطابقة. ستحصُل على ملفّين، أحدهما بامتداد po. والآخر بامتداد mo. الأوّل يُمكن للأشخاص قراءته، ويُمكنك فتحه بأيّ محرّر نصوص والتّعديل عليه. أمّا الملفّ ذو الامتداد mo. فهو نتاج تحويل ملفّ po. إلى صيغة مقروءة بالنّسبة للآلة، ذات حجم أصغر بكثير إلّا أنّه لا يمكن للإنسان قراءتها. في ما يلي مثال على ملفّ PO غير مُترجَم. توجد في أعلى الملفّ معلومات أساسيّة عن التّرجمة، المترجِم والمشروع؛ تليها سلاسل محارف تُمكن ترجمتها متبوعة بأماكن التّرجمات المنتظَرة. msgid "" msgstr "" "Project-Id-Version: WP Admin Motivation 1.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-04-27 13:09+0100\n" "PO-Revision-Date: 2015-04-27 13:09+0100\n" "Last-Translator: Daniel Pataki <contact@tastique.org>\n" "Language-Team: Daniel Pataki <hello@danielpataki.com>\n" "Language: Hungarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: ..\n" #: ../wp-admin-motivation.php:20 msgid "You are awesome" msgstr "" #: ../wp-admin-motivation.php:21 msgid "This website is boss" msgstr "" #: ../wp-admin-motivation.php:22 msgid "You look great today" msgstr "" #: ../wp-admin-motivation.php:23 msgid "Your earlobes are well rounded, good job!" msgstr ""الصّيغة العامّة للأسطُر في ملفّ التّرجمة هي التّاليّة: #: مسار الملفّ الّذي توجد به السّلسلة:رقم السّطر حيثُ توجد السّلسلة msgid "السّلسة المطلوبة ترجمتها" msgstr "التّرجمة"قد تظنّ أنّ كون أماكن تواجد السّلاسل مذكورة مباشرةً بعد ذكر رقم السّطر الّذي تتواجد به يجعل من إنشاء وصيّانة ملفّات التّرجمة أمرًا شاقًّا. لهذا السّبب توجد أدوات مخصًّصة للمساعدة. تُساعد أدوات المدير Admin tools في توليد ملفّات po. للإضافات الموجودة في مستودع ووردبريس. كما يُمكن أيضًا إنشاء ملفّات po. عبر البرنامج الرّائع Poedit. نزّل Poedi وشغّله؛ انقُر على File (ملفّ) ثمّ New catalog (مسرَد جديد). أدخل المعلومات المطلوبة في النّافذة المنبثقة. لا تهتّم بطقم المحارف (Charset) وصيّغ الجمع (Plural forms)؛ سنكتفي الآن بالمعلومات الأساسيّة. انتقل إلى تبويب Sources paths (مسارات المصادر). يُخبر مربَّع Paths (المسارات) Poedit أين يجب عليه البحث عن السّلاسل القابلة للتّرجمة ذات العلاقة بالمسار القاعديّ (Base path). سنضع التّرجمات ضمن مجلَّد فرعيّ في الإضافة؛ يعني هذا أنّ لدينا خيّارين لإعداد المسارات في Poedit: ضبط المسار القاعديّ Base path على القيمة /.. (المجلَّد الأب) وإعطاء القيمة . (المجلَّد الحاليّ) لمربَّع المسارات Paths.ضبط قيمة المسار القاعديّ Base path على قيمة المجلَّد الحاليّ . وقيمة مربَّع المسارات Paths على المجلَّد الأب /...يُخبر الخيّار الأوّل Poedit أنّ الشّفرة البرمجيّة للإضافة موجودة في المجلَّد الأب لمجلَّد اللّغة lang؛ أي أنّ البرنامج سيذهب للمجلَّد الأب ويبحث في ذلك المجلَّد. أمّا الخيّار الثّاني فيقول إنّ المجلَّد الّذي يوجد به الملفّ الحاليّ هو مجلَّد اللّغة؛ وأنّ الملفّات الّتي يجب التّحقّق منها توجد في المجلَّد الأعلى، لذلك استخدمنا /.. في مربَّع المسارات Paths. سنعتمد في هذا الدّرس الخيّار الثّانيّ. الخطوة التّاليّة هي ضبط الكلمات المفتاحيّة في تبويب Sources keywords (الكلمات المفتاحيّة للمصادر). نحدّد في هذا التّبويب أسماء دوالّ التّرجمة المستخدَمة. في المثال هنا نحتاج فقط لإضافة دالّة __. في أغلب الحالات ستحتاج لإدراج دالتّيْن إلى ثلاث؛ راجع التّرجمة المتقدّمة أدناه. لم يبق إلّا الموافقة على البيانات المُدخَلة. سيطلُب منك البرنامج مكان حفظ الملفّ؛ اختر مسار المجلَّد lang إن كنت اعتمدت الخيّار الثّاني في إعداد المسارات أعلاه. سيبحث Poedit في ملفّات الإضافة ويعثُر على السّلاسل الجاهزة للتّرجمة. يُمكنك بعدها ترجمة هذه السّلاسل إلى اللّغة الّتي تُريد. احفَظ الملفّ بعد الانتهاء من التّرجمة وسيولّد Poedit ملفّ MO في مجلَّد lang. تجب إعادة تسميّة ملفّ MO (اسم الملفّ في الإعداد الافتراضيّ هو default.mo) ليوافق الصّيغة الّتي ناقشناها سابقًا؛ أي أن اسم الملفّ، في المثال لدينا، هو wp-admin-motivation-ar.mo. بالنّسبة لملفّ PO فلايهمّ اسمه كثيرًا، إلّا أنّ من الأفضل تسميّته بنفس الطّريقة لكي تعرف بسهولة أيّ ملفّ PO يوافق ملفّ MO إذا كانت توجد الكثير من الملفّات في مجلَّد اللّغات. ستظهر العبارات التّحفيزيّة باللّغة العربيّة؛ بعد وضع ملفّ اللّغة في مجلَّد اللّغات ضمن الإضافة وتفعيل اللّغة العربيّة في إعدادات ووردبريس. صيّانة التّرجماتيبدو تحديث التّرجمات صعبًا للوهلة الأولى، إلّا أنّه ليس كذلك. صحيحٌ أنّ ملفّ PO يحوي رقم السّطر الّذي توجد به السّلسلة المُترجمَة، لكن ووردبريس لا يعتمد على أرقام الأسطُر عند استخدام ملفّ PO. الهدف من استخدام الملفّ والسّكر الّذيْن توجد بهما سلسلة المحارف المُترجَمة هو مساعدة المترجِم بحيث يُمكن النّظر إلى مكان وجود العبارة ومن ثمّ ترجمتها حسب السّيّاق الّذي وردت فيه. لن تحتاج إلى ملفّات التّرجمة إن كانت التّعديلات الّتي تُجريها تقتصر على الشّفرة البرمجيّة الّتي توجد بها سلاسل المحارف الجاهزة للتّرجمة دون أن تعدّل على هذه الأخيرة. ما أفعله عادةً هو إنشاء ملفّ POT ثمّ أحدّثه في كلّ مرة أحدّث فيها الإضافة، حتى ولو لم تتغيَّر سلاسل المحارف. تُشبه ملفّات POT ملفّات PO؛ إلّا أنّها لا تحتوي على أيّ ترجمات، فكلّ ما تحتويه هو الجمل والعبارات الجاهزة للتّرجمة؛ أيّ أنّها قوالب فقط. تكون التّرجمات سهلة ما دام ملفّ القالب محدَّثًا ويحوي رقم السّطر الصّحيح لكلّ سلسلة محارف. إذا احتجت إلى تحديث ملفّ لغة فكلّ ما عليك فعله هو فتحه عن طريق Poedit ثمّ النّقر على أيقونة التّحديث Update وسيُشعرك البرنامج بالسّلاسل الجديدة والمُعدَّلة ويمكنك بعدها التّعديل عليها. قبول التّرجماتمن الأمور الّتي يحدُث فيها الارتباك كثيرًا، على الأقلّ هذا ما حدث لي أولَ وهلة، هو كيفيّة إنشاء ترجمات جديدة لإضافة. كيف يُمكنني إضافة ترجماتي الخاصّة؟ كنتُ أظنّ أنّ هذه العمليّة تحدُث آليًّا، لكنّها ليست كذلك. عندما يُعجَب أحدهم بإضافة فإنّه يترجمها إلى لغته باستخدام ملفّ POT المضمَّن في الإضافة ثمّ يُرسل التّرجمة (ملفّات MO وPO) إلى مطوّر الإضافة الّذي يضعها في ملفّ lang، يُنشئ إصدارًا جديدًا ويدفعها إلى مستودع ووردبريس. عندما يتلقّى مستخدم الإضافة التّحديث تظهر الإضافة بلغة واجهة ووردبريس لديه، إن كانت ضمن اللّغات الموجوة في ملفّ lang. أستضيف كلّ مستودعاتي على Github وهو ما يسهّل على المترجمين إرسال ملفّات التّرجمة لي باستخدام طلبات السّحب Pull requests. كلّ ما عليّ فعله بعدها هو الضّغط على زرّ وإنشاء إصدار جديد من مستودع ووردبريس. التّرجمات المتقدّمةتعرّفنا في ما سبق على طريقة ترجمة سلاسل محارف قاعديّة عن طريق دالّة ()__. توجد 14 دالة ترجمة في ووردبريس يُمكن استخدامها لتدقيق ضبط ترجماتك. على الأرجح لن تحتاج إلّا إلى 3 أو 4 منها. نبدأ بالأشهر من بينها. 1- ()__هذه هي الدّالّة الأساسيّة للتّرجمة. تأخذ سلسلة محارف وتُعيد التّرجمة إن كانت موجودة. 2- ()e_نفس عمل الدّالّة السّابقة تقريبًا، إلّا أنّها بدلًا من إرجاع التّرجمة تعرضها مباشرةً. 3- ()n_تتيح هذه الدّالة وسيلة أنيقة للتّعامل مع الجموع. تأخذ الدّالّة أربعة معطيات: صيغة المفرد، صيغة الجمع، العدد الّذي على أساسه ستعرض الصّيغة (صيغة المفرد أو الجمع) ونطاق النّصّ. في ما يلي مثال سريع: <?php $messages = get_message_count(); // الاستعمال المبَسَّط: لا تُظهر الدّالة العدد الفعليّ $text = _n( 'You have one message', 'You have lots of messages', $messages, 'my-message-app' ); // في طريقة الاستعمال هذه نُظهر العدد الفعليّ للرّسائل $text = sprintf( _n( 'You have one message', 'You have %s messages', $messages, 'my-message-app' ), $messages ) ?>في هذا المثال نحصُل على عدد الرّسائل ضمن متغيّر messages ثمّ نستخدم هذا المتغيّر في دالّة ()n_ الّتي تعتمد على قيمة المتغيّر لاختيّار سلسلة المحارف الّتي تعرضها (بصيغة المفرد أو الجمع). في طريقة الاستعمال المبسَّط للدّالة لا يظهر عدد الرّسائل ضمن سلسلة المحارف المعروضة حيثُ توجد عبارتان، الأولى للعرض إذا كانت قيمة messages مفردة وتُعرَض الثّانيّة في حالة الجمع. إذا أردنا عرض العدد نستخدم عبارة s% في المكان الّذي نُريد أن يُعرض فيه العدد. بالنّسبة لملفّ PO فينبغي أخذ اللّغة الّتي نريد التّرجمة إليها في الحسبان. في أغلب اللّغات الأوروبيّة لا توجد سوى صيغة واحدة للجمع: إذا كان المعدود أكبر من أو يُساوي اثنين يُعدّ جمعا، أي أنّ هناك حالتين فقط (واحدة للمفرَد والأخرى للجمع). في اللّغة العربيّة يتغيّر المعدود حسب العدد في ما مجموعه خمس صيّغ (مفرَد، مثنَّى وثلاث حالات بالنّسبة للجمع)، إضافةً للصّيغة الّتي يكون العدد فيها يُساوي صفرا (أيّ أنّ المجموع يُساوي ستة). لمن يُريد التّفصيل في المسألة فليراجع فصل العدد والمعدود في النّحو :). لأخذ هذه التّغييرات في الحسبان عند إنشاء ملفّ التّرجمة نُخبر Poedit بعدد صيّغ الجمع الموجودة لدينا، بالنّسبة للعربيّة: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5; قبل البدء في البحث عن سلاسل المحارف نُضيف الدّالة n_ في تبويب Sources keywords (الكلمات المفتاحيّة للمصادر) حتى يتعرّف عليها البرنامج؛ إضافةً للدّالّة __ السّابقة. ملحوظة: من المهمّ جدًّا كتابة الدّالّة بالصّيغة n:1,2_ الّتي تعني أنّ المُعطى الأوّل (الرّقم 1) يعبّر عن صيغة المفرد وأنّ المعطى الثّاني لصيغة الجمع. يمكننا الآن إنشاء ملفّ اللّغة وترجمة العبارات الواردة فيه مع أخذ الجمع بالحسبان. ملحوظة: أبقِ عبارة %s في التّرجمات الّتي تحتاج ذلك، أي الّتي يكون العدد فيها اثنان فما فوق. ستُبدَل هذه العبارة بالعدد الفعليّ أثناء تنفيذ البرنامج. مثلًا إذا كان العدد بين 3 و 10 (التّبويب الرّابع في الصّورة، الّذي يحمل العنوان Form 3) فيمكن أن تكون التّرجمة “توجد لديك 3 رسائل” أو “توجد لديك 8 رسائل”. القيمة (3 و 8) ستُعرف أثناء عمل الإضافة الّتي ستضعها مكان %s. 4- ()x_تهدف هذه الدّالّة إلى الوقاية من الخلط بين الكلمات مختلفة المعنى الّتي تُكتَب بنفس الطّريقة. مثلًا إذا كنت تستخدم كلمة pair بمعنى “زوج أشخاص” وبمعنى “ربط بجهاز بلوتوث” فيُمكن أن يشتبه المعنى. لمنع الاشتباه ولمساعدة المترجم على اختيّار العبارة المناسبة في لغته استخدم دالّة ()x_. _x( 'Pair', 'A pair of people', 'my-plugin-textomaind' ); _x( 'Pair', 'As in: pairing devices', 'my-plugin-textomaind' );5- ()ex و ()nxيُشبه عمل هاتيْن الدّالتيْن عمل دالّة ()x_ أعلاه. الفرق هو أنّ ()ex_ تعرض النّتيجة مباشرةً في حين أنّ nx_ تُضيف إمكانيّة تحديد صيغة للجمع. تخليص Escaping التّرجماتتتيح الدّوال السّتّ التّاليّة إمكانيّة تخليص التّرجمة من أجل الاستخدام الآمن في نصوص HTML (الثّلاث الأخيرة) أو خاصيّاته attributes (الثّلاث الأولى). ()esc_attr__()esc_attr_e()esc_attr_x()esc_html__()esc_html_e()esc_html_xترجمات Noopتسجّل دوالّ Noop سلاسل المحارف بصيغة الجمع في ملفّ POT دون أن تترجمها. يعود السّبب في ذلك إلى أنّ العدد غير معروف سلفًا، وهو ما يعني أنّنا سنحتاج لدالّة أخرى للحصول على العدد وبالتّالي اختيّار صيغة المعدود (الجمع). لهذا السّبب نستخدم دالّة Noop ثمّ نترجم القيمة الحقيقيّة لاحقًا بعد الحصول على العدد. راجع المقال التّالي للمزيد. تستخدم الدّوال التّاليّة لهذا الغرض: ()n_noop_()nx_noop_()translate_nooped_pluralترجمة Javascriptربّما ننساءل ماذا عن سلاسل المحارف الموجودة ضمن شفرة Javascript؟ يقدّم ووردبريس الحلّ عبر دالّة ()wp_localize_script. تأخذ هذه الدّالّة ثلاثة معطيات: مِقبض Handle (معرّف) السّكريبت الّذي نُريد ترجمته، اسم كائن Object للاستخدام داخل السّكريبت ومصفوفة التّرجمة. في ما يلي مثال على ترجمة سلاسل محارف ضمن Javascript: add_action( 'admin_enqueue_scripts', 'motivation_assets' ); function motivation_assets($hook) { wp_enqueue_script( 'motivation-scripts', plugin_dir_url( __FILE__ ) . 'scripts' ); wp_localize_script( 'motivation-scripts', 'wma', array( 'section_title' => __( 'Today's motivation', 'wp-admin-motivation' ) )); }بعد إضافة التّرجمات يُمكنك استخدامها في ملفّ Javascript المُسجَّل. يجب عليك استخدام اسم الكائن ومفاتيح مصفوفة التّرجمة: jQuery.html( "<h2>" + wma.section_title + "</h2>" );خاتمةيستخدم ملايين الأشخاص لغاتِهم للتّعامل مع ووردبريس، فلمَ لا تساعدهم في عمل نفس الشّيء مع منتجاتك؟ فلا جعل الإضافات جاهزة للتّرجمة أمر صعب ولا صيّانتها تُمثّل كبير إزعاج. يُساعد تجهيز سلاسل المحارف للتّرجمة وإنشاء ملفّات po وmo الجميع كما أنّه يزيد من جودة المنتج. ترجمة بتصرّف لمقال Everything You Need to Know About Translating WordPress Plugins لكاتبه Daniel Pataki.