· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Gettext-KLDP

GETTEXT Howto

GETTEXT Howto

À̽ÂÀ±

INZEN

        
      

$Date $

gettext ¼Ò°³¿Í °£´ÜÇÑ »ç¿ë¹ý

Copyright

ÀÌ ¹®¼­´Â GNU Free Documentation License ¹öÀü 1.1 ȤÀº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼­ ¹ßÇàÇÑ ÀÌÈÄ ÆÇÀÇ ±ÔÁ¤¿¡ µû¸£¸ç ÀúÀ۱ǿ¡ ´ëÇÑ º» »çÇ×ÀÌ ¸í½ÃµÇ´Â ÇÑ ¾î¶°ÇÑ Á¤º¸ ¸Åü¿¡ ÀÇÇÑ º»¹®ÀÇ ÀüÀ糪 ¹ßÃéµµ ¹«»óÀ¸·Î Çã¿ëµË´Ï´Ù.

고친 과정
고침 2.02002³â 11¿ù 5ÀÏ고친이 sylee
¹öÁ¯ 2.0
$Revision : $

1. gettext ¼Ò°³

»ç¿ëÀÚÀÇ locale ¿¡ µû¶ó ƯÁ¤ message output ¿¡ ´ëÇÑ ´Ù±¹¾î 󸮸¦ ÇÒ ¼ö ÀÖ´Â gettext ¿¡ ´ëÇØ »ìÆ캻´Ù.

À̸¦ À§ÇØ ¸ÕÀú ¸Þ¼¼Áö°¡ ó¸®µÉ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¹ýÀ» shell script, C code ¿¡¼­ »ìÆ캸°í, ±× ÈÄ¿¡ º¯È¯µÉ ¸Þ¼¼Áö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» »ìÆ캻´Ù.


2. shell script ¿¡¼­ÀÇ gettext »ç¿ë

shell ¿¡¼­ÀÇ »ç¿ë¹ýÀ» »ìÆì º»´Ù.

¿¹Á¦ ÇÁ·Î±×·¥À¸·Î Hello ¶ó´Â shell script ¸¦ ÀÛ¼ºÇÑ´Ù. ´Ü¼øÈ÷ Hello ¿Í World! ¶ó°í Ãâ·ÂÇÏ°Ô µÇ¾î ÀÖ´Ù. À̸¦ locale ¿¡ µû¶ó Ãâ·ÂÇϱâ À§ÇØ gettext ·Î µÑ·¯½Î¼­ echo ½ÃÅ°°í ÀÖ´Ù. shell script ¿¡¼­ Ưº°È÷ ´Ù¸¥ ºÎºÐÀº ¼Ò½ºÃ¹ ºÎºÐ¿¡ TEXTDOMAINDIR °ú TEXTDOMAIN À» Àüü ȯ°æº¯¼ö·Î export ½ÃŲ´Ù´Â °ÍÀÌ´Ù.

#! /bin/sh
# Hello

TEXTDOMAINDIR=/usr/local/share/locale
TEXTDOMAIN=Hello
export TEXTDOMAINDIR
export TEXTDOMAIN

echo "$(gettext -s "Hello")"
echo "$(gettext -s "World!")"

3. C code ¿¡¼­ÀÇ gettext »ç¿ë

C code ¿¡¼­ÀÇ »ç¿ë¹ýÀ» »ìÆ캻´Ù.

¿¹Á¦ ÇÁ·Î±×·¥À¸·Î Hello.c ¶ó´Â C code ¸¦ ÀÛ¼ºÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº Greeting, Hello, World ¶ó°í Ãâ·ÂÀ» Çϴµ¥ °¢°¢ÀÇ message µéÀ» gettext ¸¦ ÀÌ¿ëÇÏ¿© »ç¿ëÀÚ locale ¿¡ µû¶ó Ãâ·ÂÅä·Ï ÇÑ´Ù.


#include <libintl.h>
#include <locale.h>
#include <stdio.h>

int
main(void)
{
	/* ÇöÀç È£½ºÆ®ÀÇ locale À» »ç¿ëÇÑ´Ù. */
        setlocale(LC_ALL,"");

	/* Hello ÀÇ message table À» /usr/local/share/locale ¾Æ·¡¿¡¼­ ãµµ·Ï ÇÑ´Ù. */
        bindtextdomain("Hello", "/usr/local/share/locale");
        textdomain("Hello");
	
        printf("original message : %s\n", "Greeting");
        printf("gettext trans  : %s\n", gettext("Greeting"));

        printf("original message : %s\n", "Hello");
        printf("gettext trans  : %s\n", gettext("Hello"));

        printf("original message : %s\n", "World!");
        printf("gettext trans  : %s\n", gettext("World!"));

        return 0;
}

string À» gettext ·Î µÑ·¯½Î°Ô µÇ¸é µÑ·¯½ÎÀÎ message °¡ ÇØ´ç locale¿¡ ÇØ´çÇÏ´Â message table À» ÂüÁ¶ÇÏ¿© Ãâ·ÂÇÏ°Ô µÈ´Ù. ¿©±â¼­ ÂüÁ¶ÇÒ message table À» ÇÁ·Î±×·¥¿¡ ¿¬°á½ÃÅ°±â À§Çؼ­ bindtextdomain À» »ç¿ëÇÏ¿´´Ù. À§ ¿¹Á¦¿¡¼­´Â À§ Äڵ带 Hello ¶ó´Â À̸§À¸·Î ºôµåÇÏ°í, ÀÌÀÇ message table Àº /usr/local/share/locale ¾Æ·¡¿¡¼­ textdomain ¿¡¼­ ÁöÁ¤ÇÑ Hello ÇÁ·Î±×·¥ÀÇ message table À» ÂüÁ¶Çϵµ·Ï ÇÑ°ÍÀÌ´Ù.

¸¸¾à ÇØ´çÇÏ´Â message table ÀÌ ¾ø°Å³ª Á¤ÀÇµÈ °ªÀÌ ¾øÀ» °æ¿ì¿¡´Â º¯È¯ ¾øÀÌ ¿ø·¡ message°¡ Ãâ·ÂµÈ´Ù.


4. gettext message table ÀÛ¼º¹ý

gettext ¸¦ ÅëÇØ º¯È¯µÉ message µéÀ» ´ã´Â message table À» ÀÛ¼ºÇÏ´Â ¿ä·ÉÀ» »ìÆ캻´Ù.

gettext´Â Á¤ÇØÁø message ¸¦ ¹Ì¸® Á¤ÇØÁø message ·Î ¹Ù²Ù¾î ÁÖ´Â ¿ªÇÒÀ» ÇÒ »ÓÀÌ´Ù. µû¶ó¼­ ¿øº» message ¿Í ÀÌ°ÍÀÌ ¾î¶² message ·Î º¯È¯µÉ Áö¸¦ ³ªÅ¸³»¾î ÁÖ´Â table ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌÀÇ ÃʾÈÀÌ µÇ´Â °ÍÀÌ *.po ¿¡ ÇØ´çÇÏ´Â ÆÄÀÏÀÌ´Ù.

ÀÌ ÃʾÈÀ» Á÷Á¢ ÀÛ¼ºÇÒ ¼öµµ ÀÖÁö¸¸ xgettext ¶ó´Â ÇÁ·Î±×·¥ÀÌ ±× ÃʾÈÀ» ¸¸µé¾î ÁØ´Ù.

# shell script
xgettext Hello
# C code
xgettext Hello.c

xgettext ¸¦ »ç¿ëÇÏ°í ³ª¸é messages.po ¶ó´Â ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ÀÌ´Â GNU version ÀÇ gettext ÀÎÁö ¾Æ´ÑÁö¿¡ µû¶ó ¾à°£ ´Ù¸£Áö¸¸ »À´ë´Â ºñ½ÁÇÏ´Ù. ÀÌ po ÆÄÀÏÀº º¸ÅëÀÇ text ÆÄÀÏÀÌ°í, msgid ¿Í msgstr ÀÇ Â¦À¸·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç, msgid °¡ À§ ¿¹Á¦ ÇÁ·Î±×·¥ ¼Ó¿¡¼­ gettext ·Î µÑ·¯½ÎÀÎ message µéÀÌ´Ù. ±×¸®°í msgstr ÀÌ º¯È¯µÉ ¸Þ¼¼Áö¸¦ ´ã°Ô µÈ´Ù. xgettext ¸¦ ÇÏ°í ³ª¸é msgid µéÀÌ ¸ðµÎ ÃßÃâµÇ¸ç, »ç¿ëÀÚ´Â ´ÜÁö msgstr ºÎºÐÀÇ ºó°÷¸¸ ä¿öÁÖ¸é µÈ´Ù. ´ÙÀ½°ú °°ÀÌ Ã¤¿öº¸ÀÚ.

¾Õ ÀýÀÇ ÇÁ·Î±×·¥µé¿¡¼­ Hello ¿Í World! ¸¦ gettext °¡ º¯È¯Çϱâ À§Çؼ­´Â ¾Æ±î »ý¼ºµÈ po ÆÄÀÏÀÇ msgstrºÎºÐÀ» ¾Æ·¡Ã³·³ ¼öÁ¤ÇÏ¸é µÈ´Ù.

msgid "Hello"
msgstr "Çï·Î"

msgid "World!"
msgstr "¿ùµå!"

ÀÌÁ¦ ÀÌ·¸°Ô ÀÛ¼ºµÈ ÆÄÀÏÀ» msgfmt ¶ó´Â ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© gettext °¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â ÆÄÀÏÀÎ moÆÄÀÏ·Î º¯È¯ÇÑ´Ù. ÀÌ moÆÄÀÏÀº binary Çü½ÄÀÇ ÆÄÀÏÀÌ´Ù.

msgfmt -o Hello.mo messages.po

Ãâ·Â ÆÄÀÏ À̸§À» Hello.mo ¶ó ÇÑ ÀÌÀ¯´Â »ý¼ºµÉ mo ÆÄÀÏÀÇ À̸§À» ÇÁ·Î±×·¥ÀÇ À̸§°ú °°ÀÌ Çϱâ À§Çؼ­ÀÌ´Ù. ÀÌÁ¦ À̸¦ /usr/local/share/locale/ko/LC_MESSAGE/ ¾Æ·¡¿¡ ³Ö¾î µÎ¸é µÈ´Ù. Çѱ¹¾î·Î locale ÀÌ ¼³Á¤µÇ¾î ÀÖ´Ù¸é ...locale/ko/ ¾Æ·¡¸¦ ÂüÁ¶ÇÏ°Ô µÈ´Ù. ¸¸¾à ÇÁ¶û½º¾î·Î message translation À» ÇÏ°íÀÚ ÇÒ °æ¿ì¿¡´Â ÇØ´ç .po ÆÄÀÏÀÇ msgstr À» ºÒ¾î·Î ÀÛ¼ºÇÑ´Ù. ±×¸®°í À̸¦ msgfmt ·Î Hello.mo ·Î ¸¸µç ÈÄ ¸¸µé¾îÁø mo ÆÄÀÏÀ» /usr/local/share/locale/fr/LC_MESSAGE/ ¾Æ·¡¿¡ ³Ö¾î µÎ¸é µÈ´Ù. ½Ã½ºÅÛ ·ÎÄÉÀÏ¿¡ µû¶ó ¿µ¾î, Çѱ¹¾î, ȤÀº ºÒ¾î message °¡ Ãâ·ÂµÈ´Ù.


5. Non GNU vs GNU

GNU version ÀÇ gettext ÀÎÁö ¾Æ´ÑÁö¿¡ µû¶ó Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù°í ¾ð±ÞÇß´Ù. ½ÇÁ¦·Î´Â ÀÌ Â÷ÀÌ ¶§¹®¿¡ message º¯È¯ÀÌ ¾È µÇ±âµµ ÇÑ´Ù.

±× Â÷ÀÌÁ¡Àº messages.po ÆÄÀÏÀÇ format ¿¡ ÀÖ´Ù. non GNU version ÀÇ gettext ¸¦ »ç¿ëÇÏ°Ô µÉ ¶§¸é ¾Õ Àý¿¡¼­ ÀÛ¼ºÇÑ °Íó·³ msgid, msgstr ÀÇ ½ÖÀ¸·Îµµ ÃæºÐÇÏ´Ù. ±×·¸Áö¸¸ GNU version ÀÇ gettext ¿¡¼­´Â À§ ó·³ Çؼ­´Â ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ¾ø´Ù.

xgettext ·Î ¸¸µé¾îÁø messages.po ¸¦ º¸ÀÚ

non GNU messages.po

domain "messages"
# File:Hello.c, line:22, textdomain("Hello");
msgid  "Greeting"
msgstr
msgid  "Hello"
msgstr
msgid  "World!"
msgstr

