📚 LinuxDocs
Topics:
All Pages8021X HOWTOACP ModemACPI HOWTOADSL Bandwidth Man..ATA RAID HOWTOATM Linux HOWTOAX25 HOWTOAccessibility Dev ..Accessibility HOWTOAdv Bash Scr HOWTOAdv Routing HOWTOAntares RAID sparc..Apache Compile HOWTOApache WebDAV LDAP..Assembly HOWTOAstronomy HOWTOAthlon Powersaving..Authentication Gat..Autodir HOWTOAviation HOWTOAvr Microcontrolle..BRIDGE STP HOWTOBTTVBackspaceDeleteBandwidth Limiting..Bangla HOWTOBash Prompt HOWTOBattery PoweredBelarusian HOWTOBelgian HOWTOBeowulf HOWTOBocaBogoMipsBootdisk HOWTOBridgeC++ dlopenC C++Beautifier HO..C editing with VIM..CDROM HOWTOCDServer HOWTOCable ModemCaudium HOWTOClone HOWTOCompaq Remote Insi..Compaq T1500 HOWTOConexant+Rockwell ..Cryptoloop HOWTODB2 HOWTODHCPDSL HOWTODVD Playback HOWTODebian Binary Pack..Debian JigdoDebian and Windows..Disk Encryption HO..Disk on Chip HOWTODocBook Demystific..DocBook InstallDocBook OpenJade S..Ecology HOWTOEmacspeak HOWTOEncourage Women Li..Encrypted Root Fil..Euro Char SupportEvent HOWTOFedora Multimedia ..Finnish HOWTOFirewall PiercingFlash Memory HOWTOFont HOWTOFramebuffer HOWTOGCC HOWTOGIS GRASSGlibc Install HOWTOHOWTO HOWTOHOWTO INDEXHP HOWTOHandspring VisorHard Disk UpgradeHardware HOWTOHighQuality Apps H..Home Electrical Co..IBM7248 HOWTOIO Perf HOWTOIP AliasIP Masquerade HOWTOIRCImplement Sys Call..Indic Fonts HOWTOInfrared HOWTOIngresII HOWTOInstall StrategiesInstallation HOWTOInstallfest HOWTOIntkeybItalian HOWTOJabber Server Farm..JavaStation HOWTOKerberos Infrastru..Kernel HOWTOKerneldKodak Digitalcam H..LDAP HOWTOLDP Reviewer HOWTOLILO crash rescue ..LVM HOWTOLeased LineLegoLinksys Blue Box R..Linux+Win95Linux+Win9x+Grub H..Linux+Windows HOWTOLinux Complete Bac..Linux Crash HOWTOLinux Gamers HOWTOLinux Modem SharingLinux Promise RAID..Linux i386 Boot Co..LinuxGL QuakeWorld..Lotus DominoR5MILO HOWTOMMBase Inst HOWTOMP3 CD BurningMail User HOWTOMajordomo MajorCoo..Man PageMasquerading Simpl..Medicine HOWTOMindTerm SSH HOWTOMobile IPv6 HOWTOMock MainframeModule HOWTOModulesMotorola Surfboard..Mozilla OptimizationMulti Distro DevNCURSES Programmin..NFS HOWTONFS Root Client mi..NIS HOWTONetMeeting HOWTONetwork boot HOWTONvidia OpenGL Conf..OLSR IPv6 HOWTOOnline Troubleshoo..Oracle 9i Fedora 3..PA RISC Linux Boot..PCTel MicroModem C..PHP Nuke HOWTOPPP HOWTOPagerPalmOS HOWTOPartitionPartition Mass Sto..Partition Mass Sto..Partition RescuePine ExchangePortSlavePost Installation ..Postfix Cyrus Web ..Pre Installation C..Print2WinPrinting HOWTOProcess AccountingProgram Library HO..Proxy ARP SubnetQmail ClamAV HOWTOQmail VMailMgr Cou..Querying libiptc H..RPM HOWTOReading List HOWTORedHat CD HOWTOReliance HOWTORemote BridgingRemote Serial Cons..SCSI 2.4 HOWTOSCSI Generic HOWTOSLIP PPP EmulatorSRM HOWTOSSL Certificates H..Scanner HOWTOScientific Computi..Scripting GUI TclTkSecure CVS PserverSecure Programs HO..Security HOWTOSecurity Quickstar..Security Quickstar..Serial Laplink HOWTOSerial Programming..Slovak HOWTOSmall MemorySmart Card HOWTOSoftware Proj Mgmt..Software Release P..Sound HOWTOSpam Filtering for..Speech Recognition..SquashFS HOWTOSybase ASA HOWTOSybase ASE HOWTOSybase PHP ApacheTCP Keepalive HOWTOTamil Linux HOWTOTimePrecision HOWTOTimeSys Linux Inst..Token RingTraffic Control HO..Traffic Control tc..UPS HOWTOUnix Hardware Buye..Unix and Internet ..UpgradeUsenet News HOWTOUser Authenticatio..VB6 to TclVMS to Linux HOWTOVPN HOWTOValgrind HOWTOVideoLAN HOWTOVim HOWTOVirtual WebWebcam HOWTOWikiText HOWTOWindows Newsreader..Wireless Link sys ..Wireless Sync HOWTOXDM XtermXDMCP HOWTOXFree Local multi ..XFree86 HOWTOXFree86 R200XFree86 Second MouseXFree86 Video Timi..XML RPC HOWTOXWindow Overview H..XWindow User HOWTOXinerama HOWTOXterminalsHtml singleI810 HOWTOLibdc1394 HOWTOOpenMosix HOWTOPhhttpd HOWTOPpp sshText
Next Previous Contents

