Otomatisasi Lokalisasi Presentasi di Java

Gambaran Umum

Aspose.Slides for Java memungkinkan Anda mengkonfigurasi metadata pemeriksaan untuk bagian teks individu. Gunakan IBasePortionFormat.setLanguageId untuk mengidentifikasi bahasa pemeriksaan, IBasePortionFormat.setSpellCheck untuk mengizinkan atau menekan pemeriksaan ejaan, dan IBasePortionFormat.setProofDisabled untuk mengontrol keadaan “tidak melakukan pemeriksaan” yang lebih luas. Karena pengaturan ini diterapkan pada tingkat bagian, satu paragraf dapat berisi beberapa bahasa dan aturan pemeriksaan yang berbeda.

Artikel ini menjelaskan cara menetapkan bahasa ke teks tertentu, mengatur bahasa default untuk teks baru dengan LoadOptions.setDefaultTextLanguage, membuat paragraf multibahasa, memilih antara SpellCheck dan ProofDisabled, serta mempertahankan pengaturan yang dimaksud ketika menggunakan Presentation.joinPortionsWithSameFormatting. Properti‑properti ini menyimpan metadata untuk aplikasi presentasi; mereka tidak menerjemahkan teks, melakukan pemeriksaan ejaan berbasis kamus, atau mengembalikan kata yang salah eja.

Menetapkan Bahasa Pemeriksaan untuk Teks

Buat atau muat sebuah Presentation, akses bagian teks yang dibutuhkan melalui IPortion.getPortionFormat, dan tetapkan pengidentifikasi bahasanya. Contoh berikut membuat sebuah shape, menetapkan Bahasa Inggris Britania sebagai bahasa pemeriksaan, dan menyimpan hasilnya dengan Presentation.save:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IPortion;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

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

    IPortion 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();
}

Mengatur Bahasa Default untuk Teks Baru

Gunakan LoadOptions.setDefaultTextLanguage untuk menentukan bahasa pemeriksaan yang akan diberikan Aspose.Slides kepada teks yang baru dibuat. Pengaturan ini berguna ketika sebagian besar atau seluruh teks baru dalam presentasi menggunakan bahasa yang sama. Pengaturan ini tidak mengubah metadata bahasa pada teks yang sudah memiliki bahasa eksplisit.

Contoh berikut membuat sebuah presentasi yang teks barunya menggunakan aturan pemeriksaan bahasa Jerman:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.ISlide;
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

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

Presentation presentation = new Presentation(loadOptions);
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape 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();
}

Menggunakan Beberapa Bahasa dalam Satu Paragraf

Sebuah IParagraph berisi kumpulan bagian teks. Buat Portion terpisah untuk setiap bahasa dan tetapkan LanguageId‑nya secara independen.

Contoh ini membuat satu paragraf dengan bagian bahasa Inggris dan Prancis:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IParagraph;
import com.aspose.slides.ISlide;
import com.aspose.slides.Portion;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 80);
    IParagraph paragraph = shape.getTextFrame().getParagraphs().get_Item(0);
    paragraph.getPortions().clear();

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

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

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

Mengaktifkan atau Menonaktifkan Pemeriksaan Ejaan untuk Bagian Individu

IPortionFormat mewarisi properti teks umum yang didefinisikan oleh IBasePortionFormat. Akses format sebuah bagian melalui IPortion.getPortionFormat dan gunakan IBasePortionFormat.setSpellCheck untuk mengontrol apakah aplikasi presentasi boleh memeriksa ejaan untuk bagian tersebut. Nilai bawaan adalah false: true mengizinkan pemeriksaan ejaan, sementara false menekannya.

Pengaturan ini berlaku untuk bagian teks individu. Karena itu, bagian‑bagian yang berbeda dalam paragraf yang sama dapat memiliki nilai yang berbeda. IBasePortionFormat.setLanguageId dan setSpellCheck melayani tujuan yang saling melengkapi: setLanguageId mengidentifikasi bahasa pemeriksaan, sedangkan setSpellCheck menentukan apakah pemeriksaan ejaan diizinkan untuk bagian tersebut.

IBasePortionFormat.setProofDisabled juga mengontrol pemeriksaan, tetapi ia mewakili keadaan “tidak melakukan pemeriksaan” yang lebih luas sebagai NullableBool. Gunakan setSpellCheck bila Anda membutuhkan saklar Boolean langsung khusus untuk pemeriksaan ejaan. Gunakan setProofDisabled bila Anda perlu mempertahankan atau secara eksplisit mengendalikan metadata “tidak melakukan pemeriksaan” presentasi, termasuk keadaan NotDefined. Jika Anda mengatur kedua properti, jaga konsistensi nilai mereka; jangan menggabungkan setSpellCheck(true) dengan setProofDisabled(NullableBool.True).

