วิธีการสร้างสตริงจากเทมเพลตที่แปลได้ในทุกหน้าปรากฏขึ้น


14

ฉันมีสายเรียกเข้าt()ในไฟล์ * .tpl.php เพื่อเป็นตัวอย่างสมมติว่าฉันกำลังพูดถึงผลิตภัณฑ์และไฟล์ product.tpl.php

สายอักขระในเทมเพลตจะไม่ถูกจดจำจนกว่าจะมีการใช้งานครั้งแรกจริง ๆ มีเธรดเกี่ยวกับDrupal.orgเกี่ยวกับเรื่องนั้นและฉันคิดว่ามันถูกต้อง น่าเศร้าถ้าผมไปขอบอกว่าhttp://example.com/pl/product/200แล้วสตริงที่จะได้รับการบันทึกไว้ใน{locales_source}ตารางที่มีชุดสนามlocation/pl/product/200

ฉันต้องการให้ผู้ใช้ของฉันสามารถแปลโดยใช้เครื่องมือการแปลบนเว็บไซต์ของโมดูลLocalization ไคลเอ็นต์เพื่อให้พวกเขาสามารถเห็นสิ่งที่พวกเขากำลังแปลจริงโดยมีในบริบทที่เหมาะสม เมื่อตั้งค่าตำแหน่งต้นทาง/pl/product/200เป็นผลิตภัณฑ์ที่มี ID 200 เป็นเพียงรายการเดียวที่แสดงการแปลสตริง และที่เลวร้ายกว่าถ้าผมอาจจะไม่สามารถที่จะบังคับให้ผู้ใช้ในการแปลในผลิตภัณฑ์ที่เฉพาะอย่างยิ่งผมต้องการพวกเขายังจะสามารถที่จะแปลเป็นภาษารัสเซียและมีผลิตภัณฑ์ใด ๆ /ru/product/PIDกับชุดสถานที่ตั้ง

มีวิธีในการจัดรูปแบบสตริงตำแหน่งใหม่ในฐานข้อมูลเพื่อให้มองเห็นสตริงทั้งหมดในผลิตภัณฑ์ทั้งหมดภาษาทั้งหมดในเครื่องมือ l10n_client หรือไม่

ฉันลองตั้งค่าเป็น:

  • ; sites/default/themes/mytheme/product.tpl.php,
  • sites/default/themes/mytheme/product.tpl.php,
  • sites/default/modules/mymodule/mymodule.module (โมดูลที่สร้างข้อมูลที่มีธีม)

แต่มันทำให้พวกเขามองไม่เห็นสำหรับเครื่องมือแปล

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


ฉันกำลังพูดถึงข้อความที่ไม่มีส่วนเกี่ยวข้องกับโมดูลข้อมูลทำงาน ฉันไม่ต้องการแปลผลิตภัณฑ์เพียงแค่สตริงเทมเพลตที่ไม่มีส่วนเกี่ยวข้องกับผลิตภัณฑ์เช่นก่อนหน้า - ถัดไปบนเทมเพลตแกลเลอรีรูปภาพผลิตภัณฑ์

