drupal 8 – ¿Cómo cambio el texto en el botón de envío en el formulario de nodo?

Pregunta:

Estoy intentando cambiar el texto del botón de envío "Guardar y seguir publicado", pero no tengo suerte. Estoy usando el estándar hook_form_FORM_ID_alter() .

function mymodule_form_node_news_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // This is the problem, what should I put here
  $form['actions']['publish']['#value'] == '';
}

Esto es lo que devuelve dpm() .

'publish' => array(7)
  '#value' => object Drupal\Core\StringTranslation\TranslatableMarkup(5)
    protected string -> string(18) "Save and keep published"
    protected translatedMarkup -> NULL
    protected options -> array(0)
    protected stringTranslation -> NULL
    protected arguments -> array(0)

¿Cómo cambio el texto en el botón de envío en el formulario de nodo?

Respuesta:

En #value hay una cadena traducible. Puede anularlo con un valor de texto simple:

if ( isset($form['actions']['publish']) ) {
   $form['actions']['publish']['#value'] = 'New Text';
}

O puede poner allí una nueva cadena traducible con la función t (), si desea traducir la nueva cadena en diferentes idiomas:

if ( isset($form['actions']['publish']) ) {
   $form['actions']['publish']['#value'] = t('New Text');
}

Editar: responde la pregunta en los comentarios

Lo que ves en dpm () es el resultado de t (), que se usa en la forma original en NodeForm.php:

$element['publish']['#value'] = t('Save and publish');

En D8, este es un objeto, que dará como resultado el texto traducido cuando se use en un contexto de cadena. Para el usuario final, simplemente lo usa como un valor de cadena, pero mágicamente siempre se traducirá. No tiene que buscar en este objeto para encontrar una forma de cambiarlo. Para establecer un nuevo valor, simplemente genere un nuevo objeto traducible y colóquelo en el lugar del anterior.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım