blob: beb1d475a79f8b6d56459ef60cbe7dead080bce8 [file] [log] [blame]
BABYL OPTIONS: -*- rmail -*-
Version: 5
Labels:
Note: This is the header of an rmail file.
Note: If you are seeing it in rmail,
Note: it means the file has no messages in it.

1, edited,,
From: terrell@druhi.ATT.COM (TerrellE)
Newsgroups: comp.sys.ibm.pc,sci.astro
Subject: Internationalization of Software?
Date: 30 Jun 89 19:05:23 GMT
Reply-To: terrell@druhi.ATT.COM (TerrellE)
Organization: AT&T, Denver, CO
*** EOOH ***
From: terrell@druhi.ATT.COM (TerrellE)
Newsgroups: comp.sys.ibm.pc,sci.astro
Subject: Internationalization of Software?
Date: 30 Jun 89 19:05:23 GMT
Reply-To: terrell@druhi.ATT.COM (TerrellE)
I know that there are some modifications that I will have to perform to
"internationalize" software products developed for use in the USA.
These changes include the obvious (translate the program
and documentation into the right language). However, some of the
other changes are more subtle. I'm sure that I've overlooked some, but
here's what I have so far:
Necessary changes to "internationalize" a software product:
1. Flexible date format:
dd/mm/yy
yy/dd/mm
yy/mm/dd
mm/dd/yy
2. Handle foreign daylight savings time.
3. Flexible radix (decimal) point (i.e. '.' or ','):
3.14159
3,14159
4. Allow English or Metric units.
5. Use "one thousand million" rather than "one billion".
6. Flexible time format:
hh:mm
hh.mm
hh'mm
7. Allow either ' ' or ',' for thousands delimiters:
1,000,000
1 000 000
What else is necessary? Overseas users: what changes would you make
to your "US Version" software to make it approprate for use in other
countries?
I'll post a summary of the results. Thanks in advance,
Eric Terrell (att!druhi!terrell)

1,,
Xref: IRO.UMontreal.CA comp.std.c:13991 comp.software.international:607
Path: IRO.UMontreal.CA!CC.UMontreal.CA!newsflash.concordia.ca!utcsri!utnut!cs.utexas.edu!howland.reston.ans.net!nctuccca.edu.tw!news.cc.nctu.edu.tw!mall!ywliu
From: ywliu@beta.wsl.sinica.edu.tw ()
Newsgroups: comp.std.c,comp.software.international
Subject: Re: ANSI C Locale Character Sets
Followup-To: comp.std.c,comp.software.international
Date: 3 Oct 1994 06:39:25 GMT
Organization: Computing Center, Academia Sinica
Lines: 26
Message-ID: <36o8ut$afu@mall.sinica.edu.tw>
References: <Cx0Mpy.7Lo@actrix.gen.nz>
NNTP-Posting-Host: ywliu%@beta.wsl.sinica.edu.tw
X-Newsreader: TIN [version 1.2 PL0]
*** EOOH ***
From: ywliu@beta.wsl.sinica.edu.tw ()
Newsgroups: comp.std.c,comp.software.international
Subject: Re: ANSI C Locale Character Sets
Followup-To: comp.std.c,comp.software.international
Date: 3 Oct 1994 06:39:25 GMT
Organization: Computing Center, Academia Sinica
References: <Cx0Mpy.7Lo@actrix.gen.nz>
NNTP-Posting-Host: ywliu%@beta.wsl.sinica.edu.tw
X-Newsreader: TIN [version 1.2 PL0]
Gary Houston (ghouston@actrix.gen.nz) wrote:
: It seems to me there are a couple of details missing from the ANSI C
: locale stuff:
: 1/ How can a program find out which character set is being used?
You may use setlocale(LC_ALL,NULL) to get the language info.
: 2/ How can a program determine whether text files use multibyte or
: wide characters, or is it to be assumed that multibyte will
: always be used?
As far as I am concerned, the wide character is used as the representation
inside your program. That is, wide character is your internal data
representatin form, as I/O operates on multi-byte characters. So, I always
read/write mutl-bytes and convert to wide character , and vice versa.
: Does anyone know of other standards/conventions/plans which fill
: in this missing information?
You may check out P.J. Plauger's "Standard C" column on CUJ May 1993 - July
1993. There is another one "Internationlization and Localization" in CUJ July
1993 too. I am looking for more material.
Yen-Wei Liu

