오픈솔라리스 ON(OS/Net) 번역이란 무엇입니까?

오픈솔라리스 ON(OS/Net) 번역은 오픈솔라리스 운영체제의 코어 및 네트워킹 컴포넌트들의 인터페이스 언어를 영어에서 유저의 타겟 언어로 바꿈으로써 비영어권 사용자들이 사용 가능하도록 만드는 것을 뜻합니다.

ON 의 서로 다른 컴포넌트들은 무엇이 있습니까?

오픈솔라리스는 많은 수의 소프트웨어 레이어를 가지고 있지만 이 FAQ 는 ON 라이브러리 및 유틸리티에 집중 합니다. 다음의 섹션은 메세지를 번역함으로써 로컬라이제이션이 가능한 커맨드들과 라이브러리 함수들을 나열 한 것입니다.

운영체제 커맨드 운영 체제 라이브러리 Sysadmin 커맨드 BSD 호환 커맨드 소프트트웨어 생성 서브시스템 커맨드
AppcertUtil ac login biff ld
iscsitgtd apptrace pwconv install
md_monitordp assert mkstr
abi_index cstone_piclfrutree rusage
acctadm dak_piclfrutree shutdown
allocate_all devfsadmd_mod ucblinks
appcert errlst
apptrace errmsgs
asa getopt
audioplay getopt_long
audiorecord ib
audit libbsm
audit_binfile libcfgadm
audit_syslog libcontract
auditd libcurses
auths libdb2
autopush libdhcputil
awk libdladm
awk_xpg4 libfruaccess
banner libgss
bart libinetcfg
basename libipmp
bnu libkadm5clnt
bootconfchk libkadm5srv
bsmconv libkdb
bsmrecord libldap
bsmunconv libmeta
busstat libpiclfrudata
cal libpool
cat libprtdiag_psr_cherrystone
cdrw libprtdiag_psr_daktari
cfgadm libprtdiag_psr_desktop
checkeq libprtdiag_psr_desktop_picl
checknr libprtdiag_psr_javelin
chgrp libprtdiag_psr_littleneck
chmod_cmd libprtdiag_psr_lw8_picl
chown libprtdiag_psr_montecarlo
cksum libprtdiag_psr_monto
cmd-inet libprtdiag_psr_ontari
cmp libprtdiag_psr_opl
col libprtdiag_psr_schumacher_picl
comm libprtdiag_psr_serengeti
compress libprtdiag_psr_snowbird
consadm libprtdiag_psr_starcat
coreadm libprtdiag_psr_starfire
cpio libprtdiag_psr_sunfire
cpustat_cmd libprtdiag_psr_tazmo
cputrack_cmd libprtdiag_sun4u
cron_cmd libprtdiag_sun4v
cryptoadm_all libsasl
csh libscf
csplit libshare
ctrun libsldap
ctstat libslp
ctwatch libsmedia
cut libss
datadm libtsol
date libuutil
dc libwanboot
dcs libwanbootutil
dd libwladm
decrypt libzfs
deroff libzonecfg
diff lw8_libfruaccess
diffmk lw8_piclfrutree
digest madv
dladm mpss
du_cmd mpxu_piclfrudr
dumpcs nlspath_checks
ed_cmd pci
eject perror
env picl
eqn picld_pluginutil
etc picldevtree
expand piclenvd_chicago
expr piclenvd_enchilada
fgrep piclenvd_excalibur
file_all piclenvd_grover
filesync piclenvd_taco
find piclenvmon_sun4u
fold piclevent
fruadm piclfcal_leds_lw2plus
fs piclfrutree_lneck
fsstat picllom_blade
fstyp piclmemcfg
generic piclmemcfg_comm
geniconvtbl priv_str_xlate
genmsg psiginfo
getconf psignal
gettent psvcplugin_cstone
gettext psvcplugin_dak
gettxt psvcplugin_lneck
grep psvcpolicy_cstone
grep_xpg4 psvcpolicy_dak
grpck psvcpolicy_lneck
halt regerror_msg
head sata
hostname sbd
htable scsi
id siglist
ifconfig sm_fd
in.dhcpd sm_pcata
in.ftpd_all sm_pcmem
in.routed sm_scsi
in.talkd snowbird_piclenvmond
inetadm snowbird_piclfrutree
inetconv snowbird_piclwatchdog
inetd strerror
iostat strsignal
ipqosconf sysctrl
isaexec sysevent_conf_mod
join sysevent_reg_mod
kadmind ttyname
kbd usb
kclient
kdb5_util
kdestroy
kinit
klist
kmfcfg_msg
kpasswd
kprop
kproplog
krb5-config
krb5kdc
ksslcfg_all
kstat
ktkt_warnd
ktutil
last
ldap_cachemgr
ldapcmd
lgrpinfo
libshare_nfs
locale
lofiadm
logadm
logger
logname
lp
ls
lsvcrun
mailx
man
mesg
mfstscan_all
mipagentconfig_prog
mipagentstat
mixerctl
mkdir_cmd
mkpwdict
mktemp
more
mpstat
msgfmt_all
mv
ncab2clf
ncaconfd
newgrp
newtask
nice
nispasswd
nohup
oawk
pack
passmgmt
passwd
paste
pathchk
pdevfsadm
pdsvclockd
pfexec
pg
picld
pktool_msg
pooladm
poolbind
poolcfg
poold
poolstat
power_all
ppgrep
pprstat
pr
praudit
prcapadm
prcapstat
prcm_daemon
prex
print
profiles
projadd
projdel
projects
projmod
prophist
prtdiag
prtdscp
prtfru_msg
prtpicl
ps
psrinfo
pstmsboot
ptools
pwd
raidctl
ramdiskadm
rcapd
refer
regcmp
renice
rm
rmdir
rmformat
rmmount
rmvolmgr_all
roles
routeadm
scadm_SUNW,Sun-Fire-V240
script
sdiff
sdpadm_msg
sgs
sh
sharectl
sharemgr
sleep
snoop
sort
split
sppptun
ssh
strings
su
sum
svc
svcadm_all
svccfg_all
svcprop
svcs_all
swap
symcheck
symprof
symreport
syseventadm
syseventconfd_msg
syseventd_msg
tabs
talk
tar
tbl
tee
time
tnfdump
tnfxtract
touch
tput
troff
tty
ttymon
tzselect
ufsdump
ufsrestore
ul
uname
uniq
units
unlink
unpack
valtools
vgrind
vi
vmstat
vntsd_msg
volcheck
volrmmount
w
wanboot
wbem_disk
wbem_nfs
wc
who
whodo
wificonfig
wracct
write
wrsmconf_cmd
wrsmstat
xargs
yppasswd
zdump
zfs
zic
zlogin
zoneadm_all
zoneadmd_all
zonecfg
zonename
zpool

