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