Silverstripe Version: 4.7
Question: How to use i18n with complex fields in ModelAdmin
I extend the cms using ModelAdmion. Everything is fine but i did not get the labels beeing translated.
class Person extends DataObject {
...
private static $has_one = array(
'myImage' => Image::class
);
...
}
In my de_DE.yml I have the following variables:
de_DE:
Person :
db_myImageID: Bild1
db_myImage: Bild2
myImage: Bild2
But the translated title is not shown in cms if i create a new record. Instead there is “My Image” as caption of the UploadField. Any ideas?
Best regards,
chrclaus
The static variable field_names ist set
private static $field_labels = [
'Image.Title' => 'to-be-changed-via-i18n',
];
There is a function in DataObject
public function fieldLabels($includerelations = true) {
...
}
which looks only for the has_one-relations if the parameter $includerelations is set to true. Unfortunately, the relevant call for my DataObject sets it to false. Any ideas, how to get the field-labels for the has_one-relations too before looking for the second solution = overriding?
Best regards,
chrclaus
The db_ prefix works only with bare fields. Try this instead:
de_DE:
Person :
has_one_myImage: Bild1
See the DataObject::fieldLabels for the other possible prefixes.
If you need more control (e.g. you want to build the label dynamically), you can also override that method in your DataObject.
Thats it. Thank you very much! 
Best regards,
chrclaus