============
 i18nʵ
============

:: limodou
:ϵ: limodou@gmail.com
:汾: $Id: i18n.txt 42 2005-09-28 05:19:21Z limodou $
:ҳ: http://wiki.woodpecker.org.cn/moin/NewEdit
:BLOG: http://www.donews.net/limodou
:Ȩ: GPL

.. contents::


һͨʵַ
------------------------

ʲôi18nǹʻļ(InternationalizationȥʼINмһ18ַ)ʵ֣
 Python ĵ gettext ϸͬʱwxPyWikiҵwxPyCookbookϹڹʻʵֵĽ̳̣
ұ㰴ĵͽ̳̿ʼҵʵ顣

ʹý̳ṩģҽ޸ġһģȥͷĴǽĳЩϢһ
ģУԿģʵ֡ͬʱģнйʻݷбУ::

	message = [_('English'), _('Chinese')]

һͨķ

1. ģеgettextģ飬Ҫڽйʻ䡢ģ鵼֮ǰ::

	gettext.install('i18ntest', './locale', unicode=True)

   ˼ֱΪ

   * ޶ļ 
   * ·ŷļ· 
   * unicodeǷʹunicode(Ӧóunicodeģ˴ӦΪTrue)

   ָװһȱʡĹʻࡣҪװĳضĹʻʱǿ::

	gettext.translation('i18ntest', './locale', languages=['en']).install(True)

   װָķļǰͬgettext.installָԵࡣgettext.translation
   һµĶִinstallװָ֧ԵĹʻܡinstallеĲΪǷʹunicode

2. Ҫйʻַϼ_()磺EnglishChineseҪʻôҪתΪ_('English')
   _('Chinese')һܻȽ鷳

   ĴĳȻûķļȻǿеġ

3. ʹpygettext.pyַĳȡpygettext.pypythonİװԴһߣλtools/i18nĿ¼
   Уͬʱһmsgfmt.pyĳļתgettextʶĶļв::

	Python pygettext.py ļ

   ļͬʱжִpython pygettext.py --help Կ֧Щѡûָļȱ
   ʡһΪmessages.potļԭʼԵļῴµ::

	# SOME DESCRIPTIVE TITLE.
	# Copyright (C) YEAR ORGANIZATION
	# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
	#
	msgid ""
	msgstr ""
	"Project-Id-Version: PACKAGE VERSION\n"
	"POT-Creation-Date: Mon Jun 14 13:28:26 2004\n"
	"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
	"Last-Translator: FULL NAME <\n">EMAIL@ADDRESS>\n"
	"Language-Team: LANGUAGE <\n">LL@li.org>\n"
	"MIME-Version: 1.0\n"
	"Content-Type: text/plain; charset=CHARSET\n"
	"Content-Transfer-Encoding: ENCODING\n"
	"Generated-By: pygettext.py 1.5\n"
	
	#: i18ntest.py:28 i18ntest.py:76
	msgid "MiniApp"
	msgstr ""
	
	#: i18ntest.py:39 i18ntest.py:85
	msgid "E&xit"
	msgstr ""

   һmessages.pot:

   * '#'ʼע 
   * 
   * msgidУһжСΪУ::

		 msgid ""
		 "This is a multiline\n"
		 "test"
		 msgidΪգʾmsgstrĵϢ 
		
   * msgstrУһģΪУʽͬmsgidmsgidΪգΪĵϢĵϢп¼
     ڴĵһЩͬʱҪľcharsetָĵıϢҲǱĵʱõı롣
     ʹutf-8롣
	
   ôǵõpotļȽ䱣Ϊͬİ汾Աķ롣磺messages_cn.poʱֻ
   msgidΪյĵطдmsgstrɡ

4. ʹmsgfmt.pypoļתΪƵmoļ::

	python msgfmt.py messages_cn.po

   һΪmessages_cn.moĶļ

5. װmoļʵǽmoļȷλágettextҪļ֯Ŀ¼::

	./locale/en/LC_MESSAGES 
	./locale/cn/LC_MESSAGES 

   localegettext.translationָġen, cnԷࡣLC_MESSAGESҪġͬʱmoļӦΪ
   ͬi18ntest.mo

   ϵĲ裬һֹ֧ʻĳˡ

   wxPyWiki̳ʹmki18n.pyĳ򡣵ʹpythonԴĹߣ̳


--------------------

ͨķһЩĵطо¼㣺

1. pygettext.pyһζȡļļ̫ʱ²׷¡֧Ŀ¼ļбĴ 
2. ҵĳ޸ĺҪĵطҲ˱仯µı仯ԭѾõݺϲ 
3. local/en/LC_MESSAGEĿ¼֯Щ鷳


--------------------

ڵһ⣬ҵĽ޸pygettext.pyԴûʵĿ¼ĴʵֵļбĴȽ
Ҫд Python ԴļһļһļռһСȻpygettext.pyӴļбѡ
޸ĺļиȤĿµ NewEdit.py Դ(ڱķʱֻԴcvs)

ڵڶ⣬ҵĽǱдһϲȽѾõļȡؼֱ浽һֵС
ٶȡɵķļԷļеÿһֵвڣֱӽ뵽ֵУڣ
ĲΪյĻ滻ԭġµķļȥֵеĹؼµķļвڵһ
Ҫע⣬ΪÿɵµķļһȫҲַΪȥõķµķ
ļȫӦðȥֵؼֵĲȥҪȥõķֻ˹ˡ˳Ҳ NewEdit ԴС