좋습니다, 번역을 위한 준비 과정은 어떠한 것들이 있습니까?

만약 아직 준비 되지 않았다면 부디 오픈솔라리스의 솔라리스 익스프레스 커뮤니티 버전을 다음의 링크중에서 여러분의 머신으로 다운 로드 받으시기 바랍니다.

솔라리스 익스프레스 커뮤니티 버전 다운로드 에서 오픈솔라리스의 솔라리스 익스프레스 배포판을 다운로드 합니다.

듀얼 부트 환경에 설치하려 하신다면 설치 문서 를 살펴 보시기 바랍니다.

네바다 글로벌라이제이션 프로젝트G11N 코드 및 메세지의 코드베이스를 기반하고 있는 자주 변경되는 페이지 를 가지고 있습니다. 이 문서에서 조언하는대로 메세지 컴포넌트를 따로 받으시기 바랍니다.

$ hg clone ssh://anon@hg.opensolaris.org/hg/nv-g11n/messages

이 것은 "messages" 라고 불리는 디렉토리를 생성할 것입니다.

현 단계 까지 완료 했습니다. ON 컴포넌트를 번역하는 예제를 보여 주시겠습니까?

메세지 소스 패스에 있는 현존하는 로케일내의 메세지를 번역할 수도 있고 메세지 워크스페이스에 존재하지 않는 새로운 로케일에 메세지를 번역할 수도 있습니다.

