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/README166
1 files changed, 166 insertions, 0 deletions
diff --git a/contrib/nvi/catalog/README b/contrib/nvi/catalog/README
new file mode 100644
index 0000000..15a7063
--- /dev/null
+++ b/contrib/nvi/catalog/README
@@ -0,0 +1,166 @@
+# @(#)README 8.4 (Berkeley) 11/22/94
+
+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.
+
+Message catalogs in nvi are fairly simple. Every catalog message
+consists of two parts -- an initial number followed by a pipe (`|')
+character, followed by the English text for the message. For example:
+
+ msgq(sp, M_ERR, "001|This is an error message");
+
+would be a typical message.
+
+When the msgq() routine is called, if the user has specified a message
+catalog and the format string (the third argument) has a leading number,
+then it is converted to a record number, and that record is retrieved
+from the message catalog and used as a replacement format string. If
+the record can't be retrieved for any reason, the English text is displayed
+instead.
+
+Each message format string MUST map into the English format string, i.e.
+it can't display more or different arguments than the English one.
+
+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.
+
+Arguments to the msgq function are required to contain ONLY printable
+characters. No further translation is done by the msgq routine before
+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:
+
+ char *p;
+
+ p = msg_print(sp, file_name);
+ msgq(sp, M_ERR, M("003", "File: %s"), p);
+ FREE_SPACE(sp, p, 0);
+
+makes sure that "file_name" is printable before calling the msgq
+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
+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.
+
+To create a new catalog for nvi:
+
+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:
+
+ cd ..; egrep '123\|' */*.[chys]
+
+I'm sorry that there's not an easier way, but I couldn't think of
+anything that wasn't a lot of work.
+
+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.
+
+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
+will create the second (and corresponding) file for each file named
+<language>.base.
+
+Don't worry about missing line numbers, i.e. base files that look like:
+
+ 005 Message number 5.
+ 007 Message number 7.
+
+This simply means that a message was deleted during the course of nvi's
+development. It will be taken care of automatically when you create
+the second form of the file.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+If you add new messages to the nvi sources, you can check your work by
+doing "make english; make check". The "make check" target lists unused
+message numbers, duplicate message numbers, and duplicate messages.
+Unused message numbers are only useful if you are condensing messages.
+Duplicate message numbers are a serious problem and have to be fixed.
+Duplicate messages are only interesting if a message appears often enough
+that it's worth creating a routine so that the string is only need in
+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.
+
+If any messages are missing from the catalog, the backup text (English)
+is used instead.
OpenPOWER on IntegriCloud