আমি এখন বেশ কয়েক মাস ধরে এই প্রশ্নটির সাথে লড়াই করে যাচ্ছি, তবে আমার আগে এমন সমস্ত সম্ভাব্য বিকল্পগুলি অন্বেষণ করার মতো পরিস্থিতিতে ছিলাম না। এই মুহুর্তে, আমি অনুভব করছি যে সম্ভাবনাগুলি সম্পর্কে জানার এবং আমার আসন্ন প্রকল্পগুলিতে নিজের নিজস্ব ব্যক্তিগত পছন্দ তৈরি করার সময় এসেছে time
প্রথমে আমি যে পরিস্থিতিটি সন্ধান করছি তা আমার স্কেচ করুন
আমি একটি কন্টেন্ট ম্যানেজমেন্ট সিস্টেমকে আপগ্রেড / পুনর্নির্মাণ করতে যাচ্ছি যা আমি বেশ কিছুদিন ধরে ব্যবহার করছি। যাইহোক, আমি বহু ভাষা অনুভব করছি এই ব্যবস্থার জন্য একটি দুর্দান্ত উন্নতি। এর আগে আমি কোনও ফ্রেমওয়ার্ক ব্যবহার করিনি তবে আমি আসন্ন প্রকল্পের জন্য লারাওয়াল ৪ ব্যবহার করব। লারাভেল কোড পিএইচপি করার জন্য একটি ক্লিনার উপায়ের সেরা পছন্দ বলে মনে হচ্ছে। Sidenote: Laraval4 should be no factor in your answer
। আমি অনুবাদের সাধারণ উপায়গুলি খুঁজছি যা প্ল্যাটফর্ম / কাঠামো স্বাধীন।
কি অনুবাদ করা উচিত
যে সিস্টেমটি আমি সন্ধান করছি সে হিসাবে যতটা সম্ভব ব্যবহারকারী বান্ধব হওয়া দরকার অনুবাদ পরিচালনার পদ্ধতিটি সিএমএসের ভিতরে থাকা উচিত। অনুবাদ ফাইল বা কোনও এইচটিএমএল / পিএইচপি পার্সড টেমপ্লেট সংশোধন করার জন্য কোনও এফটিপি সংযোগ শুরু করার দরকার নেই।
তদুপরি, আমি অতিরিক্ত টেবিল তৈরির প্রয়োজন ছাড়াই একাধিক ডাটাবেস টেবিল অনুবাদ করার সবচেয়ে সহজ উপায়টি খুঁজছি।
আমি নিজের সাথে কী এলাম
আমি ইতিমধ্যে নিজেরাই জিনিসগুলি অনুসন্ধান, পড়া এবং চেষ্টা করে যাচ্ছি। আমার কাছে বেশ কয়েকটি বিকল্প রয়েছে। তবে আমি এখনও মনে করি না যে আমি সত্যিই যা খুঁজছি তার জন্য আমি একটি সর্বোত্তম অনুশীলনের পদ্ধতিতে পৌঁছেছি। এই মুহুর্তে, আমি এটি নিয়ে এসেছি, তবে এই পদ্ধতিতে এর পার্শ্ব প্রতিক্রিয়াও রয়েছে।
- পিএইচপি পার্সড টেমপ্লেটস : টেমপ্লেট সিস্টেমটি পিএইচপি দ্বারা বিশ্লেষণ করা উচিত। এইভাবে আমি টেমপ্লেটগুলি খোলার ও তাদের সংশোধন না করে অনুবাদ করা প্যারামিটারগুলি এইচটিএমএলে সন্নিবেশ করতে সক্ষম হয়েছি। তদ্ব্যতীত, পিএইচপি পার্সড টেমপ্লেটগুলি আমাকে প্রতিটি ভাষার জন্য সাবফোল্ডার না রেখে সম্পূর্ণ ওয়েবসাইটের জন্য 1 টি টেমপ্লেট রাখার ক্ষমতা দেয় (যা আমার আগে ছিল)। এই লক্ষ্যে পৌঁছানোর পদ্ধতিটি স্মার্ট, টেম্পলেট শক্তি, লারাভেলের ব্লেড বা অন্য কোনও টেম্পলেট পার্সার হতে পারে। আমি যেমন বলেছি এটি লিখিত সমাধানের জন্য স্বাধীন হওয়া উচিত।
- ডাটাবেস চালিত : সম্ভবত আমার আর এটি উল্লেখ করার দরকার নেই। তবে সমাধানটি ডাটাবেস চালিত হওয়া উচিত। সিএমএসের উদ্দেশ্য অবজেক্ট ওরিয়েন্টেড এবং এমভিসি হওয়া, সুতরাং স্ট্রিংগুলির জন্য আমার একটি লজিকাল ডেটা কাঠামো সম্পর্কে ভাবতে হবে। আমার টেমপ্লেট গঠিত হতে হবে হিসাবে: টেমপ্লেট / কন্ট্রোলার / View.php সম্ভবত এই কাঠামো সবচেয়ে জানার জন্য হবে:
Controller.View.parameter
। ডাটাবেস টেবিলের ক্ষেত্রগুলির সাথে এই ক্ষেত্রগুলি দীর্ঘ থাকবেvalue
। টেম্পলেটগুলির অভ্যন্তরে আমরা কিছু ধরণের পদ্ধতি ব্যবহার করতে পারিecho __('Controller.View.welcome', array('name', 'Joshua'))
এবং প্যারামিটার ধারণ করেWelcome, :name
। সুতরাং ফলাফল হচ্ছেWelcome, Joshua
। এটি এটি করার একটি ভাল উপায় বলে মনে হচ্ছে, কারণ: প্যারামিটারগুলি যেমন: নামটি সম্পাদক দ্বারা বোঝা সহজ। - নিম্ন ডাটাবেস লোড : অবশ্যই উপরের সিস্টেমটি যদি এই স্ট্রিংগুলি চলতে থাকে তবে ডেটাবেস লোডের কারণ হতে পারে। তাই আমার প্রশাসনিক পরিবেশে সম্পাদনা / সংরক্ষণের সাথে সাথে ভাষা ফাইলগুলি পুনরায় রেন্ডার করে এমন একটি ক্যাচিং সিস্টেমের প্রয়োজন হবে। যেহেতু ফাইলগুলি উত্পন্ন হয়, একটি ভাল ফাইল সিস্টেমের বিন্যাসও প্রয়োজন। আমি অনুমান করি যে আমরা
languages/en_EN/Controller/View.php
বা .ini এর সাথে যেতে পারি, যা আপনার পক্ষে সবচেয়ে বেশি উপযুক্ত। সম্ভবত একটি .ini এমনকি দ্রুত পার্স করা হয়। এই ফোল্ডারে ডাটা থাকা উচিতformat parameter=value;
। আমি অনুমান করি এটি এটি করার সর্বোত্তম উপায়, যেহেতু রেন্ডার করা প্রতিটি ভিউতে এটি উপস্থিত থাকলে এটির নিজস্ব ভাষা ফাইল অন্তর্ভুক্ত থাকতে পারে। প্যারামিটারগুলি একে অপরকে ওভাররাইট করা থেকে বিরত রাখতে ভাষার প্যারামিটারগুলি তখন নির্দিষ্ট দৃষ্টিতে লোড করা উচিত এবং বিশ্বব্যাপী সুযোগে নয়। - ডাটাবেস সারণির অনুবাদ : এটি আসলে আমি সবচেয়ে বেশি উদ্বিগ্ন। আমি নিউজ / পৃষ্ঠাগুলি / ইত্যাদির অনুবাদ তৈরির উপায় খুঁজছি। যত দ্রুত সম্ভব. প্রতিটি মডিউলের জন্য দুটি টেবিল থাকা (উদাহরণস্বরূপ
News
এবংNews_translations
) একটি বিকল্প তবে এটি একটি ভাল সিস্টেম পাওয়ার জন্য অনেক বেশি কাজ করার মতো মনে হয়। কিছু আমি সঙ্গে একটি উপর ভিত্তি করে তৈরি এসেছেন একdata versioning
সিস্টেম আমি লিখেছি: এক ডাটাবেস সারণি নামTranslations
, এই টেবিল একটি অনন্য সমন্নয় আছেlanguage
,tablename
এবংprimarykey
। উদাহরণস্বরূপ: এন_ইন / নিউজ / 1 (আইডি = 1 সহ নিউজ আইটেমটির ইংরেজি সংস্করণ উল্লেখ করে)। তবে এই পদ্ধতির 2 টি বড় অসুবিধাগুলি রয়েছে: প্রথমত এই টেবিলটি ডাটাবেসে প্রচুর ডেটা নিয়ে দীর্ঘ দীর্ঘায়িত হয় এবং দ্বিতীয়ত, টেবিলটি অনুসন্ধান করতে এই সেটআপটি ব্যবহার করা কোনও কাজের কাজেই খুব খারাপ কাজ। যেমন আইটেমের এসইও স্লাগ অনুসন্ধান করা একটি সম্পূর্ণ পাঠ্য অনুসন্ধান হবে, যা বেশ বোবা। তবে অন্যদিকে: এটি প্রতিটি টেবিলে খুব দ্রুত অনুবাদযোগ্য সামগ্রী তৈরি করার একটি দ্রুত উপায়, তবে আমি বিশ্বাস করি না যে এই সমর্থকটি কনটির উপরের চেয়ে বেশি প্রভাব ফেলবে। - ফ্রন্ট-এন্ড ওয়ার্ক : এছাড়াও ফ্রন্ট-এন্ডের জন্য কিছু চিন্তাভাবনা প্রয়োজন। অবশ্যই আমরা উপলভ্য ভাষাগুলি একটি ডেটাবেজে সংরক্ষণ করব এবং (ডি) আমাদের প্রয়োজনীয় ভাষাগুলি সক্রিয় করব। স্ক্রিপ্টটি কোনও ভাষা নির্বাচন করতে ড্রপডাউন তৈরি করতে পারে এবং সিএমএস ব্যবহার করে কী অনুবাদ করা যায় তা ব্যাক-এন্ড স্বয়ংক্রিয়ভাবে সিদ্ধান্ত নিতে পারে। নির্বাচনের জন্য ভাষাটি (উদাহরণস্বরূপ en_EN) এর পরে ভাষার ফাইলটি দেখার জন্য বা ওয়েবসাইটে কোনও সামগ্রী আইটেমের জন্য সঠিক অনুবাদ পাওয়ার জন্য ব্যবহৃত হত।
সুতরাং, তারা আছে। আমার ধারণা এখন পর্যন্ত। এমনকি তারা এখনো তারিখ ইত্যাদি জন্য স্থানীয়করণ বিকল্পগুলি অন্তর্ভুক্ত না, কিন্তু আমার সার্ভারে সমর্থন যেমন PHP5.3.2 + + ভাল বিকল্প এখানে ব্যাখ্যা Intl এক্সটেনশানটি ব্যবহারের জন্য হল: http://devzone.zend.com/1500/internationalization-in -pp-53 / - তবে এটি পরবর্তী কোনও উন্নয়নের স্টেডিয়ামে কার্যকর হবে। আপাতত মূল বিষয়টি হ'ল কোনও ওয়েবসাইটে সামগ্রীতে অনুবাদ করার সর্বোত্তম অনুশীলন কীভাবে করা যায়।
আমি এখানে যা বুঝিয়েছি তার সাথে সাথে আমার আরও একটি জিনিস রয়েছে যা আমি এখনও স্থির করি নি, এটি একটি সাধারণ প্রশ্নের মতো মনে হচ্ছে, তবে আসলে এটি আমার মাথাব্যথা দিচ্ছে:
ইউআরএল অনুবাদ? আমাদের এই করা উচিত নাকি? এবং কোন উপায়ে?
সুতরাং .. যদি আমার এই url থাকে: http://www.domain.com/about-us
এবং ইংরেজি হ'ল আমার ডিফল্ট ভাষা। http://www.domain.com/over-ons
আমি যখন ডাচকে আমার ভাষা হিসাবে বেছে নিই তখন এই URL টি অনুবাদ করা উচিত ? অথবা আমাদের কি সহজ রাস্তাটি যেতে হবে এবং কেবলমাত্র পৃষ্ঠার সামগ্রীটি দৃশ্যমান /about
। শেষ জিনিসটি একটি বৈধ বিকল্প বলে মনে হচ্ছে না কারণ এটি একই URL এর একাধিক সংস্করণ তৈরি করবে, এই বিষয়বস্তুটিকে সূচীকরণ সঠিকভাবে ব্যর্থ করবে।
http://www.domain.com/nl/about-us
পরিবর্তে অন্য একটি বিকল্প ব্যবহার করা হচ্ছে। এটি প্রতিটি সামগ্রীর জন্য কমপক্ষে একটি অনন্য URL তৈরি করে। এছাড়াও এটি অন্য ভাষায় যাওয়া আরও সহজ হবে, উদাহরণস্বরূপ http://www.domain.com/en/about-us
এবং প্রদত্ত ইউআরএল Google এবং হিউম্যান দর্শকদের পক্ষে বোঝা সহজ। এই বিকল্পটি ব্যবহার করে, আমরা ডিফল্ট ভাষাগুলি দিয়ে কী করব? ডিফল্ট ভাষাটি কি ডিফল্টরূপে নির্বাচিত ভাষাটি সরিয়ে ফেলা উচিত? তাই পুনঃনির্দেশিত http://www.domain.com/en/about-us
হচ্ছে http://www.domain.com/about-us
... আমার দৃষ্টিতে এটিই সেরা সমাধান, কারণ যখন কেবলমাত্র একটি ভাষার জন্য সিএমএস সেটআপ হয় তখন ইউআরএলটিতে এই ভাষা সনাক্তকরণের প্রয়োজন হয় না।
এবং একটি তৃতীয় বিকল্প হ'ল উভয় বিকল্পের সংমিশ্রণ: http://www.domain.com/about-us
মূল ভাষার জন্য "ভাষা-সনাক্তকরণ-কম"-URL ( ) ব্যবহার করে। এবং সাবল্যাংগুয়েজগুলির জন্য অনুবাদকৃত এসইও স্লাগ সহ একটি ইউআরএল ব্যবহার করুন: http://www.domain.com/nl/over-ons
&http://www.domain.com/de/uber-uns
আমি আশা করি আমার প্রশ্ন আপনার মাথা ফাটল, তারা নিশ্চিতভাবে আমার ক্র্যাক করেছে! এটি ইতিমধ্যে এখানে একটি প্রশ্ন হিসাবে জিনিসগুলি কাজ করতে আমাকে সহায়তা করেছিল। আমি আগে যে পদ্ধতিগুলি ব্যবহার করেছি সেগুলি এবং আমার আসন্ন সিএমএসের জন্য ধারণাটি নিয়ে আসার জন্য আমাকে একটি সম্ভাবনা জানিয়েছিল।
আমি এই পাঠ্যের গুচ্ছটি পড়তে সময় দেওয়ার জন্য ইতিমধ্যে আপনাকে ধন্যবাদ জানাতে চাই!
// Edit #1
:
আমি উল্লেখ করতে ভুলে গেছি: __ () ফাংশনটি একটি প্রদত্ত স্ট্রিংটির অনুবাদ করার জন্য একটি উপ নাম। এই পদ্ধতির মধ্যে স্পষ্টতই কিছু ফ্যালব্যাক পদ্ধতি থাকা উচিত যেখানে যখন অনুবাদগুলি উপলব্ধ নেই তখন ডিফল্ট পাঠ্য লোড হয়। অনুবাদটি অনুপস্থিত থাকলে এটি inোকানো উচিত বা অনুবাদ ফাইলটি পুনরায় জেনারেট করা উচিত।