GNU messages.po

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2002-11-13 15:09+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: Hello.c:26
msgid "Greeting"
msgstr ""

#: Hello.c:29
msgid "Hello"
msgstr ""

#: Hello.c:32
msgid "World!"
msgstr ""

GNU messages.po ¿¡¼­´Â »ç¿ëÀÚ°¡ ¼öÁ¤ÇØ ÁÖ¾î¾ß ÇÒ »çÇ×µéÀÌ ¸î °¡Áö ´õ ÀÖ´Ù. ±âº» Á¤º¸ ÀÌ¿Ü¿¡ CHARSET À» ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. Çѱ¹¾îÀÏ °æ¿ì´Â euc-KR ·Î ÁöÁ¤ÇØ ÁÖ¾î¾ß ¾ÈÀüÇÏ´Ù.

GNU ÀÌ³Ä ¾Æ´Ï³Ä¿¡ µû¶ó ÀÛ¼º¹ýÀº ±×´ÙÁö ´Ù¸£Áö ¾Ê´Ù. Áß¿äÇÑ °ÍÀº ºôµå ¹æ¹ýÀÌ´Ù. GNU gettext ¸¦ »ç¿ëÇÑ´Ù¸é xgettext, msgfmt µµ GNU version À» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. non GNU gettext ¸¦ »ç¿ëÇÑ´Ù¸é ¿ª½Ã xgettext, msgfmt µµ gettext ¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. ±×¸®°í C code ÀÏ °æ¿ì¿¡´Â ºôµåÇÒ ¶§ ¸µÅ©µÉ ¶óÀ̺귯¸®¸¦ Á÷Á¢ ¸í½ÃÇØ ÁÖ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù. (GNU À϶§´Â GNU ¶óÀ̺귯¸®, non GNU ¶óÀ̺귯¸®ÀÏ ¶§´Â ÇØ´ç ¶óÀ̺귯¸®)

# example
shell> gcc Hello.c -o Hello -lintl

6. ½ÇÇà°á°ú

ÀÌÁ¦ Hello ¶ó´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ ½ÇÇàµÇ°í Àִ ȯ°æÀÇ locale¿¡ µû¶ó xgettext, msgfmt ¿¡ ÀÇÇØ ¸¸µé¾îÁø, Hello.mo ¸¦ ÂüÁ¶ÇÒ °ÍÀÎÁö ȤÀº ±×³É ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ°Ô µÈ´Ù. ¼³Á¤Çß´ø message °¡ Ãâ·ÂµÇ°Ô µÈ´Ù. C program ÀÇ ½ÇÇà ¿¹ÀÌ´Ù.

original message : Greeting
gettext trans  : Greeting
original message : Hello
gettext trans  : Çï·Î
original message : World!
gettext trans  : ¿ùµå!

Greeting Àº message table ¿¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î ±×³É Greeting ÀÌ ÂïÈ÷°Ô µÈ´Ù. ³ª¸ÓÁö message µéÀº message table ¿¡ Á¤ÀÇµÈ msgstr °ªÀ» ÂüÁ¶ÇÏ¿© Ãâ·ÂÇÏ°í ÀÖ´Ù.


7. Miscellaneous

  • ȯ°æº¯¼ö Áß LC_MESSAGES °¡ C ·Î Á¤ÀǵǾîÀÖ´Ù¸é ¸Þ¼¼Áö ÀüȯÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. À̸¦ º¯È¯ÇÏ°íÀÚ ÇÏ´Â locale ·Î ¹Ù²Ù¾î ÁÖ´Â °ÍÀÌ ÁÁ´Ù. setlocale(LC_MESSAGES, "ko_KR");

  • non GNU ÀÏ ¶§ÀÇ *.po ´Â msgid, msgstr ÀÇ ½ÖÀ¸·Î¸¸ Á÷Á¢ ÀÛ¼ºÇÏ¿©µµ µÈ´Ù.

  • GNU gettext ¸¦ »ç¿ëÇÒ ¶§¿¡´Â ÈçÈ÷ gettext(String) À» _(String) À¸·Î define Çؼ­ »ç¿ëÇÑ´Ù. À̶§¿¡´Â xgettext -k_ test.c·Î poÆÄÀÏÀ» »ý¼ºÇÏ¸é µÈ´Ù.


ID
Password
Join
He who has imagination without learning has wings but no feet.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-04-12 13:49:30
Processing time 0.0020 sec