综合二区_欧美成人综合_欧美成人二区_a黄视频_亚洲视频在线播放_一区二区三区视频免费看

µ±Ç°Î»ÖãºÊ×Ò³ > ÍøÕ¾¾ÉÀ¸Ä¿ > ѧϰ԰µØ > Éè¼ÆÈí¼þ½Ì³Ì > ·­Òëwww.djangobook.comÖ®µÚÊ®¾ÅÕ£º¹ú¼Ê»¯

·­Òëwww.djangobook.comÖ®µÚÊ®¾ÅÕ£º¹ú¼Ê»¯
2010-01-13 23:45:43  ×÷Õß:  À´Ô´:
DjangoÔÚ´úÂëºÍÄ£°åÖжÔÎı¾¹ú¼Ê»¯ÓÐÍêÕûµÄÖ§³Ö£¬ÕâÀï½âÊÍÁËËüÔõÑù¹¤×÷

¸ÅÀÀ
¹ú¼Ê»¯µÄÄ¿±êÊÇÔÊÐíµ¥¶ÀµÄWeb³ÌÐòÒÔ¶àÖÖÓïÑÔÌṩÄÚÈݺ͹¦ÄÜ
Ä㣬Django¿ª·¢ÈËÔ±£¬¿ÉÒÔͨ¹ýÌí¼ÓÉÙÁ¿µÄ¹³×Óµ½ÄãµÄPython´úÂëºÍÄ£°åÖÐÀ´´ïµ½´ËÄ¿µÄ£¬ÕâЩ¹³×Ó³ÆÎª·­Òë×Ö·û´®£¬ËüÃÇ
¸æËßDjango:"Èç¹û´ËÎı¾¿ÉÒÔÓÃÄÇÖÖÓïÑÔ·­ÒëµÃµ½£¬ÕâЩÎı¾Ó¦¸Ã±»·­Òë³É×îÖÕÓû§µÄÓïÑÔ"
Django¸ù¾ÝÓû§µÄÓïÑÔÑ¡Ôñ²ÉÓÃÕâЩ¹³×ÓÀ´·­ÒëWeb apps
±¾ÖÊÉÏ£¬Django×öÁ½¼þÊÂÇé:
1£¬ËüÈÿª·¢ÕߺÍÄ£°å×÷ÕßÖ¸¶¨ËûÃÇappsµÄÄIJ¿·ÖÓ¦¸Ã±»·­Òë
2£¬ËüʹÓÃÕâЩ¹³×ÓÀ´¸ù¾ÝÓû§µÄÓïÑÔÑ¡ÔñÎªÌØ±ðµÄÓû§·­ÒëWeb apps

ÔõÑù¹ú¼Ê»¯ÄãµÄapp:·ÖÈý²½
1£¬ÔÚÄãPython´úÂëºÍÄ£°åÖÐǶÈë·­Òë×Ö·û´®
2£¬ÓÃÄãÏëÖ§³ÖµÄÓïÑԵõ½ÄÇЩ×Ö·û´®µÄ·­Òë
3£¬ÔÚÄãµÄDjangoÉèÖÃÖ줻îλÖÃÖмä¼þ
ÔÚÄ»ºó£¬DjangoµÄ·­Òë»úÆ÷ʹÓñê×¼µÄPython×Ô´øµÄgettextÄ£¿é

Èç¹ûÄã²»ÐèÒª¹ú¼Ê»¯
DjangoµÄ¹ú¼Ê»¯¹³×ÓĬÈÏ´ò¿ª£¬ÕâÒâζ×ÅÔÚ¿ò¼ÜµÄijЩµØ·½ÓÐһЩi18nÏà¹ØµÄ¹ý¶È£¬Èç¹ûÄ㲻ʹÓùú¼Ê»¯£¬ÄãÓ¦¸Ã»¨Á½ÃëÖÓ
À´ÔÚÄãµÄsettingsÎļþÖÓÉèÖÃUSE_I18N = False£¬Èç¹ûUSE_I18NÉèÖÃΪFalse£¬ÔòDjango½«×öһЩÓÅ»¯¶ø²»ÊÇÔØÈë¹ú¼Ê»¯»úÆ÷
Äã¿ÉÄܽ«Ò²Ïë´ÓÄãµÄTEMPLATE_CONTEXT_PROCESSORSÉèÖÃÖÐɾ³ý'django.core.context_processors.i18n'

ÔõÑùÖ¸¶¨·­Òë×Ö·û´®
·­Òë×Ö·û´®Ö¸¶¨ÁË"¸ÃÎı¾Ó¦¸Ã±»·­Òë"£¬ÕâЩ×Ö·û´®¿ÉÒÔÔÚÄãµÄPython´úÂëºÍÄ£°åÖгöÏÖ£¬±ê¼Ç·­Òë×Ö·û´®ÊÇÄãµÄÔðÈΣ¬Ïµ
ͳֻÄÜ·­ÒëËüÖªµÀµÄ×Ö·û´®

ÓÃPython´úÂë

±ê×¼·­Òë
ͨ¹ýʹÓ÷½·¨_()Ö¸¶¨·­Òë×Ö·û´®(ÊǵÄ£¬·½·¨ÃûÊÇÏ»®Ïß×Ö·û)£¬¸Ã·½·¨¿ÉÒÔÔÚÈκÎPythonÄ£¿éÈ«¾ÖµÃµ½£¬Äã²»ÐèÒªimportËü
ÔÚÕâ¸öÀý×ÓÖУ¬Îı¾"Welcome to my site."±ê¼ÇΪ·­Òë×Ö·û´®:
Java´úÂë ¸´ÖÆ´úÂë
  1. def my_view(request):   
  2.     output = _("Welcome to my site.")   
  3.     return HttpResponse(output)  

·½·¨django.utils.translation.gettext()µÈͬÓÚ_()£¬Õâ¸öÀý×ÓºÍÇ°ÃæµÄÒ»Ñù:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.translation import gettext   
  2. def my_view(request):   
  3.     output = gettext("Welcome to my site.")   
  4.     return HttpResponse(output)  

·­Òë¿ÉÒÔÔÚ¼ÆËãºóµÄÖµÉϹ¤×÷£¬Õâ¸öÀý×ÓºÍÇ°ÃæµÄÁ½¸öÒ»Ñù:
Java´úÂë ¸´ÖÆ´úÂë
  1. def my_view(request):   
  2.     words = ['Welcome''to''my''site.']   
  3.     output = _(' '.join(words))   
  4.     return HttpResponse(output)  

·­Òë¿ÉÒÔÔÚ±äÁ¿ÉϹ¤×÷£¬ÕâÀïµÄÀý×ÓºÍÉÏÃæµÄÒ²Ò»Ñù:
Java´úÂë ¸´ÖÆ´úÂë
  1. def my_view(request):   
  2.     sentence = 'Welcome to my site.'  
  3.     output = _(sentence)   
  4.     return HttpResponse(output)  

(ÉÏÃæÁ½¸öÀý×ÓÖÐʹÓñäÁ¿»ò¼ÆËãÖµµÄ¾¯¸æÊÇDjangoµÄ·­Òë-×Ö·û´®-¼ì²â¹¤¾ßmake-messages.py²»ÄÜÕÒµ½ÕâЩ×Ö·û´®£¬µÈ»á½é
ÉÜmake-messages¸ü¶àµÄÄÚÈÝ)
Äã´«µÝ¸ø_()»ògettext()µÄ×Ö·û´®¿ÉÒÔͨ¹ýPython±ê×¼ÃüÃû×Ö·û´®²å²¹Óï·¨Ö¸¶¨À´²ÉÓÃplaceholders£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. def my_view(request, n):   
  2.     output = _('%(name)s is my name.') % {'name': n}   
  3.     return HttpResponse(output)  

¸Ã¼¼ÊõÈÃÓïÑÔרÓеķ­Òë¶ÔplaceholderÎı¾ÖØÐÂÅÅÐò£¬ÀýÈ磬һ¸öÓ¢Óï·­Òë¿ÉÄÜΪ"Adrian is my name."£¬¶øÎ÷°àÑÀ·­Òë¿É
ÄÜΪ"Me llamo Adrian."--ÔÚ·­ÒëÎı¾ºóÃæ·ÅÖÃplaceholder(Ãû×Ö)¶ø²»ÊÇÔÚËü֮ǰ
³öÓÚÕâ¸öÔ­Òò£¬ÄãÓ¦¸ÃʹÓÃÃüÃû×Ö·û´®²å²¹(ÀýÈç%(name)s) ¶ø²»ÊÇλÖò岹(ÀýÈç%s»òÕß%d)£¬Èç¹ûÄãʹÓÃλÖò岹£¬·­Ò뽫
²»ÄÜÖØÅÅplaceholderÎı¾

±ê¼Ç×Ö·û´®Îª²»²Ù×÷
ʹÓÃdjango.utils.translation.gettext_noop()·½·¨À´±ê¼Ç×Ö·û´®Îª·­Òë×Ö·û´®¶ø²»·­ÒëËü£¬×Ö·û´®ÔÚºóÃæ´ÓÒ»¸ö±äÁ¿·­Òë
Èç¹ûÄãÓг£Á¿×Ö·û´®²¢ÇÒÓ¦¸Ã½«ÆäÓÃÔ´ÓïÑÔ´æ´¢ÒòΪËûÃÇÔÚϵͳ»òÓû§ÉϽ»»»µÄ»°ÔòʹÓÃËü--ÀýÈçÊý¾Ý¿âÖеÄ×Ö·û´®--µ«ÊÇ
Ó¦¸ÃÔÚ×îºóµÄ¿ÉÄܵ㱻¼°Ê±·­Ò룬ÀýÈçµ±×Ö·û´®ÏÔʾ¸øÓû§Ê±

³Ù·­Òë
ʹÓÃdjango.utils.translation.gettext_lazy()·½·¨À´³Ù·­Òë×Ö·û´®--µ±Öµ±»·ÃÎʶø²»Êǵ±gettext_lazy()·½·¨±»µ÷ÓÃʱ
ÀýÈ磬ΪÁË·­ÒëÄ£Ð͵Ähelp_text£¬×öÏÂÃæµÄÊÂÇé:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.translation import gettext_lazy   
  2.   
  3. class MyThing(models.Model):   
  4.     name = models.CharField(help_text=gettext_lazy('This is the help text'))  

Õâ¸öÀý×ÓÖУ¬gettext_lazy()´æ´¢Á˸Ã×Ö·û´®µÄ³ÙÒýÓÃ--¶ø²»ÊÇÕæÊµµÄ·­Ò룬·­Òë±¾Éí½«µ±×Ö·û´®ÓÃÓÚ×Ö·û´®contextʱÍê³É
ÀýÈçÄ£°åÔÚDjangoµÄadminÕ¾µãäÖȾʱ
Èç¹ûÄ㲻ϲ»¶Èß³¤µÄÃû×Ögettext_lazy£¬Äã¿ÉÒÔÏñÕâÑù¸øËü±ðÃûΪ_(Ï»®Ïß):
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.translation import gettext_lazy as _   
  2.   
  3. class MyThing(models.Model):   
  4.     name = models.CharField(help_text=_('This is the help text'))  

ÔÚDjangoÄ£ÐÍÖÐһֱʹÓóٷ­Ò룬ΪÓòÃûºÍ±íÃûÌí¼Ó·­ÒëÒ²ÊǸöºÃÖ÷Ò⣬ÕâÒâζ×ÅÔÚMetaÀàÖÐÏÔʽµÄдverbose_nameºÍverbo
se_name_pluralÑ¡Ïͨ¹ý:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.translation import gettext_lazy as _   
  2.   
  3. class MyThing(models.Model):   
  4.     name = models.CharField(_('name'), help_text=_('This is the help text'))   
  5.     class Meta:   
  6.         verbose_name = _('my thing')   
  7.         verbose_name_plural = _('mythings')  


¸´ÊýÐÎʽ
ʹÓÃdjango.utils.translation.ngettext()·½·¨À´Ö¸¶¨¸´ÊýµÄÏûÏ¢£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.translation import ngettext   
  2. def hello_world(request, count):   
  3.     page = ngettext('there is %(count)d object''there are %(count)d objects', count) % {   
  4.         'count': count,   
  5.     }   
  6.     return HttpResponse(page)  

ngettextʹÓÃÈý¸ö²ÎÊý:µ¥Ò»µÄ·­Òë×Ö·û´®£¬¸´ÊýÐÎʽµÄ·­Òë×Ö·û´®ºÍ¶ÔÏóµÄÊýÁ¿(Ëü×÷Ϊcount±äÁ¿±»´«µÝ¸ø·­ÒëÓïÑÔ)

ÓÃÄ£°å´úÂë
ÔÚDjangoÄ£°åÖÐʹÓ÷­ÒëʹÓÃÁ½¸öÄ£°å±êÇ©ºÍÒ»¸öÓëPython´úÂëÖÐÉÔ΢²»Í¬µÄÓï·¨£¬ÎªÁËÈÃÄãµÄÄ£°å·ÃÎÊÕâЩ±êÇ©£¬°Ñ
{% load i18n %}·ÅÖÃÔÚÄãµÄÄ£°åµÄ¶¥¶Ë
{% trans %}Ä£°å±êÇ©·­Òë³£Á¿×Ö·û´®»òÕß±äÁ¿ÄÚÈÝ:
Java´úÂë ¸´ÖÆ´úÂë
  1. <title>{% trans "This is the title." %}</title>  

Èç¹ûÄãÖ»ÏëΪ·­Òë±ê¼ÇÒ»¸öÖµ£¬µ«ÊÇÉÔºó´ÓÒ»¸ö±äÁ¿·­ÒëËü£¬¿ÉÒÔʹÓÃnoopÑ¡Ïî:
Java´úÂë ¸´ÖÆ´úÂë
  1. <title>{% trans "value" noop %}</title>  

ÔÚ{% trans %}ÖÐʹÓÃÄ£°å±äÁ¿Ê½²»¿ÉÒ»µÄ--Ö»Óе¥ÒýºÅ»òË«ÒýºÅµÄ³£Á¿×Ö·û´®ÊÇÔÊÐíµÄ£¬Èç¹ûÄãµÄ·­ÒëÐèÒª±äÁ¿(placehold
ers)£¬Ê¹ÓÃ{% blocktrans %}£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. {% blocktrans %}This will have {{ value }} inside. {% endblocktrans %}  

