Закорючки в mplayer
Подскажите почему в mplayer вместо русского языка иероглифы ( http://gallery.saransk.ru/displayimage.php?album=lastup&cat=0&pos=0 )
Локаль настроена согласно инструкции с вики в utf-8 , mplayer собирался с поддержкой юникода с использованием соответствующего ебилда r1.
Такие же символы встречаются иногда в файлах внутри архива, и их неполучается извлечь.
В консоли пишет:
bash-2.05b$ gmplayer
MPlayer 1.0pre7try2-3.3.5 (C) 2000-2005 MPlayer Team
CPU: Intel Pentium 4/Xeon/Celeron Foster (Family: 8, Stepping: 9)
Detected cache-line size is 64 bytes
MMX supported but disabled
MMX2 supported but disabled
SSE supported but disabled
SSE2 supported but disabled
CPUflags: MMX: 0 MMX2: 0 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0
Скомпилировано для x86 CPU со следующими расширениями:
vo: X11 running at 1280x1024 with depth 24 and 32 bpp (":0.0" => local display)
85 аудио & 196 видео кодеков
Gdk-WARNING **: locale not supported by Xlib, locale set to C
И введя mplayer /name/file тоже все по русски
- Для комментирования войдите или зарегистрируйтесь
Re: Закорючки в mplayer
Значит задан неверный параметр в LANG. Попробуйте изменить значение на ru_RU.UTF-8.
Думаю можно
Думаю можно попробовать указать ru_RU.ISO8859-5
а как его
а как его собрать с кодировкой отличной от KOI-8 - потому что он русский в UTF-8 локали не понимает, ну или хотя-бы с английскими коментариями
в /etc/env.d/02locale
в /etc/env.d/02locale прописано LANG=ru_RU.UTF-8 , пробовал переименовать /usr/lib/locale/ru_RU.utf8 на /usr/lib/locale/ru_RU.UTF8 тоже не помагает
Скачай в
Скачай в оверлей этот ебилд: http://bugs.gentoo.org/attachment.cgi?id=81278.
Добавь флаг utf8 и вуаля, все должно работать.
_________________
Прежде чем задать вопрос, подумай, а не додумались до него раньше?
With Love from Siberia!
Я накатил такой патчик
#cd /usr/portage/media-video/mplayer
#cat ./files/mplayer.i18n.diff
diff -C 3 -H -d -r -N -- mplayer/mplayer-1.0.20060217/Gui/mplayer/widgets.c mplayer-1.0.20060217/Gui/mplayer/widgets.c
*** mplayer/mplayer-1.0.20060217/Gui/mplayer/widgets.c Mon Jan 2 03:53:35 2006
--- mplayer-1.0.20060217/Gui/mplayer/widgets.c Thu Feb 23 22:00:31 2006
***************
*** 61,67 ****
void gtkInit( void )
{
mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[widget] init GTK ...\n" );
- gtk_set_locale();
gtk_init( 0,NULL );
// gdk_set_use_xshm( TRUE );
--- 61,66 ----
diff -C 3 -H -d -r -N -- mplayer/mplayer-1.0.20060217/cfg-common.h mplayer-1.0.20060217/cfg-common.h
*** mplayer/mplayer-1.0.20060217/cfg-common.h Fri Feb 17 16:46:07 2006
--- mplayer-1.0.20060217/cfg-common.h Thu Feb 23 21:59:26 2006
***************
*** 6,11 ****
--- 6,14 ----
{"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL, 0, -10, NULL},
{"v", cfg_inc_verbose, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOSAVE, 0, 0, NULL},
{"msglevel", msgl_config, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
+ #ifdef USE_ICONV
+ {"msgcharset", &mp_msg_charset, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
+ #endif
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL},
#ifdef WIN32
{"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
***************
*** 298,303 ****
--- 301,307 ----
extern int quiet;
extern int verbose;
+ extern char *mp_msg_charset;
// codec/filter opts: (defined at libmpcodecs/vd.c)
extern float screen_size_xy;
diff -C 3 -H -d -r -N -- mplayer/mplayer-1.0.20060217/configure mplayer-1.0.20060217/configure
*** mplayer/mplayer-1.0.20060217/configure Fri Feb 17 16:46:08 2006
--- mplayer-1.0.20060217/configure Thu Feb 23 21:53:05 2006
***************
*** 6957,6962 ****
--- 6957,6977 ----
fi
# --------------- GUI specific tests end -------------------
+ if test "$_charset" = "noconv" ; then
+ _charset=""
+ elif test -z "$_charset" ; then
+ if test "$_gtk1" = yes ; then
+ _charset=`cat ${_mp_help}.charset`
+ else
+ _charset=utf8
+ fi
+ fi
+
+ if test "$_charset" ; then
+ _def_charset="#define MSG_CHARSET \"$_charset\""
+ else
+ _def_charset="#undef MSG_CHARSET"
+ fi
#############################################################################
***************
*** 7404,7409 ****
--- 7419,7427 ----
/* use GNU internationalization */
$_def_i18n
+ /* name of messages charset */
+ $_def_charset
+
/* Runtime CPU detection */
$_def_runtime_cpudetection
diff -C 3 -H -d -r -N -- mplayer/mplayer-1.0.20060217/mp_msg.c mplayer-1.0.20060217/mp_msg.c
*** mplayer/mplayer-1.0.20060217/mp_msg.c Fri Feb 17 16:46:08 2006
--- mplayer-1.0.20060217/mp_msg.c Thu Feb 23 21:57:00 2006
***************
*** 6,11 ****
--- 6,18 ----
#include
#include "config.h"
+ #ifdef USE_LANGINFO
+ #include
+ #include
+ #endif
+ #ifdef USE_ICONV
+ #include
+ #endif
#if defined(FOR_MENCODER) || defined(CODECS2HTML)
#undef HAVE_NEW_GUI
***************
*** 23,28 ****
--- 30,40 ----
int mp_msg_levels[MSGT_MAX]; // verbose level of this module. inited to 2
int mp_msg_level_all = MSGL_STATUS;
int verbose = 0;
+ #ifdef USE_ICONV
+ char *mp_msg_charset = NULL;
+ static char *old_charset = NULL;
+ static iconv_t msgiconv;
+ #endif
void mp_msg_init(void){
+ #ifdef USE_ICONV
int i;
***************
*** 43,48 ****
--- 55,70 ----
#endif
#endif
for(i=0;i
+ mp_msg_charset = getenv("MPLAYER_CHARSET");
+ #ifdef USE_LANGINFO
+ if (!mp_msg_charset) {
+ setlocale(LC_CTYPE, "");
+ mp_msg_charset = nl_langinfo(CODESET);
+ setlocale(LC_CTYPE, "C");
+ }
+ #endif
+ #endif
}
int mp_msg_test(int mod, int lev)
***************
*** 65,70 ****
--- 87,117 ----
if(use_gui)
guiMessageBox(lev, tmp);
#endif
+ #if defined(USE_ICONV) && defined(MSG_CHARSET)
+ if (mp_msg_charset && strcasecmp(mp_msg_charset, "noconv")) {
+ char tmp2[MSGSIZE_MAX];
+ size_t inlen = strlen(tmp), outlen = MSGSIZE_MAX;
+ char *in = tmp, *out = tmp2;
+ if (!old_charset || strcmp(old_charset, mp_msg_charset)) {
+ if (old_charset) {
+ free(old_charset);
+ iconv_close(msgiconv);
+ }
+ msgiconv = iconv_open(mp_msg_charset, MSG_CHARSET);
+ old_charset = strdup(mp_msg_charset);
+ }
+ memset(tmp2, 0, MSGSIZE_MAX);
+ while (iconv(msgiconv, &in, &inlen, &out, &outlen) == -1) {
+ if (!inlen || !outlen)
+ break;
+ *out++ = *in++;
+ outlen--; inlen--;
+ }
+ strncpy(tmp, tmp2, MSGSIZE_MAX);
+ tmp[MSGSIZE_MAX-1] = 0;
+ tmp[MSGSIZE_MAX-2] = '\n';
+ }
+ #endif
#ifdef MSG_USE_COLORS
/* that's only a silly color test */
Кинул его в директорию mplayer/files
Добавил в конец секции src_unpack строчку
epatch ${FILESDIR}/mplayer.i18n.diff
потом
# ebuild ./mplayer-1.0.20060302.ebuild digest manifest
и пересобрал. Всё заработало
Ну-ка, а теперь
Ну-ка, а теперь по-русски, что этот патч делает?
_________________
Прежде чем задать вопрос, подумай, а не додумались до него раньше?
With Love from Siberia!