আমি কীভাবে দ্রুপাল.লোকেল.স্ট্রিংগুলিতে অনুবাদিত স্ট্রিংগুলি পেতে পারি?


9

তাই আমি আমার কিছু কাস্টম জাভাস্ক্রিপ্ট কোডে (আমার থিমটিতে) ড্রুপাল.টি () ফাংশনটি ব্যবহার করার চেষ্টা করছি।

Drupal.locale.strings অবজেক্টে আমার প্রয়োজনীয় স্ট্রিংগুলি কীভাবে পাব? আমি সেখানে কিছু স্ট্রিং দেখছি, তবে অবশ্যই পুরো ডাটাবেসটি লোড করা যায় না। এটিতে যুক্ত করার সর্বোত্তম উপায় কী? আমি পিএইচপি টি () ফাংশনটি ব্যবহার করতে চাই যাতে যুক্ত হওয়া স্ট্রিংগুলি অনুবাদ ইন্টারফেসে সম্পাদনা করা যায়।

উত্তর:


8

জাভাস্ক্রিপ্ট অবজেক্টে প্রয়োজনীয় স্ট্রিংগুলি পপুলেট করছে ড্রুপাল হ্যান্ডলগুলি। অনেকগুলি স্ট্রিংয়ের সংগ্রহ যেমন প্রতিটি পৃষ্ঠায় লোড হয় না, কেবল জাভাস্ক্রিপ্টে প্রয়োজনীয় স্ট্রিং যুক্ত করা হয়।

আমি বিশ্বাস করি স্ক্রিপ্ট ফাইলগুলি পৃষ্ঠায় আসলে যুক্ত হওয়ার আগে তাদের স্ক্র্যাপ করেই এটি করা হয়েছিল।

সুতরাং আপনি যদি Drupal.t('Some string');আপনার জাভাস্ক্রিপ্ট কোড যুক্ত করেন তবে আপনার অনুবাদ ইন্টারফেসে এটি অনুবাদ করতে সক্ষম হওয়া উচিত।


ঠিক আছে তবে তা হচ্ছে না। (Drupal.t () কলগুলি সন্ধানের জন্য স্ক্রিপ্টের ট্র্যাভারসাল)। আমি থিমের .info ফাইলের মাধ্যমে স্ক্রিপ্টটি যুক্ত করছি (স্ক্রিপ্টস [] = স্ক্রিপ্টস / স্ক্রিপ্ট .js)। হয়তো আমাকে ড্রপাল_এডিডি_জেএস () দিয়ে যুক্ত করতে হবে?
জোনএমসিএল

আপনি সঠিক. পুরোপুরি একটি ধারণা পেতে আমাকে খুঁজে পেতে হয়েছিল, তবে এটি স্বয়ংক্রিয়ভাবে ঘটে happen ড্রুপাল 7-এ, ফাংশনটি লোকেল_জেএস_আল্টার () স্থানীয় (মোডেল.মডিউলে)। এটি জাভাস্ক্রিপ্ট ফাইলগুলির সম্পূর্ণ তালিকা ব্যবহার করে এবং প্রতিটি _locale_parse_js_file () এ পার্স করে। নিশ্চিত হয়ে নিন যে ফাইল_জেট_কন্টেন্টস () আপনার জেএস ফাইলটি প্রদত্ত পাথ দিয়ে লোড করতে পারে (যেমন আপনার থিম ফোল্ডারে থাকলে এটি / দিয়ে আপনার পথ শুরু করবেন না)। আপনি আপনার থিমের .info ফাইলটিতে drupal_add_js বা স্ক্রিপ্টস [] সেটিংস ব্যবহার করতে পারেন। অবশ্যই, ক্যাশেগুলি সাফ করার এবং স্ট্রিংটির অনুবাদ নিশ্চিত করে নিন! :)
জোনএমসিএল

6

কেবল আজ এই একই ইস্যুতে দৌড়েছে এবং এটি আরও কিছুটা গবেষণা করেছে। ক্রিসের উপরের একটি ভাল মন্তব্য রয়েছে তবে এটি শেষ পর্যন্ত ভুল। এটি কাজ করার জন্য আপনার Drupal.behaviors ব্যবহার করার দরকার নেই।

যেমন জোনএমসিএল তাঁর শেষ মন্তব্যে নিজেই উল্লিখিত হয়েছে, লোকেল.ইন্সে _locale_parse_js_file ফাংশনটি Dropal.t ("সামস্ট্রিং") নিদর্শন 1493 থেকে শুরু করে (দ্রুপাল 7.২২ তে) পার্স করার জন্য দায়ী:

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);

