Få tekst

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 20. december 2021; checks kræver 7 redigeringer .

GNU gettext
Type software lokalisering , bibliotek
Forfatter Ulrich Drepper
Udviklere GNU projekt
Skrevet i Xi
Operativ system Unix-lignende , Microsoft Windows
Interface sprog Russisk og 37 flere sprog
Hardware platform på tværs af platforme
nyeste version
Læsbare filformater GNU Gettext Machine Object (big endian) [d] og GNU Gettext Machine Object (litte endian) [d]
Genererede filformater GNU Gettext Machine Object (big endian) [d] og GNU Gettext Machine Object (litte endian) [d]
Stat aktiv
Licens
  • bibliotek - LGPL
  • værktøjer - GPL
  • Dokumentation - GFDL /GPL
Internet side gnu.org/software/gettext/
 Mediefiler på Wikimedia Commons

gettext  er et GNU - projektbibliotek til internationalisering , som er meget brugt i fri software .

Beskrivelse

Den største forskel fra andre lignende værktøjer er, at gettext bruger deres engelske originaler til at udpege oversættelige strenge i programteksten i stedet for specielle identifikatorer. Det viser sig således, at programmet ikke behøver oversættelsesfiler for at vise grænsefladen på engelsk. Dette er normalt praktisk, fordi de fleste af de udviklede applikationer allerede er skrevet på engelsk.

gettext har støtte i flertal . For at gøre dette bruges en speciel funktion i programmets kildekode, og der gives to linjer - i ental og flertal. Når du erstatter en oversættelse til et andet sprog, bruges så mange former for oversættelsesstrengen som nødvendigt for det pågældende sprog. For at gøre dette skal oversættelsesfilens overskrift indeholde et sprogspecifikt udtryk til valg af oversættelsesstrengnummer efter nummer.

Gettext-biblioteket antager, at oversættelser gemmes i filer med filtypenavnene .mo ( Eng.  Machine Object , en binær fil, der er let at læse af programmet og specifik for platformen) eller .gmo (GNU .mo), .po ( Engelsk  Portable Object , en menneskelig læsbar filplatformsuafhængig oversættelse) og .pot ( PO-skabelon er en   mappe, en forberedelse af en .po-fil til oversættelse til et nyt sprog). [2] Ud over selve oversættelsesstrengene kan .po-filer indeholde oversætterens kommentarer og forskellige servicemærker.

For at generere og opdatere disse filer, når programmet ændres, er det meningen, at det skal bruge en række hjælpeprogrammer inkluderet i gettext-biblioteket.

Indledningsvis samles linjer fra programmets kildekode af programmet xgettexttil en .pot -fil (mappe). Denne fil og oversættelsesfiler opdateres med nye og ændrede strenge, der vises i kildekoden af msgmerge​​. Samtidig gemmes alle allerede oversatte strenge, de der ikke længere bruges markeres som forældede, og de der er ændret markeres som unøjagtige ( engelsk  fuzzy ). Som standard vil forældede og unøjagtige strenge ikke blive brugt af programmet. De er nødvendige for oversætterens bekvemmelighed: det er ofte lettere at basere på en eksisterende, omend forældet, oversættelse end at oversætte hele sætningen igen.

For at begynde at oversætte et program til et bestemt sprog, opretter oversætteren en .po-fil: kopierer .pot-filen til det rigtige sted og ændrer titlen i den. For at gøre dette kan du bruge programmet msginit. Den færdige oversættelsesfil konverteres til .mo-filer af værktøjet msgfmt. [2] .

Der er også hjælpeprogrammer til oversættere, der gør det nemmere at redigere oversættelsen, for eksempel:

Ud over den grundlæggende gettext-implementering for standard C , er der implementeringer af en lignende tilgang til C++ , Objective-C , sh / bash scripting , Python , Perl , PHP , GNU CLISP , Emacs Lisp , librep, GNU Smalltalk , Java , Scala [3] , GNU awk , Pascal , wxWidgets (ved hjælp af wxLocale-klassen), YCP ( YaST2 -sprog ), Tcl , Pike og R , Mono -platformsprog (Mono.Unix-navneområde) og for Qt -rammeværket . Nogle af disse sprog understøttes direkte af de ovennævnte værktøjer. [2] .

Brug på de fleste sprog svarer til brug i C.

Brug

For programmøren

Simple linjer

De strenge, der vises for brugeren under programdrift og derfor kræver oversættelse, er skrevet på engelsk i programmets kildekode og markeret med et funktionskald gettexteller ngettextlignende.

printf ( gettext ( "Hej! Mit navn er %s. \n " ), navn );

Normalt, for at reducere størrelsen af ​​kildekoden og forbedre læsbarheden, #define _ gettexterklæres og bruges et kort funktionssynonym (understregning). Så opkaldet konverteres til

printf ( _ ( "Hej! Mit navn er %s. \n " ), navn );

For ovenstående linje vil en post som denne vises i mappen, efter passende behandling med kommandoerne xgettext og msginit:

#: src/name.c:36 msgid "Hej! Mit navn er %s.\n" msgstr "" Flertalsformer

For at oversætte flertal bruges funktionen ngettext, der tager som parametre to engelske strenge (for henholdsvis ental og flertal) og et heltal. I PHP ser opfordringen ngettexttil at udskrive en streng med et tal sådan ud:

printf ( ngettext ( "%d dag siden" , "%d dage siden" , $daysAgo ), $daysAgo );

Funktionen ngettexti sig selv erstatter ikke en numerisk værdi for %d, så programmøren skal kalde en funktion printfeller lignende for at danne den ønskede streng med et tal.

Til oversætteren

Simple linjer

Den oversætter derefter linjerne i den fil, for eksempel til en russisk oversættelse:

#: src/name.c:36 msgid "Hej! Mit navn er %s.\n" msgstr "Hej! Mit navn er %s.\n" Flertalsformer

For at oversætte flertalsformer er det nødvendigt, at overskriften (hvor data som Project-Id-Versionog PO-Revision-Date) er angivet) .poaf filen angiver reglen for dannelsen af ​​flertalsformer for et givet sprog. For eksempel er der tre former for flertal på russisk:

  • 1, 21, 31... dag
  • 2, 3, 4, 22, 23, 24, 32, 33, 34... dage
  • 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35, 36... dage

Valget af en af ​​disse tre former, afhængigt af antallet, udføres med følgende formel [4] :

" Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

Udtrykket for pluralher er skrevet ved hjælp af C-sprogets syntaks og kan kun stole på variablen n, som angiver outputnummeret.

Efter en sådan erklæring antager formularerne tallene 0, 1 og 2, og oversættelsen af ​​sætningen er som følger:

msgid " %d dage siden" msgid_plural "%d dage siden" msgstr [ 0 ] "%d dage siden" msgstr[ 1 ] "%d dage siden" msgstr[ 2 ] "%d dage siden"

For brugeren

Typisk behøver en bruger på UNIX - lignende operativsystemer ikke at tage yderligere skridt for at vælge en bestemt oversættelse. Oversættelsen bestemmes af en systemvariabel LANG, som normalt allerede er indstillet til den påkrævede værdi.

Se også

Noter

  1. Haible B. GNU gettext 0.21 frigivet  - 2020 .
  2. 1 2 3 GNU gettext-manualen Arkiveret 5. december 2007 på Wayback Machine 
  3. makkarpov/scalingua: Et simpelt gettext-lignende internationaliseringsbibliotek for Scala . github.com . Hentet 28. april 2016. Arkiveret fra originalen 24. april 2020.
  4. ↑ Sådan ser en linje ud i en .po -oversættelsesfil . \n i slutningen af ​​en linje betyder et linjeskift.

Links