HTML এর মধ্যে __ () বা _e () ভাষার অনুবাদ স্ট্রিং রয়েছে


24

অনুবাদ স্ট্রিং তৈরির যথাযথ পদ্ধতি কী?

উদাহরণ স্বরূপ,

echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )

স্ট্রিং এবং / অথবা এইচটিএমএল যুক্ত করা কি ঠিক আছে বা এটি আগে করা উচিত এবং তারপরে অনুবাদ দ্বারা চালানো উচিত:

$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html ); 

উত্তর:


41

__()ফাংশনে একটি দ্বিতীয় যুক্তি রয়েছে । আপনি আপনার প্লাগইন বা থিমের জন্য যে ডোমেনটি ব্যবহার করছেন সেটি সেট করা উচিত। নীচের উদাহরণগুলিতে আমি ব্যবহার করি 'text_domain'। আপনার ডোমেন স্ট্রিংটি অনন্য হওয়া উচিত। এটি অন্য কোনও ডোমেন স্ট্রিংয়ের সাথে মেলে না। কোনও পাঠ্য ডোমেন যুক্তিটি 'default'ওয়ার্ডপ্রেস ডোমেন নামের ডিফল্ট ব্যবহার না করা । আরো বিস্তারিত জানার জন্য লিঙ্কটি দেখুন।

সর্বদা স্ট্রিং ( 'text_domain') ব্যবহার করুন । এর মধ্যে স্ট্রিং সহ কোনও ভেরিয়েবল, ফাংশন বা ধ্রুবক ব্যবহার করবেন না। বেশিরভাগ (সমস্ত?) অনুবাদ প্রোগ্রামগুলি সেখানে স্ট্রিং ছাড়া এটি দেখতে পাবে না।

তোমার গোপন সংকেত:

echo __( 'Hello ' . $first . ' you own me money.' );

স্ট্রিংয়ে ভেরিয়েবলগুলি অন্তর্ভুক্ত করবেন না।

একটি ভাল উপায়:

echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

বা শুধু:

printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

%sস্থানধারক মানুষের অনুবাদক যে একটি স্ট্রিং সেখানে যাচ্ছে বলে। %dসংখ্যার জন্য ব্যবহার করুন । এছাড়াও রয়েছে অন্যান্য প্লেসহোল্ডার

(এই বাক্যটি ব্যাকরণগতভাবে ভুল ইংরেজি either হয় আপনি ব্যবহার করতে চেয়েছিলেন 'Hello %s, you owe me money.'বা 'Hello %s, you own my money.'তার অর্থ নির্ভর করে Use )


তোমার গোপন সংকেত:

$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';

এইচটিএমএল অনুবাদ করবেন না। এটি যে কোনও ভাষায় সমান।

একটি ভাল উপায়:

$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) .  $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );

বা এটিকে একাধিক লাইনে বিভক্ত করুন:

$html = sprintf(
    '<div><p>%s</p><p>%s</p></div>',
    __( 'Top: ', 'text_domain' ) .  $t_margin,
    __( 'Bottom: ', 'text_domain' ) . $b_margin
);

টপ এবং বটম কী তা যদি আপত্তি না থাকে তবে আপনি _x()এই শর্তগুলির প্রসঙ্গটি ব্যাখ্যা করতে ব্যবহার করতে পারেন ।


আপনি এখানে অন্যান্য অনুবাদগুলি খুঁজে পেতে পারেন: আন্তর্জাতিকীকরণ: আপনি সম্ভবত এটি ভুল করছেন


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

সম্পর্কিত নয়, তবে লক্ষণীয়: textdomainআক্ষরিক স্ট্রিং হতে হবে এটি কোনও পরিবর্তনশীল / ধ্রুবক / সম্পত্তি হতে পারে না।
brasofilo

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

জন্য +1 sprintf()। অনুবাদযোগ্য স্ট্রিংটিতে এইচটিএমএল থাকার প্রায় এটিই উপায়।
হেলগাটিভিকিং

আমি দেখতে পাচ্ছি না যে কীভাবে ব্যবহার sprintf()আরও কিছু পরিষ্কার চেহারা ছাড়া অন্য কোনও উপায়ে সহায়তা করে। তোমার মত এইচটিএমএল ভিতরে সঙ্গে একটি বাক্য যদি Some text with a <strong>strong</strong> word inside.এটা কিভাবে সম্ভব সামগ্রিকভাবে বাক্য অনুবাদ এবং অনুবাদ না করা হয় Some text with a, strongএবং word inside(যা কোন জ্ঞান করে তোলে) স্বতন্ত্রভাবে।
phpheini

4

আমি ইতিমধ্যে স্ট্রিংয়ের মধ্যে ভেরিয়েবলগুলির বিষয়টি সম্বোধন করব না।

আপনি আপনার স্ট্রিং স্থির রাখতে চান, যার অর্থ সামগ্রীটি পরিবর্তন হবে না। আপনি অপ্রয়োজনীয় এইচটিএমএলও রাখতে চান।

__( '<p>Hello World!</p>' );
__( '<h1>Hello World!</h1>' );

মূলত একই পাঠ্যটির জন্য উপরেরগুলি আপনার সারণীতে দুটি সারি নেবে। এগুলি আবার লিখতে পারেন:

'<p>' . __( 'Hello World!' ) . '</p>'
'<h1>' . __( 'Hello World!' ) . '</h1>'

এটি একটি একক সারিতে হ্রাস করা হচ্ছে।

কখনও কখনও পাঠ্যের এইচটিএমএল অনিবার্য। উদাহরণস্বরূপ নিন:

__( 'You currently owe <b>%s</b> dollars' );

যেহেতু ভাষা ব্যাকরণগত, তাই পাঠ্যকে বিভক্ত করা যিনি অনুবাদ করছেন তাদের পক্ষে সমস্যা তৈরি হবে।

চলতি নিয়ম. এইচটিএমএল পাঠ্য বিন্যাসের ট্যাগগুলি মধ্য বাক্যটি ঠিক আছে। এইচটিএমএল দিয়ে শুরু এবং শেষের বাক্যগুলি কেবল স্থান নষ্ট করে।


শেষ উদাহরণে, আপনি theোকানো আর্গুমেন্টের চারপাশে গা bold় ট্যাগগুলি মোড়ানো করতে পারেন "<b>$string</b>"। তারপরে আপনি ব্যবহার করতে পারেন 'You currently owe %s dollars'। তবে যদি আপনি এটি _n()কোনও %dস্থানধারকের প্রয়োজন হয় এমন ফাংশনটির সাথে ব্যবহার করেন তবে এটি থাকতে পারে ।
চার্লস ক্লার্কসন

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