ทำให้การแปลภาษาของงานนำเสนอเป็นอัตโนมัติใน PHP

ภาพรวม

Aspose.Slides for PHP via Java ให้คุณกำหนด metadata การพิสูจน์อักษรสำหรับส่วนข้อความแต่ละส่วน ใช้ BasePortionFormat::setLanguageId เพื่อระบุภาษาการพิสูจน์, BasePortionFormat::setSpellCheck เพื่อเปิดหรือปิดการตรวจสอบการสะกด, และ BasePortionFormat::setProofDisabled เพื่อควบคุมสถานะ “ไม่ทำการพิสูจน์” อย่างกว้างขวาง เนื่องจากการตั้งค่าเหล่านี้ถูกนำไปใช้ในระดับส่วน, ย่อหน้าเดียวสามารถมีหลายภาษาและกฎการพิสูจน์อักษรที่แตกต่างกันได้

บทความนี้อธิบายวิธีกำหนดภาษาสำหรับข้อความเฉพาะ, ตั้งค่าภาษาเริ่มต้นสำหรับข้อความใหม่ด้วย LoadOptions::setDefaultTextLanguage, สร้างย่อหน้าหลายภาษา, เลือกใช้ SpellCheck หรือ ProofDisabled, และรักษาการตั้งค่าเดิมเมื่อใช้ Presentation::joinPortionsWithSameFormatting คุณสมบัติเหล่านี้เก็บ metadata สำหรับแอปพลิเคชันพรีเซนเทชัน; ไม่ได้แปลข้อความ, ทำการตรวจสอบการสะกดโดยใช้พจนานุกรม, หรือคืนคำที่สะกดผิด

ตั้งค่าภาษา Proofing สำหรับข้อความ

สร้างหรือโหลด Presentation, เข้าถึงส่วนข้อความที่ต้องการผ่าน Portion::getPortionFormat, แล้วกำหนดรหัสภาษาของมัน ตัวอย่างต่อไปนี้สร้างรูปร่าง, ตั้งค่าอังกฤษแบบบริติชเป็นภาษาการพิสูจน์, และบันทึกผลลัพธ์ด้วย Presentation::save:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 320, 80);
    $shape->getTextFrame()->setText("Set the proofing language for this text.");

    $portion = $shape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
    $portion->getPortionFormat()->setLanguageId("en-GB");

    $presentation->save("proofing_language.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

ตั้งค่าภาษาเริ่มต้นสำหรับข้อความใหม่

ใช้ LoadOptions::setDefaultTextLanguage เพื่อระบุภาษาการพิสูจน์ที่ Aspose.Slides จะกำหนดให้กับข้อความที่สร้างใหม่ การตั้งค่านี้มีประโยชน์เมื่อข้อความใหม่ส่วนใหญ่หรือทั้งหมดในพรีเซนเทชันใช้ภาษาเดียวกัน ไม่ได้เปลี่ยนแปลง metadata ของข้อความที่มีการกำหนดภาษาชัดเจนแล้ว

ตัวอย่างต่อไปนี้สร้างพรีเซนเทชันที่ข้อความใหม่ใช้กฎการพิสูจน์ภาษาเยอรมัน:

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$loadOptions = new LoadOptions();
$loadOptions->setDefaultTextLanguage("de-DE");

$presentation = new Presentation($loadOptions);
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 320, 80);
    $shape->getTextFrame()->setText("Willkommen zur Präsentation");

    $presentation->save("default_text_language.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

ใช้หลายภาษาในย่อหน้าเดียว

Paragraph มีคอลเลกชันของส่วนข้อความ สร้าง Portion แยกกันสำหรับแต่ละภาษาและตั้งค่า LanguageId ของแต่ละส่วนอย่างอิสระ

ตัวอย่างนี้สร้างย่อหน้าเดียวที่มีส่วนภาษาอังกฤษและฝรั่งเศส:

use aspose\slides\Portion;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 420, 80);
    $paragraph = $shape->getTextFrame()->getParagraphs()->get_Item(0);
    $paragraph->getPortions()->clear();

    $englishPortion = new Portion("Welcome");
    $englishPortion->getPortionFormat()->setLanguageId("en-US");
    $paragraph->getPortions()->add($englishPortion);

    $frenchPortion = new Portion(" — Bienvenue");
    $frenchPortion->getPortionFormat()->setLanguageId("fr-FR");
    $paragraph->getPortions()->add($frenchPortion);

    $presentation->save("multilingual_text.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

เปิดหรือปิดการตรวจสอบการสะกดสำหรับส่วนย่อยแต่ละส่วน

PortionFormat สืบทอดคุณสมบัติข้อความทั่วไปจาก BasePortionFormat. เข้าถึงรูปแบบของส่วนผ่าน Portion::getPortionFormat แล้วใช้ BasePortionFormat::setSpellCheck เพื่อควบคุมว่ามีการตรวจสอบการสะกดคำหรือไม่ ค่าเริ่มต้นคือ false: true เปิดการตรวจสอบ, false ปิดการตรวจสอบ

การตั้งค่านี้ใช้กับส่วนข้อความแต่ละส่วน ส่วนต่าง ๆ ในย่อหน้าเดียวจึงสามารถใช้ค่าต่างกันได้ BasePortionFormat::setLanguageId และ setSpellCheck ทำหน้าที่เสริมกัน: setLanguageId ระบุภาษาการพิสูจน์, ส่วน setSpellCheck กำหนดว่าการตรวจสอบการสะกดจะทำได้หรือไม่

BasePortionFormat::setProofDisabled ยังควบคุมการพิสูจน์, แต่เป็นสถานะ “ไม่ทำการพิสูจน์” ที่กว้างกว่าโดยใช้ NullableBool. ใช้ setSpellCheck เมื่อคุณต้องการสวิตช์แบบ Boolean ตรงสำหรับการตรวจสอบการสะกด ใช้ setProofDisabled เมื่อคุณต้องการเก็บหรือควบคุม metadata “ไม่ทำการพิสูจน์” ของพรีเซนเทชันอย่างชัดเจน รวมถึงสถานะ NotDefined หากตั้งค่าทั้งสองให้ค่าตรงกัน; อย่าใช้ setSpellCheck(true) ร่วมกับ setProofDisabled(NullableBool::True)

คุณสมบัติเหล่านี้กำหนด metadata การพิสูจน์ที่ PowerPoint และแอปพลิเคชันพรีเซนเทชันอื่นใช้ Aspose.Slides ไม่ได้ใช้เพื่อรันการตรวจสอบการสะกดโดยพจนานุกรม หรือคืนรายการคำที่สะกดผิด

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

use aspose\slides\Portion;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$inputFile = "spell_check_input.pptx";
$outputFile = "spell_check_settings.pptx";

$sourcePresentation = new Presentation();
try {
    $sourceSlide = $sourcePresentation->getSlides()->get_Item(0);
    $sourceShape = $sourceSlide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 420, 80);
    $sourceParagraph = $sourceShape->getTextFrame()->getParagraphs()->get_Item(0);
    $sourceParagraph->getPortions()->clear();

    $sourceEnglishPortion = new Portion("Check this text. ");
    $sourceEnglishPortion->getPortionFormat()->setLanguageId("en-US");
    $sourceParagraph->getPortions()->add($sourceEnglishPortion);

    $sourceFrenchPortion = new Portion("Ignorer ce code : ZX-81.");
    $sourceFrenchPortion->getPortionFormat()->setLanguageId("fr-FR");
    $sourceParagraph->getPortions()->add($sourceFrenchPortion);

    $sourcePresentation->save($inputFile, SaveFormat::Pptx);
} finally {
    $sourcePresentation->dispose();
}

