আপনার প্রয়োজনীয়তা:
একটি প্রমাণীকৃত ব্যবহারকারী হিসাবে
আমার সাইট একাধিক ভাষায় কাজ করার জন্য আমাকে
টি () ফাংশন দিয়ে সম্পন্ন আমার সাইটের কোডবেজে পাওয়া যে কোনও এবং সমস্ত অনুবাদ কল একবারে অনুবাদ করতে সক্ষম হতে হবে।
আপনি কি চাইছেন সেই প্রয়োজনীয়তার বিবরণটি কি খুব কাছে?
ক্রোলের্স
যেমন কেউ বলেছিল - কোনও ক্রলার তাত্ত্বিকভাবে পুরো সাইটটি সমস্ত টি () কলগুলির নিবন্ধীকরণের জন্য বাধ্য করতে পারে। তবে 1) ক্রোলার জানেন না যে কোন পৃষ্ঠাগুলিতে হামাগুড়ি দিতে হবে; 2) আমরা ক্রল করার জন্য পৃষ্ঠাগুলির একটি তালিকা বজায় রাখতে চাইছি না; 3) আমরা কোনও ক্রলার, পিরিয়ড ব্যবহার করতে চাই না। Eww। শুধু, eww। রাইট?
সমস্যাটি
- আমাদের কাছে সমস্ত অনুবাদ স্ট্রিংয়ের একটি তালিকা নেই।
- দ্রুপাল / পিএইচপি একটি গতিময় ভাষা যা সি সংকলিত হয় unlike সুতরাং আমরা যেতে পারি না এবং উদাহরণস্বরূপ বলতে পারি না: এই পুরো কোডবেসটি সংকলন করুন, তারপরে আমাকে এই ফাংশনটির সমস্ত দৃষ্টান্ত সন্ধান করুন
t()
, তারপরে সেই উদাহরণগুলিকে ডাটাবেসে নিবন্ধন করুন, তারপরে সেই সমস্ত নিবন্ধিত দৃষ্টান্তগুলি একবারে অনুবাদ করুন t()
। আমি আমাদের টেবিলে একটি বিকল্প বলে মনে করি না।
- একটি স্থিতিশীল কোড বিশ্লেষণ সরঞ্জাম একই কারণে একজন ক্রলার নিঃস্ব হবে। আমি
t()
এই ফাইলটিতে এটি খুঁজে পেয়েছি । গ্রেট! এটি কোন ইউআরএল ব্যবহার করা হয়? প্রসঙ্গটি কী?
বর্তমান সরঞ্জামগুলি (দ্রুপাল এবং কিছু অবদানকারী মডিউল) এবং বর্তমান সীমাবদ্ধতাগুলির সাথে (রিয়েল-টাইম থিম কলগুলি -> টেমপ্লেট ফাইলগুলি -> t()
কলগুলির উপর নির্ভর করে) সমস্যাটি আক্রমণ করা এখানে অল-এক্সিটের মতো দেখাচ্ছে। আমাদের বাক্স থেকে কিছুটা ভাবতে হবে।
আমাদের কি দরকার
- আমাদের একটি ডেটা সোর্স, একটি মডেল দরকার যা আমাদের জানায় যে আমাদের বর্তমান অনুবাদ স্ট্রিংগুলি কী এবং তাদের প্রসঙ্গ কী -
- প্র্যাকটিভ ডেটা মডেল। বর্তমান ডেটা মডেলটি প্রতিক্রিয়াশীল (যখনই কল আসবে তখন মডেলটি আপডেট
t()
হয়)। আমাদের একটি প্র্যাকটিভ ডেটা মডেল দরকার - একটি যাতে অ্যাপ্লিকেশনটি t()
গ্রাহক দ্বারা প্রকৃতরূপে মৃত্যুদন্ড কার্যকর করার আগে উদাহরণগুলির সন্ধানের যত্ন নেয় ।
- আমাদের প্রসঙ্গ দরকার।
t()
একা এটি কেটে দেয় না - কারণ - আমরা জানি না যে আমরা 'ফু' অনুবাদ করছি, তবে যে টার্গেট ল্যাঙ্গুয়েজটি আমরা অনুবাদ করছি তার URL এর উপর নির্ভর করে যেটি ঘটেছিল t()
। এমনকি যদি আমরা t()
কলটিতে লক্ষ্য ভাষাটি হার্ডকোড করতে পারি তবে বলুন, একটি র্যাপার কল ব্যবহার করে এটি আপনার উদ্দেশ্যে কাজ করবে না।
আমি কয়েকটি সরঞ্জাম সনাক্ত করেছি যা আমাদের কাছে থাকলে - আমাদের সমস্যাটিকে সহায়তা করবে। এই সরঞ্জামগুলির সাহায্যে আমরা ডেটা মডেলটিতে যেতে পারি এবং বলতে পারি: যে সমস্ত স্ট্রিং জড়িয়ে আছে তা আমাকে t()
এখনও দেবে না যা এখনও পপুলেশিত হয়নি। এখন এই অনুবাদগুলি সন্নিবেশ করান। ধন্যবাদ.
এবং পরের বার যখন গ্রাহক আসবেন, অনুবাদগুলি সেখানে রয়েছে।
আমরা কীভাবে ... এই সরঞ্জামগুলি তৈরি করব?
সীমাবদ্ধতাসমূহ
- লক্ষ্য ভাষাটি টেমপ্লেটে থাকতে পারে না, এটি ইউআরএল দ্বারা সিদ্ধান্ত নেওয়া হয়। স্ট্রিং ধরে নিলে অবশ্যই যে কোনও ভাষা সমর্থন করবে।
- অনুবাদকৃত স্ট্রিংটি টেমপ্লেটে থাকতে পারে না। অনুবাদটি একটি ডাটাবেসে থাকবে।
এখন যেহেতু আমি সমস্যাটিকে আরও চিন্তাভাবনা দিয়েছি এবং কয়েকটি চ্যালেঞ্জ এবং সীমাবদ্ধতাগুলি চিহ্নিত করেছি, আমি সেখানে উপলভ্য যে কোনও সমাধানের দিকে তাকানোর বিষয়ে বা কোনও কাস্টম সমাধান তৈরি করার বিষয়ে ভাবতে পারি।
সমাধান মস্তিষ্ক
আমার এমন কিছু দরকার যা "সবকিছু" একসাথে বাঁধে। কি সম্পর্কে ... একটি সত্তা?
- কোনও সত্তা সেই পণ্যটি ধরে রাখতে পারে যা অনুবাদ করা দরকার।
- সংস্থাগুলি যে পণ্যটির অনুবাদ করতে হবে এবং এটি প্রসঙ্গে তার মধ্যে আঠালো - সম্পর্ক সরবরাহ করতে পারে।
- সত্তাটি কোনও ক্ষেত্রে, পণ্যটির ডিফল্ট URL অবস্থান বলতে পারে say
- টোকেনগুলি বিকল্প লোকেশন (ভাষা?) নির্দিষ্ট করতে ব্যবহৃত হতে পারে যাতে পণ্যটি প্রদর্শিত হবে।
- সংস্থাগুলি আমাদের প্র্যাকটিভ ডেটা মডেল সরবরাহ করে যা আমাদের প্রয়োজন এবং এটি প্রসঙ্গে। যার ফলস্বরূপ আমাদের কিছু করার অনুমতি দেয় যেমন: ডাটাবেসে প্রবেশ করুন, সমস্ত পণ্য সত্তা দখল করুন, এবং যদি এক্স, ওয়াই এবং জেড ক্ষেত্রের জন্য অনুবাদ স্ট্রিং না থাকে তবে সেই অনুবাদগুলির স্ট্রিং তৈরি করুন।
গ্রাহক তখন ধরে ফেললে /pl/product/200
আপনি ডিবিতে বেড়াতে যান, পণ্য 200 দেখুন এবং ইতিমধ্যে বিদ্যমান pl
অনুবাদটি গ্রহণ করুন। সেই পণ্যটির জন্য আপনার কী শিরোনাম এবং ক্যাপশন ক্ষেত্র আছে? অনুবাদগুলিও সেখানে হওয়া উচিত।
মনে রাখবেন যে আপনি কোন অনুবাদ মডিউলটি ব্যবহার করছেন সে ক্ষেত্রে আমি এখানে খুব অস্পষ্ট এবং জেনেরিক হচ্ছি। আপনার নিজের অনুবাদ মডিউলটি ব্যবহার করে আপনি খুব ভালভাবেই শেষ করতে পারেন - সম্ভবত এটিই এর কারণ। ড্রুপালে আমি এখনও অবধি সমস্ত অনুবাদ মডেল দেখেছি (ডি 7 হিসাবে এখনও ডি 8 এর দিকে নজর নেই) প্রতিক্রিয়াশীল, তাত্পর্যপূর্ণ নয়।
সংক্ষেপে
তত্ত্বের মধ্যে, আপনার যা প্রয়োজন তা তৈরি করার সরঞ্জামগুলি রয়েছে, সত্তা মূল উপাদান যা সমস্ত কিছু এক সাথে বেঁধে রাখবে: - ডেটা (অনুবাদ স্ট্রিং), - লক্ষ্য ভাষা languages সত্তাকে নিজেই উপস্থিত থাকতে হবে না, পছন্দসইভাবে একটি শ্রেণীবদ্ধ শব্দভাণ্ডার, পণ্যের ভাষার জন্য বলুন। অথবা অন্যান্য সত্তাগুলির জন্যও জেনেরিক শুল্কবিধি। - প্রসঙ্গ সত্তা প্রদর্শিত হবে যে URL। ইউআরএলটিতে একটি টোকেন থাকবে এবং টোকেনটি টার্গেট ল্যাঙ্গুয়েজ ট্যাক্সনোমিটিকে উল্লেখ করবে।
এই তিনটি উপাদানের সাহায্যে আপনি বলতে পারেন: সমস্ত সত্তা ধরুন , ক্ষেত্রের দিকে যান, ট্যাক্সোনমি টোকেন পান, সমস্ত সম্ভাব্য শব্দ সংমিশ্রণের মাধ্যমে চক্র করুন, খুব বড় কুৎসিত ফর্ম ব্যবহার করে বর্তমান ব্যবহারকারীর কাছে সমস্ত সংমিশ্রণ উপস্থাপন করুন - বা, এজেএক্স - এবং মাল্টি-স্টেপ ফর্মগুলি (এর মতো কিছু) এবং বর্তমানে লগ ইন করা ব্যবহারকারী যেমন পণ্য 200 এর জন্য বিভিন্ন ভাষায় অনুবাদ করেন, সেগুলি কোথাও ডাটাবেসে সংরক্ষণ করুনproduct
URL alias
ডাটাবেসের কোথাও সত্তার কোনও ফিল্ড এপিআই ক্ষেত্র হতে পারে, প্রতিটি সত্তার অন্তর্গত সেটিংস ক্ষেত্র (ঠিক ফিল্ড এপিআই নয়, তবে এটি এখনও ডেটা ধরে রাখতে পারে), বা আপনি আলাদা আলাদা সারণি ব্যবহার করতে পারেন যা আপনি এর জন্য ব্যবহার করেন। আমি মনে করি সত্তায় ডেটা সংরক্ষণ করা কোড এবং ডেটা উভয়ই পরিপাটি এবং সহজ রাখবে।
এটি বিল্ডিং: সম্ভাব্য সমাধানগুলি
- ডি 8 এমআই (দ্রুপাল 8 বহুভাষিক উদ্যোগ)
- কাস্টম কোড: "ইনডেক্স" অনুবাদগুলি টেমপ্লেটগুলিতে টি () দ্বারা প্রোগ্রাম্যাটিকভাবে অনুসন্ধান এবং উপলভ্য বান্ডিল এবং তাদের সম্পর্কিত থিম হুক বাস্তবায়নের মাধ্যমে সরবরাহ করে।
সুডোকোড
ফরচ সত্তা (প্রকারের x এর), সমস্ত ভাষা সন্ধান করুন (পণ্যের সাথে জড়িত মূলশব্দ
বা মূল ভাষা),
সত্তাকে রেন্ডার করুন
- এটির টি () অনুবাদ স্ট্রিংগুলি সনাক্ত করতে
- কল থিম () উপস্থাপন করুন, যা বহুভাষিক উপস্থাপনা স্তরটির পরিচালনা করে পণ্যটি, পণ্য ডেটা মডেল নিজেই নয়।
ফলাফল:
- প্রতিটি ভাষায় সত্তা টেম্পলেট রেন্ডারে প্রথম কল প্রতিটি কলের জন্য ডিফল্ট ভাষা প্রয়োগ করে।
- টেমপ্লেটের টি () পরামিতিগুলি এখন দ্রুপালকে ক্যাশে করা হয়েছে এবং অনুবাদের জন্য প্রস্তুত (প্রতিটি ভাষার উদাহরণের জন্য, প্রতিটি পণ্যের উদাহরণ নয়)।
- "অনুবাদক" ভূমিকা সহ ব্যবহারকারী এখন অনুবাদ ইন্টারফেসে যেতে পারেন এবং প্রতিটি ভাষার জন্য উপলব্ধ সমস্ত টি () পরামিতি অনুবাদ করতে পারেন।
- সাইটের মালিকদের প্রতিটি পণ্য পৃষ্ঠা দেখার জন্য গ্রাহকদের অপেক্ষা করতে বা প্রতিটি পণ্য পৃষ্ঠা ম্যানুয়ালি দেখার দরকার নেই, কারণ এটি তার জন্য প্রোগ্রামিকভাবে করা হয়েছিল।
মুক্ত প্রশ্ন:
- প্রসঙ্গটি কী? আমি যদি প্রতিটি "পণ্য" সত্তা বান্ডিলের জন্য থিম () তে প্রোগ্রাম্যাটিক কল করি, তবে এটি কি সেই অবস্থানটি রেকর্ড করে যেখানে কলটি করা হয়েছিল? এটি নোডের ইউআরএল রেকর্ড করে? "প্রসঙ্গ" পরিবর্তন করা যেতে পারে? প্রসঙ্গে রেকর্ড করা হয় কোথায়? আপনার যখন "ডায়নামিক" টেম্পলেট রয়েছে - তখন যখন আপনার প্রতি পণ্য প্রতি একাধিক টেম্পলেট থাকে এবং আপনি কীভাবে এই ভিন্নতাগুলি সনাক্ত করতে চলেছেন?
সর্বদা হিসাবে, থিয়োরাইজিং এবং সিউডোকোড কেবল মস্তিষ্কের জন্য ভাল or তবে বিকাশে আমরা প্রোটোটাইপিং শুরু না করা পর্যন্ত আমরা সত্যই কি বিরুদ্ধে আছি তা খুব কমই জানতে পারব। তাই বেশ কয়েকটি বাধা, সম্ভাব্য সমাধান এবং সম্ভাব্য সমস্যা বা প্রশ্ন আঁকিয়েছি - আমি এখন ধারণার প্রমাণ বা কাজ করার প্রোটোটাইপ প্রয়োগ করতে এগিয়ে যেতে পারি। উপরের কয়েকটি উন্মুক্ত প্রশ্নের কেবলমাত্র এইভাবে উত্তর দেওয়া যেতে পারে, এবং প্রারম্ভিক আমরা প্রোটোটাইপ (সাফল্য বা ব্যর্থতা নির্বিশেষে), আমরা সেই কয়েকটি প্রশ্নের উত্তর দেওয়া শুরু করতে পারি - বা সম্পূর্ণরূপে দৃষ্টিভঙ্গি পরিবর্তন করতে পারি। থাকুন ~
wget
বা যা কিছু ব্যবহার করুন । হ্যাকিশ, তবে আপনি বলেছিলেন যে এটি অনুমোদিত হয়েছিল (: