Browse Source

[1.26.10] Lengthen phoneme [n] slightly.

Internationalization of Windows espeak and espeakedit installers.

git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@54 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
5414063759

+ 22
- 16
dictsource/af_list View File

//maintainer: Willem van der Walt
//maintainer: Willem van der Walt
// email: [email protected] // email: [email protected]
// tel: +27 12 8413996 // tel: +27 12 8413996
// Meraka Institute, CSIR // Meraka Institute, CSIR
ceylon s@lOn ceylon s@lOn
china S'ina china S'ina
engeland 'EN@lant engeland 'EN@lant
kanada kanad%a
kongo kONgu kongo kONgu
mesopotamië mEsuput'A:mi@ mesopotamië mEsuput'A:mi@
mosambiek musamb'ik mosambiek musamb'ik
breytenbach breIt@nbax2 breytenbach breIt@nbax2
carl kA:r@L carl kA:r@L
charles _^_EN charles _^_EN
chopin S%OpA~
chris krIs chris krIs
christo krIstu christo krIstu
christian krIstian christian krIstian
gerhard x2&rart gerhard x2&rart
grange x2rA:nsi grange x2rA:nsi
gustav gustaf gustav gustaf
haydn hAId@n
helena hil'e@na
jacobus jako@bWs jacobus jako@bWs
jacques ZA:k jacques ZA:k
jane _^_EN jane _^_EN
jesus ji:sWs jesus ji:sWs
joey dZ@Ui joey dZ@Ui
john _^_EN john _^_EN
lategan lA:t@x2an
le l@ le l@
leandra li'andra leandra li'andra
leroux l@ru leroux l@ru
maria mar'ia maria mar'ia
martin m'A:rt@n martin m'A:rt@n
michiel $2 michiel $2
mostert m'Ost@rt
mostert m'Ost@rt
mozart mo@tsart
natasha n%at'aSa natasha n%at'aSa
paul p@Ul paul p@Ul
paulus p@UlWs paulus p@UlWs
philip fIl@p
pierre p'e@r pierre p'e@r
petrus pe@trWs petrus pe@trWs
phoebe fi:bi phoebe fi:bi
scheepers ske@p@rs scheepers ske@p@rs
schoor sko@r schoor sko@r
shakespeare _^_EN shakespeare _^_EN
tania tanja
terblanche t@rblA:nS terblanche t@rblA:nS
theron tr'On theron tr'On
viljoen $2 viljoen $2
sodat $pause sodat $pause
voordat $pause voordat $pause
nadat $pause nadat $pause
ofskoon $2 $pause
totdat tOdat $pause totdat tOdat $pause
as ,as $pause as ,as $pause
soos $pause soos $pause
aanbid $2 aanbid $2
aanstaande $2 aanstaande $2
agenda ax2'Enda agenda ax2'Enda
aikôna %aik'O:na
algaande $2
algehele alx2@h,e@l@ algehele alx2@h,e@l@
alles al@s alles al@s
alternatiewe $4 alternatiewe $4
bewe be@v@ bewe be@v@
bewend be@v@nt bewend be@v@nt
bewering b@ve@rIN bewering b@ve@rIN
biblioteek $4
bostaande b'o@stA:nd@ bostaande b'o@stA:nd@


dadelik dA:d@lIk dadelik dA:d@lIk


hallo h'Il,@U hallo h'Il,@U
hanteer $2 hanteer $2
hardop hart?Op
heeltemal he@lt@mal heeltemal he@lt@mal
heengaan he@nx2A:n heengaan he@nx2A:n
hek h&k hek h&k
hekke h&k@ hekke h&k@
helaas he@l'A:s helaas he@l'A:s
hele he@l@
here he@r@ here he@r@
hoewel huv'&l hoewel huv'&l
hoofsaaklik $2 hoofsaaklik $2
ietwat itvat ietwat itvat
ignoreer ix2no@r'e@r ignoreer ix2no@r'e@r
inagneming @nax2ne@m@N inagneming @nax2ne@m@N
inderdaad @nd@rd'A:t
ingang Inx2aN ingang Inx2aN
inkluis $2
intens @nt'Ens intens @nt'Ens
intensiteit $4 intensiteit $4


kritiek krIt'ik kritiek krIt'ik
kultuur $2 kultuur $2
kunsmatige kWnsm'A:t@x2@ kunsmatige kWnsm'A:t@x2@
kwansuis $2


latere l'A:t@r@ latere l'A:t@r@
lekker l&k@r lekker l&k@r


omtrent Omtr'Ent omtrent Omtr'Ent
onbegrip $1 onbegrip $1
onderstebo On@rst@b,o@
onderweg $3
onderwyser $3 onderwyser $3
ongeag $1 ongeag $1
ongeduld $1 ongeduld $1
onrus $1 onrus $1
oorkom $2 oorkom $2
oorleef $2 oorleef $2
oorsee $2
oorsese $2
oorspronklike $2 oorspronklike $2
oranje $2 oranje $2


sombere s'Omb@r@ sombere s'Omb@r@
sodra so@dr'A: sodra so@dr'A:
sogenaamde s'o@x2@n,A:md@ sogenaamde s'o@x2@n,A:md@
soldaat $2
soldate $2
sononder sOn,On@r
sonop sOn,Op
sononder sOn_On@r
sonop sOn_Op
sover so@f&r sover so@f&r
spesmaas $2 spesmaas $2
stabiel stab'il stabiel stab'il


vaarwel fA:rv'&l vaarwel fA:rv'&l
vanaf fanaf vanaf fanaf
vandag $2
vandaan $2
vanjaar $2
vanoggend fan'Ox2@nt
vanuit fan'Yyt
vandat $1
veraf f&r_af veraf f&r_af
verafgeleë f&rafx2@le@@ verafgeleë f&rafx2@le@@
verantwoordelikheid f@rantv'o@rd@l@keIt verantwoordelikheid f@rantv'o@rd@l@keIt
voorkom $2 voorkom $2
voormalige fo@rm'A:l@x2@ voormalige fo@rm'A:l@x2@
voorsien $2 voorsien $2
vorendag $3
vorige fo@r@x2@ vorige fo@r@x2@
vrek fr&k vrek fr&k



+ 204
- 102
dictsource/af_rules
File diff suppressed because it is too large
View File


+ 38
- 2
dictsource/de_list View File

// 1. Change ['i:] to [=I@] at end of word // 1. Change ['i:] to [=I@] at end of word




// Letters
//========
// Characters
//===========
// If a letter has a "word" pronunciation which is different from its // If a letter has a "word" pronunciation which is different from its
// "letter" name, then include the letter name here, with the letter // "letter" name, then include the letter name here, with the letter
// prefixed by a _ character. // prefixed by a _ character.


// Include a _ before a character if it's name should only be
// spoken when "speak punctuation" option is on.

_. pUnkt _. pUnkt
_, kOma _, kOma


€ OY*o:
£ paUnd
% p@-*o:ts'Ent
& Unt
@ kl'ame:*,af@
# nUm3
+ plUs
= glaIC
~ tIld@
\ bEkslES

_| paIp
_: d'Op@lp,UNkt
_; St@-*'ICpUNkt
__ ,Unt3St@-*'IC
_- b'IndEst@-*,IC
_! 'aUs_|@-*,u:fe:ts,aIC@n
_? f@-*'Age:ts,aIC@n
_' 'apOst@-*,Of
_" 'anf,y:*UNsts,aIC@n
_/ S@-*'Egst@-*IC
_( kl'am3||_|'aUf
_) kl'am3||ts'u:
_{ g@Sv'aIft@kl'am3||_|'aUf
_} g@Sv'aIft@kl'am3||ts'u:
_[ 'EkIg@kl'am3||_|'aUf
_] 'ECIg@kl'am3||ts'u:
_< klaIn3
_> g@-*Ws3
_` g@-*A:v
_^ sI*kUmflEks
_— g@d'ank@nSt@-*,IC



// Numbers // Numbers
//======== //========

+ 14
- 5
dictsource/de_rules View File

é e: é e:
ée 'e: ée 'e:
é (_ 'e: é (_ 'e:
æ E
ø W
ç s
č tS
š S
ž Z

, (D kOma , (D kOma
/ slaS
% p@-*o:ts'Ent
$ dOl@
€ OY*o:
£ paUnd
$ dOl'A:


. pUnkt . pUnkt
. (. _: . (. _:
\.) . \.) .

* StE*n
*) * (*
**
**) * (_ _::


+ 2
- 2
dictsource/dict_phonemes View File



: b c C d dZ f g : b c C d dZ f g
h j J k l m n N h j J k l m n N
n^ p R s S s2 t tS
ts v z Z
n^ p R R2 s S s2 t
tS ts v z Z




Dictionary it_dict Dictionary it_dict

+ 1
- 0
dictsource/en_list View File

holy hoUlI2 holy hoUlI2
homepage hoUmpeIdZ homepage hoUmpeIdZ
hominem h0mInEm hominem h0mInEm
hopi hoUpi:
horizontal $3 horizontal $3
hospitable h0sp'It@b@L hospitable h0sp'It@b@L
hostage h0stIdZ hostage h0stIdZ

+ 3
- 2
dictsource/en_rules View File

f) all (a al f) all (a al
f) all (ib al f) all (ib al
_C) all (ow al _C) all (ow al
h) all (w O:l
h) all (C O:l
sm) all O:l sm) all O:l
st) all O:l st) all O:l
t) all O:l t) all O:l
_) re (dC rE _) re (dC rE
_) re (dr r%i: _) re (dr r%i:
_) re (eduP2 r%i: _) re (eduP2 r%i:
_) re (eqP2 r%i:
_) re (emP2 r%i:
_) re (enP2 r%i: _) re (enP2 r%i:
_) re (eqP2 r%i:
_) re (exP2 r%i: _) re (exP2 r%i:
referend rEf@r'End referend rEf@r'End
re (fug rE re (fug rE

+ 23
- 3
dictsource/fr_list View File

mlle mad@mwaz'El mlle mad@mwaz'El
mme mad'am mme mad'am
mr m@sj'Y mr m@sj'Y
p.s pOstkRipt'Om
p.s pOftkRipt'Om
ratp 'ER:'a:t'e:p'e ratp 'ER:'a:t'e:p'e
s.t.p s'il:t'@:pl'E s.t.p s'il:t'@:pl'E
s.v.p s'il:v'u:pl'E s.v.p s'il:v'u:pl'E


// auxillary verbs (be, have, can, etc) // auxillary verbs (be, have, can, etc)
suis $u+ $verb suis $u+ $verb
est E $u+
est Et2 $u+
d'est d'Est
sommes $u+ sommes $u+
êtes $u+ êtes $u+
sont $u+ sont $u+


scient si scient si
bénéficient benefisi $verb bénéficient benefisi $verb
président pRezidA~t2
président pRezid'A~
président pRezidt2 $verb président pRezidt2 $verb
résident Rezid'A~
résident Rezidt2 $verb
évident evid'A~
évident evidt2 $verb
couvent k'uvt2 $verb




// MAIN WORD DICTIONARY // MAIN WORD DICTIONARY
mars maRs mars maRs
pays pEi pays pEi
pourcent puRs'A~ pourcent puRs'A~
absent abs'A~
ardent ard'A~
prudent pRyd'A~
imprudent E~pRyd'A~
discident disid'A~
accident aksid'A~
occident Oksid'A~
l'occident lOksid'A~
orient Orj'A~
l'orient lOrj'A~
secret sYkR'E
secrets sYkR'E


sens sA~s sens sA~s
c'est sEt2 $u c'est sEt2 $u
qu'à ka qu'à ka

+ 1
- 0
dictsource/hu_rules View File

A) r (A R A) r (A R
C) r (A R C) r (A R
r (C R r (C R
r (ó_ R2
rr RR rr RR


_) richa (rd RiCa: _) richa (rd RiCa:

+ 15
- 15
dictsource/pt_list View File

a a $atend a a $atend
e E $atend // assume letter-e at end of sentence e E $atend // assume letter-e at end of sentence
o O $atend o O $atend
à ,agR'avi $atend
é ,e||&g'udU $atend
á ,a||&g'udU
â ,a||sirkuNfl'EksU
ã ,atS'iU
ç s,esed'elj&
è ,egR'avi
ê ,e||sirkuNfl'EksU
í ,i&g'udU
ó ,o&g'udU
ô ,o||sirkuNfl'EksU
õ ,otS'iU
ú ,u&g'udU
ü ,utR'em&
à a $atend
é E $atend
_á ,a||&g'udU
_â ,a||sirkuNfl'EksU
_ã ,atS'iU
_ç s,esed'elj&
_è ,egR'avi
_ê ,e||sirkuNfl'EksU
_í ,i&g'udU
_ó ,o&g'udU
_ô ,o||sirkuNfl'EksU
_õ ,otS'iU
_ú ,u&g'udU
_ü ,utR'em&




// some common adjectives and adverbs // some common adjectives and adverbs

BIN
phsource/n/na View File


BIN
phsource/n/ne View File


BIN
phsource/n/ni View File


BIN
phsource/n/no View File


BIN
phsource/n/nu View File


+ 1
- 1
phsource/ph_english View File





phoneme U phoneme U
vowel starttype (u) endtype (u)
vowel starttype (o) endtype (o)
length 150 length 150
formants vowel/uu formants vowel/uu
endphoneme endphoneme

+ 1
- 1
phsource/ph_english_n View File





phoneme U phoneme U
vowel starttype (u) endtype (u)
vowel starttype (o) endtype (o)
length 150 length 150
formants vowel/u formants vowel/u
endphoneme endphoneme

+ 1
- 1
phsource/ph_english_rp View File





phoneme U phoneme U
vowel starttype (u) endtype (u)
vowel starttype (o) endtype (o)
length 150 length 150
formants vowel/o-_3 formants vowel/o-_3
endphoneme endphoneme

+ 1
- 1
phsource/ph_english_us View File





phoneme U phoneme U
vowel starttype (u) endtype (u)
vowel starttype (o) endtype (o)
length 150 length 150
formants vowel/8_2 formants vowel/8_2
endphoneme endphoneme

+ 3
- 3
phsource/ph_hungarian View File



phoneme i: phoneme i:
vowel starttype (i) endtype (i) vowel starttype (i) endtype (i)
length 200
length 220
formants vowel/i formants vowel/i
// linkout ; // linkout ;
endphoneme endphoneme


phoneme e: phoneme e:
vowel starttype (e) endtype (e) vowel starttype (e) endtype (e)
length 240
length 250
formants vowel/e_3 formants vowel/e_3
endphoneme endphoneme


vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2 lengthmod 2
wave ustop/t_dnt%50 wave ustop/t_dnt%50
before _ ustop/t_dnt%35
before _ ustop/t_dnt%45
switchvoicing d switchvoicing d
endphoneme endphoneme



+ 1
- 1
phsource/ph_russian View File

vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2 lengthmod 2
wave ustop/t_dnt%60 wave ustop/t_dnt%60
before _ ustop/t_dnt%30
before _ ustop/t_dnt%35
before r ustop/tr before r ustop/tr
switchvoicing d switchvoicing d
endphoneme endphoneme

+ 5
- 2
phsource/phonemes View File

vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2 lengthmod 2
wave ustop/t_dnt%50 wave ustop/t_dnt%50
before _ ustop/t_dnt%25
before _ ustop/t_dnt%35
before r ustop/tr before r ustop/tr
switchvoicing d[ switchvoicing d[
endphoneme endphoneme
include ph_swahili include ph_swahili




//phonemetable f_en base
//phonemetable basef base
//include pf

//phonemetable f_en basef
//include pf_english //include pf_english

BIN
phsource/voc/dh View File


BIN
phsource/voc/dh_ View File


BIN
phsource/voc/v View File


BIN
phsource/voc/v_ View File


BIN
phsource/voc/z_ View File


BIN
phsource/voc/z_pzd View File


BIN
phsource/voc/z_pzd_ View File


BIN
phsource/voc/zh_ View File


BIN
phsource/w/wo View File


BIN
phsource/w/wu View File


+ 2
- 12
src/espeakedit.cpp View File

CompileInit(); CompileInit();
exit(0); exit(0);
} }
if(strcmp(param,"--lex=ru")==0)
{
if(LoadPhData() != 1)
{
fprintf(stderr,"Failed to load phoneme data\n");
exit(1);
}
CompareLexicon(MENU_LEXICON_RU);
exit(0);
}
} }


gui_flag = 1; gui_flag = 1;


case MENU_SPEAK_VOICE: case MENU_SPEAK_VOICE:
transldlg->ReadVoice(); transldlg->ReadVoice();
if(voicedlg != NULL)
voicedlg->WriteParams();
// if(voicedlg != NULL)
// voicedlg->WriteParams();
SetVoiceTitle(voice_name); SetVoiceTitle(voice_name);
break; break;
} }

+ 1
- 1
src/main.h View File

void OnSaveAs(wxCommandEvent& event); void OnSaveAs(wxCommandEvent& event);
void OnSaveSelect(wxCommandEvent& event); void OnSaveSelect(wxCommandEvent& event);
void OnSavePitchenv(wxCommandEvent& event); void OnSavePitchenv(wxCommandEvent& event);
void OnVoiceDlg(wxCommandEvent& event);
// void OnVoiceDlg(wxCommandEvent& event);


DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

+ 44
- 44
src/menus.cpp View File



// FILE MENU // FILE MENU
file_menu = new wxMenu; file_menu = new wxMenu;
file_menu->Append(MENU_SPECTRUM, _T("&Open"));
file_menu->Append(MENU_SPECTRUM2, _T("O&pen2"));
file_menu->Append(MENU_SPECTRUM, _("&Open"));
file_menu->Append(MENU_SPECTRUM2, _("O&pen2"));
// file_menu->Append(MENU_PROSODY, _T("&Prosody window")); // file_menu->Append(MENU_PROSODY, _T("&Prosody window"));
if(type==0) if(type==0)
{ {
else else
if(type==1) if(type==1)
{ {
file_menu->Append(SPECTSEQ_SAVE, _T("&Save"));
file_menu->Append(SPECTSEQ_SAVEAS, _T("Save &As"));
file_menu->Append(SPECTSEQ_SAVESELECT, _T("Save Selection"));
file_menu->Append(SPECTSEQ_SAVE, _("&Save"));
file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As"));
file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection"));
// file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); // file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope"));
file_menu->Append(SPECTSEQ_CLOSE, _T("&Close"));
file_menu->Append(SPECTSEQ_CLOSE, _("&Close"));
// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); // file_menu->Append(MENU_CLOSE_ALL, _T("Close &All"));
} }
else else
if(type==2) if(type==2)
{ {
file_menu->Append(SPECTSEQ_SAVE, _T("&Save"));
file_menu->Append(SPECTSEQ_SAVEAS, _T("Save &As"));
file_menu->Append(SPECTSEQ_SAVE, _("&Save"));
file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As"));
// file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); // file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope"));
file_menu->Append(SPECTSEQ_CLOSE, _T("&Close"));
file_menu->Append(SPECTSEQ_CLOSE, _("&Close"));
// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); // file_menu->Append(MENU_CLOSE_ALL, _T("Close &All"));
} }
file_menu->Append(MENU_QUIT, _T("&Quit"));
file_menu->Append(MENU_QUIT, _("&Quit"));


// SPEAK_MENU // SPEAK_MENU
speak_menu = new wxMenu; speak_menu = new wxMenu;
speak_menu->Append(MENU_SPEAK_TRANSLATE, _T("&Translate"));
speak_menu->Append(MENU_SPEAK_RULES, _T("Show &Rules"));
speak_menu->Append(MENU_SPEAK_TEXT, _T("&Speak"));
speak_menu->Append(MENU_SPEAK_TRANSLATE, _("&Translate"));
speak_menu->Append(MENU_SPEAK_RULES, _("Show &Rules"));
speak_menu->Append(MENU_SPEAK_TEXT, _("&Speak"));
speak_menu->AppendSeparator(); speak_menu->AppendSeparator();
speak_menu->Append(MENU_SPEAK_FILE, _T("Speak &file"));
speak_menu->Append(MENU_SPEAK_PAUSE, _T("&Pause"));
speak_menu->Append(MENU_SPEAK_STOP, _T("St&op"));
speak_menu->Append(MENU_SPEAK_FILE, _("Speak &file"));
speak_menu->Append(MENU_SPEAK_PAUSE, _("&Pause"));
speak_menu->Append(MENU_SPEAK_STOP, _("St&op"));


// VOICE MENU // VOICE MENU
voice_menu = new wxMenu; voice_menu = new wxMenu;
voice_menu->Append(MENU_SPEAK_VOICE, _T("Select &Voice"));
voice_menu->Append(MENU_SPEAK_VOICE, _("Select &Voice"));


// DATA MENU // DATA MENU
data_menu = new wxMenu; data_menu = new wxMenu;
data_menu->Append(MENU_COMPILE_PH, _T("Compile &phoneme data"));
data_menu->Append(MENU_COMPILE_DICT, _T("Compile &dictionary"));
data_menu->Append(MENU_COMPILE_MBROLA, _T("Compile &mbrola phonemes list"));
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary"));
data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list"));
// OPTIONS MENU // OPTIONS MENU
paths_menu = new wxMenu; paths_menu = new wxMenu;
paths_menu->Append(MENU_PATH1, _T("Phoneme data source"));
paths_menu->Append(MENU_PATH2, _T("Dictionary data source"));
paths_menu->Append(MENU_PATH3, _T("Synthesized sound WAV file"));
paths_menu->Append(MENU_PATH1, _("Phoneme data source"));
paths_menu->Append(MENU_PATH2, _("Dictionary data source"));
paths_menu->Append(MENU_PATH3, _("Synthesized sound WAV file"));
speak_menu->AppendSeparator(); speak_menu->AppendSeparator();
paths_menu->Append(MENU_PATH4, _T("Voice file to modify formant peaks"));
paths_menu->Append(MENU_PATH4, _("Voice file to modify formant peaks"));


option_menu = new wxMenu; option_menu = new wxMenu;
option_menu->Append(MENU_PATHS, _T("Set &paths"), paths_menu);
option_menu->Append(MENU_PARAMS, _T("Speed"));
option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu);
option_menu->Append(MENU_PARAMS, _("Speed"));


// TOOLS // TOOLS
vowelchart_menu = new wxMenu; vowelchart_menu = new wxMenu;
vowelchart_menu->Append(MENU_VOWELCHART1, _T("From compiled phoneme data"));
vowelchart_menu->Append(MENU_VOWELCHART2, _T("From list of formants"));
vowelchart_menu->Append(MENU_VOWELCHART3, _T("From directory of vowel files"));
vowelchart_menu->Append(MENU_VOWELCHART1, _("From compiled phoneme data"));
vowelchart_menu->Append(MENU_VOWELCHART2, _("From list of formants"));
vowelchart_menu->Append(MENU_VOWELCHART3, _("From directory of vowel files"));


lexicon_menu = new wxMenu; lexicon_menu = new wxMenu;
lexicon_menu->Append(MENU_LEXICON_RU, _T("Russian (lexicon.dict)"));
lexicon_menu->Append(MENU_LEXICON_DE, _T("German"));
lexicon_menu->Append(MENU_LEXICON_RU, _("Russian (lexicon.dict)"));
lexicon_menu->Append(MENU_LEXICON_DE, _("German"));


tools_menu = new wxMenu; tools_menu = new wxMenu;
tools_menu->Append(MENU_VOWELCHART, _T("Make &Vowels Chart"), vowelchart_menu);
tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu);
// tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); // tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file"));
tools_menu->Append(MENU_LEXICON, _T("Compare &Lexicon"), lexicon_menu);
tools_menu->Append(MENU_TO_UTF8, _T("Convert file to &UTF8"));
tools_menu->Append(MENU_COUNT_WORDS, _T("Count word &frequencies"));
tools_menu->Append(MENU_TEST , _T("Test (temporary)"));
tools_menu->Append(MENU_LEXICON, _("Compare &Lexicon"), lexicon_menu);
tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8"));
tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies"));
tools_menu->Append(MENU_TEST , _("Test (temporary)"));
// tools_menu->Append(MENU_TEST2 , _T("Test2")); // tools_menu->Append(MENU_TEST2 , _T("Test2"));


// HELP MENU // HELP MENU
help_menu = new wxMenu; help_menu = new wxMenu;
help_menu->Append(MENU_ABOUT, _T("&About"));
help_menu->Append(MENU_ABOUT, _("&About"));




wxMenuBar *menu_bar = new wxMenuBar; wxMenuBar *menu_bar = new wxMenuBar;


menu_bar->Append(file_menu, _T("&File"));
menu_bar->Append(speak_menu, _T("&Speak"));
menu_bar->Append(voice_menu, _T("&Voice"));
menu_bar->Append(option_menu, _T("&Options"));
menu_bar->Append(tools_menu, _T("&Tools"));
menu_bar->Append(data_menu, _T("&Compile"));
menu_bar->Append(help_menu, _T("&Help"));
menu_bar->Append(file_menu, _("&File"));
menu_bar->Append(speak_menu, _("&Speak"));
menu_bar->Append(voice_menu, _("&Voice"));
menu_bar->Append(option_menu, _("&Options"));
menu_bar->Append(tools_menu, _("&Tools"));
menu_bar->Append(data_menu, _("&Compile"));
menu_bar->Append(help_menu, _("&Help"));


return(menu_bar); return(menu_bar);
} // end of MakeMenu } // end of MakeMenu

+ 0
- 3
src/options.cpp View File

wxString path_pitches; wxString path_pitches;
wxString path_wave; wxString path_wave;
wxString path_speech; wxString path_speech;
wxString path_voices;
wxString path_phsource; wxString path_phsource;
wxString path_dictsource; wxString path_dictsource;
wxString path_speaktext; wxString path_speaktext;
pConfig->Read(_T("/pitchpath"),&path_pitches,basedir+_T("/pitch")); pConfig->Read(_T("/pitchpath"),&path_pitches,basedir+_T("/pitch"));
pConfig->Read(_T("/wavepath"),&path_wave,wxEmptyString); pConfig->Read(_T("/wavepath"),&path_wave,wxEmptyString);
pConfig->Read(_T("/speechpath"),&path_speech,wxEmptyString); pConfig->Read(_T("/speechpath"),&path_speech,wxEmptyString);
pConfig->Read(_T("/voicepath"),&path_voices,basedir+_T("/voices"));
pConfig->Read(_T("/voicename"),&string,wxEmptyString); pConfig->Read(_T("/voicename"),&string,wxEmptyString);
strcpy(voice_name,string.mb_str(wxConvLocal)); strcpy(voice_name,string.mb_str(wxConvLocal));
pConfig->Read(_T("/phsource"),&path_phsource,basedir+_T("/phsource")); pConfig->Read(_T("/phsource"),&path_phsource,basedir+_T("/phsource"));
pConfig->Write(_T("/pitchpath"),path_pitches); pConfig->Write(_T("/pitchpath"),path_pitches);
pConfig->Write(_T("/wavepath"),path_wave); pConfig->Write(_T("/wavepath"),path_wave);
pConfig->Write(_T("/speechpath"),path_speech); pConfig->Write(_T("/speechpath"),path_speech);
pConfig->Write(_T("/voicepath"),path_voices);
pConfig->Write(_T("/voicename"),wxString(voice_name,wxConvLocal)); pConfig->Write(_T("/voicename"),wxString(voice_name,wxConvLocal));
pConfig->Write(_T("/phsource"),path_phsource); pConfig->Write(_T("/phsource"),path_phsource);
pConfig->Write(_T("/dictsource"),path_dictsource); pConfig->Write(_T("/dictsource"),path_dictsource);

+ 0
- 1
src/options.h View File

extern wxString path_spectload; extern wxString path_spectload;
extern wxString path_spectload2; extern wxString path_spectload2;
extern wxString path_pitches; extern wxString path_pitches;
extern wxString path_voices;
extern wxString path_phsource; extern wxString path_phsource;
extern wxString path_dictsource; extern wxString path_dictsource;
extern wxString path_modifiervoice; extern wxString path_modifiervoice;

+ 1
- 1
src/phoneme.h View File

#define phPLACE 0xf0000 #define phPLACE 0xf0000
#define phPLACE_pla 0x60000 #define phPLACE_pla 0x60000


#define N_PHONEME_TABS 50 // number of phoneme tables
#define N_PHONEME_TABS 100 // number of phoneme tables
#define N_PHONEME_TAB 256 // max phonemes in a phoneme table #define N_PHONEME_TAB 256 // max phonemes in a phoneme table
#define N_PHONEME_TAB_NAME 32 // must be multiple of 4 #define N_PHONEME_TAB_NAME 32 // must be multiple of 4



+ 1
- 0
src/setlengths.cpp View File



case espeakPITCH: case espeakPITCH:
if(new_value > 99) new_value = 99; if(new_value > 99) new_value = 99;
if(new_value < 0) new_value = 0;
embedded_value[EMBED_P] = new_value; embedded_value[EMBED_P] = new_value;
break; break;



+ 17
- 1
src/speak.cpp View File

static void PitchAdjust(int pitch_adjustment) static void PitchAdjust(int pitch_adjustment)
{//========================================== {//==========================================
int ix, factor; int ix, factor;
extern unsigned char pitch_adjust_tab[100];


voice->pitch_base = (voice->pitch_base * pitch_adjust_tab[pitch_adjustment])/128; voice->pitch_base = (voice->pitch_base * pitch_adjust_tab[pitch_adjustment])/128;


HKEY RegKey; HKEY RegKey;
unsigned long size; unsigned long size;
unsigned long var_type; unsigned long var_type;
char *env;
unsigned char buf[100]; unsigned char buf[100];


if((env = getenv("espeak-path")) != NULL)
{
sprintf(path_home,"%s/espeak-data",env);
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists
}

buf[0] = 0; buf[0] = 0;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey);
size = sizeof(buf); size = sizeof(buf);


sprintf(path_home,"%s\\espeak-data",buf); sprintf(path_home,"%s\\espeak-data",buf);
#else #else
char *env;

if((env = getenv("ESPEAK-DATA-PATH")) != NULL)
{
snprintf(path_home,sizeof(path_home),"%s/espeak-data",env);
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists
}

snprintf(path_home,sizeof(path_home),"%s/espeak-data",getenv("HOME")); snprintf(path_home,sizeof(path_home),"%s/espeak-data",getenv("HOME"));
if(access(path_home,R_OK) != 0) if(access(path_home,R_OK) != 0)
{ {

+ 18
- 0
src/speak_lib.cpp View File

HKEY RegKey; HKEY RegKey;
unsigned long size; unsigned long size;
unsigned long var_type; unsigned long var_type;
char *env;
unsigned char buf[100]; unsigned char buf[100];


if(path != NULL) if(path != NULL)
sprintf(path_home,"%s/espeak-data",path); sprintf(path_home,"%s/espeak-data",path);
return; return;
} }

if((env = getenv("espeak-path")) != NULL)
{
sprintf(path_home,"%s/espeak-data",env);
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists
}

buf[0] = 0; buf[0] = 0;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey);
size = sizeof(buf); size = sizeof(buf);
sprintf(path_home,"%s\\espeak-data",buf); sprintf(path_home,"%s\\espeak-data",buf);


#else #else
char *env;

if(path != NULL) if(path != NULL)
{ {
snprintf(path_home,sizeof(path_home),"%s/espeak-data",path); snprintf(path_home,sizeof(path_home),"%s/espeak-data",path);
return; return;
} }


if((env = getenv("ESPEAK-DATA-PATH")) != NULL)
{
snprintf(path_home,sizeof(path_home),"%s/espeak-data",env);
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists
}

snprintf(path_home,sizeof(path_home),"%s/espeak-data",getenv("HOME")); snprintf(path_home,sizeof(path_home),"%s/espeak-data",getenv("HOME"));
if(access(path_home,R_OK) != 0) if(access(path_home,R_OK) != 0)
{ {

+ 1
- 1
src/spectdisplay.cpp View File

menu_spectdisplay->Append(207,_T("Hide Interpolation CTRL+SHIFT+Q")); menu_spectdisplay->Append(207,_T("Hide Interpolation CTRL+SHIFT+Q"));
menu_spectdisplay->Append(205,_T("Zero Peaks CTRL+Z")); menu_spectdisplay->Append(205,_T("Zero Peaks CTRL+Z"));
menu_spectdisplay->Append(210,_T("Toggle Marker"),menu_markers); menu_spectdisplay->Append(210,_T("Toggle Marker"),menu_markers);
menu_spectdisplay->Append(211,_T("Apply the formant adjustments from current voice"));
menu_spectdisplay->Append(211,_T("Apply the formant adjustments from a voice file"));
menu_spectdisplay->AppendSeparator(); menu_spectdisplay->AppendSeparator();
menu_spectdisplay->Append(208,_T("Play Selected Frame F1")); menu_spectdisplay->Append(208,_T("Play Selected Frame F1"));
menu_spectdisplay->Append(209,_T("Play All F2")); menu_spectdisplay->Append(209,_T("Play All F2"));

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.26.09 20.Jun.07";
const char *version_string = "1.26.10 23.Jun.07";
const int version_phdata = 0x012601; const int version_phdata = 0x012601;


int option_device_number = -1; int option_device_number = -1;

+ 0
- 2
src/synthesize.cpp View File

int n_soundicon_tab=0; int n_soundicon_tab=0;
SOUND_ICON soundicon_tab[N_SOUNDICON_TAB]; SOUND_ICON soundicon_tab[N_SOUNDICON_TAB];


#define RMS1 16 //
#define RMS2 20 // 16 - 20
#define RMS_GLOTTAL1 35 // vowel before glottal stop #define RMS_GLOTTAL1 35 // vowel before glottal stop
#define RMS_START 28 // 14 - 30 #define RMS_START 28 // 14 - 30



+ 2
- 0
src/synthesize.h View File

extern unsigned char env_rise[128]; extern unsigned char env_rise[128];
extern unsigned char env_frise[128]; extern unsigned char env_frise[128];


#define MAX_PITCH_VALUE 101
extern unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1];


// queue of commands for wavegen // queue of commands for wavegen
#define WCMD_AMPLITUDE 1 #define WCMD_AMPLITUDE 1

+ 3
- 1
src/translate.cpp View File

// use this table if vowel is not the last in the word // use this table if vowel is not the last in the word
static unsigned char length_mods_en[100] = { static unsigned char length_mods_en[100] = {
/* a , t s n d z r N <- next */ /* a , t s n d z r N <- next */
100,120,100,105, 95,110,110,100, 95, 100, /* a <- next2 */
100,120,100,105,100,110,110,100, 95, 100, /* a <- next2 */
105,120,105,110,125,130,135,115,125, 100, /* , */ 105,120,105,110,125,130,135,115,125, 100, /* , */
105,120, 75,100, 75,105,120, 85, 75, 100, /* t */ 105,120, 75,100, 75,105,120, 85, 75, 100, /* t */
105,120, 85,105, 95,115,120,100, 95, 100, /* s */ 105,120, 85,105, 95,115,120,100, 95, 100, /* s */


// if(found || (dictionary_flags2 != 0)) // if(found || (dictionary_flags2 != 0))
// prefix_flags = 1; // ?? this looks wrong // prefix_flags = 1; // ?? this looks wrong
if((found==0) && (dictionary_flags2 != 0))
prefix_flags = 1;
} }
if(found == 0) if(found == 0)
{ {

+ 4
- 3
src/voicedlg.cpp View File

break; break;


case VD_LOAD: case VD_LOAD:
Load();
// Load();
break; break;


case VD_SAVE: case VD_SAVE:
Save();
// Save();
break; break;


case VD_USEPITCH: case VD_USEPITCH:
ReadParams(); ReadParams();
} }


#ifdef deleted
void VoiceDlg::Save() void VoiceDlg::Save()
{//================== {//==================
int pk; int pk;
SetSpinCtrl(voicedlg->vd_pitch2,pitch2); SetSpinCtrl(voicedlg->vd_pitch2,pitch2);
ReadParams(); ReadParams();
} // end of VoiceDlg::Load } // end of VoiceDlg::Load
#endif


void VoiceDlg::SetFromSpect(SpectSeq* spect) void VoiceDlg::SetFromSpect(SpectSeq* spect)
{//========================================= {//=========================================

+ 15
- 5
src/wavegen.cpp View File



// pitch,speed, // pitch,speed,
int embedded_default[N_EMBEDDED_VALUES] = {0,50,170,100,50, 0,50, 0,170,0,0,0,0,0}; int embedded_default[N_EMBEDDED_VALUES] = {0,50,170,100,50, 0,50, 0,170,0,0,0,0,0};
static int embedded_max[N_EMBEDDED_VALUES] = {0,99,360,300,99,99,99, 0,360,0,0,0,0,4};
static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,360,300,99,99,99, 0,360,0,0,0,0,4};


#define N_CALLBACK_IX N_WAV_BUF-2 // adjust this delay to match display with the currently spoken word #define N_CALLBACK_IX N_WAV_BUF-2 // adjust this delay to match display with the currently spoken word
int current_source_index=0; int current_source_index=0;


// set from y = pow(2,x) * 128, x=-1 to 1 // set from y = pow(2,x) * 128, x=-1 to 1
unsigned char pitch_adjust_tab[100] = {
unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1] = {
64, 65, 66, 67, 68, 69, 70, 71, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 86, 87, 88, 80, 81, 82, 83, 84, 86, 87, 88,
174,176,179,181,184,186,189,191, 174,176,179,181,184,186,189,191,
194,197,199,202,205,208,211,214, 194,197,199,202,205,208,211,214,
217,220,223,226,229,232,236,239, 217,220,223,226,229,232,236,239,
242,246,249,252 };
242,246,249,252, 254,255 };


int WavegenFill(int fill_zeros); int WavegenFill(int fill_zeros);


int command; int command;
int ix; int ix;
int factor; int factor;
int pitch_value;


command = control & 0x1f; command = control & 0x1f;
if((control & 0x60) == 0x60) if((control & 0x60) == 0x60)
case EMBED_P: case EMBED_P:
case EMBED_T: case EMBED_T:
// adjust formants to give better results for a different voice pitch // adjust formants to give better results for a different voice pitch
factor = 256 + (25 * (embedded_value[EMBED_P] - 50))/50;
if((pitch_value = embedded_value[EMBED_P]) > MAX_PITCH_VALUE)
pitch_value = MAX_PITCH_VALUE;

factor = 256 + (25 * (pitch_value - 50))/50;
for(ix=0; ix<=5; ix++) for(ix=0; ix<=5; ix++)
{ {
wvoice->freq[ix] = (wvoice->freq2[ix] * factor)/256; wvoice->freq[ix] = (wvoice->freq2[ix] * factor)/256;
int x; int x;
int base; int base;
int range; int range;
int pitch_value;


#ifdef LOG_FRAMES #ifdef LOG_FRAMES
f_log=fopen("log-espeakedit","a"); f_log=fopen("log-espeakedit","a");
pitch2 = x; pitch2 = x;
} }


base = (wvoice->pitch_base * pitch_adjust_tab[embedded_value[EMBED_P]])/128;
if((pitch_value = embedded_value[EMBED_P]) > MAX_PITCH_VALUE)
pitch_value = MAX_PITCH_VALUE;
if(pitch_value < 0)
pitch_value = 0;

base = (wvoice->pitch_base * pitch_adjust_tab[pitch_value])/128;
range = (wvoice->pitch_range * embedded_value[EMBED_R])/50; range = (wvoice->pitch_range * embedded_value[EMBED_R])/50;


// compensate for change in pitch when the range is narrowed or widened // compensate for change in pitch when the range is narrowed or widened

+ 42
- 5
windows/make_espeak.iss View File

[Setup] [Setup]
AppName=eSpeak AppName=eSpeak
AppVerName=eSpeak version 1.26
AppVerName=eSpeak version 1.26.10
DefaultDirName={pf}\eSpeak DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeak OutputBaseFilename=setup_espeak
Compression=lzma Compression=lzma
SolidCompression=yes SolidCompression=yes
ShowLanguageDialog=auto
[InstallDelete] [InstallDelete]
Type: files; Name: "{app}\espeak.dll" Type: files; Name: "{app}\espeak.dll"
Root: HKLM; Subkey: "Software\Microsoft\Speech\PhoneConverters\Tokens\eSpeak"; Flags: deletekey uninsdeletekey Root: HKLM; Subkey: "Software\Microsoft\Speech\PhoneConverters\Tokens\eSpeak"; Flags: deletekey uninsdeletekey
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl"
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl"
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl"
[CustomMessages]
v1=Select which voices to install
v2=or press Enter to accept defaults
v3=Enter voice names, eg: (for Portuguese) pt, or with a variant, eg: pt+13
pt.v1=Seleccione as vozes que pretende instalar
pt.v2=ou precione enter para aceitar as predefinidas.
pt.v3=Introduza os nomes das vozes, ex: (Brazil) pt (ou Portugal) pt-pt, ou com outras características, ex: pt+13
[Code] [Code]
var var
$41: Result := 'sw'; $41: Result := 'sw';
$52: Result := 'cy'; $52: Result := 'cy';
end; end;
// is there a match on the full language code?
case language of
$816: Result := 'pt-pt';
$81a: Result := 'sr';
$c1a: Result := 'sr';
end;
end; end;
'ro': value := $418; 'ro': value := $418;
'ru': value := $419; 'ru': value := $419;
'sk': value := $41b; 'sk': value := $41b;
'sr': value := $81a;
'sv': value := $41d; 'sv': value := $41d;
'sw': value := $441; 'sw': value := $441;
'vi': value := $42a; 'vi': value := $42a;
begin begin
// Create the language selection page // Create the language selection page
lang := ActiveLanguage; lang := ActiveLanguage;
Page := CreateInputQueryPage(wpSelectDir,
'Select which voices to install', 'or press Enter to accept defaults',
'Enter voice names, eg: (for Portuguese) pt, or with a variant, eg: pt+13');
Page := CreateInputQueryPage(wpSelectDir,CustomMessage('v1'),CustomMessage('v2'),CustomMessage('v3'));
// Add items (False means it's not a password edit) // Add items (False means it's not a password edit)
Page.Add('', False); Page.Add('', False);
Page.Add('', False); Page.Add('', False);

+ 23
- 1
windows/make_espeakedit.iss View File

[Setup] [Setup]
AppName=eSpeakEdit AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.26
AppVerName=eSpeakEdit version 1.26.10
DefaultDirName={pf}\eSpeak DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit OutputBaseFilename=setup_espeakedit
Compression=lzma Compression=lzma
SolidCompression=yes SolidCompression=yes
DirExistsWarning=no DirExistsWarning=no
ShowLanguageDialog=auto
[Files] [Files]
Source: "espeakedit.exe"; DestDir: "{app}" Source: "espeakedit.exe"; DestDir: "{app}"
;Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme ;Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl"
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl"
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl"

Loading…
Cancel
Save