2010-09-21 4 views
2

le code ci-dessous ne me donne pas la réponse que je veux, je ne sais pas où est le problème? FR est la traduction de EN (exactement comme fichier .properties) je veux lire la traduction du fichier FR.java si je veux atteindre la variable hello de fr.java ou en.java de la page index.jsp . mais le code i écrit me donne la valeur de Lang.javal'utilisation professionnelle de la classe abstraite pour la traduction

String language = "FR"; 

la condition est dans le fichier .jsp JDK 1.4 me donne cette erreur: erreur (23,23): variable langue peut-être pas été initialisé

tout corps peut aider, coder les moyens?

nom de fichier Lang.java

package mypackage; 

abstract public class Lang { 
    public String hello= "home page"; 
} 

nom EN.java

package mypackage; 

public class EN extends Lang { 
    public String hello = "hello"; 
} 

nom FR.java

package mypackage; 

public class FR extends Lang { 
    public String hello = "bonjour"; 
} 
Nom du fichier

: 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> 
+0

si lanuage = "EN" la sortie devrait être "bonjour". sinon si lanuage = "FR" la sortie devrait être "bonjour". – ammar

Répondre

0

Si language n'est pas égal à EN ou FR alors Lang lang ne sera pas initialisé. Réglez-le explicitement sur new EN() avant le if.

1
<% 
     String language = "EN"; 
     Lang lang; 
     if (language.equals("EN")){ 
     lang = new EN(); 
     } 
     else if (language.equals("FR")){ 
     lang = new FR(); 
     } 
    %> 

Ici, il peut être le cas où la langue reste un initialisée de sorte que vous devez l'initialiser

disent

Lang lang = null;//or any default value 

Et pour initialiser la variable locale est compulsary

Je ne t comprendre l'importance de cette condition ici vous attribuez "EN" à la langue alors quel est le besoin de condition?

0

Définir une valeur par défaut pour la variable lang:

Lang lang = new EN(); 
if (language.equals("EN")){ 
    lang = new EN(); 
} 
else if (language.equals("FR")){ 
    lang = new FR(); 
} 
1

Modifier la condition comme suit:

if (language.equals("FR")){ 
    lang = new FR(); 
} 
// add more languages here 
// example: 
// else if (language.equals("DE")) { 
//  lang = new DE(); 
// } 
else { 
    lang = new EN(); 
} 
1

Votre code ne répond pas au cas où language est ni "EN", ni " FR ". Choisissez une langue par défaut afin que la variable lang est toujours initialisés:

Lang lang; 
if (language.equals("EN")){ 
    lang = new EN(); 
} 
else // default case 
    lang = new FR(); 
} 

En outre, au lieu de déclarer un attribut pour chaque chaîne qui doit être traduit (par exemple String home) envisager de déclarer une méthode qui prendra une « clé "en tant que paramètre, et renvoie la traduction correspondante pour cette clé.Par exemple, dans votre JSP, vous pouvez utiliser quelque chose comme ceci:

out.print(lang.getString("home")); 

ont alors tous vos Lang retourner le bon sous-classes, la valeur traduit pour chaque touche.

Vous pouvez également jeter un oeil à ResourceBundles.

+0

Je veux atteindre la variable hello de fr.java ou en.java depuis la page index.jsp. mais le code que j'ai écrit me donne la valeur de Lang.java. – ammar

+0

Le code que vous avez publié accède à la variable 'home', pas à la variable' hello'. La variable 'home' semble seulement être définie dans Lang.java, pas dans EN.java ou FR.java. – Grodriguez

+0

désolé les hommes, c'était mon erreur dans la question, j'ai édité le code. veuillez vérifier à nouveau. – ammar

0

Si vous vouliez imprimer bonjour variable déclarer cette variable dans la classe abstraite Lang et initialiser dans les classes concrètes.

package mypackage; 

abstract public class Lang { 
    public String hello= "home page"; 
} 

nom EN.java

package mypackage; 

public class EN extends Lang { 
    { 
     hello = "hello"; 
    } 
} 

nom FR.java

package mypackage; 

public class FR extends Lang { 
    { 
     hello = "bonjour"; 
    } 
} 
Questions connexes