Score:0

เป็นไปได้ไหมที่จะแสดงมุมมองตามภาษาของเนื้อหา

ธง us

Drupal สนับสนุนแนวคิดของภาษาอินเทอร์เฟซและภาษาเนื้อหา ฉัน (และลูกค้าทุกคนที่ฉันเคยถาม) ดูเหมือนจะมีความคิดเห็นที่แตกต่างกันว่าอะไรคือ "เนื้อหา" และอะไรคือ "ส่วนต่อประสาน" มากกว่าที่ Drupal มี (ในกรณีส่วนใหญ่) ฉันถือว่าอินเทอร์เฟซเป็นรายการที่ผู้ดูแลระบบหรือผู้แก้ไขจะใช้ในการทำงาน (เมนูผู้ดูแลระบบ แท็บแก้ไข รายละเอียดวิธีใช้ในแบบฟอร์ม ฯลฯ) และเนื้อหาคือสิ่งที่ผู้ที่ไม่ใช่ผู้ดูแลระบบ (มักจะเป็น Anon แต่ไม่เสมอไป) จะเห็น

มุมมองที่ฉันสร้างขึ้นเพื่อนำเสนอ "เนื้อหา" บนเว็บไซต์ ฉันคิดว่าเป็นเนื้อหาโดยธรรมชาติ แต่ Drupal มีแนวคิดที่ไม่สอดคล้องกันและมักจะไม่ถูกต้องเกี่ยวกับสิ่งนี้

เริ่มต้นด้วย ฉันได้ตั้งค่าไซต์เพื่อให้ภาษาอินเทอร์เฟซถูกกำหนดโดยภาษาที่ผู้ใช้ต้องการ (ตามที่ผู้ดูแลไซต์/บรรณาธิการจะตั้งค่า) และภาษาเนื้อหาถูกกำหนดโดยคำนำหน้ารหัสภาษาของ URL

มุมมองการทดสอบตัวอย่างมีลักษณะเช่นนี้ใน FR (url คือ /fr/test) - ภาษาอินเทอร์เฟซถูกตั้งค่าเป็น EN:

เนื้อหา = FR อินเทอร์เฟซ = TH

สิ่งนี้ไม่ถูกต้องอย่างชัดเจนที่สามารถเห็นได้จากการแสดงผลที่เหมาะสม เมื่อฉันตั้งค่าภาษาอินเทอร์เฟซเป็น FR:

เนื้อหา = FR อินเทอร์เฟซ = FR

Views มีตัวเลือกมากมายในการตั้งค่าวิธีกำหนดภาษาที่แสดง "เนื้อหา" สำหรับตัวอย่างของฉันด้านบน มีการตั้งค่าให้แสดงผลตาม "ภาษาของเนื้อหา" ของหน้า (และตามด้วย URL) วิธีนี้ใช้ได้กับข้อมูลภาคสนามส่วนใหญ่ (ชื่อเรื่อง เงื่อนไขอนุกรมวิธาน ฟิลด์ข้อความที่แปล) แต่น่าเศร้าที่ใช้ไม่ได้กับฟิลด์ Datetime - ดูเหมือนว่าจะถูกเข้ารหัสอย่างหนักเพื่อแปลอย่างไม่ถูกต้องโดยใช้ส่วนต่อประสาน แต่คุณยังสามารถดูส่วนการกำหนดค่าของมุมมอง (ชื่อมุมมอง ป้ายชื่อฟิลด์ ฯลฯ) ได้เช่นกัน ซึ่งแปลว่าส่วนต่อประสาน

มีวิธีใดบ้างที่จะบอกมุมมองให้แปลโดยใช้ภาษาของเนื้อหา

ฉันใช้รหัสต่อไปนี้:

  $languageManager = \Drupal::languageManager();
  $langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  $language = $languageManager->getLanguage($langcode);
  $languageManager->setConfigOverrideLanguage($ภาษา);

ภายในฟังก์ชันประมวลผลล่วงหน้าของบล็อกเพื่อให้ชิ้นส่วนบล็อกบางส่วนที่ใช้ภาษาอินเทอร์เฟซไม่ถูกต้องแปลด้วยภาษาของเนื้อหา มีวิธีที่คล้ายกันในการแทนที่ภาษาอินเทอร์เฟซที่มุมมองใช้สำหรับการแปลหรือไม่ ฉันหวังว่ามันจะเป็นเหมือนโค้ดด้านบน แต่ฉันไม่ได้ใส่ในตำแหน่งที่ถูกต้อง (ฉันลองใช้ hooks for pre-build, pre-render, query_alter ไม่สำเร็จ)

