Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Višejezični program - kako?

[es] :: C/C++ programiranje :: Višejezični program - kako?

[ Pregleda: 2947 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vilyu
Web Developer
Beograd, Srbija

Član broj: 1188
Poruke: 444



+2 Profil

icon Višejezični program - kako?21.12.2007. u 09:22 - pre 198 meseci
Ćao,

Interesuje me kako vi rešavate prevođenje interfejsa programa na više jezika? Npr, pretpostavimo da se program startovao sa interfejsom na srpskom, a onda u toku rada korisnik izabere interfejs na engleskom.

Moja ideja je bila da napravim language fajlove koji bi sadržali informacije tipa: identifikator = prevod. U program bih učitao potreban lang fajl, isparsirao ga u niz (ili sl.), i na svakom mestu gde treba da se pojavi tekst, pozvao bih svoju f-ju sa argumentom identifikatorom prevoda. F-ja bi potom pronasla prevod identifikatora iz adekvatnog niza i vratila ga natrag.

E sada, to znači pozivanje potprograma svaki čas. Stavi na stek, skini sa steka, ... Može li ovo jednostavnije, ili/i brže? Hvala.
Pera električar 0637129710, BG, preporučujem.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Višejezični program - kako?21.12.2007. u 10:29 - pre 198 meseci
Citat:

E sada, to znači pozivanje potprograma svaki čas. Stavi na stek, skini sa steka, ... Može li ovo jednostavnije, ili/i brže? Hvala.

Brzina zamene jednog teksta drugim ide jako brzo i time ne treba da se oprterećuješ. 1000-de stringova za zamenu je baš ništa. U principu, onemogućiš osvežavanje ekrana, izvršiš zamenu, opet omogućiš osvežavanje ekrana, osvežiš i to je to.

Ono što zapravo jeste problem u celoj priči jer kako da ti za sve jezike sva slova budu zaista prikazana na formama, tasterima i sl. Tu se javlja problematika kodnih strana i sl.

Najbolje je da potražiš ponuđena rešenja za konkretno okruženje koje koristiš.

Recimo, jedno od rešenja za BCB je:
(Borland Newsgroups)
Citat:

Code:

// MyStrings.rh 
#define   IDS_CANCEL             27114 

// Strings.rc 
#pragma code_page(1252) 
#include "MyStrings.rh" 

STRINGTABLE 
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 
BEGIN 
  IDS_CANCEL, "Cancel" 
END 

STRINGTABLE 
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT 
BEGIN 
  IDS_CANCEL, "Zrusit" 
END 

Then, in your application, create a couple of helper functions to assist you 
when setting the language: 

static const TFontCharset CodepageToCharset( unsigned int cp ) 

  CHARSETINFO csi; 

  if ( (cp == 0) || (!TranslateCharsetInfo( (unsigned long *)cp, &csi, TCI_SRCCODEPAGE )) ) 
  { 
    return OEM_CHARSET; 
  } 
  return (TFontCharset)csi.ciCharset; 


static AnsiString InternalLoadStr( int ErrorCode ) 

  const int MaxResourceBufferSize = 4096;  // maximum resource string length is 4095 bytes 
  char string[MaxResourceBufferSize]; 
  LoadString( GetModuleHandle(0), ErrorCode, string, MaxResourceBufferSize ); 
  return AnsiString( string ); 


Finally, set the thread locale to the desired language: 

  SetThreadLocale( 0x0409 );  // U.S. English 
  btnCancel->Font->Charset = CodepageToCharset( 1252 );  // western codepage 
  btnCancel->Caption = InternalLoadStr( IDS_CANCEL ); 

  SetThreadLocale( 0x0405 );  // Czech locale 
  btnCancel->Font->Charset = CodepageToCharset( 1250 );  // eastern europe codepage 
  btnCancel->Caption = InternalLoadStr( IDS_CANCEL ); 



Ja opet koristim nešto drugačiju strukturu, ali sve se svodi na isto.

Neki proizvođači softvera (TotalCommander) ostavili su prevode u običnim INI baziranim fajlovima što može biti korisno za CUSTOM prevode, drugim rečima nema potrebe za rekompajliranjem programa ako treba dodati neki drugi jezik.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Višejezični program - kako?21.12.2007. u 20:18 - pre 198 meseci
> nteresuje me kako vi rešavate prevođenje interfejsa programa na više jezika? Npr, pretpostavimo da se program startovao sa interfejsom na srpskom, a
> onda u toku rada korisnik izabere interfejs na engleskom.

Najbolje da pređeš na Unicode kontrole a jezičke resurse čuvaš u unicode fajlu u obliku ID=Vrednost. Svakoj kontroli dodeli jedinstveni Tag i posle kreiranja forme promeni tekst shodno selektovanom jeziku.

 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Višejezični program - kako?22.12.2007. u 05:47 - pre 198 meseci
Pogledati

http://dybdahl.dk/dxgettext/
Tko leti vrijedi
 
Odgovor na temu

vilyu
Web Developer
Beograd, Srbija

Član broj: 1188
Poruke: 444



+2 Profil

icon Re: Višejezični program - kako?22.12.2007. u 09:42 - pre 198 meseci
Hvala na komentarima. Videću da li postoji standardno resenje za wxWidgets, mada mi se čini da sva rešenja funkcionišu na prilično sličnim principima.
Pera električar 0637129710, BG, preporučujem.
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.pool.mediaWays.net.



+27 Profil

icon Re: Višejezični program - kako?22.12.2007. u 09:57 - pre 198 meseci
Kao što Darko napisa, samo da „ohrabrim“ :)

Posebno ako pišeš program pod Linuksom, ali i inače, najbolje rešenje jeste Gettekst — zaokružena celina, podrška direktno u libcu, dugo iskustvo na terenu i mnogobrojni alati i za programere i za prevodioce, i neke napredne jezičke mogućnosti koje nema nijedan drugi sistem.

Međutim, Gettekst je opšti sistem, za svakakve programske jezike i okruženja, pa se stoga ne bavi detaljima koji strogo zavise od radnog okvira, kao što je promena jezika u letu. Za to bi morao nešto sam da smisliš — u principu, da izvedeš tako da se sve vidljive niske mogu ponovo provući gettekst-pozive kada korisnik promeni jezik. S druge strane, promenu jezika u letu malo koji program izvodi, jer nije osobito korisna mogućnost. To zato što Gettekst tesno sarađuje sa sistemom, tako da ako je korisnik izabrao određeni jezik globalno, program koji koristi Gettekst će se bez dodatnih zahvata pokretati na tom jeziku.

Što se brzine tiče, na osrednjoj mašini od pre pet godina, Gettekst daje reda 50.000 poruka veličine prosečne rečenice u sekundi. Tako da slobodno zaboravi na brzinu :)
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
85.94.115.*



Profil

icon Re: Višejezični program - kako?22.12.2007. u 14:51 - pre 198 meseci
Ako nekome treba rjesenje za Borland C++ Bilder ili delphi , neka pogleda ovo:

http://www.sicomponents.com/tsilang1.html

Ja koristim ovu komponentu, i sjajna je... Jako lagano preskakanje sa jezika na jezik...
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Višejezični program - kako?31.12.2007. u 12:37 - pre 197 meseci
Postoji jedna seljacka fora koju ja koristim:
Sav tekst koji se vidi u programu se cita iz fajla. Napravis vise fajlova sa istim tekstovima na razlicitim jezicima i onda svakom dugmetu, panelu i cemu vec treba kazes da tekst za sebe procita u fajlu. Imas jos jedan fajl u kome pise koji od jezika se koristi u tom trenutku i to je to.
Ovo je zgodno za neke specificne stvari kojima se ja bavim, jer ne mogu koristiti uobicajene forme. Kad god mozes, bolje je imati neko vec sredjeno resenje kao ovo sto su savetovali ljudi iznad mene. Ovo sto ja radim je samo kad si ostavljen na vetrometini "cistog" C++a. Cak mozda i za te situacije ima boljih resenja, a da ih ja ne znam.
De si Deda...
 
Odgovor na temu

[es] :: C/C++ programiranje :: Višejezični program - kako?

[ Pregleda: 2947 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.