ΪÁË·­ÒëÄ£°å±í´ïʽ--±ÈÈçʹÓÃÄ£°å¹ýÂËÆ÷--ÄãÐèÒªÔÚ·­Òë¿éÖа󶨱í´ïʽµ½±¾µØ±äÁ¿À´Ê¹ÓÃ:
Java´úÂë ¸´ÖÆ´úÂë
  1. {% blocktrans with value|filter as myvar %}   
  2. This will have {{ myvar }} inside.   
  3. {% endblocktrans %}  

Èç¹ûÄãÐèÒªÔÚÒ»¸öblocktrans±êÇ©Àï°ó¶¨¶àÓÚÒ»¸ö±í´ïʽ£¬ÓÃand·Ö¸ô:
Java´úÂë ¸´ÖÆ´úÂë
  1. {% blocktrans with book|title as book_t and author|title as author_t %}   
  2. This is {{ book_t }} by {{ author_t }}   
  3. {% endblocktrans %}  

¶ÔÓÚ¸´Êý£¬ÓÃ{% plural %}±êǩָ¶¨µ¥ÊýºÍ¸´ÊýÐÎʽ²¢ÔÚ{% blocktrans %}ºÍ{% endblocktrans %}ÖÐÏÔʾ£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. {% blocktrans count list|count as counter %}   
  2. There is only one {{ name }} object.   
  3. {% plural %}   
  4. There are {{ counter }} {{ name }} objects.   
  5. {% endblocktrans %}  

ÄÚ²¿ËùÓеĿéºÍÄÚǶ·­ÒëʹÓúÏÊʵÄgettext/ngettextµ÷ÓÃ
ÿ¸öRequestContext¿ÉÒÔ·ÃÎÊÁ½¸ö·­ÒëרÓеıäÁ¿:
1£¬LANGUAGESÊÇÔª×éµÄÁбí£¬ÆäÖеÚÒ»¸öÔªËØÎªÓïÑÔ´úÂ룬µÚ¶þ¸öÔªËØÎªÓïÑÔÃû(ÓøÃÓïÑÔ)
2£¬LANGUAGE_CODEÊǵ±Ç°Óû§Ñ¡ÔñµÄÓïÑÔ£¬×÷Ϊ×Ö·û´®£¬ÀýÈç:en-us(²Î¿¼ÏÂÃæµÄ"ÔõÑù·¢ÏÖÓïÑÔÑ¡Ôñ")
3£¬LANGUAGE_BIDIÊǵ±Ç°ÓïÑԵķ½Ïò£¬Èç¹ûΪTrue£¬ËüΪ´ÓÓÒµ½×óµÄÓïÑÔ£¬ÀýÈçÏ£²®À´ºÍ°¢À­²®ÓÈç¹ûΪFalseÔòËüÊÇ´Ó×ó
µ½ÓÒµÄÓïÑÔ£¬ÀýÈçÓ¢Ó·¨ÓµÂÓïµÈµÈ
Èç¹ûÄ㲻ʹÓÃRequestContexÀ©Õ¹£¬Äã¿ÉÒÔÓÃÈý¸ö±êÇ©µÃµ½ÕâЩֵ:
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
ÕâЩ±êǩҲÐèÒª{% load i18n %}
·­Òë¹³×ÓÒ²¿ÉÒÔÔÚÈκνÓÊܳ£Á¿×Ö·û´®µÄÄ£°å¿é±êÇ©Öеõ½£¬ÕâÖÖÇé¿öÏ£¬Ö»ÐèʹÓÃ_()Óï·¨À´Ö¸¶¨·­Òë×Ö·û´®£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. {% some_special_tag _("Page not found") value|yesno:_("yes,no") %}  

ÕâÖÖÇé¿öÏ£¬±êÇ©ºÍ¹ýÂËÆ÷½«¿´µ½ÒѾ­·­ÒëµÄ×Ö·û´®£¬ËùÒÔËüÃDz»ÐèÒªÖªµÀ·­Òë

ÔõÑù´´½¨ÓïÑÔÎļþ
Ò»µ©Äã±ê¼ÇÄãµÄ×Ö·û´®À´ÉÔºó·­Ò룬ÄãÐèҪд(»òÕß»ñµÃ)ÓïÑÔ·­Òë±¾Éí£¬ÕâÀï½âÊÍÁËËüÔõÑù¹¤×÷

ÏûÏ¢Îļþ
µÚÒ»²½ÊÇΪһ¸öÐÂÓïÑÔ´´½¨Ò»¸öÏûÏ¢Îļþ£¬ÏûÏ¢ÎļþÊÇÆÕͨÎı¾Îļþ£¬Ëü±íʾһ¸öµ¥¶ÀµÄÓïÑÔ£¬±£»¤ËùÓпɵõ½µÄ·­Òë×Ö·û
´®ÒÔ¼°ËüÃÇÓ¦¸ÃÔõÑùÓøø¶¨ÓïÑÔ³ÊÏÖ£¬ÏûÏ¢ÎļþÓÐÒ»¸ö.poÎļþÀ©Õ¹Ãû
Django×Ô´øÒ»¸ö¹¤¾ßbin/make-messages.py£¬Ëü×Ô¶¯´´½¨ºÍά»¤ÕâЩÎļþ
ΪÁË´´½¨»ò¸üÐÂÏûÏ¢Îļþ£¬ÔËÐÐÕâ¸öÃüÁî:
bin/make-messages.py -l de
ÕâÀïµÄdeÊǶÔÓÚÏûÏ¢ÎļþÄãÏë´´½¨µÄÓïÑÔ´úÂ룬ÕâÀïµÄÓïÑÔ´úÂëΪλÖøñʽ£¬ÀýÈ磬¶Ô°ÍÎ÷Ϊpt_BR¶Ô°ÂµØÀûµÂ¹úÔòΪde_AT
¸Ã½Å²½Ó¦¸ÃÔËÐÐÓÚÏÂÃæÈý¸öµØ·½ÖеÄÒ»¸ö:
1£¬django¸ùĿ¼(²»ÊÇSubversion¼ì³ö£¬µ«ÊÇͨ¹ý$PYTHONPATHÁ´½ÓµÄ»òÕßλÓڸ÷¾¶ÆäËûλÖõĵط½)
2£¬ÄãµÄDjangoÏîÄ¿µÄ¸ùĿ¼
3£¬ÄãµÄDjango appµÄ¸ùĿ¼
¸Ã½Å²½ÔËÐÐÓÚÕû¸öDjangoÔ´´úÂëÊ÷²¢³é³öËùÓбê¼ÇΪ·­ÒëµÄ×Ö·û´®£¬ËüÔÚĿ¼conf/locale´´½¨(»ò¸üÐÂ)ÏûÏ¢Îļþ£¬ÔÚdeÀý×Ó
ÖУ¬ÎļþÔòΪconf/locale/de/LC_MESSAGES/django.po
ËüÔËÐÐÓÚÄãµÄÏîĿԴ´úÂëÊ÷»òÄãµÄ³ÌÐòÔ´´úÂëÊ÷£¬Ëü½«×öͬÑùµÄÊÂÇ飬µ«ÊÇλÖÃĿ¼µÄλÖÃΪlocale/LANG/LC_MESSAGES(×¢
ÒâȱÉÙconfǰ׺)
ûÓÐgettext?
Èç¹ûÄãûÓа²×°gettext¹¤¾ß£¬make-messages.py½«´´½¨¿ÕÎļþ£¬Èç¹ûÊÇÕâÖÖÇé¿ö£¬°²×°gettext¹¤¾ß»òÕßÖ»ÊǸ´ÖÆÓ¢ÓïÏûÏ¢
Îļþ(conf/locale/en/LC_MESSAGES/django.po)²¢Ê¹ÓÃËü×÷Ϊ¿ªÊ¼µã£¬ËüÖ»ÊÇÒ»¸ö¿ÕµÄ·­ÒëÎļþ
.poÎļþ¸ñʽÊÇÖ±½ÓµÄ£¬Ã¿¸ö.poÎļþ±£»¤Ò»Ð©ÔªËپݣ¬ÀýÈç·­Òëά»¤ÕßµÄÁªÏµÐÅÏ¢£¬µ«ÊÇÎļþµÄ´ó²¿·ÖÄÚÈÝÊÇÏûÏ¢Áбí--¼ò
µ¥µÄ·­Òë×Ö·û´®ºÍÌØÊâÓïÑÔµÄÕæÊµµÄ·­ÒëÎı¾Ó³Éä
ÀýÈ磬Èç¹ûÄãµÄDjango app°üº¬Îı¾"Welcome to my site."µÄ·­Òë×Ö·û´®£¬ÏñÕâÑù:
Java´úÂë ¸´ÖÆ´úÂë
  1. _("Welcome to my site.")  