ตัวอย่างเช่นโมดูลส่งกลับภาพขนาดย่อ 15 ภาพและเป็นหน้าที่ของชุดรูปแบบในการแสดง 5 ครั้ง และความต้องการaltและtitleคุณสมบัติการเชื่อมโยงก่อนหน้า / ถัดไป แปล แต่โมดูลของฉันไม่ทราบว่า และไม่ควรที่จะต้อง


ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณต้องการอย่างครบถ้วนหรือไม่ แต่การรวบรวมข้อมูลไซต์ในทุกภาษาจะเพียงพอหรือไม่ คุณสามารถใช้เช่น xmlsitemap เพื่อสร้างลิงก์ในหลายภาษาจากนั้นใช้wgetหรืออะไรก็ตาม แฮ็ก แต่คุณพูดว่าได้รับอนุญาต (:
Andy

@Andy Localization Client ช่วยให้ผู้ใช้สามารถเปิดแถบที่ด้านล่างของหน้าและแปลข้อความที่ปรากฏบนหน้านั้นโดยตรงเมื่อพวกเขาเห็นพวกเขา ฉันสามารถส่งออกข้อความทั้งหมดได้ถูกต้อง แต่นั่นไม่ใช่ประเด็น
Mołot

1
ฉันจำได้จาก drupal_set_message () และ dpm () ว่าข้อความเหล่านี้จะถูกจัดคิวสำหรับคำขอถัดไปหากเรียกเช่นจาก page.tpl.php นี่เป็นเพราะแม่แบบมักจะดำเนินการค่อนข้างช้าในคำขอหลังจากประมวลผลข้อความแล้ว สิ่งที่คล้ายกันอาจเป็นกรณีที่มี t () และไคลเอนต์การแปล
donquixote

เป็นคำถามที่ดี เป็นปัญหาที่ดี
บาริสต้ามือสมัครเล่น

เพียงข้อเสนอแนะ ... หากคุณต้องการให้ผู้ใช้ของคุณสามารถแปลสตริง tpl ของคุณได้ทุกที่ทุกเวลาคุณสามารถแตกสตริงเหล่านี้ด้วยเทมเพลตการแปลเทมเพลตการแปล ( drupal.org/project/potx ) และให้พวกเขา .po ดั้งเดิมว่าพวกเขาสามารถแปลด้วยเครื่องมือเช่น Poedit หรือไม่? ( poedit.net ) เมื่อคุณแสดงสตริงเหล่านี้เป็นแบบสแตติกสองสามงานจะทำในคราวเดียวโดยนักแปลแต่ละคน ...
Kojo

คำตอบ:


5

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

คำอธิบายความต้องการนั้นอยู่ใกล้กับสิ่งที่คุณต้องการหรือไม่


โปรแกรมรวบรวมข้อมูล

เหมือนใครบางคนกล่าวว่า - ซอฟต์แวร์รวบรวมข้อมูลสามารถในทางทฤษฎีไปผ่านเว็บไซต์ทั้งหมดที่จะบังคับให้ลงทะเบียนของเสื้อทุกสาย () แต่ 1) โปรแกรมรวบรวมข้อมูลไม่ทราบว่าจะรวบรวมข้อมูลหน้าใด 2) เราไม่ต้องการรักษารายการหน้าเว็บที่จะรวบรวมข้อมูลดังนั้น 3) เราไม่ต้องการใช้โปรแกรมรวบรวมข้อมูลประจำเดือน eww แค่ eww ขวา?


ปัญหา

  1. เราไม่มีรายการสตริงการแปลทั้งหมด
  2. Drupal / PHP เป็นภาษาแบบไดนามิกซึ่งแตกต่างจาก C ซึ่งรวบรวม ดังนั้นเราจึงไม่สามารถไปและพูดเช่น: รวบรวม codebase ทั้งหมดนี้จากนั้นหาอินสแตนซ์ทั้งหมดของฟังก์ชันนี้t()จากนั้นลงทะเบียนอินสแตนซ์เหล่านั้นในฐานข้อมูลแล้วแปลอินสแตนซ์ที่ลงทะเบียนทั้งหมดt()ในครั้งเดียว ฉันไม่คิดว่าเป็นตัวเลือกที่เรามีบนโต๊ะของเรา
  3. เครื่องมือวิเคราะห์รหัสแบบคงที่จะทำอะไรไม่ถูกด้วยเหตุผลเดียวกับที่โปรแกรมรวบรวมข้อมูลจะทำอะไรไม่ถูก ฉันพบสิ่งนี้t()ในไฟล์นี้ ที่ดี! มันใช้ URL อะไร บริบทคืออะไร

โจมตีปัญหาด้วยเครื่องมือปัจจุบัน (Drupal และโมดูล contrib บางส่วน) และด้วยข้อ จำกัด ในปัจจุบัน (อาศัยการโทรตามธีมแบบเรียลไทม์ -> ไฟล์เทมเพลต -> การt()โทร) ดูเหมือนกับตรอกซอกซอยที่นี่ เราอาจต้องคิดนอกกรอบสักหน่อย


สิ่งที่เราต้องการ

  1. เราต้องการแหล่งข้อมูลแบบจำลองที่บอกฉันว่าเรามีสตริงการแปลปัจจุบันและบริบทของพวกเขาคืออะไร -
  2. แบบจำลองข้อมูลเชิงรุก รูปแบบข้อมูลปัจจุบันเป็นปฏิกิริยา (รุ่นได้รับการปรับปรุงทุกครั้งที่t()เกิดการโทร) เราต้องการโมเดลข้อมูลเชิงรุกซึ่งเป็นหนึ่งในแอปพลิเคชันที่ดูแลการค้นหาt()อินสแตนซ์ก่อนที่ลูกค้าจะถูกดำเนินการจริง
  3. เราต้องการบริบท t()เพียงอย่างเดียวไม่ได้ตัด - เพราะ - เราไม่รู้ว่าเรากำลังแปล 'foo' แต่ภาษาเป้าหมายที่เราแปลนั้นขึ้นอยู่กับ URL ของที่ที่t()เกิดขึ้น แม้ว่าเราสามารถ hardcode ภาษาเป้าหมายในการt()โทรพูดโดยใช้การเรียก wrapper มันจะไม่ทำงานสำหรับวัตถุประสงค์ของคุณ

ฉันได้ระบุเครื่องมือบางอย่างที่ - ถ้าเรามี - จะช่วยปัญหาของเรา ด้วยเครื่องมือเหล่านี้เราสามารถเข้าไปในตัวแบบข้อมูลและพูดว่า: ให้สตริงทั้งหมดที่อยู่ในt()นั้นซึ่งยังไม่ได้บรรจุ ตอนนี้แทรกคำแปลเหล่านี้ ขอขอบคุณ.

และในครั้งต่อไปที่ลูกค้ามาจะมีการแปลภาษา

เราจะ ... สร้างเครื่องมือเหล่านี้ได้อย่างไร


ข้อ จำกัด

  1. ภาษาเป้าหมายไม่สามารถอยู่ในเทมเพลตที่ตัดสินใจโดย URL สมมติว่าสตริงต้องสนับสนุนภาษาใด ๆ
  2. สตริงที่แปลไม่สามารถอยู่บนเทมเพลต การแปลจะอยู่ในฐานข้อมูล

ตอนนี้ที่ฉันได้รับปัญหามากขึ้นคิดและระบุความท้าทายและข้อ จำกัด บางอย่างฉันสามารถคิดเกี่ยวกับการมองหาวิธีการแก้ปัญหาใด ๆ ที่มีอยู่หรือที่จะทำให้การแก้ปัญหาที่กำหนดเองใด ๆ

ระดมสมองแก้ปัญหา

ฉันต้องการบางสิ่งที่เชื่อมโยง "ทุกสิ่ง" เข้าด้วยกัน สิ่งที่เกี่ยวกับ ... นิติบุคคล?

  • เอนทิตีสามารถเก็บผลิตภัณฑ์ที่ต้องการแปล
  • เอนทิตีสามารถให้ความสัมพันธ์ - กาว - ระหว่างผลิตภัณฑ์ที่ต้องการแปลและบริบท
  • เอนทิตีสามารถระบุพูดในฟิลด์ที่ตั้ง URL เริ่มต้นของผลิตภัณฑ์
  • สามารถใช้โทเค็นเพื่อระบุตำแหน่งทางเลือก (ภาษา?) ที่ผลิตภัณฑ์จะปรากฏ
  • หน่วยงานให้ข้อมูลโมเดลเชิงรุกที่เราต้องการและเป็นบริบท ซึ่งในทางกลับกันทำให้เราสามารถทำสิ่งต่าง ๆ เช่น: เข้าไปในฐานข้อมูลคว้าหน่วยงานผลิตภัณฑ์ทั้งหมดและถ้าไม่มีสตริงการแปลสำหรับเขตข้อมูล X, Y และ Z ให้สร้างสตริงการแปลเหล่านั้น

เมื่อลูกค้าคว้า/pl/product/200คุณเดินทางไปที่ฐานข้อมูลค้นหาผลิตภัณฑ์ 200 และรับการplแปลที่มีอยู่แล้ว คุณมีฟิลด์ชื่อเรื่องและคำบรรยายสำหรับผลิตภัณฑ์นั้นด้วยหรือไม่ การแปลควรจะมี

โปรดทราบว่าฉันเป็นคนคลุมเครือและเป็นคนทั่วไปที่นี่ในแง่ของโมดูลการแปลที่คุณใช้ คุณสามารถจบลงด้วยการใช้โมดูลการแปลของคุณเอง - เป็นไปได้มากว่าในกรณีนี้ แบบจำลองการแปลทั้งหมดที่ฉันเคยเห็นใน Drupal จนถึงตอนนี้ (ตั้งแต่ D7 ยังไม่ได้ดู D8 เลย) นั้นมีปฏิกิริยาตอบโต้ไม่ใช่เชิงรุก