Properti‑properti ini mengonfigurasi metadata pemeriksaan yang digunakan oleh PowerPoint dan aplikasi presentasi lainnya. Aspose.Slides tidak menggunakan mereka untuk menjalankan pemeriksaan ejaan berbasis kamus atau mengembalikan daftar kata yang salah eja.

Contoh lengkap berikut membuat presentasi masuk, memuatnya, menetapkan pengaturan pemeriksaan ejaan dan bahasa pemeriksaan yang berbeda ke dua bagian dalam paragraf yang sama, menyimpan hasilnya, membukanya kembali, dan memverifikasi nilai yang disimpan:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IParagraph;
import com.aspose.slides.IPortion;
import com.aspose.slides.IPortionCollection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Portion;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

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

Presentation sourcePresentation = new Presentation();
try {
    ISlide sourceSlide = sourcePresentation.getSlides().get_Item(0);
    IAutoShape sourceShape = sourceSlide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 80);
    IParagraph sourceParagraph = sourceShape.getTextFrame().getParagraphs().get_Item(0);
    sourceParagraph.getPortions().clear();

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

    Portion 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 presentation = new Presentation(inputFile);
try {
    IAutoShape shape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
    IPortionCollection portions = shape.getTextFrame().getParagraphs().get_Item(0).getPortions();

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

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

    presentation.save(outputFile, SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Presentation reopenedPresentation = new Presentation(outputFile);
try {
    IAutoShape reopenedShape = (IAutoShape) reopenedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);
    IPortionCollection storedPortions = reopenedShape.getTextFrame().getParagraphs().get_Item(0).getPortions();

    boolean firstPortionStored = storedPortions.getCount() == 2 && 
            "en-US".equals(storedPortions.get_Item(0).getPortionFormat().getLanguageId()) && 
            storedPortions.get_Item(0).getPortionFormat().getSpellCheck();

    boolean secondPortionStored = storedPortions.getCount() == 2 && 
            "fr-FR".equals(storedPortions.get_Item(1).getPortionFormat().getLanguageId()) && 
            !storedPortions.get_Item(1).getPortionFormat().getSpellCheck();

    if (firstPortionStored && secondPortionStored) {
        System.out.println("The proofing settings were stored correctly.");
    } else {
        System.out.println("The proofing settings could not be verified.");
    }
} finally {
    reopenedPresentation.dispose();
}

Presentation.joinPortionsWithSameFormatting menggabungkan bagian‑bagian berurutan yang memiliki format yang sama. Perbedaan pada SpellCheck saja tidak membuat bagian‑bagian tersebut tetap terpisah; setelah digabung, bagian yang dihasilkan mempertahankan nilai SpellCheck dari bagian pertama. Jika bagian‑bagian memerlukan pengaturan pemeriksaan ejaan yang berbeda, panggil joinPortionsWithSameFormatting sebelum menetapkan pengaturan tersebut, atau periksa batas bagian yang dihasilkan dan terapkan kembali pengaturan setelahnya. Bagian‑bagian dengan nilai LanguageId yang berbeda tetap terpisah karena format bahasa pemeriksaan mereka berbeda.

FAQ

Apakah ID bahasa menerjemahkan teks?

Tidak. IBasePortionFormat.setLanguageId menyimpan metadata pemeriksaan untuk ejaan dan tata bahasa; ia tidak mengubah isi teks. Terjemahkan teks secara terpisah, lalu tetapkan pengidentifikasi bahasa yang tepat untuk setiap bagian yang telah diterjemahkan.

Apakah bahasa pemeriksaan mengendalikan font, pemenggalan kata, atau pembungkusan baris?

Tidak. Pengidentifikasi bahasa hanya untuk pemeriksaan. Rendering teks dan tata letak terutama bergantung pada font yang tersedia, sistem penulisan, dan pengaturan bingkai teks. Untuk rendering yang dapat diandalkan, sediakan font yang diperlukan, konfigurasikan penggantian font, atau sematkan font dalam presentasi.

Apakah satu paragraf dapat menggunakan beberapa bahasa pemeriksaan?

Ya. Tetapkan setiap bahasa ke bagian terpisah, seperti yang ditunjukkan dalam contoh paragraf multibahasa.

Haruskah saya menggunakan setDefaultTextLanguage atau setLanguageId?

Gunakan LoadOptions.setDefaultTextLanguage ketika Anda menginginkan nilai default untuk teks yang baru dibuat. Gunakan IBasePortionFormat.setLanguageId ketika sebuah bagian tertentu memerlukan bahasa pemeriksaan eksplisit atau ketika sebuah paragraf berisi beberapa bahasa.