ডিজাইন টেমপ্লেট প্যাকেজ সিএসভি'র অনুবাদগুলি কীভাবে কার্যকর করা যায়? প্রতিধ্বনি $ এটি -> __ ('পাঠ্য') কীভাবে কাজ করে?


29

আমার মতো ডিজাইনের প্যাকেজ সেটআপ রয়েছে:

design/frontend/package_name/theme_name/locale/

যার অধীনে আমি

de_DE, en_GBইত্যাদি, যার অধীনে আমার কাছে translate.csvবিভিন্ন স্ট্রিংয়ের সাথে সংশ্লিষ্ট ফাইল রয়েছে:"Key", "Translation"

আমি আমার থিমটি ব্যবহার করে বিভিন্ন স্ট্রিং প্রয়োগ করার চেষ্টা করছি echo $this->__('Text')

তবে, এটি কাজ করছে বলে মনে হচ্ছে না (আমি কেবল ('Text')প্রদর্শিত পংক্তিতে প্রদর্শিত দেখি )। আমি মনে করি যে ম্যাজেন্টো যখন অনুবাদ হতে সিএসভি থেকে স্ট্রিং টানছে তখন আমি কিছু মৌলিক বোঝার অনুপস্থিত। এই সিএসভি ফাইলগুলি কীভাবে কাজ করা যায় তা দয়া করে কেউ ব্যাখ্যা করতে পারেন?


আপনি ম্যাজেন্টোর কোন সংস্করণটি চালাচ্ছেন?
ফিলিঙ্কল

আমি ম্যাজেন্টো ভি: 1.7.0.2 ব্যবহার করছি
ওয়াফল

আপনি কি এটি কোনও সাধারণ ম্যাজেন্টো টেম্পলেট ফাইলের বাইরে কল করছেন? হতে পারে আপনাকে সহায়ক শ্রেণিকে কল করতে হবে এবং এটিকে <? পিএইচপি ইকো ম্যাজ :: সহায়ক ('কোর') -> __ ('পাঠ্য') এর মতো করে তৈরি করতে হবে; ?> এছাড়াও সিস্টেম> কনফিগারেশন> বিকাশকারী
SaveTheMage

উত্তর:


84

টি এল; ডিআর

আপনি যদি অনুবাদ কীভাবে কাজ করে তার বিশদটি সম্পর্কে আগ্রহী না
হন তবে আপনার অনুবাদটি নীচের অংশে কাজ করছে না কি তা যাচাই করা উচিত , বিশেষত
মডিউল স্কোপ অনুবাদ সংঘাতের জন্য সাবসেশন সলিউশন

Magento অনুবাদ ওভারভিউ

ম্যাজেন্টো অনুবাদ উত্সগুলিকে অগ্রাধিকার দেয় (সর্বোচ্চ থেকে নীচে):

  1. ডিবি ( core_translateটেবিল)
  2. থিম translate.csvফাইল
  3. app/locale/*/*.csvফাইল

অনুবাদ অ্যারে কীভাবে নির্মিত?

মডিউল অনুবাদ

app/locale/*/*.csvসক্রিয় মডিউল etc/config.xmlফাইলগুলি থেকে রেফারেন্স পাওয়া প্রথমে সমস্ত ফাইল পার্স করা হয়। এখানে প্রক্রিয়াটির একটি পদচারণা রয়েছে:
ধরে নেওয়া যাক ম্যাগেন্টো নিম্নলিখিত config.xmlবিভাগটি আবিষ্কার করেছে :

<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
    <translate>
        <modules>
            <Mage_Catalog>
                <files>
                    <default>Mage_Catalog.csv</default>
                </files>
            </Mage_Catalog>
        </modules>
    </translate>
</frontend>

এবং সেই ফাইলটিতে, নিম্নলিখিত স্টোর ভিউয়ের জন্য কনফিগার করা লোকালের জন্য নিম্নলিখিত অনুবাদটি নির্দিষ্ট করা হয়েছে:

"AAA","BBB"