หากสามารถทำได้ ฉันชอบที่จะเขียนโมดูลสนับสนุนเพื่อใช้ UI ที่มีอยู่ใน View เพื่อตั้งค่าภาษาเรนเดอร์และให้มันเรนเดอร์ทุกอย่างแทนที่จะเป็นแค่บางฟิลด์

Jaypan avatar
de flag
"สิ่งนี้ไม่ถูกต้องอย่างชัดเจนอย่างที่เห็น"
liquidcms avatar
us flag
โอเค อาจจะไม่ชัดเจนขนาดนั้นก็ได้? ภาษาของเนื้อหาถูกตั้งค่า (คำนำหน้า URL) เป็นภาษาฝรั่งเศส ดังนั้นฉันจึงต้องการให้ตารางเป็นภาษาฝรั่งเศส ทั้งหมดของมัน. ส่วนเดียวที่ตั้งค่าเป็น FR ตามที่ตั้งค่าโดยภาษาการแสดงผลของมุมมองคือข้อมูลในคอลัมน์ (1) ส่วนอื่นๆ: ส่วนหัวของคอลัมน์ ข้อมูลในคอลัมน์ 2 และ 3 (วันที่) และชื่อมุมมองยังคงแสดงอยู่ใน EN ผลลัพธ์ที่ถูกต้องสามารถมองเห็นได้จากภาพที่ 2 เมื่อฉันตั้งค่าภาษาอินเทอร์เฟซเป็น FR
Jaypan avatar
de flag
วันที่เป็นอินเทอร์เฟซ ซึ่งเป็นเหตุผลที่ฉันเชื่อว่าพวกเขาแสดงตามภาษาของอินเทอร์เฟซ แทนที่จะเป็นภาษาของเนื้อหาปัจจุบัน น่าเสียดายที่ฉันไม่มีวิธีแก้ปัญหานี้
liquidcms avatar
us flag
ไม่สามารถนึกถึงเหตุผลที่ว่าวันที่จะได้รับการพิจารณาไม่ว่าคำนิยามของอินเทอร์เฟซของ Drupal จะเป็นเช่นไร แต่ใช่ พวกมันถูกแปลอย่างไม่ถูกต้องว่าเป็นอินเทอร์เฟซ ฉันแน่ใจว่านั่นเป็นข้อบกพร่อง แต่ไม่ใช่สิ่งที่ฉันถามเกี่ยวกับ แทนที่จะส่งแพตช์เพื่อแก้ไขโมดูล Datetime ฉันต้องการหาวิธีแสดงผลมุมมองที่สมบูรณ์ด้วยภาษาที่กำหนด
ru flag
วันที่ไม่ได้รับการแปล แต่ได้รับการแปลเป็นภาษาท้องถิ่น (เช่นเดียวกับสัญลักษณ์จุดทศนิยม) และการแปลเป็นภาษาท้องถิ่นขึ้นอยู่กับภาษาของอินเทอร์เฟซ เช่น. `07/12` คือวันที่ 12 กรกฎาคม` ในสหรัฐอเมริกา ในขณะที่ชาวยุโรปทุกคนจะอ่านว่า `วันที่ 7 ธันวาคม` หากไม่มีบริบท "1.000" จะเป็น "หนึ่ง (ศูนย์ลูกน้ำ)" ในสหรัฐอเมริกา และเป็น "หนึ่งพัน" ในประเทศที่พูดภาษาเยอรมัน การแปลเป็นภาษาท้องถิ่นของ Drupal นั้นยอดเยี่ยมและสมบูรณ์แบบเหมือนเดิม
Jaypan avatar
de flag
สามารถแปลวันที่ได้ - เป็นการกำหนดค่าและสามารถเปิดใช้งานการแปลได้
liquidcms avatar
us flag
@Hudri ฉันเข้าใจว่าวันที่ทำงานอย่างไร จริงๆ แล้วมี 2 ส่วน: สตริงที่แปลเป็นภาษาท้องถิ่น เช่น เดือนและวันในสัปดาห์ รวมถึงรูปแบบที่แปลแล้วตามที่ Jaypan กล่าวถึง ปัญหาคือ "ขึ้นอยู่กับภาษาอินเทอร์เฟซ" - ใช่ นั่นจริง - และผิด เหตุใดคุณจึงต้องการตาราง Views ที่มีทุกคอลัมน์ในภาษาที่ถูกต้อง ยกเว้นคอลัมน์วันที่ ฉันเดาว่าคุณใช้ค่าเริ่มต้นของ Drupal เสมอซึ่งจะต้องมีการแปลส่วนต่อประสาน / เนื้อหาที่เชื่อมโยงกัน หมายเหตุ: OP ของฉันเกี่ยวกับการควบคุมการแสดงผลของ Views - ไม่เกี่ยวกับวันที่ ฉันคิดว่า Jaypan เข้าใจสิ่งที่ฉันพยายามทำ :)
ru flag
*ปัญหาคือ "ขึ้นอยู่กับภาษาอินเทอร์เฟซ" - ใช่ จริง - และผิด* - ฉันไม่เห็นด้วยอย่างยิ่งที่นี่ :-) บริษัทของเรามุ่งเน้นไปที่ลูกค้าการท่องเที่ยว _all_ โครงการของเรามีหลายภาษา เช่น. พวกเขาเสนอแพ็คเกจวันหยุดและจำเป็นอย่างยิ่งที่จะต้องได้รับรูปแบบวันที่ในรูปแบบวันที่ทั่วไปของแขก (แม้ว่าโหนดจะไม่ได้รับการแปล พวกเขายังคงได้รับวันที่ที่แปลเป็นภาษาท้องถิ่นจากภาษาอินเทอร์เฟซ) สิ่งนี้ช่วยประหยัดคำถามและปัญหามากมายในธุรกิจของเรา หัวข้อ: ขออภัยฉันไม่ทราบคำตอบ
liquidcms avatar
us flag
ใช่ กรณีการใช้งานของเรานั้นแตกต่างกัน ของฉันมีไว้สำหรับไซต์ของรัฐบาลกลางแคนาดา ไม่มีสิ่งที่เรียกว่าหน้าที่ไม่ได้แปล เป้าหมายของฉันคือการสร้างไซต์ที่เนื้อหา (ซึ่งรวมถึงวันที่) ถูกกำหนดโดยภาษาเนื้อหาของไซต์ (url); แต่ผู้แก้ไขไซต์สามารถทำงานได้ในภาษาที่ต้องการ (ส่วนต่อประสาน) แต่ตรงประเด็นมากขึ้น Drupal เกือบจะรองรับกรณีการใช้งานที่แตกต่างกันเหล่านี้ แม้แต่สำหรับ Views พวกเขามีตัวเลือกในการตัดสินใจเลือกภาษาเพื่อแสดงมุมมอง - มันทำงานไม่ถูกต้อง ฉันเดาว่าไซต์ของคุณมีการตั้งค่าการตรวจจับเนื้อหา/อินเทอร์เฟซเหมือนกันใช่ไหม
Score:0
ธง us

อืม.. เห็นได้ชัดว่าคำถามของฉันมีคำตอบมาโดยตลอด เมื่อฉันเพิ่มข้อมูลโค้ด:

  $languageManager = \Drupal::languageManager();
  $langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  $language = $languageManager->getLanguage($langcode);
  $languageManager->setConfigOverrideLanguage($ภาษา);

ไปที่ _views_pre_render hook มันทำในสิ่งที่ฉันต้องการและใช้ภาษาแทนที่ config เพื่อแทนที่ภาษาที่ใช้สำหรับส่วนที่สามารถกำหนดค่าได้ของมุมมอง (ชื่อเรื่อง ส่วนหัวของคอลัมน์ และอื่น ๆ ) สิ่งเดียวที่จัดการไม่ได้คือวันที่ เนื่องจากสิ่งเหล่านี้ทำผิดพลาดในโมดูล Datetime ไม่แน่ใจว่าทำไมฉันไม่เห็นสิ่งนี้ทำงานเมื่อฉันลองก่อนหน้านี้

และฉันสามารถแทนที่บริการหลัก DateFormatter เพื่อใช้ภาษาเนื้อหาแทนค่าเริ่มต้น (ซึ่งเป็นส่วนต่อประสาน) และสิ่งนี้จะแก้ไขวันที่ทุกที่ในไซต์ สิ่งนี้น่าจะถูกส่งเป็นแพตช์สำหรับคอร์ เนื่องจากฉันแน่ใจว่านี่เป็นข้อผิดพลาด - เหตุใดวันที่จึงถูกพิจารณาว่าอินเทอร์เฟซแตกต่างจากเนื้อหาอื่นทั้งหมด

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา