i18n in RKWard's js-bestanden en secties

In tegenstelling tot de .xml-bestanden vereist het vertaalbaar maken van de .js-bestanden van een plugin meer aanpasarbeid. Het grote verschil is hier dat er geen goede automatische manier is, aan te geven dat een string moet worden weergegeven als een voor een mens leesbare tekst, of als een stuk code. Dus zult u dit zelf moeten aanmerken. We hebben hier gaandeweg al voorbeelden van gezien. Hier volgt een completere beschrijving van de i18n-functies in js-code, en een aantal tips voor complexere gevallen:

i18n (msgid, [...])

De belangrijkste functie. Merkt de string aan om vertaald te worden. De string (vertaald of niet) wordt teruggegeven tussen dubbele aanhalingstekens (""). Een willekeurig aantal plaatshouders (open plaatsen, place holders) kunnen in de string worden gebruikt zoals hieronder te zien is. Zulke plaatshouders in plaats van het aan elkaar plakken van kleine substrings is veel eenvoudiger voor vertalers:

i18n ("Vergelijken objecten %1 en %2", getString ('x'), getString ('y'));
                
i18nc (msgctxt, msgid, [...])

Zelfde als i18n(), maar geeft ook nog eencontext voor de message:

i18nc ("eigen naam, niet geestestoestand", "Mood test"); (Vert.: Engels: Mood is stemming, humeur, én er bestaat een statistische test met de naam Mood test)
                
i18np (msgid_singular, msgid_plural, n, [...])

Zelfde als i18n(), maar voor messages die in enkelvoud en meervoud verschillend zijn (en in sommige talen zijn er zelfs meer numerieke vormen). Merk op dat precies zoals met i18n(), u een willekeurig aantal vervangingen (place holders) kunt gebruiken, maar de eerste ('%1') is verplicht, en moet een geheel getal zijn.

i18np ("Vergelijken enkel paar", "Vergelijken "%1" verschillende paren", n_paren);
                
i18ncp (msgctxt, msgid_singular, msgid_plural, n, [...])

i18np() met toegevoegde message context.

comment (comment, [indentation])

Echo't een commentaar bij de code, gemerkt voor vertaling. In tegenstelling tot de andere i18n()-functies, niet tussen aanhalingstekens, maar met een '#' voor iedere commentaarregel.

comment ("Transponeer de matrix");
                        echo ('x <- t (x)\n');
                

Voor het toevoegen van commentaar voor de vertalers (zie boven voor een discussie over de verschillen tussen commentaar en context), voeg commentaar toe dat begint met "i18n:" of "translators:" onmiddellijk boven de i18n()-aanroep voor commentaar. Bijv.:

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

i18n en aanhalingstekens

Meestal hoeft u zich geen zorgen te maken over het gedrag van i18n() met betrekking tot aanhalingstekens. Omdat vertaalbare strings meestal string literals (stringconstanten) zijn, is het aanhalen ervan prima, en bespaart dit u veel typewerk. En ook, in functies zoals makeHeaderCode()/Header() die gewoonlijk hun argumenten aanhalen, worden ge-i18n()'de strings beschermd tegen dubbel aanhalen.In wezen werkt dit door het sturen van de vertaalde string, eerst door quote() (om het aangehaald te maken), daarna door noquote() (om te voorkomen dat die nog een keer wordt aangehaald). Mocht u een vertaalbare string nodig hebben zonder aanhalingstekens, dan gebruikt u i18n(noquote ("Mijn bericht")). Indien u een vertaalbare string nodig heeft die nog een keer moet worden aangehaald, dan stuurt u die twee keer door quote().

Dat gezegd hebbende, is het gewoonlijk geen goed idee om zaken zoals functienamen of namen van variabelen vertaalbaar te maken. Ten eerste is R de programmeertaal in wezen Engels, en is de taal zelf niet geïnternationaliseerd. Commentaar bij code is iets geheel anders, maar daarvoor moet u de comment()-functie gebruiken. Tweedens, het vertaalbaar maken van syntactisch relevante stukken van de gegenereerde code betekent dat vertalingen uw plugin onbruikbaar kunnen maken. Bijv. als een nietsvermoedende vertaler een variabelenaam vertaalt in twee aparte woorden, met daar tussen een spatie (Vert.: ik heb de stukjes programmacode zo voorzichtig mogelijk vertaald, maar ik ben me ervan bewust, dat dit wel eens mis kan zijn gegaan. Maar die stukjes programmacode zijn ook bedoeld als illustratie, en dat kan het best in het Nederlands. Elders in dit document worden alle stukjes programmacode als één groot geheel weergegeven, en daar heb ik NIET aangezeten).