README for Package CL-L10N
Author: Sean Ross
i18n, CLDR stuff: Levente M?sz?ros, Attila Lendvai
cl-l10n is a localization package for common-lisp.
It is distributed under an MIT style license although the locale files
themselves are distributed under the LGPL.
There is also i18n support, read on for details.
*** Emacs goodies
I have this in my init.el that, besides other things, adds better
indentation for DEFRESOURCES.
(def (4 4 (&whole 4 &rest 2) &body))
(defresources (4 &rest (&whole 2 &lambda &body))))))
(dolist (el overrides)
(put (first el) 'common-lisp-indent-function
(if (symbolp (second el))
(get (second el) 'common-lisp-indent-function)
When locales are loaded cl-l10n also tries to load locale-specific
resource files. They are simple lisp files that are read into the
*RESOURCE-PACKAGE* package. Use WITH-RESOURCE-PACKAGE
to bind it at an appriately high level of your application.
I suggest to create a separate package for language resources and
don't import it in your app, so you can easily see/search for
The resources in these files are either constants or lambdas. For
lambdas we create a function with the resource name that looks up
the locale specific implementation and calls it. This way you can
write in your code (lang:plural-of #"foot") and it will return
"feet" in the language given in *locale*.
#"" is a reader macro that expands into a lookup-resource call.
Resource lookup can fall back to less preferred languages when
*locale* is a list.
The CLDR files contain formatting patterns that could be used for
generating/driving parsers, especially for date/time.
Collation info should be used to generate locale sensitive string
comparators. For the whole (quite complex!) story read this:
Consider reinstating a dwim-ish date/time parser, but it brings up
more questions than i want to write up right now.
Consider the relationship with the local-time project, and decide
Run (asdf:test-system :cl-l10n) to test the code.
If you have unexpected failures, drop a mail to the mailing
You can find the CL-L10N:PARSE-TIME function in the old branch of
darcs get https://www.common-lisp.net/project/cl-l10n/darcs/cl-l10n.unix-locale-files/