ڵ⣬Ҳgettext.pyԴ롣ԭͳfind()Ҫһmoļ::

	mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain)

ԿһmoļĿ¼ԵࡢLC_MESSAGESɵġ::

	localedir/lang/LC_MESSAGES/domain.mo

ˣҪӦĿ¼moļŵӦĿ¼¡

ҵ뷨ǣзļͬһĿ¼Ŀܴ漰ķۣ
ļΪ_.moΪʲôԱأΪмĺͷĵԱ붼zh
ֲõԣֱΪcntw

Ϊʵִ˹ܣҸgettextдѵi18nģʽʵgettextܵĻϻҵҪͬʱ
ģ黹ԸݲȱʡlocaleԶӦķļļͬ NewEdit ԴС

 NewEdit i18nйصУ

* pygettext.py(޸) 
* msgfmt.py 
* i18n.py(ʵgettext) 
* mergepo.py(ϲpoļ)

ġNewEditеľʹ
------------------------------

NewEdit--NewEdit.pyпǰĵط::

	1    sys.path.append('./modules')
	2    import i18n
	3    i18n = i18n.I18n('newedit', './lang', unicode=True)
	4    try:
	5        import Lang
	6    except:
	7        pass
	8    else:
	9        i18n.install(Lang.language)

i18nǷmodulesĿ¼еġΪһi18nĵòͬgettext.installе3У
ԶȱʡļȱʡļΪȡϵͳȱʡlocaleõ룬жƥķļǷ
ڣװ룻ڣʹκηļϵͳûйʻĴ

5ǵLangģ顣ʵʹһССûָԵָ࣬ϣmodulesĿ¼
һLang.pyļΪlanguage=""ҲǽûѡԵ뱣浽ļУԱһ
ʱӦļˣNewEdit û޸ֻ֮µòŻЧ

i18nֻҪģе뼴ɣģ鲻õ롣

ȻпԷĵط_()(۵Ĺ)

һļ嵥

pygettext.pyļnewedit_cn.po

newedit_cn.poз롣

msgfmt.pynewedit_cn.pomoļ

newedit_cn.moļlangĿ¼¡

 NewEdit OKûˡ

Դ޸ģٵpygettext.pyµķļmessages.potmergepo.py(ϲļ)¾
ںϡmoļlangĿ¼£ѭ

 NewEdit лһ⣺δxmlԴļ

 NewEdit УҡҲ滻ıı⼸ܵĶԻʹxmlԴļ޷
һԴһ_()ĴҵķɲͬԵxmlԴļҪʹԴļʱݳѡ
ԣӦԴļΪԴļxmlļııӦxmlencodingһ¡ĵķ
ļʹutf-8롣Ϊutf-8xmlȱʡʹõı롣


gettextʵԭ
------------------------------

ֻǱ˵!

gettextĹʵͦ򵥣_()װݴķmoļȡģuniocdeʶӦ
unicode봦

һgettextṩĻĵĺgettextugettextһδбתģһ
תunicodeġunicodeı־֮һõ_()ϡδװκģȱʡ
ֻǷԭء˲װκģgettextһǿõġ

ΰװ_()

::

	import __buildin__
	__buildin__.__dict__['_']=unicode and self.ugettext or self.gettext

ͽ_()һúˣĺģоͿֱʹˡˣʹgettextʱװҪܿ
ǰֻҪģװ뼴ɡ

ǣΪʲô NewEdit ̬½

Ȼʵ˹ʻûıʹõԣӦı䲻Ǹ𣿵ȻǺˣ NewEdit 
⡣һнʻصĵطҪôȥʵָ¹̣⣬ǲԣһû
ڸ֮ллȥһ㶼ǹ̶ʹĳԣˣµǿԽܵ
һҪԭǣʹ_()ַʽֻʺϺ÷ʽȫֱģΪΪʲôأ::

	message = _('Chinese')

һǴһģУΪģȫֱĻģʱִСҵ
ִֻһΡִϺmessageǾֵmessage=_('Chinese')ˡ
ǸıԣmessageֻһԵģµġһǺѽΪʲôںʱ
أϸ˵Ӧʽ::

	call(_('Chinese'))

ΪúʱǶ̬ģÿεcallʱ¼ֵַʽԵġܵ
˵ִʱÿε_()ĻͿʵֶ̬лУʹþ̬л NewEdit 
ʹ˾̬Եл

i18nһС
---------------------------

ҷ֣ʹ NewEdit Ҳ֣ʱ Shell ִйһЩٻصĵʱ
ƶıԶѡУáȤΪʲôִйShellͲأҷ֣
Ϊi18nʹõ_()Shellе_ͻ¡ShellУִһĽͱ_С
i18n'_'ʹΪһõĺߵĳͻҲò NewEdit е_()ȫĳ
tr()(Զ)ӲŽ⡣Ӷ˵PyShell(ʹɵShell)ıռNewEdit
صġҲûа취Ϊi18nе_()ͨ__builtin__еģ__builtin__ȫֹģ
˶иıƱػӰ쵽ģ顣

ǿԽġPyShell֧ġʵһЩܣȴһЩãСΪѽ

`[]`_

.. _`[]`: technical.htm