Moderators Kercyn Δημοσ. 26 Μαρτίου 2015 Moderators Δημοσ. 26 Μαρτίου 2015 Καλησπέρα σε όλους τους αγαπητούς Insomniacs. Προσπαθώ να φτιάξω ένα DTD αλλά λόγω έλλειψης γνώσεων/εμπειρίας κολλάω κάπου. Στο παιχνίδι που φτιάχνω θέλω να υποστηρίζω πολλές γλώσσες. Πέρα από ένα αρχείο με strings για κάθε γλώσσα, θέλω να υποστηρίζω και πολυγλωσσικά γραφικά κομμάτια (πχ ένα κουμπί για new game είναι μια εικόνα που γράφει "New Game" με διάφορα εφέ. Το κείμενο, δηλαδή, δεν είναι on-the-fly τροποποιήσιμο). Αυτό θα το λύσω έχοντας έναν φάκελο για κάθε γλώσσα, μέσα στον οποίον θα υπάρχουν όλα τα γραφικά αυτά κομμάτια για τη γλώσσα. Θέλω επίσης το παιχνίδι να είναι πλήρως moddable, να μπορεί δηλαδή ο καθένας να μπορεί να φτιάξει τη δική του έκδοση του παιχνιδιού (χάρτες κλπ). Ένα "παιχνίδι" θα αποτελείται από ένα zip με τα assets συν ένα XML που θα περιγράφει το παιχνίδι, τα paths των assets κλπ. Αρχικά δηλώνω τις γλώσσες με τα ID τους. Στη συνέχεια θέλω να χωρίσω τα assets μου ανάλογα με τη γλώσσα τους. Αυτό που έχω κάνει ως τώρα είναι το εξής: Τμήμα του DTD <!ELEMENT game (languages, localized, non-localized)> <!ATTLIST game name CDATA #REQUIRED> <!ATTLIST game version CDATA #REQUIRED> <!ATTLIST game resources CDATA #REQUIRED> <!ELEMENT languages (language+)> <!ATTLIST languages default CDATA #REQUIRED> <!ELEMENT language EMPTY> <!ATTLIST language key ID #REQUIRED> <!ATTLIST language name CDATA #REQUIRED> <!ELEMENT localized (loc_content+)> <!ATTLIST localized default CDATA #REQUIRED> <!ELEMENT loc_content (buttons, labels, fonts, file)> <!ATTLIST loc_content lang_key ID #REQUIRED> <!ELEMENT buttons (asset+)> <!ELEMENT asset EMPTY> <!ATTLIST asset key ID #REQUIRED> <!ATTLIST asset path CDATA #REQUIRED> <!ELEMENT labels (asset+)> <!ELEMENT fonts (asset+)> <!ELEMENT file EMPTY> <!ATTLIST file key CDATA #FIXED "FILE_STRINGS"> <!ATTLIST file path CDATA #REQUIRED> και ένα τμήμα του XML: <languages default="en"> <language key="en" name="English" /> <language key="jp" name="日本語" /> <language key="gr" name="Ελληνικά" /> </languages> <localized> <buttons> <asset key="TEX_BTN_TITLE_CONTINUE" path="continue.png" /> <asset key="TEX_BTN_TITLE_NEWGAME" path="new_game.png" /> <asset key="TEX_BTN_TITLE_LOADGAME" path="load_game.png" /> <asset key="TEX_BTN_TITLE_SETTINGS" path="settings.png" /> <asset key="TEX_BTN_TITLE_CREDITS" path="credits.png" /> <asset key="TEX_BTN_TITLE_QUIT" path="quit.png" /> </buttons> <labels> <asset key="LBL_LABEL_1" path="label1.png" /> </labels> <fonts> <asset key="FONT_OUGA" path="bouga.ttf" /> </fonts> <file key="FILE_STRINGS" path="strings.txt" /> </localized> Στο <!ATTLIST loc_content lang_key ID #REQUIRED> θα ήθελα να μπορώ να βάλω ένα από τα IDs των γλωσσών που έχω δηλώσει παραπάνω. Αν γίνεται, θα ήθελα επίσης να υποχρεώνω το XML να ακολουθεί τα IDs που δήλωσε ήδη (αν και φαντάζομαι αυτό δε γίνεται στο ίδιο το αρχείο και ο έλεγχος θα πρέπει να γίνει από το πρόγραμμα). Ιδανικά θα ήθελα το XML να μοιάζει κάπως έτσι: <localized> <loc_content lang_key="en"> <buttons> <asset key="TEX_BTN_TITLE_CONTINUE" path="continue.png" /> <asset key="TEX_BTN_TITLE_NEWGAME" path="new_game.png" /> <asset key="TEX_BTN_TITLE_LOADGAME" path="load_game.png" /> <asset key="TEX_BTN_TITLE_SETTINGS" path="settings.png" /> <asset key="TEX_BTN_TITLE_CREDITS" path="credits.png" /> <asset key="TEX_BTN_TITLE_QUIT" path="quit.png" /> </buttons> <labels> <asset key="LBL_LABEL_1" path="label1.png" /> </labels> <fonts> <asset key="FONT_" path=".ttf" /> </fonts> <file key="FILE_STRINGS" path="strings.txt" /> </loc_content> </localized> Υπάρχει κάποιος τρόπος/workaround για να κάνω αυτό που θέλω; Ευχαριστώ πολύ.
defacer Δημοσ. 26 Μαρτίου 2015 Δημοσ. 26 Μαρτίου 2015 Δεν τα διάβασα προσεκτικά, αλλά. Για ποιό λόγο θέλεις συγκεκριμένα DTD? Είναι το κακό format το ίδιο και (τελείως γενικά μιλώντας) διάφορα πράγματα που γίνονται εύκολα με άλλες schema γλώσσες με DTD μπορεί να γίνονται υπερβολικά δύσκολα ή απλώς καθόλου. Έχεις σκεφτεί να το κάνεις με xsd ή relax ng? Αν η απάντηση στην παραπάνω ερώτηση είναι "δεν τα έχω συναντήσει", πέτα το dtd στα σκουπίδια όπως είσαι και ξεκίνα με όποιο από τα δύο θές (είναι πιθανότερο στο μέλλον να βρεις μπροστά σου το xsd οπότε ίσως να το προτιμήσεις).
παπι Δημοσ. 27 Μαρτίου 2015 Δημοσ. 27 Μαρτίου 2015 Βασικα το xml ειναι υπερβολη για αυτο που θες. Τα resources σου ειναι 1 προς 1, αρα ενα αρχειακι txt ανα γλωσσα ειναι οκ, ειναι και πιο απλο εφοσον μπορει να μεταφραστει ακομα και με το google translate.
Moderators Kercyn Δημοσ. 27 Μαρτίου 2015 Μέλος Moderators Δημοσ. 27 Μαρτίου 2015 Δεν τα διάβασα προσεκτικά, αλλά. Για ποιό λόγο θέλεις συγκεκριμένα DTD? Είναι το κακό format το ίδιο και (τελείως γενικά μιλώντας) διάφορα πράγματα που γίνονται εύκολα με άλλες schema γλώσσες με DTD μπορεί να γίνονται υπερβολικά δύσκολα ή απλώς καθόλου. Έχεις σκεφτεί να το κάνεις με xsd ή relax ng? Αν η απάντηση στην παραπάνω ερώτηση είναι "δεν τα έχω συναντήσει", πέτα το dtd στα σκουπίδια όπως είσαι και ξεκίνα με όποιο από τα δύο θές (είναι πιθανότερο στο μέλλον να βρεις μπροστά σου το xsd οπότε ίσως να το προτιμήσεις). Το xsd το έχω ακουστά αλλά είχα την εντύπωση ότι είναι απλώς ένας διαφορετικός (αλλά "ισότιμος") τρόπος να φτιάξεις ένα xml. Το άλλο ούτε που το ξέρω. Θα το κοιτάξω περαιτέρω αλλά πιθανότερο είναι να κάνω αυτό που λέει το παπι. Βασικα το xml ειναι υπερβολη για αυτο που θες. Τα resources σου ειναι 1 προς 1, αρα ενα αρχειακι txt ανα γλωσσα ειναι οκ, ειναι και πιο απλο εφοσον μπορει να μεταφραστει ακομα και με το google translate. Έχω φτιάξει ήδη έναν parser για άλλα πράγματα που αποθηκεύω σε αρχεία. Ο λόγος που πήγα σε XML είναι ότι είναι πιο διαδεδομένο από το δικό μου format που έφτιαξα για το παιχνίδι, και άρα πιο "προσιτό" σε κάποιον που θέλει να το modάρει. Το ξέρω ότι δε θα πιάσει να το modάρει κανείς (ή έστω λίγοι) αλλά δε θέλω να κάνω πράγματα με τη λογική "και ποιος θα ασχοληθεί". Θα το σκεφτώ παραπάνω και είναι πολύ πιθανό να αφήσω το XML και να το κάνω με τον parser μου. Σας ευχαριστώ και τους δύο.
παπι Δημοσ. 27 Μαρτίου 2015 Δημοσ. 27 Μαρτίου 2015 Αυτο που σου λεω, δεν ειναι κατι το prototype. Εαν δεις, σε πολλες εφαρμογες υπαρχει ενας φακελος "lang" και εκει μεσα διαφορα αρχεια txt. Με ονοματα τυπου en.txt fr.txt etc
defacer Δημοσ. 27 Μαρτίου 2015 Δημοσ. 27 Μαρτίου 2015 Εγώ πάντως παίδες από την περιγραφή δεν κατάλαβα ότι το ζητούμενο είναι απλά ένα trivial 1:1 mapping για να υποστηρίζει η εφαρμογή πολλές γλώσσες σε fixed content. Πράγμα που είναι και το μόνο που γίνεται με την παραπάνω μέθοδο. Νομίζω πως λέει ξεκάθαρα ότι αυτό που θέλει είναι να μπορεί οποιοσδήποτε να δημιουργεί packages από το μηδέν, για τη δομή των οποίων δε θα ξέρουμε τίποτα και γι' αυτό το ζητούμενο είναι να κάνουμε validate ότι συμφωνούν με το τάδε schema.
ParhsG Δημοσ. 27 Μαρτίου 2015 Δημοσ. 27 Μαρτίου 2015 Πιθανόν το xsd να είναι μια καλή λύση αν και υπάρχουν και άλλα formats.Βέβαια δεν αρκεί μόνο αυτό μιας και μπορεί να έχει και άλλα λάθη πχ λάθος ονόματα αρχείων κτλ.Οπως το βλέπω κυρίως skin θες να αλλάζεις απο ότι καταλαβα μιας και δε ξέρω πως μπορείς να βάλει κάποιος custom λογική ,εκτος αν έχεις και κάποια script με κάποιο τρόπο στα resources.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα