{name} v překladu je ztraceno, jak to zastavit před přechodem online

Pokud se v překladu ztratí {name}, dojde k chybám online. Pravidelný úsudek je nespolehlivý. Tento článek používá standardní knihovnu Python string.Formatter.parse ke strukturování ověřovacích zástupných symbolů s příklady správné a nesprávné syntézy, přímo spustitelné skripty a hranice ruční kontroly.

V přeložené kopii jsou proměnné jako {name} často překládány společně a stránka často nehlásí chybu, dokud není hodnota skutečně vyplněna. Pokud se při kontrole složených závorek před přechodem na internet spoléháte pouze na lidské oči nebo regulární výrazy, je snadné je přehlédnout. Tento článek je určen pro vývojáře a editory odpovědné za lokalizaci, šablony a kontroly doručení. Představuje, jak používat standardní knihovnu Pythonu string.Formatter.parse k provádění strukturovaného ověřování na zástupných symbolech, a vysvětluje, které situace stále vyžadují ruční kontrolu.

Po přečtení můžete získat ověřovací nápad, který lze spustit přímo: ověřte identitu pole, četnost výskytů a specifikace formátu při dodání překladu, místo abyste čekali, až bude problém objeven online. Příklady používají syntetické vzorky a kód byl zkontrolován v izolovaném prostředí, ale to nepředstavuje záruku 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 níže uvedených hranic a položek přijetí.

Ztracené zástupné symboly po překladu? Závěr jednou větou

Nejprve použijte strukturovanou analýzu k extrahování polí ve formátovacím řetězci a poté je porovnejte jedno po druhém s poli zdrojové kopie; pokud jsou názvy polí, časy výskytu nebo specifikace formátu nekonzistentní, bude přímo odmítnuto a úprava pořadí slov bude ponechána na ruční kontrolu.

vaší situaciDoporučené postupydůvod
Názvy proměnných v překladu jsou přeloženyPřed doručením obnovte název pole rozhraníNázev proměnné patří ke smlouvě rozhraní. Po změně bude hlášena chyba při vyplňování hodnoty na stránce.
V překladu jednou chybí pole se stejným názvemOdmítněte článek a zkontrolujte, zda v něm nechybí překladSoučástí smlouvy je i počet výskytů stejného pole
Upravena byla pouze poloha polePřijměte, zda je slovosled čtení přirozenýZměny v pořadí polí obvykle neovlivní výsledky vyplňování hodnot
Specifikace formátu, jako jsou desetinná místa, se změnilyOznačení je nejednotné, potvrďte podle lokalizačního protokoluSpecifikace formátu jsou také chráněny a zda jsou povoleny změny, je třeba rozhodnout dohodou.

Nejprve vyberte syntaxi formátu

Tento článek se zabývá pouze zástupnými symboly stylu Python str.format a nezabývá se řetězci šablon JavaScriptu, ICU MessageFormat nebo jinými systémy zástupných symbolů. Různé systémy mají velmi odlišná pravidla vnořování, escapování a pluralizace a jeden regulární výraz nemůže tvrdit, že je podporuje všechna. Příklad vyžaduje použití pojmenovaných polí a odmítá automaticky očíslovaná pole (jako je {}).

Kompletní popis syntaxe pole lze nalézt v Dokumentace řetězce Python a formátu.

Uniklé složené závorky nejsou proměnné

{{name}} představuje zobrazený text {name} a nemělo by se počítat jako pole. Ve specifikaci formátu mohou být také vnořená pole, například {value:{width}}. Níže uvedený kód čte specifikaci rekurzivně a udržuje počet opakovaných výskytů stejného pole.

from string import Formatter
from collections import Counter

def contract(text, depth=0):
    if depth > 5:
        raise ValueError("nested format budget")
    result = Counter()
    for literal, field, spec, conversion in Formatter().parse(text):
        if field is None:
            continue
        if not field or field != field.strip():
            raise ValueError("named field without surrounding whitespace required")
        result[(field, conversion, spec)] += 1
        if spec:
            result.update(contract(spec, depth + 1))
    return result

