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

You are not allowed to 'info'


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
Enjoy your life; be pleasant and gay, like the birds in May.


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.0013 sec