메세지 소스내에 현존하는 로케일의 메세지를 번역하는 방법은 다음과 같습니다

이전의 질문에 대한 답변대로 메세지 워크스페이스를 옮겨왔다고 가정하면 다음의 단계를 진행합니다. 예를 들어 독일어 메세지를 변경하려면

$ cd messages/messages/on/de_DE/usr/lib/locale/__LOCALE__/LC_MESSAGES

SUNW_OST_OSCMD.po 파일에서 운영체제 커맨드 , SUNW_OST_OSLIB.po 파일에서 운영체제 라이브러리 , SUNW_OST_ADMIN.po 파일에서 Sysadmin 커맨드, BSD 호환 커맨드는 SUNW_OST_UCBCMD.po 그리고 소프트웨어 생성 서브시스템 커맨드는 SUNW_OST_SGS.po 파일에서 찾으실 수 있습니다.

예제에서 우리는 cmp 커맨드를 SUNW_OST_OSCMD.po 파일에서 골랐습니다.

# The following lines are contents of SUNW_OST_OSCMD/cmp.po
msgid "%s %s differ: char %lld, line %lld\n"
msgstr "%s %s unterscheiden sich: Zeichen %lld, Zeile %lld\n"
msgid "cmp: cannot open %s\n"
msgstr "cmp: %s kann nicht geöffnet werden.\n"
msgid "cmp: EOF on %s\n"
msgstr "cmp: EOF (Dateiende) bei %s.\n"

만약 아래의 msgstr 을

msgid "cmp: cannot open %s\n"
msgstr "cmp: %s kann nicht geöffnet werden.\n"

아래와 같이 변경한다고 가정합니다.

msgid "cmp: cannot open %s\n"
msgstr "cmp: %s kann nicht sich öffnen.\n"

변경 후에 .po 파일을 닫고 아래의 환경 변수를 설정합니다
$ export SRC=/path/to/message/directory
예를 들어 $HOME/projects 디렉토리 아래에 로컬 메세지 루트 디렉토리를 가져다 놓았다고 한다면 SRC 를 다음과 같이 설정 합니다
$ export SRC=$HOME/projects/messages
그 다음에 아래를 수행합니다
$ cd $SRC
$ /usr/bin/make
$ /usr/bin/make build

$SRC/proto/`mach`/fileroot/usr/lib/locale/de.UTF-8/LC_MESSAGES 디렉토리에 .mo 파일이 생성된 것을 볼 수 있습니다. 새롭게 생성된 .mo 파일은 de.UTF-8 로케일에서 실행되는 'cmp' 유틸리티를 위해 /usr/lib/locale/de.UTF-8/LC_MESSAGES/ 디렉토리에 카피될 수 있습니다. 아마 여러분은 프로토 파일이 de_DE.UTF-8 이 아닌 de.UTF-8 아래에 생성된 것을 눈치 챘을텐데 원래 .mo 파일의 위치를 기대할 수 도 있기 때문입니다. 이것은 생성된 .mo 파일들을 넣는 루트 디렉토리를 $SRC/messages/on/makefiles/usr/lib/locale/rootdir.sh 가 변경하기 때문입니다.

다음 섹션에서는 본래 메세지 소스에는 존재 하지 않았던 완전히 새로운 로케일에서 메세지를 번역하는 것에 대해 설명합니다.

이 예제에서 우리는 hi_IN 로케일을 예제로 선택했습니다. 예제 파일과 코드에서 hi 와 hi_IN 는 빨간색 으로 표시 됩니다. 아래의 설명을 따라 하실때에는 여러분에 환경의 언어/로케일에 맞게 이부분을 변경해 주시기 바랍니다.

여러분이 지원을 추가할 로케일이 이미 메세지 디렉토리 아래에 Makefile.master 파일에 추가되어 있는지를 아래와 같이 확인 합니다

