RusXMMS Project =============== Originally, the project was aimed to provide means to work with multiple encodings of the same language through adapting encoding of ID3 tags, M3U and PLS playlists (including file names) to local settings on-the-fly. Both the tag reading and writing back using any selected encoding was supported. Nowadays there are library available providing the same functionality for almost any program with just a few lines of code. The library is not limited to ID3 tags, it can be useful for any program working with small titles or file names in different languages and encodings. The patches for several music players, ID3 tag libraries and some other programs are available on the project page. The Abilities of LibRCC Library =============================== * Language Autodetection * On the fly translation between languages, using online-services! * Encoding Autodetection for most of European Languages1 * Support for encoding detection plugins (besides Enca and LibRCD) * Recoding/translation of multi-language playlists! * Cache to speed-up re-recoding. * Possibility to configure new languages and encodings. * Shared configuration file. For example mentioned TagLib and LibID3 patches do not have their own user interface, but will utilize the same recoding configuration as XMMS. * As well the separate program for configuration adjustment is available. * GTK/GTK2 UI Library: you can add properties page to your GTK application with 3 lines of code. * Menu localization opportunity The Available Patches ===================== * RusXMMS: Visualization and editing of the whole range of ID3 tags using any of eight byte or unicode encodings. Support for playlists with non-english filenames. The translation of foreign languages to english or locale one is supported as well. The embeded properties page. The patch makes XMMS the best player to work with ID3 titles. * TagLib: Visualization and editing of ID3 v.1 and v.2 titles. Any TagLib based application will correctly work with ID3 tags out of the box. The properties page can be added to application with several lines of code. Additionaly, after applying the patch, the 'tagwriter' program from the TagLib examples can be used to convert titles of all your MP3 files to unicode ID3 v.2 tags just using command: "tagwriter *.mp3". * LibID3: Visualization of ID3 v.1 and v.2 titles. Any LibID3 based application will correctly display (but not edit) ID3 tags out of the box. * Mpg123: Visualization of ID3 v.1 titles. * GFtp: Recoding file names between FTP servers using different encodings. * Unzip: Recoding file names from Windows created archives. Gratitudes ========== * Me ;) * Michael Shigorin - Ideas and great help in wiping bugs * Dmitry A. Koptev - Slackware packages * IPE, ForschungsZentrum, Karlsruhe * CRD, Yerevan Physics Institute * Georgian and Spanish winemakers :) Important Notes =============== 1. It have much more sense to report problems here, then just claiming nothing is working on miscellaneous forums and mailing lists. 2. If you want patches presented here to be included in the correspondent project trees, please, ask authors. The same thing should be concerned about inclusion of LibRCC and LibRCD in the official Gentoo portage tree. 3. Most of the patches will modify configure.in and Makefile.am files, so the full autoconfiguration should be performed. You should run "aclocal; automake; autoconf" prior to using configure script. 4. Output encoding normally must correspond to current "LC_CTYPE" locale. If you would set it to another value without really knowing what are you doing, it can raise problems. Preferences =========== * Current Language. The English, Russian, Ukrainian, Belarussian, Bulgarian, Czech, Estonian, Croatian, Hungarian, Lithuanian, Latvian, Polish, Slovak, Slovenian and Chinese are embeded in the library. To get other languages you should configure them in the "/etc/rcc.xml" or in user-defined configuration "~/.rcc/rcc.xml". By default the language will be determined using LC_CTYPE environmental variable. * Current encoding for supported encoding classes. For RusXMMS the following classes are defined: o ID3 Encoding o ID3 v.2 Encoding (uses ID3 by default) o PlayList Encoding (uses ID3 by default) o Encoding for Filenames in the Playlists (defaults to FS encoding) o FileSystem Encoding (uses locale encoding by default) o Output Encoding (uses locale encoding by default) The default encoding will be resolved using: o The unicode encoding selected for english language. o The encoding of the parrent class if any. o The unicode encoding defined by locale variable or any locale encoding in the case of locale language is used. o First available usable encoding. * Encoding autodetection engine. First available is used by default. * Mode for recoding cache: o Off: Do not use recoding cache o On: Use recoding cache to find out encoding and language o ReLearn: Fill recoding cache with detected values o Learn: Try to use recoding cache to find out encoding. If there are no cached encoding for current title try to detect it and store in the cache. * Autodetect File Name: If option is switched on the encoding of the file will be resolved using search over file system. * Autoengine Set Current Encoding: Encoding autodetection engine will automatically set detected encoding to be used by default. * Autodetect Language: Try to autodetect used language. Quite slow. * Translate Text: Translate text from detected language to the locale language. Very slow and requires internet connection. The different modes is available. In the full mode the string will be translated to the current locale language. If translation to locale language is failed, the string will be translated to english. With "Skip Related" and "Skip parrent" options the translation between related languages will be omited (The language is considered to be parrent language in the case then it is expected to have words from that language in the strings of child language. The english language is considered to be parrent language for any other.). With "Translate to English" option it is possible to translate all strings to english. * Since the translation is slow, it is possible to limit maximum time used to recode/translate string. In this case if translation in the specified amount of time is not finished, untranslated string will be returned. However, the string will be queued for translation and in the next access the translated and cached value will be returned. * Additionally, for RusXMMS only it is possible to specify font used by shade form of xmms playlist. Using Multi-Language Playlist ============================= There are two ways of using multi-language playlists. The first is to use Language autodetection: * The UTF-8 locale should be set. * The LibRCC should be compiled with aspell support. * The aspell dictionaries for all languages used should be installed. However this is quite slow, and errnous in the cases then mostly non-dictionary words are used. The second option, is to use recodings cache: * The UTF-8 locale should be set. * Select "Learn" mode for recoding caching policy in the preferences prior to loading new files. * Afterwards the titles for the loaded files will be recoded correctly whenever the recoding caching is enabled. Using Language Translation ========================== It is possible to translate titles to your languages using libtranslate. The LibRCC should be compiled with LibTranslate support (It will be quite good idea to use patched libtranslated with posibility to limit maximum amount of time spent for translation) and you should have internet connection. Since libtranslate utilizes online translation services it takes a lot of time to get translation. To solve this problem the translation queueing and caching is used. If translation is failed in considered amount of time error will be returned to caller and string will be queued for translation. The translated string will be stored in the DB4 cache and will be returned to caller on the following requests for translation.