it-swarm.asia

كيف أحصل على سلاسل مترجمة إلى Drupal.locale.strings؟

لذا أحاول استخدام وظيفة Drupal.t () في بعض أكواد جافا سكريبت المخصصة (في موضوعي).

كيف أحصل على السلاسل التي أحتاجها في كائن Drupal.locale.strings؟ أرى بعض السلاسل هناك ، ولكن بالطبع لا يمكن تحميل قاعدة البيانات بأكملها. ما هي أفضل طريقة لإضافتها؟ أود استخدام الدالة PHP t() بحيث يمكن تحرير السلاسل المضافة في واجهة الترجمة.

9
JonMcL

يعالج دروبال تعبئة السلاسل المطلوبة في كائن جافا سكريبت. تمامًا مثل المجموعة الكاملة من السلاسل التي لا يتم تحميلها في كل صفحة ، تتم إضافة السلاسل المطلوبة فقط إلى JavaScript.

أعتقد أن هذا يتم من خلال اجتياز ملفات البرامج النصية قبل إضافتها بالفعل إلى الصفحة.

لذا إذا أضفت Drupal.t('Some string'); إلى شفرة جافا سكريبت ، يجب أن تكون قادرًا على ترجمة ذلك في واجهة الترجمة.

8
googletorp

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

كما لاحظ JonMcL نفسه في تعليقه الأخير ، فإن الوظيفة _locale_parse_js_file في locale.inc هي المسؤولة عن تحليل أنماط Drupal.t ("somestring") بدءًا من الصف 1493 (في Drupal 7.22) :

preg_match_all('~
[^\w]Drupal\s*\.\s*t\s*                       # match "Drupal.t" with whitespace
\(\s*                                         # match "(" argument list start
(' . LOCALE_JS_STRING . ')\s*                 # capture string argument
(?:,\s*' . LOCALE_JS_OBJECT . '\s*            # optionally capture str args
  (?:,\s*' . LOCALE_JS_OBJECT_CONTEXT . '\s*) # optionally capture context
?)?                                           # close optional args
[,\)]                                         # match ")" or "," to finish
~sx', $file, $t_matches);

إنها مجرد وظيفة تحليل "غبية" لا تهتم بدلالات ، وتجد ببساطة جميع حالات Drupal.t ("شيء") في أي ملف تتلقاه.

ما يمكن أن يكون مسكنا شائعًا هو أنك تحتاج إلى السلسلة الكاملة في شفرة المصدر الخاصة بك في نموذج Drupal.t ("translateme") ، لأنه (من الواضح) أنه لا يتم تنفيذ جافا سكريبت عند فتح الملف من خلال file_get_contents في php. هذا يعني أنه لا يمكنك أبدًا القيام بـ Drupal.t (متغير) والأمل Drupal ستلتقط جميع متغيرات جافا سكريبت التي تحتوي على سلسلة والتي ترميها في Drupal.t.

إذا كنت تريد ترجمة "النساء" في مخطط وإعطاء السلسلة سياقًا ، فسيكون بناء الجملة كما يلي:

Drupal.t("women", {}, {context: "charts"}

أيضا ، إذا كنت قد قمت بتثبيت drush ، تحقق من تحليل ملف js الخاص بك باستخدام الأمر ؛

drush vget javascript_parsed

ثم يمكنك تنظيف ذاكرة التخزين المؤقت باستخدام

drush cc all

... وكرر الأمر vget أعلاه للتحقق من أن قائمة الملفات التي تم تحليلها بالفعل فارغة. وبهذه الطريقة سيتم إعادة ملفك إلى التشغيل التالي (تحقق من ذلك أيضًا).

6
user19814

لقد واجهت زوجين أثناء تنفيذ JS متعدد اللغات في Drupal 7:

  1. أولاً ، تأكد من عدم تضمين ملف JS الخاص بك في السطر . اعتبارًا من Drupal 7.22، Drupal.locale.strings لا يبدو أنها تقوم بتحديث نفسها تلقائيًا إذا كنت تضمين ملفات JavaScript في Drupal . لا تزال واجهة الترجمة مختارة على طول السلسلة على أي حال ، مما يزيد من ارتباكي.

  2. ثانيًا ، تأكد من أنك تستخدم Drupal.behaviors لإرفاق JS بالصفحة. لن تؤدي عمليات إغلاق JS المنتظمة إلى تحليل دروبال "السحري" لتحريضات Drupal.t(). هذا شيء من الناحية الفنية يجب عليك القيام به على أي حال ؛)

من هناك حقا مؤلمة جدا. ما عليك سوى استخدام Drupal.t() حول النص الذي تريد ترجمته ومسح ذاكرة التخزين المؤقت في كل مرة تقوم فيها بتحديث الملف ، ويجب أن يرى المترجمون السلسلة الجديدة في الواجهة على /admin/config/regional/translate/translate. إنه لطيف للغاية بمجرد أن تبدأ العمل.

0
Chris Ruppel