È»ºómake-messages.py½«´´½¨Ò»¸ö°üº¬ÏÂÃæÏûϢƬ¶ÏµÄ.poÎļþ:
Java´úÂë ¸´ÖÆ´úÂë
  1. #: path/to/python/module.py:23  
  2. msgid "Welcome to my site."  
  3. msgstr ""  

Ò»¸ö¿ìËٵĽâÊÍ:
1£¬msgidÊÇ·­Òë×Ö·û´®£¬ËüÒÔÔ´ÏÔʾ£¬²»Òª¸ü¸ÄËü
2£¬msgstrÄã·ÅÖÃÓïÑÔרÓеķ­Ò룬ËüÒÔ¿Õ¿ªÊ¼£¬ËùÒÔ¸ü¸ÄËüÊÇÄãµÄÔðÈΣ¬È·ÈÏÄãÔÚÄãµÄ·­ÒëÖб£³ÖÒýºÅ
3£¬·½±ãÆð¼û£¬Ã¿¸öÏûÏ¢°üº¬·­Òë×Ö·û´®ÊÕ¼¯µÄÎļþÃûºÍÐкÅ
³¤ÏûÏ¢ÊÇÌØÊâÇé¿ö£¬ÕâÀïmsgstr(»òmsgid)ºóÃæµÄµÚÒ»¸ö×Ö·û´®ÊÇ¿Õ×Ö·û´®£¬ÄÚÈݱ¾ÉíÔòÔÚϼ¸ÐÐÒÔÿÐÐÒ»¸ö×Ö·û´®À´Ð´£¬Õâ
Щ×Ö·û´®Ö±½ÓÁ¬½Ó£¬²»ÒªÍüÁË×Ö·û´®ÖнáβµÄ¿Õ¸ñ£¬·ñÔò£¬ËüÃÇ»áûÓпոñÁ¬ÔÚÒ»Æð
×¢ÒâÄãµÄ×Ö·û¼¯
µ±ÓÃÄã×îϲ»¶µÄÎı¾±à¼­Æ÷´´½¨.poÎļþʱ£¬Ê×Ïȱ༭×Ö·û¼¯ÐÐ(ËÑË÷"CHARSET")²¢ÉèÖÃËüΪÄ㽫ʹÓÃÀ´±à¼­ÄÚÈݵÄ×Ö·û¼¯
ͨ³£utf-8Ó¦¸ÃΪ´ó²¿·ÖÓïÑÔ¹¤×÷£¬µ«ÊÇgettextÓ¦¸Ã´¦ÀíÈκÎÄã¸øËüµÄ×Ö·û¼¯
ÔËÐÐÏÂÃæµÄÃüÁîÀ´ÎªÐµķ­Òë×Ö·û´®ÖØÐ¼ì²éËùÓÐÔ´´úÂëºÍÄ£°å²¢ÎªËùÓÐÓïÑÔ¸üÐÂËùÓеÄÏûÏ¢Îļþ:
make-messages.py -a

±àÒëÏûÏ¢Îļþ
ÔÚÄã´´½¨ÄãµÄÏûÏ¢ÎļþÖ®ºó--²¢ÇÒÿ´ÎÄã¸ü¸ÄËüʱ--Ä㽫ÐèÒª±àÒëËü³É¸üÓÐЧµÄÐÎʽ£¬Í¨¹ýgettextʹÓã¬Í¨¹ýbin/compile
-messages.py¹¤¾ßÍê³ÉÕâ¸ö
¸Ã¹¤¾ß¶ÔËùÓпɵõ½µÄ.poÎļþÔËÐв¢´´½¨.moÎļþ£¬.moÎļþÊÇÓÅ»¯µÄ¶þ½øÖÆÎļþÀ´ÈÃgettextʹÓã¬ÔÚͬһĿ¼Äã¿ÉÒÔÔËÐÐ
make-messages.py£¬ÏñÕâÑùÔËÐÐcompile-messages.py:
bin/compile-messages.py
¾ÍÕâÑù£¬ÄãµÄ·­ÒëÒѾ­¿ÉÒÔʹÓÃ

DjangoÔõÑù·¢ÏÖÓïÑÔÑ¡Ôñ
Ò»µ©Äã×¼±¸ÁËÄãµÄ·­Òë--»òÕߣ¬Èç¹ûÄãÖ»ÏëʹÓÃDjango×Ô´øµÄ·­Òë--Ä㽫ֻÐèҪΪÄãµÄapp¼¤»î·­Òë
ÔÚÄ»ºó£¬DjangoÓÐÒ»¸ö·Ç³£Áé»îµÄÄ£ÐÍÀ´¾ö¶¨ÄĸöÓïÑÔÓ¦¸ÃʹÓÃ--°²×°¿í¶È£¬ÎªÌØÊâµÄÓû§£¬»òÕßÁ½Õß
ΪÁËÉèÖð²×°¿í¶ÈµÄÓïÑÔÑ¡Ôñ£¬ÔÚÄãµÄsettingsÎļþÉèÖÃLANGUAGE_CODE£¬DjangoʹÓøÃÓïÑÔ×÷ΪĬÈÏ·­Òë--Èç¹ûûÓÐÆäËû
·­ÒëÕßÕÒµ½·­ÒëÔò×÷¸Ã×îÖÕ³¢ÊÔ
Èç¹ûËùÓÐÄãÏë×öµÄÖ»ÊÇÓÃÄãµÄ±¾µØÓïÑÔÔËÐÐDjango£¬²¢ÇÒÒ»¸öÓïÑÔÎļþ¶ÔÄãµÄÓïÑԿɵõ½£¬ËùÓÐÄãÐèÒª×öµÄÖ»ÊÇÉèÖÃLANGUA
GE_CODE
Èç¹ûÄãÏëÈÃÿ¸öµ¥¶ÀµÄÓû§Ö¸¶¨ÄĸöÓïÑÔËûÏëÑ¡Ôñ£¬Ê¹ÓÃLocaleMiddleware£¬LocaleMiddlewareÔÊÐí»ùÓÚ´ÓÇëÇóµÄÊý¾Ý×öÓï
ÑÔÑ¡Ôñ£¬ËüΪÿ¸öÓû§×Ô¶¨ÒåÄÚÈÝ
ΪÁËʹÓÃLocaleMiddleware£¬Ìí¼Ó'django.middleware.locale.LocaleMddleware'µ½ÄãµÄMIDDLEWARE_CLASSESÉèÖã¬ÒòΪÖÐ
¼ä¼þµÄ˳ÐòÓйØÏµ£¬ÄãÓ¦¸Ã×ñÑ­ÏÂÁÐָʾ:
1£¬È·ÈÏËüÊÇÊ×ÏȰ²×°µÄÖмä¼þÖеÄÒ»¸ö
2£¬ËüÓ¦¸ÃÔÚSessionMiddlewareºóÃæ£¬ÒòΪLocaleMiddlewareʹÓÃsessionÊý¾Ý
3£¬Èç¹ûÄãʹÓÃCacheMiddleware£¬°ÑLocaleMiddleware·ÅÔÚËüºóÃæ
ÀýÈ磬ÄãµÄMIDDLEWARE_CLASSES¿ÉÄÜ¿´ÆðÀ´ÏñÕâÑù:
Java´úÂë ¸´ÖÆ´úÂë
  1. MIDDLEWARE_CLASSES = (   
  2.    'django.contrib.sessions.middleware.SessionMiddleware',   
  3.    'django.middleware.locale.LocaleMiddleware',   
  4.    'django.middleware.common.CommonMiddleware',   
  5. )  

LocaleMiddlewareͨ¹ý¸ÃËã·¨³¢ÊÔ¾ö¶¨Óû§µÄÓïÑÔÑ¡Ôñ:
1£¬Ê×ÏÈ£¬ËüÔÚµ±Ç°Óû§µÄsessionÖÐѰÕÒdjango_language¼ü
2£¬Ê§°ÜµÄ»°£¬ËüѰÕÒ½Ðdjango_languageµÄcookie
3£¬Ê§°ÜµÄ»°£¬ËüѰÕÒAccept-Language HTTPÍ·²¿£¬¸ÃÍ·²¿Í¨¹ýÄãµÄä¯ÀÀÆ÷·¢ËͲ¢ÇÒ¸æËß·þÎñÆ÷ÄãÑ¡ÔñÄĸöÓïÑÔ£¬Í¨¹ýÓÅÏȼ¶
ÅÅÐò£¬Django³¢ÊÔÍ·²¿ÖеÄÿ¸öÓïÑÔÖ±µ½ËüÕÒµ½Ò»¸ö¿ÉÒԵõ½·­ÒëµÄÓïÑÔ
4£¬Ê§°ÜµÄ»°£¬ËüʹÓÃÈ«¾ÖµÄLANGUAGE_CODEÉèÖÃ
×¢Òâ:
1£¬ÔÚÕâЩµØ·½ÖеÄÿһ¸ö£¬ÓïÑÔÑ¡Ôñ±»ÆÚÍûΪ±ê×¼ÓïÑÔ¸ñʽ£¬×÷Ϊһ¸ö×Ö·û²Á£¬ÀýÈ磬°ÍÎ÷Ϊpt-br
2£¬Èç¹û»ù±¾ÓïÑÔ¿ÉÒԵõ½µ«ÊÇÖ¸¶¨µÄ×ÓÓïÑÔ²»ÄÜ£¬DjangoʹÓûù±¾ÓïÑÔ£¬ÀýÈ磬Óû§Ö¸¶¨de-at(°ÂµØÀûµÂ¹ú)µ«ÊÇDjangoÖ»
ÓÐde¿ÉµÃµ½£¬ÔòDjangoʹÓÃde
3£¬Ö»ÓÐÔÚLANGUAGESÉèÖÃÖÐÁгöµÄÓïÑÔ¿ÉÒÔ±»Ñ¡Ôñ£¬Èç¹ûÄãÏëÏÞÖÆÓïÑÔÑ¡ÔñΪÌṩµÄÓïÑÔµÄ×Ó¼¯(ÒòΪÄãµÄ³ÌÐò²»ÌṩËùÓÐÕâ
ЩÓïÑÔ)£¬ÉèÖÃLANGUAGSΪһ¸öÓïÑÔÁбí£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. LANGUAGES = (   
  2.   ('de', _('German')),   
  3.   ('en', _('English')),   
  4. )  

Õâ¸öÀý×ÓÏÞÖÆ¿ÉµÃµ½ÓïÑÔΪѡÔñµÂÓïºÍÓ¢Óï(ÒѾ­ÈκÎ×ÓÓïÑÔ£¬Èçde-ch»òen-us)
4£¬Èç¹ûÄ㶨ÒåÒ»¸ö×Ô¶¨ÒåLANGUAGESÉèÖ㬺ÍÇ°Ãæ½âÊ͵ÄÒ»Ñù£¬±ê¼ÇÓïÑÔΪ·­Òë×Ö·û´®ÊÇ¿ÉÒÔµÄ--µ«ÊÇʹÓÃ"¼ÙµÄ"gettext()
·½·¨£¬¶ø²»ÊÇdjango.utils.translationÖеģ¬ÄãÓ¦¸Ã´Ó²»ÔÚÄãµÄsettingsÎļþÖÐimport django.utils.translation£¬ÒòΪ
¸ÃÄ£¿é±¾ÉíÒÀÀµÓÚsettings£¬²¢ÇÒËü²»»áµ¼ÖÂÑ­»·import
½â¾ö·½°¸ÊÇʹÓÃ"¼ÙµÄ"gettext()·½·¨£¬ÕâÀïÊÇÒ»¸ösettingsÎļþµÄÀý×Ó:
Java´úÂë ¸´ÖÆ´úÂë
  1. gettext = lambda s: s   
  2.   
  3. LANGUAGES = (   
  4.     ('de', gettext('German')),   
  5.     ('en', gettext('English')),   
  6. )  

ʹÓøÃÅÅÁУ¬make-messages.py½«ÈÔȻΪ·­ÒëѰÕҺͱê¼ÇÕâЩ×Ö·û´®£¬µ«ÊÇ·­Òë²»»áÔÚÔËÐÐʱ·¢Éú--ËùÒÔÄ㽫ÐèÒª¼ÇסÔÚÕæ
ʵµÄgettext()ÖÐÔÚÔËÐÐʱÓÃʹÓÃLANGUAGESµÄ´úÂë°ü×°ÓïÑÔ
5£¬LocaleMiddlewareÖ»ÄÜÑ¡ÔñÓÐDjangoÌṩµÄ»ù±¾·­ÒëµÄÓïÑÔ£¬Èç¹ûÄãÏëΪÄãµÄûÓÐDjangoµÄÔ´´úÂëÊ÷Öеķ­Ò뼯µÄ³ÌÐò
Ìṩ·­Ò룬Ä㽫ÏëÖÁÉÙÌṩ¸ÃÓïÑԵĻù±¾µÄ·­Ò룬ÀýÈ磬DjangoʹÓü¼ÊõÉϵÄÏûÏ¢IDsÀ´·­ÒëÈÕÆÚºÍʱ¼ä¸ñʽ--ËùÒÔÄ㽫ÖÁÉÙ
ÐèÒªÄÇЩÈÃϵͳÕýÈ·¹¤×÷µÄ·­Òë
Ò»¸öºÃµÄ¿ªÊ¼µãÊǸ´ÖÆÓ¢ÓïµÄ.poÎļþ²¢ÖÁÉÙ·­Òë¼¼ÊõÏûÏ¢--¿ÉÄÜÒ²ÓÐÑéÖ¤ÏûÏ¢
¼¼ÊõÏûÏ¢IDsºÜÈÝÒ×ʶ±ð£¬ËüÃǶ¼ÊÇ´óдµÄ£¬Äã²»ÏñÆäËûÏûÏ¢Ò»Ñù·­ÒëÏûÏ¢ID£¬Äã¶ÔÌṩµÄÓ¢ÓïÖµÌṩÕýÈ·µÄ±¾µØ±äÁ¿£¬ÀýÈç
ʹÓÃDATETIME_FORMAT(»òÕßDATE_FORMAT»òÕßTIME_FORMAT)£¬Ëü½«ÎªÄãÏëÓÃÄãµÄÓïÑÔʹÓõĸñʽ×Ö·û´®£¬¸ñʽµÈͬÓÚnowÄ£°å
±êǩʹÓõĸñʽ×Ö·û´®
Ò»µ©LocaleMiddleware¾ö¶¨ÁËÓû§µÄÑ¡Ôñ£¬Ëüʹ¸ÃÑ¡Ôñ¿ÉÒÔΪÿ¸öÇëÇó¶ÔÏó×÷Ϊrequest.LANGUAGE_CODEµÃµ½£¬ÔÚÄãµÄÊÓͼ
´úÂëÖÐÃâ·Ñ¶ÈÈ´¸ÃÖµ£¬ÕâÀïÊÇÒ»¸ö¼òµ¥µÄÀý×Ó:
Java´úÂë ¸´ÖÆ´úÂë
  1. def hello_world(request, count):   
  2.     if request.LANGUAGE_CODE == 'de-at':   
  3.         return HttpResponse("You prefer to read Austrian German.")   
  4.     else:   
  5.         return HttpResponse("You prefer to read another language.")  

×¢Ò⣬¶ÔÓÚ¾²Ì¬(ÎÞÖмä¼þ)·­Ò룬ÓïÑÔλÓÚsettings.LANGUAGE_CODE£¬¶ÔÓÚ¶¯Ì¬(Öмä¼þ)·­ÒëËüλÓÚrequest.LANGUAGE_CODE

set_languageÖØ¶¨ÏòÊÓͼ
·½±ãÆð¼û£¬Django×Ô´øÒ»¸öÊÓͼdjango.views.i18n.set_language£¬ËüÉèÖÃÓû§µÄÓïÑÔÑ¡Ôñ²¢Öض¨Ïò»Øµ½Ç°Ò»Ò³Ãæ
ͨ¹ýÌí¼ÓÏÂÁÐÐе½ÄãµÄURLÅäÖÃÀ´¼¤»î¸ÃÊÓͼ:
Java´úÂë ¸´ÖÆ´úÂë
  1. (r'^i18n/', include('django.conf.urls.i18n')),  

(×¢Òâ¸ÃÀý×ÓʹÊÓͼ¿ÉÒÔÔÚ/i18n/setlang/µÃµ½)
¸ÃÊÓͼÆÚÍûͨ¹ýGET·½·¨µÃµ½£¬²¢ÓÐÒ»¸ölanguage²ÎÊýÉèÖÃÔÚ²éѯ×Ö·û´®ÀÈç¹ûsessionÖ§³ÖÊÇÔÊÐíµÄ£¬¸ÃÊÓͼÔÚÓû§µÄses
sionÖб£´æÓïÑÔÑ¡Ôñ£¬·ñÔò£¬ËüÔÚdjango_language cookieÀï±£´æÓïÑÔÑ¡Ôñ
ÔÚÉèÖÃÁËÓïÑÔÑ¡ÔñÖ®ºó£¬Django°´ÏÂÃæµÄËã·¨ÖØ¶¨ÏòÓû§:
1£¬DjangoÔÚ²éѯ×Ö·û´®Àï²éÕÒnext²ÎÊý
2£¬Èç¹ûËü²»´æÔÚ£¬»òÕßΪ¿Õ£¬Django³¢ÊÔRefererÍ·²¿ÖеÄURL
3£¬Èç¹ûËüΪ¿Õ--±È·½ËµÈç¹ûÓû§ä¯ÀÀÆ÷½ûÖ¹Á˸ÃÍ·²¿--È»ºóÓû§½«±»Öض¨Ïòµ½/(Õ¾µãµÄ¸ù)×÷ΪÍË·
ÕâÀïÊÇHTMLÄ£°å´úÂëµÄÀý×Ó:
Java´úÂë ¸´ÖÆ´úÂë
  1. <form action="/i18n/setlang/" method="get">   
  2. <input name="next" type="hidden" value="/next/page/" />   
  3. <select name="language">   
  4. {% for lang in LANGUAGES %}   
  5. <option value="{{ lang.0 }}">{{ lang.1 }}</option>   
  6. {% endfor %}   
  7. </select>   
  8. <input type="submit" value="Go" />   
  9. </form>  


ÔÚÄã×Ô¼ºµÄÏîÄ¿ÖÐʹÓ÷­Òë
Django°´ÏÂÃæµÄËã·¨²éÕÒ·­Òë:
1£¬Ê×ÏÈ£¬ËüÔÚ±»µ÷ÓõÄÊÓͼµÄ³ÌÐòĿ¼²éÕÒlocaleĿ¼£¬Èç¹ûËüÕÒµ½Ñ¡ÔñÓïÑԵķ­Ò룬Ôò·­Ò뽫±»°²×°
2£¬È»ºó£¬ËüÔÚÏîĿĿ¼²éÕÒlocaleĿ¼£¬ÈçËüÕÒµ½Ò»¸ö·­Ò룬Ôò¸Ã·­Ò뽫±»°²×°
3£¬×îºó£¬ËüÔÚdjango/conf/locale¼ì²é»ù±¾µÄ·­Òë
ÕâÖÖ·½Ê½Ï£¬Äã¿ÉÒÔд°üº¬×Ô¼ºµÄ·­ÒëµÄ³ÌÐò£¬²¢ÇÒÄã¿ÉÒÔÔÚÄãµÄÏîĿ·¾¶Öи²¸Ç»ù±¾·­Ò룬»òÕßÄã¿ÉÒÔ¹¹½¨Ò»¸ö°üº¬Ò»Ð©
appsµÄ´óÐÍÏîÄ¿²¢°ÑËùÓеķ­Òë·ÅÖÃÓÚÒ»¸ö¾Þ´óµÄÏîÄ¿ÏûÏ¢Îļþ£¬Ñ¡ÔñȨÔÚÄãÊÖÖÐ
×¢Òâ
Èç¹ûÄãÔÚʹÓÃÊÖ¶¯ÅäÖõÄsettings£¬ÓÉÓÚDjangoʧȥ¼ÆËãÏîĿĿ¼λÖõÄÄÜÁ¦£¬ÏîĿĿ¼ÖеÄlocaleĿ¼½«²»±»¼ì²â(Django
ͨ³£Ê¹ÓÃsettingsÎļþµÄλÖÃÀ´¾ö¶¨Õâµã£¬Èç¹ûÄãÊÖ¶¯ÅäÖÃÄãµÄsettingsÔòsettingsÎļþ²»´æÔÚ)
ËùÓеÄÏûÏ¢Îļþ²Ö¿âÒÔͬÑùµÄ·½Ê½×éÖ¯£¬ËüÃÇÊÇ:
1£¬$APPPATH/locale/(language)/LC_MESSAGES/django.(po|mo)
2£¬$PROJECTPATH/locale/(language)/LC_MESSAGES/django.(po|mo)
3£¬ÔÚÄãµÄsettingsÎļþÖÐËùÓеÄÔÚLOCALE_PATHSÖÐÁгöµÄ·¾¶ÒÔ¸Ã˳ÐòËÑË÷(language)/LC_MESSAGES/django.(po|mo)
4£¬$PYTHONPATH/django/conf/locale/(language)/LC_MESSAGES/django.(po|mo)
ΪÁË´´½¨ÏûÏ¢Îļþ£¬ÄãºÍDjangoÏûÏ¢ÎļþʹÓÃÏàͬµÄmake-messages.py¹¤¾ß£¬ÄãÖ»ÐèÔÚÕýÈ·µÄµØ·½--ÔÚconf/locale(Ô´´úÂë
Ê÷µÄÇé¿öÏÂ)»òÕßlocale/(appÏûÏ¢»òÏîÄ¿ÏûÏ¢Çé¿öÏÂ)Ŀ¼ËùÔÚµÄλÖã¬ÄãʹÓÃÏàͬµÄcompile-messages.pyÀ´Éú³Égettext
ʹÓõĶþ½øÖÆdjango.moÎļþ
³ÌÐòÏûÏ¢ÎļþÓÐЩÄÑÒÔ·¢ÏÖ--ËüÃÇÐèÒªLocaleMiddleware£¬Èç¹ûÄ㲻ʹÓøÃÖмä¼þ£¬ÔòÖ»ÓÐDjangoÏûÏ¢ÎļþºÍÏîÄ¿ÏûÏ¢Îļþ
½«±»´¦Àí
×îºó£¬ÄãÓ¦¸Ã˼¿¼Ò»ÏÂÄãµÄ·­ÒëÎļþµÄ½á¹¹£¬Èç¹ûÄãµÄ³ÌÐòÐèÒªµÝË͸øÆäËûÓû§²¢ÇÒ½«ÔÚÆäËûÏîÄ¿ÀïʹÓã¬Äã¿ÉÄÜÏñʹÓÃapp
רÓеķ­Ò룬µ«ÊÇʹÓÃappרÓеķ­ÒëºÍÏîÄ¿·­Òë¿ÉÄܲúÉú¹ÖÒìµÄmake-messagesÎÊÌâ:make-messages½«´©Ô½µ±Ç°Â·¾¶ÏÂËùÓÐ
µÄĿ¼ÕâÑù¿ÉÄܰÑÏûÏ¢IDs·ÅÖõ½ÒѾ­ÔÚ³ÌÐòÏûÏ¢ÎļþµÄÏîÄ¿ÏûÏ¢ÎļþÖÐ
×î¼òµ¥µÄ·½Ê½ÊǰѲ»ÊÇÏîÄ¿µÄÒ»²¿·ÖµÄ³ÌÐò´æ´¢ÔÚÏîÄ¿Ê÷ÍâÃæ(ÕâÑùÔòЯ´øËüÃÇ×Ô¼ºµÄ·­Òë)£¬ÕâÖÖ·½Ê½Ï£¬ÏîÄ¿¼¶±ðµÄmake-
messages½«Ö»·­ÒëÁ¬½Óµ½ÄãµÄÍâÔÚÏîÄ¿µÄ×Ö·û´®¶ø²»Êǵ¥¶À·¢²¼µÄ×Ö·û´®

·­ÒëºÍJavaScript
Ìí¼Ó·­Òëµ½JavaScript²úÉúһЩÎÊÌâ:
1£¬JavaScript´úÂë²»ÄÜ·ÃÎÊgettextʵÏÖ
2£¬JavaScript´úÂë²»ÄÜ·ÃÎÊ.po»òÕß.moÎļþ£¬ËüÃÇÐèҪͨ¹ý·þÎñÆ÷µÝËÍ
3£¬JavaScriptµÄ·­ÒëĿ¼Ӧ¸Ã¾¡¿ÉÄÜС
DjangoÌṩÕâЩÎÊÌâµÄÒ»¸ö¼¯³É·½°¸:Ëü´«µÝ·­Òë¸øJavaScript£¬ËùÒÔÄã¿ÉÒÔÔÚJavaScriptÀïµ÷ÓÃgettextµÈµÈ

javascript_catalogÊÓͼ
ÕâЩÎÊÌâµÄÖ÷Òª½â¾ö·½°¸ÊÇjavascript_catalogÊÓͼ£¬ËüʹÓÃÄ£·Âgettext½Ó¿ÚµÄ·½Ê½·¢ËÍJavaScript´úÂë¿â£¬¼ÓÉÏÒ»¸ö·­Òë
×Ö·û´®Êý×飬ÕâЩ·­Òë×Ö·û´®À´×ÔÓÚ³ÌÐò£¬ÏîÄ¿»òÕßDjango´úÂ룬¸ù¾ÝÄãÔÚinfo_dict»òURLÀïÖ¸¶¨µÄ¶«Î÷
ÄãÏñÕâÑùÀ´Ê¹ÓÃËü:
Java´úÂë ¸´ÖÆ´úÂë
  1. js_info_dict = {   
  2.     'packages': ('your.app.package',),   
  3. }   
  4.   
  5. urlpatterns = patterns('',   
  6.     (r'^jsi18n/$''django.views.i18n.javascript_catalog', js_info_dict),   
  7. )  

