prepare for translations

This commit is contained in:
tildearrow 2024-05-26 03:57:26 -05:00
parent 905d8cae75
commit 34c176a799
10 changed files with 203 additions and 0 deletions

View file

@ -93,7 +93,11 @@ else()
endif() endif()
endif() endif()
# until ready
set(WITH_LOCALE_DEFAULT OFF)
option(BUILD_GUI "Build the tracker (disable to build only a headless player)" ${BUILD_GUI_DEFAULT}) option(BUILD_GUI "Build the tracker (disable to build only a headless player)" ${BUILD_GUI_DEFAULT})
option(WITH_LOCALE "Use libintl for language support" ${WITH_LOCALE_DEFAULT})
option(USE_RTMIDI "Build with MIDI support using RtMidi." ${USE_RTMIDI_DEFAULT}) option(USE_RTMIDI "Build with MIDI support using RtMidi." ${USE_RTMIDI_DEFAULT})
option(USE_SDL2 "Build with SDL2. Required to build with GUI." ${USE_SDL2_DEFAULT}) option(USE_SDL2 "Build with SDL2. Required to build with GUI." ${USE_SDL2_DEFAULT})
option(USE_SNDFILE "Build with libsndfile. Required in order to work with audio files." ${USE_SNDFILE_DEFAULT}) option(USE_SNDFILE "Build with libsndfile. Required in order to work with audio files." ${USE_SNDFILE_DEFAULT})
@ -171,6 +175,21 @@ if (WIN32)
endif() endif()
endif() endif()
if (WITH_LOCALE)
if ("${CMAKE_VERSION}" VERSION_LESS "3.2")
message(FATAL_ERROR "CMake 3.2 or later required for locale support.")
else()
include(FindIntl)
if (NOT Intl_FOUND)
message(FATAL_ERROR "Could not find libintl!")
endif()
list(APPEND DEPENDENCIES_DEFINES HAVE_LOCALE)
list(APPEND DEPENDENCIES_INCLUDE_DIRS ${Intl_INCLUDE_DIRS})
list(APPEND DEPENDENCIES_LIBRARIES ${Intl_LIBRARIES})
message(STATUS "Using libintl")
endif()
endif()
if (SYSTEM_FFTW) if (SYSTEM_FFTW)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(FFTW REQUIRED fftw3>=3.3) pkg_check_modules(FFTW REQUIRED fftw3>=3.3)
@ -1141,6 +1160,17 @@ else()
add_executable(furnace ${USED_SOURCES}) add_executable(furnace ${USED_SOURCES})
endif() endif()
if (WITH_LOCALE)
set(FURNACE_LANGUAGES es pl pt_BR ru)
set(FURNACE_LANGUAGE_DEPENDS "")
foreach(I IN LISTS FURNACE_LANGUAGES)
add_custom_command(OUTPUT "locale/${I}/LC_MESSAGES/furnace.mo" COMMAND msgfmt ${CMAKE_SOURCE_DIR}/po/${I}.po -o "${CMAKE_BINARY_DIR}/locale/${I}/LC_MESSAGES/furnace.mo" DEPENDS po/${I}.po WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
list(APPEND FURNACE_LANGUAGE_DEPENDS "locale/${I}/LC_MESSAGES/furnace.mo")
endforeach()
add_custom_target(furnace-locale ALL DEPENDS ${FURNACE_LANGUAGE_DEPENDS})
endif()
target_include_directories(furnace SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS}) target_include_directories(furnace SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS})
target_compile_options(furnace PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS}) target_compile_options(furnace PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS})
target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LIBRARIES}) target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LIBRARIES})

23
po/es.po Normal file
View file

@ -0,0 +1,23 @@
#
msgid ""
msgstr ""
"Project-Id-Version: furnace 0.6.3\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/gui/debugWindow.cpp:662
msgid "This is a language test."
msgstr "Este es una prueba de idioma."
#: src/gui/debugWindow.cpp:663
msgid "This is another language test."
msgstr "Este es otra prueba de idioma."
#: src/main.cpp:510
msgid "this is a test!"
msgstr "este es una prueba!"

19
po/furnace.pot Normal file
View file

@ -0,0 +1,19 @@
#
msgid ""
msgstr ""
"Project-Id-Version: furnace 0.6.3\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/gui/debugWindow.cpp:662
msgid "This is a language test."
msgstr ""
#: src/gui/debugWindow.cpp:663
msgid "This is another language test."
msgstr ""
#: src/main.cpp:510
msgid "this is a test!"
msgstr ""

24
po/pl.po Normal file
View file

@ -0,0 +1,24 @@
#
msgid ""
msgstr ""
"Project-Id-Version: furnace 0.6.3\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: src/gui/debugWindow.cpp:662
msgid "This is a language test."
msgstr ""
#: src/gui/debugWindow.cpp:663
msgid "This is another language test."
msgstr ""
#: src/main.cpp:510
msgid "this is a test!"
msgstr ""

23
po/pt_BR.po Normal file
View file

@ -0,0 +1,23 @@
#
msgid ""
msgstr ""
"Project-Id-Version: furnace 0.6.3\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/gui/debugWindow.cpp:662
msgid "This is a language test."
msgstr ""
#: src/gui/debugWindow.cpp:663
msgid "This is another language test."
msgstr ""
#: src/main.cpp:510
msgid "this is a test!"
msgstr ""

24
po/ru.po Normal file
View file

@ -0,0 +1,24 @@
#
msgid ""
msgstr ""
"Project-Id-Version: furnace 0.6.3\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/gui/debugWindow.cpp:662
msgid "This is a language test."
msgstr ""
#: src/gui/debugWindow.cpp:663
msgid "This is another language test."
msgstr ""
#: src/main.cpp:510
msgid "this is a test!"
msgstr ""

27
scripts/update-po.sh Executable file
View file

@ -0,0 +1,27 @@
#!/bin/bash
FUR_VERSION="0.6.3"
EXPORT_LANGS=("es" "ru" "pl" "pt_BR")
echo '#
msgid ""
msgstr ""' > po/furnace.pot
echo '"Project-Id-Version: furnace '"$FUR_VERSION"'\n"' >> po/furnace.pot
echo '"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
' >> po/furnace.pot
find src/ -type f -regex ".*\(cpp\|h\)$" | xargs xgettext --omit-header -k_ -L C++ -o - >> po/furnace.pot
cd po
for i in ${EXPORT_LANGS[@]}; do
if [ -e "$i".po ]; then
echo "merging $i"".po..."
msgmerge --backup=none -U "$i".po furnace.pot
else
echo "creating $i"".po..."
msginit -i furnace.pot -l "$i".UTF-8 --no-translator
fi
done

View file

@ -658,6 +658,11 @@ void FurnaceGUI::drawDebug() {
} }
ImGui::TreePop(); ImGui::TreePop();
} }
if (ImGui::TreeNode("Locale Test")) {
ImGui::TextUnformatted(_("This is a language test."));
ImGui::TextUnformatted(_("This is another language test."));
ImGui::TreePop();
}
if (ImGui::TreeNode("Osc Render Test")) { if (ImGui::TreeNode("Osc Render Test")) {
ImGui::InputInt("Length",&oscDebugLen); ImGui::InputInt("Length",&oscDebugLen);
ImGui::InputInt("Height",&oscDebugHeight); ImGui::InputInt("Height",&oscDebugHeight);

View file

@ -489,6 +489,27 @@ int main(int argc, char** argv) {
zsmOutName=""; zsmOutName="";
cmdOutName=""; cmdOutName="";
#ifdef HAVE_LOCALE
const char* localeRet=NULL;
if ((localeRet=setlocale(LC_ALL,""))==NULL) {
logE("could not set locale!");
} else {
logV("locale: %s",localeRet);
}
if ((localeRet=bindtextdomain("furnace","locale"))==NULL) {
logE("could not bind text domain!");
} else {
logV("text domain 1: %s",localeRet);
}
if ((localeRet=textdomain("furnace"))==NULL) {
logE("could not text domain!");
} else {
logV("text domain 2: %s",localeRet);
}
logV(_("this is a test!"));
#endif
initParams(); initParams();
// parse arguments // parse arguments

View file

@ -42,6 +42,13 @@ typedef std::string String;
#define MAX(a,b) (((a)>(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b))
#define CLAMP(x,xMin,xMax) (MIN(MAX((x),(xMin)),(xMax))) #define CLAMP(x,xMin,xMax) (MIN(MAX((x),(xMin)),(xMax)))
#ifdef HAVE_LOCALE
#include <libintl.h>
#define _(_str) gettext(_str)
#else
#define _(_str) _str
#endif
typedef std::wstring WString; typedef std::wstring WString;
enum TAParamResult { enum TAParamResult {