[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [locale] ru_RU.koi8r



Leon Kanter wrote  me:

> > 
> > Будут у qt2, у SO5.2 - там же charset берется из имени.
> > Вроде ты же с этим сталкивался.
> 
> Как оказалось, не берется. Другие примеры есть? 

Hi!

Вот за qt2 я не уверен, как говорится по тексту:

Запомним эти локали:

static const char * const probably_koi8_rlocales[] = {
    "ru", "ru_SU", "ru_RU", "russian", 0 };


Далее все проверяется здесь (я сократил):  

QTextCodec* QTextCodec::codecForLocale()
...
    char * lang = qstrdup( getenv("LANG") );

    char * p = lang ? strchr( lang, '.' ) : 0;
// И так p + 1 - после точки, у нас "koi8r"
...


    if( p && *p == '.' ) {
	// if there is an encoding and we don't know it, we return 0
	// User knows what they are doing.  Codecs will believe them.
	localeMapper = codecForName( lang );
	if ( !localeMapper ) {
	    // Use or codec disagree.
	    localeMapper = codecForName( p+1 ); 
	}
    }
Я искал что либо похожее на "koi8r" для codecForName - не нашел,
похоже что localeMapper по прежнему нуль.
и так p+1 это "koi8r", lang - "ru_RU.koi8r"

Идем далее:
 
   if ( !localeMapper || !(p && *p == '.') ) {
	// if there is none, we default to 8859-1
	// We could perhaps default to 8859-15.
	if ( try_locale_list( iso8859_2locales, lang ) )
	    localeMapper = codecForName( "ISO 8859-2" );
	else if ( try_locale_list( iso8859_3locales, lang ) )
	    localeMapper = codecForName( "ISO 8859-3" );
	else if ( try_locale_list( iso8859_5locales, lang ) )
	    localeMapper = codecForName( "ISO 8859-5" );

...

А вот тут как раз засада - try_locale_list не найдет полный lang:  

	else if ( try_locale_list( probably_koi8_rlocales, lang ) )
	    localeMapper = ru_RU_hack( lang );

Его нет в probably_koi8_rlocales.

Так что может все же обойтись каноническим видом, 
и не ломать сложившуюся систему?


-- 

                      С наилучшими пожеланиями, Евгений Бырганов.
                      Best regards, Eugene Byrganov.

  mailto:E.B.Byrganov@inp.nsk.su
  work - http://www.inp.nsk.su/