প্রথম যুক্তিটির t()
আক্ষরিক স্ট্রিং হওয়া দরকার যা বাদ দেয়:
- ভেরিয়েবল, এমনকি কোনও ফাংশনের পরামিতি:
t($description)
- স্ট্রিংগুলির একটি সংক্ষিপ্তকরণ:
t('If you want to add a link, click on' . '<a href="http://example.com">this link</a>.')
- একটি ফাংশন থেকে মানটি ফিরে এসেছে:
t(get_menu_description())
- একটি ধ্রুবক:
t(MYMODULE_MY_WIDGET_TITLE)
,t(MyClass::WIDGET_TITLE)
কারণ হলো, পৃথক্ কয়েক নির্দিষ্ট আঙ্গুলসমূহ (যেমন hook_menu()
, hook_perm()
, hook_permission()
), অনুবাদ করতে স্ট্রিং একটি স্ক্রিপ্ট যে একটি মডিউল এর কোডটি স্ক্যান, কোড খুঁজছেন থেকে পাওয়া যায় যেমন t('This is an example.')
; এটি যখন রানটাইম থেকে নির্ভর করে এমন কোনও মান খুঁজে পায় যেমন ভেরিয়েবলের মান, তখন স্ক্রিপ্টটি বুঝতে সক্ষম হয় না যে স্ট্রিংটি অনুবাদ করা দরকার কারণ ভেরিয়েবলের প্রতিটি সময় কোড কার্যকর হওয়ার সাথে সাথে একটি ভিন্ন মান থাকতে পারে। প্রকৃতপক্ষে, http://localize.drupal.org নীচের মত একটি সতর্কবার্তা রিপোর্ট করেছে, ক্ষেত্রে আর্গুমেন্টটি t()
আক্ষরিক স্ট্রিং নয়:
t()
আক্ষরিক স্ট্রিং হওয়া উচিত প্রথম পরামিতি । সেখানে কোনও ভেরিয়েবল, কনটেন্টেশন, ধ্রুবক বা অন্যান্য অ-আক্ষরিক স্ট্রিং থাকা উচিত। এ t($filter['name'])
লাইন 30 উপর customfilter / customfilter.module হবে।
আপনি যদি একটি গতিশীল মান পাস t()
করে চলেছেন তবে যে স্ক্রিপ্টটি অনুবাদ করতে স্ট্রিংগুলি বের করে সে ক্ষেত্রে কোনও মান বের হবে না; প্রভাবটি হ'ল আর্গুমেন্টটি t()
অনুবাদ করা হবে না, যা t()
ব্যবহারকারীর ইন্টারফেসে ডায়নামিক আউটপুট সরাসরি ব্যবহার এবং ব্যবহার না করার একই প্রভাব রাখে । কেবলমাত্র সেই ক্ষেত্রে যার জন্য স্ট্রিংটি অনুবাদ করা হবে যখন ডায়নামিক স্ট্রিংটি আক্ষরিক স্ট্রিংয়ের সমান হয় যখন কোনও ফাংশন পাস হয় t()
। ধরুন, উদাহরণস্বরূপ, আপনার কাছে এমন একটি গ্রন্থাগার রয়েছে যা দ্রুপালের জন্য ভাবা হয়নি, এতে চলতি মাসের নাম ফিরিয়ে দেওয়ার একটি ফাংশন রয়েছে। নিম্নলিখিত কোড সহ, সেই ফাংশন থেকে প্রত্যাবর্তিত মান অনুবাদ করা হবে।
function mymodule_calendar_page_title() {
return t(Calendar::getCurrentMonth());
}
function mymodule_calendar_translations() {
$translations = array(
t('January'),
t('February'),
t('March'),
t('April'),
t('May'),
t('June'),
t('July'),
t('August'),
t('September'),
t('October'),
t('November'),
t('December'),
);
}
mymodule_calendar_translations()
কল করার দরকার নেই, বা কোনও মান ফেরত দেওয়ার দরকার নেই। যখন মডিউলটির কোডটি বিশ্লেষণ করা t()
হবে , তখন কলটি সেই কোড থেকে পাওয়া যাবে যেটিতে পাঠানো আক্ষরিক স্ট্রিংগুলি সন্ধান করে t()
।
একটি ডেটাবেস টেবিল এবং এর ক্ষেত্রগুলির জন্য প্রদত্ত বিবরণটি অনুবাদ করা তখন আপনার যা করা উচিত তা নয়, কারণ ড্রুপাল কোর মডিউলগুলির কোনও এটিই করে না; উদাহরণস্বরূপ, নোড_সেমিমা () এ নিম্নলিখিত কোড রয়েছে:
function node_schema() {
$schema['node'] = array(
'description' => 'The base table for nodes.',
'fields' => array(
'nid' => array(
'description' => 'The primary identifier for a node.',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'vid' => array(
'description' => 'The current {node_revision}.vid version identifier.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
// …
);
// …
);
// …
return $schema;
}
যে রিপোর্টটি যে t()
কোনও ড্রুপাল কোর বাস্তবায়নের কল কল সরিয়ে দেওয়ার কারণটি সমস্ত স্কিমা বিবরণ থেকে রিমুভ টি ()hook_schema()
হ'ল , যা ওয়েবচিক (ড্রুপাল co সহ- রক্ষণকারী) দ্বারা খোলা হয়েছে ।
স্কেজেডে, আমরা t()
স্কিমা বিবরণীর চারপাশে একটি দীর্ঘ দীর্ঘ আলোচনা করেছি এবং এটি টেবিলে প্রত্যেকের sensকমত্য ছিল (যিনি ড্রাইস অন্তর্ভুক্ত করেছিলেন) যেগুলি t()
এই বিবরণগুলি থেকে সরানো উচিত। তারা বিষয়গুলিকে জগাখিচু করে দেয় কারণ t()
এটি প্রথম দিকে পাওয়া যায় না এবং লোকেরা আলোচনা করেছিল যে কেউ জিনিসগুলির প্রযুক্তিগত বিবরণী অনুবাদ করতে সময় নেবে না এবং আমরা কোড মন্তব্যগুলি অনুবাদ করি না বলে এটি সত্যিকার অর্থে আসে না, কারণ উদাহরণ।
Drupal এর 7 করার জন্য একটি Drupal এর 6 মডিউল রূপান্তর সম্পর্কে নিবন্ধ, ডেডিকেটেড অনুচ্ছেদ আছে: স্কিমা বিবরণ আর অনূদিত হয় ।