summaryrefslogtreecommitdiffstats
path: root/contrib/nvi/catalog/README
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/nvi/catalog/README')
-rw-r--r--contrib/nvi/catalog/README125
1 files changed, 43 insertions, 82 deletions
diff --git a/contrib/nvi/catalog/README b/contrib/nvi/catalog/README
index 15a7063..42a728a 100644
--- a/contrib/nvi/catalog/README
+++ b/contrib/nvi/catalog/README
@@ -1,15 +1,9 @@
-# @(#)README 8.4 (Berkeley) 11/22/94
+# $Id: README,v 9.0 2012/10/19 17:06:15 zy Exp $
Generally, all non-system error and informational messages in nvi are
catalog messages, i.e. they can be tailored to a specific langauge.
-Command strings, usage strings, system errors and other "known text"
-are not. It would certainly be possible to internationalize all the
-text strings in nvi, but it's unclear that it's the right thing to do.
-
-First, there's no portable way to do message catalogs. The System V
-scheme is a reasonable choice, but none of the 4BSD derived systems
-support it. So, catalogs are completely implemented within nvi, and
-don't require any library support.
+Command strings, usage strings, system errors and other 'known text'
+are not.
Message catalogs in nvi are fairly simple. Every catalog message
consists of two parts -- an initial number followed by a pipe (`|')
@@ -33,19 +27,7 @@ For example:
msgq(sp, M_ERR, "002|Error: %d %x", arg1, arg2);
-is a format string that displays two arguments. It is possible, however,
-to reorder the arguments or to not display all of them. The convention
-nvi uses is the System V printf(3) convention, i.e. "%[0-9]*$" is the name
-of a specific, numbered argument. For example:
-
- msgq(sp, M_ERR, "002|Error: %2$d %1$x", arg1, arg2);
-
-displays the arguments in reverse order.
-
-If the system supports this convention in its library printf routines
-(as specified by the test #define NL_ARGMAX), nvi uses those routines.
-Otherwise, there is some serious magic going on in common/msg.c to make
-this all work.
+is a format string that displays two arguments.
Arguments to the msgq function are required to contain ONLY printable
characters. No further translation is done by the msgq routine before
@@ -54,14 +36,16 @@ displaying the message on the screen. For example, in the msgq call:
msgq(sp, M_ERR, "003|File: %s", file_name);
"file_name" must contain only printable characters. The routine
-msg_print() returns a printable version of a string in allocated
-memory. For example:
+msg_print() returns a printable version of a string; the third argument
+indicates whether the string needs to be freed. For example:
char *p;
+ int nf;
- p = msg_print(sp, file_name);
- msgq(sp, M_ERR, M("003", "File: %s"), p);
- FREE_SPACE(sp, p, 0);
+ p = msg_print(sp, file_name, &nf);
+ msgq(sp, M_ERR, "003|File: %s", p);
+ if (nf)
+ FREE_SPACE(sp, p, 0);
makes sure that "file_name" is printable before calling the msgq
routine.
@@ -71,63 +55,40 @@ routine.
The message catalogs themselves are maintained in two files. The first
is the "base file" which contains two fields, a record number and the
message itself. All base files are named using the convention
-"vi_<language>.base", e.g. the English one is "vi_english.base". For
+"<language>.base", e.g. the English one is "english.base". For
example:
- 002 "Unable to create temporary file"
- 003 "Warning: %s is not a regular file"
- 004 "%s already locked, session is read-only"
- 005 "%s: remove"
- 006 "%s: close"
- 007 "%s: remove"
- 008 "%s: remove"
- 009 "Read-only file, not written; use ! to override"
- 010 "Read-only file, not written"
-
-are the first few lines of the current vi_english.base file. Note that
-message #1 is missing -- the first message of each catalog is a special
-one, so that nvi can recognize message catalog files. It's added by the
-Makefile script that creates the second version of the message catalog.
-
-The second file is the file used by nvi to access messages, and is a list
-of the messages, one per line:
-
- VI_MESSAGE_CATALOG
- Unable to create temporary fileX
- Warning: %s is not a regular fileX
- %s already locked, session is read-onlyX
- %s: removeX
- %s: closeX
- %s: removeX
- %s: removeX
- Read-only file, not written; use ! to overrideX
- Read-only file, not writtenX
-
-Note that all messages have had a trailing 'X' character appended. This
-is to provide nvi a place to store a trailing nul for the message so that
-C library routines that expect one won't be disappointed.
-
-These files are named for their language, e.g. "vi_english". The second
-files are automatically created from the first files.
+ 002 "Line length overflow"
+ 003 "unable to delete line %lu"
+ 004 "unable to append to line %lu"
+ 005 "unable to insert at line %lu"
+ 006 "unable to store line %lu"
+ 007 "unable to get last line"
-To create a new catalog for nvi:
+are the first few lines of the current english.base file.
-Copy the file vi_english.base to a file that you can modify , e.g. "cp
-vi_english.base vi_german.base". For each of the messages in the file,
-replace the message with the string that you want to use. To find out
-what the arguments to a message are, I'm afraid you'll have to search
-the source code for the message number. You can find them fairly quickly
-by doing:
+Before this file being converted to the second file, the POSIX formatted
+message catalog file, by gencat(1), two lines:
- cd ..; egrep '123\|' */*.[chys]
+ $set 1
+ $quote "
+
+will be inserted before the base text to setup the set_id and the quote
+character. So the double-quote needs to be escaped by a backslash to be
+included in a message; same as the backslash itself.
+
+These files are named for their language, e.g. "english". However, a
+locale(1) name is also recommended.
+
+To create a new catalog for nvi:
-I'm sorry that there's not an easier way, but I couldn't think of
-anything that wasn't a lot of work.
+Copy the file english.base to a file that you can modify , e.g. "cp
+english.base german.base". For each of the messages in the file,
+replace the message with the string that you want to use. If you have
+doubts about the meaning of a message, just email me.
-If, for some reason, you don't have the file vi_english.base, or you
-have new sources for which you want to create a new base catalog, you
-can create it by running the command "make english" in the catalog
-directory.
+A latest english.base can be created from source by running the command
+"make english" in the catalog/ directory.
Once you've translated all of the strings, then add your catalog to the
"CAT=" line of the Makefile, and run the command "make catalog". This
@@ -156,11 +117,11 @@ a single place.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
To select a catalog when running nvi, set the "msgcat" option. If the
value of this option ends with a '/', it is treated as the name of a
-directory that contains a message catalog "vi_XXXX", where XXXX is the
-value of the LANG environmental variable, if it's set, or the value of
-the LC_MESSAGES environmental variable if it's not. If neither of those
-environmental variables are set, or if the option doesn't end in a '/',
-the option is treated as the full path name of the message catalog to use.
+directory that contains a message catalog "$LC_MESSAGES", which is set
+through the LC_MESSAGES environment variable but returned by setlocale(3).
+Check the output of locale(1) to validate such a value. If the option
+doesn't end in a '/', the option is treated as the full path name of the
+message catalog to use.
If any messages are missing from the catalog, the backup text (English)
is used instead.
OpenPOWER on IntegriCloud