i18n i RKWards JS-filer och sektioner

I motsats till .xml-filerna, krävs mer eget arbete för att göra .js-filerna i ett insticksprogram översättningsbara. Den stora skillnaden är att här finns det inget rimligt sätt att automatiskt avgöra om en sträng är avsedd att visas som en mänskligt läsbar sträng, eller är en bit kod. Man måste alltså markera det själv. Vi har redan visat exempel på det, hela tiden. Här är en fullständigare beskrivning av i18n-funktioner tillgängliga i js-kod, och några tips för komplexare fall:

i18n (msgid, [...])

Den viktigaste funktionen. Markerar strängen för översättning. Strängen (vare sig den översätts eller inte) returneras inom dubbla citationstecken (""). Ett godtyckligt antal platsmarkörer kan användas i strängen som visas nedan. Att använda sådana platsmarkörer istället för att sammanfoga små delsträngar gör det mycket lättare för översättare:

i18n ("Compare objects %1 and %2", getString ('x'), getString ('y'));
                
i18nc (msgctxt, msgid, [...])

Samma som i18n() men tillhandahåller dessutom ett meddelandesammanhang:

i18nc ("proper name, not state of mind", "Mood test");
                
i18np (msgid_singularis, msgid_pluralis, n, [...])

Samma som i18n() men för meddelanden som kan skilja sig i singularis och pluralis (och vissa språk skiljer på ännu fler numerus). Observera att precis som med i18n() kan ett godtyckligt antal ersättningar användas, men den första ('%1') krävs, och måste vara ett heltal.

i18np ("Comparing a single pair", "Comparing %1 distinct pairs", n_pairs);
                
i18ncp (msgctxt, msgid_singularis, msgid_pluralis, n, [...])

i18np() med tillagt meddelandesammanhang.

comment (kommentar, [indentering])

Ekar en kodkommentar markerad för översättning. I motsats till övriga i18n()-funktioner citeras den inte, men tecknet '#' läggs till på varje kommentarrad.

comment ("Transpose the matrix");
                        echo ('x <- t (x)\n');
                

För att lägga till kommentarer för översättarna (se ovan för en diskussion om skillnaderna mellan kommentarer och sammanhang), lägg till en kommentar som börjar med "i18n:" eller "translators:" direkt ovanför i18n()-anropet som ska kommenteras, till exempel:

// i18n: Spelling is correct: Scree plot.
                echo ('rk.header (' + i18n ("Scree plot") + ')\n');
        

i18n och citationstecken

I de flesta fall behöver man inte bekymra sig om hur i18n() beter sig när det gäller citationstecken. Eftersom översättningsbara strängar typiskt är stränglitteraler, är det helt rätt att citera dem, och det sparar en del skrivarbete. Dessutom är i18n()-strängar skyddade från duplicerade citationstecken i funktioner såsom makeHeaderCode()/Header() som normalt citerar sina argument. Väsentligen fungerar det genom att först skicka den översatta strängen via quote() (för att citera den) och därefter genom noquote() (för att skydda den från ytterligare citering). Om en översättningsbar sträng som inte är citerad behövs, använd i18n(noquote ("My message")). Om en översättningsbar sträng måste citeras en andra gång, skicka den genom quote() två gånger.

Trots det, är det i allmänhet inte en god idé att göra bitar som funktionsnamn eller variabelnamn översättningsbara. För det första är R, programspråket, inneboende på engelska, och det finns ingen internationalisering av själva språket. Kodkommentarer är en annan best, men man bör använda funktionen comment() för dem. För det andra, genom att göra syntaktiskt relevanta delar av den genererade koden översättningsbara, kan översättningar faktiskt orsaka fel i insticksprogrammet, exempelvis om en intet ont anande översättare översätter en sträng som är avsedd som ett variabelnamn med två separata ord skilda åt med ett mellanslag.