$presentation = new Presentation($inputFile);
try {
    $shape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    $portions = $shape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions();

    $checkedPortion = $portions->get_Item(0);
    $checkedPortion->getPortionFormat()->setLanguageId("en-US");
    $checkedPortion->getPortionFormat()->setSpellCheck(true);

    $suppressedPortion = $portions->get_Item(1);
    $suppressedPortion->getPortionFormat()->setLanguageId("fr-FR");
    $suppressedPortion->getPortionFormat()->setSpellCheck(false);

    $presentation->save($outputFile, SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

$reopenedPresentation = new Presentation($outputFile);
try {
    $reopenedShape = $reopenedPresentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    $storedPortions = $reopenedShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions();

    $storedPortionCount = java_values($storedPortions->getCount());
    $firstStoredFormat = $storedPortions->get_Item(0)->getPortionFormat();
    $secondStoredFormat = $storedPortions->get_Item(1)->getPortionFormat();

    $firstPortionStored = $storedPortionCount === 2 && 
        java_values($firstStoredFormat->getLanguageId()) === "en-US" && 
        java_values($firstStoredFormat->getSpellCheck());

    $secondPortionStored = $storedPortionCount === 2 && 
        java_values($secondStoredFormat->getLanguageId()) === "fr-FR" && 
        !java_values($secondStoredFormat->getSpellCheck());

    if ($firstPortionStored && $secondPortionStored) {
        echo "The proofing settings were stored correctly.";
    } else {
        echo "The proofing settings could not be verified.";
    }
} finally {
    $reopenedPresentation->dispose();
}

Presentation::joinPortionsWithSameFormatting รวมส่วนที่อยู่ติดกันและมีรูปแบบเดียวกัน ความแตกต่างเพียง SpellCheck อย่างเดียวไม่ทำให้ส่วนเหล่านั้นแยกออกจากกัน; หลังจากรวมแล้วส่วนที่ได้จะคงค่าของ SpellCheck ของส่วนแรก หากส่วนต้องการการตั้งค่าการตรวจสอบต่างกัน ให้เรียก joinPortionsWithSameFormatting ก่อนกำหนดค่าดังกล่าว, หรือสแกนขอบเขตของส่วนที่ได้และตั้งค่าใหม่หลังจากนั้น ส่วนที่มีค่า LanguageId แตกต่างกันยังคงแยกจากกัน เพราะรูปแบบภาษาการพิสูจน์ต่างกัน

คำถามที่พบบ่อย

รหัสภาษา (language ID) ทำให้ข้อความแปลหรือไม่?

ไม่. BasePortionFormat::setLanguageId เก็บ metadata การพิสูจน์สำหรับการสะกดและไวยากรณ์; ไม่ได้เปลี่ยนเนื้อหาข้อความ แปลข้อความแยกต่างหาก แล้วตั้งรหัสภาษาที่เหมาะสมสำหรับแต่ละส่วนที่แปลแล้ว

ภาษาการพิสูจน์ควบคุมฟอนต์, การแบ่งคำ, หรือการตัดบรรทัดหรือไม่?

ไม่. รหัสภาษามีไว้เพื่อการพิสูจน์เท่านั้น การเรนเดอร์และการจัดวางข้อความอิงตาม ฟอนต์, ระบบการเขียน, และการตั้งค่ากรอบข้อความ สำหรับการเรนเดอร์ที่ถูกต้อง ให้จัดเตรียมฟอนต์ที่ต้องการ, กำหนด การแทนที่ฟอนต์, หรือ ฝังฟอนต์ ในพรีเซนเทชัน

ย่อหน้าเดียวสามารถใช้หลายภาษาการพิสูจน์ได้หรือไม่?

ได้. กำหนดแต่ละภาษาให้กับส่วนแยกต่างหาก ตามตัวอย่างย่อหน้าหลายภาษา

ควรใช้ setDefaultTextLanguage หรือ setLanguageId?

ใช้ LoadOptions::setDefaultTextLanguage เมื่อคุณต้องการตั้งค่าภาษาเริ่มต้นสำหรับข้อความที่สร้างใหม่ ใช้ BasePortionFormat::setLanguageId เมื่อส่วนข้อความใดต้องการภาษาการพิสูจน์เฉพาะ หรือเมื่อย่อหน้ามีหลายภาษา