Po překladu čínského článku do angličtiny nestačí jen změnit text: příslušně je třeba změnit také atribut lang.
Poté, co je článek z čínštiny přeložen do angličtiny, nestačí pouze změnit text: musí se změnit také atribut lang a místní jazykové značky HTML, jinak jej prohlížeč a software pro čtení obrazovky zpracuje ve špatném jazyce. Tento článek používá Beautiful Soup pro statické ověření s příklady smíšených jazyků, skripty Python a přijímacími formuláři.
Poté, co je čínské HTML přeloženo do angličtiny, nestačí pouze nahradit hlavní text. Atribut lang a označení místního jazyka musí být také upraveny současně, jinak prohlížeče a software pro čtení obrazovky zpracují obsah ve špatném jazyce. Tento článek je určen editorům a vývojářům, kteří se potřebují zabývat překladem webových dokumentů a mají obavy o přístupnost a sémantickou strukturu. Po přečtení můžete určit, které lang je třeba změnit a které by měly být zachovány, a pomocí Beautiful Soup provést statické ověření.
Ukázky v tomto článku používají syntetické vzorky. Kód byl spuštěn prostřednictvím vzorových kontrol v izolovaném prostředí, ale to není zárukou všech skutečných souborů nebo výkonu produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
Jak přeložit čínské HTML do angličtiny, jak změnit atribut lang? Závěr jednou větou
Po překladu musíte změnit lang kořenového uzlu na cílový jazyk a zkontrolovat, zda je každý tag místního jazyka konzistentní se skutečným textem.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
Celá stránka je přeložena do angličtiny a kořenový uzel je stále zh-CN | Změňte <html lang> na en a zkontrolujte vztah dědičnosti podřízených uzlů | Čtečky obrazovky a TTS vybírají nástroje pro výslovnost na základě jazykových značek |
| Stránka zachovává čínské citace | Explicitně deklarujte vyhrazené čínské fragmenty pomocí <span lang="zh-CN"> | Zabraňte chybnému čtení čínštiny jako angličtiny |
Zobrazí se lang="" nebo lang="chinese" | Vyčistěte nebo ručně doplňte platné značky, jako jsou zh-CN, en-US atd. | Tyto hodnoty neodpovídají standardu BCP47 |
lang="zh-CN" se objeví v oblasti vnoření a obsahuje anglický obsah | Nahlaste konflikty a ručně zjistěte, zda je obsah přeložen nesprávně nebo zda je nesprávně zapsáno označení. | Skript nedokáže automaticky určit, na které straně je problém |
Proč nelze atribut lang nahradit globálně?
Intuitivní přístup spočívá v použití regulárních výrazů nebo operací DOM ke změně <html lang="zh-CN"> kořenového uzlu na <html lang="en"> po dokončení překladu. To funguje dobře pro jednojazyčné stránky, ale produkční dokumenty HTML často obsahují vícejazyčné fragmenty. Anglický technický blog může například citovat původní text staré čínské knihy nebo vkládat nepřeložená vlastní podstatná jména, komentáře ke kódu a komentáře uživatelů. Tyto místní oblasti jsou obvykle výslovně deklarovány v jazyce prostřednictvím <span lang="zh-CN"> nebo <blockquote lang="zh">.
Pokud by byly všechny atributy lang slepě přepsány, tyto fragmenty zachovávající text by ztratily svůj správný jazykový kontext. Naopak, pokud se změní pouze kořenový uzel a podřízené uzly jsou ignorovány a podřízené uzly zdědí starou hodnotu zh-CN, přeložený anglický odstavec bude stále rozpoznán jako čínský.
Správná logika je „dědičnost shora dolů + ověření místního pokrytí": potvrďte, že skutečný jazyk každého textového uzlu je konzistentní s hodnotoulang jeho nejbližšího předchůdce. Nejedná se o jednoduché nalezení a nahrazení, ale o průchozí ověření sémantického stavu stromu DOM.
Jazykové značky jsou součástí struktury dokumentu
– Jazykové značky ovlivňují indexování vyhledávačů, selektory pseudotříd CSS (jako je :lang(en)) a kontrolu pravopisu
- Nejedná se o dekorativní metadata a musí být migrována s obsahem
Příklad syntézy: správný výstup a případy hran
Následující text používá jako vstupní vzorek typický smíšený jazyk HTML.
Ukázka syntetického vstupu:
<html lang="zh-CN">
<body>
<h1>产品发布说明</h1>
<p>本次更新修复了登录模块的严重Bug。</p>
<p class="quote">原文引用:<span lang="zh-CN">天行健,君子以自强不息。</span></p>
<footer>版权所有 © 2024</footer>
</body>
</html>
Předpokládejme, že cílem je přeložit tento dokument do angličtiny a zároveň zachovat původní čínský text citací.
Očekávaný správný výstup:
-Kořenový uzel se stane lang="en"
- Nadpisy a hlavní odstavce zdědí jazyk kořenového uzlu bez dalšího značení
<span>uvnitř citačního kontejneru zůstáválang="zh-CN"beze změny- Zápatí zdědí angličtinu, pokud neexistují žádné speciální jazykové požadavky.
Přeložený anglický odstavec nemůže uchovat atribut lang ukazující na čínštinu a ponechaný čínský fragment musí být explicitně deklarován, aby se předešlo jeho chybnému čtení jako anglického.
Běžné chyby a okrajové případy
- Prázdný řetězec nebo neplatná hodnota: Ve zdrojovém souboru existuje
lang=""nebolang="chinese"(nestandard BCP47). Metodou zpracování je označit ji jako výjimku a ručně ji doplnit jakozh-CNneboen-USpodle kontextu, nebo ji před překladem vyčistit. - Dynamicky generovaný jazykový tag: Některé CMS vkládají za běhu atribut
lang, který ve statickém HTML chybí. Skript může ověřit pouze statický zdrojový kód a při přijímání je třeba zaznamenat „dynamický obsah je třeba testovat samostatně". - Konflikt vnoření:
<div lang="en"><p lang="zh-CN">已翻译为英文的内容</p></div>je typická nekonzistence mezi obsahem a označením. Validátor by měl takové konflikty spíše hlásit, než je automaticky opravovat, protože neexistuje způsob, jak zjistit, zda je obsah přeložen nesprávně nebo zda je nesprávně napsáno označení.
📊 Srovnání jádra
| praxe | Použitelné scénáře | Hlavní rizika |
|---|---|---|
Globálně nahradit kořenový uzel lang | Jednojazyčná stránka | Zachované čínské fragmenty ztratí jazykový kontext; když stará hodnota podřízeného uzlu není opravena, anglický odstavec je stále rozpoznán jako čínský |
| Dědičnost shora dolů + ověření částečného krytí | Stránky obsahující vícejazyčné úryvky, jako jsou citace, vlastní podstatná jména, komentáře ke kódu atd. | Je třeba procházet DOM a kontrolovat položku po položce, což vyžaduje větší zátěž |
Vytvořte kontrolu konzistence jazyka pomocí Beautiful Soup
Následující příklad Pythonu ukazuje, jak analyzovat HTML a odhalit riziko nekonzistencí mezi jazykovým označením a obsahem. Je to pouze ukázka logiky periferního ověřování, nikoli kompletní systém zajištění kvality překladu.
Poznámka: Tento příklad je určen pro výukové účely a nebyl spuštěn a ověřen ve skutečném produkčním prostředí. Nepoužívejte jej přímo pro online kontrolu kvality.
# 依赖: beautifulsoup4 (推荐 4.12.x 系列)
# 注意: CJK检测仅为启发式演示,仅覆盖基本汉字区(U+4E00-U+9FFF),
# 不包含日文假名、韩文谚文及扩展区字符,生产环境请使用专用语言识别库
from bs4 import BeautifulSoup
def validate_lang_consistency(html_content: str, target_lang: str) -> list:
"""
校验HTML中lang属性是否与目标语言一致。
返回潜在问题列表,而非自动修复。
"""
soup = BeautifulSoup(html_content, 'html.parser')
issues = []
# 检查根节点
html_tag = soup.find('html')
if html_tag and html_tag.get('lang', '').lower() != target_lang.lower():
issues.append(f"Root lang mismatch: '{html_tag.get('lang')}' vs expected '{target_lang}'")
# 遍历所有带lang属性的元素
for tag in soup.find_all(attrs={'lang': True}):
current_lang = tag['lang'].strip().lower()
# 跳过根节点(已检查)和无文本内容的标签
if tag.name == 'html' or not tag.get_text(strip=True):
continue
# 启发式检查:标记语言与文本字符集是否冲突
text = tag.get_text(strip=True)
has_cjk = any('\u4e00' <= c <= '\u9fff' for c in text)
if target_lang.startswith('en') and has_cjk and current_lang.startswith('en'):
issues.append(f"Content-lang conflict: <{tag.name} lang='{current_lang}'> contains CJK: '{text[:20]}...'")
elif target_lang.startswith('zh') and not has_cjk and current_lang.startswith('zh'):
# 排除纯数字/符号等特殊情况
if len(text) > 3 and text.isascii():
issues.append(f"Content-lang conflict: <{tag.name} lang='{current_lang}'> seems non-CJK: '{text[:20]}...'")
return issues
# 合成测试用例(模拟翻译后未清理lang属性的场景)
sample_html = '''
<html lang="zh-CN">
<body>
<p>This paragraph was translated to English but lang attr remains.</p>
<p lang="en">天行健,君子以自强不息。</p>
</body>
</html>
'''
results = validate_lang_consistency(sample_html, 'en')
# 验证函数能识别出根节点不匹配和内容-标记冲突两类问题
assert len(results) == 2, f"Expected 2 issues, got {len(results)}"
assert 'Root lang mismatch' in results[0]
assert 'Content-lang conflict' in results[1]
print("Validation logic structure verified.")
Skript používá Beautiful Soup k analýze HTML do stromu objektů a poté vyhledá všechny body deklarace jazyka pomocí find_all(attrs={'lang': True}). Neprovádí překlad, pouze statickou analýzu. Příkaz aserce ověřuje, že funkce rozpoznává dva typické typy problémů. Je třeba poznamenat, že se jedná pouze o heuristickou kontrolu založenou na znakové sadě a nemůže nahradit lingvistickou kontrolu.
Kritéria přijetí a hranice manuální kontroly
Automatizované ověřování může zachytit strukturální chyby, ale nedokáže pochopit kontext. Následující tabulka uvádí mezeru mezi tím, co kód dokáže detekovat, a tím, co je třeba zkontrolovat ručně:
| Zkontrolujte položky | Kód lze detekovat automaticky | Vyžaduje ruční kontrolu | rozhodnutí o zpracování |
|---|---|---|---|
| Hodnota lang kořenového uzlu odpovídá cílovému jazyku | ✅ Ověření konstrukce | ❌ | Blokovat doručení, pokud není konzistentní |
| Řetězec dědičnosti lang podřízeného uzlu je přerušený | ✅ Ověření konstrukce | ❌ | Umístění hlášení, ruční potvrzení, pokud je vyžadováno výslovné prohlášení |
| Značkovací jazyk neodpovídá jazyku textu | ⚠️ Pouze heuristika | ✅ | Zvýrazněte podezřelé položky a zkontrolujte je překladatelem |
| V nepřeloženém fragmentu chybí deklarace jazyka | ❌ | ✅ | Zkontrolujte položku po položce podle původního textu |
| Dynamický obsah/JS generovaný textový jazyk | ❌ | ✅ | Zahrnuto v rozsahu testování front-end E2E |
| Platnost značky BCP47 | ⚠️ Vyžaduje další knihovny | ✅ | Stanovte specifikace jazykových značek na úrovni projektu |
Explicitní neaplikovatelné scénáře:
- Tato ověřovací logika se nevztahuje na nestrukturované dokumenty, jako jsou PDF, Word atd.
- Není k dispozici pro jednostránkové aplikace vykreslované výhradně pomocí JavaScriptu (kromě SSR)
- Nelze použít samostatně jako kritérium pro posouzení kvality strojového překladu
Při setkání s položkou ve formuláři, která „vyžaduje ruční kontrolu", by měl být automatický proces pozastaven a měl by zasáhnout editor obeznámený s bilingvismem.
🎯 Která metoda je pro vás vhodná?
pokud jste……
- Pouze jednojazyčné stránky: Nahrazení kořenového uzlu je možné, ale stále musíte zkontrolovat, zda podřízené uzly zdědí starou hodnotu.
- Stránka zachovává čínské citace nebo vlastní podstatná jména: Přidejte k těmto fragmentům explicitní prohlášení
lang. - Obsah dynamicky generovaný systémem CMS nebo JavaScript: Zahrňte jazykové označení do rozsahu front-endového testování E2E.
- Zpracování souborů PDF nebo Word: Logiku ověření HTML podle tohoto článku nelze použít a musíte použít metodu kontroly odpovídajícího formátu.
❓ Často kladené otázky (FAQ)
1. Stačí změnit pouze atribut lang kořenového uzlu?
nestačí. Pokud podřízený uzel zdědí starou hodnotu zh-CN, přeložený anglický odstavec bude stále rozpoznán jako čínský. Každý textový uzel by měl být zkontrolován na konzistenci v jazyce jeho nejbližšího předchůdce.
2. Jak se vypořádat s čínskými citacemi uloženými na stránce?
Explicitně to deklarujte pomocí <span lang="zh-CN"> nebo <blockquote lang="zh"> atd. To zabrání tomu, aby byly čínské úryvky chybně přečteny jako anglické.
3. Lze lang="" nebo lang="chinese" přímo zachovat?
Nedoporučuje se. Tyto hodnoty neodpovídají standardu BCP47. Měl by být označen jako výjimka, ručně doplněn do platných značek, jako je zh-CN nebo en-US podle kontextu, nebo před překladem vyčištěn.
4. Může skript kontrolovat dynamicky generované jazykové značky z JavaScriptu?
nemůže. Skript pouze ověřuje statický zdrojový kód. Dynamicky vstřikovaný obsah musí být testován samostatně a zahrnut do rozsahu front-end E2E testování.
📝 Shrnutí
Při překladu HTML by měly být jazykové značky a hlavní text migrovány společně. Nejprve zkontrolujte kořenový uzel, poté zkontrolujte deklarace místního jazyka položku po položce a nakonec použijte ruční kontrolu k vyplnění částí, které skript nedokáže určit.
Vyzkoušejte to hned: Nahrajte dokument a začněte překládat při zachování původního rozvržení
Reference
- Oficiální dokumentace krásné polévky - Atributy: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes
Tento kontrolní seznam použijte pro překlad dokumentů
Text, odkazy, kód a struktura webových dokumentů musí být zpracovány samostatně. Vložte součásti, které potřebují ochranu, do seznamu přijatelnosti a poté vyhodnoťte čitelnost a efekt zobrazení stránky po překladu.
OmniDoc (produktový portál) poskytuje portál pro víceformátový překlad dokumentů. Oficiální webová stránka představuje funkce, jako je OCR, glosář a dvojjazyčné srovnání. Pokud chce váš tým začít zpracovávat přímo ze souboru, můžete tuto cestu vyhodnotit pomocí skutečných vzorků. Použijte prosím znecitlivěné soubory, k jejichž nahrávání máte oprávnění, a ke kontrole výsledků použijte zaškrtávací položky v tomto článku. Tento článek nepokrývá interní implementaci OmniDoc a příklady nenahrazují testování výkonu produktu.


