~ubuntu-branches/ubuntu/trusty/procps/trusty-proposed

« back to all changes in this revision

Viewing changes to .pc/p_pid-enum.diff/top/top_nls.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-12-05 13:27:37 UTC
  • Revision ID: package-import@ubuntu.com-20131205132737-0ftdo3qzvtwxrqa5
Tags: 1:3.3.8-2ubuntu2
* Build using dh-autoreconf, update libtool.m4.
* Fix build with glibc-2.18/linux-3.13.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* top_nls.c - provide the basis for future nls translations */
 
2
/*
 
3
 * Copyright (c) 2011-2013,     by: James C. Warner
 
4
 *    All rights reserved.      8921 Hilloway Road
 
5
 *                              Eden Prairie, Minnesota 55347 USA
 
6
 *
 
7
 * This file may be used subject to the terms and conditions of the
 
8
 * GNU Library General Public License Version 2, or any later version
 
9
 * at your option, as published by the Free Software Foundation.
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU Library General Public License for more details.
 
14
 */
 
15
/* For contributions to this program, the author wishes to thank:
 
16
 *    Craig Small, <csmall@small.dropbear.id.au>
 
17
 *    Sami Kerola, <kerolasa@iki.fi>
 
18
 */
 
19
 
 
20
#include <locale.h>
 
21
#include <stdio.h>
 
22
#include <string.h>
 
23
 
 
24
#include "../include/nls.h"
 
25
 
 
26
#include "top.h"
 
27
#include "top_nls.h"
 
28
 
 
29
#ifdef VALIDATE_NLS
 
30
#include <stdlib.h>
 
31
#endif
 
32
 
 
33
        // Programmer Note(s):
 
34
        //  Preparation ---------------------------------------------
 
35
        //    Unless you have *something* following the gettext macro,
 
36
        //    xgettext will refuse to see any TRANSLATORS comments.
 
37
        //    Thus empty strings have been added for potential future
 
38
        //    comment additions.
 
39
        //
 
40
        //    Also, by omitting the argument for the --add-comments
 
41
        //    XGETTEXT_OPTION in po/Makevars, *any* preceding c style
 
42
        //    comment will be propagated to the .pot file, providing
 
43
        //    that the gettext macro isn't empty as discussed above.
 
44
        //    However, this is far too aggressive so we have chosen
 
45
        //    the word 'Translation' to denote xgettext comments.
 
46
        //
 
47
        //    /* Need Not Say 'TRANSLATORS': ...
 
48
        //    snprintf(buf, sizeof(buf), "%s", _(      // unseen comment
 
49
        //
 
50
        //    /* Translation Hint: ...
 
51
        //    snprintf(buf, sizeof(buf), "%s", _(""    // now it's seen!
 
52
        //
 
53
        //  Translation, from po/ directory after make --------------
 
54
        //  ( this is the procedure used before any translations were  )
 
55
        //  ( available in the po/ directory, which contained only the )
 
56
        //  ( procps-ng.pot, this domain's template file.              )
 
57
        //
 
58
        //  ( below: ll_CC = language/country as in 'zh_CN' or 'en_AU' )
 
59
        //
 
60
        //    msginit --locale=ll_CC --no-wrap
 
61
        //     . creates a ll_CC.po file from the template procps-ng.pot
 
62
        //     . may also duplicate msgid as msgstr if languages similar
 
63
        //    msgen --no-wrap ll_CC.po --output-file=ll_CC.po
 
64
        //     . duplicates every msgid literal as msgstr value
 
65
        //     . this is the file that's edited
 
66
        //        . replace "Content-Type: ... charset=ASCII\n"
 
67
        //                           with "... charset=UTF-8\n"
 
68
        //        . translate msgstr values, leaving msgid unchanged
 
69
        //    msgfmt ll_CC.po --strict --output-file=procps-ng.mo
 
70
        //     . after which ensure, chmod 644
 
71
        //     . then copy
 
72
        //         to /usr/share/locale-langpack/ll_CC/LC_MESSAGES/
 
73
        //         or /usr/share/locale/ll_CC/LC_MESSAGES/
 
74
        //  Testing -------------------------------------------------
 
75
        //    export LC_ALL= && export LANGUAGE=ll_CC
 
76
        //    run some capable program like top
 
77
        //
 
78
 
 
79
        /*
 
80
         * These are our string tables with the following contents:
 
81
         *    Head : column headings with varying size limits
 
82
         *    Desc : fields descriptions not to exceed 20 screen positions
 
83
         *    Norm : regular text possibly also containing c-format specifiers
 
84
         *    Uniq : show_special specially formatted strings
 
85
         *
 
86
         * The latter table presents the greatest translation challenge !
 
87
         *
 
88
         * We go to the trouble of creating the nls string tables to achieve
 
89
         * these objectives:
 
90
         *    +  the overhead of repeated runtime calls to gettext()
 
91
         *       will be avoided
 
92
         *    +  the order of the strings in the template (.pot) file
 
93
         *       can be completely controlled
 
94
         *    +  none of the important translator only comments will
 
95
         *       clutter and obscure the main program
 
96
         */
 
97
const char *Head_nlstab[P_MAXPFLGS];
 
98
const char *Desc_nlstab[P_MAXPFLGS];
 
99
const char *Norm_nlstab[norm_MAX];
 
100
const char *Uniq_nlstab[uniq_MAX];
 
101
 
 
102
 
 
103
        /*
 
104
         * This routine builds the nls table containing plain text only
 
105
         * used as the field descriptions.  Each translated line MUST be
 
106
         * kept to a maximum of 20 characters or less! */
 
107
static void build_two_nlstabs (void) {
 
108
 
 
109
/* Translation Notes ------------------------------------------------
 
110
   .  It is strongly recommend that the --no-wrap command line option
 
111
   .  be used with all supporting translation tools, when available.
 
112
   .
 
113
   .  The following line pairs contain only plain text and consist of:
 
114
   .     1) a field name/column header - mostly upper case
 
115
   .     2) the related description    - both upper and lower case
 
116
   .
 
117
   .  To avoid truncation at runtime, each column header is noted with
 
118
   .  its maximum size and the following description must not exceed
 
119
   .  20 characters.  Fewer characters are ok.
 
120
   .
 
121
   . */
 
122
 
 
123
/* Translation Hint: maximum 'PID' = 5 */
 
124
   Head_nlstab[P_PID] = _("PID");
 
125
   Desc_nlstab[P_PID] = _("Process Id");
 
126
/* Translation Hint: maximum 'PPID' = 5 */
 
127
   Head_nlstab[P_PPD] = _("PPID");
 
128
   Desc_nlstab[P_PPD] = _("Parent Process pid");
 
129
/* Translation Hint: maximum 'UID' = 5 */
 
130
   Head_nlstab[P_UED] = _("UID");
 
131
   Desc_nlstab[P_UED] = _("Effective User Id");
 
132
/* Translation Hint: maximum 'USER' = 8 */
 
133
   Head_nlstab[P_UEN] = _("USER");
 
134
   Desc_nlstab[P_UEN] = _("Effective User Name");
 
135
/* Translation Hint: maximum 'RUID' = 5 */
 
136
   Head_nlstab[P_URD] = _("RUID");
 
137
   Desc_nlstab[P_URD] = _("Real User Id");
 
138
/* Translation Hint: maximum 'RUSER' = 8 */
 
139
   Head_nlstab[P_URN] = _("RUSER");
 
140
   Desc_nlstab[P_URN] = _("Real User Name");
 
141
/* Translation Hint: maximum 'SUID' = 5 */
 
142
   Head_nlstab[P_USD] = _("SUID");
 
143
   Desc_nlstab[P_USD] = _("Saved User Id");
 
144
/* Translation Hint: maximum 'SUSER' = 8 */
 
145
   Head_nlstab[P_USN] = _("SUSER");
 
146
   Desc_nlstab[P_USN] = _("Saved User Name");
 
147
/* Translation Hint: maximum 'GID' = 5 */
 
148
   Head_nlstab[P_GID] = _("GID");
 
149
   Desc_nlstab[P_GID] = _("Group Id");
 
150
/* Translation Hint: maximum 'GROUP' = 8 */
 
151
   Head_nlstab[P_GRP] = _("GROUP");
 
152
   Desc_nlstab[P_GRP] = _("Group Name");
 
153
/* Translation Hint: maximum 'PGRP' = 5 */
 
154
   Head_nlstab[P_PGD] = _("PGRP");
 
155
   Desc_nlstab[P_PGD] = _("Process Group Id");
 
156
/* Translation Hint: maximum 'TTY' = 8 */
 
157
   Head_nlstab[P_TTY] = _("TTY");
 
158
   Desc_nlstab[P_TTY] = _("Controlling Tty");
 
159
/* Translation Hint: maximum 'TPGID' = 5 */
 
160
   Head_nlstab[P_TPG] = _("TPGID");
 
161
   Desc_nlstab[P_TPG] = _("Tty Process Grp Id");
 
162
/* Translation Hint: maximum 'SID' = 5 */
 
163
   Head_nlstab[P_SID] = _("SID");
 
164
   Desc_nlstab[P_SID] = _("Session Id");
 
165
/* Translation Hint: maximum 'PR' = 3 */
 
166
   Head_nlstab[P_PRI] = _("PR");
 
167
   Desc_nlstab[P_PRI] = _("Priority");
 
168
/* Translation Hint: maximum 'NI' = 3 */
 
169
   Head_nlstab[P_NCE] = _("NI");
 
170
   Desc_nlstab[P_NCE] = _("Nice Value");
 
171
/* Translation Hint: maximum 'nTH' = 3 */
 
172
   Head_nlstab[P_THD] = _("nTH");
 
173
   Desc_nlstab[P_THD] = _("Number of Threads");
 
174
/* Translation Hint: maximum 'P' = 1 */
 
175
   Head_nlstab[P_CPN] = _("P");
 
176
   Desc_nlstab[P_CPN] = _("Last Used Cpu (SMP)");
 
177
/* Translation Hint: maximum '%CPU' = 4 */
 
178
   Head_nlstab[P_CPU] = _("%CPU");
 
179
   Desc_nlstab[P_CPU] = _("CPU Usage");
 
180
/* Translation Hint: maximum '' = 6 */
 
181
   Head_nlstab[P_TME] = _("TIME");
 
182
   Desc_nlstab[P_TME] = _("CPU Time");
 
183
/* Translation Hint: maximum 'TIME+' = 9 */
 
184
   Head_nlstab[P_TM2] = _("TIME+");
 
185
   Desc_nlstab[P_TM2] = _("CPU Time, hundredths");
 
186
/* Translation Hint: maximum '%MEM' = 4 */
 
187
   Head_nlstab[P_MEM] = _("%MEM");
 
188
   Desc_nlstab[P_MEM] = _("Memory Usage (RES)");
 
189
/* Translation Hint: maximum 'VIRT' = 5 */
 
190
   Head_nlstab[P_VRT] = _("VIRT");
 
191
   Desc_nlstab[P_VRT] = _("Virtual Image (KiB)");
 
192
/* Translation Hint: maximum 'SWAP' = 4 */
 
193
   Head_nlstab[P_SWP] = _("SWAP");
 
194
   Desc_nlstab[P_SWP] = _("Swapped Size (KiB)");
 
195
/* Translation Hint: maximum 'RES' = 4 */
 
196
   Head_nlstab[P_RES] = _("RES");
 
197
   Desc_nlstab[P_RES] = _("Resident Size (KiB)");
 
198
/* Translation Hint: maximum 'CODE' = 4 */
 
199
   Head_nlstab[P_COD] = _("CODE");
 
200
   Desc_nlstab[P_COD] = _("Code Size (KiB)");
 
201
/* Translation Hint: maximum 'DATA' = 4 */
 
202
   Head_nlstab[P_DAT] = _("DATA");
 
203
   Desc_nlstab[P_DAT] = _("Data+Stack (KiB)");
 
204
/* Translation Hint: maximum 'SHR' = 4 */
 
205
   Head_nlstab[P_SHR] = _("SHR");
 
206
   Desc_nlstab[P_SHR] = _("Shared Memory (KiB)");
 
207
/* Translation Hint: maximum 'nMaj' = 4 */
 
208
   Head_nlstab[P_FL1] = _("nMaj");
 
209
   Desc_nlstab[P_FL1] = _("Major Page Faults");
 
210
/* Translation Hint: maximum 'nMin' = 4 */
 
211
   Head_nlstab[P_FL2] = _("nMin");
 
212
   Desc_nlstab[P_FL2] = _("Minor Page Faults");
 
213
/* Translation Hint: maximum 'nDRT' = 4 */
 
214
   Head_nlstab[P_DRT] = _("nDRT");
 
215
   Desc_nlstab[P_DRT] = _("Dirty Pages Count");
 
216
/* Translation Hint: maximum 'S' = 1 */
 
217
   Head_nlstab[P_STA] = _("S");
 
218
   Desc_nlstab[P_STA] = _("Process Status");
 
219
/* Translation Hint: maximum 'COMMAND' = 7 */
 
220
   Head_nlstab[P_CMD] = _("COMMAND");
 
221
   Desc_nlstab[P_CMD] = _("Command Name/Line");
 
222
/* Translation Hint: maximum 'WCHAN' = 7 */
 
223
   Head_nlstab[P_WCH] = _("WCHAN");
 
224
   Desc_nlstab[P_WCH] = _("Sleeping in Function");
 
225
/* Translation Hint: maximum 'Flags' = 8 */
 
226
   Head_nlstab[P_FLG] = _("Flags");
 
227
   Desc_nlstab[P_FLG] = _("Task Flags <sched.h>");
 
228
/* Translation Hint: maximum 'CGROUPS' = 7 */
 
229
   Head_nlstab[P_CGR] = _("CGROUPS");
 
230
   Desc_nlstab[P_CGR] = _("Control Groups");
 
231
/* Translation Hint: maximum 'SUPGIDS' = 7 */
 
232
   Head_nlstab[P_SGD] = _("SUPGIDS");
 
233
   Desc_nlstab[P_SGD] = _("Supp Groups IDs");
 
234
/* Translation Hint: maximum 'SUPGRPS' = 7 */
 
235
   Head_nlstab[P_SGN] = _("SUPGRPS");
 
236
   Desc_nlstab[P_SGN] = _("Supp Groups Names");
 
237
/* Translation Hint: maximum 'TGID' = 5 */
 
238
   Head_nlstab[P_TGD] = _("TGID");
 
239
   Desc_nlstab[P_TGD] = _("Thread Group Id");
 
240
#ifdef OOMEM_ENABLE
 
241
/* Translation Hint: maximum 'Adj' = 3 */
 
242
   Head_nlstab[P_OOA] = _("Adj");
 
243
   Desc_nlstab[P_OOA] = _("oom_adjustment (2^X)");
 
244
/* Translation Hint: maximum 'Badness' = 8 */
 
245
   Head_nlstab[P_OOM] = _("Badness");
 
246
   Desc_nlstab[P_OOM] = _("oom_score (badness)");
 
247
#endif
 
248
/* Translation Hint: maximum 'ENVIRON' = 7 */
 
249
   Head_nlstab[P_ENV] = _("ENVIRON");
 
250
/* Translation Hint: the abbreviation 'vars' below is shorthand for
 
251
                     'variables' */
 
252
   Desc_nlstab[P_ENV] = _("Environment vars");
 
253
/* Translation Hint: maximum 'vMj' = 3 */
 
254
   Head_nlstab[P_FV1] = _("vMj");
 
255
   Desc_nlstab[P_FV1] = _("Major Faults delta");
 
256
/* Translation Hint: maximum 'vMn' = 3 */
 
257
   Head_nlstab[P_FV2] = _("vMn");
 
258
   Desc_nlstab[P_FV2] = _("Minor Faults delta");
 
259
/* Translation Hint: maximum 'USED' = 4 */
 
260
   Head_nlstab[P_USE] = _("USED");
 
261
   Desc_nlstab[P_USE] = _("Res+Swap Size (KiB)");
 
262
}
 
