X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_repository.c;h=1d93d559a6a4234aaffa85af40b7365fb213d952;hb=e8cb811d00abe2b31e1e6591da9e3c13799228eb;hp=69c89eb45cbf5ebaa03c763c18ec9bee8cc62ba8;hpb=a134539e69be3758025cb97d13e1f282af97274a;p=melted diff --git a/src/framework/mlt_repository.c b/src/framework/mlt_repository.c index 69c89eb..1d93d55 100644 --- a/src/framework/mlt_repository.c +++ b/src/framework/mlt_repository.c @@ -21,6 +21,7 @@ #include "mlt_repository.h" #include "mlt_properties.h" +#include "mlt_tokeniser.h" #include #include @@ -94,6 +95,8 @@ mlt_repository mlt_repository_init( const char *directory ) fprintf( stderr, "%s, %s: failed to dlopen %s\n", __FILE__, __FUNCTION__, object_name ); } } + + mlt_properties_close( dir ); return this; } @@ -264,3 +267,66 @@ mlt_properties mlt_repository_metadata( mlt_repository self, mlt_service_type ty } return metadata; } + +static char *getenv_locale() +{ + char *s = getenv( "LANGUAGE" ); + if ( s && s[0] ) + return s; + s = getenv( "LC_ALL" ); + if ( s && s[0] ) + return s; + s = getenv( "LC_MESSAGES" ); + if ( s && s[0] ) + return s; + s = getenv( "LANG" ); + if ( s && s[0] ) + return s; + return NULL; +} + +/** Return a list of user-preferred language codes taken from environment variables. +*/ + +mlt_properties mlt_repository_languages( mlt_repository self ) +{ + mlt_properties languages = mlt_properties_get_data( &self->parent, "languages", NULL ); + if ( languages ) + return languages; + + languages = mlt_properties_new(); + char *locale = getenv_locale(); + if ( locale ) + { + locale = strdup( locale ); + mlt_tokeniser tokeniser = mlt_tokeniser_init(); + int count = mlt_tokeniser_parse_new( tokeniser, locale, ":" ); + if ( count ) + { + int i; + for ( i = 0; i < count; i++ ) + { + char *locale = mlt_tokeniser_get_string( tokeniser, i ); + if ( strcmp( locale, "C" ) == 0 || strcmp( locale, "POSIX" ) == 0 ) + locale = "en"; + else if ( strlen( locale ) > 2 ) + locale[2] = 0; + char string[21]; + snprintf( string, sizeof(string), "%d", i ); + mlt_properties_set( languages, string, locale ); + } + } + else + { + mlt_properties_set( languages, "0", "en" ); + } + free( locale ); + mlt_tokeniser_close( tokeniser ); + } + else + { + mlt_properties_set( languages, "0", "en" ); + } + mlt_properties_set_data( &self->parent, "languages", languages, 0, ( mlt_destructor )mlt_properties_close, NULL ); + return languages; +}