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()
।
डेटाबेस तालिका और उसके क्षेत्रों के लिए दिए गए विवरण का अनुवाद करना कुछ ऐसा नहीं है जो आपको करना चाहिए, क्योंकि कोई भी ड्रुपल कोर मॉड्यूल ऐसा नहीं करता है; उदाहरण के लिए, node_schema () में निम्नलिखित कोड शामिल हैं:
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()
से किसी Drupal कोर कार्यान्वयन से hook_schema()
है सभी स्कीमा विवरण से निकालें टी () , जिसके द्वारा खुला कर दिया गया है webchick (Drupal 7 सह मेंटेनर)।
Szeged में, t()
स्कीमा विवरणों के बारे में हमारे बीच एक बड़ी लंबी चर्चा हुई और यह मेज पर सभी की सहमति थी (जिन्होंने ड्रिसेस को शामिल किया) t()
को इन विवरणों से हटा दिया जाना चाहिए। वे चीजों को गड़बड़ करते हैं क्योंकि t()
यह जल्दी उपलब्ध नहीं है, और लोगों ने चर्चा की कि कोई भी सामान के तकनीकी विवरणों का अनुवाद करने के लिए समय नहीं ले रहा है, और यह वास्तव में कोई मतलब नहीं है क्योंकि हम कोड टिप्पणियों का अनुवाद नहीं करते हैं, क्योंकि उदाहरण।
Drupal 7 में Drupal 6 मॉड्यूल को परिवर्तित करने के बारे में लेख, एक समर्पित पैराग्राफ है: स्कीमा विवरण अब अनुवादित नहीं हैं ।