diff options
-rw-r--r-- | docs/CMakeLists.txt | 2 | ||||
-rw-r--r-- | docs/LANGUAGE | 36 | ||||
-rw-r--r-- | docs/LANGUAGES | 25 | ||||
-rw-r--r-- | src/language.cpp | 7 | ||||
-rw-r--r-- | src/modules.cpp | 3 |
5 files changed, 43 insertions, 30 deletions
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index ce152334f..6d0ccbe28 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -7,7 +7,7 @@ if(WIN32) # Add README.txt to list of files for CPack to ignore add_to_cpack_ignored_files("README.txt$" TRUE) endif(IN_SOURCE) - set(DOCS DEFCON FAQ INSTALL LANGUAGES MODULES NEWS ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt) + set(DOCS DEFCON FAQ INSTALL LANGUAGE MODULES NEWS ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt) install(FILES ${DOCS} DESTINATION docs ) diff --git a/docs/LANGUAGE b/docs/LANGUAGE new file mode 100644 index 000000000..6bbc59598 --- /dev/null +++ b/docs/LANGUAGE @@ -0,0 +1,36 @@ +Anope Mutli Language Support +---------------------------- + +1) Building Anope with gettext support +2) Adding a new language +3) Using languages with modules + +1) Building Anope with gettext support + + To build Anope with gettext support gettext and its devlopmental libraries must be installed on the system. + Anope does not require locales to be installed or enabled on the system, but does require the locales-all + package on Debian and Debian based systems. + + Building Anope on Windows with gettext support is explained in docs/WIN32.txt + +2) Adding a new language + + Anope uses gettext (http://www.gnu.org/software/gettext/) to translate messages for users. To add a new language + install gettext and run `msginit -l language -o anope.language.po -i anope.pot`. For example if I was translating to + Spanish I could run `msginit -l es_ES -o anope.es_ES.po -i anope.pot`. Open the newly generating .po file and start + translating. Once you are done simply rerun ./Config; make && make install and add the language to your services.conf. + + Poedit (http://www.poedit.net/) is a popular po file editor, and we recommend using it or another editor designed to edit + po files (especially on Windows). + + If you have finished a language file translation and you want others to use it, please send it to team@anope.org + (don't forget to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it. + +3) Using langages with modules + + Module authors can easially add the ability to have their modules translated by adding _() around the strings they + need translated (messages to the user, etc). See a few of the modules in /modules/extras (cs_appendtopic, hs_request) + for examples of this. If you want to translate a module someone has made, first generate a .pot file if there is none. + Run `xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`. Then, run msginit on the .pot file + with `msginit -l language -o modulename.language.po -i modulename.pot`. Translate the new .po file, then place it in + the lang folder and rerun ./Config; make && make install. diff --git a/docs/LANGUAGES b/docs/LANGUAGES deleted file mode 100644 index 7b86a90dc..000000000 --- a/docs/LANGUAGES +++ /dev/null @@ -1,25 +0,0 @@ -Anope Mutli Language Support ----------------------------- - -1) Adding a new language -2) Using languages with modules - -1) Adding a new language - - Anope uses gettext (http://www.gnu.org/software/gettext/) to translate messages for users. To add a new language - install gettext and run `msginit -l language -o anope.language.po -i anope.pot`. For example if I was translating to - Spanish I could run `msginit -l es_ES -o anope.es_ES.po -i anope.pot`. Open the newly generating .po file in a good - editor, there many pot file editors available, and start translating. Once you are done simply rerun ./Config; - make && make install and add the language to your services.conf. - - If you did a language file translation and you want others to use it, please send it to team@anope.org (don't forget - to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it. - -2) Using langages with modules - - Module authors can easially add the ability to have their modules translated by adding _() around the strings they - need translated (messages to the user, etc). See a few of the modules in /modules/extras (cs_appendtopic, hs_request) - for examples of this. If you want to translate a module someone has made, first generate a .pot file if there is none. - Run `xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`. Then, run msginit on the .pot file - with `msginit -l language -o modulename.language.po -i modulename.pot`. Translate the new .po file, then place it in - the lang folder and rerun ./Config; make && make install. diff --git a/src/language.cpp b/src/language.cpp index ffaf3acb0..d5fe5d40b 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -30,9 +30,9 @@ void InitLanguages() } if (!bindtextdomain("anope", (services_dir + "/languages/").c_str())) - { Log() << "Error calling bindtextdomain, " << Anope::LastError(); - } + else + Log(LOG_DEBUG) << "Successfully bound anope to " << services_dir << "/languages/"; #else Log() << "Can not load languages, gettext is not installed"; #endif @@ -60,9 +60,10 @@ const Anope::string GetString(Anope::string language, LanguageString string) #if GETTEXT_FOUND ++_nl_msg_cat_cntr; setenv("LANGUAGE", language.c_str(), 1); - setlocale(LC_ALL, "en_US"); + setlocale(LC_ALL, language.c_str()); // This is only required by some systems, but must not be C or POSIX const char *ret = dgettext("anope", language_strings[string].c_str()); unsetenv("LANGUAGE"); + setlocale(LC_ALL, ""); return ret ? ret : ""; #endif diff --git a/src/modules.cpp b/src/modules.cpp index eb7462d1a..c15f468e8 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -305,9 +305,10 @@ void Module::SendMessage(BotInfo *from, User *to, const char *fmt, ...) { ++_nl_msg_cat_cntr; setenv("LANGUAGE", language.c_str(), 1); - setlocale(LC_ALL, "en_US"); + setlocale(LC_ALL, language.c_str()); // This is only required by some systems, but must not be C or POSIX message = dgettext(this->name.c_str(), fmt); unsetenv("LANGUAGE"); + setlocale(LC_ALL, ""); } #endif |