forked from enlightenment/enlightenment
parent
fb3d456244
commit
86e8a43e71
|
@ -21,10 +21,26 @@ e_intl_init(void)
|
||||||
{
|
{
|
||||||
if (_e_intl_languages) return 1;
|
if (_e_intl_languages) return 1;
|
||||||
|
|
||||||
/* supporeted languages - as we get translations - add them here */
|
/* supporeted languages - as we get translations - add them here
|
||||||
|
*
|
||||||
|
* if you add a language:
|
||||||
|
*
|
||||||
|
* NOTE: add a language NAME for this in e_intl_language_name_get() if
|
||||||
|
* there isn't one yet (use the english name - then we will add
|
||||||
|
* translations of the language names to the .po file)
|
||||||
|
* NOTE: add a translation logic list to take all possible ways to address
|
||||||
|
* a language locale and convert it to a simplified one that is in
|
||||||
|
* the list here below. languages can often have multiple ways of
|
||||||
|
* being addressed (same language spoken in multiple countries or
|
||||||
|
* many variants of the language). this translation allows all the
|
||||||
|
* variants to be used and mapped to a simple "single" name for that
|
||||||
|
* language. if the differences in variants are large (eg simplified
|
||||||
|
* vs. traditional chinese) we may refer to them as separate languages
|
||||||
|
* entirely.
|
||||||
|
*/
|
||||||
ADD_LANG("C");
|
ADD_LANG("C");
|
||||||
ADD_LANG("en");
|
ADD_LANG("en");
|
||||||
ADD_LANG("jp");
|
ADD_LANG("ja");
|
||||||
ADD_LANG("fr");
|
ADD_LANG("fr");
|
||||||
|
|
||||||
/* FIXME: NULL == use LANG. make this read a config value if it exists */
|
/* FIXME: NULL == use LANG. make this read a config value if it exists */
|
||||||
|
@ -70,6 +86,12 @@ const char *
|
||||||
e_intl_language_name_get(const char *lang)
|
e_intl_language_name_get(const char *lang)
|
||||||
{
|
{
|
||||||
if (!lang) return "None";
|
if (!lang) return "None";
|
||||||
|
/* this is a list of DISTINCT languages. some languages have variants that
|
||||||
|
* are different enough to justify being listed separately as distinct
|
||||||
|
* languages here. this is intended for use in a gui that lets you select
|
||||||
|
* a language, with e being able to give a name for the given language
|
||||||
|
* encoding (once simplfied)
|
||||||
|
*/
|
||||||
/* FIXME: add as many as we can to this */
|
/* FIXME: add as many as we can to this */
|
||||||
IFL("") "None";
|
IFL("") "None";
|
||||||
IFL("C") "None";
|
IFL("C") "None";
|
||||||
|
@ -92,7 +114,7 @@ e_intl_language_name_get(const char *lang)
|
||||||
IFL("hu") "Hungarian";
|
IFL("hu") "Hungarian";
|
||||||
IFL("id") "Indonesian";
|
IFL("id") "Indonesian";
|
||||||
IFL("it") "Italian";
|
IFL("it") "Italian";
|
||||||
IFL("jp") "Japanese";
|
IFL("ja") "Japanese";
|
||||||
IFL("kr") "Korean";
|
IFL("kr") "Korean";
|
||||||
IFL("lt") "Lithuanian";
|
IFL("lt") "Lithuanian";
|
||||||
IFL("lv") "Latvian";
|
IFL("lv") "Latvian";
|
||||||
|
@ -122,22 +144,37 @@ e_intl_language_name_get(const char *lang)
|
||||||
const char *
|
const char *
|
||||||
e_intl_language_simple_get(const char *lang)
|
e_intl_language_simple_get(const char *lang)
|
||||||
{
|
{
|
||||||
char buf[4096], *p;
|
static char buf[128];
|
||||||
|
char *p;
|
||||||
|
|
||||||
if (!lang) return "C";
|
if (!lang) return "C";
|
||||||
|
/* strip off the charset stuff after any "." eg: "en_US.UTF-8" -> "en_US" */
|
||||||
strncpy(buf, lang, sizeof(buf) - 1);
|
strncpy(buf, lang, sizeof(buf) - 1);
|
||||||
p = strchr(buf, '.');
|
p = strchr(buf, '.');
|
||||||
if (p) *p = 0;
|
if (p) *p = 0;
|
||||||
/* do we want to split this inot the different forms of english?
|
/* do we want to split this inot the different forms of english?
|
||||||
* ie american vs british? or australian? etc.
|
* ie american vs british? or australian? etc.
|
||||||
*/
|
*/
|
||||||
if (ISL("en") || ISL("en_US") || ISL("en_GB") || ISL("en_CA") ||
|
/* for known specific mappings - do them first here */
|
||||||
ISL("en_AU") || ISL("en_NZ") || ISL("en_RN"))
|
if (ISL("en") || ISL("en_US") || ISL("en_GB") || ISL("en_GB@euro") ||
|
||||||
|
ISL("en_CA") || ISL("en_AU") || ISL("en_NZ") || ISL("en_RN"))
|
||||||
return "en";
|
return "en";
|
||||||
if (ISL("ja") || ISL("ja_JP") || ISL("JP"))
|
if (ISL("ja") || ISL("ja_JP") || ISL("JP"))
|
||||||
return "ja";
|
return "ja";
|
||||||
/* FIXME: add all sorts of fuzzy matching here */
|
if (ISL("fr") || ISL("fr_FR") || ISL("FR") || ISL("fr_FR@euro"))
|
||||||
return "C";
|
return "fr";
|
||||||
|
/* this is the default fallback - we have no special cases for this lang
|
||||||
|
* so just strip off anything after and including the _ for country region
|
||||||
|
* and just return the language encoding
|
||||||
|
*/
|
||||||
|
/* strip off anything after a "_" eg: "en_US" -> "en" */
|
||||||
|
p = strchr(buf, '_');
|
||||||
|
if (p) *p = 0;
|
||||||
|
/* we can safely retunr buf because its a static - BUT its contents will
|
||||||
|
* change if we call e_intl_language_simple_get() again - so its only
|
||||||
|
* intended for immediate use and de-reference, not for storage
|
||||||
|
*/
|
||||||
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Evas_List *
|
const Evas_List *
|
||||||
|
|
Loading…
Reference in New Issue