| ## Language Code | ## Language Code | ||||
| Generally, the language's international | |||||
| [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) code is used to identify | |||||
| the language. It is used in the filenames which contain the language's | |||||
| data. In the examples below the code **"fr"** is used as an example. | |||||
| Replace this with the code of your language. | |||||
| If the language does not have a 2-letter ISO\_639-1 code, then use the | |||||
| 3-letter ISO\_639-3 code. Language codes may differ from country codes. | |||||
| It is possible to have different variants of a language for different | |||||
| dialects. For example the sound of some phonemes are changed, or some of | |||||
| the pronunciation rules differ. | |||||
| The language is identified using the | |||||
| [BCP 47](https://en.wikipedia.org/wiki/IETF_language_tag) language tag. | |||||
| When this is not enough to identify an accent, the | |||||
| [bcp47-data](https://github.com/rhdunn/bcp47-data) accents file describes | |||||
| the private use tags used by eSpeak NG. For example: | |||||
| * `en` -- English | |||||
| * `en-GB-scotland` -- English with a Scottish accent | |||||
| * `en-GB-x-rp` -- English with a Received Pronunciation accent | |||||
| * `es-419` -- Spanish with a Latin American accent | |||||
| * `fr-CA` -- French with a Canadian accent | |||||
| ## Language Files | ## Language Files | ||||
| It selects the default behaviour and characteristics for the language, | It selects the default behaviour and characteristics for the language, | ||||
| and sets default values for "phonemes", "dictionary" and other | and sets default values for "phonemes", "dictionary" and other | ||||
| attributes. The \<language code\> should be a two-letter ISO 639-1 | |||||
| language code. One or more language variant codes may be appended, | |||||
| separated by hyphens. (eg. en-uk-north). | |||||
| attributes. | |||||
| The \<language code\> is a | |||||
| [BCP 47](https://en.wikipedia.org/wiki/IETF_language_tag) language tag. | |||||
| When this is not enough to identify an accent, the | |||||
| [bcp47-data](https://github.com/rhdunn/bcp47-data) accents file describes | |||||
| the private use tags used by eSpeak NG. For example: | |||||
| * `en` -- English | |||||
| * `en-GB-scotland` -- English with a Scottish accent | |||||
| * `en-GB-x-rp` -- English with a Received Pronunciation accent | |||||
| * `es-419` -- Spanish with a Latin American accent | |||||
| * `fr-CA` -- French with a Canadian accent | |||||
| The optional \<priority\> value gives the preference of this voice | The optional \<priority\> value gives the preference of this voice | ||||
| compared with others for the specified language. A low value indicates a | compared with others for the specified language. A low value indicates a |
| name persian-pinglish | name persian-pinglish | ||||
| // Sometimes, Farsi speakers write Farsi words using English characters, particularly in Chat and SMS (texte messages).), called Pinglish | // Sometimes, Farsi speakers write Farsi words using English characters, particularly in Chat and SMS (texte messages).), called Pinglish | ||||
| language fa-pin | |||||
| language fa-Latn | |||||
| dictrules 1 | dictrules 1 | ||||
| phonemes fa | phonemes fa | ||||
| name armenian-west | name armenian-west | ||||
| language hy-west | |||||
| language hy-arevmda | |||||
| language hy 8 | language hy 8 | ||||
| gender male | gender male | ||||
| name vietnam_hue | name vietnam_hue | ||||
| language vi-hue | |||||
| language vi-vn-x-central | |||||
| phonemes vi-hue | phonemes vi-hue | ||||
| dictrules 1 | dictrules 1 | ||||
| gender male | gender male |
| name vietnam_sgn | name vietnam_sgn | ||||
| language vi-sgn | |||||
| language vi-vn-x-south | |||||
| phonemes vi-sgn | phonemes vi-sgn | ||||
| dictrules 2 | dictrules 2 | ||||
| gender male | gender male |
| name english | name english | ||||
| language en-gb 2 | language en-gb 2 | ||||
| language en-uk 2 | |||||
| language en 2 | language en 2 | ||||
| gender male | gender male | ||||
| // moving towards US English | // moving towards US English | ||||
| name english-us | name english-us | ||||
| language en-us 2 | language en-us 2 | ||||
| language en-r | |||||
| language en 3 | language en 3 | ||||
| gender male | gender male | ||||
| name spanish-latin-am | name spanish-latin-am | ||||
| language es-la | |||||
| language es-419 | |||||
| language es-mx 6 | language es-mx 6 | ||||
| language es 6 | language es 6 | ||||
| gender male | gender male |
| name english-mb-en1 | name english-mb-en1 | ||||
| language en-uk 3 | |||||
| language en-gb 3 | |||||
| language en 2 | language en 2 | ||||
| gender male | gender male | ||||
| name en-westindies | name en-westindies | ||||
| language en-wi | |||||
| language en-uk 4 | |||||
| language en-029 | |||||
| language en 10 | language en 10 | ||||
| gender male | gender male | ||||
| name en-scottish | name en-scottish | ||||
| language en-sc | |||||
| language en-gb-scotland | |||||
| language en 4 | language en 4 | ||||
| gender male | gender male | ||||
| name english-north | name english-north | ||||
| language en-uk-north | |||||
| language en-uk 3 | |||||
| language en-gb-x-gbclan | |||||
| language en-gb 3 | |||||
| language en 5 | language en 5 | ||||
| gender male | gender male | ||||
| name english_wmids | name english_wmids | ||||
| language en-uk-wmids | |||||
| language en-uk 9 | |||||
| language en-gb-x-gbcwmd | |||||
| language en-gb 9 | |||||
| language en 9 | language en 9 | ||||
| gender male | gender male | ||||
| name english_rp | name english_rp | ||||
| language en-uk-rp | |||||
| language en-uk 4 | |||||
| language en-gb-x-rp | |||||
| language en-gb 4 | |||||
| language en 5 | language en 5 | ||||
| gender male | gender male | ||||
| } else | } else | ||||
| voices = espeak_ListVoices(NULL); | voices = espeak_ListVoices(NULL); | ||||
| fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||||
| fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||||
| for (ix = 0; (v = voices[ix]) != NULL; ix++) { | for (ix = 0; (v = voices[ix]) != NULL; ix++) { | ||||
| count = 0; | count = 0; | ||||
| lang_name = p+1; | lang_name = p+1; | ||||
| if (v->age == 0) | if (v->age == 0) | ||||
| strcpy(age_buf, " "); | |||||
| strcpy(age_buf, " --"); | |||||
| else | else | ||||
| sprintf(age_buf, "%3d", v->age); | sprintf(age_buf, "%3d", v->age); | ||||
| if ((buf[j] = c) == 0) | if ((buf[j] = c) == 0) | ||||
| break; | break; | ||||
| } | } | ||||
| fprintf(f_out, "%2d %-12s%s%c %-20s %-13s ", | |||||
| fprintf(f_out, "%2d %-15s%s/%c %-18s %-20s ", | |||||
| p[0], lang_name, age_buf, genders[v->gender], buf, v->identifier); | p[0], lang_name, age_buf, genders[v->gender], buf, v->identifier); | ||||
| } else | } else | ||||
| fprintf(f_out, "(%s %d)", lang_name, p[0]); | fprintf(f_out, "(%s %d)", lang_name, p[0]); |
| } else | } else | ||||
| voices = espeak_ListVoices(NULL); | voices = espeak_ListVoices(NULL); | ||||
| fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||||
| fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||||
| for (ix = 0; (v = voices[ix]) != NULL; ix++) { | for (ix = 0; (v = voices[ix]) != NULL; ix++) { | ||||
| count = 0; | count = 0; | ||||
| lang_name = p+1; | lang_name = p+1; | ||||
| if (v->age == 0) | if (v->age == 0) | ||||
| strcpy(age_buf, " "); | |||||
| strcpy(age_buf, " --"); | |||||
| else | else | ||||
| sprintf(age_buf, "%3d", v->age); | sprintf(age_buf, "%3d", v->age); | ||||
| if ((buf[j] = c) == 0) | if ((buf[j] = c) == 0) | ||||
| break; | break; | ||||
| } | } | ||||
| fprintf(f_out, "%2d %-12s%s%c %-20s %-13s ", | |||||
| fprintf(f_out, "%2d %-15s%s/%c %-18s %-20s ", | |||||
| p[0], lang_name, age_buf, genders[v->gender], buf, v->identifier); | p[0], lang_name, age_buf, genders[v->gender], buf, v->identifier); | ||||
| } else | } else | ||||
| fprintf(f_out, "(%s %d)", lang_name, p[0]); | fprintf(f_out, "(%s %d)", lang_name, p[0]); |