5. Slovenski locale

Z izrazom locale oznacujemo skupek lastnosti programskega okolja, odvisnih od jezikovnega in kulturnega okolja uporabnika. Mednje sodi informacija o tem, kateri znaki so crke in kaksen je njihov vrstni red, nacin izpisa datuma in ure, izbiro locila v zapisu decimalnih stevil (vejica oz. pika), zapis valute in sporocila programov uporabniku.

Programski vmesnik za internacionalizacijo in lokalizacijo na sistemih, zdruzljivih s standardi POSIX, je definiran v standardu ISO/IEC 9899 (Programski jezik ISO C) ter IEEE 1003.2 (POSIX.2). Informacije, pomembne za lokalizacijo, razvrsca v sest kategorij:

LC_ALL zajema vseh nastetih sest kategorij. Medtem ko projekt GNU pri izvedbi prvih petih kategorijah zvesto sledi standardu, se je v sesti odlocil za njegovo razsiritev. Standardizacijski komite se namrec ni mogel zediniti okrog izvedbe ravnanja s prevodi sporocil, zato je standard v tej tocki prakticno neuporaben: doloca le prevode za ``da'' in ``ne''. Projekt GNU je zato razvil svojo metodo, to je paket GNU gettext. Prevedeni katalogi sporocil, ki jih uporablja mehanizem gettext se navadno nahajajo v podimenikih imenika /usr/share/locale/.

Sledi nekaj primerov odziva poslovenjenega sistema. Primeri so pobrani s HP-UX, ker je lokalizacija Linuxa zaenkrat se v teku -- knjiznica GNU libc 2.0 in kasnejse izpeljanke sicer ze ponujajo okvir za lokalizacijo, izvedba pa zaenkrat se zaostaja, zato koncepta zaenkrat se ne moremo ilustrirati s programi iz paketov textutils, fileutils ipd.

Z nastavitvijo spremenljivke LANG na slovenski locale se spremenijo vsi prilastki:

~> date
Sat Oct 19 22:32:04 METDST 1996
~> LANG=sl_SI.iso88592 date
Sob, 19 okt 1996 22:32:04

Lahko pa jih spreminjamo tudi vsakega posebej. Ce zelimo obdrzati angleske izpise, obliko datuma, decimalno piko ipd., zeleli pa bi, da gre urejanje crk po slovenski abecedi, spremenimo samo .:: www.coursera.org ::. LC_COLLATE:

~> sort abc.tex 
abc
abca
abd
abc
~> LANG=C LC_COLLATE=sl_SI.iso88592 sort abc.tex
abc
abca
abc
abd
Seveda LC_COLLATE ne resi vseh problemov v zvezi z urejanjem. Pri razvrscanju kastiljskih kraljev bi, recimo, zeleli, da pride Alfonz IX. za Alfonzem VIII. in pred Alfonzem X. Kar pa je verjetno ze problem za umetno inteligenco...

Spremenljivka LANG ima v splosnem obliko:

LANG=jezik[_drzava[.nabor]]
Pri tem je jezik dvocrkovna koda jezika, kot jo doloca standard ISO 639, drzava pa dvocrkovna koda drzave, dolocena s standardom ISO 3166. Zgled za slovenscino, kot se govori v Sloveniji in pise s kodnim naborom ISO 8859-2, je torej
LANG=sl_SI.iso88592
Dolocitev drzave in nabora znakov je neobvezna (pomembna je seveda pri jezikih, ki se govorijo v vec drzavah; kaksen locale uporabljajo Slovenci v zamejstvu, je piscu teh vrstic neznano), tako lahko pisemo na kratko
LANG=sl

5.1 Programiranje z GNU gettext

Paket GNU gettext ponuja nekaj orodij za lokalizacijo:

