Score:2

การแปลเว็บไซต์หลายภาษาเป็นภาษาอังกฤษ

ธง sa

หมายเหตุ: คำถามนี้เน้นเฉพาะสตริงภายในไฟล์ต้นฉบับ (ไฟล์ PHP)

เมื่อคุณสร้างไซต์ Drupal ในประเทศที่ไม่ใช่ภาษาอังกฤษ (เช่น ฝรั่งเศส) คุณจะสร้างไฟล์ PHP ทั้งหมดที่มีสตริงภาษาฝรั่งเศสอยู่ข้างใน

หลังจากนั้นคุณสามารถแปลไซต์นี้เป็นภาษาดัตช์ได้ คุณจะแยกไฟล์ PO ส่งไปยังการแปลและนำเข้าใหม่อีกครั้ง

จนถึงจุดนี้ทุกอย่างเรียบร้อยดี

ตอนนี้ ลูกค้าของคุณต้องการให้เว็บไซต์แปลเป็นภาษาอังกฤษด้วย

ดังที่คุณอาจทราบ ไฟล์ต้นฉบับทั้งหมด (ที่มีสตริงภาษาฝรั่งเศส) ในความเป็นจริงแล้วระบบจะถือว่าเป็นภาษาอังกฤษ

ซึ่งหมายความว่าเพื่อจัดการกับข้อเท็จจริงนี้ ฉันต้อง:

  1. แยกไฟล์ PO เพื่อแปลเป็นภาษาฝรั่งเศส

  2. แปลงไฟล์ต้นฉบับทั้งหมดที่มีสตริงภาษาฝรั่งเศสเป็นไฟล์ต้นฉบับเดียวกันแต่ใช้สตริงภาษาอังกฤษ (โดยใช้การแปลที่สร้างขึ้นในขั้นตอนที่ 1)

  3. แปลงกลับภาษาของไฟล์ PO ที่สร้างในขั้นตอนที่ 1 (ภาษาต้นทางกลายเป็นภาษาเป้าหมายและตรงกันข้าม)

  4. นำเข้าไฟล์ที่เปลี่ยนกลับซึ่งสร้างในขั้นตอนที่ 3 ลงในไซต์

หากคุณคิดว่าฉันผิดอย่างสมบูรณ์กับกระบวนการนี้ โปรดอย่าลังเลที่จะอธิบายว่าทำไม ขั้นตอนที่ซับซ้อนที่สุดคือขั้นตอนที่ 2: คุณรู้จักกระบวนการที่ราบรื่นหรือเครื่องมือที่ดีในการจัดการหรือไม่

ฉันคิดว่าฉันจะพบบางอย่างสำหรับขั้นตอนที่ 3 แต่ยินดีต้อนรับความคิดใด ๆ

