আমার মডিউলটির অনুবাদ ফাইলটি ম্যাজেন্টো কোর টেম্পলেটটি ব্যবহার করুন


15

আমি যে এক্সটেনশনে কাজ করছি তাতে আমার মডিউলের কনফিগারেশন xML এর মাধ্যমে একটি লেআউট এক্সএমএল যুক্ত হয়েছে। এই বিন্যাসে সামনের অংশে কিছু পরিবর্তন রয়েছে। এর মধ্যে কয়েকটি ব্লক ম্যাজেন্টো কোর মডিউলগুলির অন্তর্ভুক্ত। টেমপ্লেটগুলি প্রত্যাশার মতো সমস্ত সঠিকভাবে প্রদর্শিত হচ্ছে।

আমি যে টেম্পলেটগুলি মডিউলটির সাথে প্যাকেজ করেছি সেগুলি আমার নিজস্ব মডিউলটির অনুবাদ ফাইলগুলি ব্যবহার করছে। ম্যাজেন্টো কোর সহ প্যাকেজযুক্ত টেম্পলেটগুলি অপরিকল্পিত দেখায়। যদি আমি সংশ্লিষ্ট কোর মডিউলটির জন্য একটি অনুবাদ ফাইল যুক্ত করি, তবে সেই অনুবাদ ফাইলটি ব্যবহৃত হয় এবং টেমপ্লেট অনুবাদিত দেখায়।

যদি ম্যাগেন্তোর মূল মডিউলটির জন্য কোনও অনুবাদ ফাইল খুঁজে না পাওয়া যায় তবে ম্যাগেন্তো আমার মডিউলটির অনুবাদ ফাইলটি ব্যবহার করার উপায় আছে কি? আমি এখানে আরও কিছু করতে পারি?


আপনি হয় বর্তমান থিম অনুবাদ ফাইলে আপনার অনুবাদগুলি যুক্ত করতে পারেন বা ব্যাকএন্ডে ইনলাইন অনুবাদ ইন্টারফেস ব্যবহার করতে পারেন।
Dmytro জাভালকিন

আমি নিজেই এক্সটেনশনের সাথে অনুবাদগুলি প্যাকেজ করতে চেয়েছিলাম, উপরেরগুলিতে এটি ইনস্টল করা প্রত্যেকের জন্য নির্দেশাবলী যুক্ত করার প্রয়োজন হবে। কোড থেকে আমি এটি করতে পারি এমন কোনও বিকল্প নেই?
মৃদুল আগরওয়াল

4
এটি কীভাবে অনুবাদকে টেম্পলেটতে ব্যবহৃত হয় তার উপর নির্ভর করে, $this->__()বা Mage::helper('...')->__()। মুষ্টির ক্ষেত্রে আপনি ব্লককে আপনার অনুবাদ সহায়ক ব্যবহার করতে বাধ্য করতে পারেন। তবে আমি সাধারণ ক্ষেত্রে বিশ্বাস করি কেবলমাত্র core_translateটেবিলের জন্য ডেটা আপগ্রেড option এখানে আন্তর্জাতিকীকরণের বিবরণগুলি বিশদে বর্ণিত হয়েছে: blog.belvg.com/…
ডমিট্রো জাভালকিন

পাশাপাশি দেখুন সহজে হ্যান্ডস অন সমাধানের জন্য কোনও ব্লক ওভাররাইট করার সময় অনুবাদ হারাতে এড়ানো
hakre

উত্তর:


20

আপনি এটির কাছে কীভাবেই আসুন না কেন, আপনার সমস্যার জন্য একটি "সৃজনশীল" সমাধান প্রয়োজন যা পরবর্তী ডেভস / রক্ষণাবেক্ষণকারীদের ব্যবহারের জন্য বিকাশকারী নোটের উপযুক্ত। প্রথমে কিছু ব্যাকগ্রাউন্ড, তার পরে একটি নোট এবং তার পরে সহজ এবং আমি মনে করি যুক্তিযুক্ত সমাধানটি <--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>

এই পদ্ধতির সম্পর্কে দুর্দান্ত জিনিসটি হ'ল আপনি আপনার ওভাররাইডিং মূল অনুবাদগুলি একটি ফাইলে সংগ্রহ করতে পারেন।


@ ফ্রান্সেসকো এটি করা উচিত। অনুবাদ ক্যাশে সাফ করবেন? যদি এটি কাজ না করে বলে মনে হয় তবে দয়া করে এটি একটি নতুন প্রশ্ন হিসাবে পোস্ট করুন (এবং উত্তরোত্তর জন্য এখানে লিঙ্ক করুন)।
বেনমার্কস

আমি নিশ্চিত করি এটি - এটি এবং _ সহায়তাকারী উভয়ই কার্যকর। আপনি ঠিক বলেছেন, এটি আমার দোষ ছিল (আমি পূর্ববর্তী ভুল মন্তব্যটি সরিয়ে দিয়েছি)
ফ্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.