(defun lang-str (strsym)
"return the language dependent string given by symbol strsym"
(ecase strsym
(:yes "ja")
(:no "nei")
(:login-button "Logg inn")
(:logout-button "Logg ut")
(:version "versjon")
(:username "Brukernavn")
(:password "Passord")
(:e-mail "E-post")
...
I programmet bruker jeg da f.eks
#.(lang-str :username))
Så er det en del rutiner for å skrive ut pengeverdier, dato,
klokkeslett, postnummer, osv. Men det er fort gjort å gå i baret fordi
man antar et setninger er bygget opp på en bestemt måte.
Men jeg føler at dette er å finne opp hjulet på nytt og at det kanskje
finnes en del bra bibliotek for dette samt at noen har støtte for å
endre locale på runtime.
Noen som har erfaring med slike biblioteker eller erfaring og tips for
lokalisering generelt?
Petter
--
Sv: Fordi det roter til rekkefølgen i forhold til hvordan man
vanligvis leser tekst.
Sp: Hvorfor er det et problem?
Sv: Top-posting.
Sp: Hva er det mest irriterende du vet på usenet og i e-post?
> I programmet bruker jeg da f.eks
>
> #.(lang-str :username))
Jeg har gjort noe liknende selv, og i tillegg definert en readermacro
for å gjøre det mer kompakt:
(defun |#!-reader| (stream char arg)
(declare (ignore char arg))
`(int-string ,(read stream)))
(set-dispatch-macro-character #\# #\! #'|#!-reader|)
I mitt system kan man velge å bruke keywords i koden eller å skrive
strengene i koden på ett språk og oversette til andre språk, dvs.
jeg har både slike definisjoner:
(in-package :intl)
(native-language :no)
(use-language :se)
(dt "kjøpt" "köpt")
...osv (dt er en makro som dytter ting inn i oversettelsestabellene).
...og slike definisjoner:
(use-language :no-latex)
(dt :addr-header
"\\documentclass[norsk,oneside,a4paper,12pt]{article}
\\usepackage[latin1]{inputenc}
\\usepackage{fontenc}
\\usepackage{latexsym}
\\usepackage{babel}
\\usepackage{array}
...osv. ;-)
For ordens skyld: Med readermacroen kan man da f.eks. gjøre slikt:
(format stream #!"Ordrestatus for ordre nr. ~a~%~%" bo-db:id)
> Men jeg føler at dette er å finne opp hjulet på nytt og at det kanskje
> finnes en del bra bibliotek for dette samt at noen har støtte for å
> endre locale på runtime.
Jeg har lurt på det samme, men siden dette er så enkelt å få til i
lisp, lurer jeg på om en vel så grei løsning kan være å implementere
støtte for gettext gjennom å lage en tolker/oversetter for .po-filer.
Men så langt har jeg ikke kommet ennå, så det blir foreløpig "dobbelt
språkbokføring".
--
(espen)
> Jeg har gjort noe liknende selv, og i tillegg definert en readermacro
> for å gjøre det mer kompakt:
Det ble jo mye mer elegant med reader-macroer da.
> Jeg har lurt på det samme, men siden dette er så enkelt å få til i
> lisp, lurer jeg på om en vel så grei løsning kan være å implementere
> støtte for gettext gjennom å lage en tolker/oversetter for .po-filer.
Det var jo ingen dum ide. Jeg kjenner ikke så godt til .po filene, men
slik jeg har forstått så er rekkefølgen på argumentene (ordene) som
settes inn i strengene hardkodet ("%s bla bla %s"). Jeg mener å huske
(en del år siden nå) at i resedit på Macintosh så kunne man bruke ^1,
^2, ^3 og ^4 for å velge hvor argumentene skulle inn i de oversatte
strengene.
Jeg var inne på tanken å gjøre noe liknende, men bruke en SQL database
i stedet for en resource fork for å lagre format-strengene og listene
av argumentene som man kan sette inn i ønsket rekkefølge, f.eks.
'("gå til det ~A ~A" (color building)) => gå til det gule huset
'("Ir á ~A ~A" (building color)) => Ir á la casa amarilla