# List of all our locales - if you need to add/remove any, do it here
ALL_LOCALES = ar_EG ar_SA bg_BG ca cs_CZ da_DK da_DK de_DE de_AT de_CH de_LU el_GR el_CY
en_AU en_CA en_GB en_IE en_MT en_NZ en_US es_ES es_AR es_BO es_CL es_CO es_CR es_EC es_GT
es_MX es_NI es_PA es_PE es_PY es_SV es_UY es_VE et_EE fi_FI fr_FR fr_BE fr_CA fr_CH fr_LU
he_IL hi_IN hr_HR hu_HU is_IS it_IT ja_JP ko_KR lt_LT lv_LV mk_MK nb_NO nl_NL nl_BE nn_NO
no_NO no_NY pl_PL pt_PT pt_BR ro_RO ru_RU sh_BA sk_SK sl_SI sq_AL sr_CS sr_SP sr_YU sv_SE
ta_IN th_TH tr_TR zh_CN zh_HK zh_TW iconv

진하게 표시된대로 hi_IN 로케일은 이미 마스터 로케일 리스트에 포함되어 있습니다. 만약 타겟 로케일이 포함되어 있지 않다면 추가 합니다.

$SRC/messages/Makefile.trans 파일을 수정하여 아래에 진한 빨간색으로 표시된 부분을 추가하도록 합니다

# These are default language setting
TARG_LANGUAGE:sh= echo ${TARG_LANGUAGE-'de_DE es_ES fr_FR hi_IN it_IT ja_JP ko_KR sv_SE zh_CN zh_TW'

TARG_LANGUAGE_S:sh= echo ${TARG_LANGUAGES_S-'de es fr hi it ja ko sv zh zh_TW'}

de_DE_LOCALE :sh = echo ${de_DE_LOCALE-'de_DE.ISO8859-1 de_DE.UTF-8'}
es_ES_LOCALE :sh = echo ${es_ES_LOCALE-'es_ES.ISO8859-1 es_ES.UTF-8'}
fr_FR_LOCALE :sh = echo ${fr_FR_LOCALE-'fr_FR.ISO8859-1 fr_FR.UTF-8'}
it_IT_LOCALE :sh = echo ${it_IT_LOCALE-'it_IT.ISO8859-1 it_IT.UTF-8'}
hi_IN_LOCALE :sh = echo ${hi_IN_LOCALE-'hi_IN.UTF-8'}
hi_IN_LOCALE :sh = echo ${hi_IN_LOCALE-'hi_IN.UTF-8'}
ja_JP_LOCALE :sh = echo ${ja_JP_LOCALE-'ja_JP.eucJP ja_JP.PCK ja_JP.UTF-8'}
ko_KR_LOCALE :sh = echo ${ko_KR_LOCALE-'ko_KR.EUC ko.UTF-8'}
pl_PL_LOCALE :sh = echo ${pl_PL_LOCALE-'pl_PL.ISO8859-2 pl_PL.UTF-8'}
pt_BR_LOCALE :sh = echo ${pt_BR_LOCALE-'pt_BR.ISO8859-1 pt_BR.UTF-8'}
ru_RU_LOCALE :sh = echo ${ru_RU_LOCALE-'ru_RU.UTF-8 ru_RU.KOI8-R ru_RU.ISO8859-5 ru_RU.ANSI1251'}
sv_SE_LOCALE :sh = echo ${sv_SE_LOCALE-'sv_SE.ISO8859-1 sv_SE.UTF-8'}
zh_CN_LOCALE :sh = echo ${zh_CN_LOCALE-'zh_CN.EUC zh.GBK zh.UTF-8'}
zh_TW_LOCALE :sh = echo ${zh_TW_LOCALE-'zh_TW.EUC zh_TW.UTF-8 zh_TW.BIG5'}

TARG_LOCALE= \
$(de_DE_LOCALE) \
$(es_ES_LOCALE) \
$(fr_FR_LOCALE) \
$(it_IT_LOCALE) \
$(hi_IN_LOCALE) \
$(hi_IN_LOCALE) \
$(ja_JP_LOCALE) \
$(ko_KR_LOCALE) \
$(sv_SE_LOCALE) \
$(zh_CN_LOCALE) \
$(zh_TW_LOCALE)

$ cd $SRC/messages/common/locale

여기서 우리는 hi 에 특수한 Makefile 을 만들어햐 합니다. 기존에 존재하는 Makefile 을 참조하여 hi 를 위한 Makefile 을 만들 수 있습니다. 우리가 관심 있는 것은 UTF-8 코드 셋이므로 Makefile.hi 와 Makefile.hi_IN.UTF-8 을 만듭니다.

Makefile.hi 파일을 아래와 같이 생성합니다

# For Solaris
LOCALE= hi
CHARSET= UTF-8
SRC_LOCALE= hi_IN

# For java
JAVA_LOCALE= hi_IN
JAVA_LOCALE_S= hi

#
UINICV=

Makefile.hi_IN.UTF-8 을 아래와 같이 생성합니다

# For Solaris
LOCALE= hi_IN.UTF-8
CHARSET= UTF-8
SRC_LOCALE= hi_IN

# For java
JAVA_LOCALE= hi_IN

#
USEICV=

$ cd ../../on
$ cp -r en_US hi_IN
en_US 디렉토리에서 카피된 자바 리소스 번들을 아래와 같이 수정 합니다. 이것은 '_en_US.properties' 로 끝나는 파일을 ' ___LOCALE__.properties' 로 끝나는 파일로 변경할 것입니다.
$ cd $SRC/messages/on
$ cp -r en_US hi_IN
$ cd hi_IN
$ for i in `find . -name "*_en_US.properties"`
> do
> FL=`basename $i`
> CHFL=${FL%_en_US.properties}
> mv $i `dirname $i`/${CHFL}___LOCALE__.properties
> done
$ for i in `find . -name "en_US"
> do
> mv $i `dirname $i`/___LOCALE__
> done
$ for i in `find . -name "*_en_US.java"`
> do
> FL=`basename $i`
> CHFL=${FL%_en_US.java}
> mv $i `dirname $i`/${CHFL}___LOCALE__.java
> cat `dirname $i`/${CHFL}___LOCALE__.java | \
/usr/bin/sed -e '/^public class/s/pmHelpResources /pmHelpResources___LOCALE__ /'  \
-e '/^public class/s/pmResources /pmResources___LOCALE__ /' > /tmp/$$
> mv /tmp/$$ `dirname $i`/${CHFL}___LOCALE__.java 
> done

$ cd hi_IN/usr/lib/locale/__LOCALE__/LC_MESSAGES
nawk 스크립트를 이용하여 .po 파일이 번역되도록 전처리하여 기본 번역을 ASCII 로 만들어 줍니다

index($1,"#") == 1 { print $0 }
$1 == "msgstr" { for (i=0;i<var;i++) print arr[i]; }
$1 == "msgstr" { sub("msgid", "msgstr", arr[0]); }
$1 == "msgstr" { for (i=0;i<var;i++) print arr[i]; }
$1 == "msgid" { var=0; arr[var++]=$0; }
$1 != "msgid" { arr[var++]=$0 }

이 파일을 modpo.awk 같은 파일로 저장하고 번역할 .po 파일과 함께 실행해 줍니다.

$ nawk -f modpo.awk SUNW_OST_OSCMD.po
이것은 msgid/msgstr 를 동일하게 만들어 줄 것이고 이후에 SUNW_OST_OSCMD.po, 을 수정합니다. 예를 들어 cmp 커맨드는 아래와 같을 것입니다. 예제 번역으로 다음과 같이 변경될 수 있습니다.

# The following lines are contents of SUNW_OST_OSCMD/cmp.po
msgid "%s %s differ: char %lld, line %lld\n"
msgstr "%s %s differ: char %lld, line %lld\n"
msgid "usage: cmp [-l | -s] file1 file2 [skip1] [skip2]\n"
msgstr "usage: cmp [-l | -s] file1 file2 [skip1] [skip2]\n"
msgid "cmp: cannot open %s\n"
msgstr "cmp: %s खोल नहीं सकता। \n"
msgid "cmp: EOF on %s\n"
msgstr "cmp: EOF on %s\n"

$ cd $SRC
$ /usr/bin/make
$ /usr/bin/make build
위 명령은 메세지 파일을 빌드하고 결과물인 SUNW_OST_OSCMD.mo 파일이 프로토 디렉토리에 생성될 것입니다. 예, $SRC/proto/sparc/fileroot/usr/lib/locale/hi_IN.UTF-8/LC_MESSAGES/ 디렉토리 아래

자바 프로퍼티 파일은 어떻게 번역합니까?

작업 메세지 디렉토리 구조를 만든 다음에 아래의 예제를 확인 합니다.

번역되지 않은 본래 .properties 파일 $SRC/messages/on/en_US/usr/share/lib/locale/com/sun/slp/ClientLib_en_US.properties

no_message =

#Messages logged through SLPConfig.writeLog().

unknown_da_address = Unknown DA address: {0}
periodic_exception = Exception ``{0}'''' during periodic SA reregistering: {1}
sending_da_trace = Sending message ``{0}'''' to DA ``{1}''''
reply_da_trace = Received reply ``{0}'''' from DA ``{1}''''
tcp_send_da_trace = Sending TCP message ``{0}'''' to DA ``{1}''''
tcp_reply_da_trace = Received TCP reply ``{0}'''' from DA ``{1}''''
da_exception_trace = Error ``{0}'''' from DA ``{1}'''': {2}
udp_timeout = UDP timed out: {0}
datagram_io_error = IOException during datagram transaction with address ``{0}'''': {1}

$SRC/messages/on/de_DE/usr/share/lib/locale/com/sun/slp/ClientLib___LOCALE__.properties 에 de_DE 로케일로 번역된 메세지 파일

#@EN@
no_message =

#Messages logged through SLPConfig.writeLog().

#@EN@ Unknown DA address: {0}
unknown_da_address = Unbekannte DA-Adresse: {0}
#@EN@ Exception ``{0}'''' during periodic SA reregistering: {1}
periodic_exception = Ausnahme ``{0}'''' w\u00e4hrend planm\u00e4\u00dfiger SA-Neuregistrierung: {1}
#@EN@ Sending message ``{0}'''' to DA ``{1}''''
sending_da_trace = Nachricht ``{0}'''' wird an DA ``{1}'''' gesendet
#@EN@ Received reply ``{0}'''' from DA ``{1}''''
reply_da_trace = Antwort ``{0}'''' von DA ``{1}'''' empfangen
#@EN@ Sending TCP message ``{0}'''' to DA ``{1}''''
tcp_send_da_trace = TCP-Nachricht ``{0}'''' wird an DA ``{1}'''' gesendet
#@EN@ Received TCP reply ``{0}'''' from DA ``{1}''''
tcp_reply_da_trace = TCP-Antwort ``{0}'''' von DA ``{1}'''' empfangen
#@EN@ Error ``{0}'''' from DA ``{1}'''': {2}
da_exception_trace = Fehler ``{0}'''' von DA ``{1}'''': {2}
#@EN@ UDP timed out for address ``{0}''''.
udp_timeout = UDP wegen Zeit\u00fcberschreitung abgebrochen: {0}
#@EN@ IOException during datagram transaction with address ``{0}'''': {1}
datagram_io_error = E/A-Ausnahme w\u00e4hrend Datagramm-Transaktion mit Adresse ``{0}'''': {1}

유사하게 새롭게 생성된 hi_IN 프로퍼티 파일도 번역될 것입니다.

제 로케일의 cal, diff, ls etc. 같은 시스템 커맨드의 날짜 및 시간 포맷을 어떻게 변경해 줘야 합니까?

이러한 작업을 위해 변경 될 수 있는 (이전의 hi_IN 예제의 경우) $SRC/messages/on/hi_IN/usr/lib/locale/__LOCALE__/LC_TIME 디렉토리와 SUNW_OST_OSCMD.po 파일과 을 참고하시기 바랍니다.

제가 번역한 메세지들을 어떻게 소스 트리에 공헌할 수 있습니까?

설명서를 참조하여 G11N 워크스페이스와 관련된 네바다 G11N 프로젝트와 공헌할 수 있는 hg 어카운트에 지원하실 수 있습니다.

이 글의 영문 원본은
http://www.opensolaris.org/os/community ··· n_faq%2F
에서 보실 수 있습니다.

"오픈솔라리스" 카테고리의 다른 글

2008/02/18 16:47 2008/02/18 16:47

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/506

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 144 145 146 147 148 149 150 151 152  ... 624  Next ▶