โดยสังเขป

ในทางทฤษฎีเครื่องมือในการสร้างสิ่งที่คุณต้องการมีหน่วยงานที่เป็นองค์ประกอบสำคัญที่จะรวมทุกอย่างเข้าด้วยกัน: - ข้อมูล (สตริงการแปล) - ภาษาเป้าหมาย ไม่จำเป็นต้องอยู่ในเอนทิตี้ของตัวเองโดยเฉพาะอย่างยิ่งคำศัพท์อนุกรมวิธานพูดสำหรับภาษาผลิตภัณฑ์ หรืออาจเป็นอนุกรมวิธานทั่วไปสำหรับหน่วยงานอื่นเช่นกัน - บริบท. URL ที่เอนทิตีปรากฏขึ้น URL จะมีโทเค็นและโทเค็นจะอ้างอิงอนุกรมวิธานภาษาเป้าหมาย

ด้วยส่วนผสมทั้งสามที่คุณสามารถพูดได้: หยิบproductเอนทิตีทั้งหมดไปที่ URL aliasฟิลด์รับโทเค็นอนุกรมวิธานวัฏจักรผ่านชุดค่าผสมที่เป็นไปได้ทั้งหมดนำเสนอชุดค่าผสมทั้งหมดให้กับผู้ใช้ปัจจุบันโดยใช้รูปแบบน่าเกลียดขนาดใหญ่มากหรือ AJAX แบบฟอร์มหลายขั้นตอน (เช่นนี้) และเมื่อผู้ใช้ที่เข้าสู่ระบบในปัจจุบันแปลภาษาต่าง ๆ สำหรับผลิตภัณฑ์ 200 ให้บันทึกสิ่งเหล่านั้นลงในฐานข้อมูล

บางที่ในฐานข้อมูลอาจเป็นฟิลด์ Field API ในเอนทิตีฟิลด์การตั้งค่าที่เป็นของแต่ละเอนทิตี (ไม่ใช่ Field API อย่างแน่นอน แต่ก็ยังสามารถเก็บข้อมูล) หรือตารางแยกต่างหากที่คุณใช้สำหรับสิ่งนี้ ฉันคิดว่าการบันทึกข้อมูลลงใน Entity จะทำให้ทั้งรหัสและข้อมูลเป็นระเบียบและง่ายขึ้น


สร้างมัน: ทางออกที่เป็นไปได้

  • D8MI (Drupal 8 Multilingual Initiative)
  • รหัสที่กำหนดเอง: การแปล "ดัชนี" มีให้ในเทมเพลตโดย t () โดยการสอบถามทางโปรแกรมและการแสดงผลบันเดิลที่มีอยู่และการใช้งานชุดรูปแบบที่เกี่ยวข้อง

pseudocode

เอนทิตี Foreach (จากประเภท x),
ค้นหาทุกภาษา (อนุกรมวิธานหรือภาษาหลักที่เกี่ยวข้องกับผลิตภัณฑ์),
ทำให้เอนทิตี้ของ
- เพื่อตรวจสอบว่ามัน t () สตริงการแปล
- ชุดรูปแบบการโทร () ซึ่งจัดการเลเยอร์การนำเสนอหลายภาษาของ ผลิตภัณฑ์ไม่ใช่ตัวแบบข้อมูลผลิตภัณฑ์เอง

ผลลัพธ์:
- การโทรครั้งแรกเพื่อแสดงเท็มเพลตเอนทิตีในแต่ละภาษาจะส่งคืนการใช้ภาษาเริ่มต้นสำหรับการโทรแต่ละครั้ง
- ตอนนี้พารามิเตอร์ t () บนเทมเพลตถูกแคชไว้ใน Drupal และพร้อมสำหรับการแปล (สำหรับแต่ละอินสแตนซ์ภาษาไม่ใช่แต่ละอินสแตนซ์ผลิตภัณฑ์)
- ผู้ใช้ที่มีบทบาท“ นักแปล” สามารถไปที่อินเทอร์เฟซการแปลและแปลพารามิเตอร์ t () ที่มีอยู่ทั้งหมดสำหรับแต่ละภาษา
- เจ้าของไซต์ไม่จำเป็นต้องรอให้ลูกค้าเยี่ยมชมหน้าผลิตภัณฑ์แต่ละหน้าหรือเยี่ยมชมหน้าผลิตภัณฑ์แต่ละหน้าด้วยตนเอง

