Here the partial code of my plugin (it may help):
function init()
{
$this->add_texts('localization/', true); //in this directory there are two files called it_IT.ing and en_US.inc (this is mandatory reading the documentation)
$this->load_config('config.inc.php');
$this->add_hook('identity_form', array($this, 'add_identity_extra_fields'));
}
function add_identity_extra_fields($data)
{
$rcmail = rcmail::get_instance();
$db = $rcmail->db;
$query_params = array($data['record']['user_id']);
$query = '';
$query .= 'SELECT my_extra_field FROM .... ';
$result = $db->query($query, $query_params)->fetchAll();
$my_extra_field_value = count($result) ? $result[0]['my_extra_field'] : '';
$data['form']['extra_fields']['name'] = $this->gettext('extra_fields'); // this label is correctly translated
$data['form']['extra_fields']['content'] =
array('my_extra_field' => array('type' => 'text', 'size' => 40));
$data['record']['my_extra_field'] = $my_extra_field_value; //the "my_extra_field" label is not translated but the translation exists in it_IT.inc and en_US.inc
return $data;
}
if I put the translation in "program/localization/it_IT/labels.inc" the label is correctly displayed.