এই পরিস্থিতিতে, ম্যাজেন্টো অনুবাদ অ্যারেতে নিম্নলিখিত রেকর্ডগুলি তৈরি করে:

array(
    "AAA" => "BBB",
    "Mage_Catalog::AAA" => "BBB"
)

দ্বিতীয় মানটি হল মডিউল স্কোপ অনুবাদ । প্রিফিক্সড মডিউলটির নামটি অনুবাদ ফাইলের ঘোষণার সমন্বিত কনফিগার এক্সএমএল নোড থেকে নেওয়া হয়েছে।

একই অনুবাদ করে আবার নির্দিষ্ট করা থাকে দ্বিতীয় মডিউল ফাইল , যেমন মধ্যে Some_Module.csvঅনুবাদ "AAA","CCC", এটা হবে প্রতিস্থাপন করতে"AAA" সেটিং। পরিবর্তে, এটি কেবলমাত্র দ্বিতীয় মডিউলটির নাম সহ একটি নতুন রেকর্ড যুক্ত করবে "Some_Module::AAA" => "CCC"

বিকাশকারী মোড সক্ষম থাকলে, এটি অন্য মডিউল অনুবাদে একই কী সহ দ্বিতীয় রেকর্ড খুঁজে পেলে এটি "AAA"রেকর্ডটি আনসেট করে দেয়। এটি উন্নয়নের সময় মডিউল অনুবাদ সংঘাতগুলি চিহ্নিত করা সহজ করে তোলে।

থিম অনুবাদ

দ্বিতীয়ত, translate.csvবর্তমান লোকেলের থিম ফ্যালব্যাকের প্রথম ফাইল থেকে বোঝানো অনুবাদগুলি কেবল অনুবাদ অ্যারেতে বিদ্যমান রেকর্ডগুলি প্রতিস্থাপন করে।
সুতরাং পূর্ববর্তী উদাহরণ অব্যাহত রেখে, একটি translate.csvরেকর্ড "AAA","DDD"নিম্নলিখিত অনুবাদ ডেটা বাড়ে:

array(
    "AAA" => "DDD", // This is overwritten by the translate.csv file
    "Mage_Catalog::AAA" => "BBB",
    "Some_Module::AAA" => "CCC"
)

অবশ্যই translate.csvনতুন অনুবাদ কীগুলির সাথে রেকর্ডগুলি কেবল অ্যারেতে যুক্ত করা হয়।

ডাটাবেস অনুবাদ

core_translateসারণী থেকে অনুবাদগুলি মূলত থিম অনুবাদগুলির মতোই অনুবাদ অ্যারেতে মার্জ করা হয়।
মডিউল বা থিম অনুবাদ থেকে বিদ্যমান কীগুলি ডাটাবেস রেকর্ডে ওভাররাইট করা হয়, নতুন যুক্ত হয়।

অনুবাদ চেহারা

__()পদ্ধতিটি যখন ডাকা হয় তখন ম্যাগেন্টো প্রথমে বর্তমান মডিউলের সাথে মিলছে অ্যারে অনুবাদ অনুবাদ সন্ধান করে।
বর্তমান মডিউলটি শ্রেণীর নাম অনুসারে শ্রেণীর নাম দ্বারা নির্ধারিত হয় __()। উদাহরণস্বরূপ, ব্লকগুলিতে দায়বদ্ধ পদ্ধতিটি দেখতে এরকম দেখাচ্ছে:

// Excerpt from Mage/Core/Block/Abstract.php
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;
}

সহায়ক এবং নিয়ন্ত্রণকারীদের পদ্ধতিগুলি যথাযথভাবে কাজ করে।

উদাহরণস্বরূপ চেহারা পরিস্থিতি

উদাহরণস্বরূপ, ধরা যাক $this->__('AAA')একটি টেমপ্লেট ফাইলে ডাকা হয়। যদি সম্পর্কিত ব্লকের ধরণ থাকে তবে Mage_Core_Block_Templateম্যাজেন্টো প্রথমে একটি Mage_Core::AAAরেকর্ড পরীক্ষা করবে । যদি এটি এটি না খুঁজে পায় তবে এটি কীটির জন্য অনুবাদে ফিরে আসবে AAA
উদাহরণের দৃশ্যে এটি অনুবাদে DDD( translate.csvফাইল থেকে ) ফলাফল করবে will

একটি ভিন্ন দৃশ্যে সম্পর্কিত ব্লক হতে পারে Mage_Catalog_Block_Product_View। এই ক্ষেত্রে ম্যাজেন্টো প্রথমে একটি অনুবাদ রেকর্ডের জন্য পরীক্ষা Mage_Catalog::AAAকরত এবং অনুবাদটি খুঁজে পেত AAA

সুতরাং কার্যকরভাবে, মডিউল স্কোপ অনুবাদগুলির উচ্চতর অগ্রাধিকার থাকে তারপরে যে কোনও জেনেরিক অনুবাদ। কোন অনুবাদটি ব্যবহৃত হয় তা নির্ভর করে ক্লাশটি __()পদ্ধতিটি কল করা থেকে কোন মডিউল ।

আপনার অনুবাদটি কাজ করছে না তা যাচাই করবেন

যদি কোনও translate.csvফাইল থেকে আপনার অনুবাদ ব্যবহার না করা হয় তবে এই চেকলিস্টটি অনুসরণ করুন:

  1. অনুবাদ ক্যাশেটি কি বন্ধ / রিফ্রেশ হয়েছে? (সমাধান: ক্যাশে সাফ করুন)
  2. কি translate.csvফাইল বর্তমান বাজারের জন্য থিম ফলব্যাক সত্যিই? (সমাধান: থিম কনফিগারেশন ঠিক করুন)
  3. core_translateসারণীতে অনুবাদটির জন্য কি কোনও বিরোধী রেকর্ড রয়েছে? (সমাধান: এ থেকে বিরোধী রেকর্ডটি সরিয়ে দিন core_translate)
  4. পূর্ববর্তী সমস্ত পয়েন্ট যদি কারণ না হয় তবে আলাদা মডিউল থেকে একটি বিরোধী অনুবাদ থাকতে হবে। (সমাধান: নীচে দেখুন)

মডিউল স্কোপ অনুবাদ সংঘাতের জন্য সমাধান

আপনি যদি চূড়ান্ত কেসটি সত্য বলে মনে করেন, কেবল অনুবাদটি মডিউলটির মডিউল স্কোপ translate.csv সহ অনুবাদটি আপনার সাথে দ্বিতীয়বার যুক্ত করুন ।
উদাহরণস্বরূপ, আপনি যদি সর্বদা থিম অনুবাদের মাধ্যমে AAAঅনুবাদ করতে চান তবে আপনি এটিতে এটি করতে পারেন : DDDtranslate.csv

"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"

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

অতিরিক্ত নোট

ইনলাইন অনুবাদ

ম্যাজেন্টোর ইনলাইন অনুবাদ বৈশিষ্ট্যটি core_translateমডিউল স্কোপ উপসর্গ ব্যবহার করে সারণিতে কাস্টম অনুবাদগুলি যুক্ত করে ।

অনুন্নত সহাবস্থানযোগ্যতা

থিম অনুবাদগুলির অগ্রাধিকারটি ম্যাগান্টো সংস্করণ ১.৩ বা তার বেশি পর্যন্ত ডাটাবেসের অনুবাদগুলিতে উচ্চতর ব্যবহৃত হত।

এক্সএমএল অনুবাদ

Magento কখনও কখনও মূল্যায়ন translate=""আর্গুমেন্ট config.xml, system.xmlও লেআউট এক্সএমএল শিশু নোড মান অনুবাদ করতে। অনুবাদ ক্ষেত্রের জন্য মডিউলটি নির্দিষ্ট করতে যুক্তি
ব্যবহার করে কোনও সহায়ক শ্রেণি নির্দিষ্ট করা যেতে পারে module=""
যদি moduleএক্সএমএলে কোনও যুক্তি নির্দিষ্ট না করা থাকে, তবে core/dataসহায়তাকারী শিশু নোডের মানগুলি অনুবাদ করতে ব্যবহৃত হয়।