คำถามเปิด:
- บริบทคืออะไร? ถ้าฉันโทรไปที่ธีม () สำหรับแต่ละเอนทิตี“ ผลิตภัณฑ์” บันเดิลมันจะบันทึกตำแหน่งที่โทรนั้นทำหรือไม่? มันบันทึก URL ของโหนดหรือไม่ “ บริบท” สามารถเปลี่ยนแปลงได้หรือไม่? บริบทบันทึกอยู่ที่ไหน จะเกิดอะไรขึ้นเมื่อคุณมีเทมเพลต "ไดนามิก" - เช่นเมื่อคุณมีเทมเพลตมากกว่าหนึ่งรายการต่อผลิตภัณฑ์และวิธีการตรวจจับการเปลี่ยนแปลงเหล่านั้น

เช่นเคยการสร้างทฤษฎีและรหัสเทียมเป็นสิ่งที่ดีสำหรับการระดมสมอง แต่ในการพัฒนาเราแทบจะไม่รู้ว่าเรากำลังทำอะไรอยู่จนกระทั่งเราเริ่มต้นแบบ ดังนั้นเมื่อมีข้อ จำกัด สองสามข้อแนวทางที่เป็นไปได้และปัญหาหรือคำถามที่เป็นไปได้ - ตอนนี้ฉันสามารถดำเนินการพิสูจน์แนวคิดหรือต้นแบบการทำงานได้แล้ว คำถามที่เปิดกว้างบางข้อสามารถตอบได้ด้วยวิธีนี้เท่านั้นและเป็นแบบอย่างที่เร็วที่สุด (โดยไม่คำนึงถึงความสำเร็จหรือความล้มเหลว) เราสามารถเริ่มตอบคำถามเหล่านั้น - หรือเปลี่ยนวิธีการทั้งหมด คอยติดตาม ~


1
แม้จะไม่ได้อ่านโพสต์ทั้งหมดคำตอบแบบนั้นสมควรได้รับการ
โหวต

ประเด็นคือ - เครื่องมือที่อ้างว่าทำในสิ่งที่ฉันต้องการสำหรับ Drupal 7 อยู่แล้ว เป็นเพียงปัญหาของ Drupal ในการบันทึกสตริงเหล่านี้ด้วยข้อมูลเมตาที่ไม่ดี แต่ฉันสามารถเปลี่ยนข้อมูลเมตากล่าวใน db เมื่อรวบรวมสตริงได้ไม่มีปัญหา ฉันแค่ต้องรู้ว่าจะตั้งค่าพวกเขาอย่างไรเพื่อที่เครื่องมือจะได้เห็น หรืออย่างน้อยฉันก็เชื่อว่าเป็นสิ่งที่ฉันต้องการ และที่สำคัญที่สุด: ฉันไม่ต้องการแปลผลิตภัณฑ์เพียงแค่สตริงเทมเพลตที่ไม่มีส่วนเกี่ยวข้องกับผลิตภัณฑ์เช่นก่อนหน้า - ถัดไปบนเทมเพลตแกลเลอรี่ภาพผลิตภัณฑ์
Mołot

2

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

  1. การแปลที่เพิ่มขึ้นสำหรับภาษาในหนึ่ง / โหนดแรกจะพร้อมใช้งานสำหรับโหนดทั้งหมด

    นี่คือตัวอย่าง:

    • หากฉันเพิ่มผลิตภัณฑ์ใหม่ประเภทเดียวกันกับ nid 200 และไปที่โหนดการแปล pl ใหม่ (พูดว่า pl / product / 204) ฉันจะเห็นสตริงการแปลเดียวกันใน pl / product / 200

    • ข้อแตกต่างอย่างเดียวคือมันไม่ปรากฏในไคลเอนต์รองรับหลายภาษา เราสามารถขอคุณสมบัตินี้ได้ในคิวปัญหาของโมดูลอย่างไรก็ตามมันจะทำให้เกิดความสับสนมากขึ้นเนื่องจากการแปลไม่ได้เจาะจงไปที่หน้าปัจจุบันและจะมีผลกับทุกหน้า (เช่นทั้ง PL / ผลิตภัณฑ์ / 200 & PL / ผลิตภัณฑ์ / 204)

    • หากทั้งสองโหนดสร้างขึ้นโดยบุคคลสองคนที่แตกต่างกันและอีกหนึ่งคนต่อมาต้องการเปลี่ยนการแปลพวกเขาจะต้องใช้การแปลอินเตอร์เฟซ

  2. สตริงพร้อมใช้งานในไคลเอนต์การโลคัลไลเซชันสำหรับภาษาแรกที่คุณเยี่ยมชมสำหรับโหนดเดียวกัน

    นี่คือตัวอย่าง:

    • ถ้าฉันเพิ่มผลิตภัณฑ์ใหม่ nid 199 และสร้างการแปลสำหรับภาษา 'pl' (nid 200) และการแปลสำหรับภาษา 'rs' (nid 201) คุณจะเห็นสตริงเฉพาะในหน้า 'pl' ไม่ใช่ในหน้า 'rs' ดูเหมือนว่าจะมีข้อ จำกัด ในโมดูลไคลเอนต์ Localization