S kratkim zgledom ilustrirajmo, kako poteka pisanje lokaliziranega programa s paketom GNU gettext.

  1. Najprej napisemo program zgled.c. Pri pisanju programa ze vkljucimo mehanizme internacionalizacije:
    #include <locale.h>
    #include <stdio.h>
    #include <libintl.h>
    
    #define PACKAGE   "zgled"
    #define LOCALEDIR "/usr/local/share/locale"
    
    char main() {
        setlocale (LC_MESSAGES, "");
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
    
        printf("%s\n", gettext("This is a short example."));
        printf("%s\n", gettext("Author: Primoz Peterlin"));
        return(0);
    }
    

  2. Z ukazom xgettext iz izvorne kode izluscimo izpise na zaslon:
    xgettext zgled.c
    S tem smo ustvarili datoteko messages.po. To je obicajna besedilna datoteka, ki vsebuje skelet prevodov sporocil. [StackOverflow: Perl]
  3. Datoteko messages.po z urejevalnikom dopolnimo s prevodi, recimo takole:
    # Slovenski prevod zgleda
    # Primoz Peterlin, <primoz.peterlin@biofiz.mf.uni-lj.si>
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: zgled 1.0\n"
    "POT-Creation-Date: 1998-12-06 14:05:53+0100\n"
    "PO-Revision-Date: 1998-12-06 15:00:00+0100\n"
    "Last-Translator: Primoz Peterlin <peterlin@biofiz.mf.uni-lj.si>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=ISO-8859-2\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Xgettext-Options: \n"
    "Files: zgled.c\n"
    
    #: zgled.c:13
    msgid "This is a short example."
    msgstr "To je kratek zgled."
    
    #: zgled.c:14
    msgid "Author: Primoz Peterlin"
    msgstr "Avtor: Primoz Peterlin"
    

  4. Popravljeno prenosljivo datoteko s sporocili (angl. portable message file) messages.po prevedemo v binarno obliko:
    msgfmt -v -o zgled.mo messages.po
  5. Binarno datoteko prestavimo v imenik, kjer jo bo gettext nasel:
    mv zgled.mo /usr/local/share/locale/sl/LC_MESSAGES
  6. Program prevedemo in povezemo s knjiznico libintl.a:
    gcc -o zgled zgled.c -lintl
  7. Pa poskusimo, kaksna je razlika!
    LANG=C ./zgled
    LANG=sl ./zgled
    LC_ALL=sl ./zgled
    LC_MESSAGES=sl ./zgled
    LC_CTYPE=sl ./zgled
    LC_ALL=sl_SI.iso88592 ./zgled
    
    V prvem in zadnjem primeru je izpisano sporocilo anglesko, v predzadnjem pa verjetno tudi. V prvem zato, ker smo eksplicitno zahtevali locale ``C'', v zadnjem pa zato, ker smo zahtevali locale ``sl_SI.iso88592'', v katerem ni prevoda sporocil -- to namrec obstaja za locale ``sl''. V predzadnjem zgledu smo uporabili pravi locale, a irelevantno kategorijo [Debug Haskell] LC_CTYPE namesto uporabljene LC_MESSAGES.

Se dve opombi: imenik, kamor prestavimo katalog sporocil, se mora ujemati z imenikom LOCALEDIR, navedenim v izvorni kodi. Tezavo, da GNU gettext razume ``sl'' in ``sl_SI.iso88592'' kot razlicna locala, je pisec teh vrstic resil z simbolno povezavo v imeniku /usr/local/share/locale:

ln -s sl sl_SI.iso88592

5.2 Poslovenjenje katalogov sporocil

V teku je internacionalizacija projekta GNU (programi iz projekta GNU predstavljajo znaten del celotnega sistema Linux in vecino tistega, s cimer se sooca koncni uporabnik). Trenutno so v slovenscino ze prevedena sporocila za naslednje pakete GNU: .:: taibaiabc8us1.therestaurant.jp ::. enscript, fileutils, gettext, grep, hello, recode in tar. Z nastavitvijo spremenljivke okolja

LANG=sl
bodo programi iz teh paketov izpisovali slovenska sporocila namesto angleskih. .:: postr.blog ::.

Razprava o poslovenjenju projekta GNU poteka med prejemniki elektronskega spiska .:: to-portal.com ::. <sl@li.org>, nanj se lahko narocite tako, da na naslov sl-request@li.org posljete vrstico

subscribe
v telesu sporocila.

Pomoc prostovoljcev, ki bi prevedli preostale pakete, ali pa se samo zavezali za vzdrzevanje ze prevedenih, je nadvse zazelena. Vabljeni!


Next Previous Contents

Share or Research:

Share on FB Post to X LinkedIn 🤖 Ask AI about this