å°ãåŸã«ã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): #.... self.title=gettext(self._title) #.... class SomeView(MainView): _title=__("This view title")
ã€ãŸããæååã³ã¬ã¯ã¿ã¯__ã翻蚳çšã®æååãšããŠå®çŸ©ããé¢æ°èªäœã¯äœãå®è¡ãããé©åãªã¿ã€ãã³ã°ã§ç¿»èš³ãéå§ãããŸãã
ãããã£ãŠããã¹ãŠã1ã€ã®å Žæã«ãããçŸããèŠããŸãã
ããã¯ãnode.jsã§èšè¿°ããå Žåãcoffeescriptãjavascriptãå«ãå€ãã®èšèªã«é©çšãããŸãã
ãã©ãŠã¶ã«ãšã£ãŠã¯ãã¯ã©ã¹ã®äœææã§ããã©ã®èšèªãäœæãããããã§ã«ããã£ãŠããã¯ããªã®ã§ãããã¯ããŸãæå³ããããŸããã
ãã ãããããã«ããŠããã¯ã©ã¹ã®äœææã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ãŒã§ç¿»èš³ããæ¹ãæ£ç¢ºã§ãã
ç§ã«ç¥ãããŠãã翻蚳ã®æ¹åã®ãã¹ãŠã®å¯èœæ§ããã€ãã¹ããããã§ããããããã¹ãŠè¡ããããšããŸãããã
ãã¹ãŠãäžç·ã«æ¥çãã
ããã§ãã¹ãŠãåéã§ããŸããããã€ãã®ç°¡åãªæé ããããŸãã
0ïŒãã¡ã€ã«ããªãå Žåã«å°æ¥èªããªãããã«ãå ã®è¡ã®ç©ºã®ãã£ã¬ã¯ããªãäœæããŸã
touch messages.pot
1ïŒã¿ãŒã²ããèšèªã®.poãã¡ã€ã«ãäœæããããã¯1åè¡ããããã«ãã«å«ããã¹ãã§ã¯ãããŸããã .poãã¡ã€ã«ã¯ãåèšèªã®å ã®è¡ãšããããžã®ç¿»èš³ã®äž¡æ¹ãå«ããã¡ã€ã«ã§ãã
pybabel init -i messages.pot -d path/i18n -l es # .po path/i18n/es ( i18n ) # , : ( , echo?, echo ) echo {es,en,fr,de,ja} | xargs -n1 pybabel init -i messages.pot -d path/i18n -l
2ïŒ.potãã¡ã€ã«ïŒè¡ã®ã¡ã€ã³ãªããžããªïŒãäœæ/æŽæ°ããŸããããããã«ãã«ã¯å«ãŸããŸãããã翻蚳ã®ããã«éä¿¡ãããæ°ãã.poãã¡ã€ã«ãåä¿¡ããå¿ èŠãããå Žåã«å®è¡ããå¿ èŠããããŸãã
python/node/your_language update_translation_jsons # pybabel extract -F babel.cfg -o messages.pot -k "trans" -k "ntrans:1,2" -k "__" . # # trans - , ntrans - # __ "" # babel.cfg - babel- pybabel update -i messages.pot -d path/i18n/ # .po ,
ããã§ã¯ã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ã®å ¥åããŸãã¯ãããã®éãç·šéããå¿ èŠããããŸãã
ããããæåã«ãäž¡æ¹ã®æ§æãèŠãŠãã ããã
äœããèŠéãããèšè¿°ããªãã£ããªã© -ã³ã¡ã³ããè£è¶³ã«æžã蟌ã¿ãŸãã
ç®æšã¯ãåãŠãŒãã£ãªãã£ã詳现ã«åæããããšã§ã¯ãªãããããã®ååšãšãããããã©ã®ããã«ããããŠã©ã®ããã«æ£ç¢ºã«é£æºãããã«ã€ããŠè©±ãããšã§ããã
æ®ãã¯ã³ã¡ã³ãã§å ŽæãèŠã€ããŸã