Avatar billede krukken Mester
03. december 2004 - 10:45 Der er 26 kommentarer og
1 løsning

Referere til teststring med text.

Hej,

Jeg sidder og arbejder med at lave en application i Java som skal indeholde flere sprog.

I den forbindelse har jeg brug for at samle nogle tekster i en form for collection.

Er der ikke en mulighed for at oprette et eller andet array af en slags så det er muligt at siger "test" -> "Dette er en teststreng". (Dette er selvfølgelig ikke den rigtig syntakt, men skal kun beskrive hvordan funktionaliteten skal være)
Avatar billede mikkelbm Nybegynder
03. december 2004 - 10:48 #1
HashMap kan bruges til det formål. Der har du en nøgle og en tilhørende værdi.

HashMap map = new HashMap();

map.put("test", "Dette er en test");

System.out.println(map.get("test"));
Avatar billede krukken Mester
03. december 2004 - 10:51 #2
Er der ikke en anden måde at gøre det på? Teksken må meget gerne blive hardkodet i filen - bare jeg slippe for at skulle lave en funktion skal skal "putte" alle tekster.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 10:52 #3
Og hvis man er smart, gemmer man sine værdier i et tekstdokument og læser det ind ved programstart:

Eksempel på indhold:
---
test=Dette er en test
test1=Dette er en anden test
luk=Luk hele programmet
---

Ved programstart læses tekstdokumentet ind og de enkelte linjer splittes op ved lighedstegnet og det på venstre side er nøglen og højre side er værdien.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 10:53 #4
Hvis du gemmer det i et tekstdokument er det bare at løbe den igennem i en løkke. Så kan du nøjes med at skrive en enkelt put operation.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 10:57 #5
Lavede for nylig noget lignende, og du kan da lige se de metoder jeg brugte:

public static HashMap readUniqueValues(String path, String ignoreLine) // ignoreLine er en eller flere char som opfattes som kommentarer og derfor ikke skal læses med
  {
    BufferedReader reader = getFileStream(path);
    HashMap values = new HashMap();

    if (reader == null)
      return null;

    try
    {
      String text = null;
      String key = null;
      String value = null;

      while ((text = reader.readLine()) != null)
      {
        text.trim();

        if (!(text.equals("") || text.startsWith(ignoreLine)))
        {
          String[] split = text.split("=");

          key = split[0];
          value = split[1];

          values.put(key, value);
        }
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return null;
    }

    return values;
  }

  private static BufferedReader getFileStream(String path)
  {
    FileReader reader = null;
    BufferedReader input = null;

    try
    {
      reader = new FileReader(path);
      input = new BufferedReader(reader);
    }
    catch (IOException e)
    {
      e.printStackTrace();
      return null;
    }

    return input;
  }
Avatar billede krukken Mester
03. december 2004 - 10:59 #6
Ja - det har jeg også overvejet. Men ved at hardkode teksterne i en klasse kan man opnå at der ved hjælpe af reflections kan tilføjes et nye sprog bare ved at udsende et .class-fil.

i php kan man noget der minder om 

var $danish = array("welcome" => "velkommen",
              "forgotten" => "Glemt password"};

også kan teksten refererer man til teksen med welcome - er det ikke også sådan en mulighed i Java?
Avatar billede krukken Mester
03. december 2004 - 11:00 #7
Jamen er det ikke lidt dumt at begynde at læse en fil på den måde når syntaksen er nøjagtig den sammen som ved Property? Jeg ville da ihvert fald have brugt Property i det eksempel.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:02 #8
Joh, syntaksen er den samme, men ved Property skal du, når du læser den ind jo kende alle nøglerne.
Avatar billede krukken Mester
03. december 2004 - 11:04 #9
Okay - men tilbage til spørgsmålet.

var $danish = array("welcome" => "velkommen",
              "forgotten" => "Glemt password"};

også kan teksten refererer man til teksen med welcome - er det ikke også sådan en mulighed i Java?
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:08 #10
Jeg kan ikke lige gennemskue, hvad det er der er smart ved ovenstående, så jeg ved ikke om det er muligt i Java.
Og jeg vil stadig fraråde at hardcode noget, men hver sin smag :)
Avatar billede arne_v Ekspert
03. december 2004 - 11:11 #11
Et PHP associativt array og en Java HashMap er faktisk det samme.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:12 #12
Og glem min kommentar 11:02:45 - ved nærmere eftertanke kan man sagtens bruge en Property fil. (Hvilket jeg så vil anbefale)

