1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
|
<!-- <?xml version="1.0" ?>
<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> -->
<!-- Uncomment the previous two lines to validate this document -->
<!-- standalone. Be sure to recomment them before attempting to -->
<!-- process index.docbook -->
<chapter id="using-kbabel">
<chapterinfo>
<!-- Fill in this section if this document has a different author -->
<authorgroup>
<author>
<personname><firstname></firstname><surname></surname></personname>
</author>
</authorgroup>
<othercredit role="translator"> <firstname>Stefan</firstname> <surname>Asserhäll</surname> <affiliation><address><email>[email protected]</email></address></affiliation> <contrib>Översättare</contrib></othercredit>
</chapterinfo>
<title>Att använda &kbabel;</title>
<sect1 id="using-introduction">
<title>Inledning</title>
<para>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.</para>
<para>Varje program som hanterar internationalisering tillhandahåller en eller flera meddelandekatalogfiler. Filändelsen på dessa filer är <literal role="extension">.pot</literal>. <acronym>POT</acronym> är en förkortning som betyder <quote>Portable Object Template</quote> (flyttbar objektmall).</para>
<para>Varje översättare tar en kopia av en <acronym>POT</acronym>-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 <acronym>PO</acronym>-fil (Portable Object, flyttbart objekt). </para>
<para>När alla meddelanden väl har översatts så kompileras <acronym>PO</acronym>-filen till ett maskinläsbart binärformat, som är känt som en <acronym>MO</acronym>-fil (Machine Object, maskinobjekt). De här filerna, som lagras med filändelsen <literal role="extension">.mo</literal>, fungerar som en databas för att minimera tiden det tar för programmet att slå upp varje översatt meddelande. </para>
<para>En fråga hänger i luften: behöver jag veta vad som finns inne i en <acronym>PO</acronym>-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 <acronym>CVS</acronym>- eller <acronym>SVN</acronym>-konflikterna som uppstår när en översättningsprocess koordineras med ett versionshanteringssystem som <acronym>CVS</acronym> eller Subversion (<acronym>SVN</acronym>). &kbabel; kan inte hjälpa dig särskilt mycket om ett sådant problem uppstår, så en texteditor och en viss kunskap om <acronym>PO</acronym>-filer behövs. Låt oss se hur en <acronym>PO</acronym>-fil är uppbyggd.</para>
<para><acronym>PO</acronym>-filer består av par med meddelanden — ett <emphasis>msgid</emphasis> och en <emphasis>msgstr</emphasis>. 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 <acronym>PO</acronym>-filen för &noatun;, är <literal>msgid "Open a Playlist"</literal> </para>
<!-- ### TODO: we would need an example of an entry -->
<para>Tomma rader och de som börjar med <literal>#</literal> 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.</para>
<para>I många fall är det första paret med msgid-msgstr i <acronym>PO</acronym>-filen en falsk post (som fungerar som <acronym>PO</acronym>-filhuvud), vilken innehåller diverse information om den översatta <acronym>PO</acronym>-filen, som programmets namn, datum för översättning, översättarens namn och så vidare.</para>
<para>En användbar funktion kallas <emphasis>pluralformer</emphasis>. Engelska använder bara en singular- och en pluralform av substantiv, t.ex <quote>1 file</quote> och <quote>10 files</quote>. Det gör att många utvecklare tror att världen är så enkel, och att de kan använda meddelanden som <quote>Do you want to delete %1 file(s)?</quote>, där <literal>%1</literal> 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 <acronym>PO</acronym>-filer är till för att hjälpa till med det. </para>
<note><para>&kde;-utvecklarna har valt en annan implementering av pluralformer än <application>&GNU; gettext</application>, och introducerade sitt eget format för att hantera dem. Det planeras att använda &GNU;-gettext pluralformer i &kde; version 4. </para></note>
</sect1>
<sect1 id="using-editor">
<title>Redigera</title>
<para>Här är en skärmbild av &kbabel;</para>
<screenshot>
<screeninfo>Skärmbild av &kbabel;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="snap1.png" format="PNG"/>
</imageobject>
<textobject><phrase>Skärmbild av &kbabel;</phrase></textobject>
</mediaobject>
</screenshot>
<para>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. </para>
<para>Redigeringsrutan <emphasis>uppe till vänster</emphasis> är skrivskyddad och innehåller det nuvarande msgid-fältet från den öppnade PO-filen och dess engelska text.</para>
<para>Redigeringsrutan <emphasis>nere till vänster</emphasis> innehåller msgstr-fältet som hör ihop med msgid som visas, och här kan du redigera den översatta texten.</para>
<para>Den <emphasis>övre högra</emphasis> delen av fönstret är kommentarrutan, där du kan se kommentaren som lagts till för posten som för närvarande redigeras.</para>
<para>Den kan användas för att:</para>
<itemizedlist>
<listitem><para>ta reda på hur det nuvarande meddelandet behandlas av programmet (c-format eller enkelt) </para></listitem>
<listitem><para>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 <application>LyX</application>-projektet) </para></listitem>
<listitem><para>du behöver veta vilken fil det nuvarande meddelandet kommer från, eftersom du vill rapportera ett stavfel i den engelska originaltexten. </para></listitem>
</itemizedlist>
<para>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. </para>
<sect2 id="more-kbabel-features">
<title>Fler funktioner i &kbabel;</title>
<para>Varje meddelandepost kan ha tre tillstånd: </para>
<variablelist>
<varlistentry>
<term>oöversatt</term>
<listitem>
<para>det finns inte någon översatt text som hör ihop med meddelandetexten </para>
</listitem>
</varlistentry>
<varlistentry>
<term>inexakt</term>
<listitem>
<para><command>msgmerge</command> 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. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>översatt</term>
<listitem>
<para>msgid är den fullständigt översatta formen av msgstr </para>
</listitem>
</varlistentry>
</variablelist>
<para>Tillståndet för den nuvarande posten visas av två <acronym>LED</acronym>: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 <link linkend="preferences">Inställningar</link> för att se hur du kan justera de här inställningarna.</para>
</sect2>
</sect1>
<sect1 id="kbabel-features">
<title>Avancerad översättning</title>
<para>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. </para>
<sect2 id="kbabel-navigation">
<title>Navigering i PO-fil</title>
<para>&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 <link linkend="kbabel-validation">valideringskontroll</link> eller validering gjord av <command>msgfmt</command>. Och &kbabel; stöder förstås en historik av visade meddelanden med <guilabel>Framåt</guilabel>/<guilabel>Bakåt</guilabel>, på ett sätt som liknar &konqueror;.</para>
<para>Alla kommandon för navigering finns i menyn <menuchoice><guimenu>Gå</guimenu></menuchoice>. </para>
<informaltable>
<tgroup cols="2">
<tbody>
<row>
<entry><para><keycombo action="simul"><keycap>Page Up</keycap></keycombo></para></entry>
<entry><para>Hoppa till föregående post </para></entry>
</row>
<row>
<entry><para><keycombo action="simul"><keycap>Page Down</keycap></keycombo></para></entry>
<entry><para>Hoppa till nästa post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Ctrl;<keycap>Page Up</keycap></keycombo></para></entry>
<entry><para>Hoppa till föregående inexakta post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Ctrl;<keycap>Page Down</keycap></keycombo></para></entry>
<entry><para>Hoppa till nästa inexakta post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Alt;<keycap>Page Up</keycap></keycombo></para></entry>
<entry><para>Hoppa till föregående oöversatta post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Alt;<keycap>Page Down</keycap></keycombo></para></entry>
<entry><para>Hoppa till nästa oöversatta post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Shift;<keycap>Page Up</keycap></keycombo></para></entry>
<entry><para>Hoppa till föregående felmeddelande</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Shift;<keycap>Page Down</keycap></keycombo></para></entry>
<entry><para>Hoppa till nästa felmeddelande</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Ctrl;&Shift;<keycap>Page Up</keycap></keycombo></para></entry>
<entry><para>Hoppa till föregående inexakta eller oöversatta post</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Ctrl;&Shift;<keycap>Page Down</keycap></keycombo></para></entry>
<entry><para>Hoppa till nästa inexakta eller oöversatta post</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 id="kbabel-cleveredit">
<title>Smart redigering</title>
<para><emphasis>Smart redigering</emphasis> 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 <quote>specialtecken</quote> om nödvändigt.</para>
<para>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 <acronym>msgstr</acronym> är en enda rad.) Om du vill lägga till ett <quote>riktigt</quote> radslut, måste du lägga till <userinput>\n</userinput>. Men de flesta översättare inser inte att ett radslut i en <acronym>msgstr</acronym> 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. </para>
<para>Tabellen nedanför summerar de smarta redigeringsfunktionerna. </para>
<informaltable>
<tgroup cols="2">
<tbody>
<row>
<entry><para><keycombo action="simul"><keycap>Tabulator</keycap></keycombo></para></entry>
<entry><para>Infoga <emphasis>\t</emphasis></para></entry>
</row>
<row>
<entry><para><keycombo action="simul"><keycap>"</keycap></keycombo></para></entry>
<entry><para>Infoga <emphasis>\"</emphasis></para></entry>
</row>
<row>
<entry><para><keycombo action="simul"><keycap>Enter</keycap></keycombo></para></entry>
<entry><para>Om det sista tecknet innan markören inte är ett mellanslag, lägg till ett mellanslag. Starta därefter en ny rad.</para></entry>
</row><row>
<entry><para><keycombo action="simul">&Ctrl;<keycap>Enter</keycap></keycombo></para></entry>
<entry><para>Starta en ny rad utan någon extra logik</para></entry>
</row>
<row>
<entry><para><keycombo action="simul">&Shift;<keycap>Enter</keycap></keycombo></para></entry>
<entry><para>Infoga <emphasis>\n</emphasis> och starta en ny rad</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note>
<para>Om du vill se var blanktecken finns, kan du aktivera <guibutton>Färglägg bakgrund</guibutton> och/eller <guibutton>Markera mellanslag med punkter</guibutton> i inställningsdialogrutan under fliken <guilabel>Redigera</guilabel> <guilabel>Utseende</guilabel>. </para>
</note>
</sect2>
<sect2 id="kbabel-roughtranslation">
<title>Automatisk översättning</title>
<para>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 <menuchoice><guimenu>Verktyg</guimenu><guimenuitem>Grovöversättning</guimenuitem></menuchoice> och &kbabel; visar följande dialogruta: </para>
<para>
<screenshot>
<screeninfo>Dialogrutan för grovöversättning</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="roughtranslation.png" format="PNG"/>
</imageobject>
</mediaobject>
</screenshot>
</para>
<para>I dialogrutan ska du ange vad som ska översättas, och välja källfiler för gamla översättningar. </para>
<para>Längst upp i rutan <guilabel>Vad ska översättas</guilabel> finns tre kryssrutor (<guilabel>Oöversatta poster</guilabel>, <guilabel>Inexakta poster</guilabel>, <guilabel>Översatta poster</guilabel>) 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. </para>
<para>Varje exakt matchning för <acronym>msgid</acronym> används alltid vid grovöversättning. Men du kan dock lägga till flera strategier, t.ex. <guilabel>Tillåt inexakt översättning (långsam)</guilabel> och <guilabel>Tillåt översättning av enstaka ord</guilabel>. Båda dessa ytterligare strategier måste stödjas av de använda källorna (se nedan). Det finns ingen specifikation av vad <quote>inexakt översättning</quote> betyder, men syftet är helt uppenbart. Översättning av <quote>enstaka ord</quote> är bara lämpligt för vissa språk. &kbabel; försöker översätta ord i <acronym>msgid</acronym> separat, och därefter placera de översatta orden (eller meningarna) i samma ordning i <acronym>msgstr</acronym>. </para>
<para>Alla ordlistor som är tillgängliga kan användas som källa för grovöversättning. Det finns en lista med <guilabel>Använd inte</guilabel> och en med <guilabel>Använd</guilabel> för ordlistor. Ordlistorna används i ordningen de står i listan <guilabel>Använd</guilabel>. 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 <guibutton>Flytta uppåt</guibutton> och <guibutton>Flytta ner</guibutton>. </para>
<para>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 <guilabel>Markera ändrade poster som inexakta</guilabel>, men du måste bekräfta detta. </para>
<para>När du har ställt in alla alternativ så att de passar dina behov, tryck på <guibutton>Starta</guibutton> för att översätta meddelanden automatiskt. Du kan följa förloppet med stapeln, och om det behövs finns alltid knappen <guibutton>Stanna</guibutton>. </para>
</sect2>
<sect2 id="kbabel-validation">
<title>Validera översättningen</title>
<para>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.</para>
<para>Kontroller kan göras vid varje ändring av den översatta texten. De kallas <emphasis>automatiska</emphasis> kontroller och kan aktiveras i <link linkend="preferences-editor">&kbabel;s inställningsdialogruta</link>. Automatisk syntaxkontroll är möjlig varje gång filen sparas. </para>
<para>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 <menuchoice><guimenu>Verktyg</guimenu><guisubmenu>Validering</guisubmenu></menuchoice>. Då utförs kontrollen för alla meddelanden i filen, och de felaktiga markeras som fel. </para>
<variablelist>
<varlistentry>
<term><guimenuitem>Kontrollera syntax</guimenuitem></term>
<listitem>
<para>Det här kör <command>msgfmt</command> för att kontrollera giltigheten av PO-filen som &GNU;-gettext paketet ser den. Det visar resultatet av kommandot och markerar felaktiga <acronym>msgstr</acronym>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera argument</guimenuitem></term>
<listitem>
<para>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 <acronym>msgid</acronym> och <acronym>msgstr</acronym>. De måste stämma överens. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera snabbtangenter</guimenuitem></term>
<listitem>
<para>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 <guilabel>Inställningar</guilabel> under fliken <guilabel>Diverse</guilabel>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Leta efter översatt sammanhangsinformation</guimenuitem></term>
<listitem>
<para>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 <acronym>msgid</acronym>, efter den speciella teckensekvensen <userinput>:_</userinput>. 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. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera pluralformer</guimenuitem></term>
<listitem>
<para>Om <acronym>msgid</acronym> anges som en <quote>pluralform</quote>, måste översättningen innehålla rätt antal översättningar åtskilda med <userinput>\n</userinput>. Det rätta antalet beror på språket som översätts, och anges under fliken <guilabel>Identitet</guilabel> i dialogrutan <guilabel>Inställningar</guilabel>. Detta är bara implementerat för &kde; för ögonblicket. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera ekvationer</guimenuitem></term>
<listitem>
<para>Ekvationer är ett särskilt format för <acronym>msgid</acronym>, som typiskt används i .desktop-filer. Och eftersom översättningen kommer att infogas i dessa filer igen, måste <acronym>msgstr</acronym> också använda detta särskilda format. Detta betyder att översättningen måste börja med (fram till första förekomsten av <literal>=</literal>) samma text som det ursprungliga meddelandet, t.ex. <userinput>Name=</userinput>. </para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="kbabel-spellcheck">
<title>Stavningskontrollera översättningen</title>
<para>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 <link linkend="preferences-project-spellcheck">inställningsdialogrutan för projekt</link>. Stavningskontrollen själv finns i undermenyn <menuchoice><guimenu>Verktyg</guimenu><guisubmenu>Stavning</guisubmenu></menuchoice>. Du kan använda ett antal olika varianter av stavningskontroll: </para>
<variablelist>
<varlistentry>
<term><guimenuitem>Kontrollera stavning...</guimenuitem></term>
<listitem>
<para>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å <keycombo action="simul">&Ctrl; <keycap>I</keycap></keycombo>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera allt...</guimenuitem></term>
<listitem>
<para>Stavningskontrollera alla meddelanden i filen. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera från markörpositionen...</guimenuitem></term>
<listitem>
<para>Börja stavningskontrollen från positionen i det nuvarande meddelandet och fortsätt till slutet på filen. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera nuvarande...</guimenuitem></term>
<listitem>
<para>Stavningskontrollera bara nuvarande meddelande. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><guimenuitem>Kontrollera markerad text...</guimenuitem></term>
<listitem>
<para>Om det finns markerad text i <acronym>msgstr</acronym>-editorn, finns det här alternativet tillgängligt, och stavningskontrollerar bara den markerade texten. </para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="kbabel-tags">
<title>Översätter &XML;, <acronym>HTML</acronym>, ...</title>
<para>Språk med taggar används mer och mer i grafiska gränssnitt. &kde;-projektet använder också <acronym>PO</acronym>-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. </para>
<note>
<para>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 <emphasis>jämförelsefunktionen</emphasis> som beskrivs i <link linkend="kbabel-diff">följande avsnitt</link>. </para>
</note>
<para>Den nuvarande versionen av &kbabel; klarar av att räkna ut vilka taggar som används i <acronym>msgid</acronym>, och tillhandahålla ett enkelt sätt att komma åt dem med följande alternativ från menyn <guimenu>Redigera</guimenu>: </para>
<variablelist>
<varlistentry>
<term>
<guimenuitem>Infoga nästa tagg</guimenuitem>
</term>
<listitem>
<para>
<action>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. </action>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<menuchoice><guimenu>Redigera</guimenu> <guimenuitem>Infoga tagg</guimenuitem> </menuchoice>
</term>
<listitem>
<para>
<action>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. </action>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="kbabel-diff">
<title>Visa skillnader</title>
<para>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 <acronym>msgid</acronym> ä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). </para>
<para>Som hjälp, kan man be &kbabel; att slå upp det ursprungliga <acronym>msgid</acronym> och visa skillnaderna. Ändringarna visas grafiskt i fönstret <guilabel>Originaltext</guilabel>. Exakt metod kan ställas in i <link linkend="preferences-editor-appearance">&kbabel;s inställningsdialogruta</link>. <menuchoice><guimenu>Verktyg</guimenu> <guisubmenu>Jämföra</guisubmenu> <guimenuitem>Visa jämförelse</guimenuitem></menuchoice> visar skillnader som hittas. För att se den nuvarande texten utan blandning med originaltexten, använd <menuchoice><guimenu>Verktyg</guimenu> <guisubmenu>Jämföra</guisubmenu> <guimenuitem>Visa originaltext</guimenuitem> </menuchoice>. </para>
<para>Du kan sätta på eller stänga av automatisk uppslagning av skillnader genom att välja <menuchoice><guimenu>Verktyg</guimenu><guisubmenu>Jämföra</guisubmenu> <guimenuitem>Jämförelseläge</guimenuitem></menuchoice>. När jämförelseläget är på, så startar sökning efter skillnader när du går till ett annat meddelande. </para>
<para>Som alltid kan du använda olika källor för att hitta den gamla versionen av texten, som samtliga ställs in i <link linkend="preferences-diffmode">&kbabel;s inställningsdialogruta</link>: </para>
<variablelist>
<varlistentry>
<term>Översättningsdatabas</term>
<listitem>
<para>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 <link linkend="database-fill"> dialogrutan för att anpassa översättningsdatabasen</link>. Detta läge kan aktiveras med <guilabel>Använd meddelanden från översättningsdatabas</guilabel>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>Träd med gamla filer</term>
<listitem>
<para>Detta används bara om sökning i översättningsdatabasen är avstängt. Genom att ange <guilabel>Baskatalog för jämförelsefiler</guilabel> 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. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>En fil vald för hand</term>
<listitem>
<para>Om föregående möjlighet inte fungerar riktigt, kan du alltid ange jämförelsefilen för hand genom att välja <menuchoice><guimenu>Verktyg</guimenu> <guisubmenu>Jämföra</guisubmenu> <guimenuitem>Öppna fil för jämförelse</guimenuitem></menuchoice>. </para>
</listitem>
</varlistentry>
</variablelist>
<note>
<para>Uppslagningen av jämförelser är inte alltid exakt, eftersom <acronym>PO</acronym>-filen inte innehåller någon referens till det ursprungliga meddelandet. </para>
</note>
</sect2>
</sect1>
<sect1 id="kbabel-pluralforms">
<title>Pluralformer</title>
<para>Eftersom pluralformer är en rätt komplicerad företeelse, ägnar vi ett eget avsnitt åt hur de stöds i &kbabel;. </para>
<note><para>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. </para></note>
<para>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 <filename>tdelibs.po</filename>. Antalet anges genom att välja namnet på ett språk, som använder samma antal och <emphasis>regler</emphasis> för att hitta rätt pluralform. En uppdaterad lista på möjliga värden finns i tdelibs källkod, i filen <filename>tdecore/tdelocale.cpp</filename>. </para>
<note><para>&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. </para></note>
<para>&kde;:s pluralformer anges av en kommentar <userinput>_n:</userinput> (inklusive ett efterföljande mellanslag) som innehåller argumentet <literal>%n</literal>. 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. </para>
<para>Ö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 <literal>\n</literal>, <emphasis>utan</emphasis> sekvensen <userinput>_n:</userinput> (också utan mellanslaget). Till exempel, skulle <quote>_n: Selected 1 file\nSelected %n files</quote> översatt till slovakiska bli: </para>
<programlisting>Vybraný %n súbor\n
Vybrané %n súbory\n
Vybraných %n súborov
</programlisting>
<para>För att kontrollera om översättningen innehåller rätt antal pluralformer, använd menyn <menuchoice><guimenu>Verktyg</guimenu><guisubmenu>Validering</guisubmenu><guimenuitem>Kontrollera pluralformer (endast KDE)</guimenuitem></menuchoice>. </para>
</sect1>
</chapter>
<!--
Local Variables:
mode: xml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
vim:tabstop=2:shiftwidth=2:expandtab
-->
|