人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaの勉強をしています。sendとcancelをキーにして日本語対応と英語対応。
MyResources.java-------------------------------------------------------
package com.se;
import java.util.ListResourceBundle;
public class MyResources extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] contents={{"send","送信"},{"cancel","取消"}};
return contents;
}}
MyResources_en_US.java---------------------------------------------
package com.se;
import java.util.ListResourceBundle;
public class MyResources_en_US extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] contents = {{"send", "send"},{"cancel", "cancel"}};
return contents;
}}
Main.java-------------------------------------------------------------------
import java.util.Locale;
import java.util.ResourceBundle;
public class Sample5_6 {
public static void main(String[] args) {
Locale japan=Locale.getDefault();
Locale us=Locale.US;
Locale [] locArray={japan,us};
for(Locale locale:locArray){
ResourceBundle obj1=ResourceBundle.getBundle("com.se.MyResources",locale);
System.out.println("send :"+obj1.getString("send"));
System.out.println("cancel:"+obj1.getString("cancel"));
}}}
Eclipse4.3で実施したところ、
send :送信 cancel:取消 send :送信 cancel:取消 と言う結果で英語対応がなされていません。どうしてでしょうか?分かる方お願いします。

●質問者: inajyun
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pogpi
●10ポイント

getBundleで、MyResources_en_USを引数に指定してないからだと思います。


inajyunさんのコメント
それは違うはずです。リソースハンドルが共通の名前(基底名)であれば、MyResources_enやMyResources_en_USも読み込まれるとテキストに書いてあります。これは、OracleのOCP-Jのテキストの例題です。

質問者から

Eclipse4.3の該当binフォルダsom.seを観ると、MyResources.classしかないんです。MyResources_en_US.classが無いのです。多分それが原因だと思うのですが...。


2 ● a-kuma3
●90ポイント ベストアンサー

MyResources_en_US.java は MyResources.java から派生する必要があったはずです。

package com.se;
import java.util.ListResourceBundle;
 /* ↓コレ */
public class MyResources_en_US extends MyResources {
 protected Object[][] getContents() {
 ...

a-kuma3さんのコメント
あっ、これを見逃してた... >> Eclipse4.3の該当binフォルダsom.seを観ると、MyResources.classしかないんです。MyResources_en_US.classが無いのです。 <<

a-kuma3さんのコメント
MyResources_en_US.java って、MyResources.java をコピって、ファイル名とクラス名、それに contents を変えて作った感じですか? package 文のタイプミスとか、考えられません?

inajyunさんのコメント
ありがとうございます。MyResources.javaからの派生では無く、ListResourceBundleから直接の派生です。package文のミスはありませんでした。

a-kuma3さんのコメント
ちょっと試してみました。 クラス名やパッケージを変えたのと、インデントを以外は、質問にあったソースのままです。 t1.java >|java| package k; import java.util.Locale; import java.util.ResourceBundle; public class t1 { public static void main(String[] args) { Locale japan=Locale.getDefault(); Locale us=Locale.US; Locale [] locArray={japan,us}; for(Locale locale:locArray){ Locale locale = locArray[i]; ResourceBundle obj1=ResourceBundle.getBundle("k.sub.MyResources",locale); System.out.println("send :"+obj1.getString("send")); System.out.println("cancel:"+obj1.getString("cancel")); } } } ||< MyResources.java >|java| package k.sub; import java.util.ListResourceBundle; public class MyResources extends ListResourceBundle { protected Object[][] getContents() { Object[][] contents={{"send","送信"},{"cancel","取消"}}; return contents; } } ||< MyResources_en_US.java >|java| package k.sub; import java.util.ListResourceBundle; public class MyResources_en_US extends ListResourceBundle { protected Object[][] getContents() { Object[][] contents = {{"send", "send"},{"cancel", "cancel"}}; return contents; } } ||< 実行結果。 >|| send :送信 cancel:取消 send :send cancel:cancel ||< ソースの内容よりも、eclipse の環境の方を確認しなきゃダメですね。 と言っても、MyResources.java の方は、正しくコンパイルできてるんですもんね...

inajyunさんのコメント
レスありがとうございます。実はEclipse4.3のAntがきちんと動いていてくれていないようなのです。対処の仕方が分からないので困っています。ソースは間違っていないんですね。Eclipse4.3の問題、というか私の設定の問題だと言う事でしょうか。

a-kuma3さんのコメント
build.xml って、自分で書きました? 三つのソースは、どんな階層のディレクトリに置いてるでしょうか。 ビルドの対象って、指定した記憶あります? まかさとは思いますが、MyResources_en_US.java がビルドの対象から除外されている、とか……

inajyunさんのコメント
お恥ずかしい。「MyResources_en_US.java がビルドの対象から除外されている」と思われます。Eclipse4.3のパースペクティブからそれが見えないんです。 build.xmlって編集したことが無いんです。ビルドの対象ってルートにしかしたことが無いです(汗)どこにあってどう編集すれば良いんですか?恥を忍んで聞きます。教えてください。

a-kuma3さんのコメント
パッケージ・エクスプローラービューを表示すると、ファイルがすべて見えていると思います。 MyResources_en_US.java を右クリックして、ビルドパス → 包含 ってやると、ビルド対象になるはず。 多分、パースペクティブでも、見えるようになってるんじゃないかと思います。

inajyunさんのコメント
レスありがとうございます。それがパッケージエクスプローラーからMyResources_en_US.javaがどうあがいても読み込めないのです。フォルダの中にあるのは間違いなくて、そのファイルを指定して読み込んでもパッケージエクスプローラーには出てこないんです。なんでなんでしょう。ビルドパスは分かりました、ありがとうございます。なんで読み込めないのか分かりません。

a-kuma3さんのコメント
新規に MyResources_en_US クラスを追加してみる、とか、どうでしょう。 もしくは、インポート。

inajyunさんのコメント
うまくいきました。ありがとうございます。

a-kuma3さんのコメント
よかった、よかった <tt>:-)</tt>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