İlk argüman t()
, aşağıdakileri içermeyen gerçek bir dize olmalıdır:
- değişkenler, hatta bir fonksiyonun parametreleri:
t($description)
- dizelerin birleşimi:
t('If you want to add a link, click on' . '<a href="http://example.com">this link</a>.')
- bir işlevden döndürülen değer:
t(get_menu_description())
- sabit:
t(MYMODULE_MY_WIDGET_TITLE)
,t(MyClass::WIDGET_TITLE)
Nedeni, o ayrı (örneğin belirli birkaç kanca hook_menu()
, hook_perm()
, hook_permission()
), çevirmek dize kod arayan bir modülün kodunu taramak bir komut dosyasından bulunurlar gibi t('This is an example.')
; bir değişkenin değeri gibi çalışma süresine bağlı bir değer bulduğunda, komut dosyası, dönüştürülmesi gereken dizenin hangisi olduğunu anlayamaz, çünkü bir değişken kod her çalıştırıldığında farklı bir değer içerebilir. Aslında, http://localize.drupal.org , aşağıdakine benzer bir uyarı bildirir, bunun için argüman t()
değişmez bir dize değilse:
İlk parametre t()
değişmez bir dize olmalıdır. Burada değişkenler, birleştirme, sabitler veya diğer değişmez dizeler olmamalıdır. At t($filter['name'])
hattı 30 CustomFilter / customfilter.module içinde.
Dinamik bir değer t()
iletiyorsanız, çevrilecek dizeleri ayıklayan komut dosyası herhangi bir değer çıkarmaz; etki, dinamik çıktıyı doğrudan kullanıcı arayüzünde t()
kullanmama t()
ve kullanmama ile aynı etkiye sahip olan iletilen argümanın çevrilmeyeceğidir . Dizenin çevrileceği tek durum, dinamik dizenin bir işlevin geçirdiği değişmez dizeye eşit olmasıdır t()
. Örneğin, Drupal için düşünülmeyen ve geçerli ayın adını döndüren bir işlev içeren bir kitaplığınız olduğunu varsayalım. Aşağıdaki kodla, bu işlevden döndürülen değer çevrilir.
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()
herhangi bir değer döndürmek için çağrılması gerekmez. Modülün kodu ayrıştırılacaksa, çağrı, t()
geçirilen değişmez dizeleri arayan koddan bulunacaktır t()
.
Bir veritabanı tablosu ve alanları için verilen açıklamayı çevirmek, Drupal çekirdek modüllerinin hiçbiri bunu yapmadığı için yapmanız gereken bir şey değildir; örneğin, node_schema () aşağıdaki kodu içerir:
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;
}
Çağrıları ayrılmasına neden rapor t()
herhangi Drupal çekirdek uygulamalarından hook_schema()
olan tüm şema tariflerden Kaldır t () tarafından açık olmuştur webchick (Drupal 7 eş sürdürme).
Szeged'de t()
şema açıklamaları hakkında uzun ve uzun bir tartışma yaptık ve masadaki herkesin (Dries'i içeren) t()
bu açıklamalardan çıkarılması gereken fikir birliğiydi . Bir şeyleri karıştırıyorlar çünkü t()
erken mevcut değil ve insanlar hiç kimsenin teknik açıklamaları çevirmek için zaman ayırmayacağını tartıştılar ve kod yorumlarını da çevirmediğimiz için gerçekten mantıklı değil, çünkü misal.
Bir Drupal 6 modülünü Drupal 7'ye dönüştürmeyle ilgili makalenin özel bir paragrafı vardır: Şema açıklamaları artık çevrilmiyor .