আরো তথ্য

আমি স্বীকার করি যে আমি এই পোস্টে ম্যাজেন্টো অনুবাদ প্রক্রিয়াটির কিছু বিবরণ পেয়েছি, তবে কেবলমাত্র আমি খুব বেশি তথ্য চাই না বলেই।

  • অনুবাদ অ্যারেটি তৈরি করার সময় কিছু প্রযুক্তিগত বিশদ
  • মডিউলগুলির জন্য অতিরিক্ত অনুবাদ ফাইলগুলি ব্যবহার করার সম্ভাবনা
  • core_translateরেকর্ডগুলির জন্য স্টোর দেখার সুযোগ
  • অনুবাদের বিভিন্ন পদ্ধতি ব্যবহার করে পেশাদার এবং কনস

আরও তথ্যের প্রয়োজন হলে দয়া করে একটি পৃথক প্রশ্ন জিজ্ঞাসা করুন।


1
ঠিক আছে, আমি অবিশ্বাস্যভাবে সবাইকে দুঃখিত, কিন্তু অন্য কেউ আমাকে কিছু না বলেই ক্যাশে চালু করেছেন ... সম্ভবত এই মুহুর্তে আমি অনুবাদগুলিতে কাজ শুরু করেছি। দীর্ঘশ্বাস. যদিও এই তথ্যটি ম্যাজেন্টোতে অনুবাদ প্রক্রিয়াটি সম্পর্কে আমার বোঝার জন্য অবিশ্বাস্যরূপে সহায়ক ছিল। অনেক অনেক ধন্যবাদ, এটি __()ফাংশনটি কীভাবে কাজ করে সে সম্পর্কে আমার সমস্ত প্রশ্নের উত্তর অবশ্যই দেওয়া হয়েছিল ।
ওয়াফল

ম্যাজেন্টোর অনুবাদ আর্কিটেকচারের খুব সুন্দর ওভারভিউটি এখানে পাওয়া যাবে: gist.github.com/antonmakarenko/7538216
thordan

@ বিনাই, দুর্দান্ত উত্তর। এটি সত্যিই আমাকে এখানে একটি প্রশ্ন পোস্ট করে এমন একটি অনুবাদ সমস্যার সমাধান করতে সহায়তা করেছে । আশ্চর্যজনকভাবে Mage_Tax আমার থিমের অনুবাদগুলির সাথে সাংঘর্ষিক ছিল যা ম্যাজেন্টো অনুবাদকে অগ্রাধিকার দেওয়ার জন্য বোঝানো হয়েছে তার বিপরীতে মনে হয়
হোলি

14

অনুবাদ সূত্র

: অনুবাদ বিভিন্ন সূত্র থেকে মার্জ করা হয়েছে মডিউল অনুবাদের নিজ নিজ XML ফাইল থেকে থিম অনুবাদের থেকে translate.csvবর্তমান থিম, এবং ইনলাইন অনুবাদের ডাটাবেস থেকে।

অনুবাদগুলি কঠোরভাবে মডিউল নির্দিষ্ট হতে পারে (কেবলমাত্র মডিউলটির মধ্যে বৈধ), এটি সর্বদা ইনলাইন অনুবাদগুলির জন্য এবং themeচ্ছিকভাবে থিম অনুবাদগুলির ক্ষেত্রে ক্ষেত্রে থাকে। এটি অর্জন করতে, আপনাকে সেগুলি অনুবাদ সিএসভিতে মডিউল উপসর্গ দিয়ে সংজ্ঞায়িত করতে হবে:

"Mage_Catalog::Add to cart","In die Einkaufstüte legen"

মডিউলগুলি থেকে অনুবাদ (যেমন Mage_Catalog.csv) কেবলমাত্র কঠোরভাবে মডিউল নির্দিষ্ট, যদি ডেভেলপার মোড চালু থাকে। অন্যথায় অনুবাদ fom প্রথম লোড হওয়া মডিউলটি সমস্ত মডিউলগুলির জন্য বিশ্বব্যাপী ব্যবহৃত হয় যা পাঠ্যের জন্য নিজস্ব অনুবাদ নেই।

আমি একটি ফ্লো চার্ট একত্রিত করেছি যা দেখায় যে কীভাবে বিভিন্ন উত্স থেকে প্রতিটি পাঠ্য অনুবাদ অ্যারেতে একত্রিত হয়:

অনুবাদ মার্জ data অনুবাদ অ্যারে হয়

এভিল এজ কেস

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

অনুবাদ চেহারা

কোন মডিউলের জন্য অনুবাদটি সন্ধান করা হয়েছে, শ্রেণীর মডিউলটির উপর নির্ভর করে, যার উপর পদ্ধতিটি __()বলা হয়েছে। তারপরে, অনুবাদ অ্যারেতে অনুসন্ধানটি নিম্নরূপ:

অনুবাদ চেহারা data অনুবাদ অ্যারে হয়

ব্যাপ্তি সংজ্ঞা

এক শ্রেণীর জন্য মডিউলটি পরিবর্তন করার সম্ভাবনা রয়েছে, যা ব্লক এবং সাহায্যকারীদের জন্য বিশেষভাবে কার্যকর। সেরা অনুশীলনটি হ'ল মূল শ্রেণীর পুনর্লিখনের সময় মডিউলটির নামটি সর্বদা সুস্পষ্টভাবে সেট করা। এটি কীভাবে কাজ করে, সহায়ক, ব্লক এবং কনটোলারগুলির মধ্যে পরিবর্তিত হয় (ম্যাজেন্টো সিই 1.9.1 হিসাবে)

একটি ব্লকের উদাহরণ:

class IntegerNet_AwesomeModule_Block_Catalog_Product extends Mage_Catalog_Block_Product
{
    public function getModuleName()
    {
        return 'Mage_Catalog';
    }
}

ব্লকগুলির জন্য, আপনি module_nameলেআউট এক্সএমএলে প্যারামিটারটি সেট করতে পারেন :

<block type="integernet_awesomemodule/catalog_product" name="test" module_name="Mage_Catalog" />

সহায়তার জন্য উদাহরণ:

class IntegerNet_AwesomeModule_Helper_Catalog extends Mage_Catalog_Helper_Data
{
    protected $_moduleName = 'Mage_Catalog';
}

ফ্রন্টএন্ড কন্ট্রোলারগুলির জন্য, আপনি _realModuleNameঅ্যাডমিন কন্ট্রোলারদের জন্য সম্পত্তি নির্ধারণ করতে পারেন , _usedModuleName(ধারাবাহিকতার জন্য yay)

অন্যান্য অনুবাদ পদ্ধতি

এক্সএমএল ফাইলগুলিতে (কনফিগারেশন। এক্সএমএল, সিস্টেম.এক্সএমএল, লেআউট) আপনি উল্লেখ করতে পারেন নোডগুলি translateঅ্যাট্রিবিউট দিয়ে অনুবাদ করা উচিত কিনা । moduleআপনার সুযোগটি নির্দিষ্ট করার জন্য বৈশিষ্ট্যটি যুক্ত করা উচিত , তবে এখানে মানটি হেল্পার ওরফে হতে হবে , উপরের মতো মডিউলটির নাম নয়।

<one_column module="page" translate="label">
    <label>1 column</label>
    <template>page/1column.phtml</template>
    <layout_handle>page_one_column</layout_handle>
    <is_default>1</is_default>
</one_column>

জাভাস্ক্রিপ্টে আপনি Translatorবিশ্বব্যাপী উপলভ্য অবজেক্টটি ব্যবহার করতে পারেন :

Translator.translate('Please wait, loading...');

তবে আপনাকে জাভাস্ক্রিপ্টে যে অনুবাদগুলি ব্যবহার করতে চান তা অনুবাদক অবজেক্টের জন্য উপলব্ধ করতে হবে। এটি মডিউলগুলির ডিরেক্টরিতে jstranslator.xmlফাইলগুলির মাধ্যমে করা হয় etc

<?xml version="1.0"?>
<jstranslator>
    <loading translate="message" module="core">
        <message>Please wait, loading...</message>
    </loading>
</jstranslator>

loadingযে কোনও স্ট্রিং হতে পারে তবে বিশ্বব্যাপী অনন্য হতে হবে। translateএবং moduleবৈশিষ্ট্যাবলী অন্যান্য XML ফাইল হিসেবে ব্যবহার করা হয়। এর মান messageএবং এর অনুবাদটি জেএস অনুবাদক অবজেক্টে যুক্ত করা হয়েছে।

সমস্যা সমাধান

এমনকি যদি আপনি সমস্ত জটিল বিধিগুলি জানেন তবে কিছু অনুবাদ কেন এটি (বা কাজ করছে না) সে হিসাবে কাজ করছে তা কখনও কখনও দেখা শক্ত। এটিকে আরও সহজ করার জন্য, আমি একটি "অনুবাদ ইঙ্গিতগুলি" মডিউল তৈরি করেছি যা দেখায় যে অনুবাদগুলি কোথা থেকে আসছে:

এটি এখানে পান: https://github.com/schmengler/ ট্রান্সলেশনহিন্টস

স্ক্রীনশট: অনুবাদ ইঙ্গিত


বিষয়টিতে আমার ব্লগ পোস্ট এবং স্লাইডগুলির উপর ভিত্তি করে:


2
আমি আশা করি যে আমার বিনামূল্যে ইয়ারিও ইমেলওভারাইড মডিউলটি কাস্টম সিএসভি মডিউল ফাইলগুলিকেও থিমটিতে রাখার অনুমতি দেবে উল্লেখ করে আমি স্প্যামিং করছি না। শুধু অনুবাদ সিএসভি নয়।
জিস রিটসমা

6

আপনি আপনার ক্যাশে সাফ করেছেন?

আপনার সিস্টেমটি আপনি যে ফাইলটি পরীক্ষা করছেন তার লোকেলে সেট করা আছে?

ম্যাজেন্টো যখন থিম অনুবাদটি লোড করে তখন এটি যে ফাইলটি সন্ধান করছে তা সন্ধান করতে পারে (কিছু অস্থায়ী var_dump; প্রস্থান; বিবৃতিতে সহায়তা করা উচিত)।

#File: app/code/core/Mage/Core/Model/Translate.php
protected function _loadThemeTranslation($forceReload = false)
{
    $file = Mage::getDesign()->getLocaleFileName('translate.csv');
    $this->_addData($this->_getFileData($file), false, $forceReload);
    return $this;
}

পারি _getTranslatedStringপদ্ধতি খুঁজে কি এটা তথ্য অ্যারের মধ্যে খুঁজছে?

#File: app/code/core/Mage/Core/Model/Translate.php
protected function _getTranslatedString($text, $code)
{
    $translated = '';
    if (array_key_exists($code, $this->getData())) {
        $translated = $this->_data[$code];
    }
    elseif (array_key_exists($text, $this->getData())) {
        $translated = $this->_data[$text];
    }
    else {
        $translated = $text;
    }
    return $translated;
}

কোনও ক্যাশে সক্রিয় নেই, আমার সিস্টেমটি লোকালে সেট করা আছে কিনা তা আমি নিশ্চিত নই, তবে অনুবাদগুলি নির্দিষ্ট টেম্পলেট ফাইলগুলিতে সেই অনুযায়ী কাজ করে (দোকান পরিবর্তন করে)। উদাহরণস্বরূপ, আমার একটি স্ট্রিং translate.csvসঠিকভাবে অনুবাদ করেছে /app/design/frontend/package_name/default/template/catalog/product/view.phtmlতবে তা নয়/app/design/frontend/package_name/default/template/page/html/topmenu.phtml
ওয়াফল

আপনি ঠিক বলেছেন, কেউ আমাকে না বলেই ক্যাশে অন করেছেন। ওফ, আমার ক্ষমাপ্রার্থী এবং তথ্যের জন্য আপনাকে ধন্যবাদ!
ওয়াফল

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