view man/lispref/internationalization.texi @ 1332:6aa23bb3da6b

[xemacs-hg @ 2003-03-02 02:18:05 by ben] To: xemacs-patches@xemacs.org PROBLEMS: Include nt/PROBLEMS and update. Add note about incremental linking badness. cmdloop.el, custom.el, dumped-lisp.el, files.el, keydefs.el, keymap.el, lisp-mode.el, make-docfile.el, replace.el, simple.el, subr.el, view-less.el, wid-edit.el: Lots of syncing with FSF 21.2. Use if-fboundp in wid-edit.el. New file newcomment.el from FSF. internals/internals.texi: Fix typo. (Build-Time Dependencies): New node. PROBLEMS: Delete. config.inc.samp, xemacs.mak: Eliminate HAVE_VC6, use SUPPORT_EDIT_AND_CONTINUE in its place. No incremental linking unless SUPPORT_EDIT_AND_CONTINUE, since it can cause nasty crashes in pdump. Put warnings about this in config.inc.samp. Report the full compile flags used for src and lib-src in the Installation output. alloc.c, lisp.h, ralloc.c, regex.c: Use ALLOCA() in regex.c to avoid excessive stack allocation. Also fix subtle problem with REL_ALLOC() -- any call to malloc() (direct or indirect) may relocate rel-alloced data, causing buffer text to shift. After any such call, regex must update all its pointers to such data. Add a system, when ERROR_CHECK_MALLOC, whereby regex.c indicates all the places it is prepared to handle malloc()/realloc()/free(), and any calls anywhere in XEmacs outside of this will trigger an abort. alloc.c, dialog-msw.c, eval.c, event-stream.c, general-slots.h, insdel.c, lisp.h, menubar-msw.c, menubar-x.c: Change *run_hook*_trapping_problems to take a warning class, not a string. Factor out code to issue warnings, add flag to call_trapping_problems() to postpone warning issue, and make *run_hook*_trapping_problems issue their own warnings tailored to the hook, postponed in the case of safe_run_hook_trapping_problems() so that the appropriate message can be issued about resetting to nil only when not `quit'. Make record_unwind_protect_restoring_int() non-static. dumper.c: Issue notes about incremental linking problems under Windows. fileio.c: Mule-ize encrypt/decrypt-string code. text.h: Spacing changes.
author ben
date Sun, 02 Mar 2003 02:18:12 +0000
parents 576fb035e263
children 03ab78e48ef6
line wrap: on
line source

@c -*-texinfo-*-
@c This is part of the XEmacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/internationalization.info
@node Internationalization, MULE, PostgreSQL Support, top
@chapter Internationalization

@menu
* I18N Levels 1 and 2:: Support for different time, date, and currency formats.
* I18N Level 3::        Support for localized messages.
* I18N Level 4::        Support for Asian languages.
@end menu


@node I18N Levels 1 and 2
@section I18N Levels 1 and 2

XEmacs is now compliant with I18N levels 1 and 2.  Specifically, this means
that it is 8-bit clean and correctly handles time and date functions.  XEmacs
will correctly display the entire ISO-Latin 1 character set.

The compose key may now be used to create any character in the ISO-Latin 1
character set not directly available via the keyboard..  In order for the
compose key to work it is necessary to load the file @file{x-compose.el}.
At any time while composing a character, @code{C-h} will display all valid
completions and the character which would be produced.


@node I18N Level 3
@section I18N Level 3

@menu
* Level 3 Basics::
* Level 3 Primitives::
* Dynamic Messaging::
* Domain Specification::
* Documentation String Extraction::
@end menu

@node Level 3 Basics
@subsection Level 3 Basics

XEmacs now provides alpha-level functionality for I18N Level 3.  This means
that everything necessary for full messaging is available, but not every
file has been converted.

The two message files which have been created are @file{src/emacs.po} and
@file{lisp/packages/mh-e.po}.  Both files need to be converted using
@code{msgfmt}, and the resulting @file{.mo} files placed in some locale's
@code{LC_MESSAGES} directory.  The test ``translations'' in these files are
the original messages prefixed by @code{TRNSLT_}.

The domain for a variable is stored on the variable's property list under
the property name @var{variable-domain}.  The function
@code{documentation-property} uses this information when translating a
variable's documentation.


@node Level 3 Primitives
@subsection Level 3 Primitives

@defun gettext string
This function looks up @var{string} in the default message domain and
returns its translation.  If @code{I18N3} was not enabled when XEmacs was
compiled, it just returns @var{string}.
@end defun

@defun dgettext domain string
This function looks up @var{string} in the specified message domain and
returns its translation.  If @code{I18N3} was not enabled when XEmacs was
compiled, it just returns @var{string}.
@end defun

@defun bind-text-domain domain pathname
This function associates a pathname with a message domain.
Here's how the path to message file is constructed under SunOS 5.x:

@example
@code{@{pathname@}/@{LANG@}/LC_MESSAGES/@{domain@}.mo}
@end example

If @code{I18N3} was not enabled when XEmacs was compiled, this function does
nothing.
@end defun

@defspec domain string
This function specifies the text domain used for translating documentation
strings and interactive prompts of a function.  For example, write:

@example
(defun foo (arg) "Doc string" (domain "emacs-foo") @dots{})
@end example

to specify @code{emacs-foo} as the text domain of the function @code{foo}.
The ``call'' to @code{domain} is actually a declaration rather than a
function; when actually called, @code{domain} just returns @code{nil}.
@end defspec

@defun domain-of function
This function returns the text domain of @var{function}; it returns
@code{nil} if it is the default domain.  If @code{I18N3} was not enabled
when XEmacs was compiled, it always returns @code{nil}.
@end defun


@node Dynamic Messaging
@subsection Dynamic Messaging

The @code{format} function has been extended to permit you to change the
order of parameter insertion.  For example, the conversion format
@code{%1$s} inserts parameter one as a string, while @code{%2$s} inserts
parameter two.  This is useful when creating translations which require you
to change the word order.


@node Domain Specification
@subsection Domain Specification

The default message domain of XEmacs is `emacs'.  For add-on packages, it is
best to use a different domain.  For example, let us say we want to convert
the ``gorilla'' package to use the domain `emacs-gorilla'.
To translate the message ``What gorilla?'', use @code{dgettext} as follows:

@example
(dgettext "emacs-gorilla" "What gorilla?")
@end example

A function (or macro) which has a documentation string or an interactive
prompt needs to be associated with the domain in order for the documentation
or prompt to be translated.  This is done with the @code{domain} special
form as follows:

@page
@example
(defun scratch (location)
  "Scratch the specified location."
  (domain "emacs-gorilla")
  (interactive "sScratch: ")
  @dots{} )
@end example

It is most efficient to specify the domain in the first line of the
function body, before the @code{interactive} form.

For variables and constants which have documentation strings, specify the
domain after the documentation.

@defspec defvar symbol [value [doc-string [domain]]]
Example:
@example
(defvar weight 250 "Weight of gorilla, in pounds." "emacs-gorilla")
@end example
@end defspec

@defspec defconst symbol [value [doc-string [domain]]]
Example:
@example
(defconst limbs 4 "Number of limbs" "emacs-gorilla")
@end example
@end defspec

@defun autoload function filename &optional docstring interactive type
This function defines @var{function} to autoload from @var{filename}
Example:
@example
(autoload 'explore "jungle" "Explore the jungle." nil nil "emacs-gorilla")
@end example
@end defun


@node Documentation String Extraction
@subsection Documentation String Extraction

The utility @file{etc/make-po} scans the file @code{DOC} to extract
documentation strings and creates a message file @code{doc.po}.  This file
may then be inserted within @code{emacs.po}.

Currently, @code{make-po} is hard-coded to read from @code{DOC} and write
to @code{doc.po}.  In order to extract documentation strings from an add-on
package, first run @code{make-docfile} on the package to produce the
@code{DOC} file.  Then run @code{make-po -p} with the @code{-p} argument to
indicate that we are extracting documentation for an add-on package.

(The @code{-p} argument is a kludge to make up for a subtle difference
between pre-loaded documentation and add-on documentation:  For add-on
packages, the final carriage returns in the strings produced by
@code{make-docfile} must be ignored.)

@node I18N Level 4
@section I18N Level 4

The Asian-language support in XEmacs is called ``MULE''.  @xref{MULE}.