263
 
 
264
 
 
265
        /*
 
266
         * This routine builds the nls table containing both plain text
 
267
         * and regular c-format strings. */
 
268
static void build_norm_nlstab (void) {
 
269
 
 
270
/* Translation Notes ------------------------------------------------
 
271
   .  It is strongly recommend that the --no-wrap command line option
 
272
   .  be used with all supporting translation tools, when available.
 
273
   .
 
274
   .  This group of lines contains both plain text and c-format strings.
 
275
   .
 
276
   .  Some strings reflect switches used to affect the running program
 
277
   .  and should not be translated without also making corresponding
 
278
   .  c-code logic changes.
 
279
   . */
 
280
 
 
281
   Norm_nlstab[EXIT_signals_fmt] = _(""
 
282
      "\tsignal %d (%s) was caught by %s, please\n"
 
283
      "\tsee http://www.debian.org/Bugs/Reporting\n");
 
284
   Norm_nlstab[WRONG_switch_fmt] = _(""
 
285
      "inappropriate '%s'\n"
 
286
      "Usage:\n  %s%s");
 
287
   Norm_nlstab[HELP_cmdline_fmt] = _(""
 
288
      "  %s\n"
 
289
      "Usage:\n  %s%s");
 
290
   Norm_nlstab[FAIL_statopn_fmt] = _("failed /proc/stat open: %s");
 
291
   Norm_nlstab[FAIL_openlib_fmt] = _("failed openproc: %s");
 
292
   Norm_nlstab[BAD_delayint_fmt] = _("bad delay interval '%s'");
 
293
   Norm_nlstab[BAD_niterate_fmt] = _("bad iterations argument '%s'");
 
294
   Norm_nlstab[LIMIT_exceed_fmt] = _("pid limit (%d) exceeded");
 
295
   Norm_nlstab[BAD_mon_pids_fmt] = _("bad pid '%s'");
 
296
   Norm_nlstab[MISSING_args_fmt] = _("-%c requires argument");
 
297
   Norm_nlstab[BAD_widtharg_fmt] = _("bad width arg '%s', must > %d");
 
298
   Norm_nlstab[UNKNOWN_opts_fmt] = _(""
 
299
      "unknown option '%c'\n"
 
300
      "Usage:\n  %s%s");
 
301
   Norm_nlstab[DELAY_secure_txt] = _("-d disallowed in \"secure\" mode");
 
302
   Norm_nlstab[DELAY_badarg_txt] = _("-d requires positive argument");
 
303
   Norm_nlstab[ON_word_only_txt] = _("On");
 
304
   Norm_nlstab[OFF_one_word_txt] = _("Off");
 
305
/* Translation Hint: Only the following words should be translated
 
306
   .                 secs (seconds), max (maximum), user, field, cols (columns)*/
 
307
   Norm_nlstab[USAGE_abbrev_txt] = _(" -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]");
 
308
   Norm_nlstab[FAIL_statget_txt] = _("failed /proc/stat read");
 
309
   Norm_nlstab[FOREST_modes_fmt] = _("Forest mode %s");
 
310
   Norm_nlstab[FAIL_tty_get_txt] = _("failed tty get");
 
311
   Norm_nlstab[FAIL_tty_set_fmt] = _("failed tty set: %s");
 
312
   Norm_nlstab[CHOOSE_group_txt] = _("Choose field group (1 - 4)");
 
313
   Norm_nlstab[DISABLED_cmd_txt] = _("Command disabled, 'A' mode required");
 
314
   Norm_nlstab[DISABLED_win_fmt] = _("Command disabled, activate %s with '-' or '_'");
 
315
   Norm_nlstab[COLORS_nomap_txt] = _("No colors to map!");
 
316
   Norm_nlstab[FAIL_rc_open_fmt] = _("Failed '%s' open: %s");
 
317
   Norm_nlstab[WRITE_rcfile_fmt] = _("Wrote configuration to '%s'");
 
318
   Norm_nlstab[DELAY_change_fmt] = _("Change delay from %.1f to");
 
319
   Norm_nlstab[THREADS_show_fmt] = _("Show threads %s");
 
320
   Norm_nlstab[IRIX_curmode_fmt] = _("Irix mode %s");
 
321
   Norm_nlstab[GET_pid2kill_fmt] = _("PID to signal/kill [default pid = %d]");
 
322
   Norm_nlstab[GET_sigs_num_fmt] = _("Send pid %d signal [%d/sigterm]");
 
323
   Norm_nlstab[FAIL_signals_fmt] = _("Failed signal pid '%d' with '%d': %s");
 
324
   Norm_nlstab[BAD_signalid_txt] = _("Invalid signal");
 
325
   Norm_nlstab[GET_pid2nice_fmt] = _("PID to renice [default pid = %d]");
 
326
   Norm_nlstab[GET_nice_num_fmt] = _("Renice PID %d to value");
 
327
   Norm_nlstab[FAIL_re_nice_fmt] = _("Failed renice of PID %d to %d: %s");
 
328
   Norm_nlstab[NAME_windows_fmt] = _("Rename window '%s' to (1-3 chars)");
 
329
   Norm_nlstab[TIME_accumed_fmt] = _("Cumulative time %s");
 
330
   Norm_nlstab[GET_max_task_fmt] = _("Maximum tasks = %d, change to (0 is unlimited)");
 
331
   Norm_nlstab[BAD_max_task_txt] = _("Invalid maximum");
 
332
   Norm_nlstab[HILIGHT_cant_txt] = _("Nothing to highlight!");
 
333
   Norm_nlstab[GET_user_ids_txt] = _("Which user (blank for all)");
 
334
   Norm_nlstab[UNKNOWN_cmds_txt] = _("Unknown command - try 'h' for help");
 
335
   Norm_nlstab[SCROLL_coord_fmt] = _("scroll coordinates: y = %d/%%d (tasks), x = %d/%d (fields)");
 
336
   Norm_nlstab[FAIL_alloc_c_txt] = _("failed memory allocate");
 
337
   Norm_nlstab[FAIL_alloc_r_txt] = _("failed memory re-allocate");
 
338
   Norm_nlstab[BAD_numfloat_txt] = _("Unacceptable floating point");
 
339
   Norm_nlstab[BAD_username_txt] = _("Invalid user");
 
340
   Norm_nlstab[FOREST_views_txt] = _("forest view");
 
341
   Norm_nlstab[FAIL_widepid_txt] = _("failed pid maximum size test");
 
342
   Norm_nlstab[FAIL_widecpu_txt] = _("failed number of cpus test");
 
343
   Norm_nlstab[RC_bad_files_fmt] = _("incompatible rcfile, you should delete '%s'");
 
344
   Norm_nlstab[RC_bad_entry_fmt] = _("window entry #%d corrupt, please delete '%s'");
 
345
   Norm_nlstab[NOT_onsecure_txt] = _("Unavailable in secure mode");
 
346
   Norm_nlstab[NOT_smp_cpus_txt] = _("Only 1 cpu detected");
 
347
   Norm_nlstab[BAD_integers_txt] = _("Unacceptable integer");
 
348
   Norm_nlstab[SELECT_clash_txt] = _("conflicting process selections (U/p/u)");
 
349
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
350
   .                 kibibytes (1024 bytes) */
 
351
   Norm_nlstab[AMT_kilobyte_txt] = _("KiB");
 
352
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
353
   .                 mebibytes (1,048,576 bytes) */
 
354
   Norm_nlstab[AMT_megabyte_txt] = _("MiB");
 
355
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
356
   .                 gibibytes (1,073,741,824 bytes) */
 
357
   Norm_nlstab[AMT_gigabyte_txt] = _("GiB");
 
358
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
359
   .                 tebibytes (1,099,511,627,776 bytes) */
 
360
   Norm_nlstab[AMT_terabyte_txt] = _("TiB");
 
361
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
362
   .                 pebibytes (1,024 tebibytes) */
 
363
   Norm_nlstab[AMT_petabyte_txt] = _("PiB");
 
364
/* Translation Hint: This is an abbreviation (limit 3 characters) for:
 
365
   .                 exbibytes (1,024 pebibytes) */
 
366
   Norm_nlstab[AMT_exxabyte_txt] = _("EiB");
 
367
   Norm_nlstab[WORD_threads_txt] = _("Threads");
 
368
   Norm_nlstab[WORD_process_txt] = _("Tasks");
 
369
/* Translation Hint: The following "word" is meant to represent either a single
 
370
   .                 cpu or all of the processors in a multi-processor computer
 
371
   .                 (should be exactly 6 characters, not counting the colon)*/
 
372
   Norm_nlstab[WORD_allcpus_txt] = _("Cpu(s):");
 
373
/* Translation Hint: The following "word" is meant to represent a single processor
 
374
   .                 (should be exactly 3 characters) */
 
375
   Norm_nlstab[WORD_eachcpu_fmt] = _("Cpu%-3d:");
 
376
/* Translation Hint: The following word "another" must have 1 trailing space */
 
377
   Norm_nlstab[WORD_another_txt] = _("another ");
 
378
   Norm_nlstab[FIND_no_next_txt] = _("Locate next inactive, use \"L\"");
 
379
   Norm_nlstab[GET_find_str_txt] = _("Locate string");
 
380
   Norm_nlstab[FIND_no_find_fmt] = _("%s\"%s\" not found");
 
381
   Norm_nlstab[XTRA_fixwide_fmt] = _("width incr is %d, change to (0 default, -1 auto)");
 
382
   Norm_nlstab[XTRA_warncfg_txt] = _("Overwrite existing obsolete/corrupted rcfile?");
 
383
   Norm_nlstab[XTRA_badflds_fmt] = _("unrecognized field name '%s'");
 
384
   Norm_nlstab[XTRA_winsize_txt] = _("even using field names only, window is now too small");
 
385
#ifndef INSP_OFFDEMO
 
386
   Norm_nlstab[YINSP_demo01_txt] = _("Open Files");
 
387
   Norm_nlstab[YINSP_demo02_txt] = _("NUMA Info");
 
388
   Norm_nlstab[YINSP_demo03_txt] = _("Log");
 
389
   Norm_nlstab[YINSP_deqfmt_txt] = _("the '=' key will eventually show the actual file read or command(s) excuted ...");
 
390
   Norm_nlstab[YINSP_deqtyp_txt] = _("demo");
 
391
   Norm_nlstab[YINSP_dstory_txt] = _(""
 
392
      "This is simulated output representing the contents of some file or the output\n"
 
393
      "from some command.  Exactly which commands and/or files are solely up to you.\n"
 
394
      "\n"
 
395
      "Although this text is for information purposes only, it can still be scrolled\n"
 
396
      "and searched like real output will be.  You are encouraged to experiment with\n"
 
397
      "those features as explained in the prologue above.\n"
 
398
      "\n"
 
399
      "To enable real Inspect functionality, entries must be added to the end of the\n"
 
400
      "top personal personal configuration file.  You could use your favorite editor\n"
 
401
      "to accomplish this, taking care not to disturb existing entries.\n"
 
402
      "\n"
 
403
      "Another way to add entries is illustrated below, but it risks overwriting the\n"
 
404
      "rcfile.  Redirected echoes must not replace (>) but append (>>) to that file.\n"
 
405
      "\n"
 
406
      "  /bin/echo -e \"pipe\\tOpen Files\\tlsof -P -p %d 2>&1\" >> ~/.toprc\n"
 
407
      "  /bin/echo -e \"file\\tNUMA Info\\t/proc/%d/numa_maps\" >> ~/.toprc\n"
 
408
      "  /bin/echo -e \"pipe\\tLog\\ttail -n200 /var/log/syslog | sort -Mr\" >> ~/.toprc\n"
 
409
      "\n"
 
410
      "If you don't know the location or name of the top rcfile, use the 'W' command\n"
 
411
      "and note those details.  After backing up the current rcfile, try issuing the\n"
 
412
      "above echoes exactly as shown, replacing '.toprc' as appropriate.  The safest\n"
 
413
      "approach would be to use copy then paste to avoid any typing mistakes.\n"
 
414
      "\n"
 
415
      "Finally, restart top to reveal what actual Inspect entries combined with this\n"
 
416
      "new command can offer.  The possibilities are endless, especially considering\n"
 
417
      "that 'pipe' type entries can include shell scripts too!\n"
 
418
      "\n"
 
419
      "For additional important information, please consult the top documentation.\n"
 
420
      "Then enhance top with your very own customized 'file' and 'pipe' entries.\n"
 
421
      "\n"
 
422
      "Enjoy!\n");
 
423
   Norm_nlstab[YINSP_noents_txt] = _("to enable 'Y' press <Enter> then type 'W' and restart top");
 
424
#else
 
425
   Norm_nlstab[YINSP_noents_txt] = _("to enable 'Y' please consult the top man page (press Enter)");
 
426
#endif
 
427
   Norm_nlstab[YINSP_failed_fmt] = _("Selection failed with: %s\n");
 
428
   Norm_nlstab[YINSP_pidbad_fmt] = _("unable to inspect, pid %d not found");
 
429
   Norm_nlstab[YINSP_pidsee_fmt] = _("inspect at PID [default pid = %d]");
 
430
   Norm_nlstab[YINSP_rcfile_fmt] = _("could not parse rcfile inspect entry %d");
 
431
   Norm_nlstab[YINSP_status_fmt] = _("%s: %*d-%-*d lines, %*d-%*d columns, %lu bytes read");
 
432
   Norm_nlstab[YINSP_workin_txt] = _("patience please, working...");
 
433
/* Translation Hint: Below are 2 abbreviations which can be as long as needed:
 
434
   .                 FLD = FIELD, VAL = VALUE */
 
435
   Norm_nlstab[OSEL_prompts_fmt] = _("add filter #%d (%s) as: [!]FLD?VAL");
 
436
   Norm_nlstab[OSEL_casenot_txt] = _("ignoring case");
 
437
   Norm_nlstab[OSEL_caseyes_txt] = _("case sensitive");
 
438
   Norm_nlstab[OSEL_errdups_txt] = _("duplicate filter was ignored");
 
439
   Norm_nlstab[OSEL_errdelm_fmt] = _("'%s' filter delimiter is missing");
 
440
   Norm_nlstab[OSEL_errvalu_fmt] = _("'%s' filter value is missing");
 
441
   Norm_nlstab[WORD_include_txt] = _("include");
 
442
   Norm_nlstab[WORD_exclude_txt] = _("exclude");
 
443
   Norm_nlstab[OSEL_statlin_fmt] = _("<Enter> to resume, filters: %s");
 
444
   Norm_nlstab[WORD_noneone_txt] = _("none");
 
445
   Norm_nlstab[NUMA_nodenam_fmt] = _("Node%-2d:");
 
446
   Norm_nlstab[NUMA_nodeget_fmt] = _("expand which node (0-%d)");
 
447
   Norm_nlstab[NUMA_nodebad_txt] = _("invalid node");
 
448
   Norm_nlstab[NUMA_nodenot_txt] = _("sorry, NUMA extensions unavailable");
 
449
}
 
