| LOCALE::PO4A::XML.3PM(1) | User Contributed Perl Documentation | LOCALE::PO4A::XML.3PM(1) |
NAMN¶
Locale::Po4a::Xml - konvertera XML-dokument och derivat från/till PO-filer
BESKRIVNING¶
Målet med po4a-projektet (PO för allt) är att underlätta översättningar (och, ännu mer intressant, underhållet av översättningar) med hjälp av gettext-verktyg på områden där de inte förväntades användas, såsom dokumentation.
Locale::Po4a::Xml är ett modul som hjälper till att översätta XML-dokument till andra [mänskliga] språk. Det kan också användas som bas för att bygga moduler för XML-baserade dokument.
ÖVERSÄTTNING MED PO4A::XML¶
Denna modul kan användas direkt för att hantera generiska XML-dokument. Detta extraherar allt tagginnehåll, men inga attribut, eftersom det är där texten skrivs i de flesta XML-baserade dokument.
Det finns några flaggor (beskrivna i nästa avsnitt) som kan anpassa detta beteende. Om detta inte passar ditt dokumentformat uppmuntras du att skriva din egen modul som härrör från denna, för att beskriva detaljerna i ditt format. Se avsnittet B-<WRITING DERIVATE MODULES> en nedan för en beskrivning av processen.
FLAGGOR SOM ACCEPTERAS AV DENNA MODUL¶
Det globala felsökningsflaggan gör att denna modul visar de uteslutna strängarna, för att se om den hoppar över något viktigt.
Detta är modulens specifika flaggor:
- nostrip
- Förhindrar att mellanslag runt de extraherade strängarna tas bort.
- wrap
- Kanoniserar strängen som ska översättas, med hänsyn till att blanktecken inte är viktiga, och slår in det översatta dokumentet. Denna flagga kan åsidosättas av anpassade taggflaggor. Se flaggan B-<translated> nedan.
- unwrap_attributes
- Attribut är som standard inslagna. Den här flaggan inaktiverar inslagningen.
- caseinsensitive
- Det gör att sökningen efter taggar och attribut fungerar utan hänsyn till versaler och gemener. Om det är definierat kommer det att behandla <BooK>laNG och <BOOK>Lang som <book>lang.
- escapequotes
- Undvik citattecken i utdatasträngar. Nödvändigt, till
exempel för att skapa strängresurser för
användning av Android-byggverktyg.
Se även: https://developer.android.com/guide/topics/resources/string-resource.html
- includeexternal
- När externa enheter definieras inkluderas de i det genererade (översatta) dokumentet och för extrahering av strängar. Om de inte definieras måste du översätta externa enheter separat som oberoende dokument.
- ontagerror
- Den här flaggan definierar modulens beteende när den stöter på ogiltig XML-syntax (en avslutande tagg som inte matchar den sista öppnande taggen). Det kan ha följande värden:
Var försiktig när du använder den här flaggan. Det rekommenderas generellt att fixa inmatningsfilen.
- Observera: Den här flaggan är föråldrad.
Extraherar endast de angivna taggarna i flaggan B-<tags>. Annars extraheras alla taggar utom de angivna.
- doctype
- Sträng som försöker matcha den första raden i dokumentets doctype (om sådan finns definierad). Om den inte matchar visas en varning om att dokumentet kan vara av fel typ.
- addlang
- Sträng som anger sökvägen (t.ex. <bbb><aaa>) till en tagg där attributet lang="..." ska läggas till. Språket definieras som basnamnet på PO-filen utan filändelsen .po.
- optionalclosingtag
- Boolesk variabel som anger om slutetaggar är valfria (som i HTML). Som standard genererar saknade slutetaggar ett fel som hanteras enligt ontagerror.
- Observera: Den här flaggan är föråldrad. Du
bör istället använda flaggorna translated och
untranslated.
En lista med taggar som du vill översätta eller hoppa över, separerade med mellanslag. Som standard kommer de angivna taggarna att exkluderas, men om du använder flaggan "tagsonly" kommer endast de angivna taggarna att inkluderas. Taggarna måste ha formen <aaa>, men du kan slå ihop några (<bbb><aaa>) för att ange att innehållet i taggen <aaa> endast ska översättas när det finns i en <bbb> tagg.
Du kan också ange vissa taggflaggor genom att placera vissa tecken framför tagghierarkin. Du kan till exempel placera w (bryt) eller W (bryt inte) för att åsidosätta standardbeteendet som anges av det globala flaggan wrap.
Exempel: W<chapter><title>
- attributes
- En lista med taggattribut som du vill översätta, separerade med mellanslag. Du kan ange attributen med deras namn (till exempel "lang"), men du kan också lägga till en tagghierarki framför namnet för att ange att attributet endast ska översättas när det finns i den angivna taggen. Till exempel: <bbb><aaa>lang anger att attributet lang endast ska översättas om det finns i en <aaa> tagg och om det finns i en <bbb> tagg.
- foldattributes
- Översätt inte attribut i inline-taggar. Ersätt
istället alla attribut i en tagg med po4a-id=<id>.
Detta är användbart när attribut inte ska översättas, eftersom det förenklar strängarna för översättare och undviker stavfel.
- customtag
- Mellanslagsavgränsad lista över taggar som inte ska behandlas som taggar. Dessa taggar behandlas som inline och behöver inte stängas.
- break
- Lista med taggar separerade med mellanslag som ska bryta sekvensen. Som
standard bryter alla taggar sekvensen.
Taggarna måste ha formen <aaa>, men du kan sammanfoga några (<bbb><aaa>), om en tagg (<aaa>) endast ska beaktas när den finns inom en annan tagg (<bbb>).
Observera att en tagg endast ska anges i en av inställningssträngarna break, inline placeholder eller customtag.
- inline
- Mellanslagsavgränsad lista över taggar som ska behandlas som
inline. Som standard bryter alla taggar sekvensen.
Taggarna måste ha formen <aaa>, men du kan sammanfoga några (<bbb><aaa>), om en tagg (<aaa>) endast ska beaktas när den finns inom en annan tagg (<bbb>).
- placeholder
- Lista med taggar separerade med mellanslag som ska behandlas som
platshållare. Platshållare bryter inte sekvensen, men
innehållet i platshållarna översätts separat.
Platshållarens placering i sitt block markeras med en sträng som liknar:
<platshållare typ=\"fotnot\" id=\"0\"/>Taggarna måste ha formen <aaa>, men du kan sammanfoga några (<bbb><aaa>), om en tagg (<aaa>) endast ska beaktas när den finns inom en annan tagg (<bbb>).
- break-pi
- Som standard hanteras bearbetningsinstruktioner (dvs. "<? ... ?>"-taggar) som inline-taggar. Ange denna flagga om du vill att PI ska hanteras som brytande tagg. Observera att obearbetade PHP-taggar hanteras som bearbetningsinstruktioner av tolkaren.
- nodefault
- Lista med taggar separerade med mellanslag som modulen inte ska
försöka ställa in som standard i någon
kategori.
Om du har en tagg som har sin standardinställning av underklassen för denna modul men du vill ställa in en alternativ inställning, måste du lista den taggen som en del av B-<nodefault> -inställningssträngen.
- cpp
- Stöd för C-preprocessordirektiv. När denna flagga är aktiverat kommer po4a att betrakta preprocessordirektiv som styckeavgränsare. Detta är viktigt om XML-filen måste förbehandlas, eftersom direktiven annars kan infogas mitt i raderna om po4a anser att de tillhör det aktuella stycket, och de kommer då inte att kännas igen av preprocessorn. Observera: preprocessordirektiven får endast förekomma mellan taggar (de får inte bryta en tagg).
- translated
- En lista med taggar som du vill översätta, separerade med
mellanslag.
Taggarna måste ha formen <aaa>, men du kan sammanfoga några (<bbb><aaa>), om en tagg (<aaa>) endast ska beaktas när den finns inom en annan tagg (<bbb>).
Du kan också ange vissa taggflaggor genom att placera vissa tecken framför tagghierarkin. Detta åsidosätter standardbeteendet som anges av de globala flaggorna wrap och defaulttranslateoption.
Internt bryr sig XML-tolkaren endast om dessa fyra flaggor: w W i p.
* Taggar som listas i break ställs in på w eller W beroende på flaggan wrap.
* Taggar som listas i inline är inställda på i.
* Taggar som anges i placeholder är inställda på p.
* Taggar som listas i untranslated har ingen av dessa flaggor inställda.
Du kan verifiera det faktiska interna parametrarbeteendet genom att anropa B-<po4a> med flaggan B-<--debug>.
Exempel: W<chapter><title>
Observera att en tagg ska anges i antingen translated eller untranslated inställningssträngen.
- untranslated
- Lista med taggar som du inte vill översätta, separerade med
mellanslag.
Taggarna måste ha formen <aaa>, men du kan sammanfoga några (<bbb><aaa>), om en tagg (<aaa>) endast ska beaktas när den finns inom en annan tagg (<bbb>).
Observera att en översättningsbar inline-tagg i en icke översatt tagg behandlas som en översättningsbar brytande tagg, inställningen i tas bort och w eller W ställs in beroende på flaggan wrap.
- defaulttranslateoption
- Standardkategorierna för taggar som inte finns i någon av
kategorierna översatt, oöversatt, brytning, inline eller
platshållare.
Detta är en uppsättning bokstäver som definieras i translated och denna inställning gäller endast för översättningsbara taggar.
SKRIVA DERIVATMODULER¶
DEFINIERA VILKA TAGGAR OCH ATTRIBUT SOM SKA ÖVERSÄTTAS¶
Den enklaste anpassningen är att definiera vilka taggar och attribut du vill att parsern ska översätta. Detta bör göras i initialiseringsfunktionen. Först bör du anropa huvudinitialiseringen för att hämta kommandoradsflaggor och sedan lägga till dina anpassade definitioner till flagghashen. Om du vill behandla några nya flaggor från kommandoraden bör du definiera dem innan du anropar huvudinitialiseringen:
$self->{options}{'new_option'}='';
$self->SUPER::initialize(%options);
$self->{options}{'_default_translated'}.=' <p> <head><title>';
$self->{options}{'attributes'}.=' <p>lang id';
$self->{options}{'_default_inline'}.=' <br>';
$self->treat_options;
Du bör använda flaggorna _default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated och _default_attributes i derivatmoduler. Detta gör det möjligt för användare att åsidosätta standardbeteendet som definieras i din modul med kommandoradsflaggor.
ÅSIDOSÄTTA STANDARDBETEENDET MED KOMMANDORADSFLAGGOR¶
Om du inte gillar standardbeteendet för denna xml-modul och dess derivatmoduler kan du ange kommandoradsflaggor för att ändra deras beteende.
Se Locale::Po4a::Docbook(3pm),
ÖVERSKRIVNING AV FUNKTIONEN found_string¶
Ett annat enkelt steg är att överskriva funktionen "found_string", som tar emot de extraherade strängarna från parsern, för att översätta dem. Där kan du styra vilka strängar du vill översätta och utföra transformationer på dem före eller efter själva översättningen.
Den tar emot den extraherade texten, referensen till var den fanns och en hash som innehåller extra information för att styra vilka strängar som ska översättas, hur de ska översättas och för att generera kommentaren.
Innehållet i dessa flaggor beror på vilken typ av sträng det är (specificerad i en post i denna hash):
- type="tag"
- Den hittade strängen är innehållet i en översättningsbar tagg. Posten "tag_options" innehåller flaggtecknen framför tagghierarkin i modulens "tags"-flagga.
- type="attribut"
- Betyder att den hittade strängen är värdet för ett översättningsbart attribut. Posten "attribut" har namnet på attributet.
Den måste returnera den text som ska ersätta originalet i det översatta dokumentet. Här är ett grundläggande exempel på denna funktion:
sub found_string {
my ($self,$text,$ref,$options)=@_;
$text = $self->translate($text,$ref,"type ".$options->{'type'},
'wrap'=>$self->{options}{'wrap'});
return $text;
}
Det finns ett annat enkelt exempel i det nya Dia-modulet, som endast filtrerar vissa strängar.
ÄNDRA TAGGTYPER (TODO)¶
Detta är mer komplicerat, men möjliggör en (nästan) total anpassning. Det baseras på en lista med hashvärden, där varje värde definierar en taggtyps beteende. Listan bör sorteras så att de mest allmänna taggarna kommer efter de mest konkreta (sorterade först efter början och sedan efter slutet på nycklarna). För att definiera en taggtyp måste du skapa en hash med följande nycklar:
- beginning
- Anger början på taggen, efter "<".
- end
- Anger slutet på taggen, före ">".
- breaking
- Det anger om detta är en brytande taggklass. En icke-brytande (inline) tagg är en tagg som kan betraktas som en del av innehållet i en annan tagg. Den kan ha värdena false (0), true (1) eller undefined. Om du lämnar detta odefinierat måste du definiera funktionen f_breaking som anger om en konkret tagg av denna klass är en brytande tagg eller inte.
- f_breaking
- Det är en funktion som avgör om nästa tagg är en brytande tagg eller inte. Den bör definieras om flaggan B-<breaking> inte är det.
- f_extract
- Om du lämnar denna nyckel odefinierad måste den generiska extraktionsfunktionen extrahera taggen själv. Det är användbart för taggar som kan innehålla andra taggar eller specialstrukturer, så att huvudparsern inte blir galen. Denna funktion tar emot ett booleskt värde som anger om taggen ska tas bort från inmatningsströmmen eller inte.
- f_translate
- Denna funktion tar emot taggen (i formatet get_string_until()) och returnerar den översatta taggen (översatta attribut eller alla nödvändiga omvandlingar) som en enda sträng.
INTERNA FUNKTIONER som används för att skriva derivatparsers¶
ARBETA MED TAGGAR¶
- get_path()
- Denna funktion returnerar sökvägen till den aktuella taggen
från dokumentets rot, i form av <html><body><p>.
En ytterligare uppsättning taggar (utan parenteser) kan anges som argument. Dessa sökvägsdelar läggs till i slutet av den aktuella sökvägen.
- tag_type()
- Denna funktion returnerar indexet från listan tag_types som passar
till nästa tagg i inmatningsströmmen, eller -1 om den
är i slutet av inmatningsfilen.
Här har taggen en struktur som börjar med < och slutar med > och den kan innehålla flera rader.
Detta fungerar på arrayen "@{$self->{TT}{doc_in}}" som innehåller indata från dokumentet och refererar indirekt via "$self->shiftline()" och "$self->unshiftline($$)".
- extract_tag($$)
- Denna funktion returnerar nästa tagg från
inmatningsströmmen utan början och slut, i form av en
matris, för att behålla referenserna från
inmatningsfilen. Den har två parametrar: taggtypen (som returneras
av tag_type) och en boolesk variabel som anger om den ska tas bort
från inmatningsströmmen.
Detta fungerar på arrayen "@{$self->{TT}{doc_in}}" som innehåller indata från dokumentet och refererar indirekt via "$self->shiftline()" och "$self->unshiftline($$)".
- get_tag_name(@)
- Denna funktion returnerar namnet på taggen som skickats som argument, i den arrayform som returneras av extract_tag.
- breaking_tag()
- Denna funktion returnerar ett booleskt värde som anger om nästa tagg i inmatningsströmmen är en brytande tagg eller inte (inline-tagg). Den lämnar inmatningsströmmen intakt.
- treat_tag()
- Denna funktion översätter nästa tagg från
inmatningsströmmen. Använder varje taggtyps anpassade
översättningsfunktioner.
Detta fungerar på arrayen "@{$self->{TT}{doc_in}}" som innehåller indata från dokumentet och refererar indirekt via "$self->shiftline()" och "$self->unshiftline($$)".
- tag_in_list($@)
- Denna funktion returnerar ett strängvärde som anger om det första argumentet (en tagghierarki) matchar någon av taggarna från det andra argumentet (en lista med taggar eller tagghierarkier). Om det inte matchar returneras 0. Annars returneras den matchade taggens flaggor (tecknen framför taggen) eller 1 (om den taggen inte har några flaggor).
ARBETA MED ATTRIBUT¶
- treat_attributes(@)
- Denna funktion hanterar översättningen av taggarnas attribut. Den tar emot taggen utan början/slutmarkeringar, hittar attributen och översätter de som kan översättas (specificerade av moduloptionen attributes). Detta returnerar en vanlig sträng med den översatta taggen.
ARBETA MED TAGGADE INNEHÅLL¶
- treat_content()
- Denna funktion hämtar texten fram till nästa brytningstagg
(inte inline) från inmatningsströmmen.
Översätt den med hjälp av varje taggtyps anpassade
översättningsfunktioner.
Detta fungerar på arrayen "@{$self->{TT}{doc_in}}" som innehåller indata från dokumentet och refererar indirekt via "$self->shiftline()" och "$self->unshiftline($$)".
ARBETA MED MODULFLAGGORNA¶
- treat_options()
- Denna funktion fyller de interna strukturerna som innehåller taggar, attribut och inline-data med modulens flaggor (specificerade i kommandoraden eller i initialiseringsfunktionen).
HÄMTA TEXT FRÅN INMATNINGSDOKUMENTET¶
- get_string_until($%)
- Denna funktion returnerar en array med raderna (och referenserna)
från indokumentet tills den hittar det första argumentet.
Det andra argumentet är en optionshash. Värdet 0 betyder
inaktiverat (standard) och 1 betyder aktiverat.
De giltiga flaggorna är:
- include
- Detta gör att den returnerade matrisen innehåller den sökta texten
- remove
- Detta tar bort den returnerade strömmen från ingången
- unquoted
- Detta säkerställer att den sökta texten inte finns inom några citattecken
- regex
- Detta betyder att det första argumentet är ett reguljärt uttryck snarare än en vanlig sträng
- skip_spaces(\@)
- Denna funktion tar emot referensen till ett stycke (i det format som returneras av get_string_until) som argument, hoppar över rubrikens blanksteg och returnerar dem som en enkel sträng.
- join_lines(@)
- Denna funktion returnerar en enkel sträng med texten från argumentmatrisen (referenserna kasseras).
STATUS FÖR DENNA MODUL¶
Denna modul kan översätta taggar och attribut.
ATT GÖRA-LISTA¶
DOCTYPE (ENTITETER)
Det finns ett minimalt stöd för översättning av enheter. De översätts som en helhet och taggar beaktas inte. Enheter med flera rader stöds inte och enheter omformateras alltid under översättningen.
ÄNDRA TAGGTYPER FRÅN ARVADE MODULER (flytta tag_types-strukturen inuti $self-hash?)
SE ÄVEN¶
Locale::Po4a::TransTractor(3pm), po4a(7)
UPPHOVSPERSONER¶
Jordi Vilalta <jvprat@gmail.com> Nicolas François <nicolas.francois@centraliens.net>
UPPHOVSRÄTT OCH LICENS¶
Copyright © 2004 Jordi Vilalta <jvprat@gmail.com> Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
Detta program är fri programvara; du får distribuera och/eller modifiera det enligt villkoren i GPL v2.0 eller senare (se filen COPYING).
| 2026-03-23 | perl v5.42.0 |