এটি কেবলমাত্র একটি "বোবা" পার্সিং ফাংশন যা শব্দার্থবিজ্ঞানের বিষয়ে চিন্তা করে না এবং এটি প্রাপ্ত কোনও ফাইলের মধ্যে দ্রুপাল.t ("কিছু") এর সমস্ত উদাহরণ খুঁজে পায় finds

একটি সাধারণ গোটচা হতে পারে এটি হ'ল আপনার সোর্স কোডটিতে ড্রপল.টি ("অনুবাদক") আকারে পুরো স্ট্রিং থাকা দরকার, কারণ (স্পষ্টতই) পিএইচপি-তে ফাইল_জেট_কন্টেন্টের মাধ্যমে ফাইল খোলার সময় কোনও জাভাস্ক্রিপ্ট কার্যকর করা হয় না। এর অর্থ আপনি কখনই দ্রুপাল.টি (কিছু পরিবর্তনযোগ্য) করতে পারবেন না এবং আশা করি দ্রুপাল আপনি ড্রুপাল.টি-তে যে স্ট্রিংযুক্ত জাভাস্ক্রিপ্ট ভেরিয়েবলগুলি পেয়েছেন তা ধরবে।

আপনি যদি কোনও চার্টের জন্য "মহিলা" অনুবাদ করতে এবং স্ট্রিংটিকে একটি প্রসঙ্গ দিতে চান তবে বাক্য গঠনটি হ'ল:

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

এছাড়াও, আপনি যদি ড্রাশ ইনস্টল করে থাকেন তবে আপনার js ফাইলটি কমান্ডের মাধ্যমে পার্স করা হয়েছে তা যাচাই করুন;

drush vget javascript_parsed

তারপরে আপনি নিজের ক্যাশে দিয়ে পরিষ্কার করতে পারেন

drush cc all

... এবং ইতিমধ্যে পার্স করা ফাইলগুলির তালিকা খালি কিনা তা যাচাই করতে উপরের উইগেট কমান্ডটি পুনরাবৃত্তি করুন। এইভাবে আপনার ফাইলটি পরবর্তী সময়ে পুনঃস্থাপন করা হবে (এটিও যাচাই করুন)।


1
ধন্যবাদ drush vget javascript_parsed! অনুবাদ স্ক্রিপ্ট ফাইলগুলি পুনর্নির্মাণ করার জন্য একটি দ্রুত উপায় হ'ল সিএসএস এবং জেএস ফাইলগুলি ব্যবহার করে সরিয়ে ফেলা drush @sitealias cc css-js
lmeurs

0

দ্রুপাল in তে বহুভাষিক জেএস বাস্তবায়নের সময় আমি যে দম্পতিকে পেয়েছি:

  1. প্রথমে নিশ্চিত হয়ে নিন যে আপনার জেএস ফাইলটি ইনলাইন অন্তর্ভুক্ত হচ্ছে না । ড্রুপাল .2.২২ অনুসারে, Drupal.locale.stringsআপনি যদি দ্রুপালে জাভাস্ক্রিপ্ট ফাইলগুলি সন্নিবেশ করিয়ে থাকেন তবে স্বয়ংক্রিয়ভাবে নিজেকে আপডেট হবে বলে মনে হয় না । অনুবাদ ইন্টারফেসটি এখনও আমার বিভ্রান্তিকে যুক্ত করে স্ট্রিংটি তুলেছে।

  2. দ্বিতীয়ত, নিশ্চিত করুন যে আপনি পৃষ্ঠায় আপনার জেএস সংযুক্ত করার জন্য দ্রুপাল.বিহারগুলি ব্যবহার করছেন । নিয়মিত জেএস বন্ধকরণগুলি দ্রুপালের "যাদু" অনুরোধগুলি পার্সিংকে ট্রিগার করবে না Drupal.t()। এটি প্রযুক্তিগতভাবে এমন কিছু যা আপনার যাইহোক করা উচিত;)

সেখান থেকে এটি সত্যিই বেশ বেদনাদায়ক। Drupal.t()আপনি অনুবাদ করতে চান এমন পাঠ্যকে কেবল ব্যবহার করুন , প্রতিবার ফাইল আপডেট করার পরে আপনার ক্যাশে সাফ করুন এবং আপনার অনুবাদকরা ইন্টারফেসে নতুন স্ট্রিংটি দেখতে পাবেন /admin/config/regional/translate/translate। এটি কাজ করার পরে এটি বেশ সুন্দর।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.