使用 Python 自动化演示文稿本地化

概览

Aspose.Slides for Python via .NET 允许您为单独的文本片段配置校对元数据。使用 BasePortionFormat.language_id 指定校对语言,使用 BasePortionFormat.spell_check 允许或抑制拼写检查,使用 BasePortionFormat.proof_disabled 控制更广泛的“不校对”状态。由于这些设置在片段级别应用,同一段落可以包含多种语言和不同的校对规则。

本文介绍如何为特定文本分配语言,使用 LoadOptions.default_text_language 为新文本设置默认语言,构建多语言段落,在 spell_checkproof_disabled 之间进行选择,以及在使用 Presentation.join_portions_with_same_formatting 时保留预期的设置。这些属性存储演示文稿应用程序的元数据;它们不翻译文本、执行基于词典的拼写检查或返回拼写错误的单词。

为文本设置校对语言

创建或加载一个 Presentation,通过 Portion.portion_format 访问所需的文本片段,并为其分配语言标识符。以下示例创建一个形状,将校对语言设置为英式英语,并使用 Presentation.save 保存结果:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 320, 80)
    shape.text_frame.text = "Set the proofing language for this text."

    portion = shape.text_frame.paragraphs[0].portions[0]
    portion.portion_format.language_id = "en-GB"

    presentation.save("proofing_language.pptx", slides.export.SaveFormat.PPTX)

为新文本设置默认语言

使用 LoadOptions.default_text_language 指定 Aspose.Slides 为新创建的文本分配的校对语言。当演示文稿中的大多数或全部新文本使用相同语言时,此设置非常有用。它不会更改已显式设置语言的文本的语言元数据。

以下示例创建一个演示文稿,其新文本使用德语校对规则:

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.default_text_language = "de-DE"

with slides.Presentation(load_options) as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 320, 80)
    shape.text_frame.text = "Willkommen zur Präsentation"

    presentation.save("default_text_language.pptx", slides.export.SaveFormat.PPTX)

在同一段落中使用多种语言

Paragraph 包含一组文本片段。为每种语言创建单独的 Portion,并独立设置其 language_id

此示例创建一个包含英文和法文片段的段落:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 80)
    paragraph = shape.text_frame.paragraphs[0]
    paragraph.portions.clear()

    english_portion = slides.Portion("Welcome")
    english_portion.portion_format.language_id = "en-US"
    paragraph.portions.add(english_portion)

    french_portion = slides.Portion(" — Bienvenue")
    french_portion.portion_format.language_id = "fr-FR"
    paragraph.portions.add(french_portion)

    presentation.save("multilingual_text.pptx", slides.export.SaveFormat.PPTX)

为单个片段启用或抑制拼写检查

PortionFormat 继承了由 BasePortionFormat 定义的通用文本属性。通过 Portion.portion_format 访问片段的格式,并设置 BasePortionFormat.spell_check 以控制演示文稿应用程序是否检查该片段的拼写。默认值为 FalseTrue 允许拼写检查,False 抑制拼写检查。

此设置适用于单个文本片段。因此,同一段落中的不同片段可以使用不同的值。BasePortionFormat.language_idspell_check 具有互补作用:language_id 标识校对语言,而 spell_check 决定是否允许对该片段进行拼写检查。

BasePortionFormat.proof_disabled 也控制校对,但它表示更广泛的“不要校对”状态,采用 NullableBool。在仅需要针对拼写检查的布尔开关时使用 spell_check。在需要保留或显式控制演示文稿的无校对元数据(包括其 NOT_DEFINED 状态)时使用 proof_disabled。如果同时设置两个属性,请保持它们的值一致;不要将 spell_check = Trueproof_disabled = slides.NullableBool.TRUE 混用。

这些属性配置 PowerPoint 和其他演示文稿应用程序使用的校对元数据。Aspose.Slides 并不利用它们进行基于词典的拼写检查或返回拼写错误单词列表。

以下完整示例创建一个输入演示文稿,加载它,为同一段落中的两个片段分配不同的拼写检查设置和校对语言,保存结果,重新打开并验证存储的值:

import aspose.slides as slides

input_file = "spell_check_input.pptx"
output_file = "spell_check_settings.pptx"

with slides.Presentation() as source_presentation:
    source_slide = source_presentation.slides[0]
    source_shape = source_slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 80)
    source_paragraph = source_shape.text_frame.paragraphs[0]
    source_paragraph.portions.clear()

    source_english_portion = slides.Portion("Check this text. ")
    source_english_portion.portion_format.language_id = "en-US"
    source_paragraph.portions.add(source_english_portion)

    source_french_portion = slides.Portion("Ignorer ce code : ZX-81.")
    source_french_portion.portion_format.language_id = "fr-FR"
    source_paragraph.portions.add(source_french_portion)

    source_presentation.save(input_file, slides.export.SaveFormat.PPTX)

with slides.Presentation(input_file) as presentation:
    shape = presentation.slides[0].shapes[0]
    portions = shape.text_frame.paragraphs[0].portions

    checked_portion = portions[0]
    checked_portion.portion_format.language_id = "en-US"
    checked_portion.portion_format.spell_check = True

    suppressed_portion = portions[1]
    suppressed_portion.portion_format.language_id = "fr-FR"
    suppressed_portion.portion_format.spell_check = False

    presentation.save(output_file, slides.export.SaveFormat.PPTX)

with slides.Presentation(output_file) as reopened_presentation:
    reopened_shape = reopened_presentation.slides[0].shapes[0]
    stored_portions = reopened_shape.text_frame.paragraphs[0].portions

    has_two_portions = stored_portions.count == 2

    first_portion_stored = (
        has_two_portions 
        and stored_portions[0].portion_format.language_id == "en-US" 
        and stored_portions[0].portion_format.spell_check
    )

    second_portion_stored = (
        has_two_portions
        and stored_portions[1].portion_format.language_id == "fr-FR" 
        and not stored_portions[1].portion_format.spell_check
    )

    if first_portion_stored and second_portion_stored:
        print("The proofing settings were stored correctly.")
    else:
        print("The proofing settings could not be verified.")

Presentation.join_portions_with_same_formatting 将具有相同格式的相邻片段合并。仅 spell_check 的差异不足以保持片段分离;合并后,结果片段保留首个片段的 spell_check 值。如果片段需要不同的拼写检查设置,请在分配这些设置之前调用 join_portions_with_same_formatting,或检查合并后的片段边界并在随后重新应用设置。具有不同 language_id 值的片段会保持分离,因为它们的校对语言格式不同。

常见问答

语言 ID 会翻译文本吗?

不会。BasePortionFormat.language_id 只存储用于拼写和语法校对的元数据;它不改变文本内容。请单独翻译文本,然后为每个翻译后的片段设置相应的语言标识符。

校对语言会控制字体、连字符或换行吗?

不会。语言标识符用于校对。文本渲染和布局主要取决于可用的字体、书写系统和文本框设置。为确保可靠渲染,请提供所需的字体,配置字体替换,或在演示文稿中嵌入字体

一个段落可以使用多种校对语言吗?

可以。如多语言段落示例所示,将每种语言分配给独立的片段。

应该使用 default_text_language 还是 language_id

当您希望为新创建的文本提供默认语言时,使用 LoadOptions.default_text_language。当特定片段需要显式校对语言,或段落中包含多种语言时,使用 BasePortionFormat.language_id