the code below is not giving me the answer i want, i don't know where is the problem? FR is the translation of EN (exactly like .properties file) i want to read the translation from the FR.java file if i want to reach the hello variable of fr.java or en.java from the index.jsp page. but code i wrote gives me the value from Lang.java
String language = "FR";
the condition is in the .jsp file jdk 1.4 gives me this error :Error(23,23): variable lang might not have been initialized
any body can help, code pleas?
file name Lang.java
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
filename EN.java
package mypackage;
public class EN extends Lang {
public String hello = "hello";
}
filename FR.java
package mypackage;
public class FR extends Lang {
public String hello = "bonjour";
}
file name : index.jsp
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page import="mypackage.Lang" %>
<%@ page import="mypackage.FR" %>
<%@ page import="mypackage.EN" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>language</title>
</head>
<body>
<%
String language = "EN";
Lang lang;
if (language.equals("EN")){
lang = new EN();
}
else if (language.equals("FR")){
lang = new FR();
}
%>
<%
out.print(lang.hello);
%>
</body>
</html>
If
language
is not equals toEN
orFR
thenLang lang
will not be initialized. Set it explicitly tonew EN()
before theif
.Your code does not cater with the case where
language
is neither "EN" nor "FR". Pick a default language so that thelang
variable is always initialised:In addition, instead of declaring one attribute for each string that needs to be translated (e.g.
String home
) consider declaring a method that will take a "key" as a parameter, and return the corresponding translation for that key. For example, in your JSP you could use something like this:Then have all your
Lang
subclasses return the proper, translated value for each key.You might also want to have a look at ResourceBundles.
If you wanted to print hello variable, declare that variable in abstract Lang class and initialize in concrete classes.
filename EN.java
filename FR.java
Set a default value for the lang variable:
Here it can be the case where language stays un initialized so you need to initialize it
say
And to initialize local variable is compulsary
I don't understand the importance of this condition here you are assigning
"EN"
to language then what is the need of condition?Change the condition as follows: