শিশু থিমের পিতামাতার থিম অনুবাদকে ওভাররাইড করুন


12

আমার একটি প্যারেন্ট থিম রয়েছে যা load_theme_textdomain()বহু ভাষায় অনুবাদিত সমস্ত স্ট্রিং লোড করতে সঠিকভাবে ব্যবহার করে।

তারপরে আমি একটি চাইল্ড থিম তৈরি করেছি যা load_child_theme_textdomain()তার স্ট্রিংগুলির জন্য একই জিনিস অর্জন করতে ব্যবহার করে।

মূল থিমটিতে একটি নির্দিষ্ট ভাষার জন্য কিছু অনুবাদকৃত স্ট্রিং রয়েছে যা আমি চাইল্ড থিমটিতে প্রতিস্থাপন / ওভাররাইড করতে চাই।

আমি জানি তারা যদি কোনও টেম্পলেট ফাইলে থাকে তবে আমি ফাইলটি প্রতিস্থাপন করতে পারি এবং কেবল সেই স্ট্রিংগুলির জন্য টেক্সটডোমেনটি পরিবর্তন করতে পারি, তবে দুর্ভাগ্যক্রমে আমি যেগুলির সাথে কথা বলছি তা অনেক জায়গায় এবং ড্যাশবোর্ডে ব্যবহার করা হয় (সুতরাং কিছু ফিল্টার / ক্রিয়াকলাপের মধ্যে )।

সুতরাং আমার প্রশ্নটি: পিতামাতার টেম্পলেট ফাইল বা ফাংশনগুলি প্রতিস্থাপন না করে চাইল্ড থিমের ভিতরে সেই অনুবাদিত স্ট্রিংগুলি প্রতিস্থাপন করার কোনও উপায় আছে?

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

উত্তর:


9

আমি মনে করি আমি একটি সমাধান খুঁজে পেয়েছি তবে একটু আগে

প্রতিজ্ঞা

load_theme_textdomain()এবং load_child_theme_textdomain()মূলত সমান, কেবলমাত্র তফাতটি তাদের ব্যবহৃত ডিফল্ট পাথ:

  • তারা বর্তমান ভাষাটি (ব্যবহার করে get_locale()) পেয়েছে এবং যুক্তি হিসাবে পাসের পথে আপেক্ষিক .mo ফাইল যুক্ত করে ;
  • তারপরে তারা load_textdomain()পাঠ্য ডোমেন এবং .mo ফাইলের ফলাফলের পথ উভয়কেই আর্গুমেন্ট হিসাবে পাস বলে call

তারপরে load_textdomain.mo ফাইলটি বিশ্বব্যাপী পাঠ্য-ডোমেন ভেরিয়েবলের মধ্যে লোড করে তবে আমরা উত্স থেকে পড়তে পারি :

যদি ডোমেনটি ইতিমধ্যে বিদ্যমান থাকে তবে অনুবাদগুলি একত্রিত করা হবে।

যদি উভয় সেটের একই স্ট্রিং থাকে তবে মূল মান থেকে অনুবাদ নেওয়া হবে।

সুতরাং, আমরা চাই থিম পিতামাতার কেবলমাত্র স্ট্রিংগুলিকে ওভাররাইড / প্রতিস্থাপন করার জন্য , প্যারেন্ট থিমটি তার .mo ফাইলটি লোড করার আগে আমাদের প্যারেন্ট টেক্সটডোমেনের জন্য একটি কাস্টম .mo ফাইল লোড করতে হবে।


সমাধান

শেষ অবধি, আমি কেবলমাত্র চাইল্ড থিম ভাষা ফোল্ডারে মূল পিতা বা মাতার থিমের নাম (কেবল সুবিধার জন্য) এর সাথে একটি ফোল্ডার তৈরি করেছি এবং এর ভিতরে আমার কাস্টম .mo ফাইলগুলি পিতাম পাঠ্য ডোমেনের জন্য (ভাষার জন্য একটি, xx_XX.moফর্মটিতে, xx_XXভাষা কোড যেখানে )।

এবং তারপরে আমি অ্যাকশন functions.phpচলাকালীন আমার চাইল্ড থিম ফাইলে একটি লাইন যুক্ত করেছি after_setup_theme, আমার চাইল্ড থিম পাঠ্য ডোমেনের জন্য। মোম ফাইলটি লোড করে এমন একটিটির কাছে:

add_action( 'after_setup_theme', function () {
    // load custom translation file for the parent theme
    load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
    // load translation file for the child theme
    load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );

যেহেতু functions.phpচাইল্ড থিমের ফাইলটি পিতা-মাতার একের আগে লোড করা হয়েছে, এই স্ট্রিংগুলির পিতামাতার থিম অনুবাদের চেয়ে বেশি প্রাধান্য পাবে (অথবা আমি কেবল add_actionফাংশনের তৃতীয় প্যারামিটারটি ব্যবহার করে অগ্রাধিকার সেট করতে পারতাম )।


দ্রষ্টব্য: আমি এর load_child_theme_textdomainপরিবর্তে ব্যবহার করতে পারতাম load_theme_textdomain, যেমনটি প্রতিবেদনে বলা হয়েছিল এটি একই রকম হত।


4

আপনার চাইল্ড থিম ফোল্ডারে থাকা ভাষা ফাইলগুলি আপনি ব্যবহার করতে পারেন। প্রথমে আপনাকে জানতে হবে যে প্যারেন্ট থিমটি কোন পাঠ্য ডোমেনটি ব্যবহার করছে। তারপরে কেবলমাত্র আপনার ভাষার সাথে .po এবং .mo ফাইলগুলি ফাইলের নাম হিসাবে তৈরি করুন (উদাঃ de_DE.po / de_DE.mo বা nl_NL.po / nl_NL.mo) এবং এগুলিকে আপনার শিশু থিম ডিরেক্টরিতে "ফোল্ডারে" রাখুন উদাহরণ স্বরূপ.

তারপরে আপনি এর সাথে পাঠ্য ডোমেনটি শুরু করতে পারেন load_child_theme_textdomain():

load_child_theme_textdomain( 'the_text_domain', get_stylesheet_directory() . '/languages/' );

নোট করুন যে আপনি মূল থিম পিএইচপি ফাইলগুলির মতো __()বা ফাংশন কলগুলির সন্ধান করে পাঠ্য ডোমেনটি সন্ধান করতে পারেন _e()। দ্বিতীয় প্যারামিটারটি হ'ল পাঠ্য ডোমেন:__( 'Translated text string', 'text_domain' );


ধন্যবাদ @ রেডেলশ্যাপ, শেষ পর্যন্ত আপনি সমাধানটি কাজ করবে যতক্ষণ আপনি সন্তানের পাঠ্যকাজকরের জন্য যে পাত্তাটি ব্যবহার করছেন তার থেকে পিতা মাতা পাঠ্যপুস্তকের জন্য আলাদা ফোল্ডার ব্যবহার করবেন: এটিই ধরা পড়ে! :)
d79

আপনি আপনার শিশু থিমের মধ্যে থেকে একাধিক পাঠ্য ডোমেন লোড করতে পারেন। তবে আপনি একইভাবে সমস্ত অনুবাদগুলির জন্য প্যারেন্ট থিম পাঠ্য ডোমেনটিও ব্যবহার করতে পারেন, কারণ একই পাঠ্য ডোমেনের জন্য ফাইল লোড করার সময় অনুবাদগুলি একত্রিত করা হয়।
20-30 '

0

ওয়ার্ডপ্রেস 5.0.1 এর জন্য একটি 2019 আপডেট।

  1. ফাইলগুলির মধ্যে পিতামাতার বা সন্তানের স্লাগ থাকবে না। উদাহরণস্বরূপ, স্প্যানিশ মেক্সিকান অনুবাদ সরবরাহ করার ক্ষেত্রে চাইল্ড-থিম-নাম / ভাষাগুলি / es_MX.po এবং /child-theme-name/languages/es_MX.mo ফাইল থাকা উচিত
  2. চাইল্ড থিম ফাংশন.এফপিতে নিম্নলিখিত কোড থাকা উচিত। লক্ষ্য করুন যে ফাংশনটি লোডচিচ_থেম_টেক্সটডমাইন () প্রথম প্যারামিটারটি প্যারেন্ট থিম স্লাগ, সন্তানের নয়:
function child_theme_slug_setup() {
    load_child_theme_textdomain( 'parent-theme-slug', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'child_theme_slug_setup' );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.