Stefan Asserhäll
stefan.asserhall@comhem.se
Översättare
Att använda &kbabel; Inledning För det mesta skrivs programmeddelanden och dokumentation på engelska. Det är dock möjligt att få favoritprogram att använda ditt modersmål, i stället för engelska, tack vare att ett ramverk bestående av ett antal verktyg och bibliotek finns tillgängligt. Processen för att anpassa ett särskilt språk kallas lokalisering. Detta innefattar översättning av programmets gränssnitt och dokumentation på olika språk som användare behöver, och att anpassa in- och utmatning till särskilda konventioner i vissa länder eller regioner. &kbabel; är ett verktyg som hjälper dig med internationaliseringsprocessen, vilket betyder att åstadkomma ett program med ett gränssnitt som kan använda många språk. Varje program som hanterar internationalisering tillhandahåller en eller flera meddelandekatalogfiler. Filändelsen på dessa filer är .pot. POT är en förkortning som betyder Portable Object Template (flyttbar objektmall). Varje översättare tar en kopia av en POT-mallar och börjar fylla i tomrummen: varje meddelande översätts till det önskade språket. Filen som innehåller den översatta texten kallas för PO-fil (Portable Object, flyttbart objekt). När alla meddelanden väl har översatts så kompileras PO-filen till ett maskinläsbart binärformat, som är känt som en MO-fil (Machine Object, maskinobjekt). De här filerna, som lagras med filändelsen .mo, fungerar som en databas för att minimera tiden det tar för programmet att slå upp varje översatt meddelande. En fråga hänger i luften: behöver jag veta vad som finns inne i en PO-fil även om jag har &kbabel;? Svaret är, utan tvekan, ja. Det finns situationer när en meddelandekatalog kan bli felaktig, och måste rättas för hand. De flesta av dessa problem är de hatade CVS- eller SVN-konflikterna som uppstår när en översättningsprocess koordineras med ett versionshanteringssystem som CVS eller Subversion (SVN). &kbabel; kan inte hjälpa dig särskilt mycket om ett sådant problem uppstår, så en texteditor och en viss kunskap om PO-filer behövs. Låt oss se hur en PO-fil är uppbyggd. PO-filer består av par med meddelanden — ett msgid och en msgstr. Msgid är texten på engelska och msgstr är texten översatt till det lämpliga språket. Texten som hör till varje msgid och msgstr är innesluten i C-liknande dubbla citationstecken. Ett exempel, som kommer från PO-filen för &noatun;, är msgid "Open a Playlist" Tomma rader och de som börjar med # ignoreras. Rader som börjar med ett # representerar kommentarer och är ett användbart sätt att tillhandahålla en anteckning om i vilken fil det här meddelandet ska användas, och för programutvecklaren, att ge ytterligare kommentarer för att underlätta översättning. &kbabel; visar de här kommentarraderna för varje meddelande. I många fall är det första paret med msgid-msgstr i PO-filen en falsk post (som fungerar som PO-filhuvud), vilken innehåller diverse information om den översatta PO-filen, som programmets namn, datum för översättning, översättarens namn och så vidare. En användbar funktion kallas pluralformer. Engelska använder bara en singular- och en pluralform av substantiv, t.ex 1 file och 10 files. Det gör att många utvecklare tror att världen är så enkel, och att de kan använda meddelanden som Do you want to delete %1 file(s)?, där %1 anger antalet filer som ska tas bort. Men detta är i grunden felaktigt. För översättning till slovakiska behövs tre olika former för meddelandet. Detta antal är olika för olika språk och även om det är samma, som t.ex. för tjeckiska där tre förmer också används, så kan regler för att välja formen som ska användas vara mycket olika. Pluralformer i PO-filer är till för att hjälpa till med det. &kde;-utvecklarna har valt en annan implementering av pluralformer än &GNU; gettext, och introducerade sitt eget format för att hantera dem. Det planeras att använda &GNU;-gettext pluralformer i &kde; version 4. Redigera Här är en skärmbild av &kbabel; Skärmbild av &kbabel; Skärmbild av &kbabel; För bekvämlighet har &kbabel; verktygsrader för att snabba upp många åtgärder, och för upptagna användare finns det många snabbtangenter. Huvudfönstret är uppdelat i fyra delar. Redigeringsrutan uppe till vänster är skrivskyddad och innehåller det nuvarande msgid-fältet från den öppnade PO-filen och dess engelska text. Redigeringsrutan nere till vänster innehåller msgstr-fältet som hör ihop med msgid som visas, och här kan du redigera den översatta texten. Den övre högra delen av fönstret är kommentarrutan, där du kan se kommentaren som lagts till för posten som för närvarande redigeras. Den kan användas för att: ta reda på hur det nuvarande meddelandet behandlas av programmet (c-format eller enkelt) i vissa fall läsa hjälpsamma kommentarer som lagts till av programmets utvecklare för att hjälpa översättarna med arbetet. Det kan till exempel finnas tekniska tips (användes med stor effekt i LyX-projektet) du behöver veta vilken fil det nuvarande meddelandet kommer från, eftersom du vill rapportera ett stavfel i den engelska originaltexten. Redigeringsfönstret (nere till höger) är den mest avancerade delen av &kbabel;s huvudfönster. Dess storlek kan justeras med delningslinjen som avgränsar det och kommentarrutan (rutan längst upp till höger). Redigeringsfönstret har två flikar: en som visar sökinformation och en annan som visar sammanhang. Sammanhangsfliken innehåller en ruta som visar föregående och fyra följande posterna i anslutning till den nuvarande posten. I allt väsentligt är det en liten 'ögonblicksbild' av PO-filen. Det är mycket vanligt att flera strängar är relaterade både framåt och bakåt vid översättning, så sammanhangsrutan är användbar för att titta på intilliggande meddelanden för att få en indikation om hur det nuvarande meddelandet kan översättas på bästa sätt. Översättning av dialoggränssnitt är ett bra exempel, eller grafiska komponenter som har en "vad är det här" snabbhjälp tillsammans med sin text. Fler funktioner i &kbabel; Varje meddelandepost kan ha tre tillstånd: oöversatt det finns inte någon översatt text som hör ihop med meddelandetexten inexakt msgmerge har försökt hitta en bra översatt sträng genom att titta i övriga poster i PO-filen. Det här fungerar inte perfekt, och du måste redigera den översatta texten så att den passar ihop med den nuvarande engelska texten. översatt msgid är den fullständigt översatta formen av msgstr Tillståndet för den nuvarande posten visas av två LED:s. Beroende på dina inställningar, finns de i statusraden eller ovanför redigeringsrutan för den översatta strängen. Båda har anpassningsbar färg för att passa dina visuella behov eller din smak. Läs gärna avsnittet Inställningar för att se hur du kan justera de här inställningarna. Avancerad översättning Nu har du en idé om hur man översätter en PO-fil. I det här avsnittet kommer vi att följa ett standardsätt att översätta en ny PO-fil, med användning av de avancerade funktionerna i &kbabel;. Vi antar att du redan har öppnat en POT-fil mall, och sparat den som en PO-fil. Navigering i PO-fil &kbabel; låter dig enkelt navigera genom filen enligt översättningens tillstånd. Oöversatt eller inexakt status har redan beskrivits. Ett meddelande kan markeras som felaktigt som ett resultat av valideringskontroll eller validering gjord av msgfmt. Och &kbabel; stöder förstås en historik av visade meddelanden med Framåt/Bakåt, på ett sätt som liknar &konqueror;. Alla kommandon för navigering finns i menyn . Page Up Hoppa till föregående post Page Down Hoppa till nästa post &Ctrl;Page Up Hoppa till föregående inexakta post &Ctrl;Page Down Hoppa till nästa inexakta post &Alt;Page Up Hoppa till föregående oöversatta post &Alt;Page Down Hoppa till nästa oöversatta post &Shift;Page Up Hoppa till föregående felmeddelande &Shift;Page Down Hoppa till nästa felmeddelande &Ctrl;&Shift;Page Up Hoppa till föregående inexakta eller oöversatta post &Ctrl;&Shift;Page Down Hoppa till nästa inexakta eller oöversatta post Smart redigering Smart redigering betyder att editorn hjälper dig att lätt redigera översättningen medan den tar hänsyn till det speciella med PO-formatet. Den hanterar specialtecken om nödvändigt. Den stöder också mer än ett läge för att lägga till radslut. Det här är mycket användbart på grund av sättet som gettext hanterar radslut. Det ignorerar dem helt enkelt. (Du kan tänka dig att all text i en msgstr är en enda rad.) Om du vill lägga till ett riktigt radslut, måste du lägga till \n. Men de flesta översättare inser inte att ett radslut i en msgstr inte lägger till något mellanslag mellan raderna. Det här kan lätt lösas genom att lägga till ett mellanslag i slutet på varje rad. Men du kan lätt glömma det, så smart redigering gör det automatiskt åt dig. Tabellen nedanför summerar de smarta redigeringsfunktionerna. Tabulator Infoga \t " Infoga \" Enter Om det sista tecknet innan markören inte är ett mellanslag, lägg till ett mellanslag. Starta därefter en ny rad. &Ctrl;Enter Starta en ny rad utan någon extra logik &Shift;Enter Infoga \n och starta en ny rad Om du vill se var blanktecken finns, kan du aktivera Färglägg bakgrund och/eller Markera mellanslag med punkter i inställningsdialogrutan under fliken Redigera Utseende. Automatisk översättning Som ett första steg när en ny översättning påbörjas, så tillhandahåller &kbabel; funktioner för att automatiskt fylla i översättningen av meddelanden med äldre översättningar. Välj VerktygGrovöversättning och &kbabel; visar följande dialogruta: Dialogrutan för grovöversättning I dialogrutan ska du ange vad som ska översättas, och välja källfiler för gamla översättningar. Längst upp i rutan Vad ska översättas finns tre kryssrutor (Oöversatta poster, Inexakta poster, Översatta poster) som anger vilken sorts meddelanden du vill översätta. Oöversatta och inexakta poster är naturliga val för automatisk översättning, men du kan också ändra meddelanden som redan är översatta. Varje exakt matchning för msgid används alltid vid grovöversättning. Men du kan dock lägga till flera strategier, t.ex. Tillåt inexakt översättning (långsam) och Tillåt översättning av enstaka ord. Båda dessa ytterligare strategier måste stödjas av de använda källorna (se nedan). Det finns ingen specifikation av vad inexakt översättning betyder, men syftet är helt uppenbart. Översättning av enstaka ord är bara lämpligt för vissa språk. &kbabel; försöker översätta ord i msgid separat, och därefter placera de översatta orden (eller meningarna) i samma ordning i msgstr. Alla ordlistor som är tillgängliga kan användas som källa för grovöversättning. Det finns en lista med Använd inte och en med Använd för ordlistor. Ordlistorna används i ordningen de står i listan Använd. Den första ordlistan används för att hitta en översättning. Hittas den inte, används nästa ordlista, och så vidare. Du kan använda knapparna med pilar för att flytta ordlistor mellan listorna. Glöm inte att ändra ordningen för att passa dina behov med knapparna Flytta uppåt och Flytta ner. Normalt markerar &kbabel; alla grovöversatta meddelanden som inexakta, eftersom antagandet är att all automatisk översättning måste granskas av en översättare. Om du är 100 % säker på att den automatiska översättningen blir riktig, eller du vill granska översättningen ändå, kan du stänga av den automatiska markeringen som inexakta med Markera ändrade poster som inexakta, men du måste bekräfta detta. När du har ställt in alla alternativ så att de passar dina behov, tryck på Starta för att översätta meddelanden automatiskt. Du kan följa förloppet med stapeln, och om det behövs finns alltid knappen Stanna. Validera översättningen Alla gör misstag. Så &kbabel; stöder ett antal kontroller för typiska problem med översättningar. Dessa kontroller (inte syntaxkontroll) kan i grunden utföras på två sätt. Kontroller kan göras vid varje ändring av den översatta texten. De kallas automatiska kontroller och kan aktiveras i &kbabel;s inställningsdialogruta. Automatisk syntaxkontroll är möjlig varje gång filen sparas. De automatiska kontrollerna kan göra &kbabel; långsammare. Om du har en långsam dator, kan du stänga av automatiska kontroller och bara använda den andra möjligheten att anropa alla sorters kontroller från menyn VerktygValidering. Då utförs kontrollen för alla meddelanden i filen, och de felaktiga markeras som fel. Kontrollera syntax Det här kör msgfmt för att kontrollera giltigheten av PO-filen som &GNU;-gettext paketet ser den. Det visar resultatet av kommandot och markerar felaktiga msgstr. Kontrollera argument Felaktiga översättningar kan krascha programmet. Den farligaste delen av översättningen är argument, t.ex. för printf-liknande funktioner. Den här kontrollen jämför antal och typ av argument i msgid och msgstr. De måste stämma överens. Kontrollera snabbtangenter Text för grafiska gränssnitt innehåller ofta snabbtangenter, dvs. bokstäver som kan användas för att snabbt komma åt grafiska element via tangentbordet. De anges med särskilda tecken, t.ex. & i &kde;. Ett typiskt krav på översättningen är att den översatta texten också ska innehålla snabbtangenter. Den här kontrollen upptäcker sådana problem åt dig. Tecknet för snabbtangent kan anges i Inställningar under fliken Diverse. Leta efter översatt sammanhangsinformation Du behöver förmodligen detta bara för &kde;-översättning. Viss text är för vanlig och måste översättas olika i skilda sammanhang. För &kde; beskrivs sammanhanget i början av msgid, efter den speciella teckensekvensen :_. Kanske vissa översättare inte känner till den här konventionen, och försöker också översätta sammanhangsinformationen. Den här kontrollen försöker hitta sådana fel. Om den hittar översatt sammanhangsinformation, ska du ta bort den. Kontrollera pluralformer Om msgid anges som en pluralform, måste översättningen innehålla rätt antal översättningar åtskilda med \n. Det rätta antalet beror på språket som översätts, och anges under fliken Identitet i dialogrutan Inställningar. Detta är bara implementerat för &kde; för ögonblicket. Kontrollera ekvationer Ekvationer är ett särskilt format för msgid, som typiskt används i .desktop-filer. Och eftersom översättningen kommer att infogas i dessa filer igen, måste msgstr också använda detta särskilda format. Detta betyder att översättningen måste börja med (fram till första förekomsten av =) samma text som det ursprungliga meddelandet, t.ex. Name=. Stavningskontrollera översättningen Som alltid är det mycket viktigt att stavningskontrollera översättningen innan resultatet används. På detta sätt kan man hitta stavfel och andra problem med översättningen. &kbabel; använder &kde;:s standardbibliotek för stavningskontroll, och normalinställningen finns i inställningsdialogrutan för projekt. Stavningskontrollen själv finns i undermenyn VerktygStavning. Du kan använda ett antal olika varianter av stavningskontroll: Kontrollera stavning... Det här är ett generellt anrop av en dialogruta, där du kan välja läge för stavningskontrollen, och ange normalläget. Det anropas genom att trycka på &Ctrl; I. Kontrollera allt... Stavningskontrollera alla meddelanden i filen. Kontrollera från markörpositionen... Börja stavningskontrollen från positionen i det nuvarande meddelandet och fortsätt till slutet på filen. Kontrollera nuvarande... Stavningskontrollera bara nuvarande meddelande. Kontrollera markerad text... Om det finns markerad text i msgstr-editorn, finns det här alternativet tillgängligt, och stavningskontrollerar bara den markerade texten. Översätter &XML;, <acronym >HTML</acronym >, ... Språk med taggar används mer och mer i grafiska gränssnitt. &kde;-projektet använder också PO-filer för att översätta DocBook dokumentationsfiler (som också använder taggar). &kbabel; innehåller en hel del funktioner som stöder denna trend. Här beskrivs bara funktioner som har att göra med taggar för markering av själva texten. Det andra problemet som uppstår genom att använda språk med taggar, är översättning av längre texter. Detta hanteras av jämförelsefunktionen som beskrivs i följande avsnitt. Den nuvarande versionen av &kbabel; klarar av att räkna ut vilka taggar som används i msgid, och tillhandahålla ett enkelt sätt att komma åt dem med följande alternativ från menyn Redigera: Infoga nästa tagg Det här lägger till nästa tagg i översättningen, som hittas i msgid. &kbabel; hittar taggen som ska läggas till genom att räkna antalet taggar från början av översättningen. Redigera Infoga tagg Den här undermenyn innehåller alla olika taggar som hittades i den ursprungliga engelska strängen. Genom att välja någon av dem kan du infoga den på markörens nuvarande position i den översatta texten. Visa skillnader Som tidigare nämnts, försöker aktuella program vara användarvänliga, och innehåller många längre beskrivande texter, inklusive markering med taggar. Om en utvecklare ändrar en del av texten, så behåller i bästa fall &GNU;s gettext-system den gamla översättningen och markerar den som inexakt. (I sämsta fall så går hela texten förlorad, beroende på omfattningen av ändringarna i texten). Det här fungerar bra om msgid är kort, eftersom du då snabbt hittar ändringarna. Men om texten är lång, så måste du kämpa för att ta reda på vad som har ändrats (det kan till exempel bara vara en ändring av en form som någon i gruppen av korrekturläsare gjort). Som hjälp, kan man be &kbabel; att slå upp det ursprungliga msgid och visa skillnaderna. Ändringarna visas grafiskt i fönstret Originaltext. Exakt metod kan ställas in i &kbabel;s inställningsdialogruta. Verktyg Jämföra Visa jämförelse visar skillnader som hittas. För att se den nuvarande texten utan blandning med originaltexten, använd Verktyg Jämföra Visa originaltext . Du kan sätta på eller stänga av automatisk uppslagning av skillnader genom att välja VerktygJämföra Jämförelseläge. När jämförelseläget är på, så startar sökning efter skillnader när du går till ett annat meddelande. Som alltid kan du använda olika källor för att hitta den gamla versionen av texten, som samtliga ställs in i &kbabel;s inställningsdialogruta: Översättningsdatabas Du kan använda översättningsdatabasen för att slå upp skillnader. Det rekommenderas bestämt att aktivera automatisk lagring av nyöversatta meddelanden i översättningsdatabasen med dialogrutan för att anpassa översättningsdatabasen. Detta läge kan aktiveras med Använd meddelanden från översättningsdatabas. Träd med gamla filer Detta används bara om sökning i översättningsdatabasen är avstängt. Genom att ange Baskatalog för jämförelsefiler kan du tala om för &kbabel; vilken fil som ska användas för jämförelser. Då används den relativa sökvägen för den öppna filen i katalogen som anges. Om det finns en motsvarande fil, så används den. För att använda det här läget, måste du göra en kopia av gamla filer innan varje uppdatering. En fil vald för hand Om föregående möjlighet inte fungerar riktigt, kan du alltid ange jämförelsefilen för hand genom att välja Verktyg Jämföra Öppna fil för jämförelse. Uppslagningen av jämförelser är inte alltid exakt, eftersom PO-filen inte innehåller någon referens till det ursprungliga meddelandet. Pluralformer Eftersom pluralformer är en rätt komplicerad företeelse, ägnar vi ett eget avsnitt åt hur de stöds i &kbabel;. Det här avsnittet handlar om &kde;:s pluralformer (för att vara exakt, i &kde; version 3). Från &kbabel; version 1.11 (KDE 3.5) och framåt, ska &kbabel; också kunna läsa, redigera och spara &GNU;-gettext pluralformer. Varje språk som &kde; översätts till, måste ha ställt in ett riktigt antal pluralformer. Det görs genom att översätta en specifik post i tdelibs.po. Antalet anges genom att välja namnet på ett språk, som använder samma antal och regler för att hitta rätt pluralform. En uppdaterad lista på möjliga värden finns i tdelibs källkod, i filen tdecore/klocale.cpp. &GNU;-gettext tillåter att antal och typ av pluralformer definieras med en formel, och att ställa in formeln oberoende för varje PO-fil. &kde; kan bara definiera antalet och typen av pluralform en gång i tdelibs. &kde;:s pluralformer anges av en kommentar _n: (inklusive ett efterföljande mellanslag) som innehåller argumentet %n. Argumentet används sedan i meddelandet själv och styr vilka pluralformer som ditt språk ska använda, beroende på reglerna för det. Översättningen av ett pluralform-meddelande måste ha ett särskilt format. Det måste innehålla rätt antal översättningar (en för varje pluralform) åtskilda av ett nyradstecken \n, utan sekvensen _n: (också utan mellanslaget). Till exempel, skulle _n: Selected 1 file\nSelected %n files översatt till slovakiska bli: Vybraný %n súbor\n Vybrané %n súbory\n Vybraných %n súborov För att kontrollera om översättningen innehåller rätt antal pluralformer, använd menyn VerktygValideringKontrollera pluralformer (endast KDE).