450
 
 
451
 
 
452
        /*
 
453
         * This routine builds the nls table containing specially
 
454
         * formatted strings designed to fit within an 80x24 terminal. */
 
455
static void build_uniq_nlstab (void) {
 
456
 
 
457
/* Translation Notes ------------------------------------------------
 
458
   .  It is strongly recommend that the --no-wrap command line option
 
459
   .  be used with all supporting translation tools, when available.
 
460
   .
 
461
   .  The next several text groups contain special escape sequences
 
462
   .  representing values used to index a table at run-time.
 
463
   .
 
464
   .  Each such sequence consists of a tilde (~) followed by an ascii
 
465
   .  number in the range of '1' - '8'.  Examples are '~2', '~8', etc.
 
466
   .  These escape sequences must never themselves be translated but
 
467
   .  could be deleted.
 
468
   .
 
469
   .  If you remove these escape sequences (both tilde and number) it
 
470
   .  would make translation easier.  However, the ability to display
 
471
   .  colors and bold text at run-time will have been lost.
 
472
   .
 
473
   .  Additionally, each of these text groups was designed to display
 
474
   .  in a 80x24 terminal window.  Hopefully, any translations will
 
475
   .  adhere to that goal lest the translated text be truncated.
 
476
   .
 
477
   .  If you would like additional information regarding these strings,
 
478
   .  please see the prologue to the show_special function in the top.c
 
479
   .  source file.
 
480
   . */
 
481
 
 
482
   Uniq_nlstab[KEYS_helpbas_fmt] = _(""
 
483
      "Help for Interactive Commands~2 - %s\n"
 
484
      "Window ~1%s~6: ~1Cumulative mode ~3%s~2.  ~1System~6: ~1Delay ~3%.1f secs~2; ~1Secure mode ~3%s~2.\n"
 
485
      "\n"
 
486
      "  Z~5,~1B~5,E,e   Global: '~1Z~2' colors; '~1B~2' bold; '~1E~2'/'~1e~2' summary/task memory scale\n"
 
487
      "  l,t,m     Toggle Summary: '~1l~2' load avg; '~1t~2' task/cpu stats; '~1m~2' memory info\n"
 
488
      "  0,1,2,3,I Toggle: '~10~2' zeros; '~11~2/~12~2/~13~2' cpus or numa node views; '~1I~2' Irix mode\n"
 
489
      "  f,F,X     Fields: '~1f~2'/'~1F~2' add/remove/order/sort; '~1X~2' increase fixed-width\n"
 
490
      "\n"
 
491
      "  L,&,<,> . Locate: '~1L~2'/'~1&~2' find/again; Move sort column: '~1<~2'/'~1>~2' left/right\n"
 
492
      "  R,H,V,J . Toggle: '~1R~2' Sort; '~1H~2' Threads; '~1V~2' Forest view; '~1J~2' Num justify\n"
 
493
      "  c,i,S,j . Toggle: '~1c~2' Cmd name/line; '~1i~2' Idle; '~1S~2' Time; '~1j~2' Str justify\n"
 
494
      "  x~5,~1y~5     . Toggle highlights: '~1x~2' sort field; '~1y~2' running tasks\n"
 
495
      "  z~5,~1b~5     . Toggle: '~1z~2' color/mono; '~1b~2' bold/reverse (only if 'x' or 'y')\n"
 
496
      "  u,U,o,O . Filter by: '~1u~2'/'~1U~2' effective/any user; '~1o~2'/'~1O~2' other criteria\n"
 
497
      "  n,#,^O  . Set: '~1n~2'/'~1#~2' max tasks displayed; Show: ~1Ctrl~2+'~1O~2' other filter(s)\n"
 
498
      "  C,...   . Toggle scroll coordinates msg for: ~1up~2,~1down~2,~1left~2,~1right~2,~1home~2,~1end~2\n"
 
499
      "\n"
 
500
      "%s"
 
501
      "  W,Y       Write configuration file '~1W~2'; Inspect other output '~1Y~2'\n"
 
502
      "  q         Quit\n"
 
503
      "          ( commands shown with '.' require a ~1visible~2 task display ~1window~2 ) \n"
 
504
      "Press '~1h~2' or '~1?~2' for help with ~1Windows~2,\n"
 
505
      "Type 'q' or <Esc> to continue ");
 
506
 
 
507
/* Translation Hint: As is true for the text above, the "keys" shown to the left and
 
508
   .                 also imbedded in the translatable text (along with escape seqs)
 
509
   .                 should never themselves be translated. */
 
510
   Uniq_nlstab[KEYS_helpext_fmt] = _(""
 
511
      "  k,r       Manipulate tasks: '~1k~2' kill; '~1r~2' renice\n"
 
512
      "  d or s    Set update interval\n");
 
513
 
 
514
   Uniq_nlstab[WINDOWS_help_fmt] = _(""
 
515
      "Help for Windows / Field Groups~2 - \"Current Window\" = ~1 %s ~6\n"
 
516
      "\n"
 
517
      ". Use multiple ~1windows~2, each with separate config opts (color,fields,sort,etc)\n"
 
518
      ". The 'current' window controls the ~1Summary Area~2 and responds to your ~1Commands~2\n"
 
519
      "  . that window's ~1task display~2 can be turned ~1Off~2 & ~1On~2, growing/shrinking others\n"
 
520
      "  . with ~1NO~2 task display, some commands will be ~1disabled~2 ('i','R','n','c', etc)\n"
 
521
      "    until a ~1different window~2 has been activated, making it the 'current' window\n"
 
522
      ". You ~1change~2 the 'current' window by: ~1 1~2) cycling forward/backward;~1 2~2) choosing\n"
 
523
      "  a specific field group; or~1 3~2) exiting the color mapping or fields screens\n"
 
524
      ". Commands ~1available anytime   -------------~2\n"
 
525
      "    A       . Alternate display mode toggle, show ~1Single~2 / ~1Multiple~2 windows\n"
 
526
      "    g       . Choose another field group and make it 'current', or change now\n"
 
527
      "              by selecting a number from: ~1 1~2 =%s;~1 2~2 =%s;~1 3~2 =%s; or~1 4~2 =%s\n"
 
528
      ". Commands ~1requiring~2 '~1A~2' mode~1  -------------~2\n"
 
529
      "    G       . Change the ~1Name~5 of the 'current' window/field group\n"
 
530
      " ~1*~4  a , w   . Cycle through all four windows:  '~1a~5' Forward; '~1w~5' Backward\n"
 
531
      " ~1*~4  - , _   . Show/Hide:  '~1-~5' ~1Current~2 window; '~1_~5' all ~1Visible~2/~1Invisible~2\n"
 
532
      "  The screen will be divided evenly between task displays.  But you can make\n"
 
533
      "  some ~1larger~2 or ~1smaller~2, using '~1n~2' and '~1i~2' commands.  Then later you could:\n"
 
534
      " ~1*~4  = , +   . Rebalance tasks:  '~1=~5' ~1Current~2 window; '~1+~5' ~1Every~2 window\n"
 
535
      "              (this also forces the ~1current~2 or ~1every~2 window to become visible)\n"
 
536
      "\n"
 
537
      "In '~1A~2' mode, '~1*~4' keys are your ~1essential~2 commands.  Please try the '~1a~2' and '~1w~2'\n"
 
538
      "commands plus the 'g' sub-commands NOW.  Press <Enter> to make 'Current' ");
 
539
 
 
540
/* Translation Notes ------------------------------------------------
 
541
   .  The following 'Help for color mapping' simulated screen should
 
542
   .  probably NOT be translated.  It is terribly hard to follow in
 
543
   .  this form and any translation could produce unpleasing results
 
544
   .  that are unlikely to parallel the running top program.
 
545
   .
 
546
   .  If you decide to proceed with translation, do the following
 
547
   .  lines only, taking care not to disturbe the tilde + number.
 
548
   .
 
549
   .  Simulated screen excerpt:
 
550
   .     --> "   Tasks:~3  64 ~2total,~3   2 ~3running,~3  62
 
551
   .     --> "   %%Cpu(s):~3  76.5 ~2user,~3  11.2 ~2system,~
 
552
   .     --> "   ~1 Nasty Message! ~4  -or-  ~1Input Prompt~5
 
553
   .
 
554
   .     --> "   available toggles: ~1B~2 =disable bold globa
 
555
   .     --> "       ~1z~2 =color/mono (~1%s~2), ~1b~2 =tasks
 
556
   .
 
557
   .     --> "Select ~1target~2 as upper case letter:\n"
 
558
   .     --> "   S~2 = Summary Data,~1  M~2 = Messages/Prompt
 
559
   .     --> "   H~2 = Column Heads,~1  T~2 = Task Informatio
 
560
   .     --> "Select ~1color~2 as number:\n"
 
561
   .     --> "   0~2 = black,~1  1~2 = red,    ~1  2~2 = gree
 
562
   .     --> "   4~2 = blue, ~1  5~2 = magenta,~1  6~2 = cyan
 
563
   . */
 
564
   Uniq_nlstab[COLOR_custom_fmt] = _(""
 
565
      "Help for color mapping~2 - %s\n"
 
566
      "current window: ~1%s~6\n"
 
567
      "\n"
 
568
      "   color - 04:25:44 up 8 days, 50 min,  7 users,  load average:\n"
 
569
      "   Tasks:~3  64 ~2total,~3   2 ~3running,~3  62 ~2sleeping,~3   0 ~2stopped,~3\n"
 
570
      "   %%Cpu(s):~3  76.5 ~2user,~3  11.2 ~2system,~3   0.0 ~2nice,~3  12.3 ~2idle~3\n"
 
571
      "   ~1 Nasty Message! ~4  -or-  ~1Input Prompt~5\n"
 
572
      "   ~1  PID TTY     PR  NI %%CPU    TIME+   VIRT SWAP S COMMAND    ~6\n"
 
573
      "   17284 ~8pts/2  ~7  8   0  0.0   0:00.75  1380    0 S /bin/bash   ~8\n"
 
574
      "   ~1 8601 pts/1    7 -10  0.4   0:00.03   916    0 R color -b -z~7\n"
 
575
      "   11005 ~8?      ~7  9   0  0.0   0:02.50  2852 1008 S amor -sessi~8\n"
 
576
      "   available toggles: ~1B~2 =disable bold globally (~1%s~2),\n"
 
577
      "       ~1z~2 =color/mono (~1%s~2), ~1b~2 =tasks \"bold\"/reverse (~1%s~2)\n"
 
578
      "\n"
 
579
      "1) Select a ~1target~2 as an upper case letter, ~1current target~2 is ~1 %c ~4:\n"
 
580
      "   S~2 = Summary Data,~1  M~2 = Messages/Prompts,\n"
 
581
      "   H~2 = Column Heads,~1  T~2 = Task Information\n"
 
582
      "2) Select a ~1color~2 as a number, ~1current color~2 is ~1 %d ~4:\n"
 
583
      "   0~2 = black,~1  1~2 = red,    ~1  2~2 = green,~1  3~2 = yellow,\n"
 
584
      "   4~2 = blue, ~1  5~2 = magenta,~1  6~2 = cyan, ~1  7~2 = white\n"
 
585
      "\n"
 
586
      "3) Then use these keys when finished:\n"
 
587
      "   'q' to abort changes to window '~1%s~2'\n"
 
588
      "   'a' or 'w' to commit & change another, <Enter> to commit and end ");
 
589
 
 
590
   Uniq_nlstab[FIELD_header_fmt] = _(""
 
591
      "Fields Management~2 for window ~1%s~6, whose current sort field is ~1%s~2\n"
 
592
      "   Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,\n"
 
593
      "   'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!\n");
 
594
 
 
595
   Uniq_nlstab[STATE_line_1_fmt] = _("%s:~3"
 
596
      " %3u ~2total,~3 %3u ~2running,~3 %3u ~2sleeping,~3 %3u ~2stopped,~3 %3u ~2zombie~3\n");
 
597
 
 
598
   Uniq_nlstab[STATE_lin2x4_fmt] = _("%%%s~3"
 
599
      " %#5.1f  ~2user,~3 %#5.1f  ~2system,~3 %#5.1f  ~2nice,~3 %#5.1f  ~2idle~3\n");
 
600
 
 
601
   Uniq_nlstab[STATE_lin2x5_fmt] = _("%%%s~3"
 
602
      " %#5.1f  ~2user,~3 %#5.1f  ~2system,~3 %#5.1f  ~2nice,~3 %#5.1f  ~2idle,~3 %#5.1f  ~2IO-wait~3\n");
 
603
 
 
604
/* Translation Hint: Only the following abbreviations need be translated
 
605
   .                 us = user, sy = system, ni = nice, id = idle, wa = wait,
 
606
   .                 hi hardware interrupt, si = software interrupt */
 
607
   Uniq_nlstab[STATE_lin2x6_fmt] = _("%%%s~3"
 
608
      " %#5.1f ~2us,~3 %#5.1f ~2sy,~3 %#5.1f ~2ni,~3 %#5.1f ~2id,~3 %#5.1f ~2wa,~3 %#5.1f ~2hi,~3 %#5.1f ~2si~3\n");
 
609
 
 
610
/* Translation Hint: Only the following abbreviations need be translated
 
611
   .                 us = user, sy = system, ni = nice, id = idle, wa = wait,
 
612
   .                 hi hardware interrupt, si = software interrupt, st = steal time */
 
613
   Uniq_nlstab[STATE_lin2x7_fmt] = _("%%%s~3"
 
614
      "%#5.1f ~2us,~3%#5.1f ~2sy,~3%#5.1f ~2ni,~3%#5.1f ~2id,~3%#5.1f ~2wa,~3%#5.1f ~2hi,~3%#5.1f ~2si,~3%#5.1f ~2st~3\n");
 
615
 
 
616
/* Translation Hint: Only the following need be translated
 
617
   .                 abbreviations: Mem = physical memory/ram, Swap = the linux swap file
 
618
   .                 words:         total, used, free, buffers, cached */
 
619
   Uniq_nlstab[MEMORY_lines_fmt] = _(""
 
620
      "%s Mem: ~3 %9.9s~2total,~3 %9.9s~2used,~3 %9.9s~2free,~3 %9.9s~2buffers~3\n"
 
621
      "%s Swap:~3 %9.9s~2total,~3 %9.9s~2used,~3 %9.9s~2free,~3 %9.9s~2cached~3\n");
 
622
 
 
623
   Uniq_nlstab[INSP_hdrsels_fmt] = _(""
 
624
      "Inspection~2 Pause at: pid ~1%d~6 running ~1%s~6 as user ~1%s~6\n"
 
625
      "Use~2:  left/right then <Enter> to ~1select~5 an option; 'q' or <Esc> to ~1end~5 !\n"
 
626
      "Options~2: ~1%s\n");
 
627
 
 
628
   Uniq_nlstab[INSP_hdrview_fmt] = _(""
 
629
      "Inspection~2 View at: ~1%s~3, ~1%s~3, ~1%s~3.  Locating: ~1%s~6\n"
 
630
      "Use~2:  left/right/up/down/etc to ~1navigate~5 the output; 'L'/'&' to ~1locate~5/~1next~5.\n"
 
631
      "Or~2:   <Enter> to ~1select another~5; 'q' or <Esc> to ~1end~5 !\n");
 
632
}
 
