HtmlSaveOptions

HtmlSaveOptions

개요

HtmlSaveOptions은 Aspose.PDF FOSS에서 .NET을 위한 클래스입니다. 상속 대상: UnifiedSaveOptions.

PDF 문서를 HTML로 저장하기 위한 옵션.

이 클래스는 .NET 프로그램에서 HtmlSaveOptions 객체를 다루기 위한 4개의 메서드를 제공합니다. 사용 가능한 메서드: HtmlSaveOptions. Aspose.PDF FOSS for .NET 패키지를 설치한 후에는 모든 .NET 애플리케이션에서 모든 공개 멤버에 접근할 수 있습니다. 속성: AdditionalMarginWidthInPoints, ApsIntermediateFileIfAny, BatchSize, CacheGlyphs, CloseResponse, CompressSvgGraphicsIfAny, 및 27개 더.

속성

이름유형액세스설명
AdditionalMarginWidthInPointsint읽기/쓰기출력 HTML에서 각 페이지의 오른쪽 여백에 추가된 여분 너비 (PDF 포인트).
BatchSizeint읽기/쓰기SplitIntoPages가 적용될 때 출력 배치당 처리되는 PDF 페이지 수는 얼마입니까?
CompressSvgGraphicsIfAnybool읽기/쓰기SVG 그래픽이 있는 경우 압축합니다.
ConvertMarkedContentToLayersbool읽기/쓰기마크된 콘텐츠 섹션을 HTML 레이어로 변환합니다.
DefaultFontNamestring읽기/쓰기글리프에 해결 가능한 폰트가 없을 때 사용되는 기본 폰트 이름.
DocumentTypeHtmlDocumentType읽기/쓰기HTML doc-type 작성자에 의해 내보내집니다.
ExplicitListOfSavedPagesint[]읽기/쓰기렌더링할 1-based 페이지 번호.
FixedLayoutbool읽기/쓰기텍스트 위치를 내보낼 때 고정(절대) 레이아웃을 사용하십시오.
FlowLayoutParagraphFullWidthbool읽기/쓰기플로우 레이아웃 단락이 페이지 전체 너비에 걸치도록 합니다.
FontSourcesAspose.Pdf.Text.FontSourceCollection읽기폰트를 HTML 출력에 포함할 때 참고한 폰트 소스.
IgnoreResourceFontErrorsbool읽기/쓰기변환 시 발생하는 폰트 리소스 오류를 억제하고 대체합니다.
IgnoredTextFontSizeSystem.Nullable<float>읽기/쓰기이 값 이하인 글꼴 크기의 글리프는 출력에서 제외됩니다.
ImageResolutionint읽기/쓰기벡터 또는 글꼴 콘텐츠를 래스터화할 때 사용되는 DPI.
MinimalLineWidthfloat읽기/쓰기선이 넓어지게 되는 최소 스트로크 너비.
PreventGlyphsGroupingbool읽기/쓰기true이면, 글리프가 실행으로 그룹화되는 대신 개별적으로 출력됩니다.
RenderTextAsImagebool읽기/쓰기텍스트 조각을 선택 가능한 텍스트가 아니라 래스터 이미지로 렌더링합니다.
SaveFullFontbool읽기/쓰기서브세팅 대신 전체 글꼴 테이블을 삽입합니다.
SimpleTextboxModeGroupingbool읽기/쓰기인접한 글리프들을 하나의 텍스트 박스로 그룹화하여 더 깔끔한 DOM을 만듭니다.
SplitCssIntoPagesbool읽기/쓰기SplitIntoPages가 true일 때, CSS를 페이지별로 또한 분할합니다.
SplitIntoPagesbool읽기/쓰기단일 연결된 문서 대신 페이지당 하나의 HTML 파일을 생성합니다.
Titlestring읽기/쓰기HTML요소.</td> </tr> <tr> <td><code>PngIntermediateFileIfAny</code></td> <td><code>string</code></td> <td>읽기/쓰기</td> <td>PNG 중간 파일 경로 (디버그 아티팩트, HtmlLoadOptions.XpsIntermediateFileIfAny / XpsIntermediateFileIfAny와 동일).</td> </tr> <tr> <td><code>XpsIntermediateFileIfAny</code></td> <td><code>string</code></td> <td>읽기/쓰기</td> <td>XPS 중간 파일(디버그 아티팩트)의 경로.</td> </tr> <tr> <td><code>ApsIntermediateFileIfAny</code></td> <td><code>string</code></td> <td>읽기/쓰기</td> <td>APS 중간 파일(디버그 아티팩트)의 경로.</td> </tr> <tr> <td><code>TryMergeFragments</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>가능한 경우 인접한 텍스트 조각을 하나의 실행으로 병합합니다.</td> </tr> <tr> <td><code>UseZOrder</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>중첩된 콘텐츠를 HTML을(를) 출력할 때 z-순서를 준수합니다.</td> </tr> <tr> <td><code>ExtractOcrSublayerOnly</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>OCR 하위 레이어만 추출하도록 가져오거나 설정합니다.</td> </tr> <tr> <td><code>CloseResponse</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>닫기 응답을 가져오거나 설정합니다.</td> </tr> <tr> <td><code>SaveFullPath</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>저장 전체 경로를 가져오거나 설정합니다.</td> </tr> <tr> <td><code>WarningHandler</code></td> <td><code>IWarningCallback</code></td> <td>읽기/쓰기</td> <td>직렬화 중에 경고 처리기가 호출되었습니다.</td> </tr> <tr> <td><code>WarningHandlerName</code></td> <td><code>string</code></td> <td>읽기/쓰기</td> <td>레거시 문자열형 경고-핸들러 훅 (오픈소스 전용 추가).</td> </tr> <tr> <td><code>CacheGlyphs</code></td> <td><code>bool</code></td> <td>읽기/쓰기</td> <td>반복적인 텍스트 출력 속도를 높이기 위해 래스터화된 글리프를 미리 캐시합니다.</td> </tr> <tr> <td><code>SaveFormat</code></td> <td><code>SaveFormat</code></td> <td>읽기</td> <td>이 옵션 인스턴스가 구성하는 저장 형식입니다.</td> </tr> </tbody> </table> <h2>메서드<span class="hx-absolute -hx-mt-20" id="메서드"></span> <a href="#%eb%a9%94%ec%84%9c%eb%93%9c" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table> <thead> <tr> <th>시그니처</th> <th>설명</th> </tr> </thead> <tbody> <tr> <td><code>HtmlSaveOptions()</code></td> <td>이 HtmlSaveOptions 인스턴스에서 HtmlSaveOptions를 호출합니다.</td> </tr> <tr> <td><code>HtmlSaveOptions(fixedLayout: bool)</code></td> <td>이 HtmlSaveOptions 인스턴스에서 HtmlSaveOptions(fixedLayout)를 호출합니다.</td> </tr> <tr> <td><code>HtmlSaveOptions(documentType: HtmlDocumentType)</code></td> <td>이 HtmlSaveOptions 인스턴스에서 HtmlSaveOptions(documentType)를 호출합니다.</td> </tr> <tr> <td><code>HtmlSaveOptions(documentType: HtmlDocumentType, fixedLayout: bool)</code></td> <td>이 HtmlSaveOptions 인스턴스에서 HtmlSaveOptions(documentType, fixedLayout)를 호출합니다.</td> </tr> </tbody> </table> <h2>참조<span class="hx-absolute -hx-mt-20" id="참조"></span> <a href="#%ec%b0%b8%ec%a1%b0" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><ul> <li><a href="https://reference.aspose.com/pdf/net/aspose.pdf/htmlsaveoptions/" target="_blank" rel="noopener">Aspose.PDF for .NET — Enterprise API Reference</a></li> </ul> </div> <div class="hx-mt-16"></div> </main> </article> </div> <aside class="evidence-panel"> <div class="evidence-grade" data-grade="A"> Quality grade: <strong>A</strong> </div> <details> <summary>Sources</summary> <dl> <dt>Knowledge version</dt> <dd>26.8.0 — <code>663783d1</code></dd> <dt>APIs verified</dt> <dd>HtmlDocumentType, HtmlSaveOptions, HtmlSaveOptions.AdditionalMarginWidthInPoints, HtmlSaveOptions.BatchSize, HtmlSaveOptions.CompressSvgGraphicsIfAny, HtmlSaveOptions.ConvertMarkedContentToLayers, HtmlSaveOptions.DefaultFontName, HtmlSaveOptions.DocumentType, HtmlSaveOptions.ExplicitListOfSavedPages, HtmlSaveOptions.FixedLayout, HtmlSaveOptions.FlowLayoutParagraphFullWidth, HtmlSaveOptions.FontSources, HtmlSaveOptions.HtmlSaveOptions, HtmlSaveOptions.IgnoreResourceFontErrors, HtmlSaveOptions.IgnoredTextFontSize, HtmlSaveOptions.ImageResolution, HtmlSaveOptions.MinimalLineWidth, HtmlSaveOptions.PreventGlyphsGrouping, HtmlSaveOptions.RenderTextAsImage, HtmlSaveOptions.SaveFullFont, HtmlSaveOptions.SimpleTextboxModeGrouping, HtmlSaveOptions.SplitCssIntoPages, IWarningCallback, SaveFormat, UnifiedSaveOptions</dd> <dt>Formats</dt> <dd><span class="evidence-format">pdf <em>(both)</em></span><span class="evidence-format">html <em>(both)</em></span><span class="evidence-format">svg <em>(both)</em></span><span class="evidence-format">text <em>(export)</em></span><span class="evidence-format">doc <em>(import)</em></span></dd> </dl> </details> </aside> <script defer src="/js/main.js" integrity=""></script> <script defer src="/lib/flexsearch/flexsearch.bundle.min.e45e7eb129aae9f684e7f863bb7c1d612ea124b7068e12af80c58c62764a5379.js" integrity="sha256-5F5+sSmq6faE5/hju3wdYS6hJLcGjhKvgMWMYnZKU3k="></script> <script defer src="/ko.search.js" integrity=""></script> <script> (function(i, s, o, g, r, a, m) { i['ContainerizeMenuObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.append(a) })(window, document, 'script', 'https://menucdn.containerize.com/core/engine.min.js?v=1.0.1', 'asposeorg-en'); </script> <div class="lang-selector" id="locale" style="display:none!important"> <a href="#"> <em class=" flag-24"></em> 한국어</a> </div> <div class="modal fade lanpopup" id="langModal" tabindex="-1" aria-labelledby="langModalLabel" data-nosnippet="" aria-modal="true" role="dialog" style="display:none"> <div class="modal-dialog modal-dialog-centered modal-lg"> <div class="modal-content" style="background-color: #343a40"> <a class="lang-close" id="lang-close"> <img src="/close.svg" width="14" height="14" alt="Close"> </em> </a> <div class="modal-body"> <div class="rowbox"><div class="col langbox"> <a href="https://reference-qa.aspose.org/pdf/net/htmlsaveoptions/" data-title="En" class="langmenu"> <span> <em class=" flag-24"></em> English </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/ar/pdf/net/htmlsaveoptions/" data-title="Ar" class="langmenu"> <span> <em class=" flag-24"></em> العربية </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/cs/pdf/net/htmlsaveoptions/" data-title="Cs" class="langmenu"> <span> <em class=" flag-24"></em> Čeština </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/de/pdf/net/htmlsaveoptions/" data-title="De" class="langmenu"> <span> <em class=" flag-24"></em> Deutsch </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/el/pdf/net/htmlsaveoptions/" data-title="El" class="langmenu"> <span> <em class=" flag-24"></em> Ελληνικά </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/es/pdf/net/htmlsaveoptions/" data-title="Es" class="langmenu"> <span> <em class=" flag-24"></em> Español </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/fa/pdf/net/htmlsaveoptions/" data-title="Fa" class="langmenu"> <span> <em class=" flag-24"></em> فارسی </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/fr/pdf/net/htmlsaveoptions/" data-title="Fr" class="langmenu"> <span> <em class=" flag-24"></em> Français </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/he/pdf/net/htmlsaveoptions/" data-title="He" class="langmenu"> <span> <em class=" flag-24"></em> עברית </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/hi/pdf/net/htmlsaveoptions/" data-title="Hi" class="langmenu"> <span> <em class=" flag-24"></em> हिन्दी </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/hu/pdf/net/htmlsaveoptions/" data-title="Hu" class="langmenu"> <span> <em class=" flag-24"></em> Magyar </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/id/pdf/net/htmlsaveoptions/" data-title="Id" class="langmenu"> <span> <em class=" flag-24"></em> Bahasa Indonesia </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/it/pdf/net/htmlsaveoptions/" data-title="It" class="langmenu"> <span> <em class=" flag-24"></em> Italiano </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/ja/pdf/net/htmlsaveoptions/" data-title="Ja" class="langmenu"> <span> <em class=" flag-24"></em> 日本語 </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/nl/pdf/net/htmlsaveoptions/" data-title="Nl" class="langmenu"> <span> <em class=" flag-24"></em> Nederlands </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/pl/pdf/net/htmlsaveoptions/" data-title="Pl" class="langmenu"> <span> <em class=" flag-24"></em> Polski </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/pt/pdf/net/htmlsaveoptions/" data-title="Pt" class="langmenu"> <span> <em class=" flag-24"></em> Português </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/ro/pdf/net/htmlsaveoptions/" data-title="Ro" class="langmenu"> <span> <em class=" flag-24"></em> Română </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/ru/pdf/net/htmlsaveoptions/" data-title="Ru" class="langmenu"> <span> <em class=" flag-24"></em> Русский </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/sv/pdf/net/htmlsaveoptions/" data-title="Sv" class="langmenu"> <span> <em class=" flag-24"></em> Svenska </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/th/pdf/net/htmlsaveoptions/" data-title="Th" class="langmenu"> <span> <em class=" flag-24"></em> ภาษาไทย </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/tr/pdf/net/htmlsaveoptions/" data-title="Tr" class="langmenu"> <span> <em class=" flag-24"></em> Türkçe </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/uk/pdf/net/htmlsaveoptions/" data-title="Uk" class="langmenu"> <span> <em class=" flag-24"></em> Українська </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/vi/pdf/net/htmlsaveoptions/" data-title="Vi" class="langmenu"> <span> <em class=" flag-24"></em> Tiếng Việt </span> </a> </div><div class="col langbox"> <a href="https://reference-qa.aspose.org/zh/pdf/net/htmlsaveoptions/" data-title="Zh" class="langmenu"> <span> <em class=" flag-24"></em> 中文 </span> </a> </div></div> </div> </div> </div> </div> <script defer> const langshowpop = document.getElementById('locale'); const langhidepop = document.getElementById('lang-close'); langshowpop.addEventListener('click', addClass, false); langhidepop.addEventListener('click', removeClass, false); function addClass() { var langshow = document.querySelector('.lanpopup'); langshow.classList.toggle('show'); } function removeClass() { var langclose = document.querySelector('.lanpopup'); langclose.classList.remove('show'); } </script> <script defer> const observer = new MutationObserver((mutations, obs) => { const parent = document.getElementById('DynabicMenuUserControls'); if (parent) { const child = document.getElementById('locale'); parent.prepend(child); child.setAttribute("id", "localswitch"); child.setAttribute('style', 'visibility:visible'); obs.disconnect(); return; } }); observer.observe(document, { childList: true, subtree: true }); </script> <style> .modal { position: fixed; top: 0; left: 0; z-index: 1049; display: none; width: 100%; height: 100%; overflow-x: hidden; overflow-y: auto; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { transform: none; } .modal-dialog-centered { display: flex; align-items: center; min-height: calc(100% - 1rem); } .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-body { position: relative; flex: 1 1 auto; padding: 1rem; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-centered { min-height: calc(100% - 3.5rem); } } @media (min-width: 992px) { .modal-lg { max-width: 800px; } } #langModal a { text-decoration: none !important; } #langModal a:focus, #langModal a:visited, #langModal a:hover { text-decoration: none !important; } .langbox { margin: 0; width: 20% !important; flex: none; } #langModal a { color: #fff; font-size: 14px !important; padding: 10px 0; display: block; } #langModal { display: none; } #langModal.show { display: block !important; opacity: 1; } .rowbox { display: flex; align-items: center; justify-content: center; flex-flow: wrap; } .lanpopup.show:before { content: ""; position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: 100%; background: #0009; } .lang-close { position: absolute; z-index: 999999; color: #fff; background: #dc4342 !important; top: -10px; right: -10px; width: 24px; height: 24px; border-radius: 100%; padding: 0; text-align: center; line-height: 21px; cursor: pointer; display: flex; align-items: center; justify-content: center; } .lang-close img { display: none; } .lang-close:before { content: ""; position: absolute; top: 0; left: 0; width: 12px; height: 2px; background: #fff; transform: rotate(-45deg); margin: 11px 6px; } .lang-close:after { content: ""; position: absolute; top: 0; left: 0; width: 12px; height: 2px; background: #fff; transform: rotate(45deg); margin: 11px 6px; } .lang-close img { width: 14px; height: 14px; filter: invert(1); } .lang-close:hover { transform: scale(1.1); } .col.langbox { flex-grow: inherit; flex-basis: inherit; } @media (max-width: 768px) { .langbox { width: 30% !important; text-align: left; } } .langbox span { display: flex; align-items: center; } .lang-selector:hover > a, .topsearchbtn:hover img, .userlogin:hover img { filter: none !important; color: #3ca3d9 !important; } body .lang-selector:hover { background-color: transparent !important; } @media (max-width: 768px) { .lang-close { right: 0 !important; } .lang-selector a { font-size: 0; } body .lang-selector { min-width: 35px !important; margin: 0 !important; width: 35px !important; } } body .lang-selector#localswitch a { color: #ffffff; cursor: pointer; } .subscibe-rhs #subscribe_fields input { min-height: 50px !important; max-width: 60% !important; } @media (max-width: 992px) and (min-width: 0px) { .subscibe-rhs #subscribe_fields input { max-width: 100% !important; width: 100% !important; margin: 0 !important; } } @media (max-width: 668px) { body .lang-selector#localswitch a { font-size: 0 !important; } body div#DynabicMenuInnerDiv .venturelogo a { background-size: 150px !important; width: 150px !important; background-position: center !important; margin-top: 0 !important; min-height: 60px !important; } } body .lang-selector#localswitch a { font-size: 14px !important; } body .lang-selector { min-width: inherit !important; width: inherit !important; max-width: inherit !important; white-space: nowrap; margin-right: 5px !important; } .langbox span { text-align: center !important; display: block; } .langbox a:hover { color: #ffffff !important; background: #222222; } .flag-24:before, .flag-24:after { display: none !important; } .lang-selector .flag-24 { width: 18px; height: 18px; background: url(https://www.documentprocessing.com/images/common/globe-ico.png) transparent 0 0; background-size: cover; display: block !important; } </style> <script defer> const localizedSubdomains = ["products.aspose.org", "kb.aspose.org", "docs.aspose.org", "reference.aspose.org", "blog.aspose.org", "www.aspose.org", "about.aspose.org", "websites.aspose.org"]; const familyBasedLocalization = []; const productFamilies = ["3d", "barcode", "cad", "cells", "diagram", "drawing", "email", "finance", "font", "gis", "html", "imaging", "medical", "note", "ocr", "omr", "page", "pdf", "psd", "pub", "slides", "svg", "tasks", "tex", "words", "zip"]; const knownLangCodes = ["ar", "az", "bg", "bn", "cs", "de", "el", "es", "et", "fa", "fi", "fr", "ga", "he", "hi", "hr", "hu", "hy", "id", "it", "ja", "jv", "ka", "ko", "lt", "lv", "ms", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "th", "tr", "uk", "vi", "zh"]; function getLanguageFromHtml() { return document.documentElement.lang || 'en'; } function applyTranslations(translations) { document.querySelectorAll('[data-i18n]').forEach(element => { const key = element.getAttribute('data-i18n'); if (key && translations[key]) { element.textContent = translations[key]; } }); } function updateLocalizedLinks() { const currentLang = getLanguageFromHtml(); const langPath = currentLang === 'en' ? '' : `/${currentLang}`; document.querySelectorAll('[data-localize]').forEach(element => { let originalUrl = new URL(element.getAttribute('href'), window.location.origin); let baseUrl = originalUrl.hostname; let path = originalUrl.pathname.replace(/\/$/, ''); if (!baseUrl) return; const pathSegments = path.split('/').filter(Boolean); const firstSegment = pathSegments[0] || ''; const hasExistingLang = knownLangCodes.includes(firstSegment); if (localizedSubdomains.includes(baseUrl)) { element.href = hasExistingLang ? `https://${baseUrl}${path}` : `https://${baseUrl}${langPath}${path}/`; } else if (familyBasedLocalization.includes(baseUrl)) { let family = pathSegments[0]; if (productFamilies.includes(family)) { element.href = hasExistingLang ? `https://${baseUrl}${path}` : `https://${baseUrl}/${family}${langPath}/`; } else { element.href = hasExistingLang ? `https://${baseUrl}${path}` : `https://${baseUrl}${langPath}/`; } } }); } function loadTranslations(lang) { fetch(`/translations/${lang}.json`) .then(response => { if (!response.ok) { throw new Error(`Failed to fetch ${lang}.json`); } return response.json(); }) .then(translations => { applyTranslations(translations); updateLocalizedLinks(); }) .catch(error => { console.error(`Error loading ${lang} translations:`, error); }); } function ensureMenuLoaded(callback) { const menu = document.querySelector('.menuitems'); if (menu) { callback(); } else { setTimeout(() => ensureMenuLoaded(callback), 100); } } function handleLanguageChange() { setTimeout(() => { const newLang = getLanguageFromHtml(); loadTranslations(newLang); }, 500); } document.addEventListener('DOMContentLoaded', () => { const currentLang = getLanguageFromHtml(); ensureMenuLoaded(() => { loadTranslations(currentLang); }); const langSwitcher = document.querySelector('#locale, #langModal, .langmenu'); if (langSwitcher) { langSwitcher.addEventListener('click', handleLanguageChange); } const observer = new MutationObserver(() => handleLanguageChange()); observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang'] }); }); </script> </body> </html>