Previous: Dictionary, Up: Localization [Contents][Index]
Here is a simple example of how to localize your code. Let the file
intl-ex.lisp
contain:
(intl:textdomain "example") (defun foo (x y) "Cool function foo of x and y" (let ((result (bar x y))) ;; TRANSLATORS: One line comment about bar. (format t _"bar of ~A and ~A = ~A~%" x y result) #| TRANSLATORS: Multiline comment about how many Xs there are |# (format t (intl:ngettext "There is one X" "There are many Xs" x)) result))
The call to textdomain
sets the default domain for all
translatable strings following the call.
Here is a sample session for creating a template file:
* (intl:install) T * (intl:translation-enable) T * (compile-file "intl-ex") #P"/Volumes/share/cmucl/cvs/intl-ex.sse2f" NIL NIL * (intl::dump-pot-files :output-directory "./") Dumping 3 messages for domain "example" NIL *
When this file is compiled, all of the translatable strings are
recorded. This includes the docstring for foo
, the string for
the first format
, and the string marked by the call to
intl:ngettext
.
A file named “example.pot” in the directory “./” is created. The contents of this file are:
# example # SOME DESCRIPTIVE TITLE # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION" "Report-Msgid-Bugs-To: " "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE" "Last-Translator: FULL NAME <EMAIL@ADDRESS>" "Language-Team: LANGUAGE <LL@li.org>" "MIME-Version: 1.0" "Content-Type: text/plain; charset=UTF-8" "Content-Transfer-Encoding: 8bit" #. One line comment about bar. #: intl-ex.lisp msgid "bar of ~A and ~A = ~A~%" msgstr "" #. Multiline comment about how many Xs there are #: intl-ex.lisp msgid "Cool function foo of x and y" msgstr "" #: intl-ex.lisp msgid "There is one X" msgid_plural "There are many Xs" msgstr[0] ""
To finish the translation, a corresponding “example.po” file needs
to be created with the appropriate translations for the given
strings. This file must be placed in some directory that is included
in intl:*locale-directories*
.
Suppose the translation is done for Korean. Then the user can set the
environment variables appropriately or call (intl:setlocale
"ko")
. Note that the external format for the standard streams
needs to be set up appropriately too. It is up to the user to set
this correctly. Once this is all done, the output from the function
foo
will now be in Korean instead of English as in the original
source file.
For further information, we refer the reader to documentation on
Previous: Dictionary, Up: Localization [Contents][Index]