From 798c42620d0e5ca75150884270e7539d378649f3 Mon Sep 17 00:00:00 2001 From: ddennedy Date: Thu, 6 Mar 2008 07:19:23 +0000 Subject: [PATCH] mlt_repository.[hc]: add mlt_repository_languages helper function for localizing metadata git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1100 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/framework/mlt_repository.c | 62 ++++++++++++++++++++++++++++++++++++++++ src/framework/mlt_repository.h | 1 + 2 files changed, 63 insertions(+), 0 deletions(-) diff --git a/src/framework/mlt_repository.c b/src/framework/mlt_repository.c index 69c89eb..eab2777 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 @@ -264,3 +265,64 @@ 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; + + const char *locale = getenv_locale(); + languages = mlt_properties_new(); + if ( 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" ); + } + 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; +} diff --git a/src/framework/mlt_repository.h b/src/framework/mlt_repository.h index e7b0c67..1487ec9 100644 --- a/src/framework/mlt_repository.h +++ b/src/framework/mlt_repository.h @@ -62,6 +62,7 @@ extern mlt_properties mlt_repository_producers( mlt_repository self ); extern mlt_properties mlt_repository_transitions( mlt_repository self ); extern void mlt_repository_register_metadata( mlt_repository self, mlt_service_type type, const char *service, mlt_metadata_callback, void *callback_data ); extern mlt_properties mlt_repository_metadata( mlt_repository self, mlt_service_type type, const char *service ); +extern mlt_properties mlt_repository_languages( mlt_repository self ); #endif -- 1.7.4.4