Zobrazit plnou verzi příspěvku: Vícejazyčné dialogy

chlebovsky
10.09.2008, 12:36
Zdravím všechy programátory. Měl bych tady  dotaz ohledně cyzojazyčných dialogů.
Lze vytvořit jeden univerzální dialog, a pak dle zvoleného jazyka do něj pomoci lispu vpisovat mutace jazyků.
 
Uvedu příklad.
 
Tlačítko (Ukončit) mám vytvořený dialog, tlačítko má nějaký label a key. A spustím ho, lze teď pomoci lispu to tlačítko přejmenovat na (END) ať už v běhu dialogu nebo před (start_dialog) ???
 
Nebo musím vytvořit prostě všechny mutace dcl-ek pro všechny jazyky ???
 
Ve VBA to lze pomoci caption="END". Umí něco i lisp ???
 
Díky moc, Martin Ch.

Seiner
10.09.2008, 12:47
Bez hlubšího zkoumání, obávám se že obtížně. Proč ale netvoříte aplikaci rovnou ve VBA nebo VB, když to umíte? Podle mého tvorba aplikace ve VB daleko přehlednější, než v lispu.

chlebovsky
10.09.2008, 12:52
Zvyk = železná košile od verze cadu 12. A navíc daleko větší zkušenosti :-)
 
A navíc ten funguje vždy a všude, a s novými funkcemi vlx, vlax..... dostává trošku jiný rozměr když se je pomalu učím.
 
Ale je mi to v podstatě jedno.

Seiner
10.09.2008, 12:56
Chápu. Já jsem to mastil už od 10. Staré věci taky nepředělávám. Ale nové tvořím ve VB a většinou se záměrem, aby se daly použít i v LT.
Omlouvám se, že nemám nic k věci.

PepaR
10.09.2008, 14:22
U lispů je nutné vše přepsat. Není těžké rozpoznat řetězce textu a odseparoat je od kódu.
 
ARX lze snadno přeložit např. pomocí programu Resource Hacker nebo jiného editoru zdrojů.
 
VLX, tam je to horší, musíte mít zdroj nebo si soubor dekompilovat.
 
Vícějazyčnost by asi šla řešit pomocí externích jazykových souborů,které jsem viděl u jedné ARX aplikace propráci s tabulkami.

Vladimír Michl
10.09.2008, 21:10
I v LISPu/VLISPu se používají oddělené textové soubory s hlášeními programu, nebo tabulky stringů vložené na začátku programu, nebo identifikované řetězce pro použití profesionálních lokalizačních nástrojů. Jsou tak řešeny i LISP aplikace Autodesku.
 
Dá se také zjistit jazyk AutoCADu a jazyk aplikace přepnout automaticky (jsou tak dělané i některé naše freeware LISP aplikace).

alfred
10.09.2008, 21:27
Nebylo by prosím možné uvést nějakou konkrétní ze které by to bylo možné "okouknout"? Třeba jednu s dialogem a jednu bez, jen s hlášením na příkazové řádce...

Seiner
11.09.2008, 07:17
To si dokážu představit asi tak, že každý text je přiřazen do nějaké proměnné. Na začátku aplikace se podle zvolené / zjištěné jazykové verze se souboru hlášek (jakási matice), načte ten správný sloupec. A všude, kde se text vyskytuje, je nahrazen proměnnou.
   Já jsem z původního dotazu pochopil, že je požadováno přepínání jazyků PO načtení dialogu. To by se IMHO muselo vyvolat nové načtení s příslušným jazykovým nastavením. Ale prakticky je to asi k ničemu - prostě pracuji s nějakou aplikací v nějakém jazyku a málokdy je potřeba přepínat za běhu. (I když já takové aplikace mám, ale ne pro AutoCAD.)

alfred
11.09.2008, 08:07
Ano, mate pravdu. V DCL souboru lze pro "label" pouzit promennou s hodnotou string. To jsem nevedel.
Spravnou hodnotu stringu lze pak samozrejme nacist mnoha zpusoby podle potreby.
Jen nazev promenne nesmi obsahovat nektere znaky, ktere v LISPu projdou. Napriklad promenna s nazvem "text-button" neprojde. Vadi pomlcka...

chlebovsky
12.09.2008, 11:24
To jak je seznam uložený, mám řešeno, mám přesně tu matici jak je psána výše, a jen dle jazyku, vyberu příslušný sloupeček, "seznam". To načtu do proměnné jazyk, a z tama pak čerpám jednotlivé slova věty...
Pro vypisování na řádku, a různé políčka v dialogách, je to snadný, jasný. Ale nastane problém když mám právě v tom DCL definované tlačítko např :
 
