#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
gettextgettext13.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_NLSgettext.h13.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_coloranimalgettext()Π§ΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ, Π²Π΅ΡΡΠΈΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π°
printf()$%printf("%2$s, %1s\n", "world", "hello")Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΎΡΡΡΠ΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ 1 ΠΈ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΌΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΡΡ ΡΡΡΠΎΠΊΡ. ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ '
hello, worldGLIBC ΠΈ Solaris ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΠ°ΡΡΡ POSIX, Π΅ΡΠ»ΠΈ
printf()ΠΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ
printf()β’Β Π€ΠΎΡΠΌΠ° Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠΎΡΠΌΠΎΠΉ Π±Π΅Π· Π½Π΅Π΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΅Π³ΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ,
%%β’Β ΠΡΠ»ΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ N-ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄ΠΎ N. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π½Π΅Π²Π΅ΡΠ½ΠΎ
printf("%3$s %1$s\n", "hello", "cruel", "world")β’Β Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. ΠΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ΅Π³Π΄Π° Π΄Π²ΠΈΠΆΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ½Π° ΡΠΊΠΎΡΠ΅Π΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ,
"The %s %s looks at you enquiringly.\n""Le %2$s %1$s te regarde d'un aire interrogateur.\n"(ΠΠ°ΠΆΠ΅ ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π΅Π½: Π°ΡΡΠΈΠΊΠ»Ρ Β«LeΒ» ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ΄. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΡΡΠ΄Π½Π°Ρ Π·Π°Π΄Π°ΡΠ°!)
13.3.6. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π² ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅
ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (message catalog). ΠΡΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅
gettext()ΠΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ, Π° Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ
bindtextdomain()gettext()#include <libintl.h> /* GLIBC */char *bindtextdomain(const char *domainname,