Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
16db7b50
Commit
16db7b50
authored
Aug 30, 2000
by
Fred Drake
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Markup revisions. Nothing was actually required to be able to format it,
but many conventions were broken.
parent
37d56174
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
54 deletions
+55
-54
Doc/lib/libgettext.tex
Doc/lib/libgettext.tex
+55
-54
No files found.
Doc/lib/libgettext.tex
View file @
16db7b50
...
...
@@ -9,7 +9,7 @@
The
\module
{
gettext
}
module provides internationalization (I18N) and
localization (L10N) services for your Python modules and applications.
It supports both the GNU
\
program
{
gettext
}
message catalog API and a
It supports both the GNU
\
code
{
gettext
}
message catalog API and a
higher level, class-based API that may be more appropriate for Python
files. The interface described below allows you to write your
module and application messages in one natural language, and provide a
...
...
@@ -30,27 +30,28 @@ localizing a Python module, or if your application needs to switch
languages on the fly, you probably want to use the class-based API
instead.
\begin{funcdesc}
{
bindtextdomain
}{
domain
, localedir
\code
{
=None
}}
\begin{funcdesc}
{
bindtextdomain
}{
domain
\optional
{
, localedir
}}
Bind the
\var
{
domain
}
to the locale directory
\var
{
localedir
}
. More concretely,
\module
{
gettext
}
will look for
binary
\file
{
.mo
}
files for the given domain using the path (on
Unix
):
binary
\file
{
.mo
}
files for the given domain using the path (on
\UNIX
):
\file
{
\var
{
localedir
}
/
\var
{
language
}
/LC
_
MESSAGES/
\var
{
domain
}
.mo
}
,
where
\var
{
languages
}
is searched for in the environment variables
\code
{
LANGUAGE
}
,
\code
{
LC
_
ALL
}
,
\code
{
LC
_
MESSAGES
}
, and
\code
{
LANG
}
respectively.
If
\var
{
localedir
}
is
\code
{
None
}
, then the current binding for
\var
{
domain
}
is returned
\footnote
{
The default locale directory is system
dependent; e.g. on standard RedHat Linux it is
\file
{
/usr/share/locale
}
, but on Solaris it is
\file
{
/usr/lib/locale
}
. The
\module
{
gettext
}
module does not try to
support these system dependent defaults; instead its default is
\file
{
\code
{
sys.prefix
}
/share/locale
}
. For this reason, it is always
best to call
\code
{
gettext.bindtextdomain()
}
with an explicit absolute
path at the start of your application.
}
.
\envvar
{
LANGUAGE
}
,
\envvar
{
LC
_
ALL
}
,
\envvar
{
LC
_
MESSAGES
}
, and
\envvar
{
LANG
}
respectively.
If
\var
{
localedir
}
is omitted or
\code
{
None
}
, then the current binding
for
\var
{
domain
}
is returned.
\footnote
{
The default locale directory is system dependent; e.g.
\
on
RedHat Linux it is
\file
{
/usr/share/locale
}
, but on Solaris it
is
\file
{
/usr/lib/locale
}
. The
\module
{
gettext
}
module does
not try to support these system dependent defaults; instead
its default is
\file
{
\code
{
sys.prefix
}
/share/locale
}
. For
this reason, it is always best to call
\function
{
bindtextdomain()
}
with an explicit absolute path at
the start of your application.
}
\end{funcdesc}
\begin{funcdesc}
{
textdomain
}{
domain
\code
{
=None
}}
\begin{funcdesc}
{
textdomain
}{
\optional
{
domain
}}
Change or query the current global domain. If
\var
{
domain
}
is
\code
{
None
}
, then the current global domain is returned, otherwise the
global domain is set to
\var
{
domain
}
, which is returned.
...
...
@@ -94,7 +95,7 @@ for returning either standard 8-bit strings or Unicode strings.
Translations instances can also install themselves in the built-in
namespace as the function
\function
{_
()
}
.
\begin{funcdesc}
{
find
}{
domain
, localedir
\code
{
=None
}
, languages
\code
{
=None
}}
\begin{funcdesc}
{
find
}{
domain
\optional
{
, localedir
\optional
{
, languages
}
}}
This function implements the standard
\file
{
.mo
}
file search
algorithm. It takes a
\var
{
domain
}
, identical to what
\function
{
textdomain()
}
takes, and optionally a
\var
{
localedir
}
(as in
...
...
@@ -102,10 +103,10 @@ algorithm. It takes a \var{domain}, identical to what
are strings.
If
\var
{
localedir
}
is not given, then the default system locale
directory is used
\footnote
{
See the footnote for
\function
{
bindtextdomain()
}
above.
}
.
If
\var
{
languages
}
is not given,
then the following environment variables are searched:
\
code
{
LANGUAGE
}
,
\
code
{
LC
_
ALL
}
,
\code
{
LC
_
MESSAGES
}
, and
\code
{
LANG
}
. The first one
directory is used
.
\footnote
{
See the footnote for
\function
{
bindtextdomain()
}
above.
}
If
\var
{
languages
}
is not given,
then the following environment variables are searched:
\
envvar
{
LANGUAGE
}
,
\
envvar
{
LC
_
ALL
}
,
\envvar
{
LC
_
MESSAGES
}
, and
\envvar
{
LANG
}
. The first one
returning a non-empty value is used for the
\var
{
languages
}
variable.
The environment variables can contain a colon separated list of
languages, which will be split.
...
...
@@ -120,8 +121,8 @@ The first such file name that exists is returned by \function{find()}.
If no such file is found, then
\code
{
None
}
is returned.
\end{funcdesc}
\begin{funcdesc}
{
translation
}{
domain
, localedir
\code
{
=None
}
,
languages
\code
{
=None
}
, class
_
\code
{
=None
}}
\begin{funcdesc}
{
translation
}{
domain
\optional
{
, localedir
\optional
{
,
languages
\optional
{
, class
_}}
}}
Return a
\class
{
Translations
}
instance based on the
\var
{
domain
}
,
\var
{
localedir
}
, and
\var
{
languages
}
, which are first passed to
\function
{
find()
}
to get the
...
...
@@ -133,7 +134,7 @@ file object argument. If no \file{.mo} file is found, this
function raises
\exception
{
IOError
}
.
\end{funcdesc}
\begin{funcdesc}
{
install
}{
domain
, localedir
\code
{
=None
}
, unicode
\code
{
=0
}}
\begin{funcdesc}
{
install
}{
domain
\optional
{
, localedir
\optional
{
, unicode
}
}}
This installs the function
\function
{_}
in Python's builtin namespace,
based on
\var
{
domain
}
, and
\var
{
localedir
}
which are passed to the
function
\function
{
translation()
}
. The
\var
{
unicode
}
flag is passed to
...
...
@@ -160,7 +161,7 @@ The base class used by all translation classes is
to write your own specialized translation classes. Here are the
methods of
\class
{
NullTranslations
}
:
\begin{methoddesc}
[NullTranslations]
{__
init
__}{
fp
\code
{
=None
}}
\begin{methoddesc}
[NullTranslations]
{__
init
__}{
\optional
{
fp
}}
Takes an optional file object
\var
{
fp
}
, which is ignored by the base
class. Initializes ``protected'' instance variables
\var
{_
info
}
and
\var
{_
charset
}
which are set by derived classes. It then calls
...
...
@@ -184,18 +185,18 @@ derived classes.
\end{methoddesc}
\begin{methoddesc}
[NullTranslations]
{
info
}{}
Return the ``protected''
\
va
r
{_
info
}
variable.
Return the ``protected''
\
membe
r
{_
info
}
variable.
\end{methoddesc}
\begin{methoddesc}
[NullTranslations]
{
charset
}{}
Return the ``protected''
\
va
r
{_
charset
}
variable.
Return the ``protected''
\
membe
r
{_
charset
}
variable.
\end{methoddesc}
\begin{methoddesc}
[NullTranslations]
{
install
}{
unicode
\code
{
=0
}}
\begin{methoddesc}
[NullTranslations]
{
install
}{
\optional
{
unicode
}}
If the
\var
{
unicode
}
flag is false, this method installs
\
code
{
self.gettext
}
into the built-in namespace, binding it to
\
function
{_}
. If
\var
{
unicode
}
is true, it binds
\code
{
self.ugettext
}
instead.
\
method
{
self.gettext()
}
into the built-in namespace, binding it to
\
samp
{_}
. If
\var
{
unicode
}
is true, it binds
\method
{
self.ugettext()
}
instead.
By default,
\var
{
unicode
}
is false.
Note that this is only one way, albeit the most convenient way, to
make the
\function
{_}
function available to your application. Because it
...
...
@@ -223,12 +224,12 @@ format \file{.mo} files in both big-endian and little-endian format.
It also parses optional meta-data out of the translation catalog. It
is convention with GNU
\program
{
gettext
}
to include meta-data as the
translation for the empty string. This meta-data is in
RFC822
-style
\code
{
key: value
}
pairs. If the key
\code
{
Content-Type
:
}
is found,
translation for the empty string. This meta-data is in
\rfc
{
822
}
-style
\code
{
key: value
}
pairs. If the key
\code
{
Content-Type
}
is found,
then the
\code
{
charset
}
property is used to initialize the
``protected''
\
code
{_
charset
}
instance variable. The entire set of
``protected''
\
member
{_
charset
}
instance variable. The entire set of
key/value pairs are placed into a dictionary and set as the
``protected''
\
code
{_
info
}
instance variable.
``protected''
\
member
{_
info
}
instance variable.
If the
\file
{
.mo
}
file's magic number is invalid, or if other problems
occur while reading the file, instantiating a
\class
{
GNUTranslations
}
class
...
...
@@ -236,7 +237,7 @@ can raise \exception{IOError}.
The other usefully overridden method is
\method
{
ugettext()
}
, which
returns a Unicode string by passing both the translated message string
and the value of the ``protected''
\
code
{_
charset
}
variable to the
and the value of the ``protected''
\
member
{_
charset
}
variable to the
builtin
\function
{
unicode()
}
function.
\subsubsection
{
Solaris
\file
{
.mo
}
file support
}
...
...
@@ -297,12 +298,12 @@ fp.write(message)
fp.close()
\end{verbatim}
In this example, the string
``
\code
{
writing a log message
}
''
is marked as
a candidate for translation, while the strings
``
\code
{
mylog.txt
}
''
and
``
\code
{
w
}
''
are not.
In this example, the string
\code
{
'writing a log message'
}
is marked as
a candidate for translation, while the strings
\code
{
'mylog.txt'
}
and
\code
{
'w'
}
are not.
The GNU
\
program
{
gettext
}
package provides a tool, called
\program
{
xgettext
}
, that scans C and
C++
source code looking for these
The GNU
\
code
{
gettext
}
package provides a tool, called
\program
{
xgettext
}
, that scans C and
\Cpp
{}
source code looking for these
specially marked strings.
\program
{
xgettext
}
generates what are
called
\file
{
.pot
}
files, essentially structured human readable files
which contain every marked string in the source code. These
...
...
@@ -312,10 +313,11 @@ language-specific versions for every supported natural language.
For I18N Python programs however,
\program
{
xgettext
}
won't work; it
doesn't understand the myriad of string types support by Python. The
standard Python distribution provides a tool called
\program
{
pygettext
}
that does though (found in the
\file
{
Tools/i18n
}
directory)
\footnote
{
Fran
\c
cois Pinard has written a program called
\program
{
pygettext
}
that does though (found in the
\file
{
Tools/i18n
/
}
directory)
.
\footnote
{
Fran
\c
cois Pinard has written a program called
\program
{
xpot
}
which does a similar job. It is distributed separately
from the Python distribution.
}
. This is a command line script that
from the Python distribution.
}
This is a command line script that
supports a similar interface as
\program
{
xgettext
}
; see its
documentation for details. Once you've used
\program
{
pygettext
}
to
create your
\file
{
.pot
}
files, you can use the standard GNU
...
...
@@ -330,13 +332,12 @@ module.
If you are localizing your module, you must take care not to make
global changes, e.g. to the built-in namespace. You should not use
the GNU
\
program
{
gettext
}
API but instead the class-based API.
the GNU
\
code
{
gettext
}
API but instead the class-based API.
Let's say your module is called ``spam'' and the module's various
natural language translation
\file
{
.mo
}
files reside in
\file
{
/usr/share/locale
}
in GNU
\program
{
gettext
}
format. Here's what you would put at the top of
your module:
\file
{
/usr/share/locale
}
in GNU
\program
{
gettext
}
format. Here's what
you would put at the top of your module:
\begin{verbatim}
import gettext
...
...
@@ -369,7 +370,7 @@ import gettext
gettext.install('myapplication')
\end{verbatim}
If you need to set the locale directory or the
\
code
{
unicode
}
flag,
If you need to set the locale directory or the
\
var
{
unicode
}
flag,
you can pass these into the
\function
{
install()
}
function:
\begin{verbatim}
...
...
@@ -444,7 +445,7 @@ for a in animals:
This works because the dummy definition of
\function
{_
()
}
simply returns
the string unchanged. And this dummy definition will temporarily
override any definition of
\function
{_
()
}
in the built-in namespace
(until the
\
code
{
del
}
command).
(until the
\
keyword
{
del
}
command).
Take care, though if you have a previous definition of
\function
{_}
in
the local namespace.
...
...
@@ -470,10 +471,10 @@ for a in animals:
\end{verbatim}
In this case, you are marking translatable strings with the function
\function
{
N
_
()
}
\footnote
{
The choice of
\function
{
N
_
()
}
here is totally
\function
{
N
_
()
}
,
\footnote
{
The choice of
\function
{
N
_
()
}
here is totally
arbitrary; it could have just as easily been
\function
{
MarkThisStringForTranslation()
}
.
}
,
which won't conflict with any definition of
\function
{
MarkThisStringForTranslation()
}
.
}
which won't conflict with any definition of
\function
{_
()
}
. However, you will need to teach your message extraction
program to look for translatable strings marked with
\function
{
N
_
()
}
.
\program
{
pygettext
}
and
\program
{
xpot
}
both support this through the
...
...
@@ -488,7 +489,7 @@ this module:
\begin{itemize}
\item
Peter Funk
\item
James Henstridge
\item
Marc-Andre Lemburg
\item
Marc-Andr
\'
e Lemburg
\item
Martin von L
\"
owis
\item
Fran
\c
cois Pinard
\item
Barry Warsaw
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment