{name} in de vertaalkopie is verloren gegaan. Hoe u dit kunt stoppen voordat u online gaat
Als {naam} verloren gaat in de vertaalkopie, zullen er online fouten optreden. Een regulier oordeel is onbetrouwbaar. In dit artikel wordt de standaardbibliotheekstring.Formatter.parse van Python gebruikt om de tijdelijke aanduidingen voor verificatie te structureren, met correcte en onjuiste synthesevoorbeelden, direct uitvoerbare scripts en handmatige beoordelingsgrenzen.
In de vertaalde kopie worden variabelen zoals {name} vaak samen vertaald, en de pagina rapporteert vaak pas een fout nadat de waarde daadwerkelijk is ingevuld. Als u alleen op menselijke ogen of reguliere expressies vertrouwt om de accolades te controleren voordat u online gaat, is het gemakkelijk om ze over het hoofd te zien. Dit artikel is bedoeld voor ontwikkelaars en redacteuren die verantwoordelijk zijn voor lokalisatie, sjablonen en leveringscontroles. Het introduceert hoe u de Python-standaardbibliotheek string.Formatter.parse kunt gebruiken om gestructureerde verificatie uit te voeren op tijdelijke aanduidingen, en legt uit welke situaties nog steeds handmatige beoordeling vereisen.
Na het lezen kunt u een verificatie-idee krijgen dat direct kan worden uitgevoerd: verifieer de veldidentiteit, frequentie van voorkomen en formaatspecificaties wanneer de vertaling wordt afgeleverd, in plaats van te wachten tot het probleem online wordt ontdekt. De voorbeelden maken gebruik van synthetische samples en de code is gecontroleerd in een geïsoleerde omgeving, maar dit biedt geen garantie voor alle echte bestanden of productprestaties. Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en deze te controleren volgens de onderstaande grenzen en acceptatie-items.
Tijdelijke aanduidingen verloren na vertaling? Conclusie in één zin
Gebruik eerst gestructureerde parsering om de velden in de opmaaktekenreeks te extraheren en vergelijk ze vervolgens één voor één met de velden van de bronkopie; als de veldnamen, tijdstippen van voorkomen of formaatspecificaties inconsistent zijn, wordt deze direct afgewezen en wordt de aanpassing van de woordvolgorde aan handmatige beoordeling overgelaten.
| jouw situatie | Aanbevolen praktijken | reden |
|---|---|---|
| De namen van de variabelen in de vertaling worden vertaald | Herstel de interfaceveldnaam vóór levering | De variabelenaam behoort tot het interfacecontract. Na de wijziging wordt er een fout gerapporteerd bij het invullen van de waarde op de pagina. |
| In de vertaling ontbreekt één keer een veld met dezelfde naam | Weiger het artikel en controleer of er een vertaling ontbreekt | Het aantal voorkomens van hetzelfde veld maakt ook deel uit van het contract |
| Alleen de veldpositie werd aangepast | Accepteer of de leeswoordvolgorde natuurlijk is | Wijzigingen in de veldvolgorde hebben doorgaans geen invloed op de resultaten van het invullen van waarden |
| Formaatspecificaties zoals decimalen zijn gewijzigd | Markering is inconsistent, bevestig volgens lokalisatieprotocol | Ook formaatspecificaties zijn beschermd en of wijzigingen toegestaan zijn, moet in onderling overleg worden besloten. |
Selecteer eerst de syntaxis van het formaat
Dit artikel gaat alleen over tijdelijke aanduidingen in Python str.format-stijl en heeft geen betrekking op JavaScript-sjabloontekenreeksen, ICU MessageFormat of andere tijdelijke aanduidingsystemen. Verschillende systemen hebben zeer verschillende regels voor nesten, ontsnappen en pluraliseren, en één reguliere expressie kan niet beweren dat hij ze allemaal ondersteunt. In het voorbeeld is het gebruik van benoemde velden vereist en worden automatisch genummerde velden (zoals {}) afgewezen.
Een volledige beschrijving van de veldsyntaxis kunt u vinden in Python-string en formatter-documentatie.
Ontsnapte accolades zijn geen variabelen
{{name}} vertegenwoordigt de weergavetekst {name} en mag niet als veld worden meegeteld. Er kunnen ook geneste velden in de formaatspecificatie voorkomen, zoals {value:{width}}. De onderstaande code leest de specificatie recursief en houdt het aantal herhaalde keren dat hetzelfde veld voorkomt bij.
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")
Dit contract is opzettelijk strikt
De formaatspecificaties worden hier ook als beschermde inhoud beschouwd, dus het wijzigen van het aantal decimalen wordt gemarkeerd. Sommige lokalisatietaken vereisen een wijziging van de manier waarop getallen worden gepresenteerd. In dat geval moet u daarvoor een aparte regel maken in plaats van alle controles op de tijdelijke aanduiding te annuleren. De nestdieptelimiet in het voorbeeld is een demonstratiebudget en is geen vereiste van de taalspecificatie.
De volgende tabel bevat een aantal veelvoorkomende typen wijzigingen en de bijbehorende verwerkingsmethoden:
| wijziging | Het resultaat van dit voorbeeld | actie bekijken |
|---|---|---|
| Wijzig velden | accepteren | Is de woordvolgorde bij het lezen natuurlijk? |
| Hetzelfde veld ontbreekt één keer | contract afwijzen | Controleer op ontbrekende vertalingen |
| Variabelenamen worden vertaald | contract afwijzen | Veldnaam van de herstelinterface |
| Wijzigingen in decimale specificatie | Tags zijn inconsistent | Bevestig volgens de lokalisatieovereenkomst |
📊 Kernvergelijking
| Type wijzigen | Of het de verificatie doorstaat | Vervolgacties |
|---|---|---|
| Wijzig velden | doorgang | Is de woordvolgorde bij het lezen natuurlijk? |
| Hetzelfde veld ontbreekt één keer | mislukt | Controleer op ontbrekende vertalingen |
| Variabelenamen worden vertaald | mislukt | Veldnaam van de herstelinterface |
| Wijzigingen in decimale specificatie | Markeer als inconsistent | Bevestig volgens de lokalisatieovereenkomst |
🎯 Welke methode is geschikt voor jou?
Als u verantwoordelijk bent voor de levering van vertalingen
Voer vóór de levering een structuurcontrole uit en stuur afgewezen inzendingen met ontbrekende of gewijzigde veldnamen terug naar de vertaler.
Als je verantwoordelijk bent voor sjablonen en interfaces
Maak duidelijk welke veldnamen bij het interfacecontract horen en vermeld deze in de leveringsinstructies om vergelijking door vertalers en reviewers te vergemakkelijken.
Als u de manier waarop getallen worden gepresenteerd wilt wijzigen
Ontwikkel afzonderlijk een lokalisatieprotocol voor de formaatspecificaties en voeg dit toe aan de verificatieregels in plaats van de algehele controle uit te schakelen.
❓ Veelgestelde vragen (FAQ)
1. Kan deze methode overweg met JavaScript-sjablonen of ICU MessageFormat?
kan niet. Dit artikel richt zich alleen op benoemde velden in Python str.format-stijl. De nesting-, escape- en pluralisatieregels van andere systemen moeten afzonderlijk worden verwerkt.
2. Zal {{name}} als variabele worden gecontroleerd?
Zal niet. Het vertegenwoordigt de weergavetekst {name}, die bij parsering niet als veld wordt geteld.
3. Als ik alleen de positie van het veld in de zin aanpas, wordt deze dan afgewezen?
Zal niet. Veranderingen in veldposities worden in dit geval geaccepteerd en vervolgens handmatig gelezen om te zien of de woordvolgorde natuurlijk is.
4. Kan ik format rechtstreeks bellen om de vertaling te verifiëren?
De code in dit artikel voert alleen parsering uit en roept format niet daadwerkelijk aan om het object in te vullen. Het is geen sjabloonbeveiligingssandbox. Daaropvolgende weergave vereist ook beperkingen op de beschikbare velden, objecttoegang en uitvoercontext, vooral op het ontsnappen van regels op HTML-pagina's.
📝 Samenvatting
Het gebruik van gestructureerde parsing om tijdelijke aanduidingen te controleren tijdens de levering van vertalingen kan problemen met veldnamen, tijden en formaatspecificaties voorkomen voordat ze online gaan. Of het taalgebruik vloeiend is, moet nog apart door de recensent worden beoordeeld.


