web-dev-qa-db-ja.com

文字列を上書きするにはどうすればよいですか?

Drupal 8のお問い合わせフォーム( 'あなたのメールアドレス')のラベルを変更しようとしています。ラベルは/core/modules/contact/src/MessageForm.phpに定義されていますが、明らかにコアでこれを変更したくない。

$form['mail'] = array(
'#type' => 'email',
'#title' => $this->t('Your email address'),
'#required' => TRUE,
);

Drupal 7私は常に string overrides を使用しましたが、Drupal 8の場合、モジュールはまだ使用できません。文字列をオーバーライドする方法Drupal 8?

1
rkhff

最も簡単な方法は、タイトルをオーバーライドするカスタムモジュール内にhook_form_alterを実装することです。

https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21form.api.php/function/hook_form_alter/8.2.x

カスタムモジュールの作成方法に関する情報。

https://www.drupal.org/docs/8/creating-custom-modules

5
Oleg Videnov

次のように、settings.phpの文字列をいつでもオーバーライドできます。

$settings['locale_custom_strings_en'][''] = array(
  'Related entities for @group' => 'Add Content to group @group',
);

endeまたは任意の2文字の言語コードに変更できます。

注意:文字列全体が単独で存在する必要があります。たとえば、上記の文字列オーバーライドは、次のようにグループモジュールコントローラに存在していました。

return $this->t('Related entities for @group', ['@group' => $group->label()]);

これは機能しません:

$settings['locale_custom_strings_en'][''] = array(
  'Related entities for ' => 'Add Content to ',
);

したがって、質問にリストされている例では、次のように使用できます。

$settings['locale_custom_strings_en'][''] = array(
  'Your email address' => 'Your email ID',
);
2
Parag