Yoshihiro ICHIYANAGI
ichan****@im*****
2005年 10月 4日 (火) 10:45:44 JST
ichanです。 > それぞれクラスのメッセージの置き換えの際には必ず以下のようにコーディング > することにしましょう。 > > > // @laszlo-18n.test.begin > > // org-mes: "LPS requires a servlet container" +" that can implements ServletContent.getRealPath()" > > respondWithInitError(req, res, LaszloMessages.getMessage(PREFIX_NAME, > > "must_upper_ver2.3")); > > // @laszlo-i18n.test.end generatorを修正した結果、コメント文も簡潔で済むようになりました。 # @i18n.test.endがいらないくらいですが... /** * @18n.test * @org-mes="LPS requires a servlet container"+" that can implements ServletContent.getRealPath()" */ respondWithInitError(req, res, LaszloMessages.getMessage(PREFIX_NAME, "1")); 以下のコーディング規約に従えばJUnit用クラスが、 manual修正なしにでき上がる(予定です)。 ########################################################################### Coding Policy for OpenLaszlo i18n 1.修正される対象クラスに、クラス変数PREFIX_NAMEを以下のように追加。 private static String PREFIX_NAME = [Class name].class.getName(); 2.LaszloMessagesクラス.メソッドに置き換わるソースコードの 直前に以下のようなコメント行を追加。 // @i18n.test // @org-mes=... or /** * @i18n.test * @org-mes=... */ 3.[@org-mes=] 行には、一行でオリジナルのメッセージを記述(改行をいれない)。 メッセージは文字列で、ダブルクオート(")、プラス(+)及び変数(p0,p1...)を含むことができます。 ここで、メッセージの引数となる変数はp0,p1,..に置き換えます。 # p0,p1の順でお願いします。そうしないとJUnitテストに失敗します。 4.Resourceファイルのフォーマット [package name].[class name].[unique id]=[メッセージ with {0} {1}...] ここで、 [unique id] は、Eclipse ResourceBundle Editorによって自動生成されます ############################################################################ Resourceファイルの例: laszlomessages.properties org.openlaszlo.servlets.LZServlet.12=\ Server configuration error: can't parse lps.properties entry '{0}' laszlomessages_ja.properties org.openlaszlo.servlets.LZServlet.12=\ サーバ設定エラー: lps.propertiesのエントリ名'{0}'が構文解析できません。 # Henryからの意見では、[unique id]はhuman readableなものがいいのでは # ということでしたが、source codeにはかならずコメント文としてoriginal messages # が存在するのと、keyの命名に悩んだり他のkeyとの重複による不具合を # 避けるために、やはりEclipseのplug-in Editorで自動生成されるindex # をそのまま使っていいような気がします。 ソースの修正例: package org.openlaszlo.servlets; public class LZDummy { .... --> private static String PREFIX_NAME = LZDummy.class.getName(); .... public static int getKrankPort () { String portStr = LPS.getProperties().getProperty(KRANK_PORT_PROPERTY); int portnum = DEFAULT_KRANK_PORT; if (portStr == null) { return portnum; } try { portnum = Integer.parseInt(portStr); } catch (NumberFormatException e) { --> /** --> * @i18n.test --> * @org-mes="Server configuration error: can't parse lps.properties entry '"+ p0 +"'" --> */ throw new RuntimeException( --> LaszloMessages.getMessage(PREFIX_NAME,"1", new Object[]{ KRANK_PORT_PROPERTY })); } return portnum; } } generatorによって生成されるクラスは、以下のようになります: package org.openlaszlo.i18n.test; import junit.framework.TestCase; public class LaszloMessagesTester extends TestCase { private String p0 = "dummy0"; private String p1 = "dummy1"; private String p2 = "dummy2"; private String p3 = "dummy3"; private String p4 = "dummy4"; private String p5 = "dummy5"; public LaszloMessagesTester() { super(LaszloMessagesTester.class.toString()); // TODO Auto-generated constructor stub } public LaszloMessagesTester(String name) { super(name); // TODO Auto-generated constructor stub } // protected void setUp() throws Exception { // } public void testLaszloMessages(){ asserts("LZTest-1", "Must be at least " + "Version 2.3 Servlet Container!", LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "1") ); sserts("LZTest-2", "LPS requires a servlet "+p0+" that can implements ServletContent."+p1+"()", LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "2", new Object[] {p0,p1}) ); asserts("LZTest-3", "LPS running against JRE version < 1.4; this is *not* supported!", LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "3") ); asserts("LZTest-4", "Can't parse JRE specification version: " + p0, LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "4",new Object[]{p0}) ); asserts("LZDummy-1", "Server configuration error: can't find LPS_HOME.", LaszloMessages,getMessage("org.openlaszlo.servlets.LZDummy","1") ); asserts("LZDummy-2", "Server configuration error: can't parse lps.properties entry '"+ p0 +"'", LaszloMessages,getMessage("org.openlaszlo.servlets.LZDummy", "2",new Object[]{p0}) ); } } だた、現在rubyだけでなくjavaのソースファイルをrecursiveにfindするのに bash系も利用しています。したがって、WinXP環境で利用する場合には cygwinが必要になります。_no 不明瞭な箇所やこうした方がよいなど、御意見お聞かせください。 ichan