Grunden til at jeg lavede ovenstående kode, var at jeg havde brug for at kunne lave kommentar i min tekstfil.
Avatar billede arne_v Ekspert
03. december 2004 - 11:12 #13
Java har faktisk et framework for internationalisering byggende på såkaldt
resource bundles.

Læs mere her:
  http://java.sun.com/docs/books/tutorial/i18n/
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:13 #14
>> Arne

Tak - så er det derfor jeg ikke kan gennemskue hvad han vil :)
Avatar billede krukken Mester
03. december 2004 - 11:13 #15
har du prøvet med #?? Det er kommentarer til en property-fil
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:15 #16
Så vidt jeg kan se, bygger Javas eget framework på samme principper, som jeg starter med at skrive.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 11:21 #17
>> 11:13:22 (krukken)

Ja, jeg ved godt at det er muligt at lave kommentar i en Property-fil (dumt eksempel). Men jeg får muligvis senere hen brug for at lave noget mere komplekst i tekstfilen, så derfor vil jeg gerne selv kunne styre hvordan den læses.
Avatar billede arne_v Ekspert
03. december 2004 - 11:21 #18
Jep.

Javas internationalisering resource bundle er en Map.
Avatar billede mikkelbm Nybegynder
03. december 2004 - 14:30 #19
Kommet videre?
Avatar billede krukken Mester
05. december 2004 - 17:01 #20
Nej, jeg er ikke kommet videre. Der ikke noget af dette jeg kan bruger. Property var jo noget jeg selv fandt på, og det vil jeg ikke bruge. Teksterne skal ligge in klassen, og man skal via en tekststreng kunne hente en hel linie i klassen.
Avatar billede mikkelbm Nybegynder
05. december 2004 - 18:18 #21
Hvis teksterne skal ligge inde i klassen, kan du jo ikke rigtig komme uden om, at lave de put's, som du du tidligere nævnte du vil undgå.
Jeg har ingen ideer til hvordan du ellers kan lave det! Jeg ved bare, at man rigtig mange steder gør brug af eksterne filer til at holde styr på sprog!

Kan bla. nævne at Opera gør brug af en ekstern fil til sprog:
http://www.opera.com/download/index.dml?step=2&opsys=Windows&platform=win

Og med hensyn til din kommentar om Properties, synes jeg nu ikke det var noget du selv fandt på! Jeg kan ikke lige se i dit spørgsmål, at du nævner noget med Properties - og slet ikke før jeg nævner principperne i det!

Og som Arne skriver, er det du efterspørger i php det samme som et HashMap i Java!
Avatar billede mikkelbm Nybegynder
05. december 2004 - 18:19 #22
Forkert link - her er det til languagefilerne:

http://www.opera.com/download/languagefiles/
Avatar billede mikkelbm Nybegynder
12. december 2004 - 23:21 #23
Husk at lukke dine spørgsmål!
Avatar billede krukken Mester
13. december 2004 - 21:29 #24
Jeg leder stadigvæk efter en passende løsning på problemet.
Avatar billede mikkelbm Nybegynder
13. december 2004 - 21:32 #25
Hvorfor er det, at du ikke vil bruge det, som Sun selv lægger op til?
Avatar billede krukken Mester
11. januar 2005 - 16:00 #26
Ikke noget brugbart svar.
Avatar billede mikkelbm Nybegynder
12. januar 2005 - 07:35 #27
Næh, hvis ikke man vil bruge det som Sun selv lægger op til, bliver det nok svært at finde noget brugbart!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester