2016-07-26 4 views
1

Ich einfach _t() verwenden, um CMS-Felder in einem DataObject zu übersetzen: TextField::create('Title', _t('cms.TitleField', 'Title'));. Ich dachte, das Übersetzen $summary_fields war genauso einfach, aber es ist nicht.SilverStripe übersetzen Feldlabels

Anstatt zu versuchen, Felder und ihre begleitenden summary_fields separat zu übersetzen, glaube ich, dass ich einen besseren Weg, wie diese Felder übersetzt werden, mit der Funktion FieldLabels wie in SiteTree verwendet.

Gibt es Möglichkeit, diese beiden Felder an einer Stelle (DRY-Prinzip) zu übersetzen und auf beide einfach durch Aufruf der var?

Antwort

1

Ja, ich würde auf jeden Fall sagen, dass die Verwendung von FieldLabels für die Lokalisierung/Übersetzung ist wegen des Kommentars „Localize Felder (wenn möglich)“ here im Datenobjektcode ...

public function summaryFields() { 
    $fields = $this->stat('summary_fields'); 

    // if fields were passed in numeric array, 
    // convert to an associative array 
    if($fields && array_key_exists(0, $fields)) { 
     $fields = array_combine(array_values($fields), array_values($fields)); 
    } 

    if (!$fields) { 
     $fields = array(); 
     // try to scaffold a couple of usual suspects 
     if ($this->hasField('Name')) $fields['Name'] = 'Name'; 
     if ($this->hasDatabaseField('Title')) $fields['Title'] = 'Title'; 
     if ($this->hasField('Description')) $fields['Description'] = 'Description'; 
     if ($this->hasField('FirstName')) $fields['FirstName'] = 'First Name'; 
    } 
    $this->extend("updateSummaryFields", $fields); 

    // Final fail-over, just list ID field 
    if(!$fields) $fields['ID'] = 'ID'; 

    // Localize fields (if possible) 
    foreach($this->fieldLabels(false) as $name => $label) { 
     // only attempt to localize if the label definition is the same as the field name. 
     // this will preserve any custom labels set in the summary_fields configuration 
     if(isset($fields[$name]) && $name === $fields[$name]) { 
      $fields[$name] = $label; 
     } 
    } 

    return $fields; 
} 
+0

Was für ein interessanter Fund. Ich werde die nächste Stunde damit verbringen, die Namen so umzubenennen, wie ich alle Feldnamen in meinen cms benannt habe. – Faloude

+0

Ich werde eine 'public function fieldLabels() 'in meinem benutzerdefinierten PageType definieren, wird die DataObject-Klasse dies automatisch beim Füllen der' summary_fields' übernehmen? – Faloude

+0

die Funktion fieldLabels sucht nach den statischen field_labels, um diese Information zu erhalten, würde ich diese Funktion nicht erstellen – Barry