ÔÚpackagesÀïµÄÿ¸ö×Ö·û´®Ó¦¸ÃΪPythonСÊýµã°üÓï·¨(ºÍÔÚINSTALLED_APPSÀïµÄ×Ö·û´®¸ñʽһÑù)²¢ÇÒÓ¦¸ÃÒýÓðüº¬locale
Ŀ¼µÄ°ü£¬Èç¹ûÄãÖ¸¶¨¶à¸ö°ü£¬ËùÓÐÕâЩĿ¼ºÏ²¢ÎªÒ»¸öĿ¼£¬Èç¹ûÄãÓÐʹÓò»Í¬³ÌÐòµÄ×Ö·û´®µÄJavaScriptµÄ»°ÕâºÜÓÐÓÃ
Äã¿ÉÒÔͨ¹ý°Ñ°ü·ÅÔÚURLģʽÀïÀ´ÈøÃÊÓͼ±äµÃ¶¯Ì¬:
Java´úÂë ¸´ÖÆ´úÂë
  1. urlpatterns = patterns('',   
  2.     (r'^jsi18n/(?P<packages>\S+?)/$, 'django.views.i18n.javascript_catalog'),   
  3. )  

ͨ¹ýÕâ¸ö£¬ÄãÔÚURLÀïÖ¸¶¨ÁËͨ¹ý'+'ºÅ·Ö¸ôµÄ°üÃûÁÐ±í£¬Èç¹ûÄãµÄÒ³ÃæÊ¹ÓÃÀ´×ÔÓÚ²»Í¬appsµÄ´úÂë²¢ÇÒËü¾­³£¸Ä±ä²¢ÇÒÄã²»
Ï뽫Æä·ÅÔÚÒ»¸ö´óµÄĿ¼ÎļþÀïµÄ»°Õâ·Ç³£ÓÐÓ㬳öÓÚ°²È«¿¼ÂÇ£¬ÕâЩֵֻÄÜΪdjango.conf»òÕßINSTALLED_APPSÉèÖÃÖеÄ
°ü

ʹÓÃJavaScript·­ÒëĿ¼
ΪÁËʹÓøÃĿ¼£¬Ö»ÐèÏñÕâÑù³éÈ¡¶¯Ì¬Éú³ÉµÄ½Å±¾:
Java´úÂë ¸´ÖÆ´úÂë
  1. <script type="text/javascript" src="/path/to/jsi18n/"></script>  

Õâ½âÊÍÁËadminÔõÑùµÃµ½´Ó·þÎñÆ÷µÃµ½·­ÒëĿ¼£¬µ±Ä¿Â¼ÔØÈëʱ£¬ÄãµÄJavaScript´úÂë¿ÉÒÔʹÓñê×¼µÄgettext½Ó¿ÚÀ´·ÃÎÊËü
Java´úÂë ¸´ÖÆ´úÂë
  1. document.write(gettext('this is to be translated'));  

ÉõÖÁÓÐÒ»¸öngettext½Ó¿ÚºÍÒ»¸ö×Ö·û´®²å²¹·½·¨:
Java´úÂë ¸´ÖÆ´úÂë
  1. d = {   
  2.     count: 10  
  3. };   
  4. s = interpolate(ngettext('this is %(count)s object''this are %(count)s objects', d.count), d);  

¸Ãinterpolate·½·¨Ö§³ÖλÖò岹ºÍÃüÃû²å²¹£¬ËùÒÔÉÏÃæµÄÄÚÈÝ¿ÉÒÔÕâÑùд:
Java´úÂë ¸´ÖÆ´úÂë
  1. s = interpolate(ngettext('this is %s object''this are %s objects'11), [11]);  

²å²¹Óï·¨½èÖúÓÚPython£¬Äã²»Ó¦¸Ã×ÜʹÓÃ×Ö·û´®²å²¹:ËüÈÔÈ»ÊÇJavaScript£¬ËùÒÔ´úÂ뽫²»µÃ²»×öÖØ¸´µÄÕýÔò±í´ïÊ½Ìæ»»£¬Õâ
²»ÏñÔÚPythonÖÐ×ö×Ö·û´®²å²¹ÄÇô¿ì£¬ËùÒÔµ±ÄãÕæÕýÐèÒªËüʱ²ÅʹÓÃËü(ÀýÈ磬Óëngettext¹¤×÷À´Éú³ÉÕýÈ·µÄ¸´ÊýÐÎʽ)

´´½¨JavaScript·­ÒëĿ¼
ÄãʹÓÃÆäËûDjango·­ÒëĿ¼ͬÑùµÄ·½Ê½À´´´½¨ºÍ¸üз­ÒëĿ¼--ʹÓÃmake-messages.py¹¤¾ß£¬Î¨Ò»µÄÇø±ðÊÇÄãÐèÒªÏñÕâÑùÌá
¹©Ò»¸ö-d djangojs²ÎÊý:
Java´úÂë ¸´ÖÆ´úÂë
  1. make-messages.py -d djangojs -l de  

Õ⽫ΪµÂÓïµÄJavaScript´´½¨»ò¸üз­ÒëĿ¼£¬ÔÚ¸üз­ÒëĿ¼֮ºó£¬ÏñÆÕͨDjango·­ÒëĿ¼һÑùÔËÐÐcompile-messages.py

ÊìϤgettextµÄÓû§×¢Òâ
Èç¹ûÄãÁ˽âgettext£¬Äã¿ÉÄÜ×¢Òâµ½Django×ö·­ÒëµÄÕâÐ©ÌØÐÔ:
1£¬×Ö·û´®ÁìÓòΪdjango»òÕßdjangojs£¬×Ö·û´®ÁìÓòÓÃÀ´Çø·Ö²»Í¬µÄ´æ´¢Êý¾ÝÓÚͨÓÃÏûÏ¢Îļþ¿â(ͨ³£ÔÚ/usr/share/locale/)
µÄ³ÌÐò£¬djangoÁìÓò±»pythonºÍÄ£°å·­Òë×Ö·û´®Ê¹Óò¢ÇÒÔØÈ뵽ȫ¾Ö·­ÒëĿ¼£¬djangojsÁìÓòÖ»±»JavaScript·­ÒëĿ¼ÓÃÀ´
È·ÈÏËüÃǾ¡¿ÉÄÜС
2£¬DjangoֻʹÓÃgettextºÍgettext_noop£¬ÕâÊÇÒòΪDjangoÄÚ²¿Ò»Ö±Ê¹ÓÃDEFAULT_CHARSET×Ö·û´®£¬¶ÔugettextûÓкܶàʹÓÃ
ÒòΪÄãÒ»Ö±ÐèÒªÉú³Éutf-8
3£¬Django²»µ¥¶ÀʹÓÃxgettext£¬ËüʹÓÃxgettextºÍmsgfmtµÄPython°ü×°Æ÷£¬ÕâÖ÷ÒªÊÇΪÁË·½±ã
°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿
Ö÷Õ¾Ö©Öë³ØÄ£°å£º 狠狠色伊人亚洲综合成人 | 国产综合不卡 | 九九九伊在人线综合2023 | 国产视频亚洲一区 | 久久123区 | 午夜在线观看福利 | www.日本在线视频 | 国产欧美一二三区 | www在线观看免费视频 | 97成人资源网 | 亚洲天堂一| 国产电影久久久久久久 | 一区二区成人影院 | 999色视频| 91久久久久| 久草aa| 99热精品免费 | 亚洲欧美男人天堂 | 一区二区三区久久 | 91高清视频在线 | 一区二区成人影院 | 国产成人精品亚洲777人妖 | 久久久精品国产一区二区三区 | 国产传媒懂得 | av片大全| 亚洲精品国产视频 | 亚洲精品在线免费观看视频 | 午夜性色a√在线视频观看9 | 国产成人毛片 | 久久精品国产午夜做受体验区 | www.97色.com| 国产欧美一区二区三区免费 | 91正在播放 | 99热国 | 在线免费看毛片 | 国产福利免费观看 | 91精品少妇偷拍99 | www.guochan| 亚洲涩涩图 | 久久久精品中文字幕 | 97日日日|