1

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

เห็นได้ชัดว่าเมื่อคุณมีผลิตภัณฑ์เวอร์ชั่นรัสเซีย 200 จะเป็นโหนดใหม่พูดเช่น / ru / product / 201 ซึ่งคุณสามารถแปลโดยใช้ไคลเอนต์รองรับหลายภาษา

แค่คิด: ค้นหาสตริงที่สามารถแปลได้ทุกภาษาใน UI การแปลอินเตอร์เฟสและขอให้ลูกค้าแปลระดับผลิตภัณฑ์เมื่อจำเป็นจริงๆ นี่คือตัวอย่าง:

"นี่คือ foo ผลิตภัณฑ์ของแถบหมวดหมู่"

และหากเราแน่ใจว่านอกเหนือจาก 'foo' & 'bar' เป็นเรื่องธรรมดาเราก็สามารถเพิ่มได้

$vars['product_title'] = t('This is product @product of category @category')

ใน preprocess

และไฟล์. tpl.php จะเป็น

<?php t($product_title, array('@product' => t('foo'),  '@category' => t('bar')); ?>

มันเพิ่มเติมเกี่ยวกับtitleข้อความสำหรับลูกศรในตัวหมุนภาพ โมดูลของฉันไม่สนใจว่าธีมจะแสดง 15 ภาพอย่างไร และชุดรูปแบบจะแสดง 5 ครั้งพร้อมด้วยลูกศร "ก่อนหน้า" และ "ถัดไป" ที่ต้องการaltและtitleและต้องการแปล การปรับเปลี่ยนโมดูลทุกครั้งที่ส่วนหน้าของฉันจะเปลี่ยนเป็นไปได้ แต่ไม่จำเป็นต้องมีแน่นอน สตริงเหล่านี้ไม่มีส่วนเกี่ยวข้องกับโมดูลเอง สุดท้าย แต่ไม่ท้ายสุดฉันอาจไม่รู้ว่าสายอักขระในชุดรูปแบบมีการเปลี่ยนแปลง หรือไม่พร้อมที่จะย้ายข้อมูลเหล่านั้นไปยังโมดูล
Mołot

IMHO กรณีนี้ควรได้รับการจัดการใน UI การแปลอินเตอร์เฟสแทนไคลเอ็นต์การแปลภาษา
vijaycs85

ไคลเอนต์การแปลมีวัตถุประสงค์เพื่ออนุญาตให้"แก้ไขการแปลในเว็บไซต์ของคุณเมื่อคุณเห็นปัญหา" - เหตุใดจึงไม่ควรใช้กับไฟล์เทมเพลต สตริงใน tpl ยิ่งไวต่อบริบทที่ปรากฏหากมีสิ่งใด
Mołot

1

AFAIK พร้อมด้วยตัวแยกเทมเพลตการแปลคุณสามารถแยกสตริงภายในการเรียกใช้t()ฟังก์ชันทั้งหมดของคุณ

เท็มเพลตตัวแยกการแปลจัดเตรียมเว็บและบรรทัดคำสั่ง Gettext อินเตอร์เฟสเทมเพลตตัวแยกการแปลสำหรับ Drupal รวมถึง API ที่ใช้ซ้ำได้เพื่อค้นหาสตริงที่สามารถแปลได้และข้อผิดพลาดในการแปล เครื่องมือนี้ใช้ภายใต้ประทุนที่ http://localize.drupal.org/และทำหน้าที่เป็นเครื่องแจงส่วนสำหรับโครงการ Drupal.org

อ่านนี้จะแปลโมดูลได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.