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;
}