Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przetwarzanie dialogów w trybie edycji z wieloma językami

Ostatnio zmodyfikowano 2025-06-03 21:32
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
Przetwarzanie dialogów w trybie edycji z wieloma językami
» 2025-05-29 16:20:20
Witam. Posiadam dwa dialogi. Jeden w wersji Polskiej a drugi w Angielskiej. Chciałbym oba dialogi przetwarzać w moim edytorze i w wygodny sposób przełączać między nimi. Niby nic trudnego, ale .. problem się zaczyna gdy chcę edytować jeden z dialogów. Nie wiem jak wtedy powinien ten drugi dialog się zachować.
Przykładowo edytuję lub kasuję pierwszą linię dialogu pl
"Tak? O Co chodzi?"
 jak więc powinna zachować linia w dialogu en ?


Dialogue PL
"Tak? O Co chodzi?"
-"Przyszedłem po skóry dla handlarza Johna"
 "A skąd mam wiedzieć, że to akurat Ciebie przysłał?"
 -"Mam list od niego"
  "Pokaż mi ten papier. Ok wydaje się w porządku. Oto dostawa skór. Tylko zanieś ją od razu do Johna."
 -"W takim razie, jak mogę Cię przekonać?"
  "Przynieś mi jakiś dowód od niego."
-"Kim jestes?"
 "Jestem myśliwim."
 -"Jak się nazywasz?"
  "To nie istotne. Zwracaj się do mnie bezpośrednio."
 -"Dobra."
-"Co tutaj robisz?"
 "Zazwyczaj poluję, ale teraz akurat odpoczywam."
 -"Na co polujesz?"
  "Przeważnie na wilki i dziobaki."
 -"W porzadku."
-"Zegnaj."

 Dialogue EN
"Yes? What is it?"
-"I came to buy skins for John the trader."
 "And how do I know that he sent you?"
 -"I have a letter from him"
  "Show me that paper. Okay, that seems fine. Here's a shipment of skins. Just take it to John right away."
 -"So, how can I convince you?"
  "Bring me some evidence from him."
-"Who are you?"
 "I am a hunter."
 -"What's your name?"
  "It's not important. Address me directly."
 -"All right."
-"What are you doing here?"
 "I usually hunt, but right now I'm resting."
 -"What are you hunting?"
  "Mostly wolves and platypuses."
 -"All right."
-"Goodbye."
P-182415
DejaVu
» 2025-05-29 16:58:10
Lepiej zrób wszystkie dialogi w języku angielskim i dodaj tylko warstwę tłumaczenia dla tekstów tuż przed ich wyrenderowaniem. Wówczas co najwyżej ktoś zauważy brak tłumaczenia na polski. Dużo łatwiej będzie Ci dodać obsługę n-języków aniżeli robić n-dialogów z którym możliwe, że jakąś logikę masz związaną.
P-182416
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-29 18:14:03
Wpadłem na pomysł:
-gdy usuwana jest odpowiedź to w wersji angielskiej także usuwana jest odpowiedź
-gdy usuwana jest opcja wypowiadana przez NPC to usuwana jest wraz z odpowiedziami i tak samo po stronie tłumnaczenia
-gdy opcja lub odpowiedź jest edytowana to powinna w wersji tłumaczonej być zaznaczona jako do edycji

P-182417
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-30 00:13:12
Spróbuję zrobić tak, że każda opcja dialogowa będzie miała przypisane ID. Nie wiem tylko jeszcze jak taką linię edytować. Najpierw napiszę jakiś kod i później się odezwę
P-182418
pekfos
» 2025-05-30 15:52:15
Wciąż czekam aż ten system dialogów będzie miał jakąkolwiek sensowną funkcjonalność. Spodziewam się że prędzej czy później będzie to służyło do skryptowania zadań, a nie chcesz mieć osobnej kopii skryptu dla każdego języka.

Lepiej zrób wszystkie dialogi w języku angielskim i dodaj tylko warstwę tłumaczenia dla tekstów tuż przed ich wyrenderowaniem.
Widoczny tekst nie jest dobrym identyfkatorem. Widziałem raz jak kierunki "right" i "left" były przetłumaczone jako "dobrze" i "zostawił", pewnie właśnie przez takie założenie. Nawet jeśli dostarczysz kontekst by zapobiec pomyłce, odpowiednio krótka fraza może mieć zupełnie inne tłumaczenie zależnie od kontekstu.
P-182419
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-30 18:30:14
Coś takiego zrobię. Tylko w rozdzielczości 1280x720. Muszę najpierw rozplanować cały wygląd.

P-182420
termistor
» 2025-06-03 21:32:54
termistor  
Witam, tBane. Twoja koncepcja z ID dla linii dialogowych jest logiczna i daje podstawę do solidnego zarządzania wielojęzycznymi dialogami. Aby uniknąć problemów z synchronizacją, proponuję poniższy model strukturalny:  

1. **Uniwersalne ID dla opcji/odpowiedzi**  
   Każda linia dialogu (opcja NPC, odpowiedź gracza) powinna mieć unikalny identyfikator (np. `int` lub `std::string`). Przykład:  

   
 
   struct DialogueLine {  
       std::string id;  
       std::string text_pl;  
       std::string text_en;  
       std::vector<std::string> options; // ID opcji dostępnych po tej lini  
   };  
   
 

2. **Mechanika edycji i synchronizacji**  
   - **Usunięcie linii**: Usuwaj rekord po ID w obu językach.  
   - **Edycja tekstu**: Oznacz pola `text_pl`/`text_en` jako "potrzebne do synchronizacji" (np. flaga `bool needs_review`).  
   - **Dodanie linii**: Generuj nowe ID i zapisuj puste pola dla drugiego języka.  

3. **Warstwa tłumaczenia**  
   Zamiast przechowywać dialogi jako osobne pliki, rozważ strukturę:  

   
 
   std::map<std::string, std::map<std::string, std::string>> translations;  
   // Klucz 1: ID linii, klucz 2: język (np. "pl", "en"), wartość: tekst  
   
 

   W ten sposób możesz dynamicznie wczytywać tłumaczenia i aktualizować je bez modyfikowania oryginalnego dialogu.  

4. **Przykład działania**  
   Załóżmy, że edytujesz polską linię `D001`:  
   - Po zmianie `text_pl`, ustaw `needs_review[D001] = true`.  
   - W edytorze wyświetl `text_en` jako "wygenerowane" (np. szarym kolorem) i pozwól użytkownikowi ręcznie edytować, jeśli `needs_review` jest aktywne.  

5. **Unikanie "magicznego tekstu"**  
   Jak wskazał kolega, tekst sam w sobie nie powinien być kluczem. Twoje ID muszą być niezależne od treści. Przykład błędnego podejścia:  

   
 
   // Zły pomysł  
   std::map<std::string, std::string> translations;  
   translations["Jestem myśliwym."] = "I am a hunter.";  
   // Jeśli gracz zmieni "Jestem myśliwym." na "Jestem łowcą", mapa przestaje działać.  
   
 

6. **Sugestia rozdzielenia logiki i UI**  
   - Dialogi jako dane: `std::vector<DialogueLine>` z ID i opcjami.  
   - Tłumaczenia jako osobny plik (np. JSON/XML) z kluczami `ID_język`.  
   - To ułatwia aktualizacje i unika konieczności "ręcznego duplikowania" dialogów.  

Jeśli chcesz, mogę pomóc z kodem szkieletowym lub przykładem wersji minimalnej. Pamiętaj, że kluczowym elementem jest **separacja danych dialogu od ich prezentacji** – to pozwoli na dynamiczne przełączanie języków bez modyfikowania struktury dialogu.  

Powodzenia z UI! 1280x720 to dobre rozdzielczość, ale pamiętaj o skalowalności (np. DPI-awareness).  

termistor
P-182445
« 1 »
  Strona 1 z 1