1 /*****************************************************************************
2 * iso_lang.c: function to decode language code (in dvd or a52 for instance).
3 *****************************************************************************
4 * Copyright (C) 1998-2004 the VideoLAN team
7 * Author: Stéphane Borel <stef@via.ecp.fr>
8 * Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
25 /*****************************************************************************
27 *****************************************************************************/
34 /*****************************************************************************
36 *****************************************************************************/
37 #include "iso-639_def.h"
39 static const iso639_lang_t unknown_language =
40 { "Unknown", "Unknown", "??", "???", "???" };
42 /*****************************************************************************
43 * DecodeLanguage: gives the long language name from the two-letter
45 *****************************************************************************/
46 const char * DecodeLanguage( uint16_t i_code )
48 const iso639_lang_t * p_lang;
51 psz_code[0] = i_code >> 8;
52 psz_code[1] = i_code & 0xff;
55 for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
57 if( !memcmp( p_lang->psz_iso639_1, psz_code, 2 ) )
60 if( *p_lang->psz_native_name )
62 return p_lang->psz_native_name;
66 return _( p_lang->psz_eng_name );
70 return _( "Unknown" );
73 const iso639_lang_t * GetLang_1( const char * psz_code )
75 const iso639_lang_t *p_lang;
77 for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
78 if( !strncmp( p_lang->psz_iso639_1, psz_code, 2 ) )
81 return &unknown_language;
84 const iso639_lang_t * GetLang_2T( const char * psz_code )
86 const iso639_lang_t *p_lang;
88 for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
89 if( !strncmp( p_lang->psz_iso639_2T, psz_code, 3 ) )
92 return &unknown_language;
95 const iso639_lang_t * GetLang_2B( const char * psz_code )
97 const iso639_lang_t *p_lang;
99 for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
100 if( !strncmp( p_lang->psz_iso639_2B, psz_code, 3 ) )
103 return &unknown_language;