আপনি এটির কাছে কীভাবেই আসুন না কেন, আপনার সমস্যার জন্য একটি "সৃজনশীল" সমাধান প্রয়োজন যা পরবর্তী ডেভস / রক্ষণাবেক্ষণকারীদের ব্যবহারের জন্য বিকাশকারী নোটের উপযুক্ত। প্রথমে কিছু ব্যাকগ্রাউন্ড, তার পরে একটি নোট এবং তার পরে সহজ এবং আমি মনে করি যুক্তিযুক্ত সমাধানটি <--
tl; ড ।
জ্যাভা যেমন উল্লেখ করেছেন , অনুবাদটি অনুবাদটি মডিউলটির সাথে সম্পর্কিত। টেমপ্লেটগুলি ব্লক দৃষ্টান্তগুলিতে রেন্ডার হয় এবং ব্লক দৃষ্টান্তগুলির একটি module_name
সম্পত্তি থাকে যা অনুবাদ প্রার্থনা করার সময় ব্যবহৃত হয়; রেফ Mage_Core_Block_Abstract::__()
:
public function __()
{
$args = func_get_args();
$expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getModuleName());
array_unshift($args, $expr);
return Mage::app()->getTranslator()->translate($args);
}
module_name
(। সুত্র সম্পত্তি (সাধারণত) চাহিদা উদ্ভূত এবং ক্লাস নামের উপর ভিত্তি করে ::getModuleName()
):
public function getModuleName()
{
$module = $this->getData('module_name');
if (is_null($module)) {
$class = get_class($this);
$module = substr($class, 0, strpos($class, '_Block'));
$this->setData('module_name', $module);
}
return $module;
}
সুতরাং, module_name
সম্পত্তি ইতিমধ্যে সেট করা থাকলে, সেই মডিউল অনুবাদ প্রযোজ্য। মূল লেআউটটি থেকে বিদ্যমান ব্লকগুলির জন্য, এই সম্পত্তিটি এক্সএমএল লেআউটের মাধ্যমে সেট করা যেতে পারে; উদাহরণ স্বরূপ:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
ভাল খবর! আপনার মডিউল সিএসভি সেই উদাহরণটির জন্য অনুবাদটির মালিক। এটি একটি পদ্ধতির হতে পারে। অবশ্যই, অন্য মডিউলগুলির অনুবাদের ব্লক দৃষ্টান্তগুলিতে মডিউল-নির্দিষ্ট সহায়ক দ্বারা অবশ্যই প্রয়োগ করা হচ্ছে (অবশ্যই টেমপ্লেট ফাইলগুলি সহ) এবং লেআউট এক্সএমএল অনুবাদগুলির ক্ষেত্রে এটি সর্বদা সত্য। এছাড়াও, এই পদ্ধতির অক্ষম মডিউলগুলি আউটপুট আচরণটি ভেঙে দেবে, যা module_name
প্যারাম ব্যবহার করে ।
সমাধান
দেখা যাচ্ছে যে মডিউলটির জন্য একাধিক অনুবাদ ফাইল নির্দিষ্ট করা সম্ভব । এটি কোরটিতে করা হয়নি (প্রতিটি মডিউল কেবল একটি .csv ফাইল ঘোষণা করে ), তবে কার্যকারিতা এখানে রয়েছে Mage_Core_Model_Translate
:
public function getModulesConfig()
{
if (!Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')) {
return array();
}
$config = Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')->children();
if (!$config) {
return array();
}
return $config;
}
এবং
protected function _loadModuleTranslation($moduleName, $files, $forceReload=false)
{
foreach ($files as $file) {
$file = $this->_getModuleFilePath($moduleName, $file);
$this->_addData($this->_getFileData($file), $moduleName, $forceReload);
}
return $this;
}
যেহেতু ফাইলগুলির বিষয়বস্তু মার্জ হয়েছে (আমি পরীক্ষা করেছি), কেবলমাত্র সেই স্ট্রিংগুলি নির্দিষ্ট করা সম্ভব যা আপনি নিজের কাস্টম সিএসভি (গুলি) এ ওভাররাইড করতে চান। উদাহরণস্বরূপ, আপনি যদি পণ্যের পৃষ্ঠায় অতিরিক্ত তথ্য স্ট্রিংটি অনুবাদ করতে চান ( Mage_Catalog
মডিউল দ্বারা অনুবাদ করা ), নিম্নলিখিতটি কাজ করবে:
অ্যাপ্লিকেশন / স্থানীয় / কাস্টম সিএসভি :
"Additional Information","More Info, Dude"
আপনার মডিউল কনফিগ ইন - যা করা উচিত <depends />
উপর Mage_Catalog
নিশ্চিত করার এটির সামগ্রীগুলি একত্রীকরণ পর - নিম্নলিখিত কারণ হবে Custom.csv মূল উপরে একত্রীকরণ অনুবাদ জোড়া:
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
এই পদ্ধতির সম্পর্কে দুর্দান্ত জিনিসটি হ'ল আপনি আপনার ওভাররাইডিং মূল অনুবাদগুলি একটি ফাইলে সংগ্রহ করতে পারেন।