assert contract("Hi {name}, total {amount:.2f}") == contract("{name}:金额 {amount:.2f}")
assert contract("{{name}}") == Counter()
assert contract("{name} {name}") != contract("{name}")
assert contract("{value:{width}}")[("width", None, "")] == 1
assert contract("{amount:.2f}") != contract("{amount:.0f}")
for bad in ["Hi {name", "{ name}", "{}"]:
    try:
        contract(bad)
    except ValueError:
        pass
    else:
        raise AssertionError("invalid template accepted")

Tato smlouva je záměrně přísná

Specifikace formátu jsou zde také považovány za chráněný obsah, takže změna počtu desetinných míst bude označena. Některé úlohy lokalizace vyžadují změnu způsobu zobrazení čísel, v takovém případě byste pro to měli vytvořit samostatné pravidlo a ne rušit všechny kontroly zástupných symbolů. Limit hloubky vnoření v příkladu je demonstrační rozpočet a není požadavkem jazykové specifikace.

Následující tabulka uvádí několik běžných typů změn a jejich odpovídající metody zpracování:

přeměnaVýsledek tohoto příkladurevizní akce
Změňte polepřijmoutJe slovosled čtení přirozený?
Stejné pole jednou chybíOdmítněte smlouvuZkontrolujte, zda nejsou přečteny
Názvy proměnných jsou překládányOdmítněte smlouvuObnovuje názvy polí rozhraní
Variace desetinné specifikaceNekonzistentní označeníPotvrzeno podle dohod o lokalizaci

📊 Srovnání jádra

Typy změnZda projde kalibračním testemNásledné kroky
Přemístění hřištěPrůsmykZkontrolujte, zda je slovosled při čtení přirozený
O jeden čas méně ve stejném oboruNepřicházímZkontrolujte, zda nejsou přečteny
Názvy proměnných jsou překládányNepřicházímObnovuje názvy polí rozhraní
Variace desetinné specifikaceOznačit jako nekonzistentníPotvrzeno podle dohod o lokalizaci

🎯 Která metoda ti vyhovuje?

Pokud jsi zodpovědný za překlad

Před doručením proveďte kontrolu struktury, abyste vrátili zamítnuté položky překladateli a připojili chybějící nebo změněné názvy polí.

Pokud jsi zodpovědný za šablony a rozhraní

Jasně uveďte, která pole patří do smlouvy o rozhraní, a uveďte je v doručovacích poznámkách, aby bylo lepší porovnat překladatele a recenzenty.

Pokud potřebujete změnit, jak jsou čísla prezentována

Stanovte samostatný lokalizační protokol pro specifikaci formátu a poté jej přidejte do validačního pravidla, místo abyste celou kontrolu uzavírali.

❓ Často kladené otázky (FAQ)

1. Zvládne tato metoda JavaScriptové šablony nebo ICU MessageFormat?

Ne. Tento článek pokrývá pouze pojmenovaná pole ve stylu Pythonu str.format; vnořování, escaping a množné čísla pravidel v jiných systémech je třeba řešit samostatně.

2. Bude {{name}} kontrolována jako proměnná?

Ne. Reprezentuje zobrazovaný text {name}, který se při parsování nepočítá jako pole.

3. Pokud jen upravíte pozici pole ve větě, bude to zamítnuto?

Ne. V tomto příkladu jsou akceptovány změny polohy polí a poté ručně čteno, zda je slovosled přirozený.

4. Lze přímo volat format k ověření překladu?

Kód v tomto článku je pouze parsován a ve skutečnosti nevolá format k vyplnění objektů; není to bezpečnostní sandbox šablony. Následné vykreslování musí také omezit dostupná pole, přístup k objektům a výstupní kontext, zejména pravidla escape na HTML stránkách.

📝 Shrnutí

Při doručování překladů může použití strukturovaného parsování ke kontrole zástupných prvků předejít problémům s názvy polí, počty a specifikacemi formátování před spuštěním. Zda je jazyk plynulý, stále vyžaduje další posouzení korektorů.

Zkušenost nyní: Nahrajte svůj dokument a začněte s překladem, přičemž zachováte původní formátování

Aktualizováno 2026-11-15