1, edited, answered,,
Mail-from: From orac.iinet.com.au!pdcruze Thu Nov 24 17:38:19 1994
Return-Path: <orac.iinet.com.au!pdcruze>
Received: by icule (Smail3.1.28.1 #1)
id m0rAmnw-00009aC; Thu, 24 Nov 94 17:38 EST
Received: from lagrande.iro.umontreal.ca by iros1.IRO.UMontreal.CA (8.6.9) with ESMTP
id LAA06293; Thu, 24 Nov 1994 11:57:58 -0500
Received: from saguenay.IRO.UMontreal.CA (root@saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id LAA23939 for <pinard@lagrande.IRO.UMontreal.CA>; Thu, 24 Nov 1994 11:57:50 -0500
Received: from uniwa.uwa.edu.au (root@uniwa.uwa.edu.au [130.95.128.1]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id LAA20957 for <pinard@IRO.UMontreal.CA>; Thu, 24 Nov 1994 11:57:46 -0500
Received: from orac.iinet.com.au (orac.iinet.com.au [203.0.178.134]) by uniwa.uwa.edu.au (8.6.9/8.6.9) with ESMTP id AAA09394; Fri, 25 Nov 1994 00:57:29 +0800
Received: from orac.iinet.com.au (pdcruze@localhost [127.0.0.1]) by orac.iinet.com.au (8.6.9/8.6.9) with ESMTP id AAA08605; Fri, 25 Nov 1994 00:57:11 +0800
Message-Id: <199411241657.AAA08605@orac.iinet.com.au>
To: pinard@IRO.UMontreal.CA
cc: meyering@comco.com
Subject: Re: Starting localization of GNU recode
In-reply-to: Your message of "Thu, 24 Nov 1994 01:11:00 EST."
<m0rAXP2-00008sC@icule>
Date: Fri, 25 Nov 1994 00:57:10 +0800
From: "Patrick D'Cruze" <pdcruze@li.org>
*** EOOH ***
To: pinard@IRO.UMontreal.CA
cc: meyering@comco.com
Subject: Re: Starting localization of GNU recode
In-reply-to: Your message of "Thu, 24 Nov 1994 01:11:00 EST."
<m0rAXP2-00008sC@icule>
Date: Fri, 25 Nov 1994 00:57:10 +0800
From: "Patrick D'Cruze" <pdcruze@li.org>
> I met a few points of discussion while doing so:
>
> * I got to decide that, even if the program will eventually make
> most of its output in the foreign languages, the input syntax,
> option values, etc., are not to be localized.
Yes. The purpose of message catalogs was to provide an easy to use method
for displaying language independent messages. Hence little modifications
need to be made to support this. However, no easy method exists for
supporting language-independent inputs. So this will have to be left up to
the developer to decide how they are going to implement this.
> * it is not useful that I modify the lib/ routines if not done in the
> true sources. How do you/I/they proceed for getting this job done?
> I presume that lib/ routines will all use gettext for the time being.
Probably Roland (or another volunteer) will internationalize glibc. Linux's
libc has already been internationalised and a few message catalogs
already exist - French, German, Polish. It probably would be useful
modifying the routines in lib/ for those platforms that will be using
the routines located in libc/.
> I was expecting a problem which I did not met. All localizable
> strings were luckily into executable positions, that is, affected
> to variables or given as parameter to functions. But I will not
> escape this problem in all my things, and will surely hit some
> localizable strings in structured initializations. I'll see once
> there, unless you thought out an all ready solution for this (?).
I've come across this a few times within diffutils. Particularly struct
definitions and the like. I'll send you a list of guidelines when looking
for output messages. Will send this to you and Jim tommorrow.
Regards,
Patrick

1, edited,,
Mail-from: From pinard Mon Nov 28 12:15:47 1994
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rC9fz-00008uC; Mon, 28 Nov 94 12:15 EST
Message-Id: <m0rC9fz-00008uC@icule>
Date: Mon, 28 Nov 94 12:15 EST
From: pinard (Francois Pinard)
To: Richard M. Stallman <rms@prep.ai.mit.edu>
CC: Jim Meyering <meyering@comco.com>
Subject: GNU standards and localized message catalogs
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
*** EOOH ***
Date: Mon, 28 Nov 94 12:15 EST
From: pinard (Francois Pinard)
To: Richard M. Stallman <rms@prep.ai.mit.edu>
CC: Jim Meyering <meyering@comco.com>
Subject: GNU standards and localized message catalogs
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
* We also need a uniform convention about where, in the installed
hierarchy, to put translations of manuals in long term. The need is
not immediate. One friend volunteered to translate the GNU recode
manual in French. If this happens, I would like to know first *if*
the distribution should install it by default, and where it should
install it then. If not installed by default, what would be the
uniform naming scheme for Makefile goals installing documents?

1, edited,,
Mail-from: From pinard Sat Dec 24 23:51:00 1994
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rLkv4-00009AC; Sat, 24 Dec 94 23:50 EST
Message-Id: <m0rLkv4-00009AC@icule>
Date: Sat, 24 Dec 94 23:50 EST
From: pinard (Francois Pinard)
To: rms@gnu.ai.mit.edu
In-reply-to: <199412250445.XAA25324@mole.gnu.ai.mit.edu> (message from Richard Stallman on Sat, 24 Dec 1994 23:45:19 -0500)
Subject: Re: GNU standards and localized message catalogs
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Sat, 24 Dec 94 23:50 EST
From: pinard (Francois Pinard)
To: rms@gnu.ai.mit.edu
In-reply-to: <199412250445.XAA25324@mole.gnu.ai.mit.edu> (message from Richard Stallman on Sat, 24 Dec 1994 23:45:19 -0500)
Subject: Re: GNU standards and localized message catalogs
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
* We also need a uniform convention about where, in the installed
hierarchy, to put translations of manuals in long term.
I think they should go in the Info tree just like English manuals.
Yes, of course. Suppose I have a French recode.info, and an
English one. This kind of thing will not be immediate, but they
will come. We need some convention to install both. We are not
to give them different names, presumably. People will like to
say, on an individual basis: ``if a French version of something is
available, I'll prefer it over the standard English one''. So we
need a convention to stock these, and a convention to select them.

1,,
Mail-from: From gnu.ai.mit.edu!rms Sun Dec 25 05:16:06 1994
Return-Path: <gnu.ai.mit.edu!rms>
Received: by icule (Smail3.1.28.1 #1)
id m0rLpze-00009IC; Sun, 25 Dec 94 05:16 EST
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id AAA12366 for <icule!pinard>; Sun, 25 Dec 1994 00:01:47 -0500
Received: from saguenay.IRO.UMontreal.CA (root@saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id AAA10584 for <pinard@lagrande.IRO.UMontreal.CA>; Sun, 25 Dec 1994 00:01:46 -0500
Received: from mole.gnu.ai.mit.edu (rms@mole.gnu.ai.mit.edu [128.52.46.33]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id AAA14869 for <pinard@iro.umontreal.ca>; Sun, 25 Dec 1994 00:01:37 -0500
Received: by mole.gnu.ai.mit.edu (8.6.9/4.0)
id <AAA25411@mole.gnu.ai.mit.edu>; Sun, 25 Dec 1994 00:01:33 -0500
Date: Sun, 25 Dec 1994 00:01:33 -0500
Message-Id: <199412250501.AAA25411@mole.gnu.ai.mit.edu>
From: Richard Stallman <rms@gnu.ai.mit.edu>
To: pinard@iro.umontreal.ca
In-reply-to: <m0rLkv4-00009AC@icule> (pinard@iro.umontreal.ca)
Subject: Re: GNU standards and localized message catalogs
*** EOOH ***
Date: Sun, 25 Dec 1994 00:01:33 -0500
From: Richard Stallman <rms@gnu.ai.mit.edu>
To: pinard@iro.umontreal.ca
In-reply-to: <m0rLkv4-00009AC@icule> (pinard@iro.umontreal.ca)
Subject: Re: GNU standards and localized message catalogs
We need some convention to install both. We are not
to give them different names, presumably.
I would give them different names. They would have
separate menu items in the Info directory. That is the
easiest way and it seems good enough, so I don't see a reason
to spend time looking for any other way.

1, edited,,
Mail-from: From pinard Tue Jan 3 16:17:29 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rPGbe-00008xC; Tue, 3 Jan 95 16:17 EST
Message-Id: <m0rPGbe-00008xC@icule>
Date: Tue, 3 Jan 95 16:17 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501031914.LAA00333@daffy.ee.lbl.gov> (message from Vern Paxson on Tue, 03 Jan 95 11:14:17 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Tue, 3 Jan 95 16:17 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501031914.LAA00333@daffy.ee.lbl.gov> (message from Vern Paxson on Tue, 03 Jan 95 11:14:17 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
There are two categories of patches: a grouped set at initialization
time, and all-over-the-place one which marks localizable strings.
We can consider them separately (but I will most probably end up
suggesting we give them the same treatment...).
What would be easier would be that the original Flex sources already
marks all strings which require localization. The way I do it in my
things is merely replacing each "STRING" by _("STRING") *if* STRING
should be translated. Flex could then be distributed with:
#define _(String) (String)
effectively ignoring the marks. I may provide an initial patch
to you for this. Later on, the maintenance would be relatively
easy for you: if you add or modify a string, you will have to
ask yourself if the new or altered string requires translation,
and include it within _() if you think it should be translated.
"%s: %d" is an example of string not requiring translation...
The remaining work will be handled by group of volunteers from
different countries. I took the responsibility of organizing how
these things will be done. Once in a while, volunteers will provide
you some COUNTRY.tt files which you might accept to distribute
with Flex. (COUNTRY is a two letter code, like `de' for German.)
If the COUNTRY.tt files ever lag with regard to Flex modifications,
this would not break nationalized Flex: the current mechanics will
merely return the original English string if a proper translation
cannot be found. So you do not even have to feel tied to the
translators for releasing new distributions for Flex. And nothing
is subject to the GPL so far :-).
The initialization is not very complex, and can be done within
less than a dozen easy lines of code, hardly GPL'able. I think
they could be included in standard Flex distribution, while being
conditionalized out. The only harder modifications come from me,
and touch Makefile.in, for including all the machinery to prepare
and install locale message catalogs provided the underlying system
has what is needed. In the way I am now distributing my things, this
machinery automatically cut itself out when GNU locale is not usable.
Remain only two modules, currently named libintl.h and libintl.c
(this might change), which are covered by the GPL, which you
do not want to distribute with Flex. The Flex README could
suggest installers to grab them from any other GNU distribution.
The configuration machinery might automatically check if they have
been copied by the installer and, if not, forget about localization.
This way, Flex will be easily and widely nationalized, the GPL
principle will be safe, Flex will stay free of the GPL, and the
burden on the installers, as well as both you and me, will be
minimal in the long run.
There is a difficulty I have not studied yet, and which comes from
the fact that Flex generates C code (Bison has the same problem).
Flex itself could be nationalized, and this is orthogonal to the fact
Flex could generate nationalizable scanners. Both are desirable.

1, edited,,
Mail-from: From pinard Thu Jan 12 07:41:07 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rSOpt-00007LC; Thu, 12 Jan 95 07:41 EST
Message-Id: <m0rSOpt-00007LC@icule>
Date: Thu, 12 Jan 95 07:41 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501051930.LAA04658@daffy.ee.lbl.gov> (message from Vern Paxson on Thu, 05 Jan 95 11:30:54 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Thu, 12 Jan 95 07:41 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501051930.LAA04658@daffy.ee.lbl.gov> (message from Vern Paxson on Thu, 05 Jan 95 11:30:54 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Besides, not long after having started this i18n effort for my
own things, I realized that the i18n attribute should really be
attached to strings themselves, and not to what we do with them.
A blatant example is an error message produced by formatting.
The format string needs i18n, while the result from sprintf may
have so many different instances that it is unpractical to list
them all in some error_string_out() routine. I also got other
cases forcing me to concentrate on strings for i18n.
There is a stylistic issue here. I use _("hello"), adding three
characters to each localizable string, while you will most probably
use _( "hello" ), adding five characters per localizable string.
Yet, it has the advantage of being shorter than error_string_out,
and be done at the right level.
By merely defining _(String) to be (String), you just turn off
localization in standard flex, with not a single nanosecond spoiled
on it. But this will then allow me to produce a quite smaller and
maintainable patch for i18n of flex.
This [error_string_out()] routine could then look up every string
passed it in a translation table that's compiled into flex
like the skel[] array. All that's needed is a public-domain
description of the format of the COUNTRY.tt translation files
and the rest should be easy.
If I clearly understand your idea, you will compile in flex
a French table, and obtain a French speaking binary. You will
produce different binaries for Catalan, Dutch, etc. That is not
practical on big sites having multinational users.
Right now in my things, the setting of LANG in the environment
decides the language to use, and there is a single binary to handle
all things. Further, the evolving GNU locale will soon change its
*.tt file format, and will try to use the current system underlying
localization mechanics, if any good one is found at configure time.
There is no need that you redo all this and throw new solutions to
this whole set of problems. The most workable solution to me looks
like standard flex distribution already have all _() included -- and
that you accept routinely adding _() to new localizable strings when
you are doing flex maintenance, and that a separately distributed
patch attaches flex to GNU locale complexities, without having you
discovering and solving them anew.
Let me know if this is workable (I'm willing to do the work).
Let me take one hour this morning to offer you a patch for _() for
2.5.0.6, hoping that you will accept it. That would be a start. Let
me take care of the remaining organizational problems, synchronizing
with other teams, etc. I already do this for other GNU packages
and will eventually help with most of them (I've accepted that role).
Once we will have had success with i18ned flex for some time, it
would then become easier to convince you to go further for other
aspects (like *producing* i18nable scanners :-).
Let me hope that my pleading for the cause will touch your heart,
somewhere :-). Keep happy!
--
François Pinard ``Happy GNU Year!'' pinard@iro.umontreal.ca
A New Year's gift? Give us Programming Freedom! Write lpf@uunet.uu.net

1, edited,,
Mail-from: From pinard Thu Jan 12 16:44:56 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rSXKA-00007VC; Thu, 12 Jan 95 16:44 EST
Message-Id: <m0rSXKA-00007VC@icule>
Date: Thu, 12 Jan 95 16:44 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501121822.KAA21713@daffy.ee.lbl.gov> (message from Vern Paxson on Thu, 12 Jan 95 10:22:40 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Thu, 12 Jan 95 16:44 EST
From: pinard (Francois Pinard)
To: vern@ee.lbl.gov
In-reply-to: <199501121822.KAA21713@daffy.ee.lbl.gov> (message from Vern Paxson on Thu, 12 Jan 95 10:22:40 PST)
Subject: Re: Internationalization of Flex
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
I'm not sure having to remember to use error_string_out() instead
of fprintf( stderr ... ) is any easier, though.
Not only error strings are being made localizable by the patch I
shipped this morning, but also statistics, version and help, and
some debug output. These are not always error messages, and not
always sent to stderr.
Sometimes in flex, messages are constructed in pieces using %s to
insert parts. Translating at the string level is the right approach
in these situations. I'm not sure error_string_out() would have been
satisfying (but I'm not going to argue, since I have your favor! :-)

1, edited, answered,,
Mail-from: From twinsun.com!eggert Tue Feb 14 05:16:50 1995
Path: bloom-beacon.mit.edu!senator-bedfellow.mit.edu!faqserv
From: mike@vlsivie.tuwien.ac.at
Newsgroups: comp.unix.questions,comp.std.internat,comp.software.international,comp.lang.c,comp.windows.x,comp.std.c,comp.answers,news.answers
Subject: Programming for Internationalization FAQ
Supersedes: <internationalization/programming-faq_787570857@rtfm.mit.edu>
Followup-To: comp.unix.questions,comp.std.internat,comp.software.international,comp.lang.c,comp.windows.x,comp.std.c
Date: 15 Jan 1995 10:26:57 GMT
Organization: TU Wien
Lines: 564
Approved: news-answers-request@MIT.EDU
Expires: 28 Feb 1995 10:26:07 GMT
Message-ID: <internationalization/programming-faq_790165567@rtfm.mit.edu>
NNTP-Posting-Host: bloom-picayune.mit.edu
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Summary: This FAQ discusses writing programs which can handle
different language conventions/character sets/etc.
Applicable to all character set encodings; with particular
emphasis on ISO-8859-1.
X-Last-Updated: 1994/11/15
Originator: faqserv@bloom-picayune.MIT.EDU
Xref: bloom-beacon.mit.edu comp.unix.questions:38263 comp.std.internat:2069 comp.software.international:1289 comp.lang.c:65751 comp.windows.x:34580 comp.std.c:7917 comp.answers:9514 news.answers:33146
*** EOOH ***
From: mike@vlsivie.tuwien.ac.at
Newsgroups: comp.unix.questions,comp.std.internat,comp.software.international,comp.lang.c,comp.windows.x,comp.std.c,comp.answers,news.answers
Subject: Programming for Internationalization FAQ
Supersedes: <internationalization/programming-faq_787570857@rtfm.mit.edu>
Followup-To: comp.unix.questions,comp.std.internat,comp.software.international,comp.lang.c,comp.windows.x,comp.std.c
Date: 15 Jan 1995 10:26:57 GMT
Organization: TU Wien
Approved: news-answers-request@MIT.EDU
Expires: 28 Feb 1995 10:26:07 GMT
NNTP-Posting-Host: bloom-picayune.mit.edu
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Summary: This FAQ discusses writing programs which can handle
different language conventions/character sets/etc.
Applicable to all character set encodings; with particular
emphasis on ISO-8859-1.
X-Last-Updated: 1994/11/15
Originator: faqserv@bloom-picayune.MIT.EDU
Archive-name: internationalization/programming-faq
Posting-Frequency: monthly
Programming for Internationalization
DISCLAIMER: THE AUTHOR MAKES NO WARRANTY OF ANY KIND WITH REGARD TO
THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Note: Most of this was tested on a Sun 10, running SunOS 4.1.* - other
systems might differ slightly
This FAQ discusses topics related to the use of ISO 8859-1 based 8 bit
character sets. It discusses how to program applications which support
the use European (Latin American) national character sets on
UNIX-based systems and standard C environments.
1. Which coding should I use for accented characters?
Use the internationally standardized ISO-8859-1 character set to type
accented characters. This character set contains all characters
necessary to type (West) European languages. This encoding is also the
preferred encoding on the Internet (where accepted - see below).
This character set is also used by AmigaDOS, MS-Windows (Code Page
1252 in Microsoft Speak. This is for Windows versions delivered in
the US, Europe (except Eastern Europe) and Latin America. In Windows
3.1 Microsoft added additional characters in the 0x80-9F range),
VMS (DEC MCS is a draft version of the current ISO 8859-1 character
set standard and differs in only two characters) and (most) UNIX
implementations. MS-DOS uses a different character set and is not
compatible with this character set.
ISO 8859-X actually is a family of character set standards. Basically
all of the information given here is also valid for these standards.
These standards comprise 8859-X:
8859-1 Europe, Latin America
8859-2 Eastern Europe
8859-3 SE Europe/miscellaneous (Esperanto, Maltese, etc.)
8859-4 Scandinavia/Baltic (mostly covered by 8859-1 also)
8859-5 Cyrillic
8859-6 Arabic
8859-7 Greek
8859-8 Hebrew
8859-9 Latin5, same as 8859-1 except for Turkish instead of Icelandic
8859-10 Latin6, for Eskimo/Scandinavian languages
Another nascent standard is UNICODE (ISO 10646). UNICODE is an
extension of ISO 8859-1 (which itself is an extension of US-ASCII) to
16 bit characters. Thus most of the world's languages (including
Japanese, Korean, Chinese...) can be covered.
Most of the information given here is independent of the character
encoding used (e.g. DEC MCS, etc.), but can be applied to any
character set, providing the programming environment has provisions
for this standard.
2. Getting your environment right
To configure your environment such that you can enter, process and
display 8 bit ISO characters, check out the ISO-8859-1 FAQ available
via anonymous ftp from ftp.vlsivie.tuwien.ac.at in
/pub/8bit/FAQ-ISO-8859-1.
3. Setting your environment for ISO-C (ANSI-C) programs
The ISO C Standard (ANSI C Standard 4.4) defines several functions for
supporting localization. To set your international environment on
program startup, you should make one or several calls to the setlocale
functions. Calls to this function will predetermine the reaction of
other localization functions according to your language/country
environment.
To configure a particular aspect of you environment, say the number
representation, you would call
--
setlocale (LC_NUMERIC, "Germany");
--
This call would set all number representation functions defined in the
localization set to return numbers in the format used in Germany. If
the call was successful, setlocale will return the name of your
locale. A NULL return value indicates failure. Note that the
environments are predetermined outside your C program by the system
you run on. (So the example given here is likely to fail on all but a
few systems.) Check the setlocale manual page or your system
documentation to find out about the environments available.
There are several LOCALE types available for different localization
aspects (currency sign, number representation, characters sets). The
value they can take is highly system dependent. Also, it should be up
to the use to define the local environment he needs.
A C program inherits its locale environment variables when it starts up.
This happens automatically. However, these variables do not
automatically control the locale used by the library functions, because
ISO/ANSI C says that all programs start by default in the standard C
locale. To use the locales specified by the environment, The POSIX
standard defines the following call:
-----
setlocale (LC_ALL, "");
-----
Of course, you can only set part of your environment, by calling, say:
----
setlocale (LC_CTYPE, "");
----
This only defines the character classification macros (defined in
ctype.h).
This is a list of local categories:
Effect of Specifying Environment Variable
category the Value Affected
__________________________________________________________
LC_ALL Sets or queries LANG
entire environment
LC_COLLATE Changes or queries LC_COLLATE
collation sequences
LC_CTYPE Changes or queries LC_CTYPE
character classifi-
cation
LC_NUMERIC Changes or queries LC_NUMERIC
number format infor-
mation
LC_TIME Changes or queries LC_TIME
time conversion
parameters
LC_MONETARY Changes or queries LC_MONETARY
monetary information
4. Using the locale information for character classification
If you write a program which supports international use, you should
use the available standardized functions, as only these will be
influenced by the setlocale call. Thus, if you want to convert a
capital letter in c to a lower case letter in l, _don't_ write:
l = c - 'A' + 'a';
While this will work for characters in the US-ASCII character set, it
will not work with many other character sets. The following,
standard-conformant code will:
#include <ctype.h>
....
l = tolower(c);
Also note that the second code may actually be faster than even the
full "C" locale functionality (for most implementations), as it
replaces a complex expression ( (c<='Z' && c>='A')? c-'A'+a:c; )by a simple
table lookup!
Note that this ISO standard is independent of the character set
encoding used!
5. Language independent messages
There are two competing standards for language independent messages:
one by X/Open, and another one by POSIX. The X/Open standard seems to
have found a larger following as it has been around for a longer time.
5.1 X/Open language independent messages
X/Open defines a method for providing language-independent messages.
Error messages are kept in a catalog which is opened upon program
start with a locale specification. Then the message number and a set
specification are used to index the message catalog. A default fourth
argument is specified which will be printed if a particular message
cannot be found in the catalog.
Here is the world-famous C program using the language-independent
X/Open message standard:
--------------------------------------------------------------------------
#include <stdio.h>
#include <nl_types.h>
#define SET 1
#define MSG_HELLO 1
nl_catd catfd;
int main (int argc, char **argv) {
/* Open the message catalog. We use the basename of the program
* as the catalog name. Of course, several programs can also
* share a common catalog.
*/
catfd = catopen (basename (argv [0]), NL_CAT_LOCALE);
/* catgets returns message MSG_HELLO from set SET from the
* message catalog catfd. If catfd does not refer to a message
* catalog, or the requested message cannot be found, the
* catalog, or the requested message cannot be found, the
* fourth argument is returned.
*/
printf (catgets (catfd, SET, MSG_HELLO, "hello, world\n"));
catclose (catfd);
return 0;
}
-------------------------------------------------------------------------
For catopen, specify the constant NL_CAT_LOCALE to open the message
catalog for the locale set for the LC_MESSAGES variable; using
NL_CAT_LOCALE conforms to the XPG4 standard. You can specify 0 (zero)
for compatibility with XPG3; when oflag is set to zero, the locale set
for the LANG variable determines the message catalog locale.
Several utilities exist for generating message catalogs and for
upgrading programs which contain hard-wired strings:
* gencat is used to generate message catalogs
[All other programs are OS-specific:]
* Ultrix and OSF support the extract program which will extract string
constants from the C source code, and has an option to replace these
strings with calls to catgets.
* HP/UX has a similar utility called findmsg.
* Under OSF, message catalogs may be listed with the dspcat utility.
* HP/UX calls a similar utility dumpmsg.
5.2 Sun/XView
Sun implements a different set of functions functions to support i18n
of messages (the source is available with the XView code):
You can either use:
-----------------------------------------------
main()
{
// get the message catalog named "helloprogram"
// for the hello world program
textdomain("helloprogram");
// get the translation for the "Hello, world\n" string
printf(gettext("Hello, world\n"));
}
-----------------------------------------------
or you can roll all in one and write
-----------------------------------------------
main()
{
// get the translation for the "Hello, world\n" string
// from the message catalog "helloprogram"
printf(dgettext("helloprogram","Hello, world\n"));
}
-----------------------------------------------
The LC_MESSAGES locale category setting determines the locale of
strings that gettext() returns. The message catalogs are generated
with either the installtxt or gencat commands.
No opening of files as in the old SYS V and X/Open routines, and no
handling of message numbers that you must have in a database to
administer.
5.3 POSIX language independent messages
Neither of the previous two mechanisms is in the POSIX standard.
There was much disagreement in the POSIX.1 committee about using the
gettext routines vs. catgets (XPG). In the end the committee couldn't
agree on anything, so no messaging system was included as part of the
standard. I believe the informative annex of the standard includes the
XPG3 messaging interfaces, "...as an example of a messaging system
that has been implemented..."
They were very careful not to say anywhere that you should use one set
of interfaces over the other.
6. Other localization aspects in ISO/ANSI C (and POSIX environments)
For a more thorough discussion of localization and
internationalization (aka. i18n), check your system vendors
documentation, and the C library manual which comes with the FSF's
glibc library (Chapter 19, 'Locales and Internationalization').
7. Internationalization under X11
7.1 Output
To output text encoded with ISO 8859-1 under X11, simply invoke the X
display routines with 8 bit characters as you would use them with
7-bit ASCII. You should however choose a font which contains bitmaps
for these characters. You can use the xfd utility to display a font
to verify that it contains a full set of characters.
7.2 Input
If you use a national keyboard (that is a keyboard, which has distinct
keys for your countries special characters), inputting accents is
straight forward and you'll get the corresponding characters by using
the X11 input functions.
Sometimes it may be necessary to input characters for which there are
no keys on your keyboard (e.g. if you want to enter the German 'ß'
from a French keyboard).
X11R5 and X11R6 both have extensive support for i18n, but due to a
variety of factors the R5 i18n was not well understood or widely
used. Many people resorted to a work-around and might have been
disappointed when R6 did not include this misfeature. It is important
to recognize that the correct use of R5 and R6 i18n features will
ensure maximum portability of your program.
Footnote: Amongst other reasons, the X Consortium decision not to add
support for input methods to the Xaw Athena widget contributes to this
situation. Many users (and much of the PD software) live in an
Xaw-only world, so they will not be able to benefit from this i18n
effort.
X11 R5 and R6 support input methods for entering non-ASCII, and
displaying and configuring text, menus etc. for a wide variety of
languages. This input method has to be installed by the application
by calls to the Xlib library (or an Xt toolkit call).
[Under X11R5, some X servers (notably the Xsun server) will let you
enter ISO characters by supplying a built-in escape mechanism, if no
keys for these characters are on your keyboard, and will pass along
and display ISO 8859-1. This hack obviated the need to install an
input method, but was less flexible.]
If you are using a toolkit, it is quite simple to support localization
of you X11 code:
If you're using a toolkit -- Xt and a widget set like Motif or R6 Xaw --
you need only add a single line of code to your source. Before any other
calls to Xt, add a call to XtSetLanguageProc, e.g.:
int main (int argc, char** argv)
{
...
XtSetLanguageProc (NULL, NULL, NULL);
top = XtAppInitialize ( ... );
...
}
The LANG and LC_xxx environment variables (see section 3) will then be
used to determine the 'input method' for this X application. This
input method is responsible for managing COMPOSE character sequences
or any other input mechanism for this particular implementation. Also
see section 9 of ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/FAQ-ISO-8859-1,
the FAQ on ISO 8859-1 usage.
7.3 Toolkits, Widgets, and I18N
The preferred way of inputing national characters when a national
keyboard is not available is one/several input methods. These input
methods will then support various kinds of compose sequences to enter
national characters.
The environment variables LANG and/or LC_xxx select the language for
the Input Method (IM), but if several input methods exist, the
environment variable XMODIFIERS can be used to select a specific input
method.
Xlib supports IMs
Xt supports IMs
Xaw does not support IMs
Thus, applications written with Xlib or Xt can support IMs (see
section 7.2 on how to install input methods under Xt), but Xaw based
applications will not.
Motif 1.2 or greater automatically uses the R5/R6 input method APIs.
Thus applications using Motif 1.2+ can be made to support IMs.
Several Motif 1.[01] versions also had similar functionality added to
them by the respective vendors, but these extensions are
vendor-specific and not portable.
FOOTNOTE: If you can have comments/corrections for this section and on
OpenLook, please let me know.
7.4 I18N under X11R6, General Information
Background information from the X11R6 announcement:
Internationalization (also known as I18N, there being 18 letters between the
i and n) of the X Window System, which was originally introduced in Release
5, has been significantly improved in R6. The R6 I18N architecture follows
that in R5, being based on the locale model used in ANSI C and POSIX, with
most of the I18N capability provided by Xlib. R5 introduced a fundamental
framework for internationalized input and output. It could enable basic
localization for left-to-right, non-context sensitive, 8-bit or multi-byte
codeset languages and cultural conventions. However, it did not deal with
all possible languages and cultural conventions. R6 also does not cover all
possible languages and cultural conventions, but R6 contains substantial new
Xlib interfaces to support I18N enhancements, in order to enable additional
language support and more practical localization.
The additional support is mainly in the area of text display. In order to
support multi-byte encodings, the concept of a FontSet was introduced in R5.
In R6, Xlib enhances this concept to a more generalized notion of output
methods and output contexts. Just as input methods and input contexts sup-
port complex text input, output methods and output contexts support complex
and more intelligent text display, dealing not only with multiple fonts but
also with context dependencies. The result is a general framework to enable
bi-directional text and context sensitive text display.
The description of the X11R6 internationalization framework is
available via anonymous ftp from ftp.x.org in
/pub/R6untarred/xc/doc/specs/i18n.
8. Supporting I18N Network Protocols
8.1 MIME
MIME is specified in RFC 1521 and RFC 1522 which are available from
ftp.uu.net. There is also a MIME FAQ which is available via anonymous
ftp from ftp.ics.uci.edu in /mh/contrib/multimedia/mime-faq.txt.gz.
(This file is in compressed format. You will need the GNU gunzip
program to decompress this file.)
If you want to write applications which support the MIME protocol,
there are several libraries/tools which can ease your task:
8.1.1 metamail
Source for supporting MIME (the `metamail' package) in various mail
readers is available via anonymous ftp from thumper.bellcore.com in
/pub/nsb. This distribution consists of several utilities, which can
be called by MIME applications to handle MIME types.
8.1.2 MIMElt
A "lightweight" MIME library available via anon ftp from
oslonett.no:Software/MsDos/Comm/Offline/mimeltXX.zip
It is source code (ANSI C) packaged as a library to facilitate
construction of a limited MIME facility (limited == handling only
character-set aspects of MIME, not the multimedia-aspects). It
includes hooks to recode character sets into whatever system you are
running off (e.g. if you read mail on a MsDos platform using CP-850,
MIMElite may be set up so that QUOTED-PRINTABLE ISO Latin 1 is recoded
into CP-850 for reading and saving to file).
It's main use is to provide programmers of so-called "off-line
readers" (used by user's who access Internet mail through dial-up
service providers) with the tools needed to include proper support for
QUOTED-PRINTABLE encoding in their product.
The archive also contain a couple of sample applications that
demonstrates how the library may be used. UNMIME is a stand-alone
utility to decode MIME-encoded messages (e.g. it works like UUDECODE
for binary files with BASE64 encoding), SENDMIME is a simple utility
to send MIME-encoded messages if your service provider doesn't have
PINE or similar tools.
The current version (2.1) is limited to character set issues. I am
about to release version 2.2, which will support additional
Content-Types (e.g. "application/octet-stream").
9. Programming in Prolog
SICStus Prolog accepts ISO characters as part of atoms, so you can
even define goal names containing accented characters. I/O of 8 bit
characters is (obviously) also supported.
10. ISO 8859-1 on non-UNIX systems
10.1 MS-DOS
MS-DOS generally uses its own characters set. There are several code
pages (one with the same symbols as ISO 8859-1, albeit at different
character code positions, which can lead to problems with the transfer
of data).
If interoperability without data conversion is your goal, you can
reconfigure your MS-DOS PC to use an ISO-8859-1 code page. Check out
the anonymous ftp archive ftp.uni-erlangen.de, which contains data on
how to do this (and other ISO-related stuff) in /pub/doc/ISO/charsets.
The README file contains an index of the files you need.
Most (all?) C compilers/libraries for MS-DOS have only minimal support
for the ANSI/POSIX locale mechanism. The setlocale() and localeconv()
calls (and stuff like strxfrm()) are generally hardwired.
10.2 MS Windows
MS-Windows (using code page 1252) normally uses the first 256
characters of Unicode, which is (for all practical purposes)
equivalent to ISO 8859-1. Thus, data representation and conversion
for interoperability with other ISO 8859-1 compliant systems is not an
issue.
It seems that C libraries for MS Windows do not support the ANSI/POSIX
locale mechanism. (If you have any experiences with that, please let
me know.) There is a POSIX-like mechanism in some Microsoft platform
services, but none in the compilers from any vendor.
10.3 OS/2
Text mode OS/2 programs generally suffer the same limitations as do
MS-DOS programs, because the display hardware is the same.
Presentation Manager OS/2 programs using code page 1004 will order
the font glyphs in the same sequence as ISO 8859-1 (although of
course whether the glyphs will actually look anything like those
from ISO 8859-1 depends entirely from the font).
The IBM CSet++ compiler supports full internationalization, with
several predefined locales.
The Borland C++ compiler supports only the "C" locale.
The Watcom C++ compiler supports only the "C" locale.
The Metaware High C++ compiler supports only the "C" locale. It
does, however, also support UNICODE, providing UNICODE character
types and UNICODE versions of the appropriate parts of the standard
library (including I/O).
10.4 Apple Macintosh
MacIntoshes have their own non-standard character encodings;
the first 128 characters are US-ASCII but the remaining characters are
non-standard.
I do not know whether C libraries (for which compilers?) for the
MacIntosh support the ANSI/POSIX locale mechanism. If you have any
experiences with that, please let me know.
10.5 Amiga
The AmigaOS uses ISO-8859-1. As of OS version 2.1, Amiga-specific
means of localization are available.
11. Home location of this document
The most recent version of this document is available via anonymous
ftp from ftp.vlsivie.tuwien.ac.at under the file name
/pub/8bit/ISO-programming.
-----------------
Copyright © 1994 Michael Gschwind (mike@vlsivie.tuwien.ac.at)
This document may be copied for non-commercial purposes, provided this
copyright notice appears. Publication in any other form requires the
author's consent.
Dieses Dokument darf unter Angabe dieser urheberrechtlichen
Bestimmungen zum Zwecke der nicht-kommerziellen Nutzung beliebig
vervielfältigt werden. Die Publikation in jeglicher anderer Form
erfordert die Zustimmung des Autors.
Michael Gschwind, Institut f. Technische Informatik, TU Wien
snail: Treitlstrasse 3-182-2 || A-1040 Wien || Austria
email: mike@vlsivie.tuwien.ac.at note: real time != real fast
phone: +(43)(1)58801 8156 fax: +(43)(1)586 9697

1, edited, resent,,
Mail-from: From li.org!owner-li-international Fri Jan 20 08:56:04 1995
Return-Path: <li.org!owner-li-international>
Received: by icule (Smail3.1.28.1 #1)
id m0rVJon-00009Da; Fri, 20 Jan 95 08:56 EST
Sender: li.org!owner-li-international
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id RAA25970 for <icule!pinard>; Mon, 16 Jan 1995 17:34:02 -0500
Received: from saguenay.IRO.UMontreal.CA (root@saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id RAA14270 for <pinard@lagrande.IRO.UMontreal.CA>; Mon, 16 Jan 1995 17:33:53 -0500
Received: from uniwa.uwa.edu.au (root@uniwa.uwa.edu.au [130.95.128.1]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id RAA07348 for <pinard@iro.umontreal.ca>; Mon, 16 Jan 1995 17:33:41 -0500
Received: from orac.aust.li.org (orac.iinet.com.au [203.0.178.134]) by uniwa.uwa.edu.au (8.6.9/8.6.9) with ESMTP id GAA22040; Tue, 17 Jan 1995 06:29:21 +0800
Received: (from majordom@localhost) by orac.aust.li.org (8.6.9/8.6.9) id FAA01118 for li-international-list; Tue, 17 Jan 1995 05:34:39 +0800
Received: from alcor (alcor.twinsun.com [198.147.65.1]) by orac.aust.li.org (8.6.9/8.6.9) with ESMTP id FAA01112 for <li-international@li.org>; Tue, 17 Jan 1995 05:34:28 +0800
Received: from twinsun.com (twinsun.twinsun.com [192.54.239.2]) by alcor (8.6.5/8.6.5) with SMTP id NAA04793 for <li-international@li.org>; Mon, 16 Jan 1995 13:06:52 -0800
Received: from spot.twinsun.com by twinsun.com (4.1/SMI-4.1)
id AA06664; Mon, 16 Jan 95 13:33:30 PST
Received: by spot.twinsun.com (4.1/SMI-4.1)
id AA04256; Mon, 16 Jan 95 13:33:30 PST
Old-From: eggert@twinsun.com (Paul Eggert)
Message-Id: <9501162133.AA04256@spot.twinsun.com>
Date: 16 Jan 1995 13:33:28 -0800
To: li-international@li.org
Subject: ISO Normative Addendum 1 and its effect on the C library
From: International List <li-international@li.org>
Sender: owner-li-international@li.org
Precedence: bulk
Reply-To: LI-international@li.org
*** EOOH ***
From: eggert@twinsun.com (Paul Eggert)
Date: 16 Jan 1995 13:33:28 -0800
To: li-international@li.org
Subject: ISO Normative Addendum 1 and its effect on the C library
Reply-To: LI-international@li.org
Normative Addendum 1 (NA1) to the ISO C standard was approved last year,
and I recently ran across a nice summary written by Clive Feather.
Please see <http://sf.www.lysator.liu.se/c/nal.html> for this;
Most of the changes required by NA1 are to the C library's wide
character and multibyte string support. I don't see these changes
mentioned in the latest glibc snapshot. I asked Roland McGrath,
glibc's developer, about this, and he replied:
Date: Mon, 16 Jan 95 15:53:26 -0500
From: Roland McGrath <roland@gnu.ai.mit.edu>
I think if you make the specifications available to the Linux community,
the new library functions will get written and contributed to glibc.
Try the mailing list li-international@li.org.
So I'm sending this message to li-international. I can forward a copy
of the NA1 summary to whoever needs it; just ask.
Two of the NA1 changes (__STDC_VERSION__ and digraphs) require changes
to GCC itself; I've volunteered to do this. One change (namely
<iso646.h>) can be done either in GCC or in libc, though if GCC does
digraphs it may make more sense for it to do <iso646.h> as well.
But the other changes belong to the C library proper.

1,,
Mail-from: From twinsun.com!eggert Tue Feb 14 05:16:49 1995
Return-Path: <twinsun.com!eggert>
Received: by icule (Smail3.1.28.1 #1)
id m0reKJK-00009mC; Tue, 14 Feb 95 05:16 EST
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id CAA00816 for <icule!pinard>; Tue, 14 Feb 1995 02:16:27 -0500
Received: from saguenay.IRO.UMontreal.CA (root@saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id CAA02807 for <pinard@lagrande.IRO.UMontreal.CA>; Tue, 14 Feb 1995 02:16:20 -0500
Received: from alcor.twinsun.com (alcor.twinsun.com [198.147.65.1]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id CAA29451 for <pinard@iro.umontreal.ca>; Tue, 14 Feb 1995 02:16:16 -0500
Received: from twinsun.com (twinsun.twinsun.com [192.54.239.2]) by alcor.twinsun.com (8.6.5/8.6.5) with SMTP id WAA03362 for <pinard@iro.umontreal.ca>; Mon, 13 Feb 1995 22:44:50 -0800
Received: from spot.twinsun.com by twinsun.com (4.1/SMI-4.1)
id AA08130; Mon, 13 Feb 95 23:15:06 PST
Received: by spot.twinsun.com (4.1/SMI-4.1)
id AA05763; Mon, 13 Feb 95 23:15:05 PST
From: eggert@twinsun.com (Paul Eggert)
Message-Id: <9502140715.AA05763@spot.twinsun.com>
Date: 13 Feb 1995 23:15:04 -0800
To: pinard@iro.umontreal.ca
In-Reply-To: <m0rdrDE-00009QC@icule> (pinard@iro.umontreal.ca)
Subject: Re: glocale and Uniforum gettext simplicity
*** EOOH ***
From: eggert@twinsun.com (Paul Eggert)
Date: 13 Feb 1995 23:15:04 -0800
To: pinard@iro.umontreal.ca
In-Reply-To: <m0rdrDE-00009QC@icule> (pinard@iro.umontreal.ca)
Subject: Re: glocale and Uniforum gettext simplicity
Date: Sun, 12 Feb 95 22:12 EST
From: pinard@iro.umontreal.ca (Francois Pinard)
Hello, Paul.
For more on this topic please see the Programming
for Internationalization FAQ (Message-ID:
<internationalization/programming-faq_784901999@rtfm.mit.edu>)
which I can forward to you if you like.
Would you do this, please?
Sure, the latest revision be in my next message. For future
reference, the coordinates are
<ftp://rtfm.mit.edu/pub/usenet-by-group/comp.answers/internationalization/programming-faq>.
Alas, I haven't had time to work on this much lately -- beset with hardware
problems at home and no time to fix them....

1, edited,,
Mail-from: From pinard Tue Mar 21 12:53:53 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0rr87q-00009TC; Tue, 21 Mar 95 12:53 EST
Message-Id: <m0rr87q-00009TC@icule>
Date: Tue, 21 Mar 95 12:53 EST
From: pinard (François Pinard)
To: meyering@comco.com
CC: drepper@ipd.info.uni-karlsruhe.de
In-reply-to: <199503211712.LAA25472@idefix.comco.com> (message from Jim Meyering on Tue, 21 Mar 1995 11:12:49 -0600)
Subject: Re: international fileutils
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Tue, 21 Mar 95 12:53 EST
From: pinard (François Pinard)
To: meyering@comco.com
CC: drepper@ipd.info.uni-karlsruhe.de
In-reply-to: <199503211712.LAA25472@idefix.comco.com> (message from Jim Meyering on Tue, 21 Mar 1995 11:12:49 -0600)
Subject: Re: international fileutils
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
There are three things to do for each package:
* Adjust Autoconf and Makefiles
* Mark all localizable strings in sources and doing other adjustments
* Translating messages for French (and maybe, let's be fair, German :-).

1, edited,,
Mail-from: From pinard Sun Apr 23 13:26:30 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s35QR-00008FC; Sun, 23 Apr 95 13:26 EDT
Message-Id: <m0s35QR-00008FC@icule>
Date: Sun, 23 Apr 95 13:26 EDT
From: pinard (François Pinard)
To: Jim Meyering <meyering@comco.com>,
Ulrich Drepper <drepper@gnu.ai.mit.edu>,
Roland McGrath <roland@gnu.ai.mit.edu>,
Paul Eggert <eggert@twinsun.com>
Subject: GNU locale and Ulrich's effort
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Sun, 23 Apr 95 13:26 EDT
From: pinard (François Pinard)
To: Jim Meyering <meyering@comco.com>,
Ulrich Drepper <drepper@gnu.ai.mit.edu>,
Roland McGrath <roland@gnu.ai.mit.edu>,
Paul Eggert <eggert@twinsun.com>
Subject: GNU locale and Ulrich's effort
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
I'm trying to get started the overall effort for GNU localization,
by offering translators GNU packages to translate, and the means
to do so. I also do not want to spoil the energies being offered.
Many pieces of the puzzle are in place already and, as usual, I
contemplate them all trying to see what is missing, and working
towards the complete picture.
Surely to me, GNU locale (glocale, as a package) has to provide a
fairly complete set of self-contained tools for helping package
maintainers to internationalize their product, and also for
localizers to translate message catalogs. Further, being itself
internationalized, it should be a very carefully crafted example
for maintainers, about how one might set his/her own package to be
easily installed while localization is effective, and portably!

1,,
Mail-from: From pinard Mon May 1 22:16:31 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s67Vl-00008NC; Mon, 1 May 95 22:16 EDT
Message-Id: <m0s67Vl-00008NC@icule>
Date: Mon, 1 May 95 22:16 EDT
From: pinard (=?ISO-8859-1?Q?Fran=E7ois_Pinard?=)
To: gnu@prep.ai.mit.edu
CC: rms@gnu.ai.mit.edu
In-reply-to: <9505020044.AA12891@pizza> (gnu@ai.mit.edu)
Subject: Re: [pinard@iro.umontreal.ca: Internationalizing GNU: the maintainer side]
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Mon, 1 May 95 22:16 EDT
From: pinard (François Pinard)
To: gnu@prep.ai.mit.edu
CC: rms@gnu.ai.mit.edu
In-reply-to: <9505020044.AA12891@pizza> (gnu@ai.mit.edu)
Subject: Re: [pinard@iro.umontreal.ca: Internationalizing GNU: the maintainer side]
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
It contains some statements that are harsh and, I believe,
not true. The practice of using gettext to mark strings is
*not* just "for the time being."
Fran\cois: Could you work with rms to update the GNU coding
standards to describe what GNUers needs to be do to make their
GNU programs use GNU Locale.
I may try, but do not know exactly how to proceed. I also confess
I've rewritten this paragraph twenty times, to merely censor myself.
We can then post that section of the GNU coding standards, so
all the GNUers know what to do.
If GNU ever publishes utilities for Native Language Support, their
own documentation should explain how to proceed, and maintainers
should find in there the information they need about what to do.
GNU standards might state the general principle, something like:
``GNU programs and packages should be opened to Native Language
Support (NLS) and, in particular, be able to write their messages
translated into native languages, as selected at run time by
environment variables''.
--
François Pinard ``Vivement GNU!'' <pinard@iro.umontreal.ca>
Email lpf@uunet.uu.net for info about the League for Programming Freedom.

1,,
Mail-from: From IRO.UMontreal.CA!pinard Tue May 2 05:16:32 1995
Return-Path: <IRO.UMontreal.CA!pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s6E4E-0000CaC; Tue, 2 May 95 05:16 EDT
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id AAA19507 for <icule!pinard>; Tue, 2 May 1995 00:02:38 -0400
Received: (from pinard@localhost) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) id AAA00659 for icule!pinard; Tue, 2 May 1995 00:02:37 -0400
Received: from saguenay.IRO.UMontreal.CA (saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id AAA00657 for <pinard@lagrande.IRO.UMontreal.CA>; Tue, 2 May 1995 00:02:34 -0400
Received: from mole.gnu.ai.mit.edu (mole.gnu.ai.mit.edu [128.52.46.33]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id AAA08792 for <pinard@iro.umontreal.ca>; Tue, 2 May 1995 00:02:33 -0400
Received: by mole.gnu.ai.mit.edu (8.6.12/8.6.12GNU) id AAA07143; Tue, 2 May 1995 00:02:31 -0400
Date: Tue, 2 May 1995 00:02:31 -0400
Message-Id: <199505020402.AAA07143@mole.gnu.ai.mit.edu>
From: Richard Stallman <rms@gnu.ai.mit.edu>
To: pinard@IRO.UMontreal.CA
In-reply-to: <m0s67Vl-00008NC@icule> (pinard@iro.umontreal.ca)
Subject: Re: [pinard@iro.umontreal.ca: Internationalizing GNU: the maintainer side]
*** EOOH ***
Date: Tue, 2 May 1995 00:02:31 -0400
From: Richard Stallman <rms@gnu.ai.mit.edu>
To: pinard@IRO.UMontreal.CA
In-reply-to: <m0s67Vl-00008NC@icule> (pinard@iro.umontreal.ca)
Subject: Re: [pinard@iro.umontreal.ca: Internationalizing GNU: the maintainer side]
``GNU programs and packages should be opened to Native Language
Support (NLS) and, in particular, be able to write their messages
translated into native languages, as selected at run time by
environment variables''.
I think that is too vague to be useful. I'd rather put in some
variant of what you sent before. But I don't have time right now
to fix it.

1, answered, edited,,
Mail-from: From IRO.UMontreal.CA!pinard Wed May 3 00:19:10 1995
Return-Path: <IRO.UMontreal.CA!pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s6Vty-0000CSC; Wed, 3 May 95 00:19 EDT
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id XAA19717 for <icule!pinard>; Tue, 2 May 1995 23:51:54 -0400
Received: (from pinard@localhost) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) id XAA20985 for icule!pinard; Tue, 2 May 1995 23:51:52 -0400
Received: from saguenay.IRO.UMontreal.CA (saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id XAA20983 for <pinard@lagrande.IRO.UMontreal.CA>; Tue, 2 May 1995 23:51:49 -0400
Received: from nz11.rz.uni-karlsruhe.de (nz11.rz.uni-karlsruhe.de [129.13.64.7]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id XAA12985 for <pinard@iro.umontreal.ca>; Tue, 2 May 1995 23:51:15 -0400
Received: from ipd.info.uni-karlsruhe.de (actually i44ms.info.uni-karlsruhe.de)
by nz11.rz.uni-karlsruhe.de with SMTP (PP);
Wed, 3 May 1995 03:54:26 +0200
Received: from i44pc2.info.uni-karlsruhe.de (i44pc2.info.uni-karlsruhe.de [129.13.171.31])
by ipd.info.uni-karlsruhe.de (8.6.4/8.6.4) with SMTP id DAA00768;
Wed, 3 May 1995 03:57:08 +0200
Message-Id: <199505030157.DAA00768@ipd.info.uni-karlsruhe.de>
To: "ois \"Pinard)\""@rz.uni-karlsruhe.de, meyering@comco.com (Jim Meyering),
eggert@twinsun.com (Paul Eggert),
roland@gnu.ai.mit.edu (Roland McGrath)
Original-To: pinard@iro.umontreal.ca (François Pinard),
meyering@comco.com (Jim Meyering),
eggert@twinsun.com (Paul Eggert),
roland@gnu.ai.mit.edu (Roland McGrath)
PP-Warning: Parse error in original version of preceding To line
Subject: nlsutils-0.4.2
Date: Wed, 03 May 1995 03:56:24 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
*** EOOH ***
To: "ois \"Pinard)\""@rz.uni-karlsruhe.de, meyering@comco.com (Jim Meyering),
eggert@twinsun.com (Paul Eggert),
roland@gnu.ai.mit.edu (Roland McGrath)
Original-To: pinard@iro.umontreal.ca (François Pinard),
meyering@comco.com (Jim Meyering),
eggert@twinsun.com (Paul Eggert),
roland@gnu.ai.mit.edu (Roland McGrath)
PP-Warning: Parse error in original version of preceding To line
Subject: nlsutils-0.4.2
Date: Wed, 03 May 1995 03:56:24 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
I tried hard to limit all external things in the libgintl directory.
You have to copy this, some variation of my code in aclocal.m4
and acconfig.h. This should be all.

1, answered,,
Mail-from: From IRO.UMontreal.CA!pinard Thu May 4 08:22:15 1995
Return-Path: <IRO.UMontreal.CA!pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s6zv4-0000CSC; Thu, 4 May 95 08:22 EDT
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id HAA19349 for <icule!pinard>; Thu, 4 May 1995 07:48:32 -0400
Received: (from pinard@localhost) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) id HAA24822 for icule!pinard; Thu, 4 May 1995 07:47:28 -0400
Received: from saguenay.IRO.UMontreal.CA (saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id HAA24816 for <pinard@lagrande.IRO.UMontreal.CA>; Thu, 4 May 1995 07:47:25 -0400
Received: from nz11.rz.uni-karlsruhe.de (nz11.rz.uni-karlsruhe.de [129.13.64.7]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id HAA17159 for <pinard@iro.umontreal.ca>; Thu, 4 May 1995 07:48:25 -0400
Received: from ipd.info.uni-karlsruhe.de (actually i44ms.info.uni-karlsruhe.de)
by nz11.rz.uni-karlsruhe.de with SMTP (PP);
Thu, 4 May 1995 13:45:17 +0200
Received: from i44pc2.info.uni-karlsruhe.de (i44pc2.info.uni-karlsruhe.de [129.13.171.31])
by ipd.info.uni-karlsruhe.de (8.6.4/8.6.4) with SMTP id NAA06097
for <pinard@iro.umontreal.ca>; Thu, 4 May 1995 13:48:06 +0200
Message-Id: <199505041148.NAA06097@ipd.info.uni-karlsruhe.de>
To: pinard@IRO.UMontreal.CA
Subject: Re: Path to message?
In-Reply-To: Your message of "Thu, 4 May 95 00:45 EDT"
References: <m0s6snG-00008NC@icule>
X-Mailer: Mew beta version 0.89 on Emacs 19.28.1
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-8859-1
Date: Thu, 04 May 1995 13:47:46 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
Content-Transfer-Encoding: 8bit
X-Original-Encoding: quoted-printable
*** EOOH ***
To: pinard@IRO.UMontreal.CA
Subject: Re: Path to message?
In-Reply-To: Your message of "Thu, 4 May 95 00:45 EDT"
References: <m0s6snG-00008NC@icule>
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-8859-1
Date: Thu, 04 May 1995 13:47:46 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
Content-Transfer-Encoding: 8bit
X-Original-Encoding: quoted-printable
From: pinard@iro.umontreal.ca (François Pinard)
Subject: Path to message?
Date: Thu, 4 May 95 00:45 EDT
> Ulrich, always me. I do not understand that xgettext --help writes:
>
> Suchpfad ist: /usr/local/share/nls/src
>
> while /usr/local/share/locale/de/LC_MESSAGES is indeed searched.
> Could we solve this inconsistency?
>
Not quite. /usr/local/share/locale/de/LC_MESSAGES is the path where
the .mo/.cat files will go. The search path (Suchpfad :) represents
the path to additional directories where other .po files can be found.
I thought to use this feature for standard .po files for, say, libiberty
etc. Each package would have to translate it again and again but if
we could install this somewhere and use the -x option to exclude this
strings from the generation.
Perhaps I should use a different description?
-- Uli
________---------------------------------------------------------------
\ / Ulrich Drepper / Univ. at Karlsruhe, Germany / CS Dept. / IPD
L\inux/ email: drepper@gnu.ai.mit.edu smail: Rubensstr. 5
\ / drepper@ipd.info.uni-karlsruhe.de 76149 Karlsruhe
\/1.2.7 ------------------------------------------- Germany --------

1, forwarded, edited,,
Mail-from: From pinard Thu May 4 15:27:13 1995
Return-Path: <pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s76YH-00008NC; Thu, 4 May 95 15:27 EDT
Message-Id: <m0s76YH-00008NC@icule>
Date: Thu, 4 May 95 15:27 EDT
From: pinard (=?ISO-8859-1?Q?Fran=E7ois_Pinard?=)
To: ajc@di.uminho.pt
In-reply-to: <9505041601.AA20254@shiva.di.uminho.pt> (ajc@di.uminho.pt)
Subject: Re: tar is ready for pt
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
*** EOOH ***
Date: Thu, 4 May 95 15:27 EDT
From: pinard (François Pinard)
To: ajc@di.uminho.pt
In-reply-to: <9505041601.AA20254@shiva.di.uminho.pt> (ajc@di.uminho.pt)
Subject: Re: tar is ready for pt
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Even if it is not completely official yet in GNU, the format of
translation file is being revised, and the extension is being
changed from `.tt' to `.po'. This should bring the format closer
to one of the few standards in existence for translation files.
Hopefully, we think that translation files will be more easily
manageable afterwards. We do not want to make a religious issue of
this format selection, as each standard has proponents and opponents.
Please help us by being receptive to the format GNU uses.
Existing `.tt' translation files are being converted to `.po' files
by maintainers. Translators should switch to using the `.po' format,
as soon as possible. This is an easy job. The `.po' translation
file format is quite affordable. Schematically, it looks like:
msgid STRING-TO-TRANSLATE
msgstr TRANSLATED-STRING
msgid STRING-TO-TRANSLATE
msgstr TRANSLATED-STRING
msgid STRING-TO-TRANSLATE
msgstr TRANSLATED-STRING
[...]
`msgid' and `msgstr' are kind of keywords, written at the beginning
of a line. Each STRING-TO-TRANSLATE or TRANSLATED-STRING respects
the C syntax for a character string, including the surrounding
quotes, escape sequences, and usual techniques for writing multi-line
C strings.
Outside strings, white lines and comments may be used freely.
In the schema, white lines preceding the msgid lines are optional.
Comments start at the beginning of a line with `#' and extend until
the end of line. Comments written by translators should have the
initial `#' immediately followed by some white space. If the `#'
is not immediately followed by white space, this comment is most
likely generated and managed by specialized GNU tools.
There is a conventional, uniform way of presenting a `.po' file, but
a description of this format is not yet available. It will be all
easy to make suggested adjustements at a later time, so do not worry
right now about precise conventions. Further, there are normalizing
tools automating conformance to a great extent, to be published soon.
And another question: what happens when new versions of the
program are released, with new messages?
Usually, most GNU packages are pretested before being released.
All teams of translators are made aware of localizable prereleases.
A special tool regenerates a `.po' file with obsolescent strings
commented out, and new strings put in evidence.
Further, for those of us using GNU Emacs, a special editing mode is
being written for `.po' files, in which mode translators is able
to navigate easily in the `.po' file, find untranslated entries,
examine at will the context of these strings in the program sources,
and also observe other translations already made in other languages,
for the string being translated.
Teams members should share their translations and resolve linguistic
or terminological issues. When they reach something satisfying,
the team should formally submit the translation to the package
maintainer for the final release. The precise formalities are not
organized yet, and there are many details to clear up. Some legal
aspects also have to be addressed, this is under study right now.
Special means should be used for transiting translation files
over email. The simplest way is using GNU shar in default mode,
or else, uuencoding the `.po' file prior to mailing.
--
François Pinard ``Vivement GNU!'' <pinard@iro.umontreal.ca>
Email lpf@uunet.uu.net for info about the League for Programming Freedom.

1, edited,,
Mail-from: From IRO.UMontreal.CA!pinard Thu Apr 20 16:54:03 1995
Return-Path: <IRO.UMontreal.CA!pinard>
Received: by icule (Smail3.1.28.1 #1)
id m0s23Ea-0000CxC; Thu, 20 Apr 95 16:53 EDT
Received: from lagrande.iro.umontreal.ca (lagrande.IRO.UMontreal.CA [132.204.32.32]) by iros1.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id KAA12085 for <icule!pinard>; Thu, 20 Apr 1995 10:13:02 -0400
Received: (from pinard@localhost) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) id KAA08298 for icule!pinard; Thu, 20 Apr 1995 10:12:34 -0400
Received: from saguenay.IRO.UMontreal.CA (saguenay32.IRO.UMontreal.CA [132.204.32.54]) by lagrande.iro.umontreal.ca (8.6.9/8.6.9) with ESMTP id KAA08254 for <pinard@lagrande.IRO.UMontreal.CA>; Thu, 20 Apr 1995 10:10:49 -0400
Received: from nz11.rz.uni-karlsruhe.de (nz11.rz.uni-karlsruhe.de [129.13.64.7]) by saguenay.IRO.UMontreal.CA (8.6.9/8.6.9) with ESMTP id KAA20778 for <pinard@iro.umontreal.ca>; Thu, 20 Apr 1995 10:10:25 -0400
Received: from ipd.info.uni-karlsruhe.de (actually i44ms.info.uni-karlsruhe.de)
by nz11.rz.uni-karlsruhe.de with SMTP (PP);
Thu, 20 Apr 1995 16:05:34 +0200
Received: from i44pc2.info.uni-karlsruhe.de (i44pc2.info.uni-karlsruhe.de [129.13.171.31])
by ipd.info.uni-karlsruhe.de (8.6.4/8.6.4) with SMTP id QAA28513;
Thu, 20 Apr 1995 16:08:10 +0200
Message-Id: <199504201408.QAA28513@ipd.info.uni-karlsruhe.de>
To: pinard@IRO.UMontreal.CA (Francois Pinard),
meyering@comco.com (Jim Meyering),
roland@gnu.ai.mit.edu (Roland McGrath)
Subject: more points to discuss
X-Mailer: Mew beta version 0.89 on Emacs 19.28.1
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-8859-1
Date: Thu, 20 Apr 1995 16:08:55 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
Content-Transfer-Encoding: 8bit
X-Original-Encoding: quoted-printable
*** EOOH ***
To: pinard@IRO.UMontreal.CA (Francois Pinard),
meyering@comco.com (Jim Meyering),
roland@gnu.ai.mit.edu (Roland McGrath)
Subject: more points to discuss
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-8859-1
Date: Thu, 20 Apr 1995 16:08:55 +0200
From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
Content-Transfer-Encoding: 8bit
X-Original-Encoding: quoted-printable
BTW my implementation will be able to process a lot of strange situation:
- strings in preprocessor macros
- something like gettext ("jkh" "jkhlk")
or even
- gettext ("jkkjh\
sdfsdf")

1, edited,,
Received: from titan.comco.com (root@titan.comco.com [198.214.63.11]) by idefix.comco.com (8.6.9/8.6.9) with ESMTP id QAA16073 for <meyering@idefix.comco.com>; Sat, 19 Nov 1994 16:03:48 -0600
Received: from alcor.twinsun.com (alcor.twinsun.com [198.147.65.1]) by titan.comco.com (8.6.9/8.6.9) with ESMTP id QAA03006 for <meyering@comco.com>; Sat, 19 Nov 1994 16:04:38 -0600
Received: from twinsun.com (twinsun.twinsun.com [192.54.239.2]) by alcor.twinsun.com (8.6.5/8.6.5) with SMTP id NAA19013; Sat, 19 Nov 1994 13:55:18 -0800
Received: from spot.twinsun.com by twinsun.com (4.1/SMI-4.1)
id AA29144; Sat, 19 Nov 94 14:01:01 PST
Received: by spot.twinsun.com (4.1/SMI-4.1)
id AA02990; Sat, 19 Nov 94 14:01:00 PST
From: eggert@twinsun.com (Paul Eggert)
Message-Id: <9411192201.AA02990@spot.twinsun.com>
Date: 19 Nov 1994 14:00:59 -0800
To: rms@gnu.ai.mit.edu (Richard Stallman)
Cc: meyering@comco.com, pdcruze@orac.iinet.com.au
Subject: Re: glocale and diffutils
Status: RO
*** EOOH ***
From: eggert@twinsun.com (Paul Eggert)
Date: 19 Nov 1994 14:00:59 -0800
To: rms@gnu.ai.mit.edu (Richard Stallman)
Cc: meyering@comco.com, pdcruze@orac.iinet.com.au
Subject: Re: glocale and diffutils
The Uniforum proposal addresses this problem by partitioning message
catalogs into ``textdomains''. Each textdomain can be maintained
separately. Programs can share textdomains. Messages in different
textdomains cannot clash. With diffutils, for example, I would expect
one textdomain for diffutils programs and another for libc. The main
module would use the default textdomain and invoke `gettext ("No
newline at end of file")' just as diffutils-2.7.1 does; libc modules
would use a system textdomain and would invoke something like
`dgettext ("SYS_libc", "No such file or directory")'.