MATERIALY : dialog {  label = "Databáze materiálů ve výkrese.";  : popup_list {key   = "SEZ";}  : edit_box {key = "A";label = "Název materiálu ";}  : edit_box {key = "B";label = "Modul pružnosti  ";}  : edit_box {key = "C";label = "Tepelná vodivost";}  : row {         : button { key   = "1"; label = "Přidat"  ;}         : button { key   = "2"; label = "Nahradit";}         : button { key   = "3"; label = "Smazat"  ;}         : button { key   = "4"; label = "Převzít"  ;}  }  : row {         : button { key   = "OK"   ; label = "  Ok  "    ; is_default = true; }         : button { key   = "KONEC"; label = "Storno  "; is_cancel  = true; }         : button { key   = "HELP" ; label = "Pomoc"   ;}  }  errtile;}
Tak pak dle jazyku potřebuju :
aby tlačítko se zobrazovalo třeba
: button { key   = "3"; label = "Delete"  ;}
Poslední odpověď od p. Alfreda zní že lze použít proměnnou, to můžu chápat takto :
 
1) v lispu TL_01_TEXT = "Delete"
2) (new_dialog........
3) (start_dialog)
 
a dialog je definovaný takto :
: button { key   = "3"; label = TL_01_TEXT  ;}
 
jenže to nefunguje u textů je to jasný, tam doplňuju
(set_tile "key" "value") a napíšu jakýkoliv text
 
ale název tlačítka ??? jedná se mi čistě o tlačítko ostatní můžu obejít že udělám text který měním a za tím třeba zatržítko bez labelu.
Ale tlačítko je problém, protože ten bez Labelu nemá smysl, a ten potřebuju měnit, a nechci kvůli toho mít 30 různých DCL-ek. tak jsem chtěl mít jedno univerzální, a lispem do toho cpát popisky.
Zatím díky všem.
 

alfred
12.09.2008, 12:47
Tlacitko lze udelat.
v lsp:
(setq nazevtlacitka "libovolny string")
;samozrejme pred otevrenim dialogu.... :-)
v dcl:
: button {
label = nazevtlacitka;
key = "1";
}

Nedalo mi to a jeste jsem si to zkousel. Bohuzel jsem se
mylil a nefunguje to.
V dialogu se na tlacitku objevi napis "nazevtlacitka"alfred2008-09-12 13:33:23

Sedláček
12.09.2008, 13:07
[QUOTE=Seiner]
 a většinou se záměrem, aby se daly použít i v LT.[/QUOTE]
 
Jak to řešíte pro LT? Přes DDE? Nebo DXF soubory? Nebo jinak?

chlebovsky
12.09.2008, 14:14
No tak to mi právě nejde, a já nevím proč, nemůže být toto ovlivněno verzí cadu ??? Mám 2006.
 
Jinak mé zkušební dcl je tady :
MATERIALY : dialog {  label = "Databáze materiálů ve výkrese.";  : popup_list {key   = "SEZ";}  : edit_box {key = "A";label = "Název materiálu ";}  : edit_box {key = "B";label = "Modul pružnosti  ";}  : edit_box {key = "C";label = "Tepelná vodivost";}  : row {         : button { key   = "1"; label = "Přidat"  ;}         : button { key   = "2"; label = "Nahradit";}         : button { key   = "3"; label = TL_MATERIALY_4;}         : button { key   = "4"; label = "Převzít"  ;}  }  : row {         : button { key   = "OK"   ; label = "  Ok  "    ; is_default = true; }         : button { key   = "KONEC"; label = "Storno  "; is_cancel  = true; }         : button { key   = "HELP" ; label = "Pomoc"   ;}  }  errtile;}
 
A lsp je tady :
(setq TL_MATERIALY_4 "Delete")(setq dialog (load_dialog "D:\\Dokumenty\\Soukromé\\Pokus_DCL\\Pokus.dcl"))(new_dialog "MATERIALY" dialog)(start_dialog)
 
A pořád mi to místo toho "Delete" tam píše "TL_MATERIALY_4"
 
Dík

AlSt
12.09.2008, 14:38
Zdravím,kdysi jsem něco podobného potřeboval a řešil jsem to dynamickým generováním dcl souboru. Kde jsem měl seznamy jazykových mutací ve formatu assoc listu (list (cons key . value) ...) dle jazyka jsem vybral odpovidající seznam jazyku. V generatoru dcl soubpru jsem jej dosazoval pomoci (cdr (assoc key seznam-msg-pro-dany-jazyk)) do fuknce strcat a cely radek nasledne zapisoval pomoci write-line nebo nějaké podobné fce do souboru.S pozdravem Staněk

chlebovsky
12.09.2008, 15:34
No to by i bylo řešení, ale udělat generátor pro 50 dialogů :-) ale je to jedno z řešení. Navíc dokáže si pohrát i s rozměrama :-)
Díky to mně nenapadlo.

Seiner
13.09.2008, 19:01
Používám DXF a posílání Hot Keys.
(OT pro p. Sedláčka)Seiner2008-09-13 19:02:42

Seiner
13.09.2008, 19:11
Možná místo čistého generování DCL by se dalo použít to, co dělám při generování DXF. Prostě do vzorového (textového) souboru napíšu na příslušná místa klíčová slova a mám poměrně jednoduchý kód VB, který nahradí klíčová slova potřebnými texty.