diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbe8fba68d..3bc86f9ffe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,6 @@ jobs: libdb++-dev \ libboost-dev \ libboost-system-dev \ - libboost-regex-dev \ libboost-thread-dev \ libboost-iostreams-dev \ liblucene++-dev \ diff --git a/NEWS b/NEWS index d3cea20148..699e63f445 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +Version 3.4.3 +------------- + +- Pass --no-convert to msgfmt with gettext >= 0.22 to avoid UTF-8 conversion. +- Fixed parsing of @@locale values in ARB files. +- Updated bundled GNU gettext to 0.22.5. +- Assorted fixes. + + Version 3.4.2 ------------- diff --git a/Poedit.vcxproj b/Poedit.vcxproj index d4265aad25..a1c24a2373 100644 --- a/Poedit.vcxproj +++ b/Poedit.vcxproj @@ -1,6 +1,6 @@  - + @@ -339,6 +339,6 @@ - + \ No newline at end of file diff --git a/admin/ax_boost_regex.m4 b/admin/ax_boost_regex.m4 deleted file mode 100644 index e2413c24fe..0000000000 --- a/admin/ax_boost_regex.m4 +++ /dev/null @@ -1,111 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_boost_regex.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_BOOST_REGEX -# -# DESCRIPTION -# -# Test for Regex library from the Boost C++ libraries. The macro requires -# a preceding call to AX_BOOST_BASE. Further documentation is available at -# . -# -# This macro calls: -# -# AC_SUBST(BOOST_REGEX_LIB) -# -# And sets: -# -# HAVE_BOOST_REGEX -# -# LICENSE -# -# Copyright (c) 2008 Thomas Porschberg -# Copyright (c) 2008 Michael Tindal -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 23 - -AC_DEFUN([AX_BOOST_REGEX], -[ - AC_ARG_WITH([boost-regex], - AS_HELP_STRING([--with-boost-regex@<:@=special-lib@:>@], - [use the Regex library from boost - it is possible to specify a certain library for the linker - e.g. --with-boost-regex=boost_regex-gcc-mt-d-1_33_1 ]), - [ - if test "$withval" = "no"; then - want_boost="no" - elif test "$withval" = "yes"; then - want_boost="yes" - ax_boost_user_regex_lib="" - else - want_boost="yes" - ax_boost_user_regex_lib="$withval" - fi - ], - [want_boost="yes"] - ) - - if test "x$want_boost" = "xyes"; then - AC_REQUIRE([AC_PROG_CC]) - CPPFLAGS_SAVED="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - export CPPFLAGS - - LDFLAGS_SAVED="$LDFLAGS" - LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" - export LDFLAGS - - AC_CACHE_CHECK(whether the Boost::Regex library is available, - ax_cv_boost_regex, - [AC_LANG_PUSH([C++]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include - ]], - [[boost::regex r(); return 0;]])], - ax_cv_boost_regex=yes, ax_cv_boost_regex=no) - AC_LANG_POP([C++]) - ]) - if test "x$ax_cv_boost_regex" = "xyes"; then - AC_DEFINE(HAVE_BOOST_REGEX,,[define if the Boost::Regex library is available]) - BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` - if test "x$ax_boost_user_regex_lib" = "x"; then - for libextension in `ls $BOOSTLIBDIR/libboost_regex*.so* $BOOSTLIBDIR/libboost_regex*.dylib* $BOOSTLIBDIR/libboost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.dylib.*;\1;' -e 's;^lib\(boost_regex.*\)\.a.*$;\1;'` ; do - ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], - [link_regex="no"]) - done - if test "x$link_regex" != "xyes"; then - for libextension in `ls $BOOSTLIBDIR/boost_regex*.dll* $BOOSTLIBDIR/boost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a.*$;\1;'` ; do - ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], - [link_regex="no"]) - done - fi - - else - for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do - AC_CHECK_LIB($ax_lib, main, - [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], - [link_regex="no"]) - done - fi - if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the Boost::Regex library!) - fi - if test "x$link_regex" != "xyes"; then - AC_MSG_ERROR(Could not link against $ax_lib !) - fi - fi - - CPPFLAGS="$CPPFLAGS_SAVED" - LDFLAGS="$LDFLAGS_SAVED" - fi -]) diff --git a/configure.ac b/configure.ac index 2a84c712c1..73a1626cd0 100644 --- a/configure.ac +++ b/configure.ac @@ -58,7 +58,6 @@ esac AX_BOOST_BASE([1.60], [], [AC_MSG_ERROR([Boost libraries are required])]) AX_BOOST_SYSTEM -AX_BOOST_REGEX AX_BOOST_THREAD CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS" diff --git a/deps/build.ninja b/deps/build.ninja index 385fbfda36..912cf670a6 100644 --- a/deps/build.ninja +++ b/deps/build.ninja @@ -17,12 +17,12 @@ rule download $url... pool = console build $ - tarballs/gettext-0.22.4.tar.gz: $ + tarballs/gettext-0.22.5.tar.gz: $ download url = $ - https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.4.tar.gz + https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.5.tar.gz sha256 = $ - c1e0bb2a4427a9024390c662cd532d664c4b36b8ff444ed5e54b115fdb7a1aea + ec1705b1e969b83a9f073144ec806151db88127f5e40fe5a94cb6c8fa48996a0 rule gettext_build command = echo $ 'note: ⋯ $ @@ -55,7 +55,7 @@ rule gettext_build && echo $ 'note: ⋯ $ tar -x -f $ - "$top_srcdir/tarballs/gettext-0.22.4.tar.gz" $ + "$top_srcdir/tarballs/gettext-0.22.5.tar.gz" $ -C $ "$workdir" $ --strip-components $ @@ -63,7 +63,7 @@ rule gettext_build tmp=`mktemp` $ && tar -x $ -f $ - "$top_srcdir/tarballs/gettext-0.22.4.tar.gz" $ + "$top_srcdir/tarballs/gettext-0.22.5.tar.gz" $ -C $ "$workdir" $ --strip-components $ @@ -397,7 +397,7 @@ build $ gettext_build $ gettext/gettext-macos-catalina-dont-touch-parent-dirs.patch $ gettext/gettext-smaller-build.patch $ - tarballs/gettext-0.22.4.tar.gz + tarballs/gettext-0.22.5.tar.gz name = gettext configure = $ ./configure diff --git a/deps/generate_build_ninja.py b/deps/generate_build_ninja.py index 86b83bee9a..ca16cbba65 100755 --- a/deps/generate_build_ninja.py +++ b/deps/generate_build_ninja.py @@ -5,9 +5,9 @@ from glob import glob from ninja_syntax import Writer -GETTEXT_VERSION = "0.22.4" # use of " important for Xcode build! +GETTEXT_VERSION = "0.22.5" # use of " important for Xcode build! GETTEXT_TARBALL = 'gettext-%s.tar.gz' % GETTEXT_VERSION -GETTEXT_SHA256 = 'c1e0bb2a4427a9024390c662cd532d664c4b36b8ff444ed5e54b115fdb7a1aea' +GETTEXT_SHA256 = 'ec1705b1e969b83a9f073144ec806151db88127f5e40fe5a94cb6c8fa48996a0' _exclusion_list = [ '.DS_Store', diff --git a/locales/ar.po b/locales/ar.po index fa3d17f202..b98962b79b 100644 --- a/locales/ar.po +++ b/locales/ar.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:15\n" +"PO-Revision-Date: 2023-12-28 10:15\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -19,7 +19,7 @@ msgstr "" "X-Crowdin-File-ID: 3\n" msgid "Hide this notification message" -msgstr "أخفِ رسالة الإخطار هذه" +msgstr "إخفاء رسالة التنبيه هذه" msgid "Don’t Show Again" msgstr "عدم العرض مجدّدًا" @@ -48,7 +48,7 @@ msgstr "تحديث الترجمات" #, c-format msgid "The file “%s” couldn’t be opened." -msgstr "" +msgstr "لا يمكن فتح الملف \"%s\"." msgid "Invalid file" msgstr "الملفّ غير صالح" @@ -67,25 +67,25 @@ msgid "XLIFF Translation Files" msgstr "ملفات ترجمة XLIFF" msgid "JSON Translation Files" -msgstr "" +msgstr "ملفات ترجمة JSON" #. TRANSLATORS: "Flutter" is proper noun, name of a developer tool msgid "Flutter Translation Files" -msgstr "" +msgstr "ملفات ترجمة Flutter" msgid "All Translation Files" msgstr "كلّ ملفّات التّرجمة" msgid "The file is in a format not recognized by Poedit." -msgstr "" +msgstr "الملف بصيغة لم يتعرف عليها Poedit." msgid "" "This JSON file isn’t a translations file and cannot be edited in Poedit." -msgstr "" +msgstr "ملف JSON هذا ليس ملف ترجمات ولا يمكن تعديله في Poedit." #, c-format msgid "Reading file content failed with the following error: %s" -msgstr "" +msgstr "فشل قراءة محتوى الملف مع الخطأ التالي: %s" #, c-format msgid "" @@ -100,7 +100,7 @@ msgid "Couldn’t save file %s." msgstr "تعذّر حفظ الملفّ %s." msgid "Screenshots:" -msgstr "" +msgstr "لقطات شاشة:" #, c-format msgid "%i line of file “%s” was not loaded correctly." @@ -123,7 +123,7 @@ msgid "Broken PO file: plural form msgstr used without msgid_plural" msgstr "ملفّ PO معطوب: استُخدمت صيغة الجمع msgstr دون msgid_plural" msgid "Couldn’t load the file, it is probably damaged." -msgstr "" +msgstr "تعذر تحميل الملف، ربما تالف." msgid "" "There were errors when loading the file. Some data may be missing or " @@ -155,11 +155,11 @@ msgstr "الملفّ ”%s“ ليس ملفّ POT صالح." #, c-format msgid "Error while loading XLIFF file: %s" -msgstr "" +msgstr "خطأ في تحميل ملف XLIFF: %s" #, c-format msgid "unsupported version (%s)" -msgstr "" +msgstr "إصدار غير مدعوم (%s)" #. TRANSLATORS: Shown as error if a translation of XLIFF markup is not valid XML msgid "Broken markup in translation string." @@ -178,38 +178,40 @@ msgid "You must restart Poedit for this change to take effect." msgstr "عليك إعادة تشغيل Poedit لتطبيق التّعديلات." msgid "Add Account" -msgstr "" +msgstr "إضافة حساب" msgid "Add account" -msgstr "" +msgstr "إضافة حساب" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "معرفة المزيد عن %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " "sync translations managed on them." msgstr "" +"توصيل Poedit مع منصات التوطين السحابية المدعومة لمزامنة الترجمات التي تتم " +"إدارتها عليها بسلاسة." msgid "How does cloud sync work?" -msgstr "" +msgstr "كيفية عمل المزامنة السحابية؟" msgid "Account" -msgstr "" +msgstr "حساب" msgid "(not signed in)" -msgstr "" +msgstr "(لم يتم تسجيل الدخول)" msgid "File" msgstr "ملفّ" msgid "Open cloud translation" -msgstr "" +msgstr "فتح الترجمة السحابية" msgid "Manage accounts" -msgstr "" +msgstr "إدارة الحسابات" msgid "Project:" msgstr "المشروع:" @@ -218,13 +220,13 @@ msgid "Language:" msgstr "اللّغة:" msgid "Sign in to Cloud Account" -msgstr "" +msgstr "تسجيل الدخول إلى حساب سحابي" msgid "Sign in to cloud account" -msgstr "" +msgstr "تسجيل الدخول إلى حساب سحابي" msgid "No translation projects listed in your account." -msgstr "" +msgstr "لا توجد مشروعات ترجمة مدرجة في حسابك." msgid "Downloading latest translations…" msgstr "ينزّل أحدث التّرجمات…" @@ -232,7 +234,7 @@ msgstr "ينزّل أحدث التّرجمات…" #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "تسجيل الدخول إلى %s" msgid "Syncing" msgstr "جارٍ المزامنة" @@ -240,12 +242,12 @@ msgstr "جارٍ المزامنة" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "تحميل الترجمات إلى %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s failed." -msgstr "" +msgstr "فشل تحميل الترجمات إلى %s." msgid "Syncing error" msgstr "خطأ في المزامنة" diff --git a/locales/be.po b/locales/be.po index 6d2958789d..42e656b8fe 100644 --- a/locales/be.po +++ b/locales/be.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:15\n" +"PO-Revision-Date: 2024-01-31 10:15\n" "Last-Translator: \n" "Language-Team: Belarusian\n" "Language: be_BY\n" @@ -1008,10 +1008,10 @@ msgid "All strings" msgstr "Усе радкі" msgid "Couldn’t download Localazy project details." -msgstr "" +msgstr "Немагчыма спампаваць дэталі праекту Localazy." msgid "There was an error when uploading translations to Localazy." -msgstr "" +msgstr "Памылка падчас загрузкі перакладаў на Localazy." msgid "Projects" msgstr "Праекты" diff --git a/locales/de.po b/locales/de.po index 8d07acbe75..d0d2240c38 100644 --- a/locales/de.po +++ b/locales/de.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-19 10:15\n" +"PO-Revision-Date: 2024-01-15 10:16\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -87,7 +87,7 @@ msgstr "" #, c-format msgid "Reading file content failed with the following error: %s" msgstr "" -"Der Inhalt der Datei konnte nicht gelesen werden mit folgendem Fehler: %s" +"Der Inhalt der Datei konnte mit folgendem Fehler nicht gelesen werden: %s" #, c-format msgid "" @@ -230,7 +230,7 @@ msgid "Sign in to cloud account" msgstr "Auf dem Cloud-Konto anmelden" msgid "No translation projects listed in your account." -msgstr "Es sind keine Übersetzungsprojekte in Ihrem Konto gelistet." +msgstr "Es sind keine Übersetzungsprojekte in Ihrem Konto vorhanden." msgid "Downloading latest translations…" msgstr "Neueste Übersetzungen werden heruntergeladen …" @@ -1691,7 +1691,7 @@ msgid "The translation should start with a lowercase character." msgstr "Die Übersetzung sollte mit einem Kleinbuchstaben beginnen." msgid "Inconsistent whitespace" -msgstr "Inkonsistentes Leerzeichen" +msgstr "Inkonsistenter Leerraum" msgid "The translation doesn’t start with a space." msgstr "Die Übersetzung beginnt nicht mit einem Leerzeichen." diff --git a/locales/el.po b/locales/el.po index 664a6f0a33..a902f696de 100644 --- a/locales/el.po +++ b/locales/el.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:15\n" +"PO-Revision-Date: 2024-03-26 10:16\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -185,7 +185,7 @@ msgstr "" "Πρέπει να γίνει επανεκκίνηση του Poedit, ώστε αυτή η αλλαγή να έχει επίδραση." msgid "Add Account" -msgstr "" +msgstr "Προσθήκη λογαριασμού" msgid "Add account" msgstr "" @@ -193,7 +193,7 @@ msgstr "" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "Μάθετε περισσότερα για το %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -201,22 +201,22 @@ msgid "" msgstr "" msgid "How does cloud sync work?" -msgstr "" +msgstr "Πώς λειτουργεί ο συγχρονισμός στο Cloud;" msgid "Account" -msgstr "" +msgstr "Λογαριασμός" msgid "(not signed in)" -msgstr "" +msgstr "(Δεν έχετε συνδεθεί)" msgid "File" msgstr "Αρχείο" msgid "Open cloud translation" -msgstr "" +msgstr "Άνοιγμα Cloud μετάφρασης" msgid "Manage accounts" -msgstr "" +msgstr "Διαχείριση λογαριασμών" msgid "Project:" msgstr "Έργο:" @@ -225,13 +225,13 @@ msgid "Language:" msgstr "Γλώσσα:" msgid "Sign in to Cloud Account" -msgstr "" +msgstr "Συνδεθείτε στον λογαριασμό Cloud" msgid "Sign in to cloud account" -msgstr "" +msgstr "Συνδεθείτε στο λογαριασμό cloud" msgid "No translation projects listed in your account." -msgstr "" +msgstr "Δεν υπάρχουν μεταφραστικά έργα στο λογαριασμό σας." msgid "Downloading latest translations…" msgstr "Λήψη τελευταίων μεταφράσεων…" @@ -239,7 +239,7 @@ msgstr "Λήψη τελευταίων μεταφράσεων…" #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "Συνδεθείτε στο %s" msgid "Syncing" msgstr "Συγχρονισμός" @@ -247,12 +247,12 @@ msgstr "Συγχρονισμός" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Μεταφόρτωση μεταφράσεων στο %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s failed." -msgstr "" +msgstr "Η μεταφόρτωση μεταφράσεων στο %s απέτυχε." msgid "Syncing error" msgstr "Σφάλμα συγχρονισμού" @@ -1003,7 +1003,7 @@ msgstr "Αδυναμία εκτέλεσης προγράμματος: %s" #. TRANSLATORS: placeholder/hint in language controls msgid "Language name or code" -msgstr "" +msgstr "Όνομα γλώσσας ή κωδικός" msgid "Translation Language" msgstr "Γλώσσα μετάφρασης" @@ -1012,7 +1012,7 @@ msgid "Language of the translation:" msgstr "Γλώσσα της μετάφρασης:" msgid "All strings" -msgstr "" +msgstr "Όλες οι συμβολοσειρές" msgid "Couldn’t download Localazy project details." msgstr "" diff --git a/locales/fr.po b/locales/fr.po index 38f10f278d..b7fbf9d7e7 100644 --- a/locales/fr.po +++ b/locales/fr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-30 10:16\n" +"PO-Revision-Date: 2024-02-23 10:15\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -101,7 +101,7 @@ msgid "Couldn’t save file %s." msgstr "Impossible d’enregistrer le fichier %s." msgid "Screenshots:" -msgstr "Captures d'écran :" +msgstr "Captures d‘écran :" #, c-format msgid "%i line of file “%s” was not loaded correctly." @@ -183,7 +183,7 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Vous devez redémarrer Poedit pour que ce changement prenne effet." msgid "Add Account" -msgstr "Ajouter un Compte" +msgstr "Ajouter un compte" msgid "Add account" msgstr "Ajouter un compte" @@ -197,8 +197,8 @@ msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " "sync translations managed on them." msgstr "" -"Connectez Poedit avec les plates-formes de localisation cloud supportées " -"pour synchroniser les traductions gérées dessus." +"Connecter Poedit avec les plates-formes de localisation cloud prises en " +"charge pour synchroniser les traductions qui y sont gérées." msgid "How does cloud sync work?" msgstr "Comment fonctionne la synchronisation dans le cloud ?" @@ -207,7 +207,7 @@ msgid "Account" msgstr "Compte" msgid "(not signed in)" -msgstr "(pas connecté)" +msgstr "(non connecté)" msgid "File" msgstr "Fichier" @@ -228,7 +228,7 @@ msgid "Sign in to Cloud Account" msgstr "Connectez-vous au compte Cloud" msgid "Sign in to cloud account" -msgstr "Connectez-vous au compte cloud" +msgstr "Connectez-vous au compte Cloud" msgid "No translation projects listed in your account." msgstr "Aucun projet de traduction listé dans votre compte." @@ -656,7 +656,7 @@ msgid "Review" msgstr "Réviser" msgid "Would you like to use English for source text?" -msgstr "Aimeriez-vous utiliser l'anglais pour le texte source ?" +msgstr "Aimeriez-vous utiliser l‘anglais pour le texte source ?" #, c-format msgid "" @@ -669,7 +669,7 @@ msgstr "" #. TRANSLATORS: Shown as action button when asking if the user wants to replace string IDs with English text; "load" as in "load from file" msgid "Load English" -msgstr "Charger Anglais" +msgstr "Charger l‘anglais" #, c-format msgid "Translated: %d of %d (%d %%)" @@ -1021,7 +1021,7 @@ msgstr "Impossible de télécharger les détails du projet Localazy." msgid "There was an error when uploading translations to Localazy." msgstr "" -"Il y a eu une erreur lors du téléchargement des traductions vers Localazy." +"Il y a eu une erreur lors du téléversement des traductions vers Localazy." msgid "Projects" msgstr "Projets" @@ -1035,7 +1035,7 @@ msgstr "" "langues." msgid "Add Project" -msgstr "Ajouter un Projet" +msgstr "Ajouter un projet" msgid "Add project" msgstr "Ajouter un projet" @@ -1518,7 +1518,7 @@ msgid "" "only IDs without the actual text are used." msgstr "" "La pré-traduction nécessite que le texte source soit disponible. Elle ne " -"fonctionne pas si seuls les identifiants, sans le texte réel, sont utilisés." +"fonctionne pas si seuls les ID, sans le texte réel, sont utilisés." msgid "Cannot pre-translate from unknown language." msgstr "Impossible de pré-traduire depuis une langue inconnue." @@ -1675,7 +1675,7 @@ msgid "Superfluous placeholder “%s” that isn’t in source text." msgstr "Espace réservé superflu « %s » qui n‘est pas dans le texte source." msgid "Plural form translations" -msgstr "Traductions de formes plurielles" +msgstr "Traductions des formes plurielles" msgid "Not all plural forms are translated." msgstr "Toutes les formes plurielles ne sont pas traduites." @@ -1785,10 +1785,10 @@ msgid "Open recent" msgstr "Ouvrir récents" msgid "Open cloud translation…" -msgstr "Ouvrir la traduction dans le cloud …" +msgstr "Ouvrir la traduction dans le cloud…" msgid "Open Cloud Translation…" -msgstr "Ouvrir la Traduction dans le Cloud …" +msgstr "Ouvrir la traduction dans le cloud…" msgid "&Start window" msgstr "&Fenêtre de démarrage" @@ -2346,7 +2346,7 @@ msgid "Version %s" msgstr "Version %s" msgid "Create new" -msgstr "Créer une nouvelle" +msgstr "Créer" msgid "Create new translation from POT template." msgstr "Créer une nouvelle traduction à partir d’un modèle POT." diff --git a/locales/gl.po b/locales/gl.po index f4d38458a3..b8b96112be 100644 --- a/locales/gl.po +++ b/locales/gl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:15\n" +"PO-Revision-Date: 2024-03-14 10:15\n" "Last-Translator: \n" "Language-Team: Galician\n" "Language: gl_ES\n" @@ -101,7 +101,7 @@ msgid "Couldn’t save file %s." msgstr "Non foi posible gardar o ficheiro %s." msgid "Screenshots:" -msgstr "" +msgstr "Capturas de pantalla:" #, c-format msgid "%i line of file “%s” was not loaded correctly." @@ -182,10 +182,10 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Debe reiniciar Poedit para que este cambio teña efecto." msgid "Add Account" -msgstr "" +msgstr "Engadir Conta" msgid "Add account" -msgstr "" +msgstr "Engadir conta" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format @@ -201,7 +201,7 @@ msgid "How does cloud sync work?" msgstr "" msgid "Account" -msgstr "" +msgstr "Conta" msgid "(not signed in)" msgstr "" @@ -213,7 +213,7 @@ msgid "Open cloud translation" msgstr "" msgid "Manage accounts" -msgstr "" +msgstr "Xestionar contas" msgid "Project:" msgstr "Proxecto:" @@ -236,7 +236,7 @@ msgstr "Descargando as traducións máis recentes…" #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "Iniciar sesión en %s" msgid "Syncing" msgstr "Sincronizando" @@ -244,7 +244,7 @@ msgstr "Sincronizando" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Subindo as traducións a %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format @@ -258,7 +258,7 @@ msgid "Add" msgstr "Engadir" msgid "Unknown Crowdin error." -msgstr "" +msgstr "Erro de Crowdin descoñecido." msgid "Not authorized, please sign in again." msgstr "Acción non autorizada; accede de novo." @@ -1000,7 +1000,7 @@ msgid "Language of the translation:" msgstr "Idioma da tradución:" msgid "All strings" -msgstr "" +msgstr "Todas as cadeas" msgid "Couldn’t download Localazy project details." msgstr "" @@ -1009,7 +1009,7 @@ msgid "There was an error when uploading translations to Localazy." msgstr "" msgid "Projects" -msgstr "" +msgstr "Proxectos" msgid "" "Localazy is a highly automated localization platform allowing anyone to " @@ -1017,10 +1017,10 @@ msgid "" msgstr "" msgid "Add Project" -msgstr "" +msgstr "Engadir Proxecto" msgid "Add project" -msgstr "" +msgstr "Engadir proxecto" msgid "Poedit - Catalogs manager" msgstr "Poedit - Xestor de catálogos" @@ -2325,10 +2325,10 @@ msgid "Open and edit translation files." msgstr "Abrir e editar os ficheiros de tradución." msgid "Translate cloud project" -msgstr "" +msgstr "Proxecto de tradución na nube" msgid "Collaborate with other people online." -msgstr "" +msgstr "Colabora con outras persoas en liña." msgid "Recent files" msgstr "Ficheiros recentes" diff --git a/locales/hr.po b/locales/hr.po index 5948a2d77c..f7be0bd2d4 100644 --- a/locales/hr.po +++ b/locales/hr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-12-04 10:16\n" +"PO-Revision-Date: 2024-02-10 10:15\n" "Last-Translator: \n" "Language-Team: Croatian\n" "Language: hr_HR\n" @@ -196,26 +196,26 @@ msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " "sync translations managed on them." msgstr "" -"Povežite Poedit s podržanim platformama za lokalizaciju kako biste " -"jednostavno sinkronizirali prijevode na njima." +"Poveži Poedit s podržanim platformama lokalizacije za sinkroniziranje " +"prijevoda." msgid "How does cloud sync work?" -msgstr "Kako sinkronizacija funkcionira?" +msgstr "Kako funkcionira sinkronizacija?" msgid "Account" msgstr "Račun" msgid "(not signed in)" -msgstr "" +msgstr "(nisi prijavljen/a)" msgid "File" msgstr "Datoteka" msgid "Open cloud translation" -msgstr "" +msgstr "Otvori prijevod u oblaku" msgid "Manage accounts" -msgstr "" +msgstr "Upravljaj računima" msgid "Project:" msgstr "Projekt:" @@ -224,13 +224,13 @@ msgid "Language:" msgstr "Jezik:" msgid "Sign in to Cloud Account" -msgstr "" +msgstr "Prijavi se na račun oblaka" msgid "Sign in to cloud account" -msgstr "" +msgstr "Prijavi se na račun oblaka" msgid "No translation projects listed in your account." -msgstr "" +msgstr "Nema prevoditeljskih projekata na tvom računu." msgid "Downloading latest translations…" msgstr "Preuzimanje najnovijih prijevoda …" @@ -238,7 +238,7 @@ msgstr "Preuzimanje najnovijih prijevoda …" #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "Prijavi se na %s" msgid "Syncing" msgstr "Sinkronizacija" @@ -246,12 +246,12 @@ msgstr "Sinkronizacija" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Prijenos prijevoda na %s …" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s failed." -msgstr "" +msgstr "Prijenos prijevoda na %s nije uspio." msgid "Syncing error" msgstr "Greška prilikom sinkronizacije" @@ -287,6 +287,8 @@ msgid "" "Crowdin is an online localization management platform and collaborative " "translation tool." msgstr "" +"Crowdin je internetska platforma za upravljanje lokalizacijom i alat za " +"zajedničko prevođenje." msgid "Waiting for authentication…" msgstr "Čekanje na autenitifikaciju …" @@ -295,7 +297,7 @@ msgid "Updating user information…" msgstr "Aktualiziranje podataka korisnika …" msgid "Sign in to Crowdin" -msgstr "Prijavi se u Crowdin" +msgstr "Prijavi se na Crowdin" msgid "Syncing with Crowdin failed." msgstr "Sinkronizacija s Crowdinom nije uspjela." @@ -810,7 +812,7 @@ msgid "" "POT files are only templates and don’t contain any translations themselves.\n" "To make a translation, create a new PO file based on the template." msgstr "" -"POT datoteke su samo predlošci i ne sadrže nikakve prijevode.\n" +"POT datoteke su samo predlošci i ne sadrže prijevode.\n" "Za prevođenje, izradi novu PO datoteku na osnovi predloška." msgid "Create new translation" @@ -995,27 +997,29 @@ msgid "Language of the translation:" msgstr "Jezik prijevoda:" msgid "All strings" -msgstr "" +msgstr "Svi izrazi" msgid "Couldn’t download Localazy project details." -msgstr "" +msgstr "Neuspjelo preuzimanje detalja projekta Localazy." msgid "There was an error when uploading translations to Localazy." -msgstr "" +msgstr "Dogodila se greška prilikom prijenosa prijevoda na Localazy." msgid "Projects" -msgstr "" +msgstr "Projekti" msgid "" "Localazy is a highly automated localization platform allowing anyone to " "translate their products and content into multiple languages easily." msgstr "" +"Localazy je automatizirana platforma za lokalizaciju, koja svakome omogućuje " +"jednostavno prevođenje vlastitih proizvoda i sadržaja na više jezika." msgid "Add Project" -msgstr "" +msgstr "Dodaj projekt" msgid "Add project" -msgstr "" +msgstr "Dodaj projekt" msgid "Poedit - Catalogs manager" msgstr "Poedit – Upravljač kataloga" @@ -1495,12 +1499,14 @@ msgstr "" "ako se koriste samo ID-ovi bez stvarnog teksta." msgid "Cannot pre-translate from unknown language." -msgstr "" +msgstr "Nepoznati jezik se ne može pretprevesti." msgid "" "Pre-translation requires that source text’s language is known. Poedit " "couldn’t detect it in this file." msgstr "" +"Pretprevođenje zahtijeva poznavanje jezika izvornog teksta. Poedit ga nije " +"mogao otkriti u ovoj datoteci." msgid "Only fill in exact matches" msgstr "Preuzmi samo jednake izraze" @@ -1509,6 +1515,8 @@ msgid "" "By default, inaccurate results are also included, but marked as needing " "work. Check this option to only include perfect matches." msgstr "" +"Standardno se preuzimaju i netočni izrazi, koji se označuju da zahtijevaju " +"doradu. Odaberi ovu opciju za preuzimanje samo jednakih izraza." msgid "Don’t mark exact matches as needing work" msgstr "Ne označuj jednake izraze, da zahtijevaju doradu" @@ -1752,10 +1760,10 @@ msgid "Open recent" msgstr "Otvori nedavne" msgid "Open cloud translation…" -msgstr "" +msgstr "Otvori prijevod u oblaku …" msgid "Open Cloud Translation…" -msgstr "" +msgstr "Otvori prijevod u oblaku …" msgid "&Start window" msgstr "&Uvodni prozor" @@ -2236,6 +2244,8 @@ msgid "" "Translation suggestions require that source text’s language is known. Poedit " "couldn’t detect it in this file." msgstr "" +"Prijedlozi za prijevod zahtijevaju da je jezik izvornog teksta poznat. " +"Poedit ga nije mogao otkriti u ovoj datoteci." msgid "The TMX file is malformed." msgstr "Nevaljani oblik TMX datoteke." @@ -2305,7 +2315,7 @@ msgid "Create new" msgstr "Stvori novi prijevod" msgid "Create new translation from POT template." -msgstr "Stvori novi prijevod iz POT predloška." +msgstr "Izradi novi prijevod iz POT predloška." msgid "Browse files" msgstr "Pretraži datoteke" @@ -2314,10 +2324,10 @@ msgid "Open and edit translation files." msgstr "Otvori i uredi prevodilačke datoteke." msgid "Translate cloud project" -msgstr "" +msgstr "Prevedi projekt u oblaku" msgid "Collaborate with other people online." -msgstr "" +msgstr "Surađuj s drugim ljudima online." msgid "Recent files" msgstr "Nedavno korištene datoteke" diff --git a/locales/hu.po b/locales/hu.po index 5c2b43b374..5bd116aba6 100644 --- a/locales/hu.po +++ b/locales/hu.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-25 10:15\n" +"PO-Revision-Date: 2024-03-30 10:15\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -187,7 +187,7 @@ msgstr "Fiók hozzáadása" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "Bővebben a %s-ról" +msgstr "Bővebben a %s szolgáltatásról" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -1902,10 +1902,10 @@ msgid "&Untranslated Entries First" msgstr "&Lefordítatlan bejegyzések előre" msgid "&Show code occurrences" -msgstr "&Kód előfordulások mutatása" +msgstr "&Kódelőfordulások megjelenítése" msgid "&Show Code Occurrences" -msgstr "&Kód előfordulások mutatása" +msgstr "&Kódelőfordulások megjelenítése" msgid "Show sidebar" msgstr "Oldalsáv megjelenítése" diff --git a/locales/it.po b/locales/it.po index af52bb10b2..c1056c05ef 100644 --- a/locales/it.po +++ b/locales/it.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-12-05 10:16\n" +"PO-Revision-Date: 2024-04-30 10:15\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -264,7 +264,7 @@ msgid "Not authorized, please sign in again." msgstr "Non autorizzato. È necessario autenticarsi per procedere, grazie." msgid "Downloading translations is disabled in this project." -msgstr "In questo progetto il download della traduzione è disabilitato." +msgstr "Il download delle traduzioni è disabilitato in questo progetto." msgid "Sign In" msgstr "Autenticati" @@ -279,7 +279,7 @@ msgid "Sign out" msgstr "Disconnetti" msgid "Learn more about Crowdin" -msgstr "Altre info su Crowdin" +msgstr "Scopri di più su Crowdin" msgid "" "Crowdin is an online localization management platform and collaborative " @@ -310,7 +310,7 @@ msgid "&Copy" msgstr "&Copia" msgid "Learn more" -msgstr "Voglio saperne di più" +msgstr "Scopri di più" msgid "&Help" msgstr "&Aiuto" @@ -507,7 +507,7 @@ msgstr "Apri modello traduzione" #, c-format msgid "%d issue with the translation found." msgid_plural "%d issues with the translation found." -msgstr[0] "È stato trovato %d problema nella traduzione." +msgstr[0] "%d problema trovato nella traduzione." msgstr[1] "Sono stati trovati %d problemi nella traduzione." msgid "Validation results" @@ -723,13 +723,13 @@ msgid "Ctrl+" msgstr "Ctrl+" msgid "Clear translation" -msgstr "Cancella la traduzione" +msgstr "Cancella traduzione" msgid "Clear Translation" msgstr "Cancella traduzione" msgid "Edit comment" -msgstr "Modifica il commento" +msgstr "Modifica commento" msgid "Edit Comment" msgstr "Modifica commento" @@ -1095,7 +1095,7 @@ msgstr "" "Esegue l'aggiornamento dal codice sorgente per tutti i file del progetto." msgid "Catalogs Manager" -msgstr "Gestore dei cataloghi" +msgstr "Gestore cataloghi" msgid "Check for Updates…" msgstr "Verifica Aggiornamenti…" @@ -1327,7 +1327,7 @@ msgid "Export To TMX…" msgstr "Esportazione in TMX…" msgid "Export to TMX…" -msgstr "Esportazione in TMX…" +msgstr "Esporta in TMX…" #. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). msgid "Reset" @@ -1463,7 +1463,7 @@ msgstr "Windows" #. TRANSLATORS: Followed by text control for entering number; wraps text at given width msgid "Wrap at:" -msgstr "A capo automatico a:" +msgstr "A capo a:" msgid "Preserve formatting of existing files" msgstr "Non modificare la formattazione dei file" @@ -1571,8 +1571,8 @@ msgid "" "is only effective for semi-automatic translations after Poedit learns enough " "from files that you translated manually." msgstr "" -"LA MT non contiene nessuna stringa simile al contenuto di questo file. la MT " -"diventa usabile per traduzioni semi-automatiche solo dopo che Poedit impara " +"La MT non contiene nessuna stringa simile al contenuto di questo file. È " +"efficace per traduzioni semi-automatiche solo dopo che Poedit impara " "abbastanza dai file che hai tradotto manualmente." msgid "Cancelling…" @@ -2104,7 +2104,7 @@ msgid "Use custom expression" msgstr "Usa espressione personalizzata" msgid "Learn about plural forms" -msgstr "Informazioni sulle forme plurali" +msgstr "Scopri di più sulle forme plurali" msgid "Charset:" msgstr "Set di caratteri:" @@ -2128,7 +2128,7 @@ msgid "Extract text from source files in the following directories:" msgstr "Estrai testo dai file sorgenti nelle seguenti cartelle:" msgid "Base path:" -msgstr "Percorso di base:" +msgstr "Percorso base:" msgid "Sources Keywords" msgstr "Parole chiave sorgenti" @@ -2147,7 +2147,7 @@ msgid "Also use default keywords for supported languages" msgstr "Usa anche parole chiave predefinite per le lingue supportate" msgid "Learn about gettext keywords" -msgstr "Info sulle parole chiave gettext" +msgstr "Scopri di più sulle parole chiave gettext" msgid "Update summary" msgstr "Aggiorna riepilogo" @@ -2299,7 +2299,7 @@ msgstr "" "sviluppatori." msgid "(Learn more about GNU gettext)" -msgstr "(Altre informazioni su GNU gettext)" +msgstr "(Scopri di più su GNU gettext)" msgid "" "The simplest way to fill this file with translations is to update it from a " diff --git a/locales/ka.po b/locales/ka.po index ae4e478ff5..0997738557 100644 --- a/locales/ka.po +++ b/locales/ka.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-21 10:17\n" +"PO-Revision-Date: 2024-03-07 10:15\n" "Last-Translator: \n" "Language-Team: Georgian\n" "Language: ka_GE\n" @@ -1611,7 +1611,7 @@ msgid "Not all plural forms are translated." msgstr "ყველა მრავლობითი ფორმა გადართარგმნილი არაა." msgid "Inconsistent upper/lower case" -msgstr "" +msgstr "არამდგრადი რეგისტრი" msgid "The translation should start as a sentence." msgstr "" @@ -1978,7 +1978,7 @@ msgid "Invocation:" msgstr "ინვოკაცია:" msgid "Command to extract translations:" -msgstr "" +msgstr "ბრძანება თარგმანების გამოსაღებად:" msgid "" "This is the command used to launch the extractor.\n" diff --git a/locales/kab.po b/locales/kab.po index a6f0a0e8a6..6bde7a20b7 100644 --- a/locales/kab.po +++ b/locales/kab.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-04-22 10:15\n" "Last-Translator: \n" "Language-Team: Kabyle\n" "Language: kab_KAB\n" @@ -100,7 +100,7 @@ msgid "Couldn’t save file %s." msgstr "Ur izmira ara ad isekles afaylu %s." msgid "Screenshots:" -msgstr "" +msgstr "Tuṭṭfiwin n wegdil :" #, c-format msgid "%i line of file “%s” was not loaded correctly." @@ -177,15 +177,15 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Yessefk ad talseḍ tanekra n Poedit akken ad yeddu ubeddil-agi." msgid "Add Account" -msgstr "" +msgstr "Rnu amiḍan" msgid "Add account" -msgstr "" +msgstr "Rnu amiḍan" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "Issin ugar ɣef %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -196,7 +196,7 @@ msgid "How does cloud sync work?" msgstr "" msgid "Account" -msgstr "" +msgstr "Amiḍan" msgid "(not signed in)" msgstr "" @@ -208,7 +208,7 @@ msgid "Open cloud translation" msgstr "" msgid "Manage accounts" -msgstr "" +msgstr "Sefrek imiḍanen" msgid "Project:" msgstr "Asenfar:" @@ -217,10 +217,10 @@ msgid "Language:" msgstr "Tutlayt:" msgid "Sign in to Cloud Account" -msgstr "" +msgstr "Qqen ɣer umiḍan n cloud" msgid "Sign in to cloud account" -msgstr "" +msgstr "Qqen ɣer umiḍan n cloud" msgid "No translation projects listed in your account." msgstr "" @@ -231,7 +231,7 @@ msgstr "Asider n tsuqilin tineggura…" #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "Qqen ɣer %s" msgid "Syncing" msgstr "Amtawi" @@ -239,7 +239,7 @@ msgstr "Amtawi" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Asali n tsuqilin ɣer %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format @@ -980,7 +980,7 @@ msgid "Language of the translation:" msgstr "Tutlayt n tsuqilt:" msgid "All strings" -msgstr "" +msgstr "Akk izriren" msgid "Couldn’t download Localazy project details." msgstr "" @@ -989,7 +989,7 @@ msgid "There was an error when uploading translations to Localazy." msgstr "" msgid "Projects" -msgstr "" +msgstr "Isenfaṛen" msgid "" "Localazy is a highly automated localization platform allowing anyone to " @@ -997,10 +997,10 @@ msgid "" msgstr "" msgid "Add Project" -msgstr "" +msgstr "Rnu asenfaṛ" msgid "Add project" -msgstr "" +msgstr "Rnu asenfaṛ" msgid "Poedit - Catalogs manager" msgstr "Poedit - Amsefrak n yikaramen" diff --git a/locales/lt.po b/locales/lt.po index b48e2b952e..23370c2716 100644 --- a/locales/lt.po +++ b/locales/lt.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-18 10:16\n" +"PO-Revision-Date: 2024-05-07 16:26\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -179,15 +179,15 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Šis pakeitimas įsigalios paleidus Poedit iš naujo." msgid "Add Account" -msgstr "" +msgstr "Pridėti paskyrą" msgid "Add account" -msgstr "" +msgstr "Pridėti paskyrą" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "Sužinokite daugiau apie %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -198,7 +198,7 @@ msgid "How does cloud sync work?" msgstr "" msgid "Account" -msgstr "" +msgstr "Paskyra" msgid "(not signed in)" msgstr "" @@ -210,7 +210,7 @@ msgid "Open cloud translation" msgstr "" msgid "Manage accounts" -msgstr "" +msgstr "Valdyti paskyras" msgid "Project:" msgstr "Projektas:" @@ -1000,7 +1000,7 @@ msgid "There was an error when uploading translations to Localazy." msgstr "" msgid "Projects" -msgstr "" +msgstr "Projektai" msgid "" "Localazy is a highly automated localization platform allowing anyone to " @@ -1011,7 +1011,7 @@ msgid "Add Project" msgstr "" msgid "Add project" -msgstr "" +msgstr "Pridėti projektą" msgid "Poedit - Catalogs manager" msgstr "Poedit - katalogų tvarkyklė" diff --git a/locales/nb.po b/locales/nb.po index 830a21a8f2..bcbb216ba2 100644 --- a/locales/nb.po +++ b/locales/nb.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-03-27 10:15\n" "Last-Translator: \n" "Language-Team: Norwegian Bokmal\n" "Language: nb_NO\n" @@ -47,7 +47,7 @@ msgstr "Oppdaterer oversettelser" #, c-format msgid "The file “%s” couldn’t be opened." -msgstr "" +msgstr "«%s»-filen kunne ikke åpnes." msgid "Invalid file" msgstr "Ugyldig fil" @@ -66,11 +66,11 @@ msgid "XLIFF Translation Files" msgstr "XLIFF oversettelsesfiler" msgid "JSON Translation Files" -msgstr "" +msgstr "JSON-oversettelsesfiler" #. TRANSLATORS: "Flutter" is proper noun, name of a developer tool msgid "Flutter Translation Files" -msgstr "" +msgstr "Flutter-oversettelsesfiler" msgid "All Translation Files" msgstr "Alle oversettelsesfiler" @@ -99,7 +99,7 @@ msgid "Couldn’t save file %s." msgstr "Kunne ikke lagre fil %s." msgid "Screenshots:" -msgstr "" +msgstr "Skjermklipp:" #, c-format msgid "%i line of file “%s” was not loaded correctly." @@ -176,15 +176,15 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Du må starte Poedit på nytt for at denne endringen skal tre i kraft." msgid "Add Account" -msgstr "" +msgstr "Legg til konto" msgid "Add account" -msgstr "" +msgstr "Legg til konto" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "Les mer om %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -192,13 +192,13 @@ msgid "" msgstr "" msgid "How does cloud sync work?" -msgstr "" +msgstr "Hvordan fungerer skysynkronisering?" msgid "Account" -msgstr "" +msgstr "Konto" msgid "(not signed in)" -msgstr "" +msgstr "(ikke pålogget)" msgid "File" msgstr "Fil" @@ -207,7 +207,7 @@ msgid "Open cloud translation" msgstr "" msgid "Manage accounts" -msgstr "" +msgstr "Behandle kontoer" msgid "Project:" msgstr "Prosjekt:" @@ -230,7 +230,7 @@ msgstr "Laster ned nyeste oversettelser..." #. TRANSLATORS: "%s" is a name of online service, e.g. "Crowdin" or "Localazy" #, c-format msgid "Sign in to %s" -msgstr "" +msgstr "Logg inn på %s" msgid "Syncing" msgstr "Synkroniserer" @@ -238,12 +238,12 @@ msgstr "Synkroniserer" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Laster opp oversettelser til %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s failed." -msgstr "" +msgstr "Opplasting av oversettelser til %s mislyktes." msgid "Syncing error" msgstr "Synkronseringsfeil" @@ -638,7 +638,7 @@ msgstr "" #. TRANSLATORS: Shown as action button when asking if the user wants to replace string IDs with English text; "load" as in "load from file" msgid "Load English" -msgstr "" +msgstr "Last inn engelsk" #, c-format msgid "Translated: %d of %d (%d %%)" @@ -808,7 +808,7 @@ msgstr "Lag en ny oversettelse av denne POT-filen." #. TRANSLATORS: Refers to symbolic ID of source text, i.e. when something like "button.label" is used instead of English text msgid "Source text ID" -msgstr "" +msgstr "Kildetekstens ID" msgid "Everything" msgstr "Alt" @@ -971,7 +971,7 @@ msgstr "Kan ikke kjøre program: %s" #. TRANSLATORS: placeholder/hint in language controls msgid "Language name or code" -msgstr "" +msgstr "Språknavn eller -kode" msgid "Translation Language" msgstr "Oversettelsespråket" @@ -980,7 +980,7 @@ msgid "Language of the translation:" msgstr "Språket til oversettelsen:" msgid "All strings" -msgstr "" +msgstr "Alle strenger" msgid "Couldn’t download Localazy project details." msgstr "" @@ -989,7 +989,7 @@ msgid "There was an error when uploading translations to Localazy." msgstr "" msgid "Projects" -msgstr "" +msgstr "Prosjekter" msgid "" "Localazy is a highly automated localization platform allowing anyone to " @@ -997,10 +997,10 @@ msgid "" msgstr "" msgid "Add Project" -msgstr "" +msgstr "Legg til prosjekt" msgid "Add project" -msgstr "" +msgstr "Legg til prosjekt" msgid "Poedit - Catalogs manager" msgstr "Poedit - Kataloghåndterer" @@ -1614,7 +1614,7 @@ msgid "Please save the file first. This section cannot be edited until then." msgstr "Lagre filen først. Denne delen kan ikke redigeres før da." msgid "Placeholders correctness" -msgstr "Plassholdere riktignok" +msgstr "Plassholder-riktighet" #, c-format msgid "Placeholder “%s” is missing from translation." @@ -2195,7 +2195,7 @@ msgid "Delete from translation memory" msgstr "Slett fra oversettelsesminne" msgid "Translation suggestions" -msgstr "Oversettelse forslag" +msgstr "Oversettelsesforslag" #. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). msgid "No matches found" diff --git a/locales/oc.po b/locales/oc.po index cd1cefd7fc..a42a295d20 100644 --- a/locales/oc.po +++ b/locales/oc.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-01-27 10:15\n" "Last-Translator: \n" "Language-Team: Occitan\n" "Language: oc_FR\n" @@ -171,15 +171,15 @@ msgid "You must restart Poedit for this change to take effect." msgstr "Vos cal reaviar Poedit per qu'aqueste cambiament prenga efièit." msgid "Add Account" -msgstr "" +msgstr "Apondre compte" msgid "Add account" -msgstr "" +msgstr "Apondre compte" #. TRANSLATORS: %s is online service name, e.g. "Crowdin" or "Localazy" #, c-format msgid "Learn more about %s" -msgstr "" +msgstr "Ne saber mai sus %s" msgid "" "Connect Poedit with supported cloud localization platforms to seamlessly " @@ -190,10 +190,10 @@ msgid "How does cloud sync work?" msgstr "" msgid "Account" -msgstr "" +msgstr "Compte" msgid "(not signed in)" -msgstr "" +msgstr "(non connectat)" msgid "File" msgstr "Fichièr" @@ -233,7 +233,7 @@ msgstr "Sincronizacion" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format msgid "Uploading translations to %s…" -msgstr "" +msgstr "Mandadís de las traduccions a %s…" #. TRANSLATORS: %s is a cloud destination, e.g. "Crowdin" or ftp.wordpress.com etc. #, c-format @@ -966,7 +966,7 @@ msgid "Language of the translation:" msgstr "Lenga de la traduccion :" msgid "All strings" -msgstr "" +msgstr "Totas las cadenas" msgid "Couldn’t download Localazy project details." msgstr "" @@ -975,7 +975,7 @@ msgid "There was an error when uploading translations to Localazy." msgstr "" msgid "Projects" -msgstr "" +msgstr "Projèctes" msgid "" "Localazy is a highly automated localization platform allowing anyone to " @@ -1869,16 +1869,16 @@ msgid "&Translation" msgstr "&Traduccion" msgid "&Update from source code" -msgstr "" +msgstr "&Actualizar a partir del còdi font" msgid "&Update from Source Code" -msgstr "" +msgstr "&Actualizar a partir del còdi font" msgid "Update from &POT file…" -msgstr "" +msgstr "Actualizar a partir d’un fichièr &POT…" msgid "Update from &POT File…" -msgstr "" +msgstr "Actualizar a partir d’un fichièr &POT…" msgid "Sync with Crowdin" msgstr "Sincronizar amb Crowdin" @@ -2127,13 +2127,13 @@ msgid "Check for errors in the translation" msgstr "Verificar las errors dins la traduccion" msgid "Update from code" -msgstr "" +msgstr "Metre a jorn a partir del còdi" msgid "Update from Code" -msgstr "" +msgstr "Metre a jorn a partir del còdi" msgid "Update from source code" -msgstr "" +msgstr "Metre a jorn a partir del còdi font" msgid "Sidebar" msgstr "Panèl lateral" diff --git a/locales/pa.po b/locales/pa.po index 9b7eecfc7a..b5d671dcf2 100644 --- a/locales/pa.po +++ b/locales/pa.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-12-20 10:15\n" +"PO-Revision-Date: 2024-04-21 10:15\n" "Last-Translator: \n" "Language-Team: Punjabi\n" "Language: pa_IN\n" @@ -153,7 +153,7 @@ msgstr "" #, c-format msgid "unsupported version (%s)" -msgstr "" +msgstr "ਅਸਮਰਥਿਤ ਵਰਜਨ (%s)" #. TRANSLATORS: Shown as error if a translation of XLIFF markup is not valid XML msgid "Broken markup in translation string." @@ -827,7 +827,7 @@ msgstr "" #. TRANSLATORS: Tooltip on string ID tag in the editing area, '%s' contains the ID #, c-format msgid "String identifier: %s" -msgstr "" +msgstr "ਸਤਰ ਪਛਾਣਕਰਤਾ: %s" #, c-format msgid "%s Format" diff --git a/locales/pl.po b/locales/pl.po index 66d8ce7e3b..626fae53f0 100644 --- a/locales/pl.po +++ b/locales/pl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-04-15 10:15\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -1883,7 +1883,7 @@ msgid "&Preferences" msgstr "&Ustawienia" msgid "Show string &ID" -msgstr "Pokaż ciąg &identyfikator" +msgstr "Pokaż &identyfikator ciągu" msgid "Show String &ID" msgstr "Pokaż ciąg &identyfikator" diff --git a/locales/ru.po b/locales/ru.po index 3b822c74d5..94fe2050d5 100644 --- a/locales/ru.po +++ b/locales/ru.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-27 10:16\n" +"PO-Revision-Date: 2024-04-26 10:15\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -1684,7 +1684,7 @@ msgid "The translation should start as a sentence." msgstr "Перевод должен начинаться как предложение." msgid "The translation should start with a lowercase character." -msgstr "Перевод должен начинаться со строчного символа." +msgstr "Перевод должен начинаться с маленькой буквы." msgid "Inconsistent whitespace" msgstr "Несогласованные пробелы" diff --git a/locales/sr.po b/locales/sr.po index c386ddef39..85e13d6b67 100644 --- a/locales/sr.po +++ b/locales/sr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-02-05 10:16\n" "Last-Translator: \n" "Language-Team: Serbian (Cyrillic)\n" "Language: sr_SP\n" @@ -2007,7 +2007,7 @@ msgid "&GNU gettext Manual" msgstr "П&риручник за GNU gettext" msgid "&About Poedit" -msgstr "&О Poedit-у" +msgstr "&Основни подаци о Poedit" msgid "&About" msgstr "&О програму" diff --git a/locales/tr.po b/locales/tr.po index a78b2ede58..a83bdc739d 100644 --- a/locales/tr.po +++ b/locales/tr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: poedit\n" "Report-Msgid-Bugs-To: help@poedit.net\n" "POT-Creation-Date: 2023-12-21 18:55+0100\n" -"PO-Revision-Date: 2023-11-17 10:16\n" +"PO-Revision-Date: 2024-02-29 10:16\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -131,7 +131,8 @@ msgstr "" msgid "" "There was a problem formatting the file nicely (but it was saved all right)." msgstr "" -"Dosyayı güzelce biçimlendirmede bir sorun oldu (ama sorunsuz kaydedildi)." +"Dosyanın güzel bir şekilde biçimlendirilmesinde bir sorun oldu (ama sorunsuz " +"kaydedildi)." #, c-format msgid "" @@ -262,7 +263,7 @@ msgid "Not authorized, please sign in again." msgstr "Yetkiniz yok, lütfen tekrar giriş yapın." msgid "Downloading translations is disabled in this project." -msgstr "Bu projede çevirileri indirmek etkisizleştirildi." +msgstr "Bu projede çevirilerin indirilmesi etkisizleştirildi." msgid "Sign In" msgstr "Giriş Yap" @@ -374,8 +375,7 @@ msgstr "&Git" #, c-format msgid "" "Spellchecking is disabled, because the dictionary for %s isn’t installed." -msgstr "" -"%s için sözlük kurulmamış olduğundan yazım denetimi devre dışı bırakıldı." +msgstr "%s için sözlük yüklü olmadığından yazım denetimi etkisizleştirildi." msgid "Install" msgstr "Yükle" @@ -1248,7 +1248,7 @@ msgstr "" "kullanmalısınız. " msgid "Appearance" -msgstr "Görünüm" +msgstr "Görünüş" msgid "Use custom list font:" msgstr "Özel liste yazı tipini kullan:" diff --git a/packages.config b/packages.config index a786f48b05..97eef751e6 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/Makefile.am b/src/Makefile.am index 95ea5528e8..a91df74504 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -82,7 +82,7 @@ poedit_SOURCES = \ nodist_poedit_SOURCES = compiled_xrc.cpp poedit_LDADD = $(WX_LIBS) $(LUCENE_LIBS) $(CLD2_LIBS) $(PUGIXML_LIBS) $(ACCOUNTS_SUPPORT_LIBS) \ - $(BOOST_LDFLAGS) $(BOOST_THREAD_LIB) $(BOOST_REGEX_LIB) $(BOOST_SYSTEM_LIB) + $(BOOST_LDFLAGS) $(BOOST_THREAD_LIB) $(BOOST_SYSTEM_LIB) XRC_RESOURCES = \ $(srcdir)/resources/comment.xrc \ diff --git a/src/catalog.cpp b/src/catalog.cpp index 1d0695a80f..f98c793ce1 100644 --- a/src/catalog.cpp +++ b/src/catalog.cpp @@ -1155,6 +1155,9 @@ void Catalog::SideloadSourceDataFromReferenceFile(CatalogPtr ref) continue; auto& rdata = *ri->second; + if (rdata.GetTranslation().empty()) + continue; + auto d = std::make_shared(); d->source_string = rdata.GetTranslation(); if (rdata.HasPlural()) diff --git a/src/customcontrols.cpp b/src/customcontrols.cpp index ac532ef8ec..4c9816cef7 100644 --- a/src/customcontrols.cpp +++ b/src/customcontrols.cpp @@ -224,6 +224,18 @@ bool AutoWrappingText::InformFirstDirection(int direction, int size, int /*avail return false; } +#ifdef __WXOSX__ +wxSize AutoWrappingText::DoGetBestSize() const +{ + auto sz = wxStaticText::DoGetBestSize(); + // AppKit's intristicContentSize calculation is sometimes subtly wrong in our use case, + // hiding the last line of wrapped text. It seems to be off-by-two error only: + if (sz.y > 0) + sz.y += 2; + return sz; +} +#endif + void AutoWrappingText::OnSize(wxSizeEvent& e) { e.Skip(); diff --git a/src/customcontrols.h b/src/customcontrols.h index 325a656741..4246ab9d4f 100644 --- a/src/customcontrols.h +++ b/src/customcontrols.h @@ -70,6 +70,10 @@ class AutoWrappingText : public wxStaticText void OnSize(wxSizeEvent& e); bool RewrapForWidth(int width); +#ifdef __WXOSX__ + wxSize DoGetBestSize() const override; +#endif + wxString m_text; int m_wrapWidth; Language m_language; @@ -133,7 +137,7 @@ class ExplanationLabel : public AutoWrappingText ExplanationLabel(wxWindow *parent, const wxString& label); #if defined(__WXOSX__) - static const int CHECKBOX_INDENT = 19; + static const int CHECKBOX_INDENT = 21; #elif defined(__WXMSW__) static const int CHECKBOX_INDENT = 17; #elif defined(__WXGTK__) diff --git a/src/gexecute.cpp b/src/gexecute.cpp index e7cefc6151..ea0794689c 100644 --- a/src/gexecute.cpp +++ b/src/gexecute.cpp @@ -41,6 +41,7 @@ #include "concurrency.h" #include "gexecute.h" #include "errors.h" +#include "str_helpers.h" namespace { @@ -83,7 +84,42 @@ wxString GetPathToAuxBinary(const wxString& program) #endif // __WXOSX__ || __WXMSW__ -bool ReadOutput(wxInputStream& s, wxArrayString& out) +struct CommandInvocation +{ + CommandInvocation(const wxString& command, const wxString& arguments) : exe(command), args(arguments) + { + } + + CommandInvocation(const wxString& cmdline) + { + exe = cmdline.BeforeFirst(_T(' ')); + args = cmdline.Mid(exe.length() + 1); + } + + wxString cmdline() const + { +#if defined(__WXOSX__) || defined(__WXMSW__) + const auto fullexe = GetPathToAuxBinary(exe); +#else + const auto& fullexe(exe); +#endif + return args.empty() ? fullexe : fullexe + " " + args; + } + + wxString exe; + wxString args; +}; + + +struct ProcessOutput +{ + long return_code = -1; + std::vector std_out; + std::vector std_err; +}; + + +bool ReadOutput(wxInputStream& s, std::vector& out) { // the stream could be already at EOF or in wxSTREAM_BROKEN_PIPE state s.Reset(); @@ -115,49 +151,98 @@ bool ReadOutput(wxInputStream& s, wxArrayString& out) return true; } -std::pair DoExecuteGettextImpl(const wxString& cmdline_) -{ - wxArrayString gstderr; - wxExecuteEnv env; - wxString cmdline(cmdline_); - -#if defined(__WXOSX__) || defined(__WXMSW__) - wxString binary = cmdline.BeforeFirst(_T(' ')); - cmdline = GetPathToAuxBinary(binary) + cmdline.Mid(binary.length()); - wxGetEnvMap(&env.env); - env.env["OUTPUT_CHARSET"] = "UTF-8"; - wxString lang = wxTranslations::Get()->GetBestTranslation("gettext-tools"); - if ( lang.starts_with("en@") ) - lang = "en"; // don't want things like en@blockquot - if ( !lang.empty() ) - env.env["LANG"] = lang; -#endif // __WXOSX__ || __WXMSW__ +ProcessOutput ExecuteCommandAndCaptureOutput(const CommandInvocation& cmd, const wxExecuteEnv *env) +{ + ProcessOutput pout; + auto cmdline = cmd.cmdline(); wxLogTrace("poedit.execute", "executing: %s", cmdline.c_str()); wxScopedPtr process(new wxProcess); process->Redirect(); - long retcode = wxExecute(cmdline, wxEXEC_BLOCK | wxEXEC_NODISABLE | wxEXEC_NOEVENTS, process.get(), &env); - if (retcode != 0) + pout.return_code = wxExecute(cmdline, wxEXEC_BLOCK | wxEXEC_NODISABLE | wxEXEC_NOEVENTS, process.get(), env); + if (pout.return_code != 0) { - wxLogTrace("poedit.execute", " execution of command failed with exit code %d: %s", (int)retcode, cmdline.c_str()); + wxLogTrace("poedit.execute", " execution of command failed with exit code %d: %s", (int)pout.return_code, cmdline.c_str()); } - wxInputStream *std_err = process->GetErrorStream(); - if ( std_err && !ReadOutput(*std_err, gstderr) ) - retcode = -1; + wxInputStream *std_out = process->GetInputStream(); + if ( std_out && !ReadOutput(*std_out, pout.std_out) ) + pout.return_code = -1; - if ( retcode == -1 ) + wxInputStream *std_err = process->GetErrorStream(); + if ( std_err && !ReadOutput(*std_err, pout.std_err) ) + pout.return_code = -1; + + if ( pout.return_code == -1 ) { BOOST_THROW_EXCEPTION(Exception(wxString::Format(_("Cannot execute program: %s"), cmdline.c_str()))); } - return std::make_pair(retcode, gstderr); + return pout; +} + + +#define GETTEXT_VERSION_NUM(x, y, z) ((x*1000*1000) + (y*1000) + (z)) + +// Determine gettext version, return it in the form of XXXYYYZZZ number for version x.y.z +uint32_t GetGettextVersion() +{ + static uint32_t s_version = 0; + if (!s_version) + { + // set old enough fallback version + s_version = GETTEXT_VERSION_NUM(0, 18, 0); + + // then determine actual version + CommandInvocation msgfmt("msgfmt", "--version"); + auto p = ExecuteCommandAndCaptureOutput(msgfmt, nullptr); + if (p.return_code == 0 && p.std_out.size() > 1) + { + auto line = str::to_utf8(p.std_out[0]); + std::smatch m; + if (std::regex_match(line, m, std::regex(R"(.* (([0-9]+)\.([0-9]+)(\.([0-9]+))?)$)"))) + { + const int x = std::stoi(m.str(2)); + const int y = std::stoi(m.str(3)); + const int z = m[5].matched ? std::stoi(m.str(5)) : 0; + s_version = GETTEXT_VERSION_NUM(x, y, z); + } + } + } + return s_version; +} + + +ProcessOutput DoExecuteGettextImpl(CommandInvocation cmd) +{ + // gettext 0.22 started converting MO files to UTF-8 by default. Don't do that. + // See https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=commit;h=5412a4f79929004cb6db15d545e07dc953330e8d + if (cmd.exe == "msgfmt" && GetGettextVersion() >= GETTEXT_VERSION_NUM(0, 22, 0)) + { + cmd.args = "--no-convert " + cmd.args; + } + +#if defined(__WXOSX__) || defined(__WXMSW__) + wxExecuteEnv env; + wxGetEnvMap(&env.env); + env.env["OUTPUT_CHARSET"] = "UTF-8"; + + wxString lang = wxTranslations::Get()->GetBestTranslation("gettext-tools"); + if ( lang.starts_with("en@") ) + lang = "en"; // don't want things like en@blockquot + if ( !lang.empty() ) + env.env["LANG"] = lang; + return ExecuteCommandAndCaptureOutput(cmd, &env); +#else // Unix + return ExecuteCommandAndCaptureOutput(cmd, nullptr); +#endif } -std::pair DoExecuteGettext(const wxString& cmdline) + +ProcessOutput DoExecuteGettext(const wxString& cmdline) { #if wxUSE_GUI if (wxThread::IsMain()) @@ -194,12 +279,10 @@ void LogUnrecognizedError(const wxString& err) bool ExecuteGettext(const wxString& cmdline) { - wxArrayString gstderr; - long retcode; - std::tie(retcode, gstderr) = DoExecuteGettext(cmdline); + auto output = DoExecuteGettext(cmdline); wxString pending; - for (auto& ln: gstderr) + for (auto& ln: output.std_err) { if (ln.empty()) continue; @@ -221,19 +304,17 @@ bool ExecuteGettext(const wxString& cmdline) if (!pending.empty()) LogUnrecognizedError(pending); - return retcode == 0; + return output.return_code == 0; } bool ExecuteGettextAndParseOutput(const wxString& cmdline, GettextErrors& errors) { - wxArrayString gstderr; - long retcode; - std::tie(retcode, gstderr) = DoExecuteGettext(cmdline); + auto output = DoExecuteGettext(cmdline); static const std::wregex RE_ERROR(L".*\\.po:([0-9]+)(:[0-9]+)?: (.*)"); - for (const auto& ewx: gstderr) + for (const auto& ewx: output.std_err) { const auto e = ewx.ToStdWstring(); wxLogTrace("poedit", " stderr: %s", e.c_str()); @@ -259,7 +340,7 @@ bool ExecuteGettextAndParseOutput(const wxString& cmdline, GettextErrors& errors } } - return retcode == 0; + return output.return_code == 0; }