Sohail avatar
ru flag
แนวทางปฏิบัติที่ดีที่สุดคือพิจารณาสตริงในโค้ดของคุณเป็นภาษาอังกฤษเสมอตั้งแต่ขั้นตอนแรก แล้วจึงแปลเป็นภาษาหลักของคุณ เช่น ภาษาฝรั่งเศส แต่ถ้าฉันเป็นคุณ ฉันจะเปลี่ยนสตริงของฉันเป็น "ภาษาอังกฤษ" และดำเนินการต่อจากที่นั่น
apaderno avatar
us flag
ระบบการแปล Drupal จะทำงานเมื่อสตริงต้นทางเป็นภาษาอังกฤษถ้าฉันเรียก `t()` เป็น `t('Sì, questa è una frase in italiano.")` สตริงจะไม่ถูกแปลเพราะไม่มีสตริงต้นฉบับใดที่มีวลีที่ไม่ได้เป็นภาษาอังกฤษ
Baud avatar
sa flag
@Sohail: ลูกค้าไม่ต้องการจ่ายค่าแปลเป็นภาษาอังกฤษหากไม่ต้องการ... แต่คุณคิดถูก... แนวทางปฏิบัติที่ดีที่สุด! มีความคิดใด ๆ สำหรับกระบวนการแลกเปลี่ยนสตริงในไฟล์ php?
Baud avatar
sa flag
@apaderno: มันทำงานได้ดีจนกว่าคุณจะเพิ่มภาษาอังกฤษเป็นภาษาเสริมของไซต์ จนถึงจุดนี้คุณสามารถทำได้ t("une Phrase en français") มันจะทำงานได้ดี
apaderno avatar
us flag
ใช่ แต่เนื่องจากมันส่งคืนสตริงเดียวกับที่คุณส่งไปยัง `t()` เมื่อไม่พบคำแปล เห็นได้ชัดว่า ไม่พบคำแปลสำหรับ `'une วลี en français'` เพราะ *une วลี en français* ไม่ใช่ประโยคภาษาอังกฤษ นั่นไม่ได้แปลว่า
apaderno avatar
us flag
`t()` มักจะแปลจากภาษาอังกฤษเป็นภาษาที่ตั้งค่าเป็นค่าเริ่มต้นจากไซต์ ภาษาที่ผู้ใช้ตั้งค่าเป็นภาษาของพวกเขา หรือภาษาที่ตั้งค่าสำหรับโหนด ไม่ได้แปลจากภาษาอิตาลีเป็นภาษาดัตช์ ตัวอย่างเช่น หรือภาษาฝรั่งเศสเป็นภาษาอังกฤษ ซึ่งบันทึกไว้ใน [`t()`](https://api.drupal.org/api/drupal/core%21includes%21bootstrap.inc/function/t/8.9.x) ***string $string**: สตริงที่มีข้อความภาษาอังกฤษที่จะแปล*
Baud avatar
sa flag
@apaderno คุณพูดถูก แต่คุณสามารถเข้าใจได้ว่าลูกค้าไม่ต้องการจ่ายเงินเพื่อแปลไซต์ภาษาฝรั่งเศสเป็นภาษาอังกฤษเท่านั้นเพื่อให้มีไฟล์ต้นฉบับเป็นภาษาอังกฤษ (สมมติว่าเขาไม่ต้องการไซต์เป็นภาษาอังกฤษ) หากคุณตกลง นี้คุณสามารถเข้าใจว่าฉันอยู่ที่ไหน
apaderno avatar
us flag
คุณไม่จำเป็นต้องแปลไซต์จากภาษาฝรั่งเศสเป็นภาษาอังกฤษ: โมดูลทั้งหมดใช้สตริงเป็นภาษาอังกฤษ ดังนั้นไซต์จึงได้รับการ "แปล" เป็นภาษาอังกฤษแล้ว หากมีคนส่งสตริง `t()` เป็นภาษาฝรั่งเศส ถือว่าเป็น "ความผิด" ของบุคคลนั้น
Baud avatar
sa flag
@apaderno: ไม่ ฉันต้องแปลเพราะฉันมีโมดูลที่กำหนดเองหลายโมดูลที่มีสตริงภาษาฝรั่งเศสนับพันอยู่ในนั้น...
apaderno avatar
us flag
แก้ไขสตริงที่โมดูลเหล่านั้นส่งผ่านไปยัง `t()` เพื่อให้มีวลีภาษาอังกฤษ และไซต์จะแสดงเป็นภาษาอังกฤษ เมื่อตั้งค่าภาษาอังกฤษเป็นภาษาเริ่มต้น
Score:1
ธง de

เป็นแนวปฏิบัติที่ดีที่สุดที่จะให้สตริงในโค้ดของคุณเขียนเป็นภาษาอังกฤษ (ฉันจะไม่พูดถึงประเด็นนั้น)

แต่ฉันเคยมีปัญหาที่คล้ายกันกับเว็บไซต์ (Drupal 7) ที่เพื่อนร่วมงานของฉันพัฒนาขึ้น ในตอนแรกลูกค้าต้องการมีเว็บไซต์ใน NL และ FR และเพียงหลายปีต่อมาก็ตัดสินใจเพิ่มเวอร์ชัน EN

ปัญหา: สตริงในโค้ดเป็นการผสมระหว่าง NL และ FR...

วิธีแก้ปัญหาที่ฉันพบคือการเปิดใช้งานภาษา "อังกฤษ, อังกฤษ" (และปิดใช้งานภาษาหลัก "อังกฤษ" เนื่องจากภาษาเริ่มต้นคือ NL)ด้วยวิธีนี้ สตริงทั้งหมดของคุณสามารถแปลเป็น en-gb จากการแปลอินเทอร์เฟซหรือจากการนำเข้าไฟล์ .po

ใน Drupal 8/9 นั้นง่ายยิ่งขึ้นเนื่องจากมีกล่องข้อความว่า "เปิดใช้งานการแปลอินเตอร์เฟสเป็นภาษาอังกฤษ" ในหน้า ผู้ดูแลระบบ/config/regional/language/edit/en.

Baud avatar
sa flag
สำหรับตอนนี้ นี่เป็นวิธีที่ดีที่สุดในการตอบคำถามของฉัน... ฉันมีความสุขมากเกี่ยวกับฟีเจอร์ Drupal 8/9 ใหม่ (น่าเสียดายที่นี่คือไซต์ D7) ฉันคิดว่าฉันจะไม่ใช้กลอุบายนี้เพราะฉันมีเนื้อหาอื่นมากมายที่แปลเป็นภาษาอังกฤษแล้ว (โหนด ฯลฯ) ฉันกลัวที่จะแปลงข้อมูลทั้งหมดนี้เป็น EN-GB... แต่ขอบคุณ นี่เป็นเคล็ดลับที่ดี (ฉันตอบแทนคุณ)
Score:1
ธง ru

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

เปิดของคุณ THEMENAME.info.yml ไฟล์และเพิ่มสิ่งต่อไปนี้:

'โครงการแปลส่วนต่อประสาน': THEMENAME
'รูปแบบเซิร์ฟเวอร์การแปลอินเตอร์เฟส': 'themes/custom/THEMENAME/translations/%language.po'

จากนั้นสร้าง คำแปล ไดเร็กทอรีภายในธีมของคุณและคุณสามารถเพิ่มการแปลของคุณได้ .po ไฟล์ต่างๆ เช่น fr.po สำหรับภาษาฝรั่งเศสหรือ สพป สำหรับชาวนอร์เวย์

นี่คือไวยากรณ์ที่คุณต้องมีภายในของคุณ .po ไฟล์:

msgstr "สวัสดีชาวโลก"
msgstr "บงชู เลอ มงด์"

ดังนั้นเมื่อใดก็ตามที่คุณเขียน สวัสดีชาวโลก สตริงใน เสื้อ() ฟังก์ชั่นหรือเป็นตัวกรองในไฟล์ twig ดังนี้: {{ สวัสดีชาวโลก|t }} มันจะรู้ว่าต้องนำเข้าคำแปลจากที่นั่น

แต่จะทริกเกอร์การนำเข้าการแปลได้อย่างไร

ตำแหน่งที่ตั้งของ drush: ตรวจสอบ - ไม่จำเป็น แต่ตรวจสอบว่ามีการเพิ่มสตริงใหม่หรือไม่

ตำแหน่งที่ตั้งของ drush: อัปเดต - นำเข้าการแปลและคุณทำเสร็จแล้ว

โปรดทราบว่าคุณสามารถเพิ่ม/เรียกใช้สิ่งนี้ในขั้นตอนการปรับใช้ของคุณได้เช่นกัน และทำให้ชีวิตของคุณง่ายขึ้น ไม่จำเป็นต้องแปล UI เพียงเพิ่มสตริงของคุณลงใน .po ไฟล์เมื่อใดก็ตามที่คุณเขียนสตริงฮาร์ดโค้ดลงในไฟล์ของคุณ

อัปเดต: ไม่ได้สังเกตว่าเรากำลังพูดถึง Drupal 7 นี่หมายถึง Drupal 8 สำหรับผู้อ่านในอนาคต

Baud avatar
sa flag
ฉันให้รางวัลแก่คำตอบของคุณแม้ว่ามันจะไม่ได้ตอบคำถามของฉันก็ตาม เพราะฉันได้เรียนรู้หลายสิ่งหลายอย่างจากมัน
Sohail avatar
ru flag
ขอบคุณ ไม่ได้สังเกตว่าเรากำลังพูดถึง Drupal 7 ซึ่งหมายถึง Drupal 8

โพสต์คำตอบ

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