Słownik języka

0

Cześć wszystkim. Mam mały problem z implementacją przyporządkowywania słów z pliku csv do słownika. Całość ogólnie implementuję w Unity, ale mniejsza. Plik csv mam w postaci:

angielski,polski,harbinger,zwiastun
angielski,polski,fulcrum,punkt podparcia
niemiecki,polski,ich,ja
angielski,polski,together,razem

Chciałbym w pętli program zapisywał do listy (po kolei co jeden), w zależności od tłumaczenia, słówka do danej listy. Np. aby była oddzielna lista dla: angielsko-polski, i żeby lista była w postaci:

1 harbinger zwiastun
2 fulcrum punkt podparcia
3 together razem

I żeby oddzielna lista tworzyła się dla kolejnego języka. Problem mam taki, że tworzy mi się lista, ale źle przyporządkowuje słowa, mniej więcej tak:

1
2
3 harbinger
4
5
6...

Funkcja na chwilę obecną, to w skrócie:```

 List<KeyValuePair<string, string>> slownik2 = new List<KeyValuePair<string, string>>();
 j = 0;

        string[] records = asset.Split(lineSeperater); 

        foreach (string record in records) //rozdziel wiersze
        {
          


            string[] fields = record.Split(fieldSeperator);
            
                foreach (string field in fields) //rozdziel slowa w wierszu oddzielone przecinkami
                {
                if (fields[0] == "angielski" && fields[1] == "polski")
                {

                    contentArea.text += field + "\t";
                   slownik2.Add(new KeyValuePair<string, string>(fields[2], fields[3]));
                    // j = j % 4;

                 
                    j++;
                    Debug.Log(j);


                }}}}

0

Wynik podałem w odniesieniu do innego fragmentu kodu. W tym przypadku w wyniku list wygląda tak, że każde słowo jest powtórzone 4 razy w liście.

0

Robisz to źle. Powinieneś to zrobić w pliku XML. W taki sposób, że każdy string ma swój identyfikator. Przy czym identyfikatorem stringa może być on sam - o ile nie jest to jeden wyraz. I wtedy masz taką strukturę:

<translations>
<string id="harbinger" default="harbinger">
  <PLK>zwiastun</PLK>
  <ENU>harbinger</ENU>
</string>

<string id="me" default="me">
  <PLK>ja</PLK>
  <ENU>me</ENU>
  <DEU>ich</DEU>
</string>
</translations>

Oczywiście dużo lepiej, żebyś tłumaczył od razu pełne zdania zamiast poszczególnych słów i wtedy np:

<translations>
<string id="err_invalidfile" default="The file you are trying to open is invalid">
  <PLK>Plik, który próbujesz otworzyć jest nieprawidłowy</PLK>
  <ENU>The file you are trying to open is invalid</ENU>
</string>
</translations>

Atrybut default zostanie użyty w momencie, kiedy dla danego języka nie ma tłumaczenia. Na tym możesz sobie zbudować całkiem fajną klasę do tłumaczenia i używać jej sposób:

string msg = Translator.Get("err_invalidfile"); //to może być też stała, enum, cokolwiek.

W takiej sytuacji odczytujesz też cały plik podczas uruchamiania aplikacji i wstawiasz go do jakiegoś słownika. Dzięki czemu tylko raz masz długą operację odczytu i parsowania (podczas uruchamiania), a potem wszystkie operacje już są 1 do 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1