ใน Drupal 7 มี drupal_get_title()
และ drupal_set_title()
. พวกเขากำลัง ประวัติศาสตร์.
ฉันต้องการเปลี่ยนชื่อเพจ "สร้าง X" เป็น "เพิ่ม X" สำหรับ X ทั้งหมด และฉันคิดว่า hook_preprocess_page_title()
ใน .theme-file ของฉันเป็นที่ที่เหมาะสมที่จะทำ (ถ้าคุณไม่เห็นด้วยโปรดพูดอย่างนั้น)
เช่น. ฉันต้องการให้เป็น 'เพิ่ม X' สำหรับ 'X' ใด ๆ เมื่อเดิมเป็น 'สร้าง X' ตัวอย่างเช่น: 'สร้างบทความ' ควรกลายเป็น 'เพิ่มบทความ' และถ้าชื่อเรื่องเป็น 'Bar Article' ฉันควรจะปล่อยไว้ตามที่เป็นอยู่
โดยพื้นฐานแล้ว ฉันต้องการดมกลิ่นของชื่อเรื่องและถ้ามันขึ้นต้นด้วย 'สร้าง' ให้เปลี่ยนเป็น 'เพิ่ม' จนถึงตอนนี้ฉันได้รับแล้ว และเห็นได้ชัดว่ามันไม่สมบูรณ์:
/**
* ใช้ hook_preprocess_page_title()
*/
ความพยายามครั้งแรก:
ฟังก์ชัน mytheme_preprocess_page_title(&$ตัวแปร) {
$request = \Drupal::request();
$route_match = \Drupal::routeMatch();
$title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
}
ความพยายามครั้งที่สอง ตามคำแนะนำของ 4k4:
ฟังก์ชัน mytheme_preprocess_page_title(&$ตัวแปร) {
$title = $ตัวแปร['ชื่อเรื่อง'];
ถ้า (อินสแตนซ์ชื่อ $ ของ TranslatableMarkup) {
$title = $title->getUntranslatedString();
$title = str_replace('สร้าง', 'เพิ่ม', $title);
$variables['title'] = t($title);
}
อื่น {
$variables['title'] = Markup::create(str_replace('Create', 'Add', $title));
}
}
ชื่อเรื่องที่ฉันต้องการเปลี่ยนมาจาก Drupal core และสามารถแปลได้ ดังนั้นมันจึงเป็น ตัวอย่าง TranslatableMarkup
สาขาที่ถูกดำเนินการ แต่ฉันเห็นด้วยกับการมีทางเลือกในกรณีที่ไม่ใช่เป็นความคิดที่ดี
อย่างไรก็ตาม แม้จะเป็นการเริ่มต้นที่ดี แต่นี่ไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์ มันเปลี่ยนชื่อที่แสดงของแบบฟอร์มเพิ่มบทความจาก "สร้างบทความ" เป็น "เพิ่ม @name"
ฉันได้โหวตคำตอบโดย 4k4 เนื่องจากมันไปไกลกว่าการแก้ปัญหามากกว่าความพยายามครั้งแรกของฉัน แต่ก็ยังไม่สมบูรณ์
ฉันไม่ต้องการใช้ การแทนที่สตริง โมดูลสำหรับสิ่งนี้ด้วยเหตุผลหลายประการ ส่วนใหญ่เป็นเพราะธีมนี้ควรทำงานข้ามการแปลโดยไม่ต้องมีการกำหนดค่าเพิ่มเติมเมื่อปรับใช้