Language
Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã«ã©ã€ãºããããªãœãŒã¹ãååŸããããã«ã ResourceManager ã¯ã©ã¹ã§è¡šããã .NET Framework Resource Manager ã«äŸåããŸãã Resource Manager ã¯ããªãœãŒã¹ã®ããã±ãŒãžåãšãããã€ã«ãã ã¢ã³ã ã¹ããŒã¯ ã¢ãã«ã䜿çšãããããšãåæãšããŠããŸãã ããã¯ãéããŒã«ã©ã€ãºå¯èœãªå®è¡å¯èœã³ãŒããšããã¥ãŒãã©ã« ã«ã«ãã£ãŸãã¯æ¢å®ã®ã«ã«ãã£ãšåŒã°ãã 1 ã€ã®ã«ã«ãã£ã®ãªãœãŒã¹ãå«ãã¡ã€ã³ ã¢ã»ã³ããªã§ãã æ¢å®ã®ã«ã«ãã£ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã©ãŒã«ãã㯠ã«ã«ãã£ã§ããããŒã«ã©ã€ãºããããªãœãŒã¹ãèŠã€ãããªãå Žåã«ãªãœãŒã¹ã䜿çšãããã«ã«ãã£ã§ãã åã¹ããŒã¯ã¯ã1 ã€ã®ã«ã«ãã£ã®ãªãœãŒã¹ãå«ããµãã©ã€ã ã¢ã»ã³ããªã«æ¥ç¶ããŸãããã³ãŒãã¯å«ãŸããŸããã
ãã®ã¢ãã«ã«ã¯ããã€ãã®å©ç¹ããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ããããã€ããåŸã¯ãæ°ããã«ã«ãã£ã®ãªãœãŒã¹ã段éçã«è¿œå ã§ããŸãã ã«ã«ãã£åºæã®ãªãœãŒã¹ã®åŸç¶ã®éçºã«ã¯ããªãã®æéãå¿ èŠãªå Žåããããããããã«ãããæåã«ã¡ã€ã³ ã¢ããªã±ãŒã·ã§ã³ãè§£æŸããåŸã§ã«ã«ãã£åºæã®ãªãœãŒã¹ãé ä¿¡ã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãåã³ã³ãã€ã«ããããšãªããã¢ããªã±ãŒã·ã§ã³ã®ãµãã©ã€ã ã¢ã»ã³ããªãæŽæ°ããã³å€æŽã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãç¹å®ã®ã«ã«ãã£ã«å¿ èŠãªãªãœãŒã¹ãå«ããµãã©ã€ã ã¢ã»ã³ããªã®ã¿ãèªã¿èŸŒãå¿ èŠããããŸãã ããã«ãããã·ã¹ãã ãªãœãŒã¹ã®äœ¿çšãå€§å¹ ã«åæžãããå¯èœæ§ããããŸãã
ãã ãããã®ã¢ãã«ã«ã¯æ¬ ç¹ããããŸãã
- è€æ°ã®ãªãœãŒã¹ ã»ããã管çããå¿ èŠããããŸãã
- è€æ°ã®æ§æããã¹ãããå¿ èŠããããããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã®åæã³ã¹ããå¢å ããŸãã é·æçã«ã¯ãè€æ°ã®äžŠååœéããŒãžã§ã³ããã¹ãããŠç¶æããããããè€æ°ã®ãµãã©ã€ãã§ 1 ã€ã®ã³ã¢ ã¢ããªã±ãŒã·ã§ã³ããã¹ãããæ¹ãç°¡åã§ã³ã¹ããäœããªãããšã«æ³šæããŠãã ããã
ãªãœãŒã¹ã®ååä»ãèŠå
ã¢ããªã±ãŒã·ã§ã³ã®ãªãœãŒã¹ãããã±ãŒãžåãããšãã¯ãå ±éèšèªã©ã³ã¿ã€ã ã§æ³å®ããããªãœãŒã¹ã®ååä»ãèŠåã䜿çšããŠååãä»ããå¿ èŠããããŸãã ã©ã³ã¿ã€ã ã¯ãã«ã«ãã£åã§ãªãœãŒã¹ãèå¥ããŸãã åã«ã«ãã£ã«ã¯äžæã®ååãä»ããããŸããéåžžã¯ãèšèªã«é¢é£ä»ãããã 2 æåã®å°æåã«ã«ãã£åãšãå¿ èŠã«å¿ããŠãåœãŸãã¯å°åã«é¢é£ä»ãããã 2 æåã®å€§æåã®ãµãã«ã«ãã£åã®çµã¿åããã§ãã ãµãã«ã«ãã£åã¯ãããã·ã¥ (-) ã§åºåãããã«ã«ãã£åã«åŸããŸãã ããšãã°ãæ¥æ¬ã§è©±ãããŠããæ¥æ¬èªã® ja-JPãç±³åœã§è©±ãããŠããè±èªã® en-USããã€ãã§è©±ãããŠãããã€ãèªã® de-DEããªãŒã¹ããªã¢ã§è©±ãããŠãããã€ãèªã® de-AT ãªã©ããããŸãã Windows ã§ãµããŒããããŠããèšèª/å°ååã®äžèŠ§ã® [èšèªã¿ã°] åãåç §ããŠãã ããã ã«ã«ãã£å㯠ãBCP 47 ã§å®çŸ©ãããŠããæšæºã«åŸããŸãã
泚
äžåœèª (ç°¡äœå) ã® zh-Hans ãªã©ã2 æåã®ã«ã«ãã£åã«ã¯ããã€ãã®äŸå€ããããŸãã
詳现ã«ã€ããŠã¯ãã ãªãœãŒã¹ ãã¡ã€ã«ã®äœæ ãããã³ ããµãã©ã€ã ã¢ã»ã³ããªã®äœæããåç §ããŠãã ããã
ãªãœãŒã¹ ãã©ãŒã«ãã㯠ããã»ã¹
ãªãœãŒã¹ãããã±ãŒãžåããã³ãããã€ããããã®ãã ã¢ã³ã ã¹ããŒã¯ ã¢ãã«ã§ã¯ããã©ãŒã«ãã㯠ããã»ã¹ã䜿çšããŠé©åãªãªãœãŒã¹ãèŠã€ããŸãã 䜿çšã§ããªãããŒã«ã©ã€ãºããããªãœãŒã¹ãã¢ããªã±ãŒã·ã§ã³ãèŠæ±ããå Žåãå ±éèšèªã©ã³ã¿ã€ã ã¯ã«ã«ãã£ã®éå±€ãæ€çŽ¢ããŠããŠãŒã¶ãŒã®ã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«æãè¿ãé©åãªãã©ãŒã«ãã㯠ãªãœãŒã¹ãæ€çŽ¢ããæåŸã®ææ®µãšããŠã®ã¿äŸå€ãã¹ããŒããŸãã éå±€ã®åã¬ãã«ã§ãé©åãªãªãœãŒã¹ãèŠã€ãã£ãå Žåãã©ã³ã¿ã€ã ã¯ããã䜿çšããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåãæ€çŽ¢ã¯æ¬¡ã®ã¬ãã«ã§ç¶è¡ãããŸãã
åç §ã®ããã©ãŒãã³ã¹ãåäžãããã«ã¯ã NeutralResourcesLanguageAttribute 屿§ãã¡ã€ã³ ã¢ã»ã³ããªã«é©çšããã¡ã€ã³ ã¢ã»ã³ããªã§åäœãããã¥ãŒãã©ã«èšèªã®ååãæž¡ããŸãã
.NET Framework ãªãœãŒã¹ãã©ãŒã«ãã㯠ããã»ã¹
.NET Framework ãªãœãŒã¹ ãã©ãŒã«ãã㯠ããã»ã¹ã«ã¯ãæ¬¡ã®æé ãå«ãŸããŸãã
ãã³ã
<relativeBindForResources> æ§æèŠçŽ ã䜿çšããŠããªãœãŒã¹ ãã©ãŒã«ãã㯠ããã»ã¹ãšãã©ã³ã¿ã€ã ããªãœãŒã¹ ã¢ã»ã³ããªããããŒãããããã»ã¹ãæé©åã§ããŸãã 詳现ã«ã€ããŠã¯ã ãªãœãŒã¹ãã©ãŒã«ããã¯ããã»ã¹ã®æé©åãåç §ããŠãã ããã
ã©ã³ã¿ã€ã ã¯æåã«ãã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ãããã«ã«ãã£ã«äžèŽããã¢ã»ã³ããªã® ã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ ããã§ãã¯ããŸãã
ã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§å ±æãããŠãããªãœãŒã¹ ã¢ã»ã³ããªãæ ŒçŽã§ããŸãã ããã«ãããäœæãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ãã£ã¬ã¯ããªæ§é ã«ç¹å®ã®ãªãœãŒã¹ ã»ãããå«ããå¿ èŠãã§ããªããªããŸãã ã©ã³ã¿ã€ã ã¯ãã¢ã»ã³ããªãžã®åç §ãæ€çŽ¢ãããšãèŠæ±ããããªãœãŒã¹ãã¢ã»ã³ããªã§æ€çŽ¢ããŸãã ã¢ã»ã³ããªå ã®ãšã³ããªãèŠã€ãããšãèŠæ±ããããªãœãŒã¹ã䜿çšãããŸãã ãšã³ããªãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
ã©ã³ã¿ã€ã ã¯æ¬¡ã«ãçŸåšå®è¡äžã®ã¢ã»ã³ããªã®ãã£ã¬ã¯ããªã§ãèŠæ±ãããã«ã«ãã£ã«äžèŽãããµããã£ã¬ã¯ããªããã§ãã¯ããŸãã ãµããã£ã¬ã¯ããªãèŠã€ãããšããã®ãµããã£ã¬ã¯ããªã§ãèŠæ±ãããã«ã«ãã£ã®æå¹ãªãµãã©ã€ã ã¢ã»ã³ããªãæ€çŽ¢ãããŸãã ã©ã³ã¿ã€ã ã¯ãèŠæ±ããããªãœãŒã¹ããµãã©ã€ã ã¢ã»ã³ããªã§æ€çŽ¢ããŸãã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãèŠã€ãããšããã®ãªãœãŒã¹ã䜿çšãããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
ã©ã³ã¿ã€ã ã¯æ¬¡ã«ãWindows ã€ã³ã¹ããŒã©ãŒã«ã¯ãšãªãå®è¡ããŠããµãã©ã€ã ã¢ã»ã³ããªããªã³ããã³ãã§ã€ã³ã¹ããŒã«ãããã©ããã倿ããŸãã ãã®å Žåã¯ãã€ã³ã¹ããŒã«ãåŠçããã¢ã»ã³ããªãèªã¿èŸŒã¿ããã®ã¢ã»ã³ããªãŸãã¯èŠæ±ããããªãœãŒã¹ãæ€çŽ¢ããŸãã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãèŠã€ãããšããã®ãªãœãŒã¹ã䜿çšãããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
ã©ã³ã¿ã€ã 㯠AppDomain.AssemblyResolve ã€ãã³ããçºçããããµãã©ã€ã ã¢ã»ã³ããªãèŠã€ãããªãããšã瀺ããŸãã ã€ãã³ããåŠçããããšãéžæããå Žåãã€ãã³ã ãã³ãã©ãŒã¯ãåç §ã«ãªãœãŒã¹ã䜿çšããããµãã©ã€ã ã¢ã»ã³ããªãžã®åç §ãè¿ãããšãã§ããŸãã ãã以å€ã®å Žåãã€ãã³ã ãã³ãã©ãŒã¯
nullãè¿ããæ€çŽ¢ãç¶è¡ããŸããã©ã³ã¿ã€ã ã¯æ¬¡ã«ãèŠæ±ãããã«ã«ãã£ã®èŠªã¢ã»ã³ããªã«ã€ããŠãã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ãããäžåºŠæ€çŽ¢ããŸãã 芪ã¢ã»ã³ããªãã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ååšããå Žåãã©ã³ã¿ã€ã ã¯èŠæ±ããããªãœãŒã¹ãã¢ã»ã³ããªã§æ€çŽ¢ããŸãã
芪ã«ã«ãã£ã¯ãé©åãªãã©ãŒã«ãã㯠ã«ã«ãã£ãšããŠå®çŸ©ãããŸãã äŸå€ãã¹ããŒããããã¯äœããã®ãªãœãŒã¹ãæäŸããæ¹ãããã®ã§ã芪ããã©ãŒã«ããã¯åè£ãšããŠèããŸãã ãã®ããã»ã¹ã§ã¯ããªãœãŒã¹ãåå©çšããããšãã§ããŸãã åã«ã«ãã£ã§èŠæ±ããããªãœãŒã¹ãããŒã«ã©ã€ãºããå¿ èŠããªãå Žåã«ã®ã¿ã芪ã¬ãã«ã§ç¹å®ã®ãªãœãŒã¹ãå«ããå¿ èŠããããŸãã ããšãã°ã
en(ãã¥ãŒãã©ã«è±èª)ãen-GB(è±åœã§è©±ãããŠããè±èª)ãen-US(ç±³åœã§è©±ãããŠããè±èª) ã®ãµãã©ã€ã ã¢ã»ã³ããªãæäŸããå Žåãenãµãã©ã€ãã«ã¯äžè¬çãªçšèªãå«ãŸããen-GBããã³en-USãµãã©ã€ãã¯ãç°ãªãçšèªã«ã€ããŠã®ã¿ãªãŒããŒã©ã€ããæäŸã§ããŸããã©ã³ã¿ã€ã ã¯æ¬¡ã«ãçŸåšå®è¡äžã®ã¢ã»ã³ããªã®ãã£ã¬ã¯ããªããã§ãã¯ããŠã芪ãã£ã¬ã¯ããªãå«ãŸããŠãããã©ããã確èªããŸãã 芪ãã£ã¬ã¯ããªãååšããå Žåãã©ã³ã¿ã€ã ã¯ã芪ã«ã«ãã£ã®æå¹ãªãµãã©ã€ã ã¢ã»ã³ããªã®ãã£ã¬ã¯ããªãæ€çŽ¢ããŸãã ã¢ã»ã³ããªãèŠã€ãããšãã©ã³ã¿ã€ã ã¯èŠæ±ããããªãœãŒã¹ãã¢ã»ã³ããªã§æ€çŽ¢ããŸãã ãªãœãŒã¹ãèŠã€ãããšããªãœãŒã¹ã䜿çšãããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
ã©ã³ã¿ã€ã ã¯æ¬¡ã«ãWindows ã€ã³ã¹ããŒã©ãŒã«å¯ŸããŠã¯ãšãªãå®è¡ããŠã芪ãµãã©ã€ã ã¢ã»ã³ããªããªã³ããã³ãã§ã€ã³ã¹ããŒã«ãããã©ããã倿ããŸãã ãã®å Žåã¯ãã€ã³ã¹ããŒã«ãåŠçããã¢ã»ã³ããªãèªã¿èŸŒã¿ããã®ã¢ã»ã³ããªãŸãã¯èŠæ±ããããªãœãŒã¹ãæ€çŽ¢ããŸãã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãèŠã€ãããšããã®ãªãœãŒã¹ã䜿çšãããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
ã©ã³ã¿ã€ã 㯠AppDomain.AssemblyResolve ã€ãã³ããçºçãããé©åãªãã©ãŒã«ãã㯠ãªãœãŒã¹ãèŠã€ãããªãããšã瀺ããŸãã ã€ãã³ããåŠçããããšãéžæããå Žåãã€ãã³ã ãã³ãã©ãŒã¯ãåç §ã«ãªãœãŒã¹ã䜿çšããããµãã©ã€ã ã¢ã»ã³ããªãžã®åç §ãè¿ãããšãã§ããŸãã ãã以å€ã®å Žåãã€ãã³ã ãã³ãã©ãŒã¯
nullãè¿ããæ€çŽ¢ãç¶è¡ããŸããã©ã³ã¿ã€ã ã¯æ¬¡ã«ãåã® 3 ã€ã®æé ãšåæ§ã«ãå€ãã®æœåšçãªã¬ãã«ãéããŠèŠªã¢ã»ã³ããªãæ€çŽ¢ããŸãã åã«ã«ãã£ã®èŠªã¯ 1 ã€ã ãã§ãCultureInfo.Parent ããããã£ã«ãã£ãŠå®çŸ©ãããŠããŸããã芪ãããèªèº«ã®èŠªãæã€å¯èœæ§ããããŸãã ã«ã«ãã£ã® Parent ããããã£ã CultureInfo.InvariantCultureãè¿ããšã芪ã«ã«ãã£ã®æ€çŽ¢ã¯åæ¢ããŸãããªãœãŒã¹ãã©ãŒã«ããã¯ã®å Žåãã€ã³ããªã¢ã³ã ã«ã«ãã£ã¯èŠªã«ã«ãã£ãŸãã¯ãªãœãŒã¹ãæã€å¯èœæ§ã®ããã«ã«ãã£ãšã¯èŠãªãããŸããã
æåã«æå®ãããã«ã«ãã£ãŒãšãã®ãã¹ãŠã®èŠªã«ã«ãã£ãŒãæ€çŽ¢ããŠããªãœãŒã¹ãèŠã€ãããªãå Žåãæ¢å®ïŒãã©ãŒã«ããã¯ïŒã«ã«ãã£ãŒã®ãªãœãŒã¹ã䜿çšãããŸãã éåžžãæ¢å®ã®ã«ã«ãã£ã®ãªãœãŒã¹ã¯ã¡ã€ã³ ã¢ããªã±ãŒã·ã§ã³ ã¢ã»ã³ããªã«å«ãŸããŸãã ãã ããSatellite 屿§ã®Location ããããã£ã«NeutralResourcesLanguageAttributeã®å€ãæå®ããŠããªãœãŒã¹ã®æçµçãªãã©ãŒã«ããã¯äœçœ®ãã¡ã€ã³ ã¢ã»ã³ããªã§ã¯ãªããµãã©ã€ã ã¢ã»ã³ããªã§ããããšã瀺ãããšãã§ããŸãã
泚
æ¢å®ã®ãªãœãŒã¹ã¯ãã¡ã€ã³ ã¢ã»ã³ããªã§ã³ã³ãã€ã«ã§ããå¯äžã®ãªãœãŒã¹ã§ãã NeutralResourcesLanguageAttribute屿§ã䜿çšããŠãµãã©ã€ã ã¢ã»ã³ããªãæå®ããªãéããæçµçãªãã©ãŒã«ãã㯠(æçµèŠª) ã«ãªããŸãã ãã®ãããã¡ã€ã³ ã¢ã»ã³ããªã«ã¯åžžã«æ¢å®ã®ãªãœãŒã¹ ã»ãããå«ããã®ãæšå¥šãããŸãã ããã¯ãäŸå€ãã¹ããŒãããã®ãé²ãã®ã«åœ¹ç«ã¡ãŸãã æ¢å®ã®ãªãœãŒã¹ãå«ããããšã§ããã¡ã€ã«ã¯ãã¹ãŠã®ãªãœãŒã¹ã«ãã©ãŒã«ããã¯ãæäŸããã«ã«ãã£ã«åºæã§ãªãå Žåã§ããå°ãªããšã 1 ã€ã®ãªãœãŒã¹ãåžžã«ãŠãŒã¶ãŒã«ååšããããšã確èªããŸãã
æåŸã«ãã©ã³ã¿ã€ã ãæ¢å®ã® (ãã©ãŒã«ããã¯) ã«ã«ãã£ã®ãªãœãŒã¹ãèŠã€ããããªãå Žåã¯ããªãœãŒã¹ãèŠã€ãããªãã£ãããšã瀺ã MissingManifestResourceException ãŸã㯠MissingSatelliteAssemblyException äŸå€ãã¹ããŒãããŸãã
ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãã¹ãã€ã³èª (ã¡ãã·ã³) ( es-MX ã«ã«ãã£) çšã«ããŒã«ã©ã€ãºããããªãœãŒã¹ãèŠæ±ãããšããŸãã ã©ã³ã¿ã€ã ã¯ãæåã«ã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ãæ€çŽ¢ããŠã es-MXã«äžèŽãããèŠã€ãããªãã¢ã»ã³ããªãæ€çŽ¢ããŸãã ã©ã³ã¿ã€ã ã¯ãçŸåšå®è¡äžã®ã¢ã»ã³ããªã®ãã£ã¬ã¯ããªã§ã es-MX ãã£ã¬ã¯ããªãæ€çŽ¢ããŸãã ããã«å€±æãããšãã©ã³ã¿ã€ã ã¯ã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ãå床æ€çŽ¢ããé©åãªãã©ãŒã«ãã㯠ã«ã«ã㣠(ãã®å Žå㯠es (ã¹ãã€ã³èª) ãåæ ãã芪ã¢ã»ã³ããªãæ€çŽ¢ããŸãã 芪ã¢ã»ã³ããªãèŠã€ãããªãå Žåãã©ã³ã¿ã€ã ã¯ã察å¿ãããªãœãŒã¹ãèŠã€ãããŸã§ã芪ã¢ã»ã³ããªã®ãã¹ãŠã®æœåšçãªã¬ãã«ã® es-MX ã«ã«ãã£ãæ€çŽ¢ããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåãã©ã³ã¿ã€ã ã¯æ¢å®ã®ã«ã«ãã£ã«ãªãœãŒã¹ã䜿çšããŸãã
.NET Framework ãªãœãŒã¹ ãã©ãŒã«ãã㯠ããã»ã¹ãæé©åãã
æ¬¡ã®æ¡ä»¶ã§ã¯ãã©ã³ã¿ã€ã ããµãã©ã€ã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãæ€çŽ¢ããããã»ã¹ãæé©åã§ããŸãã
ãµãã©ã€ã ã¢ã»ã³ããªã¯ãã³ãŒã ã¢ã»ã³ããªãšåãå Žæã«é 眮ãããŸãã ã³ãŒã ã¢ã»ã³ããªã ã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ã€ã³ã¹ããŒã«ãããŠããå Žåããµãã©ã€ã ã¢ã»ã³ããªãã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ã€ã³ã¹ããŒã«ãããŸãã ã³ãŒã ã¢ã»ã³ããªããã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŠããå Žåããµãã©ã€ã ã¢ã»ã³ããªã¯ãã®ãã£ã¬ã¯ããªã®ã«ã«ãã£åºæã®ãã©ã«ããŒã«ã€ã³ã¹ããŒã«ãããŸãã
ãµãã©ã€ã ã¢ã»ã³ããªã¯å¿ èŠã«å¿ããŠã€ã³ã¹ããŒã«ãããŸããã
ã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã¯ã AppDomain.AssemblyResolve ã€ãã³ããåŠçããŸããã
ãµãã©ã€ã ã¢ã»ã³ããªã®ãããŒããæé©åããã«ã¯ã次ã®äŸã«ç€ºãããã«ã<relativeBindForResources> èŠçŽ ãå«ãããã®enabled屿§ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã§trueã«èšå®ããŸãã
<configuration>
<runtime>
<relativeBindForResources enabled="true" />
</runtime>
</configuration>
ãµãã©ã€ã ã¢ã»ã³ããªçšã«æé©åããããããŒãã¯ãªããã€ã³æ©èœã§ãã ã€ãŸãã< èŠçŽ ãã¢ããªã±ãŒã·ã§ã³ã®æ§æãã¡ã€ã«ã«ååšãããã®>屿§ãã«èšå®ãããŠããªãéããã©ã³ã¿ã€ã ã¯enabledã«èšèŒãããŠããæé ã«åŸããŸãã ãã®å Žåããµãã©ã€ã ã¢ã»ã³ããªã®ãããŒãããã»ã¹ã¯æ¬¡ã®ããã«å€æŽãããŸãã
ã©ã³ã¿ã€ã ã¯ã芪ã³ãŒã ã¢ã»ã³ããªã®å Žæã䜿çšããŠãµãã©ã€ã ã¢ã»ã³ããªããããŒãããŸãã 芪ã¢ã»ã³ããªãã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ã€ã³ã¹ããŒã«ãããŠããå Žåãã©ã³ã¿ã€ã ã¯ãã£ãã·ã¥å ããããŒãããŸãããã¢ããªã±ãŒã·ã§ã³ã®ãã£ã¬ã¯ããªã«ã¯ãããŒãããŸããã 芪ã¢ã»ã³ããªãã¢ããªã±ãŒã·ã§ã³ ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŠããå Žåãã©ã³ã¿ã€ã ã¯ã¢ããªã±ãŒã·ã§ã³ ãã£ã¬ã¯ããªã«ãããŒãããŸãããã°ããŒãã« ã¢ã»ã³ã㪠ãã£ãã·ã¥ã«ã¯ãããŒãããŸããã
ã©ã³ã¿ã€ã ã¯ããµãã©ã€ã ã¢ã»ã³ããªã®ãªã³ããã³ã ã€ã³ã¹ããŒã«ã«ã€ã㊠Windows ã€ã³ã¹ããŒã©ãŒã«å¯ŸããŠã¯ãšãªãå®è¡ããŸããã
ç¹å®ã®ãªãœãŒã¹ ã¢ã»ã³ããªã®ãããŒãã倱æããå Žåãã©ã³ã¿ã€ã 㯠AppDomain.AssemblyResolve ã€ãã³ããçºçãããŸããã
.NET Core ãªãœãŒã¹ãã©ãŒã«ãã㯠ããã»ã¹
.NET Core ãªãœãŒã¹ ãã©ãŒã«ãã㯠ããã»ã¹ã«ã¯ãæ¬¡ã®æé ãå«ãŸããŸãã
ã©ã³ã¿ã€ã ã¯ãæå®ãããã«ã«ãã£ã®ãµãã©ã€ã ã¢ã»ã³ããªãèªã¿èŸŒãããšããŸãã
çŸåšå®è¡äžã®ã¢ã»ã³ããªã®ãã£ã¬ã¯ããªã§ãèŠæ±ãããã«ã«ãã£ã«äžèŽãããµããã£ã¬ã¯ããªã確èªããŸãã ãµããã£ã¬ã¯ããªãèŠã€ãããšããã®ãµããã£ã¬ã¯ããªã§èŠæ±ãããã«ã«ãã£ã®æå¹ãªãµãã©ã€ã ã¢ã»ã³ããªãæ€çŽ¢ãããèªã¿èŸŒãŸããŸãã
泚
倧æåãšå°æåãåºå¥ãããã¡ã€ã«ã·ã¹ãã ãæã€ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒLinuxãmacOSïŒã§ã¯ãæååãµããã£ã¬ã¯ããªã®æ€çŽ¢ã¯å€§æåãšå°æåãåºå¥ããŸãã ãµããã£ã¬ã¯ããªåã¯ã CultureInfo.Name ã®å€§æåãšå°æåãå®å šã«äžèŽããŠããå¿ èŠããããŸã (ããšãã°ã
esães-MX)ãæ³š
ããã°ã©ãã AssemblyLoadContextããã«ã¹ã¿ã ã¢ã»ã³ããªèªã¿èŸŒã¿ã³ã³ããã¹ããæŽŸçãããå Žåãç¶æ³ã¯è€éã«ãªããŸãã å®è¡äžã®ã¢ã»ã³ããªãã«ã¹ã¿ã ã³ã³ããã¹ãã«èªã¿èŸŒãŸããå Žåãã©ã³ã¿ã€ã ã¯ãµãã©ã€ã ã¢ã»ã³ããªãã«ã¹ã¿ã ã³ã³ããã¹ãã«èªã¿èŸŒã¿ãŸãã 詳现ã«ã€ããŠã¯ããã®ããã¥ã¡ã³ãã®ç¯å²å€ã§ãã AssemblyLoadContextãåç §ããŠãã ããã
ãµãã©ã€ã ã¢ã»ã³ããªãèŠã€ãããªãå Žåã AssemblyLoadContext 㯠AssemblyLoadContext.Resolving ã€ãã³ããçºçããããµãã©ã€ã ã¢ã»ã³ããªãèŠã€ãããªãããšã瀺ããŸãã ã€ãã³ããåŠçããå Žåãã€ãã³ã ãã³ãã©ãŒã¯ãµãã©ã€ã ã¢ã»ã³ããªãžã®åç §ãèªã¿èŸŒãã§è¿ãããšãã§ããŸãã
ãµãã©ã€ã ã¢ã»ã³ããªããŸã èŠã€ãããªãå ŽåãAssemblyLoadContext ã«ãã£ãŠ AppDomain ã«ãã£ãŠ AppDomain.AssemblyResolve ã€ãã³ããããªã¬ãŒããããµãã©ã€ã ã¢ã»ã³ããªãèŠã€ãããªãããšã瀺ããŸãã ã€ãã³ããåŠçããå Žåãã€ãã³ã ãã³ãã©ãŒã¯ãµãã©ã€ã ã¢ã»ã³ããªãžã®åç §ãèªã¿èŸŒãã§è¿ãããšãã§ããŸãã
ãµãã©ã€ã ã¢ã»ã³ããªãèŠã€ãã£ãå Žåãã©ã³ã¿ã€ã ã¯èŠæ±ããããªãœãŒã¹ãæ€çŽ¢ããŸãã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãèŠã€ãããšããã®ãªãœãŒã¹ã䜿çšãããŸãã ãªãœãŒã¹ãèŠã€ãããªãå Žåã¯ãæ€çŽ¢ãç¶è¡ããŸãã
泚
ãµãã©ã€ã ã¢ã»ã³ããªå ã®ãªãœãŒã¹ãèŠã€ããããã«ãã©ã³ã¿ã€ã ã§ã¯çŸåšã® ResourceManager ã® CultureInfo.Name ã«ãã£ãŠèŠæ±ããããªãœãŒã¹ ãã¡ã€ã«ãæ€çŽ¢ãããŸãã ãªãœãŒã¹ ãã¡ã€ã«å ã§ãèŠæ±ããããªãœãŒã¹åãæ€çŽ¢ããŸãã ã©ã¡ãããèŠã€ãããªãå ŽåããªãœãŒã¹ã¯èŠã€ãããªããã®ãšããŠæ±ãããŸãã
ã©ã³ã¿ã€ã ã¯æ¬¡ã«ãã¹ããã 1 ãš 2 ãç¹°ãè¿ããã³ã«ãå€ãã®æœåšçãªã¬ãã«ãéããŠèŠªã«ã«ã㣠ã¢ã»ã³ããªãæ€çŽ¢ããŸãã
芪ã«ã«ãã£ã¯ãé©åãªãã©ãŒã«ãã㯠ã«ã«ãã£ãšããŠå®çŸ©ãããŸãã äŸå€ãã¹ããŒããããã¯äœããã®ãªãœãŒã¹ãæäŸããæ¹ãããã®ã§ã芪ããã©ãŒã«ããã¯åè£ãšããŠèããŸãã ãã®ããã»ã¹ã§ã¯ããªãœãŒã¹ãåå©çšããããšãã§ããŸãã åã«ã«ãã£ã§èŠæ±ããããªãœãŒã¹ãããŒã«ã©ã€ãºããå¿ èŠããªãå Žåã«ã®ã¿ã芪ã¬ãã«ã§ç¹å®ã®ãªãœãŒã¹ãå«ããå¿ èŠããããŸãã ããšãã°ã
en(ãã¥ãŒãã©ã«è±èª)ãen-GB(è±åœã§è©±ãããŠããè±èª)ãen-US(ç±³åœã§è©±ãããŠããè±èª) ã®ãµãã©ã€ã ã¢ã»ã³ããªãæäŸããå Žåãenãµãã©ã€ãã«ã¯äžè¬çãªçšèªãå«ãŸããen-GBããã³en-USãµãã©ã€ãã¯ãç°ãªãçšèªã«ã€ããŠã®ã¿ãªãŒããŒã©ã€ããæäŸããŸããåã«ã«ãã£ã®èŠªã¯ 1 ã€ã ãã§ãCultureInfo.Parent ããããã£ã«ãã£ãŠå®çŸ©ãããŠããŸããã芪ãããèªèº«ã®èŠªãæã€å¯èœæ§ããããŸãã ã«ã«ãã£ã® Parent ããããã£ã CultureInfo.InvariantCultureãè¿ããšã芪ã«ã«ãã£ã®æ€çŽ¢ã¯åæ¢ããŸãã ãªãœãŒã¹ ãã©ãŒã«ããã¯ã®å Žåãã€ã³ããªã¢ã³ã ã«ã«ãã£ã¯ã芪ã«ã«ãã£ãŸãã¯ãªãœãŒã¹ãæã€å¯èœæ§ã®ããã«ã«ãã£ãšã¯èŠãªãããŸããã
æåã«æå®ãããã«ã«ãã£ãŒãšãã®ãã¹ãŠã®èŠªã«ã«ãã£ãŒãæ€çŽ¢ããŠããªãœãŒã¹ãèŠã€ãããªãå Žåãæ¢å®ïŒãã©ãŒã«ããã¯ïŒã«ã«ãã£ãŒã®ãªãœãŒã¹ã䜿çšãããŸãã éåžžãæ¢å®ã®ã«ã«ãã£ã®ãªãœãŒã¹ã¯ã¡ã€ã³ ã¢ããªã±ãŒã·ã§ã³ ã¢ã»ã³ããªã«å«ãŸããŸãã ãã ããUltimateResourceFallbackLocation.Satellite ããããã£ã« Location ã®å€ãæå®ããŠããªãœãŒã¹ã®æçµçãªãã©ãŒã«ããã¯å Žæãã¡ã€ã³ ã¢ã»ã³ããªã§ã¯ãªããµãã©ã€ã ã¢ã»ã³ããªã§ããããšã瀺ãããšãã§ããŸãã
泚
æ¢å®ã®ãªãœãŒã¹ã¯ãã¡ã€ã³ ã¢ã»ã³ããªã§ã³ã³ãã€ã«ã§ããå¯äžã®ãªãœãŒã¹ã§ãã NeutralResourcesLanguageAttribute屿§ã䜿çšããŠãµãã©ã€ã ã¢ã»ã³ããªãæå®ããªãéããæçµçãªãã©ãŒã«ãã㯠(æçµèŠª) ã«ãªããŸãã ãã®ãããã¡ã€ã³ ã¢ã»ã³ããªã«ã¯åžžã«æ¢å®ã®ãªãœãŒã¹ ã»ãããå«ããã®ãæšå¥šãããŸãã ããã¯ãäŸå€ãã¹ããŒãããã®ãé²ãã®ã«åœ¹ç«ã¡ãŸãã æ¢å®ã®ãªãœãŒã¹ ãã¡ã€ã«ãå«ããããšã§ããã¹ãŠã®ãªãœãŒã¹ã«ãã©ãŒã«ããã¯ãæäŸããã«ã«ãã£ã«åºæã§ãªãå Žåã§ããå°ãªããšã 1 ã€ã®ãªãœãŒã¹ãåžžã«ãŠãŒã¶ãŒã«ååšããããã«ããŸãã
æåŸã«ãã©ã³ã¿ã€ã ã§æ¢å®ã® (ãã©ãŒã«ããã¯) ã«ã«ãã£ã®ãªãœãŒã¹ ãã¡ã€ã«ãèŠã€ãããªãå Žåã¯ããªãœãŒã¹ãèŠã€ãããªãã£ãããšã瀺ã MissingManifestResourceException ãŸã㯠MissingSatelliteAssemblyException äŸå€ãã¹ããŒãããŸãã ãªãœãŒã¹ ãã¡ã€ã«ãèŠã€ãã£ãããèŠæ±ããããªãœãŒã¹ãååšããªãå ŽåãèŠæ±ã¯
nullè¿ããŸãã
ãµãã©ã€ã ã¢ã»ã³ããªãžã®æçµçãªåŸ©åž°
å¿ èŠã«å¿ããŠãã¡ã€ã³ ã¢ã»ã³ããªãããªãœãŒã¹ãåé€ããã©ã³ã¿ã€ã ãç¹å®ã®ã«ã«ãã£ã«å¯Ÿå¿ãããµãã©ã€ã ã¢ã»ã³ããªããæçµçãªãã©ãŒã«ãã㯠ãªãœãŒã¹ãèªã¿èŸŒãå¿ èŠãããããšãæå®ã§ããŸãã ãã©ãŒã«ãã㯠ããã»ã¹ãå¶åŸ¡ããã«ã¯ã NeutralResourcesLanguageAttribute(String, UltimateResourceFallbackLocation) ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããResource Manager ãã¡ã€ã³ ã¢ã»ã³ããªãŸãã¯ãµãã©ã€ã ã¢ã»ã³ããªãããã©ãŒã«ãã㯠ãªãœãŒã¹ãæœåºãããã©ãããæå®ãã UltimateResourceFallbackLocation ãã©ã¡ãŒã¿ãŒã®å€ãæå®ããŸãã
次㮠.NET Framework ã®äŸã§ã¯ã NeutralResourcesLanguageAttribute 屿§ã䜿çšããŠããã©ã³ã¹èª (fr) èšèªã®ãµãã©ã€ã ã¢ã»ã³ããªã«ã¢ããªã±ãŒã·ã§ã³ã®ãã©ãŒã«ãã㯠ãªãœãŒã¹ãæ ŒçŽããŸãã ãã®äŸã«ã¯ã Greetingãšããååã®åäžã®æååãªãœãŒã¹ãå®çŸ©ãã 2 ã€ã®ããã¹ã ããŒã¹ã®ãªãœãŒã¹ ãã¡ã€ã«ããããŸãã 1 ã€ç®ã® resources.fr.txtã«ã¯ããã©ã³ã¹èªã®ãªãœãŒã¹ãå«ãŸããŠããŸãã
Greeting=Bon jour!
2 ã€ç®ã®ãªãœãŒã¹ (ru.txt) ã«ã¯ããã·ã¢èªã®ãªãœãŒã¹ãå«ãŸããŠããŸãã
Greeting=ÐПбÑÑй ЎеМÑ
ããã 2 ã€ã®ãã¡ã€ã«ã¯ãã³ãã³ã ã©ã€ã³ãã ãªãœãŒã¹ ãã¡ã€ã« ãžã§ãã¬ãŒã¿ãŒ (resgen.exe) ãå®è¡ããŠ.resources ãã¡ã€ã«ã«ã³ã³ãã€ã«ãããŸãã ãã©ã³ã¹èªãªãœãŒã¹ã®å Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
resgen.exe resources.fr.txt
ãã·ã¢èªãªãœãŒã¹ã®å Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
resgen.exe resources.ru.txt
.resources ãã¡ã€ã«ã¯ã次ã®ããã«ãã©ã³ã¹èªãªãœãŒã¹ã®ã³ãã³ã ã©ã€ã³ãã ã¢ã»ã³ã㪠ãªã³ã«ãŒ (al.exe) ãå®è¡ããŠãã€ããã㯠ãªã³ã¯ ã©ã€ãã©ãªã«åã蟌ãŸããŸãã
al /t:lib /embed:resources.fr.resources /culture:fr /out:fr\Example1.resources.dll
ãã·ã¢èªãªãœãŒã¹ã®å Žåã¯ã次ã®ããã«ãªããŸãã
al /t:lib /embed:resources.ru.resources /culture:ru /out:ru\Example1.resources.dll
ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒãã¯ãExample1.csãŸãã¯Example1.vbãšããååã®ãã¡ã€ã«ã«ååšããŸãã æ¢å®ã®ã¢ããªã±ãŒã·ã§ã³ ãªãœãŒã¹ã fr ãµããã£ã¬ã¯ããªã«ããããšã瀺ã NeutralResourcesLanguageAttribute 屿§ãå«ãŸããŠããŸãã Resource Manager ãã€ã³ã¹ã¿ã³ã¹åããã Greeting ãªãœãŒã¹ã®å€ãååŸãããã³ã³ãœãŒã«ã«è¡šç€ºãããŸãã
using System;
using System.Reflection;
using System.Resources;
[assembly:NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)]
public class Example
{
public static void Main()
{
ResourceManager rm = new ResourceManager("resources",
typeof(Example).Assembly);
string greeting = rm.GetString("Greeting");
Console.WriteLine(greeting);
}
}
Imports System.Reflection
Imports System.Resources
<Assembly: NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)>
Module Example
Public Sub Main()
Dim rm As New ResourceManager("resources", GetType(Example).Assembly)
Dim greeting As String = rm.GetString("Greeting")
Console.WriteLine(greeting)
End Sub
End Module
ãã®åŸã次ã®ããã«ã³ãã³ã ã©ã€ã³ãã C# ãœãŒã¹ ã³ãŒããã³ã³ãã€ã«ã§ããŸãã
csc Example1.cs
Visual Basic ã³ã³ãã€ã©ã®ã³ãã³ãã¯éåžžã«ãã䌌ãŠããŸãã
vbc Example1.vb
ã¡ã€ã³ ã¢ã»ã³ããªã«ãªãœãŒã¹ãåã蟌ãŸããŠããªãããã /resource ã¹ã€ããã䜿çšããŠã³ã³ãã€ã«ããå¿
èŠã¯ãããŸããã
èšèªããã·ã¢èªä»¥å€ã®ã·ã¹ãã ããäŸãå®è¡ãããšã次ã®åºåã衚瀺ãããŸãã
Bon jour!
ææ¡ãããããã±ãŒãžã®ä»£æ¿æ¡
æéãŸãã¯äºç®ã®å¶çŽã«ãããã¢ããªã±ãŒã·ã§ã³ããµããŒããããã¹ãŠã®ãµãã«ã«ãã£ã«å¯ŸããŠäžé£ã®ãªãœãŒã¹ãäœæã§ããªããªãå¯èœæ§ããããŸãã 代ããã«ãé¢é£ãããã¹ãŠã®ãµãã«ã«ãã£ã§äœ¿çšã§ãã芪ã«ã«ãã£çšã®åäžã®ãµãã©ã€ã ã¢ã»ã³ããªãäœæã§ããŸãã ããšãã°ããªãŒãžã§ã³åºæã®è±èªãªãœãŒã¹ãèŠæ±ãããŠãŒã¶ãŒã«ãã£ãŠååŸããã 1 ã€ã®è±èªãµãã©ã€ã ã¢ã»ã³ã㪠(en) ãšããªãŒãžã§ã³åºæã®ãã€ãèªãªãœãŒã¹ãèŠæ±ãããŠãŒã¶ãŒçšã®åäžã®ãã€ããµãã©ã€ã ã¢ã»ã³ã㪠(de) ãæäŸã§ããŸãã ããšãã°ããã€ã (de-DE)ããªãŒã¹ããªã¢ (de-AT)ãã¹ã€ã¹ (de-CH) ã§è©±ãããŠãããã€ãèªã®èŠæ±ã¯ããã€ãã®ãµãã©ã€ã ã¢ã»ã³ã㪠(de) ã«ãã©ãŒã«ããã¯ããŸãã æ¢å®ã®ãªãœãŒã¹ã¯æçµçãªãã©ãŒã«ããã¯ã§ãããããã¢ããªã±ãŒã·ã§ã³ã®å€§éšåã®ãŠãŒã¶ãŒããèŠæ±ããããªãœãŒã¹ã§ããå¿ èŠãããããããããã®ãªãœãŒã¹ã¯æ éã«éžæããŠãã ããã ãã®æ¹æ³ã§ã¯ãã«ã«ãã£ã«åºæã§ã¯ãªããªãœãŒã¹ããããã€ããŸãããã¢ããªã±ãŒã·ã§ã³ã®ããŒã«ã©ã€ãº ã³ã¹ããå€§å¹ ã«åæžã§ããŸãã