Welcome! ======== This is the OS/2 port of GNU gettext internationalization library. Compatibility ============= The library has been compiled with -Zmt flag, but it doesn't matter as soon as you use the EMX single-threaded runtime fix (emx-strt-fix-0.0.2.zip). The library is fully compatible with the previous port of gettext library (0.10.35) which is largely used especialy by XFree86/2 programs. All the old programs that I have with gettext support run fine with the new version of the DLL. Installation ============ If you set the GNULOCALEDIR environment variable to point to your x:/xxx/share/locale directory, it will override any other setting. That is, unpack the binary distribution over /emx, set GNULOCALEDIR=x:/emx/share/locale (where x: is the drive letter of your EMX installation) and that's all. If you use the UNIXROOT environment variable, the default catalogue search paths will be like on Unices, e.g. $(UNIXROOT)/usr/lib and $(UNIXROOT)/usr/share/locale. GNULOCALEDIR always overrides this. Now if you haven't did it earlier, set the language identifier that you use. This is done by adding a "SET LANG=xxx" environment setting to your CONFIG.SYS, where xxx is the identifier of your language (example: en_UK for English in UK, ru_RU for Russian in Russia. Also you can use names like "russian", "italian" and so on - see the share/locale/locale.alias file). This port of gettext supports character set conversions. This means that if your .mo files were written using new gettext guidelines, e.g. they contain a message like this: msgid "" msgstr "Content-Type: text/plain; charset=koi8-r\n" the messages will be properly converted to your active codepage using OS/2 Unicode API. For example, russian message catalog gettext.mo is in the KOI8-R (codepage 878) encoding while OS/2 uses codepage 866. Now when you run any of these tools it detects that the active OS/2 codepage is 866 and performs the translation from CP878 -> CP866 for every message. If you want to override the character set used to output messages (for example in XFree86 for Russian the KOI8-R encoding (codepage 878) is used) you can set the output character set by adding a postfix to the LANG environment variable, this way: set LANG=ru_RU.KOI8-R or (equivalent): set LANG=ru_RU.CP878 or (same effect): set LANG=ru_RU.IBM-878 If the output character set is ommited from the LANG variable, the default codepage is ALWAYS taken from the operating system (e.g. the codepage setting from locale.alias is always ignored, so "russian" stays just for "ru_RU" and not for "ru_RU.ISO-8859-5"); you may want to set it just if you want to override the active OS/2 codepage. XFree86 setup ============= If you use XFree86 and the OS/2 default character set is different from the XFree86 default character set (e.g. for Russain CP866 vs KOI8-R), you can add the following (or similar) statement to your startx.cmd file (after the commands dealing with HOME and X11SHELL): call VALUE 'LANG', 'ru_RU.KOI8-R', env Otherwise you can get incorrect (wrong codepage) output from programs that previously worked (e.g. GIMP 1.22). This is because earlier versions of gettext didn't support character set translations. Implementation remarks ====================== The codepage conversion code uses OS/2 Unicode API, thus it falls under the limits that OS/2 Unicode API has. For example, OS/2 Unicode API does not support the BIG5 East Asian character set nor ISO-8859-X where X > 9 (at least with Warp4 with fixpack 14 that I have). If someone knows the OS/2 API identifiers for BIG5 or ISO8859-10,... encodings, please tell me! Since gettext 0.11 iconv emulation layer supports correctly UTF-8. Also I have added theoretical support for the following East Asian encodings: EUC-JP, EUC-KR, EUC-TW, EUC-CN. However, these encodings are (I believe) supported only on East Asian editions of OS/2. The code pages for them are listed in the \language\codepage\ucstbl.lst file but the codepage files themselves are missing; I believe they are ommited from European OS/2's due to their large size. Also I have added "support" for the BIG5 codeset as an alias for IBM-950 codepage. However, I'm not very sure about this; in any case OS/2 does not support (as far as I know) anything closer to BIG5. Additional API ============== This package provides additionaly the iconv() API that can be used by developers for doing more feature-full Unix ports. The iconv() API is used to convert text between various codepages. The intl.h header file contains the prototypes and definitions needed for iconv(); if you configure software with autoconf it possibly will find intl.h and set up the software accordingly. All these functions are exported from INTL.DLL. The iconv.a import library imports all the iconv* functions from INTL.DLL. So, like on Unix, now you can #include , then link with -liconv and you will get a fully functional iconv implementation. Rebuilding the library ====================== The library is quite easy to rebuild. Since the OS/2 support is provided now out-of-the-box in gettext, you just have to download and unpack the source archive. Now there are two ways to rebuild the gettext library: 1. If you're a masochist you can go the clumsy configure/make Unix way. This is not recommended however as I found no way to tell libtool to generate a slightly non-standard DLL which will be backward compatible with gettext 0.10.35. The compatibility is achieved by prepending backward.def to the export definition file generated with emximp or somehow else. Thus it is highly recommended you build using the second way, if it is possible. 2. Go to os2 and just run `make'. If you have all the required tools, it should painlessly compile. Finally, if you want a binary distribution archive, do `make distr'. The weak side of building this way is that makefile is somewhat fragile. This means that if the makefile is left unmodified and a new version of gettext is rolled out, it *may* not work. But every possible attempt was made to ensure that the makefile takes most important build parameters from their autoconf counterparts. WARNING: Due to bugs in GNU Make 3.76.1 (at least in its OS/2 port) you can get sometimes (depending on make version and makefile modification :) funny messages like these: zip warning: name not matched: emx/src/gettext-0.10.40/support/os2/iconv.h or even: *** No rule to make target `out/release/intl.a', needed by `all'. Stop. Such messages are a bad joke. Ignore it, and re-run make. This is a long-standing bug in GNU make, alas. If you want a debug version of library, you can do `make DEBUG=1'. If you don't have the LxLite tool installed, do `make LXLITE=0' NB: For best results, it is highly recommended that you use at least emxbind.exe and ld.exe from gcc 3.0.2 or later, since they contain a number of fixes that will help you generate a more optimal DLL. Contributors ============ Hung-Chi Chu the original port of gettext (0.10.35) Jun SAWATAISHI some more work on it and submitted the patches to GNU team, although they were not completely integrated. Andrew Zabolotny Succeeded to remove almost all OS/2-specific #ifdef's from mainstream source code, wrote the dedicated OS/2 makefile, wrote the iconv wrapper around OS/2 Unicode API, added support for locale translations.