Hi
I have the situation where I want to retrieve the selected value of a text list using field_view_value(). The node has several fields of different types while some fields are translatable using entity translation. I wrote the following convenience function to retrieve the values:

/**
 * Determines a field value in the current language.
 * @param $node
 *   A loaded node.
 * @param $field_name
 *   Name of a field of $node.
 * @return
 *   The translated field value.
 */
function _wc_field_value($node, $field_name) {
  $items = field_get_items('node', $node, $field_name);
  $output = field_view_value('node', $node, $field_name, $items[0]);
  return render($output);
}

It does the job, except for text lists: the returned label is not translated, instead it is always in English. In the display options of the content type I have already selected "default translated", which displays correctly when viewing the node itself.
I tracked the issue down to the fact that _field_info_prepare_instance_display() adds the default formatter when none is provided. I could solve the issue the following way, although it is not elegant:

function _wc_field_value($node, $field_name) {
  $field = field_info_field($field_name);
  $display = array();
  if ($field['type'] == 'list_text') {
    $display['type'] = 'i18n_list_default';
  }

  $items = field_get_items('node', $node, $field_name);
  $output = field_view_value('node', $node, $field_name, $items[0], $display);

  return render($output);
}

Is this behaviour by design or is it a bug?

A 2nd question: why has "translated default" to be selected manually when translated values exist? Is this also by design? This setting is not very well documented, it took me quite some time to figure it out.