if (nwords == l)
printf("one word misspelled\n");
else
printf("%d words misspelled\n", nwords);
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
#include <libintl.h> /* GLIBC */
char *ngettext(const char *msgid, const char *msgid_plural,
unsigned long int n);
char *dngettext(const char *domainname, const char *msgid,
const char *msgid_plural, unsigned long int n);
char *dcngettext(const char *domainname, const char *nmgid,
const char *msgid_plural, unsigned long int n,
int category)
ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° msgid, ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ:
const char *msgid_plural
Π‘ΡΡΠΎΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. ΠΡΠΊΠΎΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ.
unsigned long int n
Π§ΠΈΡΠ»ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΡΠ»Π°.[145] Π€ΡΠ½ΠΊΡΠΈΡ ngettext() (ΠΈ Π΅Π΅ Π²Π°ΡΠΈΠ°Π½ΡΡ) ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ n ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ msgid. ΠΡΠ»ΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΄Π»Ρ msgid, ΠΈΠ»ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡ Π² Π»ΠΎΠΊΠ°Π»ΠΈ Β«Π‘Β», ngettext() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ msgid, Π΅ΡΠ»ΠΈ 'n == 1'; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ msgid_plural. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ ΡΠ»ΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
printf("%s\n", ngettext("%d word misspelled", "%d words misspelled", nwords), nwords);
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ nwords Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ngettext() Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ printf() Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ, Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΠΌΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Ρ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ΠΈΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ 'n++'! Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ngettext() ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Ρ Π½Π° ΡΡΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
13.3.4. Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ gettext()
ΠΡΠ·ΠΎΠ² gettext() Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»ΡΠΆΠΈΡ Π΄Π²ΡΠΌ ΡΠ΅Π»ΡΠΌ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² Π³Π»Π°Π²Π½ΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½ ΡΠ»ΡΠΆΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΎΡΠΌΠ΅ΡΠΊΠΈ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ. Π£ΡΠΈΠ»ΠΈΡΠ° xgettext ΡΠΈΡΠ°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π²ΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ. (ΠΠ°Π»Π΅Π΅ Π² Π³Π»Π°Π²Π΅ ΠΌΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ.)
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ:
static char *copyrights[] = {
"Copyright 2004, Jane Programmer",
"Permission is granted ...",
/* ... ΠΠ΄Π΅ΡΡ ΠΊΡΡΠ° Π»Π΅Π³Π°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ */
NULL
};
void copyright(void) {
int i;
for (i = 0; copyrights[i] != NULL, i++)
printf("%s\n", gettext(copyrights[i]));
}
ΠΠ΄Π΅ΡΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΡΡΠΎΠΊ ΠΎΠ± Π°Π²ΡΠΎΡΡΠΊΠΈΡ ΠΏΡΠ°Π²Π°Ρ , Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ xgettext ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π½Π°ΠΉΡΠΈ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ? ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ ΠΈΡ Π² Π²ΡΠ·ΠΎΠ²Ρ gettext(), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
/* ΠΠΠΠ₯ΠΠ ΠΠΠ: Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ */
static char *copyrights[] = {
gettext("Copyright 2004, Jane Programmer"),
gettext("Permission is granted ..."),
/* ... ΠΠ΄Π΅ΡΡ ΠΊΡΡΠ° Π»Π΅Π³Π°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ */
NULL
};
13.3.4.1. ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: "gettext.h"
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ GNU gettext Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Unix, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ GNU/Linux. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ GNU/Linux.
ΠΠΎΠΌΠ΅ΡΠΊΠ° ΡΡΡΠΎΠΊ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° ΡΠ°Π³Π°. ΠΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° gettext.h, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠΌ GNU gettext. ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΏΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ gettext() Π² Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ :
#define ENABLELNLS 1 /* ENABLE_NLS Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ true, ΡΡΠΎΠ±Ρ gettext() ΡΠ°Π±ΠΎΡΠ°Π»Π° */
#include "gettext.h" /* ΠΠΌΠ΅ΡΡΠΎ <libintl.h> */
ΠΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡ ENABLE_NLS Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½[146] ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² Π½ΠΎΠ»Ρ, gettext.h ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅Ρ Π²ΡΠ·ΠΎΠ²Ρ gettext() Π² ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ gettext(), Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π½ΠΈ GNU gettext, Π½ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΈΡ Π²Π΅ΡΡΠΈΡ. ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΎ, ΡΡΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΎΡ:
/* ΠΡΠ·ΠΎΠ² ΠΏΡΠ΅Π²Π΄ΠΎΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΠΆΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΡΠΊΠ΅ΡΠ° Π΄Π»Ρ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π½Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ²
gettext(). ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ
ΠΌΠ΅ΡΡΠ΅ ΠΊΠΎΠ΄Π°. ΠΡΠ³ΡΠΌΠ΅Π½Ρ String Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
Π‘ΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° Π½Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ 'char[]' ΠΈΠ»ΠΈ 'const char[]'. */
#define gettext_noop(String) String
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ΅Π½. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ ΡΠ°Π³Ρ. ΠΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#define ENABLE_NLS 1
#include "gettext.h"
static char copyrights[] =
gettext_noop("Copyright 2004, Jane Programmer\n"
"Permission is granted ...\n"
/* ... ΠΠ΄Π΅ΡΡ ΠΊΡΡΠ° Π»Π΅Π³Π°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ */
"So there.");
void copyright(void) {
printf("%s\n", gettext(copyrights));
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΄Π²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , copyrights ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ ΡΡΡΠΎΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ C. ΠΡΠ° ΠΏΡΠΎΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° Π·Π°ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² Π²ΡΠ·ΠΎΠ² gettext_noop(). ΠΠ°ΠΌ Π½ΡΠΆΠ½Π° ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°, ΡΡΠΎΠ±Ρ Π»Π΅Π³Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
ΠΡΠΎΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² copyright().
Π ΡΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΡΠΌΠ°Π΅ΡΠ΅: Β«ΠΠΎΡ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π½Π°Π±ΠΈΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· 'gettext(...)' Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΒ». ΠΡ, Π²Ρ ΠΏΡΠ°Π²Ρ. ΠΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π»ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ Π½Π°Π±ΠΈΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» gettext.h, ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ GNU gettext ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΄Π²Π° Π΄ΡΡΠ³ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ° Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ _() ΠΈ N_() ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#define ENABLE_NLS 1
#include "gettext.h"
#define _(msgid) gettext(msgid)
#define N_(msgid) msgid
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ gettext() Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΡΠ΅ΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ΅ΡΡΡΡΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ:
#include <stdio.h>
#define ENABLE_NLS 1
#include "gettext.h"
#define _(msgid) gettext(msgid)
#define N_(msgid) msgid
...
static char copyrights[] =
N_("Copyright 2004, Jane Programmer\n"
"Permission is granted ...\n"
/* ... ΠΠ΄Π΅ΡΡ ΠΊΡΡΠ° Π»Π΅Π³Π°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ */
"So there.");
void copyright(void) {
printf("%s\n", gettext(copyrights));
}
int main(void) {
setlocale(LC_ALL, ""); /* gettext.h gets <locale.h> for us too */
printf("%s\n", _("hello, world"));
copyright();
exit(0);
}
ΠΡΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ ΡΠΊΡΠΎΠΌΠ½Ρ, ΠΈ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²ΡΠ΅ GNU ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ GNU gettext, ΡΠ»Π΅Π΄ΡΡΡ ΡΡΠΎΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GNU gettext, Π²Π°ΠΌ ΡΠΎΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ.
13.3.4.2. Π’ΠΎΠ»ΡΠΊΠΎ GLIBC: <libintl.h>
ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΠΈΡΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ GLIBC, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΠΎΡ ΠΎΠΆΠ΅, Π½ΠΎ ΠΏΡΠΎΡΠ΅:
#include <stdio.h>
#include <libintl.h>
#define _(msgid) gettext(msgid)
#define N_(msgid) msgid
/* ... Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎ ΠΆΠ΅ ... */
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°Π½Π΅Π΅, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» <libintl.h> ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ gettext() ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ _() ΠΈ N_(), Π½ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ENABLE_NLS ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΉΠ»Π° gettext.h.
13.3.5. ΠΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ printf()
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»ΠΎΠ², Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄Π»Ρ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΠΏΡΠΈΠ»Π°Π³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ, Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ β ΠΏΠΎΡΠ»Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
char *animal_color, *animal;
if (...) {
animal_color = _("brown");
animal = _("cat");
} else if (...) {
...
} else {
...
}
printf(_("the %s %s looks at you enquiringly.\n"), animal_color, color);
ΠΠ΄Π΅ΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°, animal_color ΠΈ animal Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π²ΡΠ·ΠΎΠ² gettext(). ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²Π΅ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.