633
 
 
634
 
 
635
        /*
 
636
         * This function must be called very early at startup, before
 
637
         * any other function call, and especially before any changes
 
638
         * have been made to the terminal if VALIDATE_NLS is defined!
 
639
         *
 
640
         * The gettext documentation suggests that alone among locale
 
641
         * variables LANGUAGE=ll_CC may be abbreviated as LANGUAGE=ll
 
642
         * to denote the language's main dialect.  Unfortunately this
 
643
         * does not appear to be true.  One must specify the complete
 
644
         * ll_CC.  Optionally, a '.UTF-8' or '.uft8' suffix, as shown
 
645
         * in the following examples, may also be included:
 
646
         *    export LANGUAGE=ll_CC          # minimal requirement
 
647
         *    export LANGUAGE=ll_CC.UTF-8    # optional convention
 
648
         *    export LANGUAGE=ll_CC.utf8     # ok, too
 
649
         *
 
650
         * Additionally, as suggested in the gettext documentation, a
 
651
         * user will also have to export an empty LC_ALL= to actually
 
652
         * enable any translations.
 
653
         */
 
654
void initialize_nls (void) {
 
655
#ifdef VALIDATE_NLS
 
656
   static const char *nls_err ="\t%s_nlstab[%d] == NULL\n";
 
657
   int i;
 
658
 
 
659
   setlocale (LC_ALL, "");
 
660
   bindtextdomain(PACKAGE, LOCALEDIR);
 
661
   textdomain(PACKAGE);
 
662
 
 
663
   memset(Head_nlstab, 0, sizeof(Head_nlstab));
 
664
   memset(Desc_nlstab, 0, sizeof(Desc_nlstab));
 
665
   build_two_nlstabs();
 
666
   for (i = 0; i < P_MAXPFLGS; i++) {
 
667
      if (!Head_nlstab[i]) {
 
668
         fprintf(stderr, nls_err, "Head", i);
 
669
         exit(1);
 
670
      }
 
671
      if (!Desc_nlstab[i]) {
 
672
         fprintf(stderr, nls_err, "Desc", i);
 
673
         exit(1);
 
674
      }
 
675
   }
 
676
   memset(Norm_nlstab, 0, sizeof(Norm_nlstab));
 
677
   build_norm_nlstab();
 
678
   for (i = 0; i < norm_MAX; i++)
 
679
      if (!Norm_nlstab[i]) {
 
680
         fprintf(stderr, nls_err, "Norm", i);
 
681
         exit(1);
 
682
      }
 
683
   memset(Uniq_nlstab, 0, sizeof(Uniq_nlstab));
 
684
   build_uniq_nlstab();
 
685
   for (i = 0; i < uniq_MAX; i++)
 
686
      if (!Uniq_nlstab[i]) {
 
687
         fprintf(stderr, nls_err, "Uniq", i);
 
688
         exit(1);
 
689
      }
 
690
#else
 
691
   setlocale (LC_ALL, "");
 
692
   bindtextdomain(PACKAGE, LOCALEDIR);
 
693
   textdomain(PACKAGE);
 
694
 
 
695
   build_two_nlstabs();
 
696
   build_norm_nlstab();
 
697
   build_uniq_nlstab();
 
698
#endif
 
699
}