Previous: Formatting Numbers, Up: Locales
Some non GUI programs ask a yes-or-no question. If the messages (especially the questions) are translated into foreign languages, be sure that you localize the answers too. It would be very bad habit to ask a question in one language and request the answer in another, often English.
The GNU C library contains rpmatch
to give applications easy
access to the corresponding locale definitions.
The function
rpmatch
checks the string in response whether or not it is a correct yes-or-no answer and if yes, which one. The check uses theYESEXPR
andNOEXPR
data in theLC_MESSAGES
category of the currently selected locale. The return value is as follows:
1
- The user entered an affirmative answer.
0
- The user entered a negative answer.
-1
- The answer matched neither the
YESEXPR
nor theNOEXPR
regular expression.This function is not standardized but available beside in GNU libc at least also in the IBM AIX library.
This function would normally be used like this:
... /* Use a safe default. */ _Bool doit = false; fputs (gettext ("Do you really want to do this? "), stdout); fflush (stdout); /* Prepare thegetline
call. */ line = NULL; len = 0; while (getline (&line, &len, stdout) >= 0) { /* Check the response. */ int res = rpmatch (line); if (res >= 0) { /* We got a definitive answer. */ if (res > 0) doit = true; break; } } /* Free whatgetline
allocated. */ free (line);
Note that the loop continues until an read error is detected or until a definitive (positive or negative) answer is read.