以åã®æçš¿ã§ããã³ãã«ããŒãã³ãã¬ãŒãããgettextæååãæœåºããpybabel-hbsãäœæããå¿
èŠãããçç±ãšçç±ã«ã€ããŠæžããŸããã
å°ãåŸã«ãjsonããåããã®ãæœåºããå¿
èŠããããŸããã
ããããpybabel-jsonãçãŸããæ¹æ³ã§ãã
githubã« pybabel-jsonãpipã€ã³ã¹ããŒã«ããbabelã«çµã¿èŸŒãŸããjavascript lexerã䜿çšããŸãããã埮åŠãªéãããããŸããããæçš¿ã¯ããã«ã€ããŠã§ã¯ãªããhbsãã©ã°ã€ã³ãããé¢çœãæžãããŠããããã»ãšãã©æ³šæããå¿
èŠã¯ãããŸããã
ãã®æçš¿ã¯ãããŒã«ã©ã€ãºã®ã»ããå
šäœããããŒã¿ããŒã¹ãŸãã¯ä»ã®ãŸã£ããéçã§ãªãå Žæããã®ããŒã¿ãã©ã®ããã«åŠçããã®ããäžè¬çã«ã©ã®ããã«èŠãããã«ã€ããŠã§ãã
å«ãŸãããã®ïŒ
ïŒç§ã¯èšãå¿
èŠããããŸã-ã¢ã€ãã ã¯å¿
é ã§ã¯ãããŸãããããã¯ãã¹ãŠéšåçã«ã®ã¿å¿
èŠã«å¿ããŠã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããã®ã¯éåžžã«ç°¡åã§ãïŒ-ããã«ã ã¢ããªã±ãŒã·ã§ã³ãããŒã«ã©ã€ãºããããã®ãŠãŒãã£ãªãã£ã®ã»ããã
-ãããã ã¿ã¹ã¯ãããŒãžã£ãŒã
-ã³ãŒããŒã¹ã¯ãªããã ãã¬ãŒã³ããŒã·ã§ã³ã¯å¿
èŠãããŸãããã¯ã©ã€ã¢ã³ãã³ãŒãã¯ãã¹ãŠã³ãŒããŒã§æžãããŠãããããããæååãæœåºããå¿
èŠããããŸãã
-ãã³ãã«ããŒ-ãã³ãã¬ãŒã
-json-æååã¹ãã¬ãŒãž
-ãžã§ãã jsçšã®gettextã¯ã©ã€ã¢ã³ã
-po2jsonã JedããµããŒããã.poãã¡ã€ã«ã.json圢åŒã«å€æãããŠãŒãã£ãªãã£
gettextãšç¥è©±ã«ã€ããŠ
gettextã¯åœåãã¢ããªã±ãŒã·ã§ã³ãããŒã«ã©ã€ãºããããã®ãŠãŒãã£ãªãã£ã®ã»ããã§ãããã仿¥ã¯gettextãäžè¬ã«åãå
¥ããããŠãã圢åŒãšãåŒã³ãŸãã ïŒå¯äžã®ãã®ãšæ··åããªãã§ãã ããïŒ
æå°éã®ãšãã»ã³ã¹ã¯æ¬¡ã®ããã«èª¬æã§ããŸãïŒç¹å®ã®gettext颿°ãééããŠç®çã®èšèªã®è¡ã«å€ããè±èªã®è¡ããããŸãããè€æ°åœ¢ã®ç°ãªãæ²çšã«é¢ããèšèªã®èŠå+ã³ã³ããã¹ããšãã¡ã€ã³ãæå®ããæ©èœãä¿æããŸãã
è¡ã§ãããããŒã§ãããã©ããã§ããã¹ãã«ãªã宿°USER_WELCOME_MESSAGEã§ã¯ãªãããšã«æ³šæããããšãéèŠã§ãã
誰ããã³ã³ããã¹ããå¿
èŠãšããŠããããã§ã¯ãªããäžå¿
èŠã«ãã«ãªã¯ãšã¹ããæè¿ããŠãããããBabelãã©ã°ã€ã³ã«ã¯ãŸã å®è£
ããŠããŸãã
åŸã§ãã¡ã€ã³ã«é¢ããããã€ãã®åèªããããŸãã
ãã ãã
ngettextã¯ã
ãã¹ãŠã§ã¯ãªãã«ããŠããå€ãã®äººã«ãšã£ãŠ
å¿
éåã§ãã
ãããŠç¥è©±ã«ã€ããŠã
ãããã¯ãŒãã ãªã³ãŽãªã
ãªã³ãŽäžåã ãªã³ãŽ1å
2ã€ã®ãªã³ãŽã ããã2å
5ã€ã®ãªã³ãŽã 5ã€ã®ãªã³ãŽ
ãã®ç°¡åãªäŸã¯ããUSER_WELCOME_MESSAGEãã«äŒŒãèšèªå®æ°ãæãããã¹ãŠã®äººã瀺ããŠããŸãã
babelã§äºåå®çŸ©ããã³èª¬æãããŠããã«ãŒã«ã«ãããéžæããè¡ã決ãŸããŸãã
ããšãã°ãããã¯è±èªçšã§ãã
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
ããã¯ãã·ã¢èªçšã§ãïŒ
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
ã°ã¬ãŒããšãã€ãã£:)
æããå¿
èŠã¯ãããŸãããããšãã°æ¥æ¬èªã®å Žåããããæåã§æžãå¿
èŠã¯ãããŸããã
ã ãããç¥è©±ã«ã€ããŠã
äœåºŠããã¡ã€ã³ãµã€ãããã·ã¢èªã§äœæãããã·ã¢èªã®è¡ãgettextåŒã³åºãã§ã©ããããŠããè±èªã远å ã§ãããšããæèŠãèããŸããã
åãèšèªå®æ°ã䜿çšããŠããæŸèæãæã£ãŠããå Žåãæ°åãå«ãåŸææã¯ãªãããYou have applesïŒ1ãã®ãããªugã圢åŒã䜿çšããŠããã®ã§ããã¡ããåºæ¬çãªãã·ã¢èªãå®è¡ã§ããŸãã
ããªã³ãŽã1åãããŸãããããªã³ãŽã7åãããŸãããªã©ãããå°ãçŸããã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºããå Žåã¯ãã¡ã€ã³èšèªãè±èªã«ããå¿
èŠããããŸãã
ãªãã§ïŒ ãããããã¹ãŠã§ããè€æ°åœ¢ã¯åžžã«åæ°åœ¢ã§ãããšã¯éãããåæ°åœ¢ã¯åžžã«åäœã§ãããšã¯éããŸããã
ãã®ç¹ã§è±èªã¯ç°¡åã§ããããã·ã¢èªã§ã¯ãããŸããã
ããŒã¯æ£ç¢ºã«è±èªãæ³å®ããŠãããããããã©ã«ãã§ã¯ngettextã ããã«ãngettextã¯ãå
¥åãšããŠ2ã€ã®ãã©ã¡ãŒã¿ãŒïŒåæ°åœ¢ãšè€æ°åœ¢ïŒã®ã¿ãåããŸãã ãããŠãè€æ°ã®é
åã§ã¯ãããŸããã
ãããã£ãŠãããã©ã«ãã§ãã·ã¢èªãåŒãç¶ã䜿çšããå Žåã¯ãå°ãªããšããã·ã¢èªãšãã·ã¢èªã®ç¿»èš³ãã¡ã€ã«ããµããŒãããå¿
èŠããããŸãããã®ãã¡ã€ã«ã§ã¯ããYou haveïŒ
s applesããšããè¡ãæ£ããæ²çšã«å€ãããŸãã ã¯ããã§ããŸã-ããããæ²ãã£ãŠããŸãã
倿Žãããšãã¯ããã·ã¢èªã®æååã§ã¯ãªããããŒã®ã¿ã倿ŽãããããšãèŠããŠããå¿
èŠããããŸãããŸãããã·ã¢èªã®èšèªãã¡ã€ã«ã䞊è¡ããŠç·šéããå¿
èŠããããŸãã äžè¬ã«ããããè¡ãå¿
èŠã¯ãããŸããã ngettextã¯ãå
ã®è±èªãšå¯èœãªéãäºææ§ããããŸãã
ãšããã§ãåæã«.poãã¡ã€ã«ãè±èªãšãã·ã¢èªãæ€çŽ¢ããæ¹æ³ã®äŸã瀺ããŸã
msgid "You have %(apples_count)d apple" msgid_plural "You have %(apples_count)d apples" msgstr[0] " %(apples_count)d " msgstr[1] " %(apples_count)d " msgstr[2] " %(apples_count)d "
msgid "You have %(apples_count)d apple" msgid_plural "You have %(apples_count)d apples" msgstr[0] "" msgstr[1] ""
ã€ãŸããçµæã®è¡æ°ã¯èšèªæ§æã«äŸåããŸãã ãã¶ããããŒã¹ã®è€æ°åœ¢ãããèšèªããããŸã...
OKãããã§ã¯ã©ãããå§ããŸããïŒ
ãŸã 3åã®ãªã³ãŽãæã£ãŠãããã¹ãŠã®äººã¯ãå§ããããã«ããæ°ããªããã°ãªããŸãã
pip install babel
é£ããéšåã¯åŸãã«ãããŸãã
æ®ããŸãïŒ
-ã³ãŒãå
ã®ãã¹ãŠã®ããã¹ããgettextåŒã³åºãã«å€æŽããŸã
-ã³ãŒãã«babelãèšå®ãã
-åä¿¡ãã.potãã¡ã€ã«ã«åºã¥ããŠãç®çã®åèšèªã«å¯Ÿå¿ãã.poãã¡ã€ã«ãäœæããŸãã
ãããŠå®éã«äœã翻蚳ããŸããïŒ
質åã¯äžèŠç°¡åããã§ã¯ãããŸããïŒ
ã·ã³ãã«ãªéšåã¯ãã³ãã¬ãŒããšã³ãŒãã§ãã
Djangoãšãã©ã¹ã³-ãã³ãã¬ãŒãããã®æœåºããããŸã
Pythonãšjavascriptã¯babelã«ãã£ãŠãã€ãã£ãã«ãµããŒããããŠããŸã
handlebarsãšjson-æçš¿ã®æåã«ãªã³ã¯ãäœæããå¿
èŠããããŸããã
coffeescriptã®å Žå-ã¬ã·ãã®è©³çް
ãã®ä»ãã¹ãŠ-Googleã«ããæå©
ç¹°ãè¿ããŸããããã®éšåã¯åçŽã§ãããã®ããããã¹ãŠã®è¡ã¯ãåæœåºããã°ã©ã ãå¿
èŠãšãã圢åŒã«åŸã£ãŠgettext / ngettextã®åŒã³åºãã§ã©ããããå¿
èŠããããŸãã ååãšããŠã䜿çšããæ©èœããªãŒããŒã©ã€ãããæ©èœãæäŸããŸãã
ããšãã°ãç§ã¯ãããæã£ãŠããŸãïŒ
pybabel extract -F babel.cfg -o messages.pot -k "trans" -k "ntrans:1,2" -k "__" .
transãšntransã¯javascriptã«å¯ŸããŠæå®ããã__ã¯pythonã«å¯ŸããŠæå®ãããŸãããã®é¢æ°ã¯æååãééçã«éä¿¡ããããã«äœ¿çšãããŸãïŒè©³çްã¯åŸã»ã©ïŒ
以äžã§ã
printïŒ "apple"ïŒã¯
printïŒngettextïŒ "apple"ïŒïŒã«å€æããå¿
èŠããããŸã
ãããŠãã¹ãŠ
printïŒ "i haveïŒ
s apples"ïŒto printïŒngettextïŒ "I haveïŒ
s apples"ã "I haveïŒ
s apples"ãnum_of_applesïŒïŒ
num_of_applesïŒ
ããã§ãç§ã¯èª°ã䜿çšããªãããšãæã¿ãååã®ãªããã©ã¡ãŒã¿ãŒã®äœ¿çšãæšå¥šããªãããšã«æ³šæããå¿
èŠããããŸãã
ç§ã®å Žå-ååä»ãã®ãã®ã®ã¿ãã€ãŸããæ¬¡ã®ããã«ãªããŸãã
PythonïŒ
print(gettext("I have an apple!")) print(ngettext( "I have %(apples_count)d apple", "I have %(apples_count)d apples", num_of_apples ).format(apples_count=num_of_apples))
ãã©ã¹ã³ãšãžã£ã³ãŽã«ã¯ç¬èªã®ã©ãããŒããããããæšæºã®gettextã䜿çšãããŸã
JavascriptïŒ
console.log(i18n.trans("I have an apple!")) console.log(i18n.ntrans("I have %(apples_count)d apple","I have %(apples_count)d apples",num_of_apples,{apples_count:num_of_apples}));
ããããã³ã³ãŒããŒãããã·ã¯ãããããJedã¡ãœããã«äœ¿çšãããŸãã
github.com/tigrawap/pybabel-hbs/blob/master/client_side_usage/i18n.coffee
çµã¿èŸŒã¿ã®Jed sprintfã«ããããã©ã¡ãŒã¿ãŒãæååã«æž¡ãããŸã
CoffeescriptïŒ
console.log i18n.trans "I have an apple!" console.log i18n.ntrans "I have %(apples_count)d apple", "I have %(apples_count)d apples", num_of_apples, apples_count:num_of_apples
ããŒãã«ããŒïŒ
{{#trans}} I have an apple! {{/trans}} {{# ntrans num_of_apples apples_count=num_of_apples}} I have %(apples_count)d apple {{else}} I have %(apples_count)d apples {{/ntrans}}
JSONæååã¹ãã¢ïŒ
{ "anykey":"I have an apple!", "another_any_key":{ "type":"gettext_string", "funcname":"ngettext", "content":"I have %(apples_count)d apples", "alt_content":"I have %(apples_count)d apples" } }
ãªããããã¯ïŒpybabel-jsonããã¥ã¡ã³ãã§ã®ãã®åœ¢åŒã®èª¬ænum_of_applesãåŒã³åºãããšã«2åç¹°ãè¿ãããããšã«æ°ä»ãã®ã¯é£ãããªããšæããŸãã
çç±ã¯ãngettextã®åŒæ°ãšããŠæž¡ããããšãã©ã®æååã䜿çšããããæ±ºå®ãã2åç®ã¯ããã®æååã«ä»£å
¥ãããä»ã®å¯èœãªãã©ã¡ãŒã¿ãšãšãã«ãæååã®ãã©ã¡ãŒã¿ãšããŠäœ¿çšããããã§ãã
-ç§ãèšã£ãããã«-ããã¯åçŽãªéšåã§ãæ¢åã®ããã¹ããã©ããããŸãã
次ã«å¿
èŠ
1ïŒããã¹ãã®ãããã¿ã³ã«å»ãŸããŠãããã¹ãŠã®ãã¿ã³ã倿ŽããŸãã ããã¹ãä»ãã®ãã¿ã³ãæªãããšã¯èª°ããç¥ã£ãŠããŸãã ããããå€ãã®å Žåãããã¯ããé«éã§ãããèšèšè
ã¯ãã®ããã«æãã§ãããããåãå
¥ããããªããã°ãªããŸãã:)
-ãã®æ®µèœã§ã¯ãã¹ãŠãæç¢ºã«ãªããŸã-éå±ã§ãããå¿
èŠã§ã
2ïŒ
ãã£ãšè峿·±ãç¹ã¯ãäžèŠäžå®ã«èŠããè¡ãã©ãåŠçãããã§ãããã©ããå®å
šã«äžå®ã§ã¯ãªãã®ã§ããããïŒ
äŸãšããŠãç§ãã¡ã®ã±ãŒã¹-æã®ãžã£ã³ã«-ãæããŸãã ããã¯ãã€ããã¯ã¹ã®ããã§ããããããã¯ããŒã¿ããŒã¹ã«ä¿åãããŸãããå®éã«ã¯-ãŸãã«ããå€åããªãã¹ã¿ãã£ãã¯ã§ãããåãåã£ãŠç¿»èš³ã«éä¿¡ããã®ãè¯ãã§ãããã
ããããŸãã«pybabel-jsonã®åå ã§ãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ããµãŒãããŒãã£ã®ãµãŒããŒãšã©ãŒã¡ãã»ãŒãžãžã®å¿çãªã©ãä»ã®ç¿»èš³ã®åé¡ã«å¯Ÿãããœãªã¥ãŒã·ã§ã³ã§ããããŸãã ããã¯éçã§ãããšèšããŸãããããã¯å¶åŸ¡ã§ããªãéçã§ããã翻蚳ã®ããã«çŸããã©ããããå¿
èŠããããŸãã
å¿
èŠãªã®ã¯ã.jsonãã¡ã€ã«ãäœæããããšã ãã§ã
errors.jsonã³ã³ãã³ãä»ã
{ "from_F_service": [ "Connection error", "Access denied" ], "from_T_service":[ "Oops, it is too long" ] }
ããŒãªããæååã®ã¯ãªãŒã³é
åã
ãµãŒãã¹ãã¡ãã»ãŒãžã倿Žããå Žåã«çºçããææªã®äºæ
ã¯ããŠãŒã¶ãŒãæªç¿»èš³ããŒãžã§ã³ãåãåãããšã§ãã ååãšããŠããããã¯ããããªããšã§ã
ããŒã¿ããŒã¹å
ã®ããŒã¿ã«ã€ããŠã¯ãbuild-push-deployã·ã¹ãã ã§ã®ç¶æ³ã¯äœã§ã䌌ãŠããŸãïŒçµå±ã®ãšãããäœããããŸããïŒã ãã¹ãŠãçµã¿ç«ãŠãããã®ã³ãã³ããããããã¹ãŠã®babelãããŒã¿ããŒã¹ããå¿
èŠãªãã¹ãŠã®ããŒã¿ãæœåºããåæ§ã®jsonãåéãããããã®ã³ãã³ãã®åã«ã¹ã¯ãªããã远å ããå¿
èŠãããåãã¬ãã«ã§ããã©ãã¯ã«ãã£ãŠèµ·åãããbabelã¯ãã§ã«ããŒã¿ãåéããŸãã
ãã¡ããããœãŒã¹ç®¡çãèœã¡ãªãããã«ããã®ãããªãã¡ã€ã«ã¯äžè¬çã«.gitignoreãŸãã¯äœãã®é¡äŒŒç©ã«è¿œå ããå¿
èŠããããŸã
ãã®æ¹æ³ã§ååŸããããã¹ãŠã®æååã¯ãgettext颿°ã®åŒã³åºããééããå¿
èŠããããŸã
ã€ãŸããPythonã®å ŽåãgettextïŒïŒãjs JedãŸãã¯åè¿°ã®ãããã·ã¡ãœããã®å Žå
ãŸããéã®é åºã§å®è¡ããå Žåãããããšã«æ³šæããŠãã ããã ãŸãã¯ãéã®é åºã§è¡ãå¿
èŠããããŸãã
ã€ãŸããã³ãŒãå
ã§è¡ã翻蚳ããå¿
èŠããããã翻蚳èªäœã¯å¥ã®å Žæã§éå§ãããããšã決å®ããŸãã
Pythonã§äŸã瀺ããŸãã
class SomeView(MainView): title=gettext("This view title")
ãã®ãããªã³ãŒããäœæãããšããµãŒããŒã®èµ·åæã«ã¯ã©ã¹ãäœæãããå Žåã¯è±èªã§ã¯ã©ã¹ã®äœææžã¿ã³ããŒãååŸãããªã¹ã¯ãçºçããŸããäœæãåçã§ãããæåã®åŒã³åºãã§ãã£ãã·ã¥ãããå Žåã¯äžåœèªçãªã©
ãã®ãããªå Žåãç¿»èš³ã«æ³šæãããããæ£ããå Žæã§ç¿»èš³ããã
é©åãªå Žæã¯ãã¯ã©ã¹ã§ã¯ãªããªããžã§ã¯ããäœæããããšã§ã
ã€ãŸã
def __(string,*k,**kwargs): return string class MainView(SomeParent): def __init__(self):
ã€ãŸããæååã³ã¬ã¯ã¿ã¯__ã翻蚳çšã®æååãšããŠå®çŸ©ãã颿°èªäœã¯äœãå®è¡ãããé©åãªã¿ã€ãã³ã°ã§ç¿»èš³ãéå§ãããŸãã
ãããã£ãŠããã¹ãŠã1ã€ã®å Žæã«ãããçŸããèŠããŸãã
ããã¯ãnode.jsã§èšè¿°ããå Žåãcoffeescriptãjavascriptãå«ãå€ãã®èšèªã«é©çšãããŸãã
ãã©ãŠã¶ã«ãšã£ãŠã¯ãã¯ã©ã¹ã®äœææã§ããã©ã®èšèªãäœæãããããã§ã«ããã£ãŠããã¯ããªã®ã§ãããã¯ããŸãæå³ããããŸããã
ãã ãããããã«ããŠããã¯ã©ã¹ã®äœææã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ãŒã§ç¿»èš³ããæ¹ãæ£ç¢ºã§ãã
ç§ã«ç¥ãããŠããç¿»èš³ã®æ¹åã®ãã¹ãŠã®å¯èœæ§ããã€ãã¹ããããã§ããããããã¹ãŠè¡ããããšããŸãããã
ãã¹ãŠãäžç·ã«æ¥çãã
ããã§ãã¹ãŠãåéã§ããŸããããã€ãã®ç°¡åãªæé ããããŸãã
0ïŒãã¡ã€ã«ããªãå Žåã«å°æ¥èªããªãããã«ãå
ã®è¡ã®ç©ºã®ãã£ã¬ã¯ããªãäœæããŸã
touch messages.pot
1ïŒã¿ãŒã²ããèšèªã®.poãã¡ã€ã«ãäœæããããã¯1åè¡ããããã«ãã«å«ããã¹ãã§ã¯ãããŸããã .poãã¡ã€ã«ã¯ãåèšèªã®å
ã®è¡ãšããããžã®ç¿»èš³ã®äž¡æ¹ãå«ããã¡ã€ã«ã§ãã
pybabel init -i messages.pot -d path/i18n -l es
2ïŒ.potãã¡ã€ã«ïŒè¡ã®ã¡ã€ã³ãªããžããªïŒãäœæ/æŽæ°ããŸããããããã«ãã«ã¯å«ãŸããŸãããã翻蚳ã®ããã«éä¿¡ãããæ°ãã.poãã¡ã€ã«ãåä¿¡ããå¿
èŠãããå Žåã«å®è¡ããå¿
èŠããããŸãã
python/node/your_language update_translation_jsons
ããã§ã¯ãbabel.cfgãã¡ã€ã«ã®äŸã瀺ãã®ã¯äžèŠã§ããããã¯ãã©ã®ãã¡ã€ã«ããã©ã®ãã¡ã€ã«ããæååãæœåºãããã瀺ããããã³ã°ãã¡ã€ã«ã§ãã
[python: path/backend/notifier.py] [hbs: path/static/**.hbs] [json: path/static/i18n/src/**.json] [javascript: path/static/**.coffee_js] encoding = utf-8
3ïŒãã¹ãŠã®.poãã¡ã€ã«ãpo2jsonã§å®è¡ããŠ.jsonãååŸããŸããããã¯Jedãåãå
¥ããŸãã
ããã¯ãã«ãã«å«ããããšãã§ããå«ããå¿
èŠããããŸãã
ããªããã§ããªãããšã¯gitã§èš±å¯ããããšã§ãã圌ãã¯ããã«å±ããŠããŸããã
ãã¹ãŠã®.poãã¡ã€ã«ãæ£ç¢ºã«ãã£ãŒãããæ¹æ³ãšããããé
眮ããå Žæã¯ããŠãŒã¶ãŒã®è¯å¿ã«ããã£ãŠããŸãã
ãã«ãã®æ®ãã®éšåãšåãããã«ãç§ã¯ããããããªã声ã§å®è¡ããŸãã
githubãšã°ã©ã³ããªããžããªã«ããgrunt-po2jsonã¯ãåå倿ŽããµããŒãããŠããªãããå£ããŠããŸãããå¿
èŠã§ãããã¹ãŠã®æçµçãª.jsonãã¡ã€ã«ãåããã£ã¬ã¯ããªã«ç§»åããæ¹ã䟿å©ã§ãããããããŒã«ã«ã«ä¿®æ£ããŸãããããããéä¿¡ããå¿
èŠããããŸãã±ãŒã¹ãã«ãªã¯ãšã¹ã...
ãã¡ãããpo2jsonãã€ã³ã¹ããŒã«ããåŸïŒ
npm install po2json ïŒããã«ãã¹ã¯ãªããã«åæ§ã®ãã®ãå«ããæ¹ãã¯ããã«ç°¡åã§ãã
echo {es,en,fr,de,ja} | xargs -n1 -I {} po2json /path/i18n/{}/LC_MESSAGES/messages.pot /path/to/build/i18n/{}.json
ã¹ããªãŒã ã«å«ãŸããŠããªãããæ³šæãåŒãæå³ããã
ãã¹ãã®éã«åœŒã¯äœåºŠããåŸã§ãã£ãšããšçŽæããŸããããåŸã§é©åãªå Žæã¯ãããŸããã§ããã
äŸãã°ïŒ
coffeescriptã«ã¯ç¬èªã®æœåºæ©èœããããŸãããããã¯ãstaticsãæ§ç¯ãããšãã«ãcoffeescriptãjavascriptã§ã³ã³ãã€ã«ïŒãŸãã¯ç¿»èš³ïŒãããããã§ãã
ãããã£ãŠãjavascriptãžã®å€æåŸã«.jsæååã®ã¢ã»ã³ãã«ãéå§ããã ãã§ååã§ãã
ç§ã®å Žåããã¹ãŠãå°ãééã£ãŠããŸããåã³ãŒããŒãã¡ã€ã«ã®é£ã«ã¯coffee_jsãã¡ã€ã«ããããŸããããã¯ãç·šéæã«grunt watchã䜿çšããŠäœæããïŒãããŠéçãåèµ·åããŸãããããã¯å¥ã®æçš¿ã®ãããã¯ã§ã:)ïŒããããã®ãã¡ã€ã«ã¯ããèªäœgitaã®å€ã«ãããŸãã ããã«ãããããã®ç·ããããŸã
-ãã¡ã€ã³ã®èšåããããŸããã
ãã¡ã€ã³ã¯æçµçã«ç°ãªããã¡ã€ã«ãmessages.pot / messages.po =ãã¡ã€ã³ã¡ãã»ãŒãžã§ã
è€æ°ã®ãã¡ã€ã³åãäœæãããããã¹ãŠã®ãã¡ã€ã³åãJedã€ã³ã¹ã¿ã³ã¹ã«ãã€ã³ãããããè€æ°ã®ç°ãªãJedã€ã³ã¹ã¿ã³ã¹ãäœæããŠãããã«ãªãã€ã¬ã¯ããããã§ããŸãã
ãããããã®ããã«ã¯ããã«ããŒãã³ãã«ããŒãŸãã¯ä»ã®ã©ãããŒãæ¡åŒµããå¿
èŠããããŸã...ç§ã¯ãã®ãããªå¿
èŠæ§ã¯äžåºŠããããŸããã§ããããååãšããŠäºåã«äœåãªããšã¯äœãããªãããšã奜ã¿ãŸã:)
-å°å
¥ãããã¯ã®texãžã®å°ããªè泚
ããªã³ãŽã1åãããŸãããããªã³ãŽã7åãããŸãããªã©ãããå°ãçŸããã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºããå Žåã¯ãã¡ã€ã³èšèªãè±èªã«ããå¿
èŠããããŸãã
ngettextã®åŒã³åºãã§ã¯ãããªã³ãŽã1ã€ãããã§ã¯ãªãããyou haveïŒ
ïŒapples_countïŒd applesããšèšè¿°ããå¿
èŠãããããšãçè§£ããå¿
èŠããããŸãã
ãªããªãã1ã€ã®å Žåãš21çªç®ã®å Žåãæçµè¡ã¯æåã®åœ¢åŒã§ããå¿
èŠããããŸã-ã€ãŸãããYou haveïŒ
d appleã
-èªåã¬ãã«ã§ãŸã 解決ã§ããŠããªã1ã€ã®åé¡ã«çŠç¹ãåœãŠãããšãéèŠã§ãã
babelã¯ãJedãšäºææ§ã®ãªã圢åŒã§ã空è¡ãïŒèšèªãšãã®è€æ°è¡ã決å®ãã.poãã¡ã€ã«æ§æïŒãäœæããŸã
Jedã¯ãè€æ°åœ¢ãããã«ããããšãæåŸ
ããŸãããããã«ã¯è€æ°åœ¢ãçºè¡ããŸã
ããã§ã¯ãbabelã®åºåãJedã®å
¥åããŸãã¯ãããã®éãç·šéããå¿
èŠããããŸãã
ããããæåã«ãäž¡æ¹ã®æ§æãèŠãŠãã ããã
äœããèŠéãããèšè¿°ããªãã£ããªã© -ã³ã¡ã³ããè£è¶³ã«æžã蟌ã¿ãŸãã
ç®æšã¯ãåãŠãŒãã£ãªãã£ã詳现ã«åæããããšã§ã¯ãªãããããã®ååšãšãããããã©ã®ããã«ããããŠã©ã®ããã«æ£ç¢ºã«é£æºãããã«ã€ããŠè©±ãããšã§ããã
æ®ãã¯ã³ã¡ã³ãã§å ŽæãèŠã€ããŸã