# set the include path found by configure
-INCLUDES = -I$(top_srcdir)/src $(all_includes) @LIBGETTEXT_CFLAGS@ \
+INCLUDES = -I$(top_srcdir)/src $(all_includes) \
@LIBICONV_CFLAGS@ @BOOST_CPPFLAGS@
METASOURCES = AUTO
AC_SUBST(LIBXMLPP_CFLAGS)
AC_SUBST(LIBXMLPP_LIBS)
-PKG_CHECK_MODULES(LIBGETTEXT, libgettext >= 0.0.0)
-AC_SUBST(LIBGETTEXT_CFLAGS)
-AC_SUBST(LIBGETTEXT_LIBS)
-
PKG_CHECK_MODULES(LIBICONV, libiconv >= 0.0.0)
AC_SUBST(LIBICONV_CFLAGS)
AC_SUBST(LIBICONV_LIBS)
Source: %{name}-%{version}.tar.gz
Buildroot: /tmp/%{name}-%{version}-root
Prefix: /usr/intranator
-Requires: libgettext libi2ncommon-utils = %{version}
+Requires: libi2ncommon-utils = %{version}
BuildPrereq: libtool
-BuildRequires: boost-devel >= 1.32.0 libgettext
+BuildRequires: boost-devel >= 1.32.0
%description
%package devel
Summary: library with functions common in Intra2net programs
Group: Intranator/Development
-Requires: libi2ncommon = %{version} libgettext
+Requires: libi2ncommon = %{version}
Requires: boost-devel >= 1.32.0
# set the include path found by configure
-INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/utils @LIBGETTEXT_CFLAGS@ @LIBICONV_CFLAGS@ @BOOST_CPPFLAGS@ $(all_includes)
+INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/utils @LIBICONV_CFLAGS@ @BOOST_CPPFLAGS@ $(all_includes)
# the library search path.
lib_LTLIBRARIES = libi2ncommon.la
i2n_configdata.hpp i2n_configfile.hpp insocketstream.hxx ip_type.hxx ipfunc.hxx \
log_macros.hpp logfunc.hpp logread.hxx oftmpstream.hxx pidfile.hpp pipestream.hxx \
pointer_func.hpp source_track_basics.hpp stringfunc.hxx timefunc.hxx tmpfstream.hpp \
- tmpfstream_impl.hpp tracefunc.hpp userfunc.hpp week.hpp tribool.hpp
+ tmpfstream_impl.hpp tracefunc.hpp userfunc.hpp week.hpp tribool.hpp i18n.h
libi2ncommon_la_SOURCES = cron.cpp daemonfunc.cpp filefunc.cpp \
i2n_configfile.cpp ipfunc.cpp logfunc.cpp logread.cpp oftmpstream.cpp pidfile.cpp \
pointer_func.cpp source_track_basics.cpp stringfunc.cpp timefunc.cpp tmpfstream.cpp \
- tracefunc.cpp userfunc.cpp week.cpp tribool.cpp
+ tracefunc.cpp userfunc.cpp week.cpp tribool.cpp i18n.cpp
# Note: If you specify a:b:c as the version in the next line,
# the library that is made has version (a-c).c.b. In this
libi2ncommon_la_LDFLAGS = -version-info @LIBI2NCOMMON_LIB_VERSION@ @BOOST_LDFLAGS@
-libi2ncommon_la_LIBADD = @LIBGETTEXT_LIBS@ @LIBICONV_LIBS@ @BOOST_IOSTREAMS_LIB@
+libi2ncommon_la_LIBADD = @LIBICONV_LIBS@ @BOOST_IOSTREAMS_LIB@
--- /dev/null
+/***************************************************************************
+ i18n.cpp - description
+ -------------------
+ begin : Wed Apr 25 2001
+ copyright : (C) 2001-2004 by Intra2net AG
+ email : info@intra2net.com
+ ***************************************************************************/
+
+#include <sstream>
+#include <string>
+#include <vector>
+#include <iostream>
+#include <fstream>
+
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include "i18n.h"
+
+#define DEFAULT_LANG "en_EN"
+
+using namespace std;
+
+void i18n_init (const string& domain, const string& path)
+{
+ i18n_set_language (i18n_get_default_language());
+
+ bindtextdomain (domain.c_str(), path.c_str());
+ textdomain (domain.c_str());
+}
+
+void i18n_set_language (const string &lang)
+{
+ string target;
+
+ if (lang.empty())
+ target=DEFAULT_LANG;
+ else
+ {
+ if (lang=="NULL")
+ target="";
+ else
+ target=lang;
+ }
+
+ if (target.empty())
+ setlocale(LC_ALL,"C");
+ else
+ setlocale(LC_ALL,target.c_str());
+
+ // Flush gcc based gettext caching. Code is from the -GNU-
+ // gettext manual in the "being a gettext grok" chapter.
+ {
+ extern int _nl_msg_cat_cntr;
+ ++_nl_msg_cat_cntr;
+ }
+
+ return;
+}
+
+// empty string returned: no language set
+string i18n_get_current_language(void)
+{
+ string lng;
+ char* env=setlocale(LC_ALL,NULL);
+
+ if (env != NULL)
+ {
+ if (strcmp(env,"C")==0)
+ lng="NULL";
+ else
+ lng=env;
+ }
+ else
+ lng="NULL";
+
+ return lng;
+}
+
+// empty string returned: no language set
+string i18n_get_default_language(void)
+{
+ string lang;
+
+ ifstream in("/usr/intranator/etc/locale");
+ if (in)
+ {
+ getline (in, lang);
+
+ if (lang.empty())
+ lang=DEFAULT_LANG;
+ in.close();
+ }
+
+ return lang;
+}
+
+void i18n_get_string(const char *source, string &target, const vector<string> &data) {
+ string src = string (source);
+ i18n_get_string (src, target, data);
+}
+
+string i18n_get_string(const char *source, const vector<string> &data) {
+ string target;
+ string src = string (source);
+ i18n_get_string (src, target, data);
+ return target;
+}
+
+string i18n_get_string(const string &source, const vector<string> &data) {
+ string target;
+ i18n_get_string (source, target, data);
+ return target;
+}
+
+void i18n_get_string(const string &source, string &target, const vector<string> &data)
+{
+ string::size_type p=0, slen=0;
+ string dollar="$";
+
+ // custom vars
+ string text = source;
+
+ target=text;
+
+ while ((p=target.find('$',p))!=string::npos)
+ {
+ const string *ins;
+
+ if (target.size() < p)
+ {
+ ostringstream os;
+ os << "i18n syntax error: $ without number at pos ->" << p << "<- in string ->" << text << "<-";
+ target = os.str();
+ return;
+ }
+
+ // find string to insert (=ins)
+ if (target.at(p+1)=='$')
+ {
+ ins=$
+ slen=2;
+ }
+ else
+ {
+ slen=target.find_first_not_of("0123456789",p+1);
+
+ if (slen==string::npos)
+ slen=target.size();
+
+ if (slen==p+1)
+ {
+ ostringstream os;
+ os << "i18n syntax error: $ without number at pos ->" << p << "<- in string ->" << text << "<-";
+ target = os.str();
+ return;
+ }
+
+ slen-=p;
+ istringstream is(target.substr(p+1,slen-1));
+ unsigned int dnr;
+
+ is >> dnr;
+
+ if (is.fail())
+ {
+ ostringstream os;
+ os << "i18n syntax error: error reading number at pos ->" << p << "<- in string ->" << text << "<-";
+ target = os.str();
+ return;
+ }
+
+ if (dnr+1 > data.size())
+ {
+ ostringstream os;
+ os << "i18n parameter error: missing variable ->$" << dnr << "<- in string ->" << text << "<-";
+ target = os.str();
+ return;
+ }
+
+ ins=&(data.at(dnr));
+ }
+
+ target.replace(p,slen,*ins);
+ p=p+ins->size();
+ }
+}
+
+// convert locale to language (de_DE -> de)
+string i18n_locale2language(string locale)
+{
+ // search for "_"
+ string::size_type pos = locale.find("_");
+ if (pos == string::npos)
+ return locale;
+
+ return(locale.substr(0, pos));
+}
--- /dev/null
+/***************************************************************************
+ i18n.h - description
+ -------------------
+ begin : Wed Apr 25 2001
+ copyright : (C) 2001-2004 by Intra2net AG
+ email : info@intra2net.com
+ ***************************************************************************/
+
+#ifndef intranator_i18n_H
+#define intranator_i18n_H
+
+#include <libintl.h>
+#include <string>
+#include <vector>
+
+#define i18n(String) gettext(String)
+#define i18n_noop(String) (String)
+
+void i18n_init(const std::string& domain, const std::string& path=".");
+void i18n_set_language(const std::string &lang="");
+std::string i18n_get_current_language(void);
+std::string i18n_get_default_language(void);
+
+void i18n_get_string (const char *source, std::string &target, const std::vector<std::string> &data);
+void i18n_get_string (const std::string &source, std::string &target, const std::vector<std::string> &data);
+
+std::string i18n_get_string (const char *source, const std::vector<std::string> &data);
+std::string i18n_get_string (const std::string &source, const std::vector<std::string> &data);
+
+std::string i18n_locale2language(const std::string locale);
+
+#endif
# set the include path found by configure
-INCLUDES = -I$(top_srcdir)/src $(all_includes) @LIBXMLPP_CFLAGS@ @LIBGETTEXT_CFLAGS@
+INCLUDES = -I$(top_srcdir)/src $(all_includes) @LIBXMLPP_CFLAGS@
METASOURCES = AUTO
lib_LTLIBRARIES = libi2ncommon_xml.la