Trong Drupal 8, có vẻ như sử dụng! (dấu chấm than) giữ chỗ với hàm t () đã bị xóa.
Tôi có một biến chứa HTML:
<span class="fullname_wrapper"><span class="first_name">John</span> <span class="last_name">Hancock</span> <span class="account_name_wrapper">(@JohnH)</span></span>
Tôi muốn giữ HTML này, vì nó sẽ được tạo kiểu cụ thể ở bất cứ nơi nào nó xuất hiện trên trang web.
Trong Drupal 7, tôi đã có thể làm điều này:
t('Your name is !name', array('!name' => $name));
Trong đó $ name chứa HTML được hiển thị ở trên. Tuy nhiên, trong Drupal 8, điều này không hoạt động vì dấu giữ dấu chấm qua dấu chấm than đã bị xóa.
Tôi đã thử điều này:
t('Your name is :name', array(':name' => $name));
Nhưng HTML vẫn thoát.
Dấu @ cũng thoát khỏi HTML.
Có ai biết làm thế nào HTML có thể được chuyển qua hàm t () trong D8 không?
CẬP NHẬT:
Theo nhận xét của No Sssweat, có vẻ như là của tôi! đánh dấu dường như làm việc trong t (). Vì vậy, đây là mã thực tế của tôi:
drupal_set_message(
$this->t(
"@amount has been transferred to !account",
array(
'@amount' => '¥' . $form_state->getValue('amount'),
'!account' => $this->accountService->formatAccountName($account)
)
)
);
Và tôi nhận được ngăn xếp lỗi này:
User error: Invalid placeholder (!account) in string: @amount has been transferred to !account in Drupal\Component\Render\FormattableMarkup::placeholderFormat() (line 235 of core/lib/Drupal/Component/Render/FormattableMarkup.php).
Drupal\Component\Render\FormattableMarkup::placeholderFormat('@amount has been transferred to !user', Array) (Line: 204)
Drupal\Core\StringTranslation\TranslatableMarkup->render() (Line: 15)
Drupal\Core\StringTranslation\TranslatableMarkup->__toString() (Line: 451)
drupal_set_message(Object) (Line: 128)
Lỗi người dùng là những gì làm tôi nghĩ rằng! đánh dấu là không được phép, nhưng tôi phải chẩn đoán sai nó. Có ai biết những gì đang xảy ra ở đây?
'!account' => '<b>test</b>'
cho mục đích thử nghiệm. Xem nếu bạn vẫn nhận được lỗi đó. Nguyên nhân có lẽ $this->accountService->formatAccountName($account)
không phải là một mã hợp lệ. Ngoài ra, lưu ý về thông báo thử nghiệm của tôi , tôi không sử dụng$this->t(
$test = "<b>test</b>"; drupal_set_message(t('Something !var just happened.', array('!var' => $test)), 'warning');
tôi nhận được thông báo cảnh báo, từ nàytest
được in đậm và không thoát. Do đó, sử dụng!
dường như hoạt động tốt trong D8.