From d85572450f19b80279b5c8a222b850747df2633c Mon Sep 17 00:00:00 2001 From: Gianfranco Costamagna Date: Sun, 23 Oct 2016 00:04:27 +0100 Subject: [PATCH 1/1] Import poedit_1.8.11.orig.tar.gz [dgit import orig poedit_1.8.11.orig.tar.gz] --- AUTHORS | 235 + COPYING | 18 + Makefile.am | 12 + Makefile.in | 887 ++ NEWS | 912 ++ README | 140 + aclocal.m4 | 1354 +++ admin/ax_boost_base.m4 | 285 + admin/ax_boost_iostreams.m4 | 116 + admin/ax_boost_regex.m4 | 111 + admin/ax_boost_system.m4 | 120 + admin/ax_boost_thread.m4 | 149 + admin/ax_cxx_check_flag.m4 | 84 + admin/ax_cxx_compile_stdcxx_11.m4 | 165 + admin/berkeley_db.m4 | 96 + admin/compile | 347 + admin/config.guess | 1558 +++ admin/config.sub | 1791 ++++ admin/depcomp | 791 ++ admin/install-sh | 527 + admin/missing | 215 + admin/wxwin.m4 | 1059 ++ artwork/CrowdinLogo.png | Bin 0 -> 6321 bytes artwork/Makefile.am | 71 + artwork/Makefile.in | 866 ++ artwork/PoeditWelcome.png | Bin 0 -> 3907 bytes artwork/README | 22 + artwork/SuggestionError.png | Bin 0 -> 240 bytes artwork/SuggestionTM.png | Bin 0 -> 190 bytes artwork/linux/appicon/16x16/apps/poedit.png | Bin 0 -> 677 bytes artwork/linux/appicon/22x22/apps/poedit.png | Bin 0 -> 1523 bytes artwork/linux/appicon/24x24/apps/poedit.png | Bin 0 -> 1546 bytes artwork/linux/appicon/32x32/apps/poedit.png | Bin 0 -> 2606 bytes artwork/linux/appicon/48x48/apps/poedit.png | Bin 0 -> 4020 bytes .../linux/appicon/scalable/apps/poedit.svg | 600 ++ artwork/linux/document-new.png | Bin 0 -> 692 bytes artwork/linux/document-open.png | Bin 0 -> 919 bytes artwork/linux/document-properties.png | Bin 0 -> 688 bytes artwork/linux/document-save.png | Bin 0 -> 1150 bytes artwork/linux/edit-delete.png | Bin 0 -> 1211 bytes .../mimetypes/poedit-translation-generic.png | Bin 0 -> 677 bytes .../mimetypes/poedit-translation-generic.png | Bin 0 -> 1070 bytes .../mimetypes/poedit-translation-generic.png | Bin 0 -> 1071 bytes .../mimetypes/poedit-translation-generic.png | Bin 0 -> 1423 bytes .../mimetypes/poedit-translation-generic.svg | 497 + artwork/linux/poedit-fuzzy.png | Bin 0 -> 1507 bytes artwork/linux/poedit-sync.png | Bin 0 -> 3074 bytes artwork/linux/poedit-update.png | Bin 0 -> 1464 bytes artwork/linux/poedit-validate.png | Bin 0 -> 708 bytes artwork/linux/sidebar.png | Bin 0 -> 640 bytes artwork/poedit-status-automatic.png | Bin 0 -> 667 bytes artwork/poedit-status-bookmark.png | Bin 0 -> 215 bytes artwork/poedit-status-cat-mid.png | Bin 0 -> 287 bytes artwork/poedit-status-cat-no.png | Bin 0 -> 287 bytes artwork/poedit-status-cat-ok.png | Bin 0 -> 295 bytes artwork/poedit-status-comment.png | Bin 0 -> 413 bytes artwork/poedit-status-nothing.png | Bin 0 -> 140 bytes artwork/window-close.png | Bin 0 -> 215 bytes bootstrap | 23 + configure | 9501 +++++++++++++++++ configure.ac | 332 + docs/Makefile.am | 4 + docs/Makefile.in | 529 + docs/generate-docs.make | 15 + docs/man_asciidoc.conf | 13 + docs/man_fix.xsl | 24 + docs/poedit.1 | 73 + docs/poedit_man.txt | 40 + locales/Makefile.am | 80 + locales/Makefile.in | 527 + locales/README | 9 + locales/an.mo | Bin 0 -> 47404 bytes locales/an.po | 1978 ++++ locales/ar.mo | Bin 0 -> 53955 bytes locales/ar.po | 1949 ++++ locales/az.mo | Bin 0 -> 47738 bytes locales/az.po | 1961 ++++ locales/be.mo | Bin 0 -> 60515 bytes locales/be.po | 1967 ++++ locales/be@latin.mo | Bin 0 -> 9593 bytes locales/be@latin.po | 2004 ++++ locales/bg.mo | Bin 0 -> 58787 bytes locales/bg.po | 1945 ++++ locales/bs.mo | Bin 0 -> 45697 bytes locales/bs.po | 1969 ++++ locales/ca.mo | Bin 0 -> 47339 bytes locales/ca.po | 1970 ++++ locales/ckb.mo | Bin 0 -> 33758 bytes locales/ckb.po | 1887 ++++ locales/co.mo | Bin 0 -> 47947 bytes locales/co.po | 1972 ++++ locales/cs.mo | Bin 0 -> 47148 bytes locales/cs.po | 1966 ++++ locales/da.mo | Bin 0 -> 44876 bytes locales/da.po | 1953 ++++ locales/de.mo | Bin 0 -> 48164 bytes locales/de.po | 1986 ++++ locales/el.mo | Bin 0 -> 45650 bytes locales/el.po | 1929 ++++ locales/en_GB.mo | Bin 0 -> 43394 bytes locales/en_GB.po | 1947 ++++ locales/es.mo | Bin 0 -> 47080 bytes locales/es.po | 1967 ++++ locales/et.mo | Bin 0 -> 23453 bytes locales/et.po | 1872 ++++ locales/eu.mo | Bin 0 -> 45214 bytes locales/eu.po | 1957 ++++ locales/fa.mo | Bin 0 -> 29366 bytes locales/fa.po | 1860 ++++ locales/fi.mo | Bin 0 -> 46223 bytes locales/fi.po | 1958 ++++ locales/fr.mo | Bin 0 -> 48628 bytes locales/fr.po | 1988 ++++ locales/gl.mo | Bin 0 -> 46756 bytes locales/gl.po | 1968 ++++ locales/he.mo | Bin 0 -> 50679 bytes locales/he.po | 1934 ++++ locales/hr.mo | Bin 0 -> 33896 bytes locales/hr.po | 1932 ++++ locales/hu.mo | Bin 0 -> 47991 bytes locales/hu.po | 1964 ++++ locales/hy.mo | Bin 0 -> 57703 bytes locales/hy.po | 1943 ++++ locales/id.mo | Bin 0 -> 44953 bytes locales/id.po | 1955 ++++ locales/is.mo | Bin 0 -> 44692 bytes locales/is.po | 1947 ++++ locales/it.mo | Bin 0 -> 47256 bytes locales/it.po | 1988 ++++ locales/ja.mo | Bin 0 -> 50147 bytes locales/ja.po | 1939 ++++ locales/ka.mo | Bin 0 -> 32934 bytes locales/ka.po | 1885 ++++ locales/kab.mo | Bin 0 -> 45263 bytes locales/kab.po | 1948 ++++ locales/kk.mo | Bin 0 -> 57787 bytes locales/kk.po | 1944 ++++ locales/ko.mo | Bin 0 -> 47446 bytes locales/ko.po | 1928 ++++ locales/lt.mo | Bin 0 -> 35330 bytes locales/lt.po | 1916 ++++ locales/lv.mo | Bin 0 -> 21503 bytes locales/lv.po | 1887 ++++ locales/ms.mo | Bin 0 -> 44936 bytes locales/ms.po | 1954 ++++ locales/nb.mo | Bin 0 -> 44315 bytes locales/nb.po | 1949 ++++ locales/nl.mo | Bin 0 -> 46816 bytes locales/nl.po | 1978 ++++ locales/oc.mo | Bin 0 -> 47981 bytes locales/oc.po | 1988 ++++ locales/pa.mo | Bin 0 -> 31510 bytes locales/pa.po | 1855 ++++ locales/pl.mo | Bin 0 -> 47669 bytes locales/pl.po | 1982 ++++ locales/poedit.pot | 1841 ++++ locales/pt_BR.mo | Bin 0 -> 46767 bytes locales/pt_BR.po | 1965 ++++ locales/pt_PT.mo | Bin 0 -> 46527 bytes locales/pt_PT.po | 1967 ++++ locales/ro.mo | Bin 0 -> 26047 bytes locales/ro.po | 1908 ++++ locales/ru.mo | Bin 0 -> 59691 bytes locales/ru.po | 1965 ++++ locales/sk.mo | Bin 0 -> 47269 bytes locales/sk.po | 1967 ++++ locales/sl.mo | Bin 0 -> 35121 bytes locales/sl.po | 1911 ++++ locales/sq.mo | Bin 0 -> 47170 bytes locales/sq.po | 1969 ++++ locales/sr.mo | Bin 0 -> 57310 bytes locales/sr.po | 1951 ++++ locales/sv.mo | Bin 0 -> 45564 bytes locales/sv.po | 1959 ++++ locales/tg.mo | Bin 0 -> 61591 bytes locales/tg.po | 1979 ++++ locales/th.mo | Bin 0 -> 18189 bytes locales/th.po | 1848 ++++ locales/tr.mo | Bin 0 -> 46223 bytes locales/tr.po | 1960 ++++ locales/uk.mo | Bin 0 -> 59091 bytes locales/uk.po | 1961 ++++ locales/uz.mo | Bin 0 -> 47038 bytes locales/uz.po | 1968 ++++ locales/vi.mo | Bin 0 -> 49852 bytes locales/vi.po | 1947 ++++ locales/zh_CN.mo | Bin 0 -> 43007 bytes locales/zh_CN.po | 1896 ++++ locales/zh_TW.mo | Bin 0 -> 42948 bytes locales/zh_TW.po | 1896 ++++ poedit-uri.desktop | 8 + poedit.appdata.xml | 35 + poedit.desktop | 25 + src/Makefile.am | 80 + src/Makefile.in | 937 ++ src/ThreadPool.h | 132 + src/attentionbar.cpp | 290 + src/attentionbar.h | 163 + src/cat_sorting.cpp | 208 + src/cat_sorting.h | 92 + src/catalog.cpp | 2700 +++++ src/catalog.h | 867 ++ src/chooselang.cpp | 94 + src/chooselang.h | 48 + src/commentdlg.cpp | 84 + src/commentdlg.h | 63 + src/concurrency.cpp | 110 + src/concurrency.h | 238 + src/crowdin_client.cpp | 317 + src/crowdin_client.h | 137 + src/crowdin_gui.cpp | 646 ++ src/crowdin_gui.h | 109 + src/customcontrols.cpp | 386 + src/customcontrols.h | 164 + src/digger.cpp | 273 + src/digger.h | 144 + src/edapp.cpp | 1431 +++ src/edapp.h | 157 + src/edframe.cpp | 3924 +++++++ src/edframe.h | 409 + src/edlistctrl.cpp | 597 ++ src/edlistctrl.h | 209 + src/errorbar.cpp | 89 + src/errorbar.h | 51 + src/errors.h | 92 + src/export_html.cpp | 378 + src/extractor.cpp | 190 + src/extractor.h | 111 + src/fileviewer.cpp | 413 + src/fileviewer.h | 79 + src/findframe.cpp | 613 ++ src/findframe.h | 110 + src/gexecute.cpp | 230 + src/gexecute.h | 56 + src/hidpi.cpp | 105 + src/hidpi.h | 85 + src/http_client.cpp | 115 + src/http_client.h | 275 + src/http_client_casablanca.cpp | 456 + src/icons.cpp | 137 + src/icons.h | 45 + src/keychain/keytar.h | 42 + src/keychain/keytar_posix.cc | 111 + src/language.cpp | 559 + src/language.h | 178 + src/language_impl_legacy.h | 413 + src/language_impl_plurals.h | 162 + src/languagectrl.cpp | 205 + src/languagectrl.h | 83 + src/logcapture.h | 69 + src/main_toolbar.h | 51 + src/manager.cpp | 501 + src/manager.h | 94 + src/pluralforms/COPYING | 53 + src/pluralforms/pl_evaluate.cpp | 594 ++ src/pluralforms/pl_evaluate.h | 147 + src/prefsdlg.cpp | 1004 ++ src/prefsdlg.h | 42 + src/progressinfo.cpp | 109 + src/progressinfo.h | 68 + src/propertiesdlg.cpp | 814 ++ src/propertiesdlg.h | 88 + src/resources/comment.xrc | 60 + src/resources/manager.xrc | 112 + src/resources/menus.xrc | 382 + src/resources/prefs.xrc | 154 + src/resources/progress.xrc | 38 + src/resources/properties.xrc | 269 + src/resources/summary.xrc | 91 + src/resources/toolbar.xrc | 62 + src/sidebar.cpp | 857 ++ src/sidebar.h | 209 + src/spellchecking.cpp | 191 + src/spellchecking.h | 66 + src/str_helpers.h | 236 + src/summarydlg.cpp | 74 + src/summarydlg.h | 54 + src/syntaxhighlighter.cpp | 81 + src/syntaxhighlighter.h | 61 + src/text_control.cpp | 836 ++ src/text_control.h | 172 + src/tm/dump_legacy_tm.cpp | 427 + src/tm/suggestions.cpp | 103 + src/tm/suggestions.h | 187 + src/tm/tm_migrate.cpp | 309 + src/tm/transmem.cpp | 700 ++ src/tm/transmem.h | 151 + src/unicode_helpers.cpp | 139 + src/unicode_helpers.h | 111 + src/utility.cpp | 447 + src/utility.h | 302 + src/version.h | 32 + src/welcomescreen.cpp | 294 + src/welcomescreen.h | 58 + src/wx/main_toolbar.cpp | 109 + src/wx_backports/activityindicator.h | 56 + src/wx_backports/gtk_activityindicator.h | 60 + src/wx_backports/nativewin.h | 64 + src/wx_backports/wx_gtk_activityindicator.cpp | 163 + src/wx_backports/wx_gtk_nativewin.cpp | 74 + 300 files changed, 172710 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 aclocal.m4 create mode 100644 admin/ax_boost_base.m4 create mode 100644 admin/ax_boost_iostreams.m4 create mode 100644 admin/ax_boost_regex.m4 create mode 100644 admin/ax_boost_system.m4 create mode 100644 admin/ax_boost_thread.m4 create mode 100644 admin/ax_cxx_check_flag.m4 create mode 100644 admin/ax_cxx_compile_stdcxx_11.m4 create mode 100644 admin/berkeley_db.m4 create mode 100755 admin/compile create mode 100755 admin/config.guess create mode 100755 admin/config.sub create mode 100755 admin/depcomp create mode 100755 admin/install-sh create mode 100755 admin/missing create mode 100644 admin/wxwin.m4 create mode 100644 artwork/CrowdinLogo.png create mode 100644 artwork/Makefile.am create mode 100644 artwork/Makefile.in create mode 100644 artwork/PoeditWelcome.png create mode 100644 artwork/README create mode 100644 artwork/SuggestionError.png create mode 100644 artwork/SuggestionTM.png create mode 100644 artwork/linux/appicon/16x16/apps/poedit.png create mode 100644 artwork/linux/appicon/22x22/apps/poedit.png create mode 100644 artwork/linux/appicon/24x24/apps/poedit.png create mode 100644 artwork/linux/appicon/32x32/apps/poedit.png create mode 100644 artwork/linux/appicon/48x48/apps/poedit.png create mode 100644 artwork/linux/appicon/scalable/apps/poedit.svg create mode 100644 artwork/linux/document-new.png create mode 100644 artwork/linux/document-open.png create mode 100644 artwork/linux/document-properties.png create mode 100644 artwork/linux/document-save.png create mode 100644 artwork/linux/edit-delete.png create mode 100644 artwork/linux/mime-gnome/16x16/mimetypes/poedit-translation-generic.png create mode 100644 artwork/linux/mime-gnome/22x22/mimetypes/poedit-translation-generic.png create mode 100644 artwork/linux/mime-gnome/24x24/mimetypes/poedit-translation-generic.png create mode 100644 artwork/linux/mime-gnome/32x32/mimetypes/poedit-translation-generic.png create mode 100644 artwork/linux/mime-gnome/scalable/mimetypes/poedit-translation-generic.svg create mode 100644 artwork/linux/poedit-fuzzy.png create mode 100644 artwork/linux/poedit-sync.png create mode 100644 artwork/linux/poedit-update.png create mode 100644 artwork/linux/poedit-validate.png create mode 100644 artwork/linux/sidebar.png create mode 100644 artwork/poedit-status-automatic.png create mode 100644 artwork/poedit-status-bookmark.png create mode 100644 artwork/poedit-status-cat-mid.png create mode 100644 artwork/poedit-status-cat-no.png create mode 100644 artwork/poedit-status-cat-ok.png create mode 100644 artwork/poedit-status-comment.png create mode 100644 artwork/poedit-status-nothing.png create mode 100644 artwork/window-close.png create mode 100755 bootstrap create mode 100755 configure create mode 100644 configure.ac create mode 100644 docs/Makefile.am create mode 100644 docs/Makefile.in create mode 100644 docs/generate-docs.make create mode 100644 docs/man_asciidoc.conf create mode 100644 docs/man_fix.xsl create mode 100644 docs/poedit.1 create mode 100644 docs/poedit_man.txt create mode 100644 locales/Makefile.am create mode 100644 locales/Makefile.in create mode 100644 locales/README create mode 100644 locales/an.mo create mode 100644 locales/an.po create mode 100644 locales/ar.mo create mode 100644 locales/ar.po create mode 100644 locales/az.mo create mode 100644 locales/az.po create mode 100644 locales/be.mo create mode 100644 locales/be.po create mode 100644 locales/be@latin.mo create mode 100644 locales/be@latin.po create mode 100644 locales/bg.mo create mode 100644 locales/bg.po create mode 100644 locales/bs.mo create mode 100644 locales/bs.po create mode 100644 locales/ca.mo create mode 100644 locales/ca.po create mode 100644 locales/ckb.mo create mode 100644 locales/ckb.po create mode 100644 locales/co.mo create mode 100644 locales/co.po create mode 100644 locales/cs.mo create mode 100644 locales/cs.po create mode 100644 locales/da.mo create mode 100644 locales/da.po create mode 100644 locales/de.mo create mode 100644 locales/de.po create mode 100644 locales/el.mo create mode 100644 locales/el.po create mode 100644 locales/en_GB.mo create mode 100644 locales/en_GB.po create mode 100644 locales/es.mo create mode 100644 locales/es.po create mode 100644 locales/et.mo create mode 100644 locales/et.po create mode 100644 locales/eu.mo create mode 100644 locales/eu.po create mode 100644 locales/fa.mo create mode 100644 locales/fa.po create mode 100644 locales/fi.mo create mode 100644 locales/fi.po create mode 100644 locales/fr.mo create mode 100644 locales/fr.po create mode 100644 locales/gl.mo create mode 100644 locales/gl.po create mode 100644 locales/he.mo create mode 100644 locales/he.po create mode 100644 locales/hr.mo create mode 100644 locales/hr.po create mode 100644 locales/hu.mo create mode 100644 locales/hu.po create mode 100644 locales/hy.mo create mode 100644 locales/hy.po create mode 100644 locales/id.mo create mode 100644 locales/id.po create mode 100644 locales/is.mo create mode 100644 locales/is.po create mode 100644 locales/it.mo create mode 100644 locales/it.po create mode 100644 locales/ja.mo create mode 100644 locales/ja.po create mode 100644 locales/ka.mo create mode 100644 locales/ka.po create mode 100644 locales/kab.mo create mode 100644 locales/kab.po create mode 100644 locales/kk.mo create mode 100644 locales/kk.po create mode 100644 locales/ko.mo create mode 100644 locales/ko.po create mode 100644 locales/lt.mo create mode 100644 locales/lt.po create mode 100644 locales/lv.mo create mode 100644 locales/lv.po create mode 100644 locales/ms.mo create mode 100644 locales/ms.po create mode 100644 locales/nb.mo create mode 100644 locales/nb.po create mode 100644 locales/nl.mo create mode 100644 locales/nl.po create mode 100644 locales/oc.mo create mode 100644 locales/oc.po create mode 100644 locales/pa.mo create mode 100644 locales/pa.po create mode 100644 locales/pl.mo create mode 100644 locales/pl.po create mode 100644 locales/poedit.pot create mode 100644 locales/pt_BR.mo create mode 100644 locales/pt_BR.po create mode 100644 locales/pt_PT.mo create mode 100644 locales/pt_PT.po create mode 100644 locales/ro.mo create mode 100644 locales/ro.po create mode 100644 locales/ru.mo create mode 100644 locales/ru.po create mode 100644 locales/sk.mo create mode 100644 locales/sk.po create mode 100644 locales/sl.mo create mode 100644 locales/sl.po create mode 100644 locales/sq.mo create mode 100644 locales/sq.po create mode 100644 locales/sr.mo create mode 100644 locales/sr.po create mode 100644 locales/sv.mo create mode 100644 locales/sv.po create mode 100644 locales/tg.mo create mode 100644 locales/tg.po create mode 100644 locales/th.mo create mode 100644 locales/th.po create mode 100644 locales/tr.mo create mode 100644 locales/tr.po create mode 100644 locales/uk.mo create mode 100644 locales/uk.po create mode 100644 locales/uz.mo create mode 100644 locales/uz.po create mode 100644 locales/vi.mo create mode 100644 locales/vi.po create mode 100644 locales/zh_CN.mo create mode 100644 locales/zh_CN.po create mode 100644 locales/zh_TW.mo create mode 100644 locales/zh_TW.po create mode 100644 poedit-uri.desktop create mode 100644 poedit.appdata.xml create mode 100644 poedit.desktop create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/ThreadPool.h create mode 100644 src/attentionbar.cpp create mode 100644 src/attentionbar.h create mode 100644 src/cat_sorting.cpp create mode 100644 src/cat_sorting.h create mode 100644 src/catalog.cpp create mode 100644 src/catalog.h create mode 100644 src/chooselang.cpp create mode 100644 src/chooselang.h create mode 100644 src/commentdlg.cpp create mode 100644 src/commentdlg.h create mode 100644 src/concurrency.cpp create mode 100644 src/concurrency.h create mode 100644 src/crowdin_client.cpp create mode 100644 src/crowdin_client.h create mode 100644 src/crowdin_gui.cpp create mode 100644 src/crowdin_gui.h create mode 100644 src/customcontrols.cpp create mode 100644 src/customcontrols.h create mode 100644 src/digger.cpp create mode 100644 src/digger.h create mode 100644 src/edapp.cpp create mode 100644 src/edapp.h create mode 100644 src/edframe.cpp create mode 100644 src/edframe.h create mode 100644 src/edlistctrl.cpp create mode 100644 src/edlistctrl.h create mode 100644 src/errorbar.cpp create mode 100644 src/errorbar.h create mode 100644 src/errors.h create mode 100644 src/export_html.cpp create mode 100644 src/extractor.cpp create mode 100644 src/extractor.h create mode 100644 src/fileviewer.cpp create mode 100644 src/fileviewer.h create mode 100644 src/findframe.cpp create mode 100644 src/findframe.h create mode 100644 src/gexecute.cpp create mode 100644 src/gexecute.h create mode 100644 src/hidpi.cpp create mode 100644 src/hidpi.h create mode 100644 src/http_client.cpp create mode 100644 src/http_client.h create mode 100644 src/http_client_casablanca.cpp create mode 100644 src/icons.cpp create mode 100644 src/icons.h create mode 100644 src/keychain/keytar.h create mode 100644 src/keychain/keytar_posix.cc create mode 100644 src/language.cpp create mode 100644 src/language.h create mode 100644 src/language_impl_legacy.h create mode 100644 src/language_impl_plurals.h create mode 100644 src/languagectrl.cpp create mode 100644 src/languagectrl.h create mode 100644 src/logcapture.h create mode 100644 src/main_toolbar.h create mode 100644 src/manager.cpp create mode 100644 src/manager.h create mode 100644 src/pluralforms/COPYING create mode 100644 src/pluralforms/pl_evaluate.cpp create mode 100644 src/pluralforms/pl_evaluate.h create mode 100644 src/prefsdlg.cpp create mode 100644 src/prefsdlg.h create mode 100644 src/progressinfo.cpp create mode 100644 src/progressinfo.h create mode 100644 src/propertiesdlg.cpp create mode 100644 src/propertiesdlg.h create mode 100644 src/resources/comment.xrc create mode 100644 src/resources/manager.xrc create mode 100644 src/resources/menus.xrc create mode 100644 src/resources/prefs.xrc create mode 100644 src/resources/progress.xrc create mode 100644 src/resources/properties.xrc create mode 100644 src/resources/summary.xrc create mode 100644 src/resources/toolbar.xrc create mode 100644 src/sidebar.cpp create mode 100644 src/sidebar.h create mode 100644 src/spellchecking.cpp create mode 100644 src/spellchecking.h create mode 100644 src/str_helpers.h create mode 100644 src/summarydlg.cpp create mode 100644 src/summarydlg.h create mode 100644 src/syntaxhighlighter.cpp create mode 100644 src/syntaxhighlighter.h create mode 100644 src/text_control.cpp create mode 100644 src/text_control.h create mode 100644 src/tm/dump_legacy_tm.cpp create mode 100644 src/tm/suggestions.cpp create mode 100644 src/tm/suggestions.h create mode 100644 src/tm/tm_migrate.cpp create mode 100644 src/tm/transmem.cpp create mode 100644 src/tm/transmem.h create mode 100644 src/unicode_helpers.cpp create mode 100644 src/unicode_helpers.h create mode 100644 src/utility.cpp create mode 100644 src/utility.h create mode 100644 src/version.h create mode 100644 src/welcomescreen.cpp create mode 100644 src/welcomescreen.h create mode 100644 src/wx/main_toolbar.cpp create mode 100644 src/wx_backports/activityindicator.h create mode 100644 src/wx_backports/gtk_activityindicator.h create mode 100644 src/wx_backports/nativewin.h create mode 100644 src/wx_backports/wx_gtk_activityindicator.cpp create mode 100644 src/wx_backports/wx_gtk_nativewin.cpp diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..6828b1c --- /dev/null +++ b/AUTHORS @@ -0,0 +1,235 @@ +Maintainer: + Vaclav Slavik + +Patches: + Olivier Sannier + Stefan Kowski + Christophe Hermier + Frederic Giudicelli + Tim Dijkstra + Tim Kosse + Sergio Talens-Oliag + Guido Flohr + Shane Harper + David Fraser + Vadim Berezniker + Marcin Floryan + Stanislav Petrakov + Byrial Jensen + +Translations: + Traditional Chinese: Leo Liaw + Ying-Chieh Liao + Jedi + Xingyu Wang + Jie Luo + Cheng-Chia Tseng + Simplified Chinese: 肖业平 + Leo Liaw + Han Guokai + Luo Jie + Wang Jian Guo + Christopher Meng + Alan Luo + Croatian: Renato Pavicic + Martin Bagić + Czech: Vaclav Slavik + Jindřich Å esták + Dutch: Patrick Hubers + Kristof Bal + Pjotr Kan + Thomas De Rocker + Pjotr Vertaalt + Estonian: Joosep-Georg Jarvemaa + Marko Silluste + Mattias Põldaru + French: Lionel Allorge + Guy Clotilde + Nicolas Boos + Jean-Michel Poure + Jean-Christophe Gigogne + Jonathan Ernst + Maximilian Schleiss + Daniel Thibault + Philippe Villiers + Alexandre Franke + Jean Sanchez + German: Bernd Böckmann + Lübbe Onken + Carsten Stupka + René Linke + Mark Ziegler + Simon Stücher + Patrik Kernstock + Norwegian Nynorsk: Karl Ove Hufthammer + Jon Stødle + Eirik U. Birkeland + Norwegian BokmÃ¥l: Hans Fr. Nordhaug + Polish: Arkadiusz Lipiec + Radoslaw Dlugosz + Artur Marzec + Mateusz Gola + Leszek Å»yczkowski + Turkish: Hakki Dogusan + Roman Neumüller + Kaya Zeren + Burak Yavuz + Latvian: Artis Trops + Kristaps Kaupe + Arvis Lācis + Italian: Pino Toscano + Mirko Tebaldi + Renzo Campagna + Giuseppe Pignataro + Roberto Boriotti + Vincenzo Reale + Tamil: Prabu Anand + Sri Ramadoss Mahalingam + Bulgarian: Dimitar Boyn + Pavel Constantinov + Andrey Alexandrov + Alexander Shopov + Стоян Димитров + Swedish: Simon Bohlin + Stefan Pettersson + Fredrik Wahlberg + Andreas Pettersson + Georgian: Aiet Kolkhi + Romanian: Alexandru Bogdan Munteanu + Ovidiu Constantin + Sorin Sbarnea + Manuel Ciosici + Angelescu + Catalan: Pau Bosch i Crespo + David Planella + Joan Coll i Teixidor + Slovak: Pavol Cvengros + Tibor Pittich + Oto Brezina + Ivan Masár + DuÅ¡an Kazik + Martin Kubanik + Greek: Simos Xenitellis + Velonis Petros + Nikos Papadopoulos <231036448@freemail.gr> + Japanese: Masapon + Suzumizaki-Kimitaka + Nobuhiro Iwamatsu + Takeshi Hamasaki + Naoko Takano + Russian: Pavel Maryanov , + Stanislav Petrakov + Roman A. aka BasicXP + Maxim Musatov + Icelandic: Sveinn í Felli + Spanish: Javier Bravo + Alberto Fernández Pérez + Lorenzo Luengo + Sebastian Barrientos E. + Festor Wailon Dacoba + Sergi Medina + Adolfo Jayme Barrientos + Spanish (Puerto Rico): Fernando Ortiz + Danish: Lars Dybdahl + Anders Jenbo + Byrial Jensen + Jens Hyllegaard + Serbian: Bojan Suzić + Milorad Jovanović + Ђорђе Васиљевић + Portuguese: Lazarus Long + Hugo Patrício + Sérgio Marques + Portuguese (Brazilian): Leonardo Peixoto + Creso Moraes + Cleber Tavano + Jose Carlos Medeiros + Igor Ruckert + Hungarian: Szilard Vizi + Márton Balázs + Gábor Nagy + Zoltán Faludi + Horváth László + Petrovics Sándor + Lithuanian: Mantas Kriauciunas + Liudas Dmitrijevas + Kestutis Snieska + Ramunas Lukasevicius + Rokas Masiulis + Gintautas Miliauskas + Andrius Å tikonas + Algimantas Margevičius + Farsi: Abbas Izad + Hooman Mesgary + Morteza Geransayeh + Afrikaans: Petri Jooste + Slovenian: Luka Marinko + Martin Srebotnjak + Matej Urbančič + Mongolian: Mendbayar Bayar + Khurelbaatar Lkhagvasuren + Punjabi: Amanpreet Singh Alam + Albanian: Besnik Bleta + Amharic: Tegegne Tefera + Hindi: Dhananjaya Sharma + Priyank Bolia + Esperanto: Tim Morley + Cyril Castelbou + Belarusian: Siarhei + Belarusian (latin): Alaksandar Navicki + Breton: Korvigellou an Drouizig + Giulia Fraboulet + Walloon: Pablo Saratxaga + Bangla: Omi Azad + Basque: 3ARRANO Euskalgintza Taldea <3arrano@euskalerria.org> + Xabier Aramendi + Korean: Hojin Choi + Hebrew: Nir Lavi + Shalom Craimer + Yaron Shahrabani + Kyrgyz: Ilyas Bakirov + Chyngyz Dzhumaliev + Ukrainian: Cawko Xakep + Hriziv Roman + Rax Garfield + Asturian: Softastur + Galician: Leandro Regueiro + Indonesian: Bayu Artanto + Andika Triwidada + Friulian: Andrea Decorte + Finnish: Elias Julkunen + Heikki Suopanki + Juhani Numminen + Lauri Nurmi + Kurdish: Erdal Ronahi + Tatarish: Albert Fazli + Macedonian: Jovan Kostovski + Митко Крстев + Arabic: Mohammed al zaid + Ahmad Gharbeia + Samkari + Abdullah Abouzekry + Awadh Al-Ghaamdi + Thai: Pun + Malay: Mahrazi Mohd Kamal + Urdu: Muhammad Shakir Aziz + Irish: Seanán Ó Coistín + Uyghur: Abduqadir Abliz + Valencian: Robert Millan + David Planella + Vietnamese: Trần Ngọc Quân + Uzbek: Oybek Djuraev + Bosnian: Kenan DerviÅ¡ević + English (British): Robert Readman + Kazakh: Baurzhan Muftakhidinov + Marathi: Abhijit Jathar + Tajik: Victor Ibragimov + Kurdish Sorani: Asos Ap + Nepali: Him Prasad Gautam + Corsican: Patrick Santa-Maria + Aragonese: Jorge Pérez Pérez + Azerbaijani: Mushviq Abdulla + +Icons: + Tango Desktop Project [http://tango.freedesktop.org] + Mark James, Silk icons [http://www.famfamfam.com/lab/icons/silk] diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..9e872d1 --- /dev/null +++ b/COPYING @@ -0,0 +1,18 @@ +Copyright (c) 1999-2016 Vaclav Slavik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..f56caf6 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,12 @@ + +ACLOCAL_AMFLAGS = -I admin + +SUBDIRS = src docs locales artwork + +desktopdir=$(datadir)/applications +dist_desktop_DATA = poedit.desktop poedit-uri.desktop + +appdatadir=$(datadir)/appdata +dist_appdata_DATA = poedit.appdata.xml + +EXTRA_DIST = bootstrap diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..4755ba9 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,887 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(dist_appdata_DATA) $(dist_desktop_DATA) AUTHORS COPYING NEWS \ + README admin/compile admin/config.guess admin/config.sub \ + admin/install-sh admin/missing $(top_srcdir)/admin/compile \ + $(top_srcdir)/admin/config.guess \ + $(top_srcdir)/admin/config.sub $(top_srcdir)/admin/install-sh \ + $(top_srcdir)/admin/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/ax_boost_base.m4 \ + $(top_srcdir)/admin/ax_boost_iostreams.m4 \ + $(top_srcdir)/admin/ax_boost_regex.m4 \ + $(top_srcdir)/admin/ax_boost_system.m4 \ + $(top_srcdir)/admin/ax_boost_thread.m4 \ + $(top_srcdir)/admin/ax_cxx_check_flag.m4 \ + $(top_srcdir)/admin/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/admin/berkeley_db.m4 \ + $(top_srcdir)/admin/wxwin.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(desktopdir)" +DATA = $(dist_appdata_DATA) $(dist_desktop_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_IOSTREAMS_LIB = @BOOST_IOSTREAMS_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ +BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLD2_LIBS = @CLD2_LIBS@ +CPPFLAGS = @CPPFLAGS@ +CPPREST_LIBS = @CPPREST_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB_LIBS = @DB_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXPAT_CFLAGS = @EXPAT_CFLAGS@ +EXPAT_LIBS = @EXPAT_LIBS@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +HAVE_CXX11 = @HAVE_CXX11@ +ICU_CFLAGS = @ICU_CFLAGS@ +ICU_LIBS = @ICU_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSECRET_CFLAGS = @LIBSECRET_CFLAGS@ +LIBSECRET_LIBS = @LIBSECRET_LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUCENE_CFLAGS = @LUCENE_CFLAGS@ +LUCENE_LIBS = @LUCENE_LIBS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_SHORT_VERSION = @PACKAGE_SHORT_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WXRC = @WXRC@ +WX_CFLAGS = @WX_CFLAGS@ +WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ +WX_CONFIG_PATH = @WX_CONFIG_PATH@ +WX_CONFIG_WITH_ARGS = @WX_CONFIG_WITH_ARGS@ +WX_CPPFLAGS = @WX_CPPFLAGS@ +WX_CXXFLAGS = @WX_CXXFLAGS@ +WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ +WX_LIBS = @WX_LIBS@ +WX_LIBS_STATIC = @WX_LIBS_STATIC@ +WX_RESCOMP = @WX_RESCOMP@ +WX_VERSION = @WX_VERSION@ +WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ +WX_VERSION_MICRO = @WX_VERSION_MICRO@ +WX_VERSION_MINOR = @WX_VERSION_MINOR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I admin +SUBDIRS = src docs locales artwork +desktopdir = $(datadir)/applications +dist_desktop_DATA = poedit.desktop poedit-uri.desktop +appdatadir = $(datadir)/appdata +dist_appdata_DATA = poedit.appdata.xml +EXTRA_DIST = bootstrap +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +install-dist_appdataDATA: $(dist_appdata_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ + done + +uninstall-dist_appdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir) +install-dist_desktopDATA: $(dist_desktop_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ + done + +uninstall-dist_desktopDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(desktopdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-dist_appdataDATA install-dist_desktopDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_appdataDATA uninstall-dist_desktopDATA + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_appdataDATA \ + install-dist_desktopDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-dist_appdataDATA \ + uninstall-dist_desktopDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..373ec7f --- /dev/null +++ b/NEWS @@ -0,0 +1,912 @@ + +Version 1.8.11 +-------------- + +- [macOS] Fixed opening files by double-clicking them in Finder. +- Fixed handling of sr_RS locale. + + +Version 1.8.10 +-------------- + +- Added support for X-Source-Language header. +- [macOS] Improved macOS Sierra compatibility. +- [Windows] Fixed Open in Editor button that didn't work in some cases. +- [UNIX] Added AppData file. + + +Version 1.8.9 +------------- + +- [Windows] Use IE proxy settings. +- Start searches from the current position, not beginning of the file. +- Updated bundled gettext to 0.19.8.1. +- More fixes for right-to-left languages. + + +Version 1.8.8 +------------- + +- Greatly reduced UI flicker on Windows plus other visual improvements on Windows 10. +- Multiple fixes to Poedit’s interface in right-to-left languages. +- Don't leave directional marks in translated text if there's a LTR/RTL mismatch. +- Assorted small fixes. + + +Version 1.8.7 +------------- + +- Added Copy From Singular operation and Next/Prev Plural Form navigation shortcuts. +- Translation errors are now properly translated. +- Fixed default Turkish plural form. +- Fixed a bug where a perfect match wouldn't be found in the TM in some rare cases. +- Updated bundled gettext to 0.19.7 (added appdata.xml and ITS support). +- Assorted bugfixes. + + +Version 1.8.6 +------------- + +- Fix properties window on OS X 10.9 and older. +- Fix visual flicker when quickly scrolling through a file with arrow keys. +- [OS X] Fix rare exception when pasting text. +- Fix file width autodetection when long comments were present. +- Disable Find next/prev menu items properly. + + +Version 1.8.5 +------------- + +- Improved setting and handling of source paths. +- Implement gzip support in Crowdin API client. +- Assorted fixes. + + +Version 1.8.4 +------------- + +- Fixed bug in handling POTs with plural forms introduced in 1.8.3. + + +Version 1.8.3 +------------- + +- Fixed Last-Translator error when creating a new translation from existing POT. +- Fixed bogus "Sources not available" error for single files setups. +- Fixed TM error reporting to prevent rendering the entire UI mostly unusable. + + +Version 1.8.2 +------------- + +- text editor now ensures that trailing newlines are present only if they also + exist in the source text +- fix HTML export error on Windows +- automatically fix some bad paths settings in PO files +- improved source language detection +- fix incorrect timezone of PO-Revision-Date in some cases +- use the user's default browser for Crowdin authentication on all platforms + (wxWebView no longer required as a dependency when building on Linux) + + +Version 1.8.1 +------------- + +- fix TM-related crash under heavy concurrency +- [OS X] fix crash when a concurrent task throws + + +Version 1.8 +----------- + +- integration with the Crowdin localization management platform +- search & replace +- support for directly handling POT files +- improved interface for configuring source code paths +- Poedit now automatically fixes certain broken files produced by certain + broken tools (e.g. WPML) +- modernized HTML export +- [OS X] Quick Look preview +- support for non-English source languages (auto-detected) +- [Windows] opening multiple Poedit windows now works correctly + + +Version 1.7.7 +------------- + +- strip whitespace in extractor definitions resulting from copy & paste + + +Version 1.7.6 +------------- + +- fix handling of multiple displays +- [Windows] fix "file couldn't be formatted nicely" problems with files in + directories with (some) Unicode names + + +Version 1.7.5 +------------- + +- fix scrolling to the top when saving a file; focus should be preserved now +- fix disabling of extractors in preferences (oops) +- [Windows, OS X] improve resilience of the TM to power loss + + +Version 1.7.4 +------------- + +- size of the bottom editing part is now remembered correctly again +- [GTK+] fix broken Edit->Copy/Cut/Paste +- [OS X] fix stray BOM marks appearing on suggestions in some cases +- [OS X] fix Brazilian Portuguese localization not being used +- [OS X] fix sandbox permission window with unusual source paths setting +- [Windows] HiDPI support + + +Version 1.7.3 +------------- + +- it is now possible to disable unwanted extractors in preferences +- source paths in catalog properties can now include individual files +- exclusion paths in catalog properties can now use wildcards + (e.g. *.js, now default for WordPress) +- "Consult TM when updating from sources" now includes only "good" matches + (with at least 75% score) +- fix losing of the editing position when saving a file +- fix Preferences layout in Japanese and Chinese translations +- Windows: fix custom font setting after using a suggestion or copying from + source text + +(there was no version 1.7.2) + + +Version 1.7.1 +------------- + +- fix menu shortcuts problem in Polish localization + + +Version 1.7 +----------- + +- reworked preferences +- support for extraction from JavaScript (and more) sources +- suggestions and other relevant information (comments etc.) are now much + easier to access in a unified sidebar +- syntax highlighting of special characters in translations +- added Group by Context sorting option +- implemented multiple selection +- formatting of PO files can now be customized +- added support for msgmerge --no-fuzzy-matching + + +Version 1.6.10 +-------------- + +- multiple fixes to parsing of the Language header +- fix handling of broken POTs with duplicate headers +- improved robustness of the Lucene TM database +- misc small fixes +- translations updates and fixes + + +Version 1.6.9 +------------- + +- fixes to handling of RTL translations +- fix editing-related crashes under wxGTK +- translations updates + + +Version 1.6.8 +------------- + +- fix parsing of obsolete entries in PO files +- improved spellchecker handling on OS X and Windows +- misc fixes +- translations updates + + +Version 1.6.7 +------------- + +- better handle "fatal" (but not really) msgfmt errors +- OS X: fix OS X 10.7 compatibility +- OS X/Win: update bundled Gettext to 0.19.2 +- translations updates + + +Version 1.6.6 +------------- + +- added exclusion paths support to updating from sources +- spellchecking is now supported on Windows 8+ +- STL version of wxWidgets is no longer required to build on Unix +- update Windows and OS X builds to GNU gettext 0.19 +- misc fixes +- translations updates + + +Version 1.6.5 +------------- + +- assorted small bugfixes + + +Version 1.6.4 +------------- + +- translation memory tuning +- Unix: restore compatibility with GTK+ 2 +- misc fixes +- minor UI improvements (better wording etc.) +- OS X: misc fixes for Mavericks compatibility +- OS X/Win: update bundled Gettext to 0.18.3.2 +- translations updates + + +Version 1.6.3 +------------- + +- fix invocation of external parser tools that need PATH +- Unix: use XDG_CONFIG_HOME for dotfile location +- OS X: fix conflict with Smart Quotes on Mavericks +- translations updates + + +Version 1.6.2 +------------- + +- fix TM failures with non-ASCII paths on Windows +- add support for Zend Framework's .phtml +- and support for WordPress' translators: comments +- translations updates + + +Version 1.6.1 +------------- + +- fixes to TM migration code +- OS X: fixes for Retina displays + + +Version 1.6 +----------- + +- improved languages handling (entering, sorting, plural forms expressions) +- completely new translation memory implementation +- assorted UI improvements +- better build systems on OS X and Windows +- OS X: minimum required version is 10.7; PPC builds are no longer supported + + +Version 1.5.7 +------------- + +- fix incorrect --add-comments flag introduced in 1.5.6 + + +Version 1.5.6 +------------- + +- fix several problems with the file viewer: better lookup of files, + fix display of UTF-8 files, better detection of DOS-style paths +- fix Find window's text field focus on OS X +- add --add-comments=TRANSLATORS to xgettext call in default parsers +- fix parsing of obsolete entries to recognize "#~|" +- fix incorrect update stats when using msg contexts +- translations updates + + +Version 1.5.5 +------------- + +- fix crash when auto-updating translations with some TMs +- fix file corruption when the catalog's charset was set to one that + couldn't represent all of the text +- translations updates + + +Version 1.5.4 +------------- + +- fix display of source code (#472) +- fix bug when saving file fails on permissions (#491) +- fix Unix makefiles to install all icons (#493) +- translations updates + +Version 1.5.3 +------------- + + +- fixes to parsing of msgfmt errors +- misc UI fixes +- OS X: fixed crash when closing a document and opening another +- fixed compatibility with OS X 10.5 Leopard +- fixed problems with TM migration after upgrade +- reverted removal of line numbers in 1.5.2 +- reverted: the default is to compile MO files on save again +- translations updates + + +Version 1.5.2 +------------- + +- fixed crash when clearing the translation (#428, #468) +- removed no longer needed line numbers from the UI +- OS X: improved attention bar looks +- translations updates + + +Version 1.5.1 +------------- + +- Windows: fix missing libstdc++-6.dll +- updated several translations + + +Version 1.5 +----------- + +- show translation errors inline with the entries they relate to, instead of a + confusing errors log when saving +- implement full support for message contexts +- replaced popups when Poedit is started for the first time with + unobtrusive Firefox-style notifications +- selecting suggested translation from right-click popup menu now + correctly removes fuzzy flag from the translation +- warn the user if Plural-Forms header is inconsistent with the number + of plural translations in the catalog or if has syntax errors +- correctly deduce catalog's language from filenames in the form of + foo.LANG.po, as used by several large Open Source projects (#267) +- Boost library is now required when compiling from sources +- fixed the Find window so that it can be closed using the Esc key (#187) +- positions of translation fields are now remembered correctly when + Poedit window is maximized (#194) +- added Edit->Clear translation command (Marcin Floryan) +- removed View->Fullscreen view, it doesn't make sense in this kind of app +- better application and document icons +- removed the "Shaded translations list" option, it's now always enabled +- misc minor UI improvements +- fixed possible transaction memory database corruption (#337, #352) +- added instructions on how to install additional spellchecker dictionaries +- added sorting by different criteria (#256, #239) +- improved source files viewer (#346) +- included outdated documentation was replaced with online wiki docs (#343) +- more keyboard navigation shortcuts +- saving PO files no longer reformats source code references (#323); + moreover, they are always formatted according to the default style + used by GNU gettext tools (#348) +- don't restore remembered window positions if they are outside currently + available screens (#318) +- changed Alt+ shortcuts to non-conflicting Ctrl+ ones: "Copy From Source + Text" now uses Ctrl+B and "Translation Is Fuzzy" Ctrl+U +- various UI improvements +- added more translations: + Bosnian translation (Kenan Dervisevic) + Tajik (Victor Ibragimov) + Kurdish Sorani (Asos Ap) + + +Version 1.4.6 +------------- + +- OS X: fixed TM configuration tab to show languages list +- fixed bug introduced in 1.4.3 that caused "Update from POT file" + to clear metadata in catalog header (#355) +- added Kazakh translation (Baurzhan Muftakhidinov) + + +Version 1.4.5 +------------- + +- OS X: fixed Find to actually show hits in text control +- OS X: fixed "Check for updates" preference broken by 1.4.4 + + +Version 1.4.4 +------------- + +- sort catalogs in the manager alphabetically (#245) +- fixed escaping of quotes in catalog headers (#290) +- fixed reformatting of obsolete entries in catalogs (#329) +- fixed list selection visibility on Windows 7 (#336) +- Windows: automatically check for available updates + + +Version 1.4.3 +------------- + +- Unix: fixed crash with Zemberek spell-checker backend installed (#276) +- fixed parsing of catalogs produced with xgettext --indent (#189) +- fixed TM updating broken in 1.3.5 (#294) +- support GNOME's xml2po file references (#314) +- fixed handling of "%" in filenames (#143) +- added more translations: + Vietnamese (Trần Ngọc Quân) + Uzbek (Oybek Djuraev) + + +Version 1.4.2 +------------- + +- Unix: fixed Ctrl+Up/Down/PgUp/PgDn shortcuts when NumLock is on (#2006843) +- OS X: fixed running Gettext tools when Poedit is in directory with + spaces in its name (#2025823) +- added Uyghur translation (Abduqadir Abliz) + + +Version 1.4.1 +------------- + +- fixed HTML export to properly escape the text (#1739062) +- remember last used search phrase in Find window (#1909847) +- Windows: fixed text entry using AltGr on many European keyboards + + +Version 1.4 +----------- + +- wxWidgets >= 2.8 is now required when compiling from sources +- don't show comments windows by default to avoid confusion +- OS X: fixed conflict with 10.5's Spaces - Command-arrows can now be used + to navigate in the list control in addition to Ctrl-arrows +- Windows, OS X: significantly faster updating of catalogs on multi-core + machines (on Linux, some distributions included multi-threaded gettext, + some don't) +- fixed remaining problems with list selection +- use more standard way of differentiating between different kinds of + entries in the list (translated, fuzzy, new) by using font variants + instead of different background colors (#1863332) +- don't update PO-Revision-Date header if it's unused (#1900298) +- Windows: common shortcuts like Ctrl-A or Ctrl-backspace now work +- added Belarusian latin translation (Alaksandar Navicki) + + +Version 1.3.9 +------------- + +- OS X: fixed corruption of first entry when opening catalog from manager + + +Version 1.3.8 +------------- + +- OS X: fixed startup on computers that didn't have Poedit installed before +- fixed translation status color indicator to work correctly in case + of plural entries +- changed the official spelling from "poEdit" to "Poedit" +- preserve old msgid records (#| msgid "...") when saving +- preserve deleted records when updating catalogs +- preserve msgctxt entries in catalogs (#1680554) +- OS X: Sparkle is now used for automatic updates +- OS X: fixed spell checker to use catalog's language +- fixed View->Display quotes setting broken in 1.3.7 +- Windows: fixed crash when catalog update removes translations +- added more translations: + Irish (Seanán Ó Coistín) + + +Version 1.3.7 +------------- + +- Windows: Windows 95/98 is no longer supported by the official binary +- OS X: Poedit is now built as Universal binary +- fixed the Preferences menu entry in catalogs manager +- fixed to handle file references with Windows paths on Unix +- fixed the "failed to convert to unicode" bug when saving (#1589744) +- OS X: fixed clicking on PO files in Finder (#1583967) +- fixed opening source files in external editor if the path contains + spaces (#1743172) +- Windows: fixed keyboard navigation in Find dialog (#1697743) +- added more translations: + Urdu (Muhammad Shakir Aziz) + + +Version 1.3.6 +------------- + +- fixed failure to load correct catalogs without error message +- fixed loading of X-Poedit-Language header (#1567018) +- fixed loading of files in charsets other than UTF-8 (#1562780) +- fixed shortcuts on Mac OS X to not use Alt+something + + +Version 1.3.5 +------------- + +- fixed Content-Type header parsing (bug #1346495) +- Unicode build of wxWidgets 2.6 is now required +- fixed bug with entering numbers when using German translation (#1325590) +- fixed broken layout on startup when showing comments window (#1313612) +- initial Mac OS X port +- fixed crash when loading some invalid PO files (#1495970) +- fixed the Find window to not be on top of other apps' windows +- install .desktop files and icons according to freedesktop.org standards +- changed the icons to a combination of Tango Desktop Project and Silk icons +- removed on-the-fly checking of catalog items, it's too buggy +- added more translations: + Macedonian (Jovan Kostovski) + Arabic (Mohammed al zaid) + Thai (Pun) + Malay (Mahrazi Mohd Kamal) + + +Version 1.3.4 +------------- + +- fixed crash when closing the application +- fixed searching in catalogs (bug #1230857) +- fixed restoring window size when maximized +- fixed reading of files with trailing whitespace on lines +- use standard accelerators for Close command +- fixed "Copy original to translation field" to work on singular form entries + in catalogs that contain plural forms +- added Tatarish translation (Albert Fazli) + + +Version 1.3.3 +------------- + +- added ability to create bookmarks (Olivier Sannier) +- improved status icons (Olivier Sannier) +- more robust parsing of catalog headers +- saving into read-only file now fails as expected +- fixed saving of gettext keywords with commas in them +- added more translations: + Galician (Leandro Regueiro) + Indonesian (Bayu Artanto) + Friulian (Andrea Decorte) + Finnish (Keikki Suopanki) + + +Version 1.3.2 +------------- + +- fixed bogus warnings when updating from a POT file +- added "New catalog from POT file" feature +- added ability to display automatic comments in the UI (Olivier Sannier) +- translations manager now searches subdirectories as well (David Fraser) +- the Find tool can now optionally search from current position instead of + from the beginning of the catalog (Olivier Sannier) +- fixed TM to not crash on catalogs with non-ASCII msgid values +- fixed catalog parser to correctly preserve automatic comments with + duplicate lines and to not ignore every second automatic comment + (Olivier Sannier) +- added ability to search comments (Olivier Sannier) +- Poedit now preserves obsolete translations (Olivier Sannier) +- added checking of input files' correctness +- fixed parsing of "\\n" substrings in catalog headers +- fixed compilation with wxWidgets >= 2.5.3 +- fixed Find to search in all plural forms instead of only the first one +- added "whole words only" option to Find tool (Olivier Sannier) +- added default parsers for more programming languages supported by xgettext +- Windows: fixed list control corruption when updated catalog had fewer items + than before the update +- added more translations: + Korean (Hojin Choi) + Hebrew (Nir Lavi) + Kyrgyz (Ilyas Bakirov) + Ukrainian (Cawko Xakep) + Puerto Rico Spanish (Fernando Ortiz) + Asturian (Softastur) + + +Version 1.3.1 +------------- + +- fixed assertion failure when viewing source files in the builtin viewer +- fixed wrong escaping of backslashes in X-Poedit-* headers +- fixed parsing of references to filenames containing spaces (Shane Harper) +- fixed crash with catalogs that have plural forms but no Plural-Forms header +- fixed parsing of the line following last msgstr[i] entry (bug #1025211) +- fixed controls layout when compiled against wxWidgets 2.4 + + +Version 1.3.0 +------------- + +- plural forms support (based on patch by Christophe Hermier and Guido Flohr) +- fixed catalog I/O to correctly handle automatic comments (Tim Dijkstra) +- Windows: visual improvements to main window (Tim Kosse) +- usability improvements +- fixed storing of non-ASCII catalog headers +- Poedit now preserves non-standard entries in PO file header +- Poedit now respects c-format and no-c-format when checking tokens correctness +- position in translations list is no longer lost when saving the file +- configure now correctly detects libdb4 with versioned symbols +- "Find" tool now selects matches in text controls (Sergio Talens-Oliag) +- use msgfmt for tokens validation +- double-clicking on invalid entry now pops up error description +- Unix: use GNOME theme icons if they are installed on the system +- Unix: use GtkSpell for spell checking (GTK+ 2 only) +- Poedit no longer saves .po.poedit file, the headers were moved into + custom X-Poedit-* fields in .po file header +- added more translations: + Punjabi (Amanpreet Singh Alam) + Albanian (Besnik Bleta) + Amharic (Tegegne Tefera) + Hindi (Dhananjaya Sharma) + Esperanto (Tim Morley) + Belarusian (Siarhei) + Breton (Korvigellou an Drouizig) + Walloon (Pablo Saratxaga) + Bangla (Omi Azad) + Basque (3ARRANO Euskalgintza Taldea) + + +Version 1.2.5 +------------- + +- added catalog export to HTML (Christophe Hermier) +- fixed bug in displaying list entries in ANSI build introduced in 1.2.4 +- fixed opening of source files specified using absolute path +- Poedit now preserves fuzzy status if set after partially editing an entry +- many fixes to comment window (Olivier Sannier) +- comment window is now (optionally) editable (Olivier Sannier) +- fixed preferences dialog if translation memory is not used (Olivier Sannier) +- added printf() tokens validation (Frederic Giudicelli) + (requires wxWidgets >= 2.5.1 in Unicode build) +- added ability to specify source code charset other than US-ASCII + (based on patch by Stefan Kowski) +- added Mongolian translation (Mendbayar Bayar, Khurelbaatar Lkhagvasuren) + + +Version 1.2.4 +------------- + +- added optional comment window to the bottom of main screen + (based on patch by Olivier Sannier, still not fully functional) +- added "Automatically translate using TM" operation to the Catalog menu +- Windows: upgraded bundled gettext to 0.12.1 +- fixed .po files parser to read files created by xgettext -i +- added ability to customize fonts +- Windows: added support for Delphi via dxgettext (http://dybdahl.dk/dxgettext/) +- translation memory wizard fixes for multiple languages case +- comments and msgid strings are stored using catalog's charset and are + not limited to US-ASCII anymore (based on patch by Stefan Kowski) + + +Version 1.2.3 +------------- + +- fixed compilation with Berkeley DB 4.1.25 +- fixed disappearing catalog status information +- fixed bug in redrawing overview list on startup +- added more translations: + Serbian (Bojan Suzic) + Portuguese (Lazarus Long) + Hungarian (Szilard Vizi) + Lithuanian (Mantas Kriauciunas, Liudas Dmitrijevas, Kestutis Snieska, + Ramunas Lukasevicius) + Farsi (Abbas Izad) + Afrikaans (Petri Jooste) + Slovenian (Luka Marinko) + + +Version 1.2.2 +------------- + +- Poedit now correctly differentiates between Traditional and Simplified + Chinese +- optimizations for better handling of catalogs with very large entries +- Mac: compilation fixes for buggy gcc 3.1 snapshot used by MacOS X +- added country metadata into catalog settings dialog +- Windows: it is now possible to change UI language directly in Poedit +- added catalog updating from POT files +- more intuitive UI for translation memory creation +- added more translations: + partial Greek translation (Simos Xenitellis) + Japanese (Masapon) + Simplified Chinese (Leo Liaw) + Russian (Pavel Maryanov) + Norwegian BokmÃ¥l (Hans Fr. Nordhaug) + Icelandic (Samúel Jón Gunnarsson) + Brazilian Portuguese (Leonardo Peixoto) + Spanish (Javier Bravo) + Danish (Lars Dybdahl) + + +Version 1.2.1 +------------- + +- Windows: Poedit window now accepts files dropped on it via drag'n'drop +- added more translations: + Georgian (Aiet Kolkhi) + Romanian (Ovidiu Constantin) + Catalan (Pau Bosch i Crespo) +- reworked Traditional Chinese translation (Leo Liaw) +- fixed bug when empty error text was shown if msgfmt reported error +- moved "Shaded translations list" from preferences into the View menu +- Windows: allow coexistence of multiple Poedit versions on same system + + +Version 1.2.0 +------------- + +- fixed bug in catalog updater: didn't use default keywords if none specified +- added a warning if no files were found during catalog update +- fixed "Copy original to translation field" to do exact copy +- added more translations: + Tamil (Prabu Anand) + Bulgarian (Dimitar Boyn) + Swedish (Simon Bohlin) + Slovak (Pavol Cvengros) +- fixed Turkish translation (wrong catalog included by mistake) +- Linux: RPMs are no longer provided in Mandrake and RedHat flavors, they + were unified into single RPM (mdk menu support was _not_ lost by this) +- fixed data loss when updating catalog with invalid entries +- Windows: fixed toolbars look on Windows XP +- Windows: the installer no longer requires Administrator privileges + + +Version 1.1.10 +-------------- + +- fix to "fixes to catalog charset handling" from 1.1.9 +- Unix: configure now checks for db4 in addition to db and db3 +- Windows: fixed launching Poedit via associations when long filenames + were involved +- added more translations: + Polish (Arkadiusz Lipiec) + Norwegian Nynorsk (Karl Ove Hufthammer) + Turkish (Hakki Dogusan) + Latvian (Artis Trops) + Italian (Pino Toscano) + + +Version 1.1.9 +------------- + +- fixes to catalog charset handling +- Linux: added Mandrake RPM packages +- added translations to more languages: + Estonian (Joosep-Georg Jarvemaa) + Dutch (Patrick Hubers) + German (Bernd Böckmann) + French (Lionel Allorge) + Croatian (Mladen Mintakovic) + + +Version 1.1.8 +------------- + +- fixes to editable list control + + +Version 1.1.7 +------------- + +- fixed a bug that prevented direct opening of files in editor from working +- fixed Find dialog (didn't select found entries in the list) +- Poedit 1.1.6 package contained out-of-date resources.zip by mistake, + this is fixed now +- added an option to disable list rows shading +- minor UI tweaks +- added Chinese (zh_TW) translation (Ying-Chieh Liao) +- several fixes related to handling of directory names with spaces +- fixed launching Poedit with filename as the argument + + +Version 1.1.6 +------------- + +- support for Windows XP native look & feel +- Win32 version is now Unicode-enabled +- fixes to the way multiline entries are stored in .po file +- i18n support in the app itself (finally!) + (so far only Czech translation is available, translators welcome!) +- added an option to display .po file line numbers for catalog entries +- fixed crash when browsing certain source files +- added ability to open referred source files directly in the editor of + choice instead of in built-in files viewer +- Windows: fixed wrong placement of progress indicator in the status bar +- Unix: man page is now installed +- Unix: Poedit now links with libdb-3.x for x > 1, too +- Linux: RPM package now comes in two favors: poedit and poedit-semistatic + (the latter is statically linked against wxGTK and libdb) + + +Version 1.1.5 +------------- + +- upgraded to link against any of libdb-3.{1,2,3} +- Windows: fixed bug when editing entries in editable listbox control +- updated ISO 639-1 table +- visually improved listbox +- Win32 binary package is now cross-compiled with Mingw32 +- fixed Unix makefile to not attempt to install KDE and/or GNOME entries + if you doesn't have necessary write permissions + + +Version 1.1.4 +------------- + +- fixed bug in Search when looking for strings with non-ASCII + characters in them +- charset combobox in catalog settings now remember values + + +Version 1.1.3 +------------- + +- added ability to edit comments +- nicer icons by Dean S. Jones +- new source code references browser +- new keyboard navigation +- various UI improvements and bugfixes +- added catalogs manager for easier access to translator's files +- updated documentation + + +Version 1.1.2 +------------- + +- fixed incorrect update of TM database path setting from preferences dialog +- fixed assertion failures with empty catalog files when right-clicking + the list control +- changed default TM DB path to something more sane under Windows +- Windows: fixed directories traversal during TM update under Windows + + +Version 1.1.1 +------------- + +- added support for semi-automatic translations using translation memory + concept. Translation memory is an indexed database of all string-translation + pairs found in the system, plus algorithm to retrieve similar strings from + the database. Poedit can dig translations from PO, MO and RPM files. +- implemented search +- Poedit source code is now documented with Doxygen +- Windows: HTML Help documentation now uses CSS and looks much better +- better keyboard navigation + + +Version 1.1.0 +------------- + +- support for UTF-8 +- changes to make Poedit work correctly with gettext 0.10.37 +- fixed default ISO charset names to be iso-8859-n instead of iso8859-n +- new ability to save catalogs in all common CR/LF formats, plus + an option to preserve file's format (default values: Unix and preserve) +- added fullscreen mode + + +Version 1.0.3 +------------- + +- fixed comments parsing bug (reported by Mattias Dahlberg) +- Windows: fixed ugly blinking when resizing Poedit window + + +Version 1.0.2 +------------- + +- Unix: fixed problem with localized versions of gettext +- fixed Content-Transfer-Encoding header (was "8-bit" instead of "8bit") +- fixed POT-Creation-Date and PO-Revision-Date date writing +- better handling of \n: strings with \n in them are now both + displayed and saved to .po file as multiline records +- saving catalog now preserves comments +- Unix: fixed dist makefile target + + +Version 1.0.1 +------------- + +- fixed loading of catalogs with multiline msgid records +- fixed assertion failure in parsers info saving if ~/.poedit + did not exist [harmless, in debug builds only] +- right-clicking list control now selects the item under cursor +- Unix: fixed docs/Makefile.am to cd correctly +- Unix: configure change: better check for wxWidgets +- Linux: fixed RPM spec file +- Unix: added integration with KDE and GNOME desktops + + +Version 1.0.0 +------------- + +- initial release diff --git a/README b/README new file mode 100644 index 0000000..76dbd8e --- /dev/null +++ b/README @@ -0,0 +1,140 @@ + + ------------ + Poedit + ------------ + + a cross-platform gettext catalogs editing tool + + + About +======= + +This program is GUI frontend to GNU gettext utilities (win32 version +is part of the distribution) and catalogs editor/source code parser. It helps +with translating application into another language. For details on principles +of the solution used, see GNU gettext documentation or wxWidgets' wxLocale +class reference. + + + Installing +============ + +Binary easily-installable packages are provided for Windows and OS X and are +part of many Linux distributions. + + + Installing from sources +========================= + +Requirements: + + * Boost + * Unicode build of wxWidgets library, version >= 3.0 (see http://www.wxwidgets.org) + * ICU + * LucenePlusPlus + * If on Unix, GtkSpell for spell checking support + +Optional dependencies: + + * cld2 (better language autodetection and non-English source languages) + * Expat and Berkeley DB >= 4.7 (legacy translation memory migration) + * C++REST SDK >= 2.5 (Crowdin integration) + + + Unix +------ + +Do the usual thing: + + ./configure + make + make install + +You must have the dependencies installed in a location configure will find, +e.g. by setting CPPFLAGS and LDFLAGS appropriately. + + + OS X +------ + +You need a full git checkout to build on OS X; see below for details. + +After checkout, use the Poedit.xcworkspace workspace and Xcode 6 to build +Poedit. + +There are some additional dependencies on tools not included with OS X. +They can be installed with Homebrew and macosx/Brewfile: + + brew bundle macosx/ + + + Windows using Visual Studio 2015 +---------------------------------- + +You need a full git checkout to build on Windows; see below for details. + +After checkout, use the Poedit.sln solution to build everything. + +To build the installer, open win32/poedit.iss in Inno Setup and compile the +project. + + + Installing from Git repository +-------------------------------- + +Get the sources from github (https://github.com/vslavik/poedit): + + git clone https://github.com/vslavik/poedit.git + +If you are on Windows or OSX, you probably want the dependencies too. After +closing, run the following commands: + + git submodule init + git submodule update --recursive + +If you get the sources directly from the Git repository, some generated files +are not present. You have to run the ./bootstrap script to create them. After +that, continue according to the instructions above. + +The ./bootstrap script requires some additional tools to be installed: + + * AsciiDoc, xsltproc and xmlto to generate the manual page + * Bakefile, to generate Windows makefiles/projects + * ImageMagick and png2icns from libicns to generate icons in Windows and + OS X native formats + +If you don't have any of the dependencies, ./bootstrap will print errors, but +will continue to run. In other words, if you don't need e.g. Windows stuff, you +can ignore Windows-specific dependencies. + + + License +========= + +Poedit is released under the MIT license and you're free to do +whatever you want with it and its source code (well, almost :-) -- see the +license text). + +See the COPYING file for details on program's licensing and the +icons/README file for details on the icons. + +Win32 and Mac OS X versions contain GNU gettext binaries. They are distributed +under the GNU General Public License and their source code is available from +http://www.gnu.org/software/gettext or, if you have difficulties getting them +from there, email me for a copy of the sources. + + + Author +======== + +Vaclav Slavik +Please see the AUTHORS file for information about other contributors. + + + Links +======= + +https://poedit.net/ + - Poedit homepage +http://www.gnu.org/software/gettext/ + - GNU project homepage, contains gettext and documentation diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..490d708 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1354 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([admin/ax_boost_base.m4]) +m4_include([admin/ax_boost_iostreams.m4]) +m4_include([admin/ax_boost_regex.m4]) +m4_include([admin/ax_boost_system.m4]) +m4_include([admin/ax_boost_thread.m4]) +m4_include([admin/ax_cxx_check_flag.m4]) +m4_include([admin/ax_cxx_compile_stdcxx_11.m4]) +m4_include([admin/berkeley_db.m4]) +m4_include([admin/wxwin.m4]) diff --git a/admin/ax_boost_base.m4 b/admin/ax_boost_base.m4 new file mode 100644 index 0000000..f3279f2 --- /dev/null +++ b/admin/ax_boost_base.m4 @@ -0,0 +1,285 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro searchs +# under /usr, /usr/local, /opt and /opt/local and evaluates the +# $BOOST_ROOT environment variable. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2009 Peter Adolphs +# +# 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 26 + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_ARG_WITH([boost], + [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], + [use Boost library from a standard location (ARG=yes), + from the specified location (ARG=), + or disable it (ARG=no) + @<:@ARG=yes@:>@ ])], + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + + +AC_ARG_WITH([boost-libdir], + AS_HELP_STRING([--with-boost-libdir=LIB_DIR], + [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), + [ + if test -d "$withval" + then + ac_boost_lib_path="$withval" + else + AC_MSG_ERROR(--with-boost-libdir expected directory name) + fi + ], + [ac_boost_lib_path=""] +) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl On 64-bit systems check for system libraries in both lib64 and lib. + dnl The former is specified by FHS, but e.g. Debian does not adhere to + dnl this (as it rises problems for generic multi-arch support). + dnl The last entry in the list is chosen by default when no libraries + dnl are found, e.g. when only header-only libraries are installed! + libsubdirs="lib" + ax_arch=`uname -m` + case $ax_arch in + x86_64) + libsubdirs="lib64 libx32 lib lib64" + ;; + ppc64|s390x|sparc64|aarch64|ppc64le) + libsubdirs="lib64 lib lib64 ppc64le" + ;; + esac + + dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give + dnl them priority over the other paths since, if libs are found there, they + dnl are almost assuredly the ones desired. + AC_REQUIRE([AC_CANONICAL_HOST]) + libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" + + case ${host_cpu} in + i?86) + libsubdirs="lib/i386-${host_os} $libsubdirs" + ;; + esac + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_CPPFLAGS="-I$ac_boost_path/include" + for ac_boost_path_tmp in $libsubdirs; do + if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then + BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" + break + fi + done + elif test "$cross_compiling" != yes; then + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + for libsubdir in $libsubdirs ; do + if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + dnl overwrite ld flags if we have required special directory with + dnl --with-boost-libdir parameter + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CXX]) + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + BOOST_CPPFLAGS= + BOOST_LDFLAGS= + _version=0 + if test "$ac_boost_path" != ""; then + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + dnl if nothing found search for layout used in Windows distributions + if test -z "$BOOST_CPPFLAGS"; then + if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then + BOOST_CPPFLAGS="-I$ac_boost_path" + fi + fi + fi + else + if test "$cross_compiling" != yes; then + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + if test "$ac_boost_lib_path" = ""; then + for libsubdir in $libsubdirs ; do + if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$best_path/$libsubdir" + fi + fi + + if test "x$BOOST_ROOT" != "x"; then + for libsubdir in $libsubdirs ; do + if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) + fi + # execute ACTION-IF-NOT-FOUND (if present): + ifelse([$3], , :, [$3]) + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + # execute ACTION-IF-FOUND (if present): + ifelse([$2], , :, [$2]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) diff --git a/admin/ax_boost_iostreams.m4 b/admin/ax_boost_iostreams.m4 new file mode 100644 index 0000000..9d73626 --- /dev/null +++ b/admin/ax_boost_iostreams.m4 @@ -0,0 +1,116 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_iostreams.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_IOSTREAMS +# +# DESCRIPTION +# +# Test for IOStreams 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_IOSTREAMS_LIB) +# +# And sets: +# +# HAVE_BOOST_IOSTREAMS +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# +# 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 20 + +AC_DEFUN([AX_BOOST_IOSTREAMS], +[ + AC_ARG_WITH([boost-iostreams], + AS_HELP_STRING([--with-boost-iostreams@<:@=special-lib@:>@], + [use the IOStreams library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-iostreams=boost_iostreams-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_iostreams_lib="" + else + want_boost="yes" + ax_boost_user_iostreams_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::IOStreams library is available, + ax_cv_boost_iostreams, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include + @%:@include + ]], + [[std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0; + ]])], + ax_cv_boost_iostreams=yes, ax_cv_boost_iostreams=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_iostreams" = "xyes"; then + AC_DEFINE(HAVE_BOOST_IOSTREAMS,,[define if the Boost::IOStreams library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_iostreams_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_iostreams*.so* $BOOSTLIBDIR/libboost_iostream*.dylib* $BOOSTLIBDIR/libboost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_iostreams.*\)\.so.*$;\1;' -e 's;^lib\(boost_iostream.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + if test "x$link_iostreams" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_iostreams*.dll* $BOOSTLIBDIR/boost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_iostreams.*\)\.dll.*$;\1;' -e 's;^\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_iostreams_lib boost_iostreams-$ax_boost_user_iostreams_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_iostreams" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/admin/ax_boost_regex.m4 b/admin/ax_boost_regex.m4 new file mode 100644 index 0000000..918f16a --- /dev/null +++ b/admin/ax_boost_regex.m4 @@ -0,0 +1,111 @@ +# =========================================================================== +# http://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 22 + +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/admin/ax_boost_system.m4 b/admin/ax_boost_system.m4 new file mode 100644 index 0000000..c4c4555 --- /dev/null +++ b/admin/ax_boost_system.m4 @@ -0,0 +1,120 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_system.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_SYSTEM +# +# DESCRIPTION +# +# Test for System 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_SYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_SYSTEM +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Daniel Casimiro +# +# 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 17 + +AC_DEFUN([AX_BOOST_SYSTEM], +[ + AC_ARG_WITH([boost-system], + AS_HELP_STRING([--with-boost-system@<:@=special-lib@:>@], + [use the System library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-system=boost_system-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_system_lib="" + else + want_boost="yes" + ax_boost_user_system_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::System library is available, + ax_cv_boost_system, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::system::system_category]])], + ax_cv_boost_system=yes, ax_cv_boost_system=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_system" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_SYSTEM,,[define if the Boost::System library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_system_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + if test "x$link_system" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_system" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/admin/ax_boost_thread.m4 b/admin/ax_boost_thread.m4 new file mode 100644 index 0000000..79e12cd --- /dev/null +++ b/admin/ax_boost_thread.m4 @@ -0,0 +1,149 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_thread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_THREAD +# +# DESCRIPTION +# +# Test for Thread 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_THREAD_LIB) +# +# And sets: +# +# HAVE_BOOST_THREAD +# +# LICENSE +# +# Copyright (c) 2009 Thomas Porschberg +# Copyright (c) 2009 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 27 + +AC_DEFUN([AX_BOOST_THREAD], +[ + AC_ARG_WITH([boost-thread], + AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@], + [use the Thread library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-thread=boost_thread-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_thread_lib="" + else + want_boost="yes" + ax_boost_user_thread_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Thread library is available, + ax_cv_boost_thread, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + if test "x$host_os" = "xsolaris" ; then + CXXFLAGS="-pthreads $CXXFLAGS" + elif test "x$host_os" = "xmingw32" ; then + CXXFLAGS="-mthreads $CXXFLAGS" + else + CXXFLAGS="-pthread $CXXFLAGS" + fi + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::thread_group thrds; + return 0;]])], + ax_cv_boost_thread=yes, ax_cv_boost_thread=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_thread" = "xyes"; then + if test "x$host_os" = "xsolaris" ; then + BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" + elif test "x$host_os" = "xmingw32" ; then + BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" + else + BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" + fi + + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + case "x$host_os" in + *bsd* ) + LDFLAGS="-pthread $LDFLAGS" + break; + ;; + esac + if test "x$ax_boost_user_thread_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_thread* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + if test "x$link_thread" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_thread* 2>/dev/null | sed 's,.*/,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_thread_lib boost_thread-$ax_boost_user_thread_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_thread" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + else + case "x$host_os" in + *bsd* ) + BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" + break; + ;; + esac + + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/admin/ax_cxx_check_flag.m4 b/admin/ax_cxx_check_flag.m4 new file mode 100644 index 0000000..2de9f27 --- /dev/null +++ b/admin/ax_cxx_check_flag.m4 @@ -0,0 +1,84 @@ +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_cxx_check_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_CHECK_FLAG(FLAG-TO-CHECK,[PROLOGUE],[BODY],[ACTION-IF-SUCCESS],[ACTION-IF-FAILURE]) +# +# DESCRIPTION +# +# This macro tests if the C++ compiler supports the flag FLAG-TO-CHECK. If +# successfull execute ACTION-IF-SUCCESS otherwise ACTION-IF-FAILURE. +# PROLOGUE and BODY are optional and should be used as in AC_LANG_PROGRAM +# macro. +# +# This code is inspired from KDE_CHECK_COMPILER_FLAG macro. Thanks to +# Bogdan Drozdowski for testing and bug fixes. +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AX_CXX_CHECK_FLAG],[ + AC_PREREQ([2.61]) + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AC_PROG_SED]) + + flag=`echo "$1" | $SED 'y% .=/+-(){}<>:*,%_______________%'` + + AC_CACHE_CHECK([whether the C++ compiler accepts the $1 flag], + [ax_cv_cxx_check_flag_$flag],[ + + AC_LANG_PUSH([C++]) + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $1" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([$2],[$3]) + ],[ + eval "ax_cv_cxx_check_flag_$flag=yes" + ],[ + eval "ax_cv_cxx_check_flag_$flag=no" + ]) + + CXXFLAGS="$save_CXXFLAGS" + + AC_LANG_POP + + ]) + + AS_IF([eval "test \"`echo '$ax_cv_cxx_check_flag_'$flag`\" = yes"],[ + : + $4 + ],[ + : + $5 + ]) +]) diff --git a/admin/ax_cxx_compile_stdcxx_11.m4 b/admin/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 0000000..a9a8f58 --- /dev/null +++ b/admin/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,165 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXXFLAGS to enable support. +# +# The first argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The second argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline C++11 support is required and that the macro +# should error out if no mode with that support is found. If specified +# 'optional', then configuration proceeds regardless, after defining +# HAVE_CXX11 if and only if a supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# +# 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 10 + +m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] + struct use_l { use_l() { l(); } }; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } +]]) + +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl + m4_if([$1], [], [], + [$1], [ext], [], + [$1], [noext], [], + [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl + m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], + [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], + [$2], [optional], [ax_cxx_compile_cxx11_required=false], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++11 features by default, + ax_cv_cxx_compile_cxx11, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [ax_cv_cxx_compile_cxx11=yes], + [ax_cv_cxx_compile_cxx11=no])]) + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + m4_if([$1], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + m4_if([$1], [ext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + AC_MSG_NOTICE([No compiler with C++11 support was found]) + else + HAVE_CXX11=1 + AC_DEFINE(HAVE_CXX11,1, + [define if the compiler supports basic C++11 syntax]) + fi + + AC_SUBST(HAVE_CXX11) + fi +]) diff --git a/admin/berkeley_db.m4 b/admin/berkeley_db.m4 new file mode 100644 index 0000000..c6459ce --- /dev/null +++ b/admin/berkeley_db.m4 @@ -0,0 +1,96 @@ +dnl +dnl @synopsis AX_BERKELEY_DB([MINIMUM-VERSION +dnl [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl +dnl This macro tries to find Berkeley DB. It honors MINIMUM-VERSION if given. +dnl +dnl If libdb is found, DB_HEADER and DB_LIBS variables are set and +dnl ACTION-IF-FOUND shell code is executed if specified. DB_HEADER is set to +dnl location of db_cxx.h header in quotes (e.g. "db4/db_cxx.h") and +dnl AC_DEFINE_UNQUOTED is called on it, so that you can type +dnl #include DB_HEADER +dnl in your C++ code. DB_LIBS is set to linker flags needed to link against +dnl the library (e.g. -ldb_cxx-4.1) and AC_SUBST is called on it. +dnl +dnl @author Vaclav Slavik +dnl +AC_DEFUN([AX_BERKELEY_DB_CXX], +[ + old_LIBS="$LIBS" + + minversion=ifelse([$1], ,,$1) + + DB_HEADER="" + DB_LIBS="" + + if test -z $minversion ; then + minvermajor=0 + minverminor=0 + minverpatch=0 + AC_MSG_CHECKING([for Berkeley DB (C++)]) + else + minvermajor=`echo $minversion | cut -d. -f1` + minverminor=`echo $minversion | cut -d. -f2` + minverpatch=`echo $minversion | cut -d. -f3` + minvermajor=${minvermajor:-0} + minverminor=${minverminor:-0} + minverpatch=${minverpatch:-0} + AC_MSG_CHECKING([for Berkeley DB >= $minversion (C++)]) + fi + + AC_LANG_PUSH([C++]) + + for version in "" 5.9 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1 5.0 4.8 4.7 4.6 4.5 4.4 4.3 4.2 4.1 ; do + + if test -z $version ; then + db_lib="-ldb_cxx" + try_headers="db_cxx.h" + else + db_lib="-ldb_cxx-$version" + try_headers="db$version/db_cxx.h db`echo $version | sed -e 's,\..*,,g'`/db_cxx.h" + fi + + LIBS="$old_LIBS $db_lib" + + for db_hdr in $try_headers ; do + if test -z $DB_HEADER ; then + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [ + #include <${db_hdr}> + ], + [ + #if !((DB_VERSION_MAJOR > (${minvermajor}) || \ + (DB_VERSION_MAJOR == (${minvermajor}) && \ + DB_VERSION_MINOR > (${minverminor})) || \ + (DB_VERSION_MAJOR == (${minvermajor}) && \ + DB_VERSION_MINOR == (${minverminor}) && \ + DB_VERSION_PATCH >= (${minverpatch})))) + #error "too old version" + #endif + + Db db(NULL, 0); + ])], + [ + AC_MSG_RESULT([header $db_hdr, library $db_lib]) + + DB_HEADER="$db_hdr" + DB_LIBS="$db_lib" + ]) + fi + done + done + + AC_LANG_POP([C++]) + + LIBS="$old_LIBS" + + if test -z $DB_HEADER ; then + AC_MSG_RESULT([not found]) + ifelse([$3], , :, [$3]) + else + AC_DEFINE_UNQUOTED(DB_HEADER, ["$DB_HEADER"], [Berkeley DB header version]) + AC_SUBST(DB_LIBS) + ifelse([$2], , :, [$2]) + fi +]) diff --git a/admin/compile b/admin/compile new file mode 100755 index 0000000..531136b --- /dev/null +++ b/admin/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/admin/config.guess b/admin/config.guess new file mode 100755 index 0000000..b79252d --- /dev/null +++ b/admin/config.guess @@ -0,0 +1,1558 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/admin/config.sub b/admin/config.sub new file mode 100755 index 0000000..9633db7 --- /dev/null +++ b/admin/config.sub @@ -0,0 +1,1791 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-08-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 \ + | or1k | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or1k-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/admin/depcomp b/admin/depcomp new file mode 100755 index 0000000..4ebd5b3 --- /dev/null +++ b/admin/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/admin/install-sh b/admin/install-sh new file mode 100755 index 0000000..377bb86 --- /dev/null +++ b/admin/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/admin/missing b/admin/missing new file mode 100755 index 0000000..db98974 --- /dev/null +++ b/admin/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/admin/wxwin.m4 b/admin/wxwin.m4 new file mode 100644 index 0000000..f8e5b70 --- /dev/null +++ b/admin/wxwin.m4 @@ -0,0 +1,1059 @@ +dnl --------------------------------------------------------------------------- +dnl Author: wxWidgets development team, +dnl Francesco Montorsi, +dnl Bob McCown (Mac-testing) +dnl Creation date: 24/11/2001 +dnl --------------------------------------------------------------------------- + +dnl =========================================================================== +dnl Table of Contents of this macro file: +dnl ------------------------------------- +dnl +dnl SECTION A: wxWidgets main macros +dnl - WX_CONFIG_OPTIONS +dnl - WX_CONFIG_CHECK +dnl - WXRC_CHECK +dnl - WX_STANDARD_OPTIONS +dnl - WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS +dnl - WX_DETECT_STANDARD_OPTION_VALUES +dnl +dnl SECTION B: wxWidgets-related utilities +dnl - WX_LIKE_LIBNAME +dnl - WX_ARG_ENABLE_YESNOAUTO +dnl - WX_ARG_WITH_YESNOAUTO +dnl +dnl SECTION C: messages to the user +dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG +dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN +dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG_END +dnl - WX_BOOLOPT_SUMMARY +dnl +dnl The special "WX_DEBUG_CONFIGURE" variable can be set to 1 to enable extra +dnl debug output on stdout from these macros. +dnl =========================================================================== + + +dnl --------------------------------------------------------------------------- +dnl Macros for wxWidgets detection. Typically used in configure.in as: +dnl +dnl AC_ARG_ENABLE(...) +dnl AC_ARG_WITH(...) +dnl ... +dnl WX_CONFIG_OPTIONS +dnl ... +dnl ... +dnl WX_CONFIG_CHECK([2.6.0], [wxWin=1]) +dnl if test "$wxWin" != 1; then +dnl AC_MSG_ERROR([ +dnl wxWidgets must be installed on your system +dnl but wx-config script couldn't be found. +dnl +dnl Please check that wx-config is in path, the directory +dnl where wxWidgets libraries are installed (returned by +dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or +dnl equivalent variable and wxWidgets version is 2.3.4 or above. +dnl ]) +dnl fi +dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" +dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" +dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" +dnl +dnl LIBS="$LIBS $WX_LIBS" +dnl +dnl If you want to support standard --enable-debug/unicode/shared options, you +dnl may do the following: +dnl +dnl ... +dnl AC_CANONICAL_SYSTEM +dnl +dnl # define configure options +dnl WX_CONFIG_OPTIONS +dnl WX_STANDARD_OPTIONS([debug,unicode,shared,toolkit,wxshared]) +dnl +dnl # basic configure checks +dnl ... +dnl +dnl # we want to always have DEBUG==WX_DEBUG and UNICODE==WX_UNICODE +dnl WX_DEBUG=$DEBUG +dnl WX_UNICODE=$UNICODE +dnl +dnl WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS +dnl WX_CONFIG_CHECK([2.8.0], [wxWin=1],,[html,core,net,base],[$WXCONFIG_FLAGS]) +dnl WX_DETECT_STANDARD_OPTION_VALUES +dnl +dnl # write the output files +dnl AC_CONFIG_FILES([Makefile ...]) +dnl AC_OUTPUT +dnl +dnl # optional: just to show a message to the user +dnl WX_STANDARD_OPTIONS_SUMMARY_MSG +dnl +dnl --------------------------------------------------------------------------- + + +dnl --------------------------------------------------------------------------- +dnl WX_CONFIG_OPTIONS +dnl +dnl adds support for --wx-prefix, --wx-exec-prefix, --with-wxdir and +dnl --wx-config command line options +dnl --------------------------------------------------------------------------- + +AC_DEFUN([WX_CONFIG_OPTIONS], +[ + AC_ARG_WITH(wxdir, + [ --with-wxdir=PATH Use uninstalled version of wxWidgets in PATH], + [ wx_config_name="$withval/wx-config" + wx_config_args="--inplace"]) + AC_ARG_WITH(wx-config, + [ --with-wx-config=CONFIG wx-config script to use (optional)], + wx_config_name="$withval" ) + AC_ARG_WITH(wx-prefix, + [ --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional)], + wx_config_prefix="$withval", wx_config_prefix="") + AC_ARG_WITH(wx-exec-prefix, + [ --with-wx-exec-prefix=PREFIX + Exec prefix where wxWidgets is installed (optional)], + wx_config_exec_prefix="$withval", wx_config_exec_prefix="") +]) + +dnl Helper macro for checking if wx version is at least $1.$2.$3, set's +dnl wx_ver_ok=yes if it is: +AC_DEFUN([_WX_PRIVATE_CHECK_VERSION], +[ + wx_ver_ok="" + if test "x$WX_VERSION" != x ; then + if test $wx_config_major_version -gt $1; then + wx_ver_ok=yes + else + if test $wx_config_major_version -eq $1; then + if test $wx_config_minor_version -gt $2; then + wx_ver_ok=yes + else + if test $wx_config_minor_version -eq $2; then + if test $wx_config_micro_version -ge $3; then + wx_ver_ok=yes + fi + fi + fi + fi + fi + fi +]) + +dnl --------------------------------------------------------------------------- +dnl WX_CONFIG_CHECK(VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND +dnl [, WX-LIBS [, ADDITIONAL-WX-CONFIG-FLAGS]]]]) +dnl +dnl Test for wxWidgets, and define WX_C*FLAGS, WX_LIBS and WX_LIBS_STATIC +dnl (the latter is for static linking against wxWidgets). Set WX_CONFIG_NAME +dnl environment variable to override the default name of the wx-config script +dnl to use. Set WX_CONFIG_PATH to specify the full path to wx-config - in this +dnl case the macro won't even waste time on tests for its existence. +dnl +dnl Optional WX-LIBS argument contains comma- or space-separated list of +dnl wxWidgets libraries to link against. If it is not specified then WX_LIBS +dnl and WX_LIBS_STATIC will contain flags to link with all of the core +dnl wxWidgets libraries. +dnl +dnl Optional ADDITIONAL-WX-CONFIG-FLAGS argument is appended to wx-config +dnl invocation command in present. It can be used to fine-tune lookup of +dnl best wxWidgets build available. +dnl +dnl Example use: +dnl WX_CONFIG_CHECK([2.6.0], [wxWin=1], [wxWin=0], [html,core,net] +dnl [--unicode --debug]) +dnl --------------------------------------------------------------------------- + +dnl +dnl Get the cflags and libraries from the wx-config script +dnl +AC_DEFUN([WX_CONFIG_CHECK], +[ + dnl do we have wx-config name: it can be wx-config or wxd-config or ... + if test x${WX_CONFIG_NAME+set} != xset ; then + WX_CONFIG_NAME=wx-config + fi + + if test "x$wx_config_name" != x ; then + WX_CONFIG_NAME="$wx_config_name" + fi + + dnl deal with optional prefixes + if test x$wx_config_exec_prefix != x ; then + wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix" + WX_LOOKUP_PATH="$wx_config_exec_prefix/bin" + fi + if test x$wx_config_prefix != x ; then + wx_config_args="$wx_config_args --prefix=$wx_config_prefix" + WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin" + fi + if test "$cross_compiling" = "yes"; then + wx_config_args="$wx_config_args --host=$host_alias" + fi + + dnl don't search the PATH if WX_CONFIG_NAME is absolute filename + if test -x "$WX_CONFIG_NAME" ; then + AC_MSG_CHECKING(for wx-config) + WX_CONFIG_PATH="$WX_CONFIG_NAME" + AC_MSG_RESULT($WX_CONFIG_PATH) + else + AC_PATH_PROG(WX_CONFIG_PATH, $WX_CONFIG_NAME, no, "$WX_LOOKUP_PATH:$PATH") + fi + + if test "$WX_CONFIG_PATH" != "no" ; then + WX_VERSION="" + + min_wx_version=ifelse([$1], ,2.2.1,$1) + if test -z "$5" ; then + AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version]) + else + AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version ($5)]) + fi + + dnl don't add the libraries ($4) to this variable as this would result in + dnl an error when it's used with --version below + WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args $5" + + WX_VERSION=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null` + wx_config_major_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + wx_config_minor_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + wx_config_micro_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + + wx_requested_major_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + wx_requested_minor_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + wx_requested_micro_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + + _WX_PRIVATE_CHECK_VERSION([$wx_requested_major_version], + [$wx_requested_minor_version], + [$wx_requested_micro_version]) + + if test -n "$wx_ver_ok"; then + AC_MSG_RESULT(yes (version $WX_VERSION)) + WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs $4` + + dnl is this even still appropriate? --static is a real option now + dnl and WX_CONFIG_WITH_ARGS is likely to contain it if that is + dnl what the user actually wants, making this redundant at best. + dnl For now keep it in case anyone actually used it in the past. + AC_MSG_CHECKING([for wxWidgets static library]) + WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs $4 2>/dev/null` + if test "x$WX_LIBS_STATIC" = "x"; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + fi + + dnl starting with version 2.2.6 wx-config has --cppflags argument + wx_has_cppflags="" + if test $wx_config_major_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_minor_version -eq 2; then + if test $wx_config_micro_version -ge 6; then + wx_has_cppflags=yes + fi + fi + fi + fi + fi + + dnl starting with version 2.7.0 wx-config has --rescomp option + wx_has_rescomp="" + if test $wx_config_major_version -gt 2; then + wx_has_rescomp=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -ge 7; then + wx_has_rescomp=yes + fi + fi + fi + if test "x$wx_has_rescomp" = x ; then + dnl cannot give any useful info for resource compiler + WX_RESCOMP= + else + WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp` + fi + + if test "x$wx_has_cppflags" = x ; then + dnl no choice but to define all flags like CFLAGS + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $4` + WX_CPPFLAGS=$WX_CFLAGS + WX_CXXFLAGS=$WX_CFLAGS + + WX_CFLAGS_ONLY=$WX_CFLAGS + WX_CXXFLAGS_ONLY=$WX_CFLAGS + else + dnl we have CPPFLAGS included in CFLAGS included in CXXFLAGS + WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags $4` + WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags $4` + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $4` + + WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"` + WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"` + fi + + ifelse([$2], , :, [$2]) + + else + + if test "x$WX_VERSION" = x; then + dnl no wx-config at all + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(no (version $WX_VERSION is not new enough)) + fi + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + + if test ! -z "$5"; then + + wx_error_message=" + The configuration you asked for $PACKAGE_NAME requires a wxWidgets + build with the following settings: + $5 + but such build is not available. + + To see the wxWidgets builds available on this system, please use + 'wx-config --list' command. To use the default build, returned by + 'wx-config --selected-config', use the options with their 'auto' + default values." + + fi + + wx_error_message=" + The requested wxWidgets build couldn't be found. + $wx_error_message + + If you still get this error, then check that 'wx-config' is + in path, the directory where wxWidgets libraries are installed + (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH + or equivalent variable and wxWidgets version is $1 or above." + + ifelse([$3], , AC_MSG_ERROR([$wx_error_message]), [$3]) + + fi + else + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + + ifelse([$3], , :, [$3]) + + fi + + AC_SUBST(WX_CPPFLAGS) + AC_SUBST(WX_CFLAGS) + AC_SUBST(WX_CXXFLAGS) + AC_SUBST(WX_CFLAGS_ONLY) + AC_SUBST(WX_CXXFLAGS_ONLY) + AC_SUBST(WX_LIBS) + AC_SUBST(WX_LIBS_STATIC) + AC_SUBST(WX_VERSION) + AC_SUBST(WX_RESCOMP) + + dnl need to export also WX_VERSION_MINOR and WX_VERSION_MAJOR symbols + dnl to support wxpresets bakefiles (we export also WX_VERSION_MICRO for completeness): + WX_VERSION_MAJOR="$wx_config_major_version" + WX_VERSION_MINOR="$wx_config_minor_version" + WX_VERSION_MICRO="$wx_config_micro_version" + AC_SUBST(WX_VERSION_MAJOR) + AC_SUBST(WX_VERSION_MINOR) + AC_SUBST(WX_VERSION_MICRO) +]) + +dnl --------------------------------------------------------------------------- +dnl Get information on the wxrc program for making C++, Python and xrs +dnl resource files. +dnl +dnl AC_ARG_ENABLE(...) +dnl AC_ARG_WITH(...) +dnl ... +dnl WX_CONFIG_OPTIONS +dnl ... +dnl WX_CONFIG_CHECK(2.6.0, wxWin=1) +dnl if test "$wxWin" != 1; then +dnl AC_MSG_ERROR([ +dnl wxWidgets must be installed on your system +dnl but wx-config script couldn't be found. +dnl +dnl Please check that wx-config is in path, the directory +dnl where wxWidgets libraries are installed (returned by +dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or +dnl equivalent variable and wxWidgets version is 2.6.0 or above. +dnl ]) +dnl fi +dnl +dnl WXRC_CHECK([HAVE_WXRC=1], [HAVE_WXRC=0]) +dnl if test "x$HAVE_WXRC" != x1; then +dnl AC_MSG_ERROR([ +dnl The wxrc program was not installed or not found. +dnl +dnl Please check the wxWidgets installation. +dnl ]) +dnl fi +dnl +dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" +dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" +dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" +dnl +dnl LDFLAGS="$LDFLAGS $WX_LIBS" +dnl --------------------------------------------------------------------------- + +dnl --------------------------------------------------------------------------- +dnl WXRC_CHECK([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl Test for wxWidgets' wxrc program for creating either C++, Python or XRS +dnl resources. The variable WXRC will be set and substituted in the configure +dnl script and Makefiles. +dnl +dnl Example use: +dnl WXRC_CHECK([wxrc=1], [wxrc=0]) +dnl --------------------------------------------------------------------------- + +dnl +dnl wxrc program from the wx-config script +dnl +AC_DEFUN([WXRC_CHECK], +[ + AC_ARG_VAR([WXRC], [Path to wxWidget's wxrc resource compiler]) + + if test "x$WX_CONFIG_NAME" = x; then + AC_MSG_ERROR([The wxrc tests must run after wxWidgets test.]) + else + + AC_MSG_CHECKING([for wxrc]) + + if test "x$WXRC" = x ; then + dnl wx-config --utility is a new addition to wxWidgets: + _WX_PRIVATE_CHECK_VERSION(2,5,3) + if test -n "$wx_ver_ok"; then + WXRC=`$WX_CONFIG_WITH_ARGS --utility=wxrc` + fi + fi + + if test "x$WXRC" = x ; then + AC_MSG_RESULT([not found]) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT([$WXRC]) + ifelse([$1], , :, [$1]) + fi + + AC_SUBST(WXRC) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl WX_LIKE_LIBNAME([output-var] [prefix], [name]) +dnl +dnl Sets the "output-var" variable to the name of a library named with same +dnl wxWidgets rule. +dnl E.g. for output-var=='lib', name=='test', prefix='mine', sets +dnl the $lib variable to: +dnl 'mine_gtk2ud_test-2.8' +dnl if WX_PORT=gtk2, WX_UNICODE=1, WX_DEBUG=1 and WX_RELEASE=28 +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_LIKE_LIBNAME], + [ + wx_temp="$2""_""$WX_PORT" + + dnl add the [u][d] string + if test "$WX_UNICODE" = "1"; then + wx_temp="$wx_temp""u" + fi + if test "$WX_DEBUG" = "1"; then + wx_temp="$wx_temp""d" + fi + + dnl complete the name of the lib + wx_temp="$wx_temp""_""$3""-$WX_VERSION_MAJOR.$WX_VERSION_MINOR" + + dnl save it in the user's variable + $1=$wx_temp + ]) + +dnl --------------------------------------------------------------------------- +dnl WX_ARG_ENABLE_YESNOAUTO/WX_ARG_WITH_YESNOAUTO +dnl +dnl Two little custom macros which define the ENABLE/WITH configure arguments. +dnl Macro arguments: +dnl $1 = the name of the --enable / --with feature +dnl $2 = the name of the variable associated +dnl $3 = the description of that feature +dnl $4 = the default value for that feature +dnl $5 = additional action to do in case option is given with "yes" value +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_ARG_ENABLE_YESNOAUTO], + [AC_ARG_ENABLE($1, + AC_HELP_STRING([--enable-$1], [$3 (default is $4)]), + [], [enableval="$4"]) + + dnl Show a message to the user about this option + AC_MSG_CHECKING([for the --enable-$1 option]) + if test "$enableval" = "yes" ; then + AC_MSG_RESULT([yes]) + $2=1 + $5 + elif test "$enableval" = "no" ; then + AC_MSG_RESULT([no]) + $2=0 + elif test "$enableval" = "auto" ; then + AC_MSG_RESULT([will be automatically detected]) + $2="auto" + else + AC_MSG_ERROR([ + Unrecognized option value (allowed values: yes, no, auto) + ]) + fi + ]) + +AC_DEFUN([WX_ARG_WITH_YESNOAUTO], + [AC_ARG_WITH($1, + AC_HELP_STRING([--with-$1], [$3 (default is $4)]), + [], [withval="$4"]) + + dnl Show a message to the user about this option + AC_MSG_CHECKING([for the --with-$1 option]) + if test "$withval" = "yes" ; then + AC_MSG_RESULT([yes]) + $2=1 + $5 + dnl NB: by default we don't allow --with-$1=no option + dnl since it does not make much sense ! + elif test "$6" = "1" -a "$withval" = "no" ; then + AC_MSG_RESULT([no]) + $2=0 + elif test "$withval" = "auto" ; then + AC_MSG_RESULT([will be automatically detected]) + $2="auto" + else + AC_MSG_ERROR([ + Unrecognized option value (allowed values: yes, auto) + ]) + fi + ]) + + +dnl --------------------------------------------------------------------------- +dnl WX_STANDARD_OPTIONS([options-to-add]) +dnl +dnl Adds to the configure script one or more of the following options: +dnl --enable-[debug|unicode|shared|wxshared|wxdebug] +dnl --with-[gtk|msw|motif|x11|mac|dfb] +dnl --with-wxversion +dnl Then checks for their presence and eventually set the DEBUG, UNICODE, SHARED, +dnl PORT, WX_SHARED, WX_DEBUG, variables to one of the "yes", "no", "auto" values. +dnl +dnl Note that e.g. UNICODE != WX_UNICODE; the first is the value of the +dnl --enable-unicode option (in boolean format) while the second indicates +dnl if wxWidgets was built in Unicode mode (and still is in boolean format). +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_STANDARD_OPTIONS], + [ + + dnl the following lines will expand to WX_ARG_ENABLE_YESNOAUTO calls if and only if + dnl the $1 argument contains respectively the debug,unicode or shared options. + + dnl be careful here not to set debug flag if only "wxdebug" was specified + ifelse(regexp([$1], [\bdebug]), [-1],, + [WX_ARG_ENABLE_YESNOAUTO([debug], [DEBUG], [Build in debug mode], [auto])]) + + ifelse(index([$1], [unicode]), [-1],, + [WX_ARG_ENABLE_YESNOAUTO([unicode], [UNICODE], [Build in Unicode mode], [auto])]) + + ifelse(regexp([$1], [\bshared]), [-1],, + [WX_ARG_ENABLE_YESNOAUTO([shared], [SHARED], [Build as shared library], [auto])]) + + dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-toolkit since it's an option + dnl which must be able to accept the auto|gtk1|gtk2|msw|... values + ifelse(index([$1], [toolkit]), [-1],, + [ + AC_ARG_WITH([toolkit], + AC_HELP_STRING([--with-toolkit], + [Build against a specific wxWidgets toolkit (default is auto)]), + [], [withval="auto"]) + + dnl Show a message to the user about this option + AC_MSG_CHECKING([for the --with-toolkit option]) + if test "$withval" = "auto" ; then + AC_MSG_RESULT([will be automatically detected]) + TOOLKIT="auto" + else + TOOLKIT="$withval" + + dnl PORT must be one of the allowed values + if test "$TOOLKIT" != "gtk1" -a "$TOOLKIT" != "gtk2" -a \ + "$TOOLKIT" != "msw" -a "$TOOLKIT" != "motif" -a \ + "$TOOLKIT" != "osx_carbon" -a "$TOOLKIT" != "osx_cocoa" -a \ + "$TOOLKIT" != "dfb" -a "$TOOLKIT" != "x11"; then + AC_MSG_ERROR([ + Unrecognized option value (allowed values: auto, gtk1, gtk2, msw, motif, osx_carbon, osx_cocoa, dfb, x11) + ]) + fi + + AC_MSG_RESULT([$TOOLKIT]) + fi + ]) + + dnl ****** IMPORTANT ******* + dnl Unlike for the UNICODE setting, you can build your program in + dnl shared mode against a static build of wxWidgets. Thus we have the + dnl following option which allows these mixtures. E.g. + dnl + dnl ./configure --disable-shared --with-wxshared + dnl + dnl will build your library in static mode against the first available + dnl shared build of wxWidgets. + dnl + dnl Note that's not possible to do the viceversa: + dnl + dnl ./configure --enable-shared --without-wxshared + dnl + dnl Doing so you would try to build your library in shared mode against a static + dnl build of wxWidgets. This is not possible (you would mix PIC and non PIC code) ! + dnl A check for this combination of options is in WX_DETECT_STANDARD_OPTION_VALUES + dnl (where we know what 'auto' should be expanded to). + dnl + dnl If you try to build something in ANSI mode against a UNICODE build + dnl of wxWidgets or in RELEASE mode against a DEBUG build of wxWidgets, + dnl then at best you'll get ton of linking errors ! + dnl ************************ + + ifelse(index([$1], [wxshared]), [-1],, + [ + WX_ARG_WITH_YESNOAUTO( + [wxshared], [WX_SHARED], + [Force building against a shared build of wxWidgets, even if --disable-shared is given], + [auto], [], [1]) + ]) + + dnl Just like for SHARED and WX_SHARED it may happen that some adventurous + dnl peoples will want to mix a wxWidgets release build with a debug build of + dnl his app/lib. So, we have both DEBUG and WX_DEBUG variables. + ifelse(index([$1], [wxdebug]), [-1],, + [ + WX_ARG_WITH_YESNOAUTO( + [wxdebug], [WX_DEBUG], + [Force building against a debug build of wxWidgets, even if --disable-debug is given], + [auto], [], [1]) + ]) + + dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-wxversion since it's an option + dnl which accepts the "auto|2.6|2.7|2.8|2.9|3.0" etc etc values + ifelse(index([$1], [wxversion]), [-1],, + [ + AC_ARG_WITH([wxversion], + AC_HELP_STRING([--with-wxversion], + [Build against a specific version of wxWidgets (default is auto)]), + [], [withval="auto"]) + + dnl Show a message to the user about this option + AC_MSG_CHECKING([for the --with-wxversion option]) + if test "$withval" = "auto" ; then + AC_MSG_RESULT([will be automatically detected]) + WX_RELEASE="auto" + else + + wx_requested_major_version=`echo $withval | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\1/'` + wx_requested_minor_version=`echo $withval | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\2/'` + + dnl both vars above must be exactly 1 digit + if test "${#wx_requested_major_version}" != "1" -o \ + "${#wx_requested_minor_version}" != "1" ; then + AC_MSG_ERROR([ + Unrecognized option value (allowed values: auto, 2.6, 2.7, 2.8, 2.9, 3.0) + ]) + fi + + WX_RELEASE="$wx_requested_major_version"".""$wx_requested_minor_version" + AC_MSG_RESULT([$WX_RELEASE]) + fi + ]) + + if test "$WX_DEBUG_CONFIGURE" = "1"; then + echo "[[dbg]] DEBUG: $DEBUG, WX_DEBUG: $WX_DEBUG" + echo "[[dbg]] UNICODE: $UNICODE, WX_UNICODE: $WX_UNICODE" + echo "[[dbg]] SHARED: $SHARED, WX_SHARED: $WX_SHARED" + echo "[[dbg]] TOOLKIT: $TOOLKIT, WX_TOOLKIT: $WX_TOOLKIT" + echo "[[dbg]] VERSION: $VERSION, WX_RELEASE: $WX_RELEASE" + fi + ]) + + +dnl --------------------------------------------------------------------------- +dnl WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS +dnl +dnl Sets the WXCONFIG_FLAGS string using the SHARED,DEBUG,UNICODE variable values +dnl which are different from "auto". +dnl Thus this macro needs to be called only once all options have been set. +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS], + [ + if test "$WX_SHARED" = "1" ; then + WXCONFIG_FLAGS="--static=no " + elif test "$WX_SHARED" = "0" ; then + WXCONFIG_FLAGS="--static=yes " + fi + + if test "$WX_DEBUG" = "1" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=yes " + elif test "$WX_DEBUG" = "0" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=no " + fi + + dnl The user should have set WX_UNICODE=UNICODE + if test "$WX_UNICODE" = "1" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=yes " + elif test "$WX_UNICODE" = "0" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=no " + fi + + if test "$TOOLKIT" != "auto" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--toolkit=$TOOLKIT " + fi + + if test "$WX_RELEASE" != "auto" ; then + WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--version=$WX_RELEASE " + fi + + dnl strip out the last space of the string + WXCONFIG_FLAGS=${WXCONFIG_FLAGS% } + + if test "$WX_DEBUG_CONFIGURE" = "1"; then + echo "[[dbg]] WXCONFIG_FLAGS: $WXCONFIG_FLAGS" + fi + ]) + + +dnl --------------------------------------------------------------------------- +dnl _WX_SELECTEDCONFIG_CHECKFOR([RESULTVAR], [STRING], [MSG] +dnl [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl Outputs the given MSG. Then searches the given STRING in the wxWidgets +dnl additional CPP flags and put the result of the search in WX_$RESULTVAR +dnl also adding the "yes" or "no" message result to MSG. +dnl --------------------------------------------------------------------------- +AC_DEFUN([_WX_SELECTEDCONFIG_CHECKFOR], + [ + if test "$$1" = "auto" ; then + + dnl The user does not have particular preferences for this option; + dnl so we will detect the wxWidgets relative build setting and use it + AC_MSG_CHECKING([$3]) + + dnl set WX_$1 variable to 1 if the $WX_SELECTEDCONFIG contains the $2 + dnl string or to 0 otherwise. + dnl NOTE: 'expr match STRING REGEXP' cannot be used since on Mac it + dnl doesn't work; we use 'expr STRING : REGEXP' instead + WX_$1=$(expr "$WX_SELECTEDCONFIG" : ".*$2.*") + + if test "$WX_$1" != "0"; then + WX_$1=1 + AC_MSG_RESULT([yes]) + ifelse([$4], , :, [$4]) + else + WX_$1=0 + AC_MSG_RESULT([no]) + ifelse([$5], , :, [$5]) + fi + else + + dnl Use the setting given by the user + WX_$1=$$1 + fi + ]) + +dnl --------------------------------------------------------------------------- +dnl WX_DETECT_STANDARD_OPTION_VALUES +dnl +dnl Detects the values of the following variables: +dnl 1) WX_RELEASE +dnl 2) WX_UNICODE +dnl 3) WX_DEBUG +dnl 4) WX_SHARED (and also WX_STATIC) +dnl 5) WX_PORT +dnl from the previously selected wxWidgets build; this macro in fact must be +dnl called *after* calling the WX_CONFIG_CHECK macro. +dnl +dnl Note that the WX_VERSION_MAJOR, WX_VERSION_MINOR symbols are already set +dnl by WX_CONFIG_CHECK macro +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_DETECT_STANDARD_OPTION_VALUES], + [ + dnl IMPORTANT: WX_VERSION contains all three major.minor.micro digits, + dnl while WX_RELEASE only the major.minor ones. + WX_RELEASE="$WX_VERSION_MAJOR""$WX_VERSION_MINOR" + if test $WX_RELEASE -lt 26 ; then + + AC_MSG_ERROR([ + Cannot detect the wxWidgets configuration for the selected wxWidgets build + since its version is $WX_VERSION < 2.6.0; please install a newer + version of wxWidgets. + ]) + fi + + dnl The wx-config we are using understands the "--selected_config" + dnl option which returns an easy-parseable string ! + WX_SELECTEDCONFIG=$($WX_CONFIG_WITH_ARGS --selected_config) + + if test "$WX_DEBUG_CONFIGURE" = "1"; then + echo "[[dbg]] Using wx-config --selected-config" + echo "[[dbg]] WX_SELECTEDCONFIG: $WX_SELECTEDCONFIG" + fi + + + dnl we could test directly for WX_SHARED with a line like: + dnl _WX_SELECTEDCONFIG_CHECKFOR([SHARED], [shared], + dnl [if wxWidgets was built in SHARED mode]) + dnl but wx-config --selected-config DOES NOT outputs the 'shared' + dnl word when wx was built in shared mode; it rather outputs the + dnl 'static' word when built in static mode. + if test $WX_SHARED = "1"; then + STATIC=0 + elif test $WX_SHARED = "0"; then + STATIC=1 + elif test $WX_SHARED = "auto"; then + STATIC="auto" + fi + + dnl Now set the WX_UNICODE, WX_DEBUG, WX_STATIC variables + _WX_SELECTEDCONFIG_CHECKFOR([UNICODE], [unicode], + [if wxWidgets was built with UNICODE enabled]) + _WX_SELECTEDCONFIG_CHECKFOR([DEBUG], [debug], + [if wxWidgets was built in DEBUG mode]) + _WX_SELECTEDCONFIG_CHECKFOR([STATIC], [static], + [if wxWidgets was built in STATIC mode]) + + dnl init WX_SHARED from WX_STATIC + if test "$WX_STATIC" != "0"; then + WX_SHARED=0 + else + WX_SHARED=1 + fi + + AC_SUBST(WX_UNICODE) + AC_SUBST(WX_DEBUG) + AC_SUBST(WX_SHARED) + + dnl detect the WX_PORT to use + if test "$TOOLKIT" = "auto" ; then + + dnl The user does not have particular preferences for this option; + dnl so we will detect the wxWidgets relative build setting and use it + AC_MSG_CHECKING([which wxWidgets toolkit was selected]) + + WX_GTKPORT1=$(expr "$WX_SELECTEDCONFIG" : ".*gtk1.*") + WX_GTKPORT2=$(expr "$WX_SELECTEDCONFIG" : ".*gtk2.*") + WX_MSWPORT=$(expr "$WX_SELECTEDCONFIG" : ".*msw.*") + WX_MOTIFPORT=$(expr "$WX_SELECTEDCONFIG" : ".*motif.*") + WX_OSXCOCOAPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_cocoa.*") + WX_OSXCARBONPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_carbon.*") + WX_X11PORT=$(expr "$WX_SELECTEDCONFIG" : ".*x11.*") + WX_DFBPORT=$(expr "$WX_SELECTEDCONFIG" : ".*dfb.*") + + WX_PORT="unknown" + if test "$WX_GTKPORT1" != "0"; then WX_PORT="gtk1"; fi + if test "$WX_GTKPORT2" != "0"; then WX_PORT="gtk2"; fi + if test "$WX_MSWPORT" != "0"; then WX_PORT="msw"; fi + if test "$WX_MOTIFPORT" != "0"; then WX_PORT="motif"; fi + if test "$WX_OSXCOCOAPORT" != "0"; then WX_PORT="osx_cocoa"; fi + if test "$WX_OSXCARBONPORT" != "0"; then WX_PORT="osx_carbon"; fi + if test "$WX_X11PORT" != "0"; then WX_PORT="x11"; fi + if test "$WX_DFBPORT" != "0"; then WX_PORT="dfb"; fi + + dnl NOTE: backward-compatible check for wx2.8; in wx2.9 the mac + dnl ports are called 'osx_cocoa' and 'osx_carbon' (see above) + WX_MACPORT=$(expr "$WX_SELECTEDCONFIG" : ".*mac.*") + if test "$WX_MACPORT" != "0"; then WX_PORT="mac"; fi + + dnl check at least one of the WX_*PORT has been set ! + + if test "$WX_PORT" = "unknown" ; then + AC_MSG_ERROR([ + Cannot detect the currently installed wxWidgets port ! + Please check your 'wx-config --cxxflags'... + ]) + fi + + AC_MSG_RESULT([$WX_PORT]) + else + + dnl Use the setting given by the user + if test -z "$TOOLKIT" ; then + WX_PORT=$TOOLKIT + else + dnl try with PORT + WX_PORT=$PORT + fi + fi + + AC_SUBST(WX_PORT) + + if test "$WX_DEBUG_CONFIGURE" = "1"; then + echo "[[dbg]] Values of all WX_* options after final detection:" + echo "[[dbg]] WX_DEBUG: $WX_DEBUG" + echo "[[dbg]] WX_UNICODE: $WX_UNICODE" + echo "[[dbg]] WX_SHARED: $WX_SHARED" + echo "[[dbg]] WX_RELEASE: $WX_RELEASE" + echo "[[dbg]] WX_PORT: $WX_PORT" + fi + + dnl Avoid problem described in the WX_STANDARD_OPTIONS which happens when + dnl the user gives the options: + dnl ./configure --enable-shared --without-wxshared + dnl or just do + dnl ./configure --enable-shared + dnl but there is only a static build of wxWidgets available. + if test "$WX_SHARED" = "0" -a "$SHARED" = "1"; then + AC_MSG_ERROR([ + Cannot build shared library against a static build of wxWidgets ! + This error happens because the wxWidgets build which was selected + has been detected as static while you asked to build $PACKAGE_NAME + as shared library and this is not possible. + Use the '--disable-shared' option to build $PACKAGE_NAME + as static library or '--with-wxshared' to use wxWidgets as shared library. + ]) + fi + + dnl now we can finally update the DEBUG,UNICODE,SHARED options + dnl to their final values if they were set to 'auto' + if test "$DEBUG" = "auto"; then + DEBUG=$WX_DEBUG + fi + if test "$UNICODE" = "auto"; then + UNICODE=$WX_UNICODE + fi + if test "$SHARED" = "auto"; then + SHARED=$WX_SHARED + fi + if test "$TOOLKIT" = "auto"; then + TOOLKIT=$WX_PORT + fi + + dnl in case the user needs a BUILD=debug/release var... + if test "$DEBUG" = "1"; then + BUILD="debug" + elif test "$DEBUG" = "0" -o "$DEBUG" = ""; then + BUILD="release" + fi + + dnl respect the DEBUG variable adding the optimize/debug flags + dnl NOTE: the CXXFLAGS are merged together with the CPPFLAGS so we + dnl don't need to set them, too + if test "$DEBUG" = "1"; then + CXXFLAGS="$CXXFLAGS -g -O0" + CFLAGS="$CFLAGS -g -O0" + else + CXXFLAGS="$CXXFLAGS -O2" + CFLAGS="$CFLAGS -O2" + fi + ]) + +dnl --------------------------------------------------------------------------- +dnl WX_BOOLOPT_SUMMARY([name of the boolean variable to show summary for], +dnl [what to print when var is 1], +dnl [what to print when var is 0]) +dnl +dnl Prints $2 when variable $1 == 1 and prints $3 when variable $1 == 0. +dnl This macro mainly exists just to make configure.ac scripts more readable. +dnl +dnl NOTE: you need to use the [" my message"] syntax for 2nd and 3rd arguments +dnl if you want that m4 avoid to throw away the spaces prefixed to the +dnl argument value. +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_BOOLOPT_SUMMARY], + [ + if test "x$$1" = "x1" ; then + echo $2 + elif test "x$$1" = "x0" ; then + echo $3 + else + echo "$1 is $$1" + fi + ]) + +dnl --------------------------------------------------------------------------- +dnl WX_STANDARD_OPTIONS_SUMMARY_MSG +dnl +dnl Shows a summary message to the user about the WX_* variable contents. +dnl This macro is used typically at the end of the configure script. +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG], + [ + echo + echo " The wxWidgets build which will be used by $PACKAGE_NAME $PACKAGE_VERSION" + echo " has the following settings:" + WX_BOOLOPT_SUMMARY([WX_DEBUG], [" - DEBUG build"], [" - RELEASE build"]) + WX_BOOLOPT_SUMMARY([WX_UNICODE], [" - UNICODE mode"], [" - ANSI mode"]) + WX_BOOLOPT_SUMMARY([WX_SHARED], [" - SHARED mode"], [" - STATIC mode"]) + echo " - VERSION: $WX_VERSION" + echo " - PORT: $WX_PORT" + ]) + + +dnl --------------------------------------------------------------------------- +dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN, WX_STANDARD_OPTIONS_SUMMARY_MSG_END +dnl +dnl Like WX_STANDARD_OPTIONS_SUMMARY_MSG macro but these two macros also gives info +dnl about the configuration of the package which used the wxpresets. +dnl +dnl Typical usage: +dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN +dnl echo " - Package setting 1: $SETTING1" +dnl echo " - Package setting 2: $SETTING1" +dnl ... +dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_END +dnl +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN], + [ + echo + echo " ----------------------------------------------------------------" + echo " Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed." + echo " Summary of main configuration settings for $PACKAGE_NAME:" + WX_BOOLOPT_SUMMARY([DEBUG], [" - DEBUG build"], [" - RELEASE build"]) + WX_BOOLOPT_SUMMARY([UNICODE], [" - UNICODE mode"], [" - ANSI mode"]) + WX_BOOLOPT_SUMMARY([SHARED], [" - SHARED mode"], [" - STATIC mode"]) + ]) + +AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_END], + [ + WX_STANDARD_OPTIONS_SUMMARY_MSG + echo + echo " Now, just run make." + echo " ----------------------------------------------------------------" + echo + ]) + + +dnl --------------------------------------------------------------------------- +dnl Deprecated macro wrappers +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AM_OPTIONS_WXCONFIG], [WX_CONFIG_OPTIONS]) +AC_DEFUN([AM_PATH_WXCONFIG], [ + WX_CONFIG_CHECK([$1],[$2],[$3],[$4],[$5]) +]) +AC_DEFUN([AM_PATH_WXRC], [WXRC_CHECK([$1],[$2])]) diff --git a/artwork/CrowdinLogo.png b/artwork/CrowdinLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..70cb86c8a7f52b19122d661baee4ffe7ed31ad1f GIT binary patch literal 6321 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 \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = artwork +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_appicons16_DATA) $(dist_appicons22_DATA) \ + $(dist_appicons24_DATA) $(dist_appicons32_DATA) \ + $(dist_appicons48_DATA) $(dist_appiconsscalable_DATA) \ + $(dist_mimeicons16_DATA) $(dist_mimeicons22_DATA) \ + $(dist_mimeicons24_DATA) $(dist_mimeicons32_DATA) \ + $(dist_mimeiconsscalable_DATA) $(dist_pixmaps_DATA) \ + $(dist_uiicons_DATA) README +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/ax_boost_base.m4 \ + $(top_srcdir)/admin/ax_boost_iostreams.m4 \ + $(top_srcdir)/admin/ax_boost_regex.m4 \ + $(top_srcdir)/admin/ax_boost_system.m4 \ + $(top_srcdir)/admin/ax_boost_thread.m4 \ + $(top_srcdir)/admin/ax_cxx_check_flag.m4 \ + $(top_srcdir)/admin/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/admin/berkeley_db.m4 \ + $(top_srcdir)/admin/wxwin.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(appicons16dir)" \ + "$(DESTDIR)$(appicons22dir)" "$(DESTDIR)$(appicons24dir)" \ + "$(DESTDIR)$(appicons32dir)" "$(DESTDIR)$(appicons48dir)" \ + "$(DESTDIR)$(appiconsscalabledir)" \ + "$(DESTDIR)$(mimeicons16dir)" "$(DESTDIR)$(mimeicons22dir)" \ + "$(DESTDIR)$(mimeicons24dir)" "$(DESTDIR)$(mimeicons32dir)" \ + "$(DESTDIR)$(mimeiconsscalabledir)" "$(DESTDIR)$(pixmapsdir)" \ + "$(DESTDIR)$(uiiconsdir)" +DATA = $(dist_appicons16_DATA) $(dist_appicons22_DATA) \ + $(dist_appicons24_DATA) $(dist_appicons32_DATA) \ + $(dist_appicons48_DATA) $(dist_appiconsscalable_DATA) \ + $(dist_mimeicons16_DATA) $(dist_mimeicons22_DATA) \ + $(dist_mimeicons24_DATA) $(dist_mimeicons32_DATA) \ + $(dist_mimeiconsscalable_DATA) $(dist_pixmaps_DATA) \ + $(dist_uiicons_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_IOSTREAMS_LIB = @BOOST_IOSTREAMS_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ +BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLD2_LIBS = @CLD2_LIBS@ +CPPFLAGS = @CPPFLAGS@ +CPPREST_LIBS = @CPPREST_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB_LIBS = @DB_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXPAT_CFLAGS = @EXPAT_CFLAGS@ +EXPAT_LIBS = @EXPAT_LIBS@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +HAVE_CXX11 = @HAVE_CXX11@ +ICU_CFLAGS = @ICU_CFLAGS@ +ICU_LIBS = @ICU_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSECRET_CFLAGS = @LIBSECRET_CFLAGS@ +LIBSECRET_LIBS = @LIBSECRET_LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUCENE_CFLAGS = @LUCENE_CFLAGS@ +LUCENE_LIBS = @LUCENE_LIBS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_SHORT_VERSION = @PACKAGE_SHORT_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WXRC = @WXRC@ +WX_CFLAGS = @WX_CFLAGS@ +WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ +WX_CONFIG_PATH = @WX_CONFIG_PATH@ +WX_CONFIG_WITH_ARGS = @WX_CONFIG_WITH_ARGS@ +WX_CPPFLAGS = @WX_CPPFLAGS@ +WX_CXXFLAGS = @WX_CXXFLAGS@ +WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ +WX_LIBS = @WX_LIBS@ +WX_LIBS_STATIC = @WX_LIBS_STATIC@ +WX_RESCOMP = @WX_RESCOMP@ +WX_VERSION = @WX_VERSION@ +WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ +WX_VERSION_MICRO = @WX_VERSION_MICRO@ +WX_VERSION_MINOR = @WX_VERSION_MINOR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +iconsdir = $(datadir)/icons/hicolor +appicons16dir = $(iconsdir)/16x16/apps +appicons22dir = $(iconsdir)/22x22/apps +appicons24dir = $(iconsdir)/24x24/apps +appicons32dir = $(iconsdir)/32x32/apps +appicons48dir = $(iconsdir)/48x48/apps +appiconsscalabledir = $(iconsdir)/scalable/apps +mimeicons16dir = $(iconsdir)/16x16/mimetypes +mimeicons22dir = $(iconsdir)/22x22/mimetypes +mimeicons24dir = $(iconsdir)/24x24/mimetypes +mimeicons32dir = $(iconsdir)/32x32/mimetypes +mimeiconsscalabledir = $(iconsdir)/scalable/mimetypes +pixmapsdir = $(datadir)/pixmaps +uiiconsdir = $(datadir)/poedit/icons +dist_appicons16_DATA = linux/appicon/16x16/apps/poedit.png +dist_appicons22_DATA = linux/appicon/22x22/apps/poedit.png +dist_appicons24_DATA = linux/appicon/24x24/apps/poedit.png +dist_appicons32_DATA = linux/appicon/32x32/apps/poedit.png +dist_appicons48_DATA = linux/appicon/48x48/apps/poedit.png +dist_appiconsscalable_DATA = linux/appicon/scalable/apps/poedit.svg +dist_mimeicons16_DATA = linux/mime-gnome/16x16/mimetypes/poedit-translation-generic.png +dist_mimeicons22_DATA = linux/mime-gnome/22x22/mimetypes/poedit-translation-generic.png +dist_mimeicons24_DATA = linux/mime-gnome/24x24/mimetypes/poedit-translation-generic.png +dist_mimeicons32_DATA = linux/mime-gnome/32x32/mimetypes/poedit-translation-generic.png +dist_mimeiconsscalable_DATA = linux/mime-gnome/scalable/mimetypes/poedit-translation-generic.svg +dist_pixmaps_DATA = linux/appicon/48x48/apps/poedit.png +dist_uiicons_DATA = \ + linux/document-open.png \ + linux/document-save.png \ + linux/document-properties.png \ + linux/document-new.png \ + linux/edit-delete.png \ + linux/poedit-fuzzy.png \ + linux/poedit-update.png \ + linux/poedit-sync.png \ + linux/poedit-validate.png \ + linux/sidebar.png \ + poedit-status-automatic.png \ + poedit-status-bookmark.png \ + poedit-status-comment.png \ + poedit-status-nothing.png \ + poedit-status-cat-mid.png \ + poedit-status-cat-no.png \ + poedit-status-cat-ok.png \ + window-close.png \ + SuggestionError.png \ + SuggestionTM.png \ + PoeditWelcome.png \ + CrowdinLogo.png + +MIMETYPES = \ + text-x-gettext-translation \ + gnome-mime-text-x-gettext-translation + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign artwork/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign artwork/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-dist_appicons16DATA: $(dist_appicons16_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appicons16_DATA)'; test -n "$(appicons16dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appicons16dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appicons16dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicons16dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appicons16dir)" || exit $$?; \ + done + +uninstall-dist_appicons16DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appicons16_DATA)'; test -n "$(appicons16dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appicons16dir)'; $(am__uninstall_files_from_dir) +install-dist_appicons22DATA: $(dist_appicons22_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appicons22_DATA)'; test -n "$(appicons22dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appicons22dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appicons22dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicons22dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appicons22dir)" || exit $$?; \ + done + +uninstall-dist_appicons22DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appicons22_DATA)'; test -n "$(appicons22dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appicons22dir)'; $(am__uninstall_files_from_dir) +install-dist_appicons24DATA: $(dist_appicons24_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appicons24_DATA)'; test -n "$(appicons24dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appicons24dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appicons24dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicons24dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appicons24dir)" || exit $$?; \ + done + +uninstall-dist_appicons24DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appicons24_DATA)'; test -n "$(appicons24dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appicons24dir)'; $(am__uninstall_files_from_dir) +install-dist_appicons32DATA: $(dist_appicons32_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appicons32_DATA)'; test -n "$(appicons32dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appicons32dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appicons32dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicons32dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appicons32dir)" || exit $$?; \ + done + +uninstall-dist_appicons32DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appicons32_DATA)'; test -n "$(appicons32dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appicons32dir)'; $(am__uninstall_files_from_dir) +install-dist_appicons48DATA: $(dist_appicons48_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appicons48_DATA)'; test -n "$(appicons48dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appicons48dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appicons48dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appicons48dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appicons48dir)" || exit $$?; \ + done + +uninstall-dist_appicons48DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appicons48_DATA)'; test -n "$(appicons48dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appicons48dir)'; $(am__uninstall_files_from_dir) +install-dist_appiconsscalableDATA: $(dist_appiconsscalable_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_appiconsscalable_DATA)'; test -n "$(appiconsscalabledir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appiconsscalabledir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appiconsscalabledir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appiconsscalabledir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appiconsscalabledir)" || exit $$?; \ + done + +uninstall-dist_appiconsscalableDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_appiconsscalable_DATA)'; test -n "$(appiconsscalabledir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appiconsscalabledir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons16DATA: $(dist_mimeicons16_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons16_DATA)'; test -n "$(mimeicons16dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons16dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons16dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons16dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons16dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons16DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons16_DATA)'; test -n "$(mimeicons16dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons16dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons22DATA: $(dist_mimeicons22_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons22_DATA)'; test -n "$(mimeicons22dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons22dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons22dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons22dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons22dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons22DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons22_DATA)'; test -n "$(mimeicons22dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons22dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons24DATA: $(dist_mimeicons24_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons24_DATA)'; test -n "$(mimeicons24dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons24dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons24dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons24dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons24dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons24DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons24_DATA)'; test -n "$(mimeicons24dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons24dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons32DATA: $(dist_mimeicons32_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons32_DATA)'; test -n "$(mimeicons32dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons32dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons32dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons32dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons32dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons32DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons32_DATA)'; test -n "$(mimeicons32dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons32dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeiconsscalableDATA: $(dist_mimeiconsscalable_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeiconsscalable_DATA)'; test -n "$(mimeiconsscalabledir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeiconsscalabledir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeiconsscalabledir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeiconsscalabledir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeiconsscalabledir)" || exit $$?; \ + done + +uninstall-dist_mimeiconsscalableDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeiconsscalable_DATA)'; test -n "$(mimeiconsscalabledir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeiconsscalabledir)'; $(am__uninstall_files_from_dir) +install-dist_pixmapsDATA: $(dist_pixmaps_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pixmapsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pixmapsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapsdir)" || exit $$?; \ + done + +uninstall-dist_pixmapsDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pixmapsdir)'; $(am__uninstall_files_from_dir) +install-dist_uiiconsDATA: $(dist_uiicons_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_uiicons_DATA)'; test -n "$(uiiconsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(uiiconsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(uiiconsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uiiconsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(uiiconsdir)" || exit $$?; \ + done + +uninstall-dist_uiiconsDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_uiicons_DATA)'; test -n "$(uiiconsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(uiiconsdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(appicons16dir)" "$(DESTDIR)$(appicons22dir)" "$(DESTDIR)$(appicons24dir)" "$(DESTDIR)$(appicons32dir)" "$(DESTDIR)$(appicons48dir)" "$(DESTDIR)$(appiconsscalabledir)" "$(DESTDIR)$(mimeicons16dir)" "$(DESTDIR)$(mimeicons22dir)" "$(DESTDIR)$(mimeicons24dir)" "$(DESTDIR)$(mimeicons32dir)" "$(DESTDIR)$(mimeiconsscalabledir)" "$(DESTDIR)$(pixmapsdir)" "$(DESTDIR)$(uiiconsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_appicons16DATA \ + install-dist_appicons22DATA install-dist_appicons24DATA \ + install-dist_appicons32DATA install-dist_appicons48DATA \ + install-dist_appiconsscalableDATA install-dist_mimeicons16DATA \ + install-dist_mimeicons22DATA install-dist_mimeicons24DATA \ + install-dist_mimeicons32DATA \ + install-dist_mimeiconsscalableDATA install-dist_pixmapsDATA \ + install-dist_uiiconsDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_appicons16DATA \ + uninstall-dist_appicons22DATA uninstall-dist_appicons24DATA \ + uninstall-dist_appicons32DATA uninstall-dist_appicons48DATA \ + uninstall-dist_appiconsscalableDATA \ + uninstall-dist_mimeicons16DATA uninstall-dist_mimeicons22DATA \ + uninstall-dist_mimeicons24DATA uninstall-dist_mimeicons32DATA \ + uninstall-dist_mimeiconsscalableDATA \ + uninstall-dist_pixmapsDATA uninstall-dist_uiiconsDATA + +.MAKE: install-am install-data-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-hook install-dist_appicons16DATA \ + install-dist_appicons22DATA install-dist_appicons24DATA \ + install-dist_appicons32DATA install-dist_appicons48DATA \ + install-dist_appiconsscalableDATA install-dist_mimeicons16DATA \ + install-dist_mimeicons22DATA install-dist_mimeicons24DATA \ + install-dist_mimeicons32DATA \ + install-dist_mimeiconsscalableDATA install-dist_pixmapsDATA \ + install-dist_uiiconsDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am \ + uninstall-dist_appicons16DATA uninstall-dist_appicons22DATA \ + uninstall-dist_appicons24DATA uninstall-dist_appicons32DATA \ + uninstall-dist_appicons48DATA \ + uninstall-dist_appiconsscalableDATA \ + uninstall-dist_mimeicons16DATA uninstall-dist_mimeicons22DATA \ + uninstall-dist_mimeicons24DATA uninstall-dist_mimeicons32DATA \ + uninstall-dist_mimeiconsscalableDATA \ + uninstall-dist_pixmapsDATA uninstall-dist_uiiconsDATA + + +install-data-hook: + for type in $(MIMETYPES) ; do \ + rm -f $(DESTDIR)$(iconsdir)$$size/mimetypes/*/$$type.*; \ + $(LN_S) -f poedit-translation-generic.png $(DESTDIR)$(mimeicons16dir)/$$type.png; \ + $(LN_S) -f poedit-translation-generic.png $(DESTDIR)$(mimeicons22dir)/$$type.png; \ + $(LN_S) -f poedit-translation-generic.png $(DESTDIR)$(mimeicons24dir)/$$type.png; \ + $(LN_S) -f poedit-translation-generic.png $(DESTDIR)$(mimeicons32dir)/$$type.png; \ + $(LN_S) -f poedit-translation-generic.svg $(DESTDIR)$(mimeiconsscalabledir)/$$type.svg; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/artwork/PoeditWelcome.png b/artwork/PoeditWelcome.png new file mode 100644 index 0000000000000000000000000000000000000000..a531abb2920de11cd222d10d0b6dd00de5213e98 GIT binary patch literal 3907 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 REm8mg002ovPDHLkV1mvuiM#*+ literal 0 HcmV?d00001 diff --git a/artwork/README b/artwork/README new file mode 100644 index 0000000..990ad08 --- /dev/null +++ b/artwork/README @@ -0,0 +1,22 @@ + +This directory holds some Poedit icons. Their authorship and licensing is as +follows: + +The application icon as well as Poedit MIME type icons (except for +platform-specific background template) are under the same license terms as +Poedit itself. + +Toolbar icons are from the Tango Desktop Project [http://tango.freedesktop.org] +and are released to the Public Domain. + +Status icons are from Mark James's Silk icons set +[http://www.famfamfam.com/lab/icons/silk] and are under the +Creative Commons Attribution 2.5 License +[http://creativecommons.org/licenses/by/2.5/]. +The Silk icons can also be used under Creative Commons Attribution 3.0 License +[http://creativecommons.org/licenses/by/3.0/] +(Hi Debian folks!) with the following requirements: + +"As an author, I would appreciate a reference to my authorship of the Silk icon +set contents within a readme file or equivalent documentation for the software +which includes the set or a subset of the icons contained within." diff --git a/artwork/SuggestionError.png b/artwork/SuggestionError.png new file mode 100644 index 0000000000000000000000000000000000000000..4be1cbb1d840734c28abf50b63c0fe6e6a3ff47a GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4?Vc`F~?mqesw1L`1}6)8@_kj7D=EYIG9rpPz4^tmZT0!yHbHlO5|M zGL)1#lru}3Rwbr1SusyP=}{#y$05tntl^H2jt5(2L*)bs-&;C2LZ(igYMLO--q~o< z&~#4bNF$@0+p#JM>E3-@MVDes9NBahvIHAV=aka?ouE|lqE=z6g8E-}SFWNMhGu@5 n)gH4B3bF@v%UHUo@-l2)Z*$`3LhmY|7Z^NU{an^LB{Ts5 z|9`!hvhrdcv%d~I%N=&EI(P2e%mm)l)YSe)CP|0JwKq&e#Kp4>jg9C3`uBIYh_D&! zk0TKaCT(u`!nWXYLQRS7|Auo>c9ox=_#3chI*2m1%$YKK_G$B+IV?TRCJ7p6SlTA( oRDEdpaiK$-tyRdZa!(S&iz1gq%cTW7fevEuboFyt=akR{07q>|Jpcdz literal 0 HcmV?d00001 diff --git a/artwork/linux/appicon/16x16/apps/poedit.png b/artwork/linux/appicon/16x16/apps/poedit.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef333fb67ec11cd556cf1ad6fe864029d5d16a2 GIT binary patch literal 677 zcmV;W0$TlvP)&3UcotL;#Ot4?3M+Q+2qvX?|u+ebu z!D?B9r1Yaw5h2K7F0iH-;aB$a^?$$x!m=0V;ypk-*$nr<(h10m6r@A~zWxJfM`3>b z@5D}F^8OfgLhbtkT^_qaO+q^255`CAf$tUI0CQ~><@7859T-i5GB=QAr=@T^1zmCg zzM)}MGIOZD&A=0hVmCMnxY=n!Bmz$~3h~HL%gwF=EEO0gg;BRSYm8e@pFli23NNFc zp60RbCfmVlV3-y*e;KwEdsqr(9cDg{YLN9oHV0ZF*nIy1bTGcd0T-yV(^XPy+zO+A zDuw!)^Ds`FYS=t@4ASc<=)D6>9d=j7I#RIht7QYKZlFG!hBy5Z!rTm-*Eq#z58=zq zfKE>qw#vpM2M1QmfqE!`MMe%LXgg9bUTfSAa5p&^o?v}&tFs2%1jQfOHeFVWjgQTQ z8nBk$X;$%Dl5M`c!vR_Ts>#~*5dIDOKQD@2F|}6D*zNc~_$|NyB4{E`Y3_=-00000 LNkvXXu0mjfcEl-#P7cpkMNy?>leL`Sm%^ z_r4zmGTwi+XxmW8Um>r9rX{cp*UL*t_7@!fhxH>?tvC`l<~rnDdZ^1g7^5@o1*Hz| zkLp%Ar`70BpSx8DaeW-KkvgRip@M-P68nT{fJS>=@qiNf`j0$LgJtix!wLhoFJA6o}e>#D`{ zmv&(w%tGv{0X?G_tv(yVJ&n+77_^&g06T)=x?d5_UW%ESPe3)_M%LwKh<wOArzXMB^-mY7XJ>CM`a9F=+61pCh=*Bm(rro#bU837!CX zLB5y3=gxt!c{}*c6;Pc$MSdf>goqd?fbVaCIpRX3qaJqO6&J_z{jyHkgd|u@f(4S| zWUxS9CbD^w;K-W3eigBb-Jm@8lR2V*9reT6aS(`)prs>(DsEvnK@5=?ArV)=Uf)M}!2^avS z_M}wvPk7we<41M758Z!_DqgmD{kZH{j3#xKqMl9H!~e<_hCp|GU9H%$?`$oOUUMTlw*&_|Blzr>CXCv1p}}ofXJz4Ga|b%} zc0u5x(5s@*(qfn(*zp}>CV~s>78rDC=<$besk#kyN8TY-A|Ypr3FQaQVo!E2@^x+S zyIXO`SPtGW4FVehBk@S5C_8d6p-vG{0~@!ji^5V-a7fnLNLN9rR5zQ#u4Wg*qliV+Gg#6 z^O;QKIi|wKWJ=P?F+LEQB8L7N*_l{IO;D?VMMY%iZO1+Eh5XJ0G@5 z3~7uw1c8Gj&j}8td9gQ&LH7xyQ9R5{433#R@l`^ARBl`};X&^}fBkqB2C4#PcdaO+HgA5w0Y6?IfeM zq0-enkSYenTKQrokwHTJRFzN*7A@Q@ielqvI5MPGr)hbPjfIAXhlT@zFfo#wP+s!q z$5NdqD^?7bjn$+oWPAh0hf1r}X(m}LdKFF4u}CyNIuwj2B+?Q8oQVotUUMn9Jd1w| ZFaYavyy7n%%gX=&002ovPDHLkV1lAg!vFvP literal 0 HcmV?d00001 diff --git a/artwork/linux/appicon/24x24/apps/poedit.png b/artwork/linux/appicon/24x24/apps/poedit.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3e96c07ca62b7555ee357ef31d86c0d2e18f4f GIT binary patch literal 1546 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 Qk^lez07*qoM6N<$g1F+_-2eap literal 0 HcmV?d00001 diff --git a/artwork/linux/appicon/48x48/apps/poedit.png b/artwork/linux/appicon/48x48/apps/poedit.png new file mode 100644 index 0000000000000000000000000000000000000000..146467365055a191e724d1f3102447dda97d54c6 GIT binary patch literal 4020 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 afB^s^3G2wW2l>kY0000 + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/linux/document-new.png b/artwork/linux/document-new.png new file mode 100644 index 0000000000000000000000000000000000000000..e3808a108e335b14e13711783a3717f7b6013375 GIT binary patch literal 692 zcmV;l0!#ggP);y z08cd6u?+wK010qNS#tmY4c7nw4c7reD4Tcy000McNliru)dCU@B{0fECJ6ul0zpYc zK~y-)t(DDd6JZdCpPAiMn&Jmdn>7fYJcxJ_#8&Vh@X~`PZ{pRn2x2dy;>SPX!Ham1 z+(i)tHKi8|da}9HkQgW;F{asM$HRVRQ|)SfA!K*h_jzZ2znNWOpKH`v5ugP4u2;7> zF7d_vhj(uStA7Jk38)+yP+RQbsIfED#}_X&uen~m?`ED`y>b0!VW^o8{zroTOMI(f zl-d6J>5AdJ8g*8ly7>*wW)sJ8Ff&91k+7)jH5esnQPvkYrCDs|65`BrXyG*$Ji9FR zZC&%=7!X6u49qYyEHKOf#;EiV*}-H1bRJOP05C2ChxY^{Kpay+6+|2YIY_`FGTH?H z4FnyAg9c(hHh}Hlf>kyA7ePeR!$eVW2sp}sWrlVFhHJR~b2dM3Ap}o=mb)8RRa1=- zkgUc6DhM-}9K)x=m{ZKom1t~y=gi602jJ&a#%t@1NwYH9CqLpU98Bjh=QuKRnqI$z z>(%?NSGOtfxwA{uYPFoEq;jZ4_fd7CVO5i3!LCxY+wE|ZX(&TdK1mgkr$i4-E%#4d zVPZ*k`Cd*A5J4#bPBsA=nH6dZqS1XEkCF}JxpB`2-o1Z2m61p&MGVbqEU^iDftQ!g zQ>|9h9@fZ2G%`*Q6xD2(Xfchu-R?xYG4Y;|`| aWBLmt`;((hn6}^m0000 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%0AVyXz7 z&=X-vlz3nN*=RbOn$fgaw140$t-Q3nZ8@?uO9)AP_rtgJ_8l$QxoZcK$y6%56b{b% zr!hL}!-EeTS&7AB?&7t{k#1^fx|r1U!1UD2{r(xhQRk`sTogq2v4#fE3)frl z|NIuNRgyp9@X}!4+5X=7`M?zdfB-N7PypC-G0ph|07JepAi0&3UcotL;#Ot4?3M+Q+2qvX?|u+ebu z!D?B9r1Yaw5h2K7F0iH-;aB$a^?$$x!m=0V;ypk-*$nr<(h10m6r@A~zWxJfM`3>b z@5D}F^8OfgLhbtkT^_qaO+q^255`CAf$tUI0CQ~><@7859T-i5GB=QAr=@T^1zmCg zzM)}MGIOZD&A=0hVmCMnxY=n!Bmz$~3h~HL%gwF=EEO0gg;BRSYm8e@pFli23NNFc zp60RbCfmVlV3-y*e;KwEdsqr(9cDg{YLN9oHV0ZF*nIy1bTGcd0T-yV(^XPy+zO+A zDuw!)^Ds`FYS=t@4ASc<=)D6>9d=j7I#RIht7QYKZlFG!hBy5Z!rTm-*Eq#z58=zq zfKE>qw#vpM2M1QmfqE!`MMe%LXgg9bUTfSAa5p&^o?v}&tFs2%1jQfOHeFVWjgQTQ z8nBk$X;$%Dl5M`c!vR_Ts>#~*5dIDOKQD@2F|}6D*zNc~_$|NyB4{E`Y3_=-00000 LNkvXXu0mjfcElPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOV) z3MV@$jsoTY00XW`L_t(I%cYguYg|c4CI)Y5v`=30Ac*wAMoO%SCTW|rM#dygBbiAu=bXKK zI5X23XQ~gbvlr|Gdw=WO-&$*LQB?pw`t-w{)|%5{5I(M80YHlb5y=^mIaQqqo%}IcO+9Oe))B3R@c zm2zNHoH(aeMDTq-0(1`d+YQ3kUME~wAP56;>sfBDX1KmM&-C;Zz5DjpKX~BKZZT&3 z{h@aoY62IT7g;)W=#G2fm6x&S&!a(5+LTBpxcOHGfL*&f&EEUEyN$@X_da;1gy-D? zj%0G`qJ-u1aApv>dJT8vFyeXO6j18C80v1x+PkmM%VaV~7Or1A2z+13*l96B#6IT1 zzyNe~z?JzzX#gUC;Kk|~9vNcr%v+?>X_qMmuct?tJW20=@vQ>DT3T8N zo%3o`MIjj?k(3h`A)QA20A^;9SRH)*4b~d0wOC^d^XR`KPvwk@8e3xkK~A151)-}e z@&eIv)AG6204_!|VhVslGz0~PFU*sSTb}A`s* z#$t@YvzD#NI+_|A$oa|_mwxBi{Vnu&H#4`K!x&p}>Y5EAVxp2NI0z!(8OwLG%lvp_ zmCmL{tg$H2-Et?^n*Y|g9JJ&J#t2zI#HrBKSdXz56zXF(lJ6fHS9M-3&?56kdRlq4 zzl(*HTuG)YOKXTRRT_J>GFqN)6;Org^eT5H;yk=}2OZl}eD=dtQt=p`Ei8y`$ZBBF zP&K+bRTUMYE<+I!P95z65kePo{6Kp}eAN=MumV^_;-}wyV|;dQ=4fZf?wT*iznQ8s zJ2yiR1mhwSSJh2VL=4b0e0F3wmt9Y#Qi+4AW!e`Xy_%9K8r>akZ7q9YZ0z%4ph-j) oMO6`zIM58l_kW$H|NF4vHR(6M*si-07*qoM6N<$g84$^+yDRo literal 0 HcmV?d00001 diff --git a/artwork/linux/mime-gnome/24x24/mimetypes/poedit-translation-generic.png b/artwork/linux/mime-gnome/24x24/mimetypes/poedit-translation-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9543b8e0f4398b1bb513b42bd49c59a971ea7c GIT binary patch literal 1071 zcmV+~1kn45P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01egv01egwkZ*aM00007bV*G`2iOV) z3MU?7iq@e300XZ{L_t(Y$Gw)@Z&Xzj#(!(?Go5y3DrhW7FR{=CMbzWBsnV0`pl+ZZn};3YtnCog?4F@^`JAr)I~3$!3+Z0k_dnYMGz*~^DB zop$PUBr&?rUdh=fJL_BP`_|g~z<)es?c$?P)7z~zZ-qhlw1SPk>dHh!@DW21EM*<1VQz5_eO zn4$Miy<1lmKvj!CQPfTyy6pjY?N#i>i)av(_9l`E?);erV8@Pjv-_dWP9t*Ry$=S; ze0t>o5sgk=By6Do1O3SL8@NLU5zhmsfKubdP`65Z_nsavo6R1YzIkIm@LlB$oUR~6 z*~C2P>w~s7xHeTRB|roayjTtCv#04Fc$-WnLvv$uT!h|@H7HV~szeXy7hj?WA43|q z!uU9XAR>qnwrshd2U}aHzbD0o!Sig|v{{UpXR1)7rP4T13#{D@acdJoO}^3h(qI`9(-3SBtzDQ*FGK zrluxB=e#OaR1{4lqI&o;WHN{!!1x3btAVe+##)257He$rJzAIPSSf=Q4XiPMASX_g z!070RY<+jGCQ(jvHHwUwqGKVNf&%GFQzYY-=XzSWJpBiAxdNUD%YMj_uEuf}sx_K1 zrexMwj4^oDvN>5pLwy~2U-|sXZyb5JiQdjeCTH^)W6M~m+GrvsD#fCKAOfDTd^<7A z54YxNZ>Yx_ivpcZ_hPNNdkxk)FByU{Le39yDm2vBVyp#)+L(=Kt)M~0POjv9C6gz* znt8pqgXy_^iN0$y3y3ilHK^QZ>&im~RADSL&wYtFkMG__+tw84zQ0Z?9>cT64bh3b zF#u?&8XeiHiV9KJqKF754|jkFp$j>-ueB@=)lz`rMgZ}G?+;B(jvsDs+gb5Ot2R`X ziOF$-AQ%GT!17uE12m*holWO+i>Xv9v0rsnA6>bWD^jUwbT+w#h1{jV!Ozk_18^H~ pYr~8KjX>;Q{z&*m=ga&b<1YZvx%J3FS|0!a002ovPDHLkV1ld7=-B`O literal 0 HcmV?d00001 diff --git a/artwork/linux/mime-gnome/32x32/mimetypes/poedit-translation-generic.png b/artwork/linux/mime-gnome/32x32/mimetypes/poedit-translation-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3e8ab36a1bc59aea56353bd1d76f339301797b GIT binary patch literal 1423 zcmV;A1#tR_P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOV) z3MLerL=OG{00j?8L_t(o!{wJ-Y*bYghQGDXbUN)!tJ4lG_ofke5E`&tjER`Qn?#}k zf-$DX01x_V6kmJ+Ng#qsVhARfAlC{H#s|44hN6+kz2PSK07y%VP72u0bfz=2mk(#= z%!NXy1fM*~p0j72bN2f8zy7uM-td3Fq}0&9e@~l;er>H*gMzwt_1-A8x&K8-8OL`k zV>5>|W!AT~we>s^qV|2e`-f6PI@&81AJE>r-TKSPj^v(wJ7c@sx4&18KVPZA+Dxdz zSHWM=UU!D7s4A*9dk35Cqw4iV1cPB_ORInUxbglor%!F#y?4jlx8Hham5Au00GLvP zYK~vcJ4eYJI7H^7)!382B1N$i5W%XFOeg8?xy{50P0X1$FBqt-d~?^{Z`)N>Mh(Df zuI~adi(Z9g%iza@=%2Sx@qBxLj0o}g07eWAkw&Js%m@Yof!B8J*}i$y0F*rCni#^y z29O!kktJ`S?fa07g;FlWV2ndLlg8)xsSDTB($W$%;;h`hbK8=#G>{L0+ZVvLe~12Y z4F>wb@gW;OLjlRXD|rx(aX8<3mRKxCVsMafILz}irUyGOT-dgM{}+drFaKb$JO;A# zD~i0^hWT_Y)YL*aj9lnM1XP4lbs5LtI0m2NfCyb(-K0}#>g((L{qf+6Q81uxoK*qA zo;!zx>#(o9498EvtXbsTtBM;85rWl0s;jEWge^luNn)`WsZ^S&Q>KQZebE)bmNGS< z1=UB9;~nV21(?>^(ANj|?|bx%5yTj;8ONc*UqLVwqM@OINs}frabgqcRA$B~M3{x4 zpwTGW)eU`p*p3be1dyZ0+}t0j8G{0$U=22t@s9|=7KzXmxgI%+G>%1Y-b8NPfW`*& z(nSP8#EjUCnBwr3rGcEdGa2;CRm{h$G0)U`X=lIO45!XuUYa-Dl2Wv8=rCiC7y=PN zM6hetK|D@o>(=ay1iN!5`gauj!}r+VPCpb1@mf|B<_Q=u;+8pQ)k-hVjTpE3Em{N% z7P>$q5k$;mmRR)|u;lN9%=7tq8W5+$@O&;Y|^H0iRz!rqS8(50(|0Gge z>VAL#4K)F#G}Zvn^I(w9+xK}em|}8WHFKNm@EKE5+{)De`B<84>~r@}rJt)k{d|7x z8j;#6L<~RuewXzJukd1Xgr%*Mx!a#))s9o{caPD)h$0-WRrn08O<|hHgs2ZzVvMli z;1xbu+(M+bib}tarL!kf<@0&MEevm2BJ@I#6{C1IahKqn%@}$gxa-S=XM+VA5MF4i z!-$}{)U~6o15)fXy8*}nIDGjI9cvF@t@2z$jVD|b1f?z%$j`p)G_-{bNWp4b;5@63 zIZYAXUoefH`w71J`Fg(MiGm7=bb3Sp=5Y)ZW|oxn1Q=6W$^5BfSv+eJ(f%Y>bD?p8 z-no}3`f~ID^wGQ7WZIG(vH(>19p*JhIDE0o`+gviqT_l`@rHghB6QcG?6151A-6ra z7a!utr8`(vPF(M0{Q$2zu5($iB;y?{B1f+%y z!MU^NH*MMa)rY874@cW@G!AEb_zWoVOBXM18tH5p%C-u?|CG<6$?VKyg&}y + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Text Preview + + + text + plaintext + regular + document + + + + + + Lapo Calamandrei + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/linux/poedit-fuzzy.png b/artwork/linux/poedit-fuzzy.png new file mode 100644 index 0000000000000000000000000000000000000000..5457799caaf5e96ce0222c1b62f34adf91ad1316 GIT binary patch literal 1507 zcmV<91swW`P)WFU8GbZ8({Xk{QrNlj4iWF>9@00l=$L_t(I%e9nQY?M_P zhTpUN9a^C6&{8O~*aB^dWeWwPLMcmI_C+zqh=u?mCJ+;C*dls~DP4gJqc>itF)@KF z6De&eh{Up#WoBp<2D?xYQYg%H{`vR+950}?Hb&!x=j!A=U!HvD%lo~+|8&T|6;#(8 z4lu?(lTwyRDG8m;@*ly+k01BwrurVGY%ioF65?su(iO!;g+)|13>bzEL)X#M+an^K zkzXjG>Cfui22N8yud1rjhgp0yShtcp=gpa4w_rhuqG>v=bX@fLeSTuw_DBbo<6wN+ zcsjRuPH{=eB50b9j%$~zqtPe@Q2!Tjbvk(BXLiu6YV12}iS4fE#C!`p9d zMSlJaod4+@1_lPeIY(};4=)6QuxuN;u0uC;#A7i?Ahn^PA$5cY0Ob`c^9hwL1SD_Z z@c@=AUW&;%Q(#&q2qEw&9$XJyMI;i&;L|~*r)R)04CsaqP1E2w4s6?0V)0n~Olw;^ z0PyOX!(faxRFqfFotEoE$JGvGq-VgkELfHa!_Yw)!z(W@M!+9HD0CfX&z^y%>&VQ^ zz|^U^@Me0EpEsR98hBJCrEDOCNDg4SlyXDB9|U6zrAtcTx&n#B5L`zfYf?7+z5ohvG6_{xF*Fp1l9GZ44}OQwAAo0^2VGq^(cga;grI+A`SPZw-A;@P zA=dkRexfE-Se6Yb1PCQCOaq2t;Qsx7Fvby!J%uY=5D-kx&Oyi3%P1%)1OdgevK8?8 z{0N6bv#(w6r~|NtQ$kO6b#-o)Qjkbz1X4;A%q&2rcM@#dLMJU20s1g>x~IQSU3 zQ*)7>or8cs2(BndB!-ZcokgUSo9d#g^0_PA0~as1OGfEC6&0%qB?L{)O|Wh2Z!>^W zf`C7W{OQw?mX-!BnS>ROLpL<2i3AD@i)b`@yKZEq8;{l9TCu#mkWz}4GtGUQH@=>C z;^cQjJGbwes2e&g%Yy5=V2mM|OhVI=NKH)xV+`?lY-CJA3beQXtdFd;ZdyCq&bEFD zfHl$A|~;&DhwXqtxTohTp$g26m^z20ZRH)!P)ffi zVHHxJHGk$>l(+gKj4ga+O}0BfpLUDC|sedD%TJ~DNZ&00LQT$&N#Cjhj6Y4 zDaBW=>wZEZP>OAN@?%n zS4$Nkp>0^d2@=9swD6_vjIn#{d8cJ-*RA>SQoQIx*L6FS3AHSlz8q_=b!`!m{CLZSPo%)z()hBayJIt*=(c>Y?zB5q&s*M`F`7%^huLTW`0v zHAgMW+BO!<7_T|qaw^6-KQdb9Txo1>X-X=JQV#$J_a7R0`vWQ+o`%lQS^EG0002ov JPDHLkV1mqQqg?<1 literal 0 HcmV?d00001 diff --git a/artwork/linux/poedit-sync.png b/artwork/linux/poedit-sync.png new file mode 100644 index 0000000000000000000000000000000000000000..49bb3ae4216168fd83f959144748ced3f0769021 GIT binary patch literal 3074 zcmaJ@4Lps^TpylCC4M6UC(o0nZ`EC)j9Fdz+w2QY30Muk_%+ZvQcNE<{z#9N|Z2*9@zXQNK z1WFqP009mF#&!SzArAobxdrw9L?ocbbr0nOfQF9rQUHz>7yy8Z9y2He4)OLP&>=R4 z#(*M0Od^|$WCH*(k$^n1L70Y0WV1MYLLvz*%OD`nQW%Ry$x`4r5<0}&59JE+K$I=U z27^PB)ln!Ek;jN41W-3G(2+M1ItGTh1S~coApw(Mje&U4SStqy2P_Vc#p5lJ3`>3z z2c{)ja`@}#i+rp@1^ILylM6E;4oX^=76}Pp5*jUS^yxFN6J|zz?!@6QEDKp6RvN)t zVQ|>5(HQhk^0)#XOD2v%$AT=74RT;U!n67+4@_i!qn$MJ&31^lpZYBlnMmW#lVm2& zuZ<{GP6z<`5KADnAeh61$#|k{K}+G!j?A-MAvTu>^7#mjY`Z{_$Cl=Yd~QRw!s8Yg z^5{~AFOP{hM3V|5TP@_vV@vZxzuG|_m18jI1egi4Ksh%MPh_*@!h#p09|J6=bmj;w z8Yh~BPPAlzQ8WPyMw0`fC^&(JOldHeL4!deRys*6=Hepr=;GQ$>{nzE5sc0QX)wfF zQbAfa5Zt*K{Vb0BGc8UKi3)^4CI{sGnTo|lWGcSwDAmCiM8<;jC3eV6qR^tTazbP^ zzRZ@^;4!0PV7^@LN5zZ1K+unYZ~5#eh-5M8C@RFJF*&G(Juef^j0cg8$cB)Kmu`L} z3*_)YK9(zEFk}SmpEI^92(m(`Ol0@UX5Y?+i2Z6nZrEgTSBM4i z0=YCgD4ph|(9&#Ko6v8ykqgKXk-bmwh8WDKBq}n7WIWEwmVm<(@OCIGd+CEUvbC4w zEMdFO&s`7%vB)w7Z0Q)HtTEOYM6;ADpRqum_f_sBmHpQ9C~{7d)e+{$GoP%!aV^*d z0LoiDs4hYF+U%ootROdCNk_`~rP>dkO$sDq)X zHBrMS>@VCKH;QjPKYAJL$)m?dwx8RiTAf30Dtm&8Gt$#mDO6RBBNX-67!288@Z61U zt6gVVb}vGy?B|N>FEEwWtB*W+p)RAECqh4Wf+#jq(<~9vhSWzo#FDFTwls@ow^hzs;KN8`cLrb2?APDtpKzoLvP*bUyRukP2xnz)beg@|N!nkMzpNHlcReTATWq9vJ6YeR zEphhv?IS&n1(Ub0oGtC&`mSw4@;KA|yy~y;z3u;#JnCz+V%go)veO9*QabWWz}$tF z`b$5?&M8cdA6GO#;Df%P-x;h+dH*{?W@P z{+kYGMf|=!puOkCU3Amg2CwRx9N+u@F0Gk;)9Sb)XHT<{aA!ix z)H^}s;H0C8-v>&NrG1?+7j5BeJy4bY`dH$uI2BE^$?$No*4)e}w8Wh;6s-0=+L!dt z3S9=Uv;Xb>R~Pq1Pn0_i7sZf@>Kdj(o(JmY_6I!ey;z+@DttNdT+j2AZFZQO&(?w= z!@+VFn+Q?%XxFIZrTDsgElEAr zyU^eUb|l^~>wt-xCPpkAy3}0bul)MO&Lf=1s={oti>chGQYH<_G zY)bTOLq`6=!kjmEy7TY1p68WPZ8fuFak$g{h9~wvIHqns)QU=I?#mtR9ZJgpQ;Hq+ zBeqmH=m`sben=j6*K*}p(And`5)G&w`b`w(>E>_i+tF?%H2g!q05fLo{AkLzAUeRj zbx$=$l*x>ZE$K;X9S91xSXN%PZ7$Hg{%Fhg-OP@YYg-usFYirweK(U#HmPaMxUsVB z@-~l6{rDYtYyPX@RzZCggpN|%=Q`qUFOC{Y_ntZp{b+7Ja!se?rdfNt5}i{wn{Ls@ zIoo4|H_Fm}m_0l^Ja@aRi?ZqP;KoDOosy@|jdJacv{aho4!bi}r(9`ja;ffX6Pmf1 z{4|)PV4;_`_nr^4=V@n_7;G50Peof%i`QKrZcRHfJv|-Y6IGkE|4f7j zC78GlYwDbwn%dYtNz7b{KOK>CWJOz3cX!ag>gw)5_oomc(YIUEu zRIK-j3qx(#8Wdz78y9!NI3sFVndF3N)^3ODvB{aLBw~@12kTf!p27RELpntq-@V^U zPV6@FNHZ^+(LIF96|PM6NM7YN`$tWXnx)}X1j;eh|9NA#u7Er}v7RFRr|se9L#?9h G*!zDAGKvcT literal 0 HcmV?d00001 diff --git a/artwork/linux/poedit-update.png b/artwork/linux/poedit-update.png new file mode 100644 index 0000000000000000000000000000000000000000..5f7a362bcdba1dea5539921539dba0068e9fd613 GIT binary patch literal 1464 zcmV;p1xNacP)eh}uxleqiy}2zAP&&iqCgwK z56xp93inAy``GlQ3u**43a5?jqEZ$#R;@UR5m<>7OQL1j7A1>XNY0Fg!)+!Hkp$I< zFK~hTa=!E9zX$&j0MDI%V;Fdsr<~5gz6sm5dw~W(6+%n{?*V_gbm3h3+iJx2<4L%? z!TV(_)zNog-(I@nAwq!$>KqE2W{JmZ8uuQqF*&h9b6y%09X5d@_G@sY~iVs`QPn1zPh(OA%ytRr3>d)wpsF%(6(f3 zarpF5^u%DCf~I2VDz;VS&ddYCiC!w@5>8pr6$HDyNj$QL8d7vAn?Lra@hdBD!R!ur zw+*LGA88!^ZVFY?II_QsmGuJAj(r4M!bp;WS=1249EMS(w>v?L&xOZbM@}zAGbZ)F zouAa-f>~)x@DM=vU>`3W>L%72V5qNy(GSN71Y1D}oDK!WA=Bs&l1hdd+MlAK-iyoS zA{uaTpfAoBhtK>#Z47=NK-mJH02u6x(b*nAk_7Mk=f4adK7kNm+h7BdkTBODFrHaP za`~a6b9|@|MUjd4CA#8!c-)p8_)J|J-d21(6xmbghy*bWop-LkPon=AHelIXU>jPtjO_~m?0_Z3DLI@9jkPRg+lg+J z$QFuh=w)=HjB1oH)HQ6|{=a!`4)|DH*`T$#5r-mkuls-p`02LCxIC_^UaTmZQKC^^ z!lyV`Tmw&2+c!4UYLrx)TFpY1cl2PICSB1G{}}s(?;L8OW9GIAxVOP?t82M4*>%+8N_ZQcwuY=Bb1b~3w$7?4CaOn%=RD--$M3b9PZ69~ikI^&@UDx^G=I69W z<1A0SrJw6*w9zE!(_gWQ;gye0es;%I4*HNid7@e3RTXL~! zR@f|-(TgQqmP%(!9r;3mf)Zwaah>@4SFR@KC%b_^E4x1U)B9ge-BBFMLATr4;CK4) zt*$Y8<2FDv_m$-r$NoCJ&Dsf}OnQ7a*xo<* z=&Kul$J6%1vMoD=+sDk(CM&v)wpqq7E10HRc!_qNa)^0PAcF-MOcV`AcCnvw@tSp6TV80qIG3Gav(zBVljh|2741de= zc=;e)6=%<$?F16QGe8nZSeDfzglH2&c(*5KWMsq!$Ye5Hym(Rk`ts$cZ8GNC+J2>+ zKYxC8OQ{EN0$v~lGy(3rckfCI3kv{ZX=#a>nHd6s09W69lXyICr&1{scnI7AJ_IHc zkX1%TMt0(2>x!*LV)yErpPwh4PLs`M$>nn7ayh1^rnq+Pn%ELl5BPybK>r$F20#B; SW(_6)0000$i6R literal 0 HcmV?d00001 diff --git a/artwork/linux/poedit-validate.png b/artwork/linux/poedit-validate.png new file mode 100644 index 0000000000000000000000000000000000000000..59e8928e65dbc0cec891e6c4ca79ba250b3989bc GIT binary patch literal 708 zcmV;#0z3VQP)bl+8<2Q5eR5@40s*QzHn*CZT0$Gd6xu6C$o1j42MPT6~N~om-W+I3r4n|F-i$TW^LLEi#oEFZ#j?Q&Ph#t6b zUhX}=^PJ~B_lVY-{~^;J^bK@B6j7c30<)~tqxQCrE&#OFXsziR=+XbGGy|>mzGGXl zSPa83&{`uRhzP)ev0dBJT2oe5<{m}n1bfoV%uE*Ku&S!6aO+b}a3B!CH1|KTEbBn+ z<~}c2M3|nQKGLbJ>gsBgQpW=;rO;Xv3rGos1V{88&t& zL4V5Gyz=t$oQ@5{0QS!D*X1bBWeCvcFy%>hI}dG9DTQg8csw2o3JOS>n$C$nUVR^S z49u>5fshEHJq6 z(y6;bt+ds)WX*L2+s$*!*q1s(u*6Snd!C-i1DXRjj&})V%J26(C&SKIDaF{84{W8j zDe|0j?(@9h($dmgYdI>UFz0&*yt`|4_do9KI2QE?&HtLeX^-XbHble(ih+{!Qw$UV q3NQc->;Oq%75D>eq-#s3fqwyl4;K}=Dv){r0000 z&rTvi5XP%}1}B-2O-M`(o**Q6BiSQ~C+|LkH?BU5SK?{kK(EA`=Y0WWZ-fgQ6$3HM zKwDqU)NCW5F2PFL>FKWeef4L8MBi+t)9I9&&E|!3?qOeA%jMDx27~)I zZeP{w^>|+bqtR#<1i>Zqu0vzYvR13b)oOKLe6rTY%zOke+?9HJ_nZE{%sJfT2uFuM zB04|&NsGmTq9_vf&H~S~lnxG}mHeKj$;vxkM1TiOJQ%s;mJ#0Z++=!(>uh=c&PuEw zCjx*Y5QaVA9|^)Y3@inq0xd^!Jm-iwv`DRJ5rR}ipKy9FsDVfVHU6uVE3sw;4&R~z zsQO?9ZF_R=#5@r|oCxI=_?$ujnfe#ozyFcWaF)CvK>{R?%_>{J{u?7rq<-wb7JE%r5BO_CecxxOpfMhgXQfgpPLlQC^IfE; z)9LGcK9^4^?DzY>xc7frt=7?SIE*Kg$(R2(bMf2}hbGAPihZS0nU%}sqh7CfvrBUS a9rFgN1&+VR=zx&`0000a!u4Ek1OWvhNg%r^rdTXsY3VK8?SdPP#w89em&*t9`8-y> z{{XWmi9uo#0y2mREC>R)tyU|D<2Xwun+7u3ce~yHC8N{n5>SE*7ca{{mxCuK52M#x z6?VgqVUHr69iApkt_fp7}UIJIX)^0!0b=W3KH zu#9)c?;$B!KqeOeo#x5*?d$d(>1am)Y%kbK4HaZEF7DqvCglmk2%DRMFl4hCO2bI^ zX=T@9j!era3Mj9K%ggW14jP4g$@9D^u1>q%4oF>&Q{%YG^bC$1Iv|Sn?VXTj+j1A` z_4;iBxjK9L%sJ01;N^>_f2ih9=zM1B|Mb6I%0_FShXA!&ZGuYnYi{m5Mm>)<#Bd!= zpw*3PwK}@fZ5>`FlHMWvu(_YKY}%#vV^WBMz1|LWCNQ>lr((kpWqlB;!RF;8mB1-g{M M)78&qol`;+0D@Rki2wiq literal 0 HcmV?d00001 diff --git a/artwork/poedit-status-cat-mid.png b/artwork/poedit-status-cat-mid.png new file mode 100644 index 0000000000000000000000000000000000000000..6469cea7e99024577964e5c05a3d77d9200f18f9 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=8^mK6yu{izqk}bDmp#c_6~(fb3t z9fO=s)r1xNys<0toy$Ta)Ef4L9Xj#;LuHACPs?SaC)p1!HoK`$|DN0S(B^2t{U;k3 z{z`Gkym)-$S?qyE;12cK15evqWFMuk`FjMfG>*N*A!+l(#* jF-_{7+4G}*QQ$ohjSunXc9>@Z9nawD>gTe~DWM4f1nGD{ literal 0 HcmV?d00001 diff --git a/artwork/poedit-status-cat-no.png b/artwork/poedit-status-cat-no.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd803115831933aa171497cfe9c1af983035f86 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=8^mK6yu{izqk}mh50EX6wkMFui zZg|fh<-*g%H9O|;u|DY#DW^u;K&o-|vHe`x?xbw1zYx$2><(A#;6QU!sSfhO( ioL~suuJh6Vfb_?jd)=>7iZy|bXYh3Ob6Mw<&;$Tq>~Ep~ literal 0 HcmV?d00001 diff --git a/artwork/poedit-status-cat-ok.png b/artwork/poedit-status-cat-ok.png new file mode 100644 index 0000000000000000000000000000000000000000..058ad261f520490be9d3fc2e322392fdedfd1cbd GIT binary patch literal 295 zcmV+?0oeYDP)ef43{&%10 z`rmr0`TyJtv;LcOX%laN^>UMjsi!CYUwmcZ|JfI2{-1ED=f8fLD)C;hoM$LyF4%P)i2vikyMR~)n*keF9=!Gc_n*K2@qsNT?}H4v4a974 z1ArVJApZ0B-@pGKzWw|E^3%Wn&p!V9|K$C@{}12&`+x7vzyG&i{r!LE6~yrB1;;^# zm?0Y=moxPMSn>r>N00000NkvXX Hu0mjf$^yWL literal 0 HcmV?d00001 diff --git a/artwork/poedit-status-nothing.png b/artwork/poedit-status-nothing.png new file mode 100644 index 0000000000000000000000000000000000000000..44fe94da8ab2e0d3e31af7681fc1e8758ca4b0a9 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0w65F1|<>&kwEnO~HdHRr;N%|M}WPZ!4!jq}NS ziXO5sYc_N?x-eW{keu)_{`i4M_Pdx$3U{<=i~AWI5>e20o0gma1TNp1cj=z!+W3nx zl5tnk8mSGIoXgo#%#%M0yJ{aP BLmL19 literal 0 HcmV?d00001 diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..86859dd --- /dev/null +++ b/bootstrap @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +make_msgfmt() +{ + for i in locales/*.po ; do + msgfmt -c -o `echo $i | sed -e s/\.po/.mo/g` $i || exit 1 + done +} + +echo " - aclocal" && aclocal -I admin && \ +echo " - automake" && automake --foreign -a -c -f && \ +echo " - autoconf" && autoconf && \ +\ +echo " - generate-docs.make" && make -C docs -f generate-docs.make && \ +\ +echo " - msgfmt" && make_msgfmt && \ +exit 0 + +echo "Automatic build files setup failed!" +exit 1 + diff --git a/configure b/configure new file mode 100755 index 0000000..1862ad9 --- /dev/null +++ b/configure @@ -0,0 +1,9501 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for poedit 1.8.11. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and help@poedit.net +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='poedit' +PACKAGE_TARNAME='poedit' +PACKAGE_VERSION='1.8.11' +PACKAGE_STRING='poedit 1.8.11' +PACKAGE_BUGREPORT='help@poedit.net' +PACKAGE_URL='' + +ac_unique_file="poedit.desktop" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +WX_CONFIG_WITH_ARGS +SED +CLD2_LIBS +MIGRATE_LEGACY_TM_FALSE +MIGRATE_LEGACY_TM_TRUE +EXPAT_LIBS +EXPAT_CFLAGS +DB_LIBS +LUCENE_LIBS +LUCENE_CFLAGS +GTKSPELL_LIBS +GTKSPELL_CFLAGS +ICU_LIBS +ICU_CFLAGS +WXRC +WX_VERSION_MICRO +WX_VERSION_MINOR +WX_VERSION_MAJOR +WX_RESCOMP +WX_VERSION +WX_LIBS_STATIC +WX_LIBS +WX_CXXFLAGS_ONLY +WX_CFLAGS_ONLY +WX_CXXFLAGS +WX_CFLAGS +WX_CPPFLAGS +WX_CONFIG_PATH +HAVE_CPPREST_FALSE +HAVE_CPPREST_TRUE +LIBSECRET_LIBS +LIBSECRET_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +CPPREST_LIBS +EGREP +GREP +BOOST_THREAD_LIB +BOOST_IOSTREAMS_LIB +BOOST_REGEX_LIB +BOOST_SYSTEM_LIB +BOOST_LDFLAGS +BOOST_CPPFLAGS +HAVE_CXX11 +CXXCPP +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +RANLIB +LN_S +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +PACKAGE_SHORT_VERSION +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +with_wxdir +with_wx_config +with_wx_prefix +with_wx_exec_prefix +enable_debug +enable_dependency_tracking +with_boost +with_boost_libdir +with_boost_system +with_boost_regex +with_cpprest +with_boost_iostreams +with_boost_thread +enable_legacytm +with_cld2 +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CXXCPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +LIBSECRET_CFLAGS +LIBSECRET_LIBS +WXRC +ICU_CFLAGS +ICU_LIBS +GTKSPELL_CFLAGS +GTKSPELL_LIBS +LUCENE_CFLAGS +LUCENE_LIBS +EXPAT_CFLAGS +EXPAT_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures poedit 1.8.11 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/poedit] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of poedit 1.8.11:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-debug Enable debug build + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-legacytm disable code to migrate pre-1.6 TM to the new format + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-wxdir=PATH Use uninstalled version of wxWidgets in PATH + --with-wx-config=CONFIG wx-config script to use (optional) + --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional) + --with-wx-exec-prefix=PREFIX + Exec prefix where wxWidgets is installed (optional) + --with-boost[=ARG] use Boost library from a standard location + (ARG=yes), from the specified location (ARG=), + or disable it (ARG=no) [ARG=yes] + --with-boost-libdir=LIB_DIR + Force given directory for boost libraries. Note that + this will override library path detection, so use + this parameter only if default library detection + fails and you know exactly where your boost + libraries are located. + --with-boost-system[=special-lib] + use the System library from boost - it is possible + to specify a certain library for the linker e.g. + --with-boost-system=boost_system-gcc-mt + --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 + --without-cpprest Ignore presence of C++ REST SDK and disable it + --with-boost-iostreams[=special-lib] + use the IOStreams library from boost - it is + possible to specify a certain library for the linker + e.g. + --with-boost-iostreams=boost_iostreams-gcc-mt-d-1_33_1 + --with-boost-thread[=special-lib] + use the Thread library from boost - it is possible + to specify a certain library for the linker e.g. + --with-boost-thread=boost_thread-gcc-mt + --without-cld2 Ignore presence of cld2 and disable it + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + LIBSECRET_CFLAGS + C compiler flags for LIBSECRET, overriding pkg-config + LIBSECRET_LIBS + linker flags for LIBSECRET, overriding pkg-config + WXRC Path to wxWidget's wxrc resource compiler + ICU_CFLAGS C compiler flags for ICU, overriding pkg-config + ICU_LIBS linker flags for ICU, overriding pkg-config + GTKSPELL_CFLAGS + C compiler flags for GTKSPELL, overriding pkg-config + GTKSPELL_LIBS + linker flags for GTKSPELL, overriding pkg-config + LUCENE_CFLAGS + C compiler flags for LUCENE, overriding pkg-config + LUCENE_LIBS linker flags for LUCENE, overriding pkg-config + EXPAT_CFLAGS + C compiler flags for EXPAT, overriding pkg-config + EXPAT_LIBS linker flags for EXPAT, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +poedit configure 1.8.11 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------ ## +## Report this to help@poedit.net ## +## ------------------------------ ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_mongrel + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_compile + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by poedit $as_me 1.8.11, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +PACKAGE_SHORT_VERSION=1.8.11 + + +ac_aux_dir= +for ac_dir in admin "$srcdir"/admin; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in admin \"$srcdir\"/admin" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +am__api_version='1.14' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='poedit' + VERSION='1.8.11' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + + + +# Check whether --with-wxdir was given. +if test "${with_wxdir+set}" = set; then : + withval=$with_wxdir; wx_config_name="$withval/wx-config" + wx_config_args="--inplace" +fi + + +# Check whether --with-wx-config was given. +if test "${with_wx_config+set}" = set; then : + withval=$with_wx_config; wx_config_name="$withval" +fi + + +# Check whether --with-wx-prefix was given. +if test "${with_wx_prefix+set}" = set; then : + withval=$with_wx_prefix; wx_config_prefix="$withval" +else + wx_config_prefix="" +fi + + +# Check whether --with-wx-exec-prefix was given. +if test "${with_wx_exec_prefix+set}" = set; then : + withval=$with_wx_exec_prefix; wx_config_exec_prefix="$withval" +else + wx_config_exec_prefix="" +fi + + + +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; USE_DEBUG="$enableval" +else + USE_DEBUG="no" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install location" >&5 +$as_echo_n "checking for install location... " >&6; } +case "$prefix" in +NONE) if ${m_cv_prefix+:} false; then : + $as_echo_n "(cached) " >&6 +else + m_cv_prefix=$ac_default_prefix +fi +;; +*) m_cv_prefix=$prefix ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $m_cv_prefix" >&5 +$as_echo "$m_cv_prefix" >&6; } +case "$m_cv_prefix" in /*) ;; *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --prefix=$prefix must be an absolute path name, using $ac_default_prefix" >&5 +$as_echo "$as_me: WARNING: --prefix=$prefix must be an absolute path name, using $ac_default_prefix" >&2;} + m_cv_prefix=$ac_default_prefix +esac +prefix=$m_cv_prefix + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] + struct use_l { use_l() { l(); } }; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] + struct use_l { use_l() { l(); } }; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$ac_save_CXXFLAGS" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi + + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] + struct use_l { use_l() { l(); } }; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$ac_save_CXXFLAGS" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + fi + + +WXLIBS_USED="xrc,stc,html,xml,adv,core,net" + +case "$USE_DEBUG" in +yes) DEBUG_FLAGS="-g -Wall -O0" + ;; +esac + + + + +# Check whether --with-boost was given. +if test "${with_boost+set}" = set; then : + withval=$with_boost; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + +else + want_boost="yes" +fi + + + + +# Check whether --with-boost-libdir was given. +if test "${with_boost_libdir+set}" = set; then : + withval=$with_boost_libdir; + if test -d "$withval" + then + ac_boost_lib_path="$withval" + else + as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5 + fi + +else + ac_boost_lib_path="" + +fi + + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=1.54 + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5 +$as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } + succeeded=no + + libsubdirs="lib" + ax_arch=`uname -m` + case $ax_arch in + x86_64) + libsubdirs="lib64 libx32 lib lib64" + ;; + ppc64|s390x|sparc64|aarch64|ppc64le) + libsubdirs="lib64 lib lib64 ppc64le" + ;; + esac + + + libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" + + case ${host_cpu} in + i?86) + libsubdirs="lib/i386-${host_os} $libsubdirs" + ;; + esac + + if test "$ac_boost_path" != ""; then + BOOST_CPPFLAGS="-I$ac_boost_path/include" + for ac_boost_path_tmp in $libsubdirs; do + if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then + BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" + break + fi + done + elif test "$cross_compiling" != yes; then + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + for libsubdir in $libsubdirs ; do + if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + if test "x$succeeded" != "xyes"; then + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + BOOST_CPPFLAGS= + BOOST_LDFLAGS= + _version=0 + if test "$ac_boost_path" != ""; then + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + if test -z "$BOOST_CPPFLAGS"; then + if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then + BOOST_CPPFLAGS="-I$ac_boost_path" + fi + fi + fi + else + if test "$cross_compiling" != yes; then + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + if test "$ac_boost_lib_path" = ""; then + for libsubdir in $libsubdirs ; do + if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$best_path/$libsubdir" + fi + fi + + if test "x$BOOST_ROOT" != "x"; then + for libsubdir in $libsubdirs ; do + if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5 +$as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 +$as_echo "$as_me: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&6;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5 +$as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;} + fi + # execute ACTION-IF-NOT-FOUND (if present): + as_fn_error $? "Boost libraries are required" "$LINENO" 5 + else + + + +$as_echo "#define HAVE_BOOST /**/" >>confdefs.h + + # execute ACTION-IF-FOUND (if present): + : + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + + + + +# Check whether --with-boost-system was given. +if test "${with_boost_system+set}" = set; then : + withval=$with_boost_system; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_system_lib="" + else + want_boost="yes" + ax_boost_user_system_lib="$withval" + fi + +else + want_boost="yes" + +fi + + + if test "x$want_boost" = "xyes"; then + + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::System library is available" >&5 +$as_echo_n "checking whether the Boost::System library is available... " >&6; } +if ${ax_cv_boost_system+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + CXXFLAGS_SAVE=$CXXFLAGS + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +boost::system::system_category + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_boost_system=yes +else + ax_cv_boost_system=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS=$CXXFLAGS_SAVE + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_system" >&5 +$as_echo "$ax_cv_boost_system" >&6; } + if test "x$ax_cv_boost_system" = "xyes"; then + + + +$as_echo "#define HAVE_BOOST_SYSTEM /**/" >>confdefs.h + + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_system_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break +else + link_system="no" +fi + + done + if test "x$link_system" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break +else + link_system="no" +fi + + done + fi + + else + for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break +else + link_system="no" +fi + + done + + fi + if test "x$ax_lib" = "x"; then + as_fn_error $? "Could not find a version of the library!" "$LINENO" 5 + fi + if test "x$link_system" = "xno"; then + as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + + + +# Check whether --with-boost-regex was given. +if test "${with_boost_regex+set}" = set; then : + withval=$with_boost_regex; + 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 + +else + want_boost="yes" + +fi + + + if test "x$want_boost" = "xyes"; then + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Regex library is available" >&5 +$as_echo_n "checking whether the Boost::Regex library is available... " >&6; } +if ${ax_cv_boost_regex+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +boost::regex r(); return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_boost_regex=yes +else + ax_cv_boost_regex=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_regex" >&5 +$as_echo "$ax_cv_boost_regex" >&6; } + if test "x$ax_cv_boost_regex" = "xyes"; then + +$as_echo "#define HAVE_BOOST_REGEX /**/" >>confdefs.h + + 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} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + 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} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + done + fi + + else + for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5 +$as_echo_n "checking for main in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + done + fi + if test "x$ax_lib" = "x"; then + as_fn_error $? "Could not find a version of the Boost::Regex library!" "$LINENO" 5 + fi + if test "x$link_regex" != "xyes"; then + as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + +CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS" + + + +# Check whether --with-cpprest was given. +if test "${with_cpprest+set}" = set; then : + withval=$with_cpprest; +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "x$with_cpprest" != "xno"; then : + + + +# Check whether --with-boost-iostreams was given. +if test "${with_boost_iostreams+set}" = set; then : + withval=$with_boost_iostreams; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_iostreams_lib="" + else + want_boost="yes" + ax_boost_user_iostreams_lib="$withval" + fi + +else + want_boost="yes" + +fi + + + if test "x$want_boost" = "xyes"; then + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::IOStreams library is available" >&5 +$as_echo_n "checking whether the Boost::IOStreams library is available... " >&6; } +if ${ax_cv_boost_iostreams+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_boost_iostreams=yes +else + ax_cv_boost_iostreams=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_iostreams" >&5 +$as_echo "$ax_cv_boost_iostreams" >&6; } + if test "x$ax_cv_boost_iostreams" = "xyes"; then + +$as_echo "#define HAVE_BOOST_IOSTREAMS /**/" >>confdefs.h + + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` + if test "x$ax_boost_user_iostreams_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_iostreams*.so* $BOOSTLIBDIR/libboost_iostream*.dylib* $BOOSTLIBDIR/libboost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_iostreams.*\)\.so.*$;\1;' -e 's;^lib\(boost_iostream.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_IOSTREAMS_LIB="-l$ax_lib"; link_iostreams="yes"; break +else + link_iostreams="no" +fi + + done + if test "x$link_iostreams" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_iostreams*.dll* $BOOSTLIBDIR/boost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_iostreams.*\)\.dll.*$;\1;' -e 's;^\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_IOSTREAMS_LIB="-l$ax_lib"; link_iostreams="yes"; break +else + link_iostreams="no" +fi + + done + fi + + else + for ax_lib in $ax_boost_user_iostreams_lib boost_iostreams-$ax_boost_user_iostreams_lib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5 +$as_echo_n "checking for main in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_IOSTREAMS_LIB="-l$ax_lib"; link_iostreams="yes"; break +else + link_iostreams="no" +fi + + done + + fi + if test "x$ax_lib" = "x"; then + as_fn_error $? "Could not find a version of the library!" "$LINENO" 5 + fi + if test "x$link_iostreams" != "xyes"; then + as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + + + +# Check whether --with-boost-thread was given. +if test "${with_boost_thread+set}" = set; then : + withval=$with_boost_thread; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_thread_lib="" + else + want_boost="yes" + ax_boost_user_thread_lib="$withval" + fi + +else + want_boost="yes" + +fi + + + if test "x$want_boost" = "xyes"; then + + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Thread library is available" >&5 +$as_echo_n "checking whether the Boost::Thread library is available... " >&6; } +if ${ax_cv_boost_thread+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + CXXFLAGS_SAVE=$CXXFLAGS + + if test "x$host_os" = "xsolaris" ; then + CXXFLAGS="-pthreads $CXXFLAGS" + elif test "x$host_os" = "xmingw32" ; then + CXXFLAGS="-mthreads $CXXFLAGS" + else + CXXFLAGS="-pthread $CXXFLAGS" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +boost::thread_group thrds; + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_boost_thread=yes +else + ax_cv_boost_thread=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS=$CXXFLAGS_SAVE + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_thread" >&5 +$as_echo "$ax_cv_boost_thread" >&6; } + if test "x$ax_cv_boost_thread" = "xyes"; then + if test "x$host_os" = "xsolaris" ; then + BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" + elif test "x$host_os" = "xmingw32" ; then + BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" + else + BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" + fi + + + + +$as_echo "#define HAVE_BOOST_THREAD /**/" >>confdefs.h + + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` + + LDFLAGS_SAVE=$LDFLAGS + case "x$host_os" in + *bsd* ) + LDFLAGS="-pthread $LDFLAGS" + break; + ;; + esac + if test "x$ax_boost_user_thread_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_thread* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_THREAD_LIB="-l$ax_lib"; link_thread="yes"; break +else + link_thread="no" +fi + + done + if test "x$link_thread" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_thread* 2>/dev/null | sed 's,.*/,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_THREAD_LIB="-l$ax_lib"; link_thread="yes"; break +else + link_thread="no" +fi + + done + fi + + else + for ax_lib in $ax_boost_user_thread_lib boost_thread-$ax_boost_user_thread_lib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_THREAD_LIB="-l$ax_lib"; link_thread="yes"; break +else + link_thread="no" +fi + + done + + fi + if test "x$ax_lib" = "x"; then + as_fn_error $? "Could not find a version of the library!" "$LINENO" 5 + fi + if test "x$link_thread" = "xno"; then + as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 + else + case "x$host_os" in + *bsd* ) + BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" + break; + ;; + esac + + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + + + have_cpprest=no + old_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CXXFLAGS $BOOST_CPPFLAGS" + for ac_header in cpprest/http_client.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "cpprest/http_client.h" "ac_cv_header_cpprest_http_client_h" "$ac_includes_default" +if test "x$ac_cv_header_cpprest_http_client_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CPPREST_HTTP_CLIENT_H 1 +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcpprest >= 2.5" >&5 +$as_echo_n "checking for libcpprest >= 2.5... " >&6; } + old_LIBS="$LIBS" + LIBS="-lcpprest $BOOST_SYSTEM_LIB $BOOST_THREAD_LIB -lssl -lcrypto $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + +int +main () +{ + + #if CPPREST_VERSION < 200500 + #error "cpprest >= 2.5 required" + #endif + web::http::client::http_client c(U("https://poedit.net")); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + have_cpprest=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$old_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_cpprest" >&5 +$as_echo "$have_cpprest" >&6; } + +fi + +done + + CPPFLAGS="$old_CPPFLAGS" + +else + have_cpprest=no +fi + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi +if test "x$have_cpprest" = "xyes"; then : + + $as_echo "#define HAVE_HTTP_CLIENT 1" >>confdefs.h + + CPPREST_LIBS="-lcpprest $BOOST_IOSTREAMS_LIB $BOOST_THREAD_LIB $BOOST_SYSTEM_LIB -lssl -lcrypto" + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSECRET" >&5 +$as_echo_n "checking for LIBSECRET... " >&6; } + +if test -n "$LIBSECRET_CFLAGS"; then + pkg_cv_LIBSECRET_CFLAGS="$LIBSECRET_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsecret-1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libsecret-1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBSECRET_CFLAGS=`$PKG_CONFIG --cflags "libsecret-1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBSECRET_LIBS"; then + pkg_cv_LIBSECRET_LIBS="$LIBSECRET_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsecret-1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libsecret-1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBSECRET_LIBS=`$PKG_CONFIG --libs "libsecret-1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBSECRET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsecret-1" 2>&1` + else + LIBSECRET_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsecret-1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBSECRET_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libsecret-1) were not met: + +$LIBSECRET_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBSECRET_CFLAGS +and LIBSECRET_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBSECRET_CFLAGS +and LIBSECRET_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + LIBSECRET_CFLAGS=$pkg_cv_LIBSECRET_CFLAGS + LIBSECRET_LIBS=$pkg_cv_LIBSECRET_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + CXXFLAGS="$CXXFLAGS $LIBSECRET_CFLAGS" + + +fi + +else + + if test "x$with_cpprest" = "xyes"; then : + as_fn_error $? "C++ REST SDK requested but not found" "$LINENO" 5 +fi + +fi + if test "x$have_cpprest" != "xno"; then + HAVE_CPPREST_TRUE= + HAVE_CPPREST_FALSE='#' +else + HAVE_CPPREST_TRUE='#' + HAVE_CPPREST_FALSE= +fi + + + + + + if test x${WX_CONFIG_NAME+set} != xset ; then + WX_CONFIG_NAME=wx-config + fi + + if test "x$wx_config_name" != x ; then + WX_CONFIG_NAME="$wx_config_name" + fi + + if test x$wx_config_exec_prefix != x ; then + wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix" + WX_LOOKUP_PATH="$wx_config_exec_prefix/bin" + fi + if test x$wx_config_prefix != x ; then + wx_config_args="$wx_config_args --prefix=$wx_config_prefix" + WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin" + fi + if test "$cross_compiling" = "yes"; then + wx_config_args="$wx_config_args --host=$host_alias" + fi + + if test -x "$WX_CONFIG_NAME" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5 +$as_echo_n "checking for wx-config... " >&6; } + WX_CONFIG_PATH="$WX_CONFIG_NAME" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5 +$as_echo "$WX_CONFIG_PATH" >&6; } + else + # Extract the first word of "$WX_CONFIG_NAME", so it can be a program name with args. +set dummy $WX_CONFIG_NAME; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WX_CONFIG_PATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WX_CONFIG_PATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WX_CONFIG_PATH="$WX_CONFIG_PATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy=""$WX_LOOKUP_PATH:$PATH"" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WX_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_WX_CONFIG_PATH" && ac_cv_path_WX_CONFIG_PATH="no" + ;; +esac +fi +WX_CONFIG_PATH=$ac_cv_path_WX_CONFIG_PATH +if test -n "$WX_CONFIG_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5 +$as_echo "$WX_CONFIG_PATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + + if test "$WX_CONFIG_PATH" != "no" ; then + WX_VERSION="" + + min_wx_version=3.0.1 + if test -z "--unicode" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5 +$as_echo_n "checking for wxWidgets version >= $min_wx_version... " >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode)" >&5 +$as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode)... " >&6; } + fi + + WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args --unicode" + + WX_VERSION=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null` + wx_config_major_version=`echo $WX_VERSION | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + wx_config_minor_version=`echo $WX_VERSION | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + wx_config_micro_version=`echo $WX_VERSION | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + wx_requested_major_version=`echo $min_wx_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + wx_requested_minor_version=`echo $min_wx_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + wx_requested_micro_version=`echo $min_wx_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + + wx_ver_ok="" + if test "x$WX_VERSION" != x ; then + if test $wx_config_major_version -gt $wx_requested_major_version; then + wx_ver_ok=yes + else + if test $wx_config_major_version -eq $wx_requested_major_version; then + if test $wx_config_minor_version -gt $wx_requested_minor_version; then + wx_ver_ok=yes + else + if test $wx_config_minor_version -eq $wx_requested_minor_version; then + if test $wx_config_micro_version -ge $wx_requested_micro_version; then + wx_ver_ok=yes + fi + fi + fi + fi + fi + fi + + + if test -n "$wx_ver_ok"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5 +$as_echo "yes (version $WX_VERSION)" >&6; } + WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs $WXLIBS_USED` + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5 +$as_echo_n "checking for wxWidgets static library... " >&6; } + WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs $WXLIBS_USED 2>/dev/null` + if test "x$WX_LIBS_STATIC" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + + wx_has_cppflags="" + if test $wx_config_major_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_minor_version -eq 2; then + if test $wx_config_micro_version -ge 6; then + wx_has_cppflags=yes + fi + fi + fi + fi + fi + + wx_has_rescomp="" + if test $wx_config_major_version -gt 2; then + wx_has_rescomp=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -ge 7; then + wx_has_rescomp=yes + fi + fi + fi + if test "x$wx_has_rescomp" = x ; then + WX_RESCOMP= + else + WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp` + fi + + if test "x$wx_has_cppflags" = x ; then + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $WXLIBS_USED` + WX_CPPFLAGS=$WX_CFLAGS + WX_CXXFLAGS=$WX_CFLAGS + + WX_CFLAGS_ONLY=$WX_CFLAGS + WX_CXXFLAGS_ONLY=$WX_CFLAGS + else + WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags $WXLIBS_USED` + WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags $WXLIBS_USED` + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $WXLIBS_USED` + + WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"` + WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"` + fi + + WXFOUND=1 + + else + + if test "x$WX_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5 +$as_echo "no (version $WX_VERSION is not new enough)" >&6; } + fi + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + + if test ! -z "--unicode"; then + + wx_error_message=" + The configuration you asked for $PACKAGE_NAME requires a wxWidgets + build with the following settings: + --unicode + but such build is not available. + + To see the wxWidgets builds available on this system, please use + 'wx-config --list' command. To use the default build, returned by + 'wx-config --selected-config', use the options with their 'auto' + default values." + + fi + + wx_error_message=" + The requested wxWidgets build couldn't be found. + $wx_error_message + + If you still get this error, then check that 'wx-config' is + in path, the directory where wxWidgets libraries are installed + (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH + or equivalent variable and wxWidgets version is 3.0.1 or above." + + WXFOUND=0 + + fi + else + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + + WXFOUND=0 + + fi + + + + + + + + + + + + WX_VERSION_MAJOR="$wx_config_major_version" + WX_VERSION_MINOR="$wx_config_minor_version" + WX_VERSION_MICRO="$wx_config_micro_version" + + + + + +if test "$WXFOUND" != 1; then + as_fn_error $? " + Please check that wx-config is in path, the directory + where wxWidgets libraries are installed (returned by + 'wx-config --unicode --libs' command) is in LD_LIBRARY_PATH or + equivalent variable and wxWidgets is version 3.0.0 or above, + with Unicode build available. + " "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if wxWidgets includes XRC" >&5 +$as_echo_n "checking if wxWidgets includes XRC... " >&6; } +saved_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #if !defined(wxUSE_XRC) || !wxUSE_XRC + #error "XRC not compiled in" + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "XRC is required to build poedit!" "$LINENO" 5 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CXXFLAGS="$saved_CXXFLAGS" + +CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS" + + + + + + if test "x$WX_CONFIG_NAME" = x; then + as_fn_error $? "The wxrc tests must run after wxWidgets test." "$LINENO" 5 + else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxrc" >&5 +$as_echo_n "checking for wxrc... " >&6; } + + if test "x$WXRC" = x ; then + + wx_ver_ok="" + if test "x$WX_VERSION" != x ; then + if test $wx_config_major_version -gt 2; then + wx_ver_ok=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -gt 5; then + wx_ver_ok=yes + else + if test $wx_config_minor_version -eq 5; then + if test $wx_config_micro_version -ge 3; then + wx_ver_ok=yes + fi + fi + fi + fi + fi + fi + + if test -n "$wx_ver_ok"; then + WXRC=`$WX_CONFIG_WITH_ARGS --utility=wxrc` + fi + fi + + if test "x$WXRC" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "wxrc is needed to compile Poedit." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WXRC" >&5 +$as_echo "$WXRC" >&6; } + : + fi + + + fi + + + +for ac_func in mkdtemp +do : + ac_fn_cxx_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp" +if test "x$ac_cv_func_mkdtemp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MKDTEMP 1 +_ACEOF + +fi +done + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU" >&5 +$as_echo_n "checking for ICU... " >&6; } + +if test -n "$ICU_CFLAGS"; then + pkg_cv_ICU_CFLAGS="$ICU_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc icu-i18n\""; } >&5 + ($PKG_CONFIG --exists --print-errors "icu-uc icu-i18n") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ICU_CFLAGS=`$PKG_CONFIG --cflags "icu-uc icu-i18n" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ICU_LIBS"; then + pkg_cv_ICU_LIBS="$ICU_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc icu-i18n\""; } >&5 + ($PKG_CONFIG --exists --print-errors "icu-uc icu-i18n") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ICU_LIBS=`$PKG_CONFIG --libs "icu-uc icu-i18n" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ICU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "icu-uc icu-i18n" 2>&1` + else + ICU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "icu-uc icu-i18n" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ICU_PKG_ERRORS" >&5 + + + as_fn_error $? "missing ICU library" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + as_fn_error $? "missing ICU library" "$LINENO" 5 + +else + ICU_CFLAGS=$pkg_cv_ICU_CFLAGS + ICU_LIBS=$pkg_cv_ICU_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + CXXFLAGS="$CXXFLAGS $ICU_CFLAGS" + LIBS="$LIBS $ICU_LIBS" + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if wxWidgets toolkit uses GTK+ 3" >&5 +$as_echo_n "checking if wxWidgets toolkit uses GTK+ 3... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #ifndef __WXGTK3__ + #error "not GTK+ 3" + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + gtkspell_packages="gtkspell3-3.0 gtk+-3.0" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if wxWidgets toolkit uses GTK+ 2" >&5 +$as_echo_n "checking if wxWidgets toolkit uses GTK+ 2... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #ifndef __WXGTK20__ + #error "not GTK+ 2" + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + gtkspell_packages="gtkspell-2.0 gtk+-2.0 >= 2.20" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "GTK+ build of wxWidgets is required" "$LINENO" 5 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSPELL" >&5 +$as_echo_n "checking for GTKSPELL... " >&6; } + +if test -n "$GTKSPELL_CFLAGS"; then + pkg_cv_GTKSPELL_CFLAGS="$GTKSPELL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtkspell_packages\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$gtkspell_packages") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKSPELL_CFLAGS=`$PKG_CONFIG --cflags "$gtkspell_packages" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GTKSPELL_LIBS"; then + pkg_cv_GTKSPELL_LIBS="$GTKSPELL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtkspell_packages\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$gtkspell_packages") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKSPELL_LIBS=`$PKG_CONFIG --libs "$gtkspell_packages" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTKSPELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtkspell_packages" 2>&1` + else + GTKSPELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtkspell_packages" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTKSPELL_PKG_ERRORS" >&5 + + + as_fn_error $? "missing GtkSpell library" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + as_fn_error $? "missing GtkSpell library" "$LINENO" 5 + +else + GTKSPELL_CFLAGS=$pkg_cv_GTKSPELL_CFLAGS + GTKSPELL_LIBS=$pkg_cv_GTKSPELL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + CXXFLAGS="$CXXFLAGS $GTKSPELL_CFLAGS" + LIBS="$LIBS $GTKSPELL_LIBS" + +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LUCENE" >&5 +$as_echo_n "checking for LUCENE... " >&6; } + +if test -n "$LUCENE_CFLAGS"; then + pkg_cv_LUCENE_CFLAGS="$LUCENE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblucene++ >= 3.0.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblucene++ >= 3.0.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LUCENE_CFLAGS=`$PKG_CONFIG --cflags "liblucene++ >= 3.0.5" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LUCENE_LIBS"; then + pkg_cv_LUCENE_LIBS="$LUCENE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblucene++ >= 3.0.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblucene++ >= 3.0.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LUCENE_LIBS=`$PKG_CONFIG --libs "liblucene++ >= 3.0.5" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LUCENE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblucene++ >= 3.0.5" 2>&1` + else + LUCENE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblucene++ >= 3.0.5" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LUCENE_PKG_ERRORS" >&5 + + + as_fn_error $? "missing Lucene++ library" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + as_fn_error $? "missing Lucene++ library" "$LINENO" 5 + +else + LUCENE_CFLAGS=$pkg_cv_LUCENE_CFLAGS + LUCENE_LIBS=$pkg_cv_LUCENE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + CXXFLAGS="$CXXFLAGS $LUCENE_CFLAGS" + + +fi + + +# Check whether --enable-legacytm was given. +if test "${enable_legacytm+set}" = set; then : + enableval=$enable_legacytm; +fi + + +if test "x$enable_legacytm" != "xno"; then : + + enable_legacytm=yes + + old_LIBS="$LIBS" + + minversion=4.7 + + DB_HEADER="" + DB_LIBS="" + + if test -z $minversion ; then + minvermajor=0 + minverminor=0 + minverpatch=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB (C++)" >&5 +$as_echo_n "checking for Berkeley DB (C++)... " >&6; } + else + minvermajor=`echo $minversion | cut -d. -f1` + minverminor=`echo $minversion | cut -d. -f2` + minverpatch=`echo $minversion | cut -d. -f3` + minvermajor=${minvermajor:-0} + minverminor=${minverminor:-0} + minverpatch=${minverpatch:-0} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB >= $minversion (C++)" >&5 +$as_echo_n "checking for Berkeley DB >= $minversion (C++)... " >&6; } + fi + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + for version in "" 5.9 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1 5.0 4.8 4.7 4.6 4.5 4.4 4.3 4.2 4.1 ; do + + if test -z $version ; then + db_lib="-ldb_cxx" + try_headers="db_cxx.h" + else + db_lib="-ldb_cxx-$version" + try_headers="db$version/db_cxx.h db`echo $version | sed -e 's,\..*,,g'`/db_cxx.h" + fi + + LIBS="$old_LIBS $db_lib" + + for db_hdr in $try_headers ; do + if test -z $DB_HEADER ; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <${db_hdr}> + +int +main () +{ + + #if !((DB_VERSION_MAJOR > (${minvermajor}) || \ + (DB_VERSION_MAJOR == (${minvermajor}) && \ + DB_VERSION_MINOR > (${minverminor})) || \ + (DB_VERSION_MAJOR == (${minvermajor}) && \ + DB_VERSION_MINOR == (${minverminor}) && \ + DB_VERSION_PATCH >= (${minverpatch})))) + #error "too old version" + #endif + + Db db(NULL, 0); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: header $db_hdr, library $db_lib" >&5 +$as_echo "header $db_hdr, library $db_lib" >&6; } + + DB_HEADER="$db_hdr" + DB_LIBS="$db_lib" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + done + done + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + LIBS="$old_LIBS" + + if test -z $DB_HEADER ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + + as_fn_error $? "cannot find required Berkeley DB >= 4.7 (req. for legacy TM)" "$LINENO" 5 + + else + +cat >>confdefs.h <<_ACEOF +#define DB_HEADER "$DB_HEADER" +_ACEOF + + + + cat >>confdefs.h <<_ACEOF +#define DB_HEADER "$DB_HEADER" +_ACEOF + + + + fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXPAT" >&5 +$as_echo_n "checking for EXPAT... " >&6; } + +if test -n "$EXPAT_CFLAGS"; then + pkg_cv_EXPAT_CFLAGS="$EXPAT_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"expat\""; } >&5 + ($PKG_CONFIG --exists --print-errors "expat") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EXPAT_CFLAGS=`$PKG_CONFIG --cflags "expat" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$EXPAT_LIBS"; then + pkg_cv_EXPAT_LIBS="$EXPAT_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"expat\""; } >&5 + ($PKG_CONFIG --exists --print-errors "expat") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EXPAT_LIBS=`$PKG_CONFIG --libs "expat" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + EXPAT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "expat" 2>&1` + else + EXPAT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "expat" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$EXPAT_PKG_ERRORS" >&5 + + + as_fn_error $? "missing Expat library (req. for legacy TM)" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + as_fn_error $? "missing Expat library (req. for legacy TM)" "$LINENO" 5 + +else + EXPAT_CFLAGS=$pkg_cv_EXPAT_CFLAGS + EXPAT_LIBS=$pkg_cv_EXPAT_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + CXXFLAGS="$CXXFLAGS $EXPAT_CFLAGS" + + +fi + +else + + $as_echo "#define DONT_MIGRATE_LEGACY_TM 1" >>confdefs.h + + +fi + + if test "x$enable_legacytm" != "xno"; then + MIGRATE_LEGACY_TM_TRUE= + MIGRATE_LEGACY_TM_FALSE='#' +else + MIGRATE_LEGACY_TM_TRUE='#' + MIGRATE_LEGACY_TM_FALSE= +fi + + + +# Check whether --with-cld2 was given. +if test "${with_cld2+set}" = set; then : + withval=$with_cld2; +fi + + +if test "x$with_cld2" != "xno"; then : + + have_cld2=no + for ac_header in cld2/public/compact_lang_det.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "cld2/public/compact_lang_det.h" "ac_cv_header_cld2_public_compact_lang_det_h" "$ac_includes_default" +if test "x$ac_cv_header_cld2_public_compact_lang_det_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLD2_PUBLIC_COMPACT_LANG_DET_H 1 +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcld2" >&5 +$as_echo_n "checking for libcld2... " >&6; } + old_LIBS="$LIBS" + LIBS="-lcld2 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + +int +main () +{ + + CLD2::isDataDynamic(); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + have_cld2=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$old_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_cld2" >&5 +$as_echo "$have_cld2" >&6; } + +fi + +done + + +else + have_cld2=no +fi + +if test "x$have_cld2" = "xyes"; then : + + $as_echo "#define HAVE_CLD2 1" >>confdefs.h + + CLD2_LIBS="-lcld2" + + +else + + if test "x$with_cld2" = "xyes"; then : + as_fn_error $? "cld2 requested but not found" "$LINENO" 5 +fi + +fi + + + + +if test "x$GXX" == "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + + + + + flag=`echo "-Wall" | $SED 'y% .=/+-(){}<>:*,%_______________%'` + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler accepts the -Wall flag" >&5 +$as_echo_n "checking whether the C++ compiler accepts the -Wall flag... " >&6; } +if eval \${ax_cv_cxx_check_flag_$flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wall" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ + + ; + return 0; +} + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + eval "ax_cv_cxx_check_flag_$flag=yes" + +else + + eval "ax_cv_cxx_check_flag_$flag=no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CXXFLAGS="$save_CXXFLAGS" + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +fi +eval ac_res=\$ax_cv_cxx_check_flag_$flag + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if eval "test \"`echo '$ax_cv_cxx_check_flag_'$flag`\" = yes"; then : + + : + CXXFLAGS="$CXXFLAGS -Wall" + +else + + : + + +fi + + + + + + + flag=`echo "-Wextra" | $SED 'y% .=/+-(){}<>:*,%_______________%'` + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler accepts the -Wextra flag" >&5 +$as_echo_n "checking whether the C++ compiler accepts the -Wextra flag... " >&6; } +if eval \${ax_cv_cxx_check_flag_$flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wextra" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ + + ; + return 0; +} + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + eval "ax_cv_cxx_check_flag_$flag=yes" + +else + + eval "ax_cv_cxx_check_flag_$flag=no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CXXFLAGS="$save_CXXFLAGS" + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +fi +eval ac_res=\$ax_cv_cxx_check_flag_$flag + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if eval "test \"`echo '$ax_cv_cxx_check_flag_'$flag`\" = yes"; then : + + : + CXXFLAGS="$CXXFLAGS -Wextra" + +else + + : + + +fi + +fi + +CXXFLAGS="$CXXFLAGS $DEBUG_FLAGS \"-DPOEDIT_PREFIX=\\\"$prefix\\\"\"" + + + + + + + + + +ac_config_files="$ac_config_files Makefile src/Makefile artwork/Makefile locales/Makefile docs/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_CPPREST_TRUE}" && test -z "${HAVE_CPPREST_FALSE}"; then + as_fn_error $? "conditional \"HAVE_CPPREST\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MIGRATE_LEGACY_TM_TRUE}" && test -z "${MIGRATE_LEGACY_TM_FALSE}"; then + as_fn_error $? "conditional \"MIGRATE_LEGACY_TM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by poedit $as_me 1.8.11, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +poedit config.status 1.8.11 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "artwork/Makefile") CONFIG_FILES="$CONFIG_FILES artwork/Makefile" ;; + "locales/Makefile") CONFIG_FILES="$CONFIG_FILES locales/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +echo " +Configured $PACKAGE-$VERSION for $host + +Enabled features: + + * debug build: $USE_DEBUG + * legacy (pre-1.6) TM migration: $enable_legacytm + * language detection: $have_cld2 + * crowdin integration: $have_cpprest +" diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..e6d5867 --- /dev/null +++ b/configure.ac @@ -0,0 +1,332 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) + +AC_INIT([poedit], [1.8.11], [help@poedit.net]) +PACKAGE_SHORT_VERSION=1.8.11 +AC_SUBST(PACKAGE_SHORT_VERSION) + +AC_CONFIG_AUX_DIR([admin]) +AC_CONFIG_SRCDIR([poedit.desktop]) + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST + +AM_INIT_AUTOMAKE([subdir-objects foreign]) +AM_MAINTAINER_MODE + +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +WX_CONFIG_OPTIONS + +AC_ARG_ENABLE(debug, + AS_HELP_STRING([--enable-debug], + [Enable debug build]), + USE_DEBUG="$enableval", USE_DEBUG="no") + +AC_MSG_CHECKING(for install location) +case "$prefix" in +NONE) AC_CACHE_VAL(m_cv_prefix,m_cv_prefix=$ac_default_prefix);; +*) m_cv_prefix=$prefix ;; +esac +AC_MSG_RESULT($m_cv_prefix) +case "$m_cv_prefix" in /*) ;; *) + AC_MSG_WARN([--prefix=$prefix must be an absolute path name, using $ac_default_prefix]) + m_cv_prefix=$ac_default_prefix +esac +prefix=$m_cv_prefix + + +dnl Checks for programs. +AC_PROG_AWK +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_RANLIB +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CXXCPP + +AC_LANG([C++]) +AX_CXX_COMPILE_STDCXX_11([], [mandatory]) + +WXLIBS_USED="xrc,stc,html,xml,adv,core,net" + +case "$USE_DEBUG" in +yes) DEBUG_FLAGS="-g -Wall -O0" + ;; +esac + + +AX_BOOST_BASE([1.54], [], [AC_MSG_ERROR([Boost libraries are required])]) +AX_BOOST_SYSTEM +AX_BOOST_REGEX +CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS" + + +dnl Check for C++REST SDK used for online features +AC_ARG_WITH([cpprest], + AS_HELP_STRING([--without-cpprest], [Ignore presence of C++ REST SDK and disable it])) + +AS_IF([test "x$with_cpprest" != "xno"], + [ + AX_BOOST_IOSTREAMS + AX_BOOST_THREAD + + have_cpprest=no + dnl C++11 check above modified CXXFLAGS, but AC_CHECK_HEADERS needs + dnl it for this header too and it uses only the preprocessor in one + dnl of its two phases: + old_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CXXFLAGS $BOOST_CPPFLAGS" + AC_CHECK_HEADERS([cpprest/http_client.h], + [ + AC_MSG_CHECKING([for libcpprest >= 2.5]) + old_LIBS="$LIBS" + LIBS="-lcpprest $BOOST_SYSTEM_LIB $BOOST_THREAD_LIB -lssl -lcrypto $LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [ + #include + #include + ], + [ + #if CPPREST_VERSION < 200500 + #error "cpprest >= 2.5 required" + #endif + web::http::client::http_client c(U("https://poedit.net")); + ])], + [have_cpprest=yes]) + LIBS="$old_LIBS" + AC_MSG_RESULT([$have_cpprest]) + ]) + CPPFLAGS="$old_CPPFLAGS" + ], + [have_cpprest=no]) + +AS_IF([test "x$have_cpprest" = "xyes"], + [ + AC_DEFINE([HAVE_HTTP_CLIENT]) + CPPREST_LIBS="-lcpprest $BOOST_IOSTREAMS_LIB $BOOST_THREAD_LIB $BOOST_SYSTEM_LIB -lssl -lcrypto" + AC_SUBST(CPPREST_LIBS) + PKG_CHECK_MODULES([LIBSECRET], [libsecret-1], [ + CXXFLAGS="$CXXFLAGS $LIBSECRET_CFLAGS" + AC_SUBST(LIBSECRET_LIBS) + ]) + ], + [ + AS_IF([test "x$with_cpprest" = "xyes"], + [AC_MSG_ERROR([C++ REST SDK requested but not found])]) + ]) +AM_CONDITIONAL([HAVE_CPPREST], [test "x$have_cpprest" != "xno"]) + + + +WX_CONFIG_CHECK([3.0.1], [WXFOUND=1], [WXFOUND=0], [$WXLIBS_USED], [--unicode]) + +if test "$WXFOUND" != 1; then + AC_MSG_ERROR([ + Please check that wx-config is in path, the directory + where wxWidgets libraries are installed (returned by + 'wx-config --unicode --libs' command) is in LD_LIBRARY_PATH or + equivalent variable and wxWidgets is version 3.0.0 or above, + with Unicode build available. + ]) +fi + +dnl Check if wxWidgets includes XRC library and if it does, don't build it +dnl ourselves: +AC_MSG_CHECKING([if wxWidgets includes XRC]) +saved_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS" +AC_TRY_COMPILE([#include ], + [ + #if !defined(wxUSE_XRC) || !wxUSE_XRC + #error "XRC not compiled in" + #endif + ], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([XRC is required to build poedit!]) + ]) +CXXFLAGS="$saved_CXXFLAGS" + +CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS" + + +WXRC_CHECK([], [AC_MSG_ERROR([wxrc is needed to compile Poedit.])]) + + +AC_CHECK_FUNCS([mkdtemp]) + + +PKG_CHECK_MODULES([ICU], [icu-uc icu-i18n], + [ + CXXFLAGS="$CXXFLAGS $ICU_CFLAGS" + LIBS="$LIBS $ICU_LIBS" + ], + [ + AC_MSG_ERROR([missing ICU library]) + ]) + + +dnl we need GtkSpell and GTK+ >= 2 for this, check if we're compatible +AC_MSG_CHECKING([if wxWidgets toolkit uses GTK+ 3]) +AC_TRY_COMPILE([#include ], + [ + #ifndef __WXGTK3__ + #error "not GTK+ 3" + #endif + ], + [ + AC_MSG_RESULT([yes]) + gtkspell_packages="gtkspell3-3.0 gtk+-3.0" + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_CHECKING([if wxWidgets toolkit uses GTK+ 2]) + AC_TRY_COMPILE([#include ], + [ + #ifndef __WXGTK20__ + #error "not GTK+ 2" + #endif + ], + [ + AC_MSG_RESULT([yes]) + gtkspell_packages="gtkspell-2.0 gtk+-2.0 >= 2.20" + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([GTK+ build of wxWidgets is required]) + ]) + ]) + +PKG_CHECK_MODULES([GTKSPELL], [$gtkspell_packages], + [ + CXXFLAGS="$CXXFLAGS $GTKSPELL_CFLAGS" + LIBS="$LIBS $GTKSPELL_LIBS" + ], + [ + AC_MSG_ERROR([missing GtkSpell library]) + ]) + + +PKG_CHECK_MODULES([LUCENE], [liblucene++ >= 3.0.5], + [ + CXXFLAGS="$CXXFLAGS $LUCENE_CFLAGS" + AC_SUBST(LUCENE_LIBS) + ], + [ + AC_MSG_ERROR([missing Lucene++ library]) + ]) + + +dnl Check for legacy TM support +AC_ARG_ENABLE([legacytm], + AS_HELP_STRING([--disable-legacytm], [disable code to migrate pre-1.6 TM to the new format])) + +AS_IF([test "x$enable_legacytm" != "xno"], + [ + enable_legacytm=yes + AX_BERKELEY_DB_CXX(4.7, + [ + AC_DEFINE_UNQUOTED(DB_HEADER, ["$DB_HEADER"]) + AC_SUBST(DB_LIBS) + ], + [ + AC_MSG_ERROR([cannot find required Berkeley DB >= 4.7 (req. for legacy TM)]) + ]) + + PKG_CHECK_MODULES([EXPAT], [expat], + [ + CXXFLAGS="$CXXFLAGS $EXPAT_CFLAGS" + AC_SUBST(EXPAT_LIBS) + ], + [ + AC_MSG_ERROR([missing Expat library (req. for legacy TM)]) + ]) + ], + [ + AC_DEFINE(DONT_MIGRATE_LEGACY_TM) + ]) + +AM_CONDITIONAL([MIGRATE_LEGACY_TM], [test "x$enable_legacytm" != "xno"]) + +dnl Check for Compact Language Detector 2 +dnl (used for better language detection and for non-English source languages) +AC_ARG_WITH([cld2], + AS_HELP_STRING([--without-cld2], [Ignore presence of cld2 and disable it])) + +AS_IF([test "x$with_cld2" != "xno"], + [ + have_cld2=no + AC_CHECK_HEADERS([cld2/public/compact_lang_det.h], + [ + AC_MSG_CHECKING([for libcld2]) + old_LIBS="$LIBS" + LIBS="-lcld2 $LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [ + #include + #include + ], + [ + CLD2::isDataDynamic(); + ])], + [have_cld2=yes]) + LIBS="$old_LIBS" + AC_MSG_RESULT([$have_cld2]) + ]) + ], + [have_cld2=no]) + +AS_IF([test "x$have_cld2" = "xyes"], + [ + AC_DEFINE([HAVE_CLD2]) + CLD2_LIBS="-lcld2" + AC_SUBST(CLD2_LIBS) + ], + [ + AS_IF([test "x$with_cld2" = "xyes"], + [AC_MSG_ERROR([cld2 requested but not found])]) + ]) + + + + +if test "x$GXX" == "xyes"; then + AX_CXX_CHECK_FLAG([-Wall],[],[], [CXXFLAGS="$CXXFLAGS -Wall"]) + AX_CXX_CHECK_FLAG([-Wextra],[],[], [CXXFLAGS="$CXXFLAGS -Wextra"]) +fi + +CXXFLAGS="$CXXFLAGS $DEBUG_FLAGS \"-DPOEDIT_PREFIX=\\\"$prefix\\\"\"" + + + +AC_SUBST(LDFLAGS) +AC_SUBST(CFLAGS) +AC_SUBST(CXXFLAGS) +AC_SUBST(WX_CONFIG_WITH_ARGS) +AC_SUBST(WX_LIBS) + +AC_CONFIG_FILES([ + Makefile + src/Makefile + artwork/Makefile + locales/Makefile + docs/Makefile + ]) + +AC_OUTPUT + +echo " +Configured $PACKAGE-$VERSION for $host + +Enabled features: + + * debug build: $USE_DEBUG + * legacy (pre-1.6) TM migration: $enable_legacytm + * language detection: $have_cld2 + * crowdin integration: $have_cpprest +" diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 0000000..74a8df6 --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,4 @@ + +dist_man_MANS = poedit.1 + +EXTRA_DIST = generate-docs.make man_asciidoc.conf man_fix.xsl poedit_man.txt diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 0000000..1d21948 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,529 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_man_MANS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/ax_boost_base.m4 \ + $(top_srcdir)/admin/ax_boost_iostreams.m4 \ + $(top_srcdir)/admin/ax_boost_regex.m4 \ + $(top_srcdir)/admin/ax_boost_system.m4 \ + $(top_srcdir)/admin/ax_boost_thread.m4 \ + $(top_srcdir)/admin/ax_cxx_check_flag.m4 \ + $(top_srcdir)/admin/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/admin/berkeley_db.m4 \ + $(top_srcdir)/admin/wxwin.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(dist_man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_IOSTREAMS_LIB = @BOOST_IOSTREAMS_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ +BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLD2_LIBS = @CLD2_LIBS@ +CPPFLAGS = @CPPFLAGS@ +CPPREST_LIBS = @CPPREST_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB_LIBS = @DB_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXPAT_CFLAGS = @EXPAT_CFLAGS@ +EXPAT_LIBS = @EXPAT_LIBS@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +HAVE_CXX11 = @HAVE_CXX11@ +ICU_CFLAGS = @ICU_CFLAGS@ +ICU_LIBS = @ICU_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSECRET_CFLAGS = @LIBSECRET_CFLAGS@ +LIBSECRET_LIBS = @LIBSECRET_LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUCENE_CFLAGS = @LUCENE_CFLAGS@ +LUCENE_LIBS = @LUCENE_LIBS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_SHORT_VERSION = @PACKAGE_SHORT_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WXRC = @WXRC@ +WX_CFLAGS = @WX_CFLAGS@ +WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ +WX_CONFIG_PATH = @WX_CONFIG_PATH@ +WX_CONFIG_WITH_ARGS = @WX_CONFIG_WITH_ARGS@ +WX_CPPFLAGS = @WX_CPPFLAGS@ +WX_CXXFLAGS = @WX_CXXFLAGS@ +WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ +WX_LIBS = @WX_LIBS@ +WX_LIBS_STATIC = @WX_LIBS_STATIC@ +WX_RESCOMP = @WX_RESCOMP@ +WX_VERSION = @WX_VERSION@ +WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ +WX_VERSION_MICRO = @WX_VERSION_MICRO@ +WX_VERSION_MINOR = @WX_VERSION_MINOR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_man_MANS = poedit.1 +EXTRA_DIST = generate-docs.make man_asciidoc.conf man_fix.xsl poedit_man.txt +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man1 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/generate-docs.make b/docs/generate-docs.make new file mode 100644 index 0000000..bcd1174 --- /dev/null +++ b/docs/generate-docs.make @@ -0,0 +1,15 @@ + +ASCIIDOC = asciidoc +XSLTPROC = xsltproc +XMLTO = xmlto + +all: poedit.1 + +clean: + rm -f poedit.1 + +poedit.1: poedit_man.txt man_asciidoc.conf man_fix.xsl + $(ASCIIDOC) -d manpage -f man_asciidoc.conf -b docbook -o - poedit_man.txt \ + | $(XSLTPROC) -o poedit.1.xml man_fix.xsl - + $(XMLTO) man poedit.1.xml + rm poedit.1.xml diff --git a/docs/man_asciidoc.conf b/docs/man_asciidoc.conf new file mode 100644 index 0000000..b0cc733 --- /dev/null +++ b/docs/man_asciidoc.conf @@ -0,0 +1,13 @@ +[replacements] + +# interpret --foo and -f as options: +(^|[\s]+|\[)(-|—|--)([\w]+)=\1 + +# repeatable, optional placeholder ("[FILE...]") +\[([A-Z]+)(\.\.\.|…)\]=\1 + +# [-f] indicates optional choice: +\[([^]]+)\]=\1 + +# $poedit$ means command "poedit": +\$(.+)\$=\1 diff --git a/docs/man_fix.xsl b/docs/man_fix.xsl new file mode 100644 index 0000000..44803b5 --- /dev/null +++ b/docs/man_fix.xsl @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/poedit.1 b/docs/poedit.1 new file mode 100644 index 0000000..0132105 --- /dev/null +++ b/docs/poedit.1 @@ -0,0 +1,73 @@ +'\" t +.\" Title: poedit +.\" Author: Vaclav Slavik +.\" Generator: DocBook XSL Stylesheets v1.78.1 +.\" Date: 10/20/2016 +.\" Manual: \ \& +.\" Source: \ \& +.\" Language: English +.\" +.TH "POEDIT" "1" "10/20/2016" "\ \&" "\ \&" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +poedit \- gettext catalogs editor +.SH "SYNOPSIS" +.HP \w'\fBpoedit\fR\ 'u +\fBpoedit\fR [\fB\-h\fR] [\fB\-\-verbose\fR] [\fIFILE\fR...] +.SH "DESCRIPTION" +.sp +Poedit is GUI editor for GNU gettext translation files\&. +.sp +When launched with one or more files as argument, it loads and opens them for editing\&. +.SH "OPTIONS" +.PP +\fB\-h\fR, \fB\-\-help\fR +.RS 4 +Display usage information and exit\&. +.RE +.PP +\fB\-\-verbose\fR +.RS 4 +Print verbose logging information\&. +.RE +.SH "AUTHOR" +.sp +Written by Vaclav Slavik <\m[blue]\fBvaclav@slavik\&.io\fR\m[]\&\s-2\u[1]\d\s+2> +.SH "RESOURCES" +.sp +Web site: \m[blue]\fBhttps://poedit\&.net/\fR\m[] +.SH "COPYRIGHT" +.sp +Copyright (C) 2008\-2016 Vaclav Slavik\&. +.sp +Free use of this software is granted under the terms of the MIT license\&. +.SH "AUTHOR" +.PP +\fBVaclav Slavik\fR <\&vaclav@slavik\&.io\&> +.RS 4 +Author. +.RE +.SH "NOTES" +.IP " 1." 4 +vaclav@slavik.io +.RS 4 +\%mailto:vaclav@slavik.io +.RE diff --git a/docs/poedit_man.txt b/docs/poedit_man.txt new file mode 100644 index 0000000..79f21e6 --- /dev/null +++ b/docs/poedit_man.txt @@ -0,0 +1,40 @@ +POEDIT(1) +========= +Vaclav Slavik + +NAME +---- +poedit - gettext catalogs editor + +SYNOPSIS +-------- +$poedit$ [-h] [--verbose] [FILE...] + +DESCRIPTION +----------- +Poedit is GUI editor for GNU gettext translation files. + +When launched with one or more files as argument, it loads and opens them for +editing. + +OPTIONS +------- +-h, --help:: + Display usage information and exit. + +--verbose:: + Print verbose logging information. + +AUTHOR +------ +Written by Vaclav Slavik + +RESOURCES +--------- +Web site: https://poedit.net/ + +COPYRIGHT +--------- +Copyright \(C) 2008-2016 Vaclav Slavik. + +Free use of this software is granted under the terms of the MIT license. diff --git a/locales/Makefile.am b/locales/Makefile.am new file mode 100644 index 0000000..143b8e8 --- /dev/null +++ b/locales/Makefile.am @@ -0,0 +1,80 @@ + +POEDIT_LINGUAS = an ar az be be@latin bg bs ca ckb co cs da de el en_GB es et eu fa fi fr gl he hr hu hy id is it ja ka kab kk ko lt lv ms nb nl oc pa pl pt_BR pt_PT ro ru sk sl sq sr sv tg th tr uk uz vi zh_CN zh_TW + +localedir = $(datadir)/locale + +install-data-local: install-poedit-catalogs + +install-poedit-catalogs: + for i in $(POEDIT_LINGUAS) ; do \ + $(mkinstalldirs) $(DESTDIR)$(localedir)/$$i/LC_MESSAGES ; \ + $(INSTALL_DATA) $(srcdir)/$$i.mo $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/poedit.mo ; \ + done + +uninstall-local: + rm -rf $(DESTDIR)$(localedir)/*/LC_MESSAGES/poedit.mo + +# ---------------------------------------------------------------------------- +# Logic for catalogs updating follows +# (shamelessly stolen from wxWidgets makefile): +# ---------------------------------------------------------------------------- + + +# the programs we use (TODO: use configure to detect them) +MSGFMT=msgfmt --verbose --check +MSGMERGE=msgmerge +XGETTEXT=xgettext +XARGS=xargs + +# common xgettext args: C++ syntax, use the specified macro names as markers +XGETTEXT_ARGS=-C -k_ -kwxGetTranslation -kwxTRANSLATE -kwxPLURAL:1,2 -F -j \ + --add-comments=TRANSLATORS \ + --from-code=UTF-8 \ + --package-name=Poedit --package-version=$(PACKAGE_SHORT_VERSION) \ + --msgid-bugs-address=help@poedit.net + +# implicit rules +%.mo: %.po + $(MSGFMT) -o $@ $< + +# a PO file must be updated from poedit.pot include new translations +%.po: $(srcdir)/poedit.pot + if [ -f $@ ]; then $(MSGMERGE) $@ $(srcdir)/poedit.pot > $@.new && mv $@.new $@; else cp $(srcdir)/poedit.pot $@; fi + +$(srcdir)/sr_RS@latin.po: $(srcdir)/sr.po + recode-sr-latin <$< >$@ + +$(srcdir)/poedit.pot: + touch $@ + (cd $(srcdir) ; find ../src -name "*.h" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot) + (cd $(srcdir) ; find ../src -name "*.cpp" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot) + (cd $(srcdir) ; $(WXRC) --gettext ../src/resources/*.xrc | $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot -) + +allpo: force-update + @-for t in $(POEDIT_LINGUAS); do $(MAKE) $(srcdir)/$$t.po; done + +allmo: + @for t in $(POEDIT_LINGUAS); do $(MAKE) $(srcdir)/$$t.mo; done + +force-update: + $(RM) $(srcdir)/poedit.pot + +# print out the percentage of the translated strings +stats: + @for i in $(POEDIT_LINGUAS); do \ + x=`$(MSGFMT) -o /dev/null "$(srcdir)/$$i.po" 2>&1 | sed -e 's/[,\.]//g' \ + -e 's/\([0-9]\+\) translated messages\?/TR=\1/' \ + -e 's/\([0-9]\+\) fuzzy translations\?/FZ=\1/' \ + -e 's/\([0-9]\+\) untranslated messages\?/UT=\1/'`; \ + TR=0 FZ=0 UT=0; \ + eval $$x; \ + TOTAL=`expr $$TR + $$FZ + $$UT`; \ + echo "\"$$i\" => \"`expr 100 "*" $$TR / $$TOTAL`\", /* $$TOTAL strings */"; \ + done + +#echo "$$i.po `expr 100 "*" $$TR / $$TOTAL`% of $$TOTAL strings"; + +dist-hook: allmo + cp -a $(srcdir)/*.pot $(srcdir)/*.po $(srcdir)/*.mo $(distdir) + +.PHONY: allpo allmo force-update stats FORCE diff --git a/locales/Makefile.in b/locales/Makefile.in new file mode 100644 index 0000000..540c309 --- /dev/null +++ b/locales/Makefile.in @@ -0,0 +1,527 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = locales +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/ax_boost_base.m4 \ + $(top_srcdir)/admin/ax_boost_iostreams.m4 \ + $(top_srcdir)/admin/ax_boost_regex.m4 \ + $(top_srcdir)/admin/ax_boost_system.m4 \ + $(top_srcdir)/admin/ax_boost_thread.m4 \ + $(top_srcdir)/admin/ax_cxx_check_flag.m4 \ + $(top_srcdir)/admin/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/admin/berkeley_db.m4 \ + $(top_srcdir)/admin/wxwin.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_IOSTREAMS_LIB = @BOOST_IOSTREAMS_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ +BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLD2_LIBS = @CLD2_LIBS@ +CPPFLAGS = @CPPFLAGS@ +CPPREST_LIBS = @CPPREST_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB_LIBS = @DB_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXPAT_CFLAGS = @EXPAT_CFLAGS@ +EXPAT_LIBS = @EXPAT_LIBS@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +HAVE_CXX11 = @HAVE_CXX11@ +ICU_CFLAGS = @ICU_CFLAGS@ +ICU_LIBS = @ICU_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSECRET_CFLAGS = @LIBSECRET_CFLAGS@ +LIBSECRET_LIBS = @LIBSECRET_LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUCENE_CFLAGS = @LUCENE_CFLAGS@ +LUCENE_LIBS = @LUCENE_LIBS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_SHORT_VERSION = @PACKAGE_SHORT_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WXRC = @WXRC@ +WX_CFLAGS = @WX_CFLAGS@ +WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ +WX_CONFIG_PATH = @WX_CONFIG_PATH@ +WX_CONFIG_WITH_ARGS = @WX_CONFIG_WITH_ARGS@ +WX_CPPFLAGS = @WX_CPPFLAGS@ +WX_CXXFLAGS = @WX_CXXFLAGS@ +WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ +WX_LIBS = @WX_LIBS@ +WX_LIBS_STATIC = @WX_LIBS_STATIC@ +WX_RESCOMP = @WX_RESCOMP@ +WX_VERSION = @WX_VERSION@ +WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ +WX_VERSION_MICRO = @WX_VERSION_MICRO@ +WX_VERSION_MINOR = @WX_VERSION_MINOR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = $(datadir)/locale +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +POEDIT_LINGUAS = an ar az be be@latin bg bs ca ckb co cs da de el en_GB es et eu fa fi fr gl he hr hu hy id is it ja ka kab kk ko lt lv ms nb nl oc pa pl pt_BR pt_PT ro ru sk sl sq sr sv tg th tr uk uz vi zh_CN zh_TW + +# ---------------------------------------------------------------------------- +# Logic for catalogs updating follows +# (shamelessly stolen from wxWidgets makefile): +# ---------------------------------------------------------------------------- + +# the programs we use (TODO: use configure to detect them) +MSGFMT = msgfmt --verbose --check +MSGMERGE = msgmerge +XGETTEXT = xgettext +XARGS = xargs + +# common xgettext args: C++ syntax, use the specified macro names as markers +XGETTEXT_ARGS = -C -k_ -kwxGetTranslation -kwxTRANSLATE -kwxPLURAL:1,2 -F -j \ + --add-comments=TRANSLATORS \ + --from-code=UTF-8 \ + --package-name=Poedit --package-version=$(PACKAGE_SHORT_VERSION) \ + --msgid-bugs-address=help@poedit.net + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign locales/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign locales/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am dist-hook distclean distclean-generic distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-data-local install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-local + + +install-data-local: install-poedit-catalogs + +install-poedit-catalogs: + for i in $(POEDIT_LINGUAS) ; do \ + $(mkinstalldirs) $(DESTDIR)$(localedir)/$$i/LC_MESSAGES ; \ + $(INSTALL_DATA) $(srcdir)/$$i.mo $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/poedit.mo ; \ + done + +uninstall-local: + rm -rf $(DESTDIR)$(localedir)/*/LC_MESSAGES/poedit.mo + +# implicit rules +%.mo: %.po + $(MSGFMT) -o $@ $< + +# a PO file must be updated from poedit.pot include new translations +%.po: $(srcdir)/poedit.pot + if [ -f $@ ]; then $(MSGMERGE) $@ $(srcdir)/poedit.pot > $@.new && mv $@.new $@; else cp $(srcdir)/poedit.pot $@; fi + +$(srcdir)/sr_RS@latin.po: $(srcdir)/sr.po + recode-sr-latin <$< >$@ + +$(srcdir)/poedit.pot: + touch $@ + (cd $(srcdir) ; find ../src -name "*.h" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot) + (cd $(srcdir) ; find ../src -name "*.cpp" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot) + (cd $(srcdir) ; $(WXRC) --gettext ../src/resources/*.xrc | $(XGETTEXT) $(XGETTEXT_ARGS) -o poedit.pot -) + +allpo: force-update + @-for t in $(POEDIT_LINGUAS); do $(MAKE) $(srcdir)/$$t.po; done + +allmo: + @for t in $(POEDIT_LINGUAS); do $(MAKE) $(srcdir)/$$t.mo; done + +force-update: + $(RM) $(srcdir)/poedit.pot + +# print out the percentage of the translated strings +stats: + @for i in $(POEDIT_LINGUAS); do \ + x=`$(MSGFMT) -o /dev/null "$(srcdir)/$$i.po" 2>&1 | sed -e 's/[,\.]//g' \ + -e 's/\([0-9]\+\) translated messages\?/TR=\1/' \ + -e 's/\([0-9]\+\) fuzzy translations\?/FZ=\1/' \ + -e 's/\([0-9]\+\) untranslated messages\?/UT=\1/'`; \ + TR=0 FZ=0 UT=0; \ + eval $$x; \ + TOTAL=`expr $$TR + $$FZ + $$UT`; \ + echo "\"$$i\" => \"`expr 100 "*" $$TR / $$TOTAL`\", /* $$TOTAL strings */"; \ + done + +#echo "$$i.po `expr 100 "*" $$TR / $$TOTAL`% of $$TOTAL strings"; + +dist-hook: allmo + cp -a $(srcdir)/*.pot $(srcdir)/*.po $(srcdir)/*.mo $(distdir) + +.PHONY: allpo allmo force-update stats FORCE + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/locales/README b/locales/README new file mode 100644 index 0000000..b2a8c78 --- /dev/null +++ b/locales/README @@ -0,0 +1,9 @@ + +Poedit translations are managed at Crowdin and the best way to contribute +translations is to do it over there: + + https://crowdin.com/project/poedit + +(Note that you can download the PO file, edit it in Poedit and upload back; you +don't have to use the web interface.) + diff --git a/locales/an.mo b/locales/an.mo new file mode 100644 index 0000000000000000000000000000000000000000..27d12de3a1633b84db0086a6dbd4b8b48f2504ac GIT binary patch literal 47404 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\n" +"Language-Team: Aragonese\n" +"Language: an_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: an\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Amagar iste mensache de notificación" + +msgid "Don't Show Again" +msgstr "No tornar a amostrar-lo" + +msgid "Don't show again" +msgstr "No tornar a amostrar-lo" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "No s'ha cargau %i linia d'o fichero «%s» correctament." +msgstr[1] "No s'han cargau %i linias d'o fichero «%s» correctament." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "A linia %d d'o fichero '%s' ye danyada (datos%s no validos)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Capitero malformau: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Fichero de catalogo corrupto: forma singular de msgstr usada de conchunta " +"con msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Fichero de catalogo corrupto: forma plural de msgstr sin usar msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"S'han produciu errors en leyer o catalogo. Puet que qualques datos se troben " +"danyaus u ausents." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "" +"S'ha produciu una error leyendo o fichero %s; prebablement siga danyau." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"O fichero '%s' ye de nomás lectura y no puet estar alzau.\n" +"Por favor, alza-lo con un nombre distinto." + +#, c-format +msgid "Couldn't save file %s." +msgstr "No s'ha puesto alzar o fichero %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"S'ha produciu un problema en dar formato correctament a lo fichero (pero ha " +"estau bien alzau)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"O catalogo no s'ha puesto alzar en o conchunto de caracters '%s' seguntes " +"l'especificau en os achustes d'o catalogo.\n" +"\n" +"S'ha alzau en UTF-8 en cuenta y l'entorno s'ha modificau en conseqüencia." + +msgid "Error saving catalog" +msgstr "S'ha produciu una error en alzar o catalogo" + +msgid "PO Translation Files" +msgstr "Fichers de traducción PO" + +msgid "POT Translation Templates" +msgstr "Plantiellas de traducción POT" + +msgid "All Translation Files" +msgstr "Totz os fichers de traducción" + +msgid "Merging differences..." +msgstr "Se son mezclando as diferencias..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' no ye un fichero POT valido." + +msgid "(Use default language)" +msgstr "(Fer servir a luenga por defecto)" + +msgid "Select your preferred language" +msgstr "Seleccionar a luenga preferida" + +msgid "Language selection" +msgstr "Selección de luenga" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Cal reenchegar o Poedit ta que os cambeos tiengan efecto." + +msgid "Downloading translations is disabled in this project." +msgstr "A descarga de traduccions ye desactivada en iste prochecto." + +msgid "Not authorized, please sign in again." +msgstr "No'n ye autorizau, encieta la sesión de nuevas." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"O Crowdin ye una plataforma de chestión de localizacions en linia y una " +"ferramienta colaborativa de traducción. O Poedit puet sincronizar sin " +"problema os fichers PO chestionaus en o Crowdin." + +msgid "Sign In" +msgstr "Encetar a sesión" + +msgid "Sign in" +msgstr "Encetar a sesión" + +msgid "Sign Out" +msgstr "Zarrar a sesión" + +msgid "Sign out" +msgstr "Zarrar a sesión" + +msgid "Waiting for authentication…" +msgstr "Se ye asperando l'autenticación…" + +msgid "Updating user information…" +msgstr "Se ye esviellando a información de l'usuario…" + +msgid "Signed in as:" +msgstr "A sesión ye encetada como:" + +msgid "Learn More About Crowdin" +msgstr "Aprender mas arredol d'o Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Aprender mas arredol d'o Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Encetar a sesión en o Crowdin." + +msgid "Open Crowdin translation" +msgstr "Ubrir una traducción d'o Crowdin" + +msgid "Project:" +msgstr "Prochecto:" + +msgid "Language:" +msgstr "Luenga:" + +msgid "File:" +msgstr "Fichero:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" +"No bi ha prochectos de traducción listaus en a tuya cuenta d'o Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Iste prochecto no tien fichers que se puedan traducir en o Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Iste fichero nomás puet editar-se en a interficie web d'o Crowdin." + +msgid "Downloading latest translations…" +msgstr "Se son baixando as zagueras traduccions…" + +msgid "Syncing with Crowdin" +msgstr "Se ye syncronizando con o Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "A sincronización con o Crowdin ha fallau." + +msgid "Crowdin error" +msgstr "S'ha produciu una error d'o Crowdin" + +msgid "Uploading translations…" +msgstr "Se ye puyando as traduccions…" + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Aprender-ne más" + +msgid "Learn More" +msgstr "Aprender-ne más" + +#, c-format +msgid "Failed command: %s" +msgstr "S'ha produciu una error en executar o comando: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "S'ha produciu una error en unir catalogos gettext." + +msgid "Scanning files..." +msgstr "Rastriando os fichers..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Procesando os fichers %s…" + +msgid "Failed to load extracted catalog." +msgstr "S'ha produciu una error en cargar catalogos extraitos." + +msgid "&Help" +msgstr "&Aduya" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Os fichers MO no se pueden editar dreitament en o Poedit." + +msgid "Error opening file" +msgstr "S'ha produciu una error ubrindo lo fichero" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"En cuenta ubre y edita o fichero PO correspondient. En que l'alces o fichero " +"MO s'esviellará tamién." + +msgid "don't delete temporary files (for debugging)" +msgstr "no eliminar os fichers temporals (ta trobar errors)" + +msgid "handle a poedit:// URI" +msgstr "maniar un poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Ha fallau en comunicar-se con o proceso d'o Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "S'ha produciu una error no maniada: %s" + +msgid "Unhandled exception occurred." +msgstr "S'ha produciu una error no maniada." + +msgid "Open catalog" +msgstr "Ubrir un catalogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "O fichero '%s' no existe." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Arredol de %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versión %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servicios" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Amagar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Amagar atros" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Amostrar-lo tot" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Salir de %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit ye un editor de traduccions de facil uso." + +msgid "Catalogs Manager" +msgstr "Chestor de catalogos" + +msgid "Check for Updates..." +msgstr "Comprebar si bi ha actualizacions..." + +msgid "&Edit" +msgstr "&Edición" + +msgid "Undo" +msgstr "Desfer" + +msgid "Redo" +msgstr "Refer" + +msgid "Paste and Match Style" +msgstr "Apegar con o mesmoestilo" + +msgid "Delete" +msgstr "Borrar" + +msgid "Spelling and Grammar" +msgstr "Ortografía y gramatica" + +msgid "Show Spelling and Grammar" +msgstr "Amostrar a ortografía y a gramatica" + +msgid "Check Document Now" +msgstr "Comprebar o documento agora" + +msgid "Check Spelling While Typing" +msgstr "Comprebar a ortografía en escribir" + +msgid "Check Grammar With Spelling" +msgstr "Comprebar a gramatica con a ortografía" + +msgid "Correct Spelling Automatically" +msgstr "Correchir automaticament a ortografía" + +msgid "Substitutions" +msgstr "Substitucions" + +msgid "Show Substitutions" +msgstr "Amostrar as substitucions" + +msgid "Smart Copy/Paste" +msgstr "Copiau y apegau intelichent" + +msgid "Smart Quotes" +msgstr "Cometas intelichents" + +msgid "Smart Dashes" +msgstr "Guions intelichents" + +msgid "Smart Links" +msgstr "Vinclos intelichents" + +msgid "Text Replacement" +msgstr "Substitución de texto" + +msgid "Transformations" +msgstr "Transformacions" + +msgid "Make Upper Case" +msgstr "Convertir en mayusclas" + +msgid "Make Lower Case" +msgstr "Convertir en minusclas" + +msgid "Capitalize" +msgstr "Meter en mayusclas" + +msgid "Speech" +msgstr "Voz" + +msgid "Start Speaking" +msgstr "Rancar a voz" + +msgid "Stop Speaking" +msgstr "Aturar a voz" + +msgid "&View" +msgstr "&Veyer" + +msgid "Enter Full Screen" +msgstr "Dentrar ta pantalla completa" + +msgid "Window" +msgstr "Finestra" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Enamplar" + +msgid "Bring All to Front" +msgstr "Trayer-ne tot t'o frent" + +msgid "PO Translation" +msgstr "Traducción PO" + +msgid "The file cannot be opened." +msgstr "No se puet ubrir o fichero." + +msgid "Invalid file" +msgstr "Fichero invalido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"O fichero puet estar danyau u en un formato no reconoixiu por o Poedit." + +msgid "&Undo" +msgstr "&Desfer" + +msgid "&Redo" +msgstr "&Refer" + +msgid "Cu&t" +msgstr "&Retallar" + +msgid "Cut" +msgstr "Retallar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "A&pegar" + +msgid "Paste" +msgstr "Apegar" + +msgid "&Delete" +msgstr "&Borrar" + +msgid "Select &All" +msgstr "Seleccion&ar-lo tot" + +msgid "Select All" +msgstr "Seleccionar-lo tot" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Mayus+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Intro" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Alto" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Abaixo" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "mayus" + +msgid "You can't drop more than one file on Poedit window." +msgstr "No se puet soltar mas d'un fichero en a finestra de Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "O fichero '%s' no ye un catalogo de mensaches." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fichero" + +msgid "&Go" +msgstr "&Ir" + +msgid "Source text:" +msgstr "Texto fuent:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Traducción:" + +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 "" +"Os fichers POT no son que plantiellas y no contienen garra traducción en sí " +"mesmas.\n" +"Ta fer una traducción, creya un nuevo fichero PO basau en a plantiella." + +msgid "Create New Translation" +msgstr "Creyar una nueva traducción" + +msgid "Create new translation" +msgstr "Creyar una nueva traducción" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"S'ha desactivau a revisión ortografica porque falta o diccionario ta %s." + +msgid "Install" +msgstr "Instalar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalogo modificau. Quiers alzar os cambios?" + +msgid "Save changes" +msgstr "Alzar os cambeos" + +msgid "Your changes will be lost if you don't save them." +msgstr "Os cambeos se perderán si no los alza." + +msgid "Save" +msgstr "Alzar" + +msgid "Don't save" +msgstr "No alzar-lo" + +msgid "Don't Save" +msgstr "No alzar-lo" + +msgid "Save as..." +msgstr "Alzar como..." + +msgid "Compile to..." +msgstr "Compilar ta..." + +msgid "Compiled Translation Files" +msgstr "Fichers de traducción compilaus" + +msgid "Export as..." +msgstr "Exportar como..." + +msgid "HTML Files" +msgstr "Fichers HTML" + +msgid "Open catalog template" +msgstr "Ubrir una plantilla de catalogo" + +msgid "Updating catalog" +msgstr "Se ye esviellando lo catalogo" + +msgid "Source code not available." +msgstr "O codigo fuent no ye disponible." + +msgid "Updating failed" +msgstr "L'actualización ha fallau" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"No s'han puesto esviellar as traduccions a partir d'o codigo fuent porque no " +"s'ha trobau o codigo en a ubicación especificada en as propiedatz d'o " +"catalogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Prebablement, qualques textos d'o catalogo son incorrectos." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"L'actualización d'o catalogo ha fallau. Prete en Detalles>> ta mas " +"información." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problema trobau en a traducción." +msgstr[1] "%d problemas trobaus en a traducción." + +msgid "Validation results" +msgstr "Resultaus d'a validación" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"As dentradas con errors s'han marcau en royo en a lista. S'amostrarán os " +"detalles d'a error quan selecciones a dentrada." + +msgid "The file was saved safely." +msgstr "O fichero s'ha alzau de traza segura." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"O fichero s'ha alzau de traza segura y s'ha compilau t'o formato MO pero " +"prebablement no marche correctament." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"O fichero s'ha alzau pero no puet compilar-se t'o formato MO ni usar-se." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"O fichero ye estau compilau t'o formato MO pero prebablement no'n funcionará " +"correctament." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "O fichero no se puet compilar t'o formato MO ta emplegar-se." + +msgid "No problems with the translation found." +msgstr "No se troban problemas en ista traducción." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"A traducción ye presta pa usar-se, pero %d dentrada ye encara sin traducir." +msgstr[1] "" +"A traducción ye presta pa usar-se, pero %d dentradas son encara sin traducir." + +msgid "The translation is ready for use." +msgstr "A traducción ye presta pa usar-se." + +msgid "Context:" +msgstr "Contexto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"O Poedit ha apanyau automaticament conteniu invalido en o fichero “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"O fichero conteniba elementos duplicaus que no ye permitiu en os fichers PO " +"y podría privar que o fichero estase emplegau. O Poedit ha apanyau o " +"problema pero habrás de revisar as traduccions de qualques elementos marcaus " +"como fuscos y correchir-los si ye necesario." + +msgid "Language of the translation isn't set." +msgstr "No s'ha establiu un idioma d'atraducción." + +msgid "Set Language" +msgstr "Establir l'idioma" + +msgid "Set language" +msgstr "Establir l'idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"As sucherencias no son disponibles si l'idioma de traducción no ye " +"correctament establiu. Atras caracteristicas, tals como as formas plurals, " +"tamién pueden veyer-sen afectadas." + +msgid "Language of the translation is the same as source language." +msgstr "L'idioma d'a traducción ye o mesmo que l'idioma d'orichen." + +msgid "Fix Language" +msgstr "Apanyar l'idioma" + +msgid "Fix language" +msgstr "Apanyar l'idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Iste catalogo tien dentradas con formas plurals, pero no tien un capitero de " +"formas plurals configurau." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"As dentradas d'iste catalogo tienen una cuenta de formas de plural diferent " +"a la d'o capitero" + +msgid "Required header Plural-Forms is missing." +msgstr "Manca o capitero de formas plurals requeriu." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Bi ha una error sintactica en as formas plurals d'o capitero (\"%s\")." + +msgid "Fix the Header" +msgstr "Apanyar o capitero" + +msgid "Fix the header" +msgstr "Adequar o capitero" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"A expresión de formas plurals que fa servir o catalogo ye insolita ta %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revisar" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "" +"S'ha produciu una error en cargar o fichero de catalogo de mensaches '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduciu: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "En queda: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errors" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d dentrada" +msgstr[1] "%d dentradas" + +msgid " (unsaved)" +msgstr " (sin alzar)" + +msgid " (modified)" +msgstr " (modificau)" + +msgid "Go" +msgstr "Ir" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "S'ha produciu una error en esviellar as traduccions memorizadas: %s" + +msgid "Purge deleted translations" +msgstr "Purgar as traduccions borradas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Deseyas eliminar todas as traduccions que ya no se fan servir?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Si continas con o purgau, todas as traduccions marcadas como borradas serán " +"eliminadas permanentment. Habrás a traducir-las unatra vegada si son " +"adhibidas unatra vegada en o esvenidero." + +msgid "Keep" +msgstr "Mantener" + +msgid "Purge" +msgstr "Purgar" + +msgid "Fill missing translations from TM" +msgstr "Replenar as traduccions mancants con as TM" + +msgid "Only fill in exact matches" +msgstr "No replenar que as coincidencias exactas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"De traza predeterminada, os resultaus imprecisos se replenarán y marcarán " +"como provisionals. Activa ista opción ta incluir nomás as coincidencias " +"exactas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "No marcar as coincidencias exactas como provisionals" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Activa ista opción nomás si confidas en a calidat d'as TM. De traza " +"predeterminada, todas as coincidencias se marcan como provisionals t'a suya " +"revisión." + +msgid "Fill" +msgstr "Replenar-ne" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d dentrada ye estada replenada dende as traduccions memorizadas." +msgstr[1] "" +"%d dentradas son estadas replenadas dende as traduccions memorizadas." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"As traduccions s'han marcau como provisionals, porque pueden estar " +"imprecisas. Has a revisar-las ta la corrección d'ellas." + +msgid "No entries could be filled from the translation memory." +msgstr "No s'han puesto replenar dentradas dende as traduccions memorizadas." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"As TM no contienen cadenas similars a lo conteniu d'iste fichero. Nomás ye " +"efectivo ta las traduccions semiautomaticas dimpués de que o Poedit aprenda " +"prou de fichers que traduciés de traza manual." + +msgid "Translating" +msgstr "Traducindo" + +msgid "Filling missing translations from TM..." +msgstr "Se son replenando as traduccions que mancaban dende as&TM" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Traducida %u cadena" +msgstr[1] "Traducidas %u cadenas" + +msgid "Copy from source text" +msgstr "Copiar dende o texto fuent" + +msgid "Copy from Source Text" +msgstr "Copiar dende o texto fuent" + +msgid "Clear translation" +msgstr "Limpiar a traducción" + +msgid "Clear Translation" +msgstr "Limpiar a traducción" + +msgid "Edit comment" +msgstr "Editar o comentario" + +msgid "Edit Comment" +msgstr "Editar o comentario" + +msgid "References:" +msgstr "Referencias:" + +msgid "Everything" +msgstr "Tot" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Un" + +msgid "Two" +msgstr "Dos" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "Unatro" + +msgid "&Bookmarks" +msgstr "&Marcapachinas" + +#, c-format +msgid "Set bookmark %i" +msgstr "Establir o marcapachinas %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ir-ne t'o marcapachinas%i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Establir o marcapachinas %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ir-ne t'o marcapachinas%i" + +msgid "Hide Sidebar" +msgstr "Amagar a barra lateral" + +msgid "Show Sidebar" +msgstr "Amostrar a barra lateral" + +msgid "Hide Status Bar" +msgstr "Amagar a barra d'estau" + +msgid "Show Status Bar" +msgstr "Amostrar a barra d'estau" + +msgid "Source text" +msgstr "Texto fuent" + +msgid "Translation" +msgstr "Traducción" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Texto d'orichen — %s" + +msgid "unknown language" +msgstr "idioma desconoixiu" + +#, c-format +msgid "Translation — %s" +msgstr "Traducción — %s" + +msgid "Error:" +msgstr "Error:" + +msgid "Source file" +msgstr "Fichero fuent" + +msgid "Source file occurrence:" +msgstr "Fichero fuent coincident:" + +msgid "Open in Editor" +msgstr "Ubrir-ne en l'editor" + +msgid "Open in editor" +msgstr "Ubrir-ne en l'editor" + +msgid "No references for the selected item." +msgstr "No bi ha referencias t'o elemento seleccionau." + +#, c-format +msgid "Error opening file %s!" +msgstr "S'ha produciu una error en ubrir o fichero %s!" + +msgid "Find" +msgstr "Mirar" + +msgid "Replace" +msgstr "Substituir" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcions" + +msgid "Ignore case" +msgstr "Ignorar as mayusclas y as minusclas" + +msgid "Wrap around" +msgstr "Embolicau arredol" + +msgid "Whole words only" +msgstr "Nomás as parolas completas" + +msgid "Find in source texts" +msgstr "Mirar en o texto d'orichen" + +msgid "Find in translations" +msgstr "Mirar en as traduccions" + +msgid "Find in comments" +msgstr "Mirar en os comentarios" + +msgid "Close" +msgstr "Zarrar" + +msgid "Replace All" +msgstr "Substituir-lo tot" + +msgid "Replace all" +msgstr "Substituir-lo tot" + +msgid "< &Previous" +msgstr "< &Anterior" + +msgid "&Next >" +msgstr "&Siguient >" + +msgid "String to find" +msgstr "Cadena que mirar" + +msgid "Replacement string" +msgstr "Cadena de substitución" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "No se puet executar o programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Codigo de l'idioma u nombre (p. eix. an_ES)" + +msgid "Translation Language" +msgstr "Idioma d'a traducción" + +msgid "Language of the translation:" +msgstr "Idioma d'a traducción:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Chestor de catalogos" + +msgid "Catalog" +msgstr "Catalogo" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Sin traducir" + +msgid "Fuzzy" +msgstr "Provisional" + +msgid "Bad Tokens" +msgstr "Simbolos erronios" + +msgid "Last modified" +msgstr "Zaguera modificación" + +msgid "Select directory" +msgstr "Seleccionar a carpeta" + +msgid "Directories:" +msgstr "Carpetas:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Deseyas borrar o prochecto?" + +msgid "Confirmation" +msgstr "Confirmación" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Deseyas una actualización masiva de totz os\n" +"catalogos d'iste prochecto?" + +msgid "Information about the translator" +msgstr "Información arredol d'o traductor" + +msgid "Name:" +msgstr "Nombre:" + +msgid "Your Name" +msgstr "O tuyo nombre" + +msgid "Email:" +msgstr "Correu electronico:" + +msgid "your_email@example.com" +msgstr "o_tuyo_correu@eixemplo.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"O tuyo nombre y l'adreza de correu electronico no s'emplegan que ta " +"establir o capitero de zaguer traductor d'os fichers GNU gettext." + +msgid "Editing" +msgstr "Editando" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar o fichero MO automaticament en alzar" + +msgid "Show summary after catalog update" +msgstr "Amostrar o resumen dimpués d'esviellar o catalogo" + +msgid "Check spelling" +msgstr "Comprebar a ortografía" + +msgid "Always change focus to text input field" +msgstr "Pasar siempre o foco t'o quadro de traducción" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"No deixar que a lista de textos retienga l'enfoque. Si ista opción ye " +"activada puet fer-se servir de conchunta con CTRL + teclas d'adreza\n" +"ta mover-se por a lista de textos y prencipiar a tecliar immediatament sin " +"pretar o tabulador ta cambiar o foco." + +msgid "Appearance" +msgstr "Aparencia" + +msgid "Use custom list font:" +msgstr "Fer servir una fuent personalizada t'as listas:" + +msgid "Use custom text fields font:" +msgstr "Fer servir una fuent personalizada t'os quadros de texto:" + +msgid "Change UI language" +msgstr "Cambiar a luenga d'a interficie d'usuario" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Ye menister Windows 8 u mas recient)" + +msgid "General" +msgstr "Cheneral" + +msgid "Use translation memory" +msgstr "Fer servir a memoria de traducción" + +msgid "Learn From Files..." +msgstr "Aprender dende os fichers..." + +msgid "Learn from files..." +msgstr "Aprender-ne dende os fichers..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Reenchegar-ne" + +msgid "Consult TM when updating from sources" +msgstr "Consultar as TM en esviellar dende as fuents" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Si ye activau, o Poedit prebará a replenar as dentradas nuevas fendo servir " +"as tuyas\n" +"traduccions anteriors almagazenadas en as traduccions memorizadas. Si as TM " +"son\n" +"quasi vuedas , no será muit efectivo. A mas traduccions\n" +"edites y mas creixcan as TM, millor en marchará." + +msgid "Stored translations:" +msgstr "Traduccions almagazenadas:" + +msgid "Database size on disk:" +msgstr "Grandaria d'a base de datos en disco:" + +msgid "Select translation files to import" +msgstr "Seleccionar os fichers de traducción ta importar-los" + +msgid "Translation Memory" +msgstr "Traduccions memorizadas" + +msgid "Importing translations..." +msgstr "Se son importando traduccions..." + +msgid "Finalizing..." +msgstr "Rematando..." + +msgid "Reset translation memory" +msgstr "Reenchegar a memoria de traducción" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "De seguras que quiers reenchegar as traduccions memorizadas?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"En reenchegar a memoria de traducción se borrarán todas as traduccions " +"almagazenadas. Ista operación no se puet desfer." + +msgid "Cancel" +msgstr "Cancelar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Os extractors de codigo fuent se fan servir ta trobar os mensaches " +"traducibles en os fichers de codigo fuent y extrayer-los ta permitir a suya " +"traducción." + +msgid "New" +msgstr "Nuevo" + +msgid "Edit" +msgstr "Editar" + +msgid "Delete extractor" +msgstr "Borrar l'extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Yes seguro que quiers eliminar l'extractor “%s”?" + +msgid "Extractors" +msgstr "Extractors" + +msgid "Accounts" +msgstr "Cuentas" + +msgid "Automatically check for updates" +msgstr "Comprebar as actualizacions automaticament" + +msgid "Include beta versions" +msgstr "Incluir as versions beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"As versions beta contienen as funcionalidatz y milloras mas recients, pero " +"pueden resultar menos estables." + +msgid "Updates" +msgstr "Actualizacions" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Istas valors afectan o formato interno d'os fichers PO. Achusta-los si tiens " +"requisitos especificos; por eixemplo, a causa d'o control de versión." + +msgid "Line endings:" +msgstr "finals d'as linias" + +msgid "Unix (recommended)" +msgstr "Unix (recomendau)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Achustar-ne en:" + +msgid "Preserve formatting of existing files" +msgstr "Conservar o formato d'os fichers existents" + +msgid "Advanced" +msgstr "Avanzau" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferencias d’o %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arrocegar y soltar carpetas aquí\n" +"\n" +"u fer servir o botón +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arrocegar y soltar carpetas aquí\n" +"\n" +"u fer servir o botón +" + +msgid "Add Folders..." +msgstr "Adhibir carpetas" + +msgid "Add folders..." +msgstr "Adhibir carpetas" + +msgid "Add Files..." +msgstr "Adhibir Fichers..." + +msgid "Add files..." +msgstr "Adhibir fichers..." + +msgid "Add Wildcard..." +msgstr "Adhibir comodín" + +msgid "Add wildcard..." +msgstr "Adhibir comodín" + +msgid "Paths" +msgstr "Carpetas" + +msgid "Excluded paths" +msgstr "Rotas excluidas" + +msgid "Additional keywords" +msgstr "Parolas clau adicionals" + +msgid "Name of the project the translation is for" +msgstr "Nombre d'o prochecto a traducción ye pa" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p. eix. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomendau)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Por favor en primeras alza o fichero. Ista sección no se puet editar dica " +"que no se'n faiga." + +msgid "Comment:" +msgstr "Comentario:" + +msgid "OK" +msgstr "Acceptar" + +msgid "C&lear" +msgstr "Esbo&rrar" + +msgid "Clear the comment" +msgstr "Borrar o comentario" + +msgid "Create new translations project" +msgstr "Creyar un nuevo prochecto de traducción" + +msgid "Edit the project" +msgstr "Editar o prochecto" + +msgid "Delete the project" +msgstr "Borrar o prochecto" + +msgid "Update all" +msgstr "Esviellar-lo tot" + +msgid "Update all catalogs in the project" +msgstr "Esviellar totz os catalogos d'o prochecto" + +msgid "Edit project" +msgstr "Editar o prochecto" + +msgid "Project name:" +msgstr "Nombre d'o prochecto:" + +msgid "Browse" +msgstr "Examinar" + +msgid "Add directory to the list" +msgstr "Adhibir carpeta a la lista" + +msgid "&New..." +msgstr "&Nuevo..." + +msgid "New from &POT/PO file..." +msgstr "Nuevo dende un fichero &POT u PO..." + +msgid "New From &POT/PO File..." +msgstr "Nuevo dende un fichero &POT u PO..." + +msgid "&Open..." +msgstr "&Ubrir..." + +msgid "Open Recent" +msgstr "Ubrir recient" + +msgid "Open from Crowdin..." +msgstr "Ubrir dende o Crowdin…" + +msgid "Open From Crowdin..." +msgstr "Ubrir dende o Crowdin…" + +msgid "&Close" +msgstr "&Zarrar" + +msgid "&Save" +msgstr "&Alzar" + +msgid "Save &as..." +msgstr "&Alzar como..." + +msgid "Save &As..." +msgstr "&Alzar como..." + +msgid "Compile to MO..." +msgstr "Compilar ta MO" + +msgid "E&xport as HTML..." +msgstr "E&xportar como HTML..." + +msgid "Check for updates..." +msgstr "Comprebar si bi ha actualizacions..." + +msgid "&Preferences..." +msgstr "&Preferencias..." + +msgid "Catalogs &manager" +msgstr "Chestor de &catalogos" + +msgid "Catalogs &Manager" +msgstr "Chestor de &catalogos" + +msgid "E&xit" +msgstr "&Salir" + +msgid "Quit" +msgstr "Salir" + +msgid "Copy from singular" +msgstr "Copiar dende o singular" + +msgid "Copy From Singular" +msgstr "Copiar dende o singular" + +msgid "Translation is &fuzzy" +msgstr "A traducción ye &provisional" + +msgid "Translation Is &Fuzzy" +msgstr "A traducción ye &provisional" + +msgid "Edit &comment" +msgstr "Editar o &comentario" + +msgid "Edit &Comment" +msgstr "Editar o &comentario" + +msgid "Suggestions" +msgstr "Sucherencias" + +msgid "&Show references" +msgstr "&Amostrar as referencias" + +msgid "&Show References" +msgstr "&Amostrar as referencias" + +msgid "&Find..." +msgstr "&Mirar..." + +msgid "Replace..." +msgstr "Substituir…" + +msgid "Find next" +msgstr "Mirar o siguient" + +msgid "Find previous" +msgstr "Mirar l'anterior" + +msgid "Find and Replace..." +msgstr "Mirar y substituir…" + +msgid "Find Next" +msgstr "Mirar o siguient" + +msgid "Find Previous" +msgstr "Mirar l'anterior" + +msgid "&Preferences" +msgstr "&Preferencias" + +msgid "Display entry &IDs" +msgstr "Amostrar a dentrada d'&ID" + +msgid "Display Entry &IDs" +msgstr "Amostrar a dentrada d'&ID" + +msgid "Sort by &file order" +msgstr "Ordenar-los por orden d'o fichero" + +msgid "Sort by &File Order" +msgstr "Ordenar-los por orden d'o fichero" + +msgid "Sort by &source" +msgstr "Ordenar-los por &orichen" + +msgid "Sort by &Source" +msgstr "Ordenar-los por orichen" + +msgid "Sort by &translation" +msgstr "Ordenar-los por &traducción" + +msgid "Sort by &Translation" +msgstr "Ordenar-los por &traducción" + +msgid "&Group by context" +msgstr "A&grupar por o contexto" + +msgid "&Group By Context" +msgstr "A&grupar por o contexto" + +msgid "Entries with errors first" +msgstr "Dentradas con errors primer" + +msgid "Entries with Errors First" +msgstr "Dentradas con errors primer" + +msgid "&Untranslated entries first" +msgstr "&Dentradas sin traducir primer" + +msgid "&Untranslated Entries First" +msgstr "&Dentradas sin traducir primer" + +msgid "Show sidebar" +msgstr "Amostrar a barra lateral" + +msgid "Show status bar" +msgstr "Amostrar a barra d'estau" + +msgid "C&atalog" +msgstr "C&atalogo" + +msgid "&Update from sources" +msgstr "&Esviellar-lo dende as fuents" + +msgid "&Update from Sources" +msgstr "&Esviellar-lo dende as fuents" + +msgid "Update from &POT file..." +msgstr "Esviellar-lo dende un fichero &POT..." + +msgid "Update from &POT File..." +msgstr "Esviellar-lo dende un fichero &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizar con o Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Replenar as traduccions que faltan con as TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Replenar as traduccions que faltan con as TM..." + +msgid "&Purge deleted translations" +msgstr "&Purgar as traduccions borradas" + +msgid "&Purge Deleted Translations" +msgstr "&Purgar as traduccions borradas" + +msgid "&Validate translations" +msgstr "&Validar as traduccions" + +msgid "&Validate Translations" +msgstr "&Validar as traduccions" + +msgid "&Properties..." +msgstr "&Propiedatz..." + +msgid "&Done and next" +msgstr "Feito y &siguient" + +msgid "&Done and Next" +msgstr "Feito y &siguient" + +msgid "&Previous translation" +msgstr "Traducción &anterior" + +msgid "&Previous Translation" +msgstr "Traducción &anterior" + +msgid "&Next translation" +msgstr "Traducción siguie&nt" + +msgid "&Next Translation" +msgstr "Traducción siguie&nt" + +msgid "P&revious unfinished" +msgstr "Ante&rior sin rematar" + +msgid "P&revious Unfinished" +msgstr "Ante&rior sin rematar" + +msgid "Ne&xt unfinished" +msgstr "Siguien&t sin rematar" + +msgid "Ne&xt Unfinished" +msgstr "Siguien&t sin rematar" + +msgid "Previous plural form" +msgstr "Anterior forma plural" + +msgid "Previous Plural Form" +msgstr "Anterior forma plural" + +msgid "Next plural form" +msgstr "Siguient forma plural" + +msgid "Next Plural Form" +msgstr "Siguient forma plural" + +msgid "&Online help" +msgstr "&Aduya en linia" + +msgid "&Online Help" +msgstr "&Aduya en linia" + +msgid "&GNU gettext manual" +msgstr "manual de &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual de &GNU gettext" + +msgid "&About Poedit" +msgstr "&Sobre o Poedit" + +msgid "&About" +msgstr "&Sobre" + +msgid "Extractor setup" +msgstr "Configuración d'extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista d'extensions separadas por punto y coma (p. eix. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Execución:" + +msgid "Command to extract translations:" +msgstr "Comando ta extrayer as traduccions:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Iste comando se fa servir ta ubrir l'extractor.\n" +"%u expande o nombre d'o fichero de salida, %K amuestra\n" +"as parolas clau, %F enlista os fichers de dentrada y\n" +"%C define o conchunto de caracters (vei abaixo)." + +msgid "An item in keywords list:" +msgstr "Elemento d'a lista de parolas clau:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"S'adhibirá a la linia de comandos una vegada por\n" +"cada parola clau. %k contién a parola clau." + +msgid "An item in input files list:" +msgstr "Elemento d'a lista de fichers de dentrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"S'adhibirá a la linia de comandos una vegada por cada\n" +"fichero de dentrada. %f contién o nombre de fichero." + +msgid "Source code charset:" +msgstr "Chuego de caracters d'o codigo fuent:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"S'adhibirá a la linia de comandos nomás si se proporciona\n" +"o codigo d'o chuego de caracters fuent. %c contién a valura d'o chuego de " +"caracters." + +msgid "Catalog properties" +msgstr "Propiedatz d'o catalogo" + +msgid "Project name and version:" +msgstr "Nombre d'o prochecto y versión:" + +msgid "Plural Forms:" +msgstr "Formas plurals:" + +msgid "Use default rules for this language" +msgstr "Fer servir os regles predeterminaus ta iste idioma" + +msgid "Use custom expression" +msgstr "Emplegar una expresión personalizada" + +msgid "Learn about plural forms" +msgstr "Aprender arredol de formas plurals" + +msgid "Charset:" +msgstr "Chuego de caracters:" + +msgid "Team:" +msgstr "Equipo:" + +msgid "Team's email address:" +msgstr "Adreza de correu electronico de l'equipo:" + +msgid "Translation properties" +msgstr "Propiedatz de traducción" + +msgid "Sources paths" +msgstr "Directorios fuent" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrayer o texto d'o fichero d'orichen en os directorios siguients:" + +msgid "Base path:" +msgstr "Directorio radiz:" + +msgid "Sources keywords" +msgstr "Parolas clau orichinals" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Fer servir istas parolas clau (nombres de funcions) ta reconoixer textos\n" +"traducibles en fichers fuent, amás d'as parolas clau por defecto:" + +msgid "Learn about gettext keywords" +msgstr "Aprender sobre as parolas clau d'o GNU gettext" + +msgid "Update summary" +msgstr "Resumen de l'actualización" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Istos textos amaneixen en os fichers fuent, pero no son\n" +"en o catalogo. O Poedit los adhibirá agora a lo catalogo." + +msgid "New strings" +msgstr "Textos nuevos" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Istos textos ya no se troban en os fichers\n" +"fuent. O Poedit los eliminará d'o catalogo." + +msgid "Obsolete strings" +msgstr "Linias obsoletas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nuevos, 0 obsoletos)" + +msgid "Open" +msgstr "Ubrir" + +msgid "Save catalog" +msgstr "Alzar o catalogo" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Mirar as errors en a traducción" + +msgid "Update" +msgstr "Esviellar-lo" + +msgid "Update catalog - synchronize it with sources" +msgstr "Esviellar o catalogo, sincronizar-lo con as fuents" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Activau si o texto seleccionau ye traduciu provisionalment" + +msgid "Show or hide the sidebar" +msgstr "Amostrar u amagar a barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texto fuent anterior:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"L'antigo texto fuent (antis que no cambiase entre l'actualización) a lo que " +"corresponde a traducción aproximada (provisional)." + +msgid "Notes for translators:" +msgstr "Notas ta os traductors:" + +msgid "Add comment" +msgstr "Adhibir un comentario" + +msgid "Add Comment" +msgstr "Adhibir un comentario" + +msgid "Translation suggestions:" +msgstr "Sucherencias de traducción:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "No s'han trobau coincidencias." + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "No s'han trobau coincidencias" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ista cadena s'ha trobau en as traduccions memorizadas d'o Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nuevas: %i, obsoletas: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importando traduccions: %d" + +msgid "Poedit Update" +msgstr "Actualización d'o Poedit" + +msgid "Preparing migration..." +msgstr "Se ye parando a migración..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estau de salida d'a migración: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"O poedit amenesta convertir as suyas traduccions memorizadas en unatro " +"ormato." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Isto cal fer-lo antes que o Poedit remate de rancar. En puet tardar uns " +"menutos si tiens una gran cantidat de traduccions almagazenadas, pero " +"normalment en habría a estar muito mas rapido." + +msgid "Proceed" +msgstr "Executar" + +msgid "Translation memory migration failed." +msgstr "S'ha produciu una error en a migración d'as traduccions memorizadas." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Os datos d'as tuyas traduccions memorizadas no s'han puesto migrar. A error " +"ye estada:\n" +"\n" +"%s\n" +" Ninvia un correu electronico a help@poedit.net y tractaremos d'apanyar-lo." + +msgid "Cannot create temporary directory." +msgstr "No puet creyar-se a carpeta temporal." + +msgid "Welcome to Poedit" +msgstr "Bienveniu en o Poedit" + +msgid "Edit a translation" +msgstr "Editar una traducción" + +msgid "Open an existing PO file and edit the translation." +msgstr "Ubrir un fichero PO existent y editar a suya traducción." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Prener un fichero PO existent u una plantilla POT y creyar una nueva " +"traducción d'a mesma." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Colaborar en una traducción con o Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Baixa un fichero dende o Prochecto d'o Crowdin, traduz y syncroniza os tuyos " +"cambeos de nuevas." + +msgid "What is Crowdin?" +msgstr "Qué ye o Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "No bi ha garra traducción. Ixo ye insolito." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"As dentradas traducibles no s'adhiben manualment en o sistema de Gettext, " +"pero s'extrayen automaticament\n" +"dende o codigo fuent. D'ista traza, son a lo diya y precisas. \n" +"Os traductors gosan fer servir fichers de plantilla PO (POT) preparadas ta " +"ells por o desembolicador." + +msgid "(Learn more about GNU gettext)" +msgstr "(Aprender mas sobre o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"A traza mas simpla ta emplir iste catalogo ye esviellar-lo dende un POT:" + +msgid "Update from POT" +msgstr "Esviellar-lo dende un fichero POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Prener cadenas traducibles d'una plantilla POT existent." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Puetz tamién extrayer cadenas traduciblesdreitament dende o codigo fuent:" + +msgid "Extract from sources" +msgstr "Esviellar-lo dende as fuents" + +msgid "Configure source code extraction in Properties." +msgstr "Configurar o codigo d'extracción de fuents en propiedatz." + +msgid "Sync" +msgstr "Sincronizar" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar a traducción con o Crowdin" diff --git a/locales/ar.mo b/locales/ar.mo new file mode 100644 index 0000000000000000000000000000000000000000..7eee6323741482fa8e31a97126cb67c2b598daf5 GIT binary patch literal 53955 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 literal 0 HcmV?d00001 diff --git a/locales/ar.po b/locales/ar.po new file mode 100644 index 0000000..bf575cc --- /dev/null +++ b/locales/ar.po @@ -0,0 +1,1949 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:55-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Arabic\n" +"Language: ar_SA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ar\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "أخفِ رسالة الإخطار هذه" + +msgid "Don't Show Again" +msgstr "لا تعرض مجدّدًا" + +msgid "Don't show again" +msgstr "لا تعرض مجدّدًا" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "حُمّلت كلّ أسطر%.0i الملفّ '%s' تحميلًا صحيحًا." +msgstr[1] "لم يُحمّل سطر واحد%.0i من الملفّ '%s' تحميلًا صحيحًا." +msgstr[2] "لم يُحمّل سطران%.0i من الملفّ '%s' تحميلًا صحيحًا." +msgstr[3] "لم تُحمّل %i أسطر من الملفّ '%s' تحميلًا صحيحًا." +msgstr[4] "لم يُحمّل %i سطرًا من الملفّ '%s' تحميلًا صحيحًا." +msgstr[5] "لم يُحمّل %i سطر من الملفّ '%s' تحميلًا صحيحًا." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "السّطر %d من الملفّ '%s' فاسد (بيانات %s غير صالحة)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "التّرويسة فاسدة: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "ملفّ الكتالوج معطوب: استُخدمت صيغة المفرد msgstr مع msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "ملفّ الكتالوج معطوب: استُخدمت صيغة الجمع msgstr دون msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"حدثت أخطاء عند تحميل الكتالوج. قد تكون بعض البيانات ناقصة أو تالفة نتيجة إلى " +"ذلك." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "تعذّر تحميل الملفّ %s، قد يكون فاسدًا." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"الملفّ '%s' للقراءة فقط ولا يمكن حفظه.\n" +"فضلًا احفظه باسم مختلف." + +#, c-format +msgid "Couldn't save file %s." +msgstr "تعذّر حفظ الملفّ %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "حدثت مشكلة أثناء تنسيق الملفّ تنسيقًا جميلًا (لكنّه حُفِظ حفظًا صحيحًا)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"تعذّر حفظ الكتالوج بطقم المحارف '%s' كما هو محدّد في إعدادات الكتالوج.\n" +"\n" +"حُفِظ الملفّ بترميز UTF-8 بدل ذلك وعُدّل الإعداد وفقًا لذلك." + +msgid "Error saving catalog" +msgstr "خطأ عند حفظ الكتالوج" + +msgid "PO Translation Files" +msgstr "ملفّات PO ترجميّة" + +msgid "POT Translation Templates" +msgstr "ملفّات POT قالبيّة" + +msgid "All Translation Files" +msgstr "كل ملفّات التّرجمة" + +msgid "Merging differences..." +msgstr "يدمج الاختلافات..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "الملفّ '%s' ليس ملفّ POT صالح." + +msgid "(Use default language)" +msgstr "(استخدم اللغة الافتراضيّة)" + +msgid "Select your preferred language" +msgstr "اختر لغتك المفضّلة" + +msgid "Language selection" +msgstr "حدّد اللّغة" + +msgid "You must restart Poedit for this change to take effect." +msgstr "عليك إعادة تشغيل «محرّر Po» لتطبيق التّعديلات." + +msgid "Downloading translations is disabled in this project." +msgstr "عُطِّل تنزيل التّرجمات لهذا المشروع." + +msgid "Not authorized, please sign in again." +msgstr "غير موثوق، رجاء أعد الدخول من جديد." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"كراودِن هي منصّة إلكترونيّة لإدارة التّرجمات وأداة ترجمة تعاونيّة. يمكن ل‍«محرّر " +"Po» مزامنة ملفّات PO المُدارة في كراودِن بسهولة." + +msgid "Sign In" +msgstr "لِج" + +msgid "Sign in" +msgstr "لِج" + +msgid "Sign Out" +msgstr "سجّل الخروج" + +msgid "Sign out" +msgstr "سجّل الخروج" + +msgid "Waiting for authentication…" +msgstr "ينتظر الاستيثاق..." + +msgid "Updating user information…" +msgstr "يحدّث معلومات المستخدم..." + +msgid "Signed in as:" +msgstr "والج كَ‍:" + +msgid "Learn More About Crowdin" +msgstr "اطّلع على المزيد حول كراودِن" + +msgid "Learn more about Crowdin" +msgstr "اطّلع على المزيد حول كراودِن" + +msgid "Sign in to Crowdin" +msgstr "لِج إلى كراودِن" + +msgid "Open Crowdin translation" +msgstr "افتح ترجمة كراودِن" + +msgid "Project:" +msgstr "المشروع:" + +msgid "Language:" +msgstr "اللُّغة:" + +msgid "File:" +msgstr "الملفّ:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "لا مشاريع ترجمة موجودة في حسابك على كراودِن." + +msgid "This project has no files that can be translated in Poedit." +msgstr "ليس في هذا المشروع ملفّات يمكن ترجمتها في «محرّر Po»." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "يمكن تحرير هذا الملف فقط في واجهة كراودِن الوِبّيّة." + +msgid "Downloading latest translations…" +msgstr "ينزّل أحدث التّرجمات…" + +msgid "Syncing with Crowdin" +msgstr "يزامن مع كراودِن" + +msgid "Syncing with Crowdin failed." +msgstr "فشلت المزامنة مع كراودِن." + +msgid "Crowdin error" +msgstr "خطأ كراودِن" + +msgid "Uploading translations…" +msgstr "يرفع التّرجمات…" + +msgid "&Copy" +msgstr "ا&نسخ" + +msgid "Learn more" +msgstr "اطّلع على المزيد" + +msgid "Learn More" +msgstr "اطّلع على المزيد" + +#, c-format +msgid "Failed command: %s" +msgstr "فشل الأمر: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "فشل دمج كتالوجات غِت​تكست." + +msgid "Scanning files..." +msgstr "يفحص الملفّات..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "يحلّل ملفّات %s..." + +msgid "Failed to load extracted catalog." +msgstr "فشل تحميل الكتالوج المُستخرَج." + +msgid "&Help" +msgstr "م&ساعدة" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "لا يمكن تحرير ملفّات MO مباشرةً في محرِّر Po." + +msgid "Error opening file" +msgstr "خطأ في فتح الملفّ" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "فضلًا افتح وحرّر ملفّ PO المقابل بدل ذلك. عندما تحفظه، سيُحدَّث ملفّ MO كذلك." + +msgid "don't delete temporary files (for debugging)" +msgstr "لا تحذف الملفّات المؤقّتة (للتنقيح)" + +msgid "handle a poedit:// URI" +msgstr "تولّى أمر poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "فشل الاتّصال مع عمليّة «محرّر Po»." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "حدث خطأ لا يمكن التّعامل معه: %s" + +msgid "Unhandled exception occurred." +msgstr "حدث خطأ لا يمكن التّعامل معه." + +msgid "Open catalog" +msgstr "افتح كتالوج" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "الملفّ '%s' غير موجود." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "عنْ %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "الإصدارة %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "الخدمات" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "أخفِ %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "أخفِ البقية" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "أظهر الكل" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "أنهِ %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "محرِّر Po هو محرّر سهل لتحرير التّرجمات." + +msgid "Catalogs Manager" +msgstr "مدير الكتالوجات" + +msgid "Check for Updates..." +msgstr "التمس التّحديثات..." + +msgid "&Edit" +msgstr "&حرّر" + +msgid "Undo" +msgstr "تراجع" + +msgid "Redo" +msgstr "أعد" + +msgid "Paste and Match Style" +msgstr "ألصق النّمط وطابقه" + +msgid "Delete" +msgstr "احذف" + +msgid "Spelling and Grammar" +msgstr "الهجاء والقواعد" + +msgid "Show Spelling and Grammar" +msgstr "أظهر الهجاء والقواعد" + +msgid "Check Document Now" +msgstr "دقّق المستند الآن" + +msgid "Check Spelling While Typing" +msgstr "دقّق الهجاء أثناء الكتابة" + +msgid "Check Grammar With Spelling" +msgstr "دقّق القواعد مع الهجاء" + +msgid "Correct Spelling Automatically" +msgstr "صحّح الهجاء آليًّا" + +msgid "Substitutions" +msgstr "الاستبدالات" + +msgid "Show Substitutions" +msgstr "أظهر الاستبدالات" + +msgid "Smart Copy/Paste" +msgstr "نسخ/لصق ذكيّ" + +msgid "Smart Quotes" +msgstr "علامات اقتباس ذكيّة" + +msgid "Smart Dashes" +msgstr "شُرَط ذكيّة" + +msgid "Smart Links" +msgstr "وصلات ذكيّة" + +msgid "Text Replacement" +msgstr "استبدال النّصّ" + +msgid "Transformations" +msgstr "التّحويلات" + +msgid "Make Upper Case" +msgstr "اجعلها بحالة كبيرة" + +msgid "Make Lower Case" +msgstr "اجعلها بحالة صغيرة" + +msgid "Capitalize" +msgstr "كبّر الحروف" + +msgid "Speech" +msgstr "النّطق" + +msgid "Start Speaking" +msgstr "ابدأ النّطق" + +msgid "Stop Speaking" +msgstr "أوقف النّطق" + +msgid "&View" +msgstr "من&ظور" + +msgid "Enter Full Screen" +msgstr "ادخل ملء الشّاشة" + +msgid "Window" +msgstr "نافذة" + +msgid "Minimize" +msgstr "صغّر" + +msgid "Zoom" +msgstr "كبّر" + +msgid "Bring All to Front" +msgstr "اجلب الكلّ إلى الأمام" + +msgid "PO Translation" +msgstr "ترجمة PO" + +msgid "The file cannot be opened." +msgstr "تعذّر فتح الملفّ." + +msgid "Invalid file" +msgstr "الملفّ غير صالح" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "لربّما يكون الملفّ تالفًا أو بنسق لا يفهمه «محرّر Po»." + +msgid "&Undo" +msgstr "ترا&جع" + +msgid "&Redo" +msgstr "Ø£&عد" + +msgid "Cu&t" +msgstr "&قصّ" + +msgid "Cut" +msgstr "قصّ" + +msgid "Copy" +msgstr "انسخ" + +msgid "&Paste" +msgstr "Ø£&لصق" + +msgid "Paste" +msgstr "ألصق" + +msgid "&Delete" +msgstr "ا&حذف" + +msgid "Select &All" +msgstr "حدّد الك&لّ" + +msgid "Select All" +msgstr "حدّد الكلّ" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "أعلى" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "أسفل" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "لا يمكنك إفلات أكثر من ملفّ واحد في نافذة «محرّر Po»." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "الملفّ '%s' ليس كتالوج رسائل." + +msgid "Poedit" +msgstr "محرّر Po" + +msgid "&File" +msgstr "&ملفّ" + +msgid "&Go" +msgstr "ا&ذهب" + +msgid "Source text:" +msgstr "النّصّ المصدر:" + +msgid "Singular:" +msgstr "المفرد:" + +msgid "Plural:" +msgstr "الجمع:" + +msgid "Translation:" +msgstr "التّرجمة:" + +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 ما هي إلّا قوالب لا تحوي ترجمات.\n" +"لبدء بترجمة، أنشئ ملفّ PO مبنيّ على القالب." + +msgid "Create New Translation" +msgstr "أنشئ ترجمة جديدة" + +msgid "Create new translation" +msgstr "أنشئ ترجمة جديدة" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "تدقيق الهجاء معطّل لأنّ قاموس %s غير مثبّت." + +msgid "Install" +msgstr "ثبّت" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "عُدّل الكتالوج. أتريد حفظ التّعديلات؟" + +msgid "Save changes" +msgstr "احفظ التّعديلات" + +msgid "Your changes will be lost if you don't save them." +msgstr "ستفقد تعديلاتك إن لم تحفظها." + +msgid "Save" +msgstr "احفظ" + +msgid "Don't save" +msgstr "لا تحفظ" + +msgid "Don't Save" +msgstr "لا تحفظ" + +msgid "Save as..." +msgstr "احفظ ك‍..." + +msgid "Compile to..." +msgstr "صرّف إلى..." + +msgid "Compiled Translation Files" +msgstr "ملفّات ترجمة مصرّفة" + +msgid "Export as..." +msgstr "صدّر ك‍..." + +msgid "HTML Files" +msgstr "ملفّات HTML" + +msgid "Open catalog template" +msgstr "افتح قالب كتالوج" + +msgid "Updating catalog" +msgstr "يحدّث الكتالوج" + +msgid "Source code not available." +msgstr "الكود المصدريّ غير متوفّر." + +msgid "Updating failed" +msgstr "فشل التّحديث" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"تعذّر تحديث التّرجمات من الكود المصدريّ بسبب عدم العثور على كود المكان المحدّد " +"في تفضيلات الكتالوج." + +msgid "Entries in the catalog are probably incorrect." +msgstr "قد تكون المدخلات في الكتالوج غير صالحة." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "فشل تحديث الكتالوج. انقر 'التّفاصيل >>' للتّفاصيل." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "لم يُعثر على مشاكل مع التّرجمات." +msgstr[1] "عُثر على مشكلة واحدة مع التّرجمات." +msgstr[2] "عُثر على مشكلتين مع التّرجمات." +msgstr[3] "عُثر على %d مشاكل مع التّرجمات." +msgstr[4] "عُثر على %d مشكلة مع التّرجمات." +msgstr[5] "عُثر على %d مشكلة مع التّرجمات." + +msgid "Validation results" +msgstr "نتائج الفحص" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"المدخلات بأخطاء عُلّمت بالأحمر في القائمة. ستظهر تفاصيل الخطأ عندما تختار " +"مدخلة ما." + +msgid "The file was saved safely." +msgstr "حُفظ الملفّ حفظًا آمنًا." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "حُفظ الملفّ حفظًا آمنًا وصُرّف إلى نسق MO، لكنّه قد لا يعمل عملًا صحيحًا." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "حُفظ الملفّ حفظًا آمنًا، لكن فشل تصريفه إلى نسق MO واستخدامه." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "صُرّف الملفّ إلى نسق MO لكنّ ربما لن يعمل عملًا صحيحًا." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "تعذّر تصريف الملفّ إلى نسق MO فلا يمكن استخدامه." + +msgid "No problems with the translation found." +msgstr "لم يُعثر على مشاكل مع التّرجمة." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "التّرجمة جاهزة لاستخدامها، ولا توجد مدخلات بحاجة إلى ترجمة." +msgstr[1] "التّرجمة جاهزة لاستخدامها، لكن توجد مدخلة واحدة بحاجة إلى ترجمة." +msgstr[2] "التّرجمة جاهزة لاستخدامها، لكن توجد مدخلتين بحاجة إلى الترجمة." +msgstr[3] "التّرجمة جاهزة لاستخدامها، لكن توجد %d مدخلات بحاجة إلى ترجمة." +msgstr[4] "التّرجمة جاهزة لاستخدامها، لكن توجد %d مدخلة بحاجة إلى ترجمة." +msgstr[5] "التّرجمة جاهزة لاستخدامها، لكن توجد %d مدخلة بحاجة إلى ترجمة." + +msgid "The translation is ready for use." +msgstr "التّرجمة جاهزة لاستخدامها." + +msgid "Context:" +msgstr "السّياق:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "لقد أصلح «محرّر Po» محتوى غير صالح تلقائيا في الملف \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"يحوي الملفّ عناصر مكرّرة وذلك غير مسموح في ملفّات PO وسيمنع استخدام الملفّ. أصلح " +"«محرّر Po» المشكلة، ولكن عليك مراجعة ترجمات العناصر المعلّمة كغبشة وتصحيحها إن " +"لزم." + +msgid "Language of the translation isn't set." +msgstr "لغة التّرجمة لم تُعيَّن." + +msgid "Set Language" +msgstr "عيّن اللغة" + +msgid "Set language" +msgstr "عيّن اللغة" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"الاقتراحات لا تتوفّر إن لم تعيّن لغة التّرجمة تعيينًا صحيحًا. الميزات الأخرى " +"(كصيغ المعدود) قد تتأثّر أيضًا." + +msgid "Language of the translation is the same as source language." +msgstr "لغة التّرجمة نفسها لغة المصدر." + +msgid "Fix Language" +msgstr "أصلح اللغة" + +msgid "Fix language" +msgstr "أصلح اللغة" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "يحوي هذا الكتالوج مدخلات بصيغ معدود، لكنّه لا يحوي ترويسة مضبوطة." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"المدخلات في هذا الكتالوج لها صيغ معدود مختلفة عمّا تقوله ترويسة صيغ جموع " +"الكتالوج" + +msgid "Required header Plural-Forms is missing." +msgstr "ترويسة صيغ المعدود المطلوبة مفقودة." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "خطأ صياغيّ في ترويسة صيغ المعدود (\"%s\")." + +msgid "Fix the Header" +msgstr "أصلح التّرويسة" + +msgid "Fix the header" +msgstr "أصلح التّرويسة" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "تعبير صيغ المعدود الذي يستخدمه الكتالوج ليس هو الصّحيح للغة %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "راجع" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "خطأ في تحميل ملفّ كتالوج الرّسائل '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "المُترجَمة: %d من %d ‏(%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "المتبقّي: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "لا أخطاء" +msgstr[1] "خطأ واحد" +msgstr[2] "خطآن" +msgstr[3] "%d أخطاء" +msgstr[4] "%d خطأ" +msgstr[5] "%d خطأ" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "لا مدخلات" +msgstr[1] "مدخلة واحدة" +msgstr[2] "مدخلتان" +msgstr[3] "%d مدخلات" +msgstr[4] "%d مدخلة" +msgstr[5] "%d مدخلة" + +msgid " (unsaved)" +msgstr " (غير محفوظ)" + +msgid " (modified)" +msgstr "(معدّل)" + +msgid "Go" +msgstr "اذهب" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "فشل تحديث ذاكرة التّرجمة: %s" + +msgid "Purge deleted translations" +msgstr "نظّف التّرجمات المحذوفة" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "أتريد إزالة كلّ التّرجمات غير المستخدمة؟" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"إن تابعت مع التّنظيف، ستُزال كلّ التّرجمات المعلّمة بِ‍\"محذوفة\" نهائيًّا. ستستطيع " +"ترجمتها مجدّدًا إن أُضيفت في المستقبل." + +msgid "Keep" +msgstr "أبقها" + +msgid "Purge" +msgstr "نظّف" + +msgid "Fill missing translations from TM" +msgstr "املأ التّرجمات النّاقصة من TM" + +msgid "Only fill in exact matches" +msgstr "املأ فقط المطابقات التّامّة" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"افتراضيًّا، تُملأ النّتائج غير الدّقيقة أيضًا وتُعلّم بِ‍\"مبهمة\". أشّر على هذا الخيار " +"لتضمين المطابقات الدّقيقة فقط." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "لا تعلّم المطابقات التّامّة بِ‍\"مبهمة\"" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"فعّله فقط إن كنت تثق بجودة TM. افتراضيًّا، كلّ المطابقات من TM تُعلّم بِ‍\"مبهمة\" " +"ويجب مراجعتها." + +msgid "Fill" +msgstr "املأ" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "لم تُملأ أيّ مفردات من ذاكرة التّرجمة." +msgstr[1] "مُلئت مفردة واحدة من ذاكرة التّرجمة." +msgstr[2] "مُلئت مفردتين من ذاكرة التّرجمة." +msgstr[3] "مُلئت %d مفردات من ذاكرة التّرجمة." +msgstr[4] "مُلئت %d مفردة من ذاكرة التّرجمة." +msgstr[5] "مُلئت %d مفردة من ذاكرة التّرجمة." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"عُلّمت التّرجمات ب‍\"مبهمة\"، لأنّها قد تكون غير دقيقة. عليك مراجعتها لتصحيحها." + +msgid "No entries could be filled from the translation memory." +msgstr "لم تُملأ أيّ مفردات من ذاكرة التّرجمة." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"لا تحوي TM أيّة سلاسة مشابهة لمحتوى الملفّ. هي فعّالة فقط للتّرجمات شبه الآليّة " +"بعد أن يتعلّم «محرّر Po» كفايةً من الملفّات التي تترجمها يدويًّا." + +msgid "Translating" +msgstr "يترجم" + +msgid "Filling missing translations from TM..." +msgstr "يملأ التّرجمات النّاقصة من TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "لا شيء مترجم" +msgstr[1] "تُرجمت سلسلة واحدة" +msgstr[2] "تُرجمت سلستين" +msgstr[3] "تُرجمت %u سلاسل" +msgstr[4] "تُرجمت %u سلسلة" +msgstr[5] "تُرجمت %u سلسلة" + +msgid "Copy from source text" +msgstr "انسخ من النّصّ المصدر" + +msgid "Copy from Source Text" +msgstr "انسخ من النّصّ المصدر" + +msgid "Clear translation" +msgstr "امحُ التّرجمة" + +msgid "Clear Translation" +msgstr "امحُ التّرجمة" + +msgid "Edit comment" +msgstr "حرّر التّعليق" + +msgid "Edit Comment" +msgstr "حرّر التّعليق" + +msgid "References:" +msgstr "المراجع:" + +msgid "Everything" +msgstr "كلّ شيء" + +#, c-format +msgid "Form %i" +msgstr "الشّكل %i" + +msgid "Singular" +msgstr "المفرد" + +msgid "Zero" +msgstr "صفر" + +msgid "One" +msgstr "واحد" + +msgid "Two" +msgstr "إثنان" + +msgid "Plural" +msgstr "الجمع" + +msgid "Other" +msgstr "أخرى" + +msgid "&Bookmarks" +msgstr "ال&علامات" + +#, c-format +msgid "Set bookmark %i" +msgstr "عيّن العلامة %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "اذهب إلى العلامة %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "عيّن العلامة %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "اذهب إلى العلامة %i" + +msgid "Hide Sidebar" +msgstr "أخفِ الشّريط الجانبيّ" + +msgid "Show Sidebar" +msgstr "أظهر الشّريط الجانبيّ" + +msgid "Hide Status Bar" +msgstr "أخفِ شريط الحالة" + +msgid "Show Status Bar" +msgstr "أظهر شريط الحالة" + +msgid "Source text" +msgstr "النصّ المصدر" + +msgid "Translation" +msgstr "التّرجمة" + +msgid "ID" +msgstr "المعرّف" + +#, c-format +msgid "Source text — %s" +msgstr "النّصّ المصدر— %s" + +msgid "unknown language" +msgstr "لغة مجهولة" + +#, c-format +msgid "Translation — %s" +msgstr "التّرجمة — %s" + +msgid "Error:" +msgstr "خطأ:" + +msgid "Source file" +msgstr "الملفّ المصدر" + +msgid "Source file occurrence:" +msgstr "حدوثات الملفّ المصدر:" + +msgid "Open in Editor" +msgstr "افتح في المحرّر" + +msgid "Open in editor" +msgstr "افتح في المحرّر" + +msgid "No references for the selected item." +msgstr "لا مراجع للعنصر المحدّد." + +#, c-format +msgid "Error opening file %s!" +msgstr "خطأ في فتح الملفّ %s!" + +msgid "Find" +msgstr "اعثر" + +msgid "Replace" +msgstr "استبدل" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "خيارات" + +msgid "Ignore case" +msgstr "تجاهل حالة الحروف" + +msgid "Wrap around" +msgstr "التف حول النص" + +msgid "Whole words only" +msgstr "كامل الكلمات فقط" + +msgid "Find in source texts" +msgstr "اعثر في نصوص المصدر" + +msgid "Find in translations" +msgstr "اعثر في التّرجمات" + +msgid "Find in comments" +msgstr "اعثر في التّعليقات" + +msgid "Close" +msgstr "أغلق" + +msgid "Replace All" +msgstr "استبدل الكلّ" + +msgid "Replace all" +msgstr "استبدل الكلّ" + +msgid "< &Previous" +msgstr "< ال&سّابقة" + +msgid "&Next >" +msgstr "ال&تّالية >" + +msgid "String to find" +msgstr "السّلسلة للعثور عليها" + +msgid "Replacement string" +msgstr "سلسلة الاستبدال" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "تعذّر تنفيذ البرنامج: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "رمز اللغة أو اسمها (مثلًا en_GB)" + +msgid "Translation Language" +msgstr "لغة التّرجمة" + +msgid "Language of the translation:" +msgstr "لغة التّرجمة:" + +msgid "Poedit - Catalogs manager" +msgstr "محرّر Po - مدير الكتالوجات" + +msgid "Catalog" +msgstr "الكتالوج" + +msgid "Total" +msgstr "المجموع" + +msgid "Untrans" +msgstr "غير المترجمة" + +msgid "Fuzzy" +msgstr "مبهمة" + +msgid "Bad Tokens" +msgstr "العلامات السّيّئة" + +msgid "Last modified" +msgstr "آخر تعديل" + +msgid "Select directory" +msgstr "اختر دليلًا" + +msgid "Directories:" +msgstr "الأدلّة:" + +msgid "" +msgstr "<غير معنون>" + +msgid "Do you want to delete the project?" +msgstr "أتريد حذف المشروع؟" + +msgid "Confirmation" +msgstr "أكّد" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"أمتأكّد من عمل تحديث شامل\n" +"لكلّ الكتالوجات في هذا المشروع؟" + +msgid "Information about the translator" +msgstr "معلومات حول المترجم" + +msgid "Name:" +msgstr "الاسم:" + +msgid "Your Name" +msgstr "اسمك" + +msgid "Email:" +msgstr "البريد الإلكترونيّ:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"يُستخدم اسمك وبريدك الإلكترونيّ فقط لتعيين ترويسة \"آخر مترجم\" لملفّات غنو غِت​" +"تكست." + +msgid "Editing" +msgstr "التّحرير" + +msgid "Automatically compile MO file when saving" +msgstr "صرّف آليًّا ملف ‎.mo عند الحفظ" + +msgid "Show summary after catalog update" +msgstr "أظهر ملخّصًا بعد تحديث الكتالوج" + +msgid "Check spelling" +msgstr "دقّق الهجاء" + +msgid "Always change focus to text input field" +msgstr "غيّر دائمًا التّركيز إلى حقل إدخال النصّ" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"لا تدع قائمة السلاسل تأخذ التّركيز أبدًا. إن فُعّل، عليك استخدام مفتاح Ctrl مع " +"الأسهم للتّنقّل عبر لوحة المفاتيح. يمكنك هكذا طباعة النصّ مباشرةً دون الحاجة إلى " +"ضغط مفتاح Tab لتغيير التّركيز." + +msgid "Appearance" +msgstr "المظهر" + +msgid "Use custom list font:" +msgstr "استخدم خطّ قوائم مخصّص:" + +msgid "Use custom text fields font:" +msgstr "استخدم خطّ حقول النّصوص مخصّص:" + +msgid "Change UI language" +msgstr "غيّر لغة الواجهة" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(يتطلّب وندوز 8 وأحدث)" + +msgid "General" +msgstr "عامّ" + +msgid "Use translation memory" +msgstr "استخدم ذاكرة التّرجمة" + +msgid "Learn From Files..." +msgstr "تعلّم من الملفّات..." + +msgid "Learn from files..." +msgstr "تعلّم من الملفات..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "صفّر" + +msgid "Consult TM when updating from sources" +msgstr "استشر TM عند التّحديث من المصادر" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"إن فُعّل، سيحاول محرِّر Po ملأ المدخلات الجديدة باستخدام ترجماتك السّابقة المُخزّنة " +"في ذاكرة التّرجمة. إن كانت ذاكرة التّرجمة (TM) شبه فارغة، فلن تكون فعّالة جدًّا. " +"كلّما حرّرت ترجمات أكثر، يزداد نموّ TM، وتصبح أفضل مما كانت." + +msgid "Stored translations:" +msgstr "التّرجمات المخزّنة:" + +msgid "Database size on disk:" +msgstr "حجم قاعدة البيانات في القرص:" + +msgid "Select translation files to import" +msgstr "اختر ملفات التّرجمة لاستيرادها" + +msgid "Translation Memory" +msgstr "ذاكرة التّرجمة" + +msgid "Importing translations..." +msgstr "يستورد التّرجمات..." + +msgid "Finalizing..." +msgstr "ينهي..." + +msgid "Reset translation memory" +msgstr "صفّر ذاكرة الترجمة" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "أمتأكّد من تصفير ذاكرة التّرجمة؟" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"تصفير ذاكرة الترجمة سيحذف كلّ التّرجمات المخزّنة منها إلى الأبد. لا عودة عن هذه " +"العمليّة." + +msgid "Cancel" +msgstr "ألغِ" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"تُستخدم مستخرجات الكود المصدريّ للعثور على السلاسل القابلة للتّرجمة في ملفّات " +"الكود المصدريّ واستخراجها ليمكن ترجمتها." + +msgid "New" +msgstr "جديد" + +msgid "Edit" +msgstr "حرّر" + +msgid "Delete extractor" +msgstr "احذف المستخرج" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "أمتأكّد من حذف مستخرج \"%s\"؟" + +msgid "Extractors" +msgstr "المستخرجات" + +msgid "Accounts" +msgstr "الحسابات" + +msgid "Automatically check for updates" +msgstr "التمس آليًّا عن التّحديثات" + +msgid "Include beta versions" +msgstr "ضمّن إصدارات بيتا" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"إصدارات بيتا تحوي المزايا الجديدة الأخيرة مع التّحسينات، لكن قد تكون أقلّ " +"استقرارًا." + +msgid "Updates" +msgstr "التّحديثات" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"تؤثّر هذه الإعدادات على تنسيق ملفّات PO الدّاخليّ. عدّلها إن أردت متطلّبات محدّدة " +"كالتّحكّم بالإصدارات." + +msgid "Line endings:" +msgstr "نهايات الأسطر:" + +msgid "Unix (recommended)" +msgstr "يُنِكس (مستحسن)" + +msgid "Windows" +msgstr "وندوز" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "لفّ عند:" + +msgid "Preserve formatting of existing files" +msgstr "حافظ على تنسيق الملفّات الموجودة" + +msgid "Advanced" +msgstr "متقدّم" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "تفضيلات %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"اسحب وأسقط المجلّدات هنا \n" +"\n" +" أو استخدم زر +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"اسحب وأسقط المجلّدات هنا \n" +"\n" +" أو استخدم زر +" + +msgid "Add Folders..." +msgstr "أضف مجلّدات...." + +msgid "Add folders..." +msgstr "أضف مجلّدات...." + +msgid "Add Files..." +msgstr "أضف ملفّات..." + +msgid "Add files..." +msgstr "أضف ملفّات..." + +msgid "Add Wildcard..." +msgstr "أضف حرف بدل..." + +msgid "Add wildcard..." +msgstr "أضف حرف بدل..." + +msgid "Paths" +msgstr "المسارات" + +msgid "Excluded paths" +msgstr "المسارات المستثناة" + +msgid "Additional keywords" +msgstr "الكلمات المفتاحيّة الإضافيّة" + +msgid "Name of the project the translation is for" +msgstr "اسم المشروع الذي تكون التّرجمات له" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "مثلًا nplurals=2; plural=(n > 1);‎" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (مستحسن)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "فضلًا احفظ الملفّ أوّلًا. لا يمكن تحرير هذا القسم حتّى ذلك الحين." + +msgid "Comment:" +msgstr "التّعليق:" + +msgid "OK" +msgstr "حسنًا" + +msgid "C&lear" +msgstr "ام&حُ" + +msgid "Clear the comment" +msgstr "امحُ التّعليق" + +msgid "Create new translations project" +msgstr "أنشئ مشروع ترجمات جديد" + +msgid "Edit the project" +msgstr "حرّر المشروع" + +msgid "Delete the project" +msgstr "احذف المشروع" + +msgid "Update all" +msgstr "حدّث الكلّ" + +msgid "Update all catalogs in the project" +msgstr "حدّث كلّ الكتالوجات في المشروع" + +msgid "Edit project" +msgstr "حرّر المشروع" + +msgid "Project name:" +msgstr "اسم المشروع:" + +msgid "Browse" +msgstr "تصفّح" + +msgid "Add directory to the list" +msgstr "أضف الدّليل إلى القائمة" + +msgid "&New..." +msgstr "&جديد..." + +msgid "New from &POT/PO file..." +msgstr "جديد من &ملف POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "جديد من &ملف POT/PO..." + +msgid "&Open..." +msgstr "ا&فتح..." + +msgid "Open Recent" +msgstr "افتح الأخيرة" + +msgid "Open from Crowdin..." +msgstr "افتح من كراودِن..." + +msgid "Open From Crowdin..." +msgstr "افتح من كراودِن..." + +msgid "&Close" +msgstr "Ø£&غلق" + +msgid "&Save" +msgstr "ا&حفظ" + +msgid "Save &as..." +msgstr "احفظ &ك‍..." + +msgid "Save &As..." +msgstr "احفظ &ك‍..." + +msgid "Compile to MO..." +msgstr "صرّف إلى MO..." + +msgid "E&xport as HTML..." +msgstr "&صدّر كَ‍ ‍HTML..." + +msgid "Check for updates..." +msgstr "التمس التّحديثات..." + +msgid "&Preferences..." +msgstr "ت&فضيلات..." + +msgid "Catalogs &manager" +msgstr "م&دير الكتالوجات" + +msgid "Catalogs &Manager" +msgstr "م&دير الكتالوجات" + +msgid "E&xit" +msgstr "Ø£&نهِ" + +msgid "Quit" +msgstr "أنهِ" + +msgid "Copy from singular" +msgstr "انسخ من الصيغة المفردة" + +msgid "Copy From Singular" +msgstr "انسخ من الصيغة المفردة" + +msgid "Translation is &fuzzy" +msgstr "الترجمة مب&همة" + +msgid "Translation Is &Fuzzy" +msgstr "الترجمة مب&همة" + +msgid "Edit &comment" +msgstr "حرّر التّ&عليق" + +msgid "Edit &Comment" +msgstr "حرّر التّ&عليق" + +msgid "Suggestions" +msgstr "الاقتراحات" + +msgid "&Show references" +msgstr "Ø£&ظهر المراجع" + +msgid "&Show References" +msgstr "Ø£&ظهر المراجع" + +msgid "&Find..." +msgstr "ا&عثر..." + +msgid "Replace..." +msgstr "استبدل..." + +msgid "Find next" +msgstr "اعثر على التّالي" + +msgid "Find previous" +msgstr "اعثر على السّابق" + +msgid "Find and Replace..." +msgstr "اعثر واستبدل..." + +msgid "Find Next" +msgstr "اعثر على التّالي" + +msgid "Find Previous" +msgstr "اعثر على السّابق" + +msgid "&Preferences" +msgstr "ت&فضيلات" + +msgid "Display entry &IDs" +msgstr "اعرض م&عرّفات المدخلات" + +msgid "Display Entry &IDs" +msgstr "اعرض م&عرّفات المدخلات" + +msgid "Sort by &file order" +msgstr "افرز بترتيب ال&ملفّ" + +msgid "Sort by &File Order" +msgstr "افرز بترتيب ال&ملفّ" + +msgid "Sort by &source" +msgstr "افرز بالم&صدر" + +msgid "Sort by &Source" +msgstr "افرز بالم&صدر" + +msgid "Sort by &translation" +msgstr "افرز بال&تّرجمة" + +msgid "Sort by &Translation" +msgstr "افرز بال&تّرجمة" + +msgid "&Group by context" +msgstr "&جمّع بالسّياق" + +msgid "&Group By Context" +msgstr "&جمّع بالسّياق" + +msgid "Entries with errors first" +msgstr "المدخلات مع أخطاء أولا" + +msgid "Entries with Errors First" +msgstr "المدخلات مع أخطاء أولا" + +msgid "&Untranslated entries first" +msgstr "المدخلات &غير المترجمة أوّلًا" + +msgid "&Untranslated Entries First" +msgstr "المدخلات &غير المترجمة أوّلًا" + +msgid "Show sidebar" +msgstr "أظهر الشّريط الجانبيّ" + +msgid "Show status bar" +msgstr "أظهر شريط الحالة" + +msgid "C&atalog" +msgstr "&كتالوج" + +msgid "&Update from sources" +msgstr "&حدّث من المصادر" + +msgid "&Update from Sources" +msgstr "&حدّث من المصادر" + +msgid "Update from &POT file..." +msgstr "حدّث من &ملفّ POT..." + +msgid "Update from &POT File..." +msgstr "حدّث من &ملفّ POT..." + +msgid "Sync with Crowdin" +msgstr "زامن مع كراودِن" + +msgid "Fill missing translations from &TM..." +msgstr "املأ التّ&رجمات النّاقصة من TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "املأ التّ&رجمات النّاقصة من TM..." + +msgid "&Purge deleted translations" +msgstr "ن&ظّف التّرجمات المحذوفة" + +msgid "&Purge Deleted Translations" +msgstr "ن&ظّف التّرجمات المحذوفة" + +msgid "&Validate translations" +msgstr "ت&حقّق من سلامة التّرجمات" + +msgid "&Validate Translations" +msgstr "ت&حقّق من سلامة التّرجمات" + +msgid "&Properties..." +msgstr "Ø®&صائص..." + +msgid "&Done and next" +msgstr "&تمّت وإلى التّالية" + +msgid "&Done and Next" +msgstr "&تمّت وإلى التّالية" + +msgid "&Previous translation" +msgstr "التّرجمة ال&سّابقة" + +msgid "&Previous Translation" +msgstr "التّرجمة ال&سّابقة" + +msgid "&Next translation" +msgstr "التّرجمة ال&تّالية" + +msgid "&Next Translation" +msgstr "التّرجمة ال&تّالية" + +msgid "P&revious unfinished" +msgstr "غير المنتهية ال&سّابقة" + +msgid "P&revious Unfinished" +msgstr "غير المنتهية ال&سّابقة" + +msgid "Ne&xt unfinished" +msgstr "غير المنتهية ال&تّالية" + +msgid "Ne&xt Unfinished" +msgstr "غير المنتهية ال&تّالية" + +msgid "Previous plural form" +msgstr "صيغة المعدود السّابقة" + +msgid "Previous Plural Form" +msgstr "صيغة المعدود السّابقة" + +msgid "Next plural form" +msgstr "صيغة المعدود التّالية" + +msgid "Next Plural Form" +msgstr "صيغة المعدود التّالية" + +msgid "&Online help" +msgstr "مساعدة &شبكيّة" + +msgid "&Online Help" +msgstr "مساعدة &شبكيّة" + +msgid "&GNU gettext manual" +msgstr "كتيّب &غنو غِت​تكست" + +msgid "&GNU gettext Manual" +msgstr "كتيّب &غنو غِت​تكست" + +msgid "&About Poedit" +msgstr "&عنْ محرّر Po" + +msgid "&About" +msgstr "&عنْ" + +msgid "Extractor setup" +msgstr "إعداد المستخرج" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "قائمة الامتدادات مفصولة بفواصل منقوطة (مثلًا ‎*.cpp;*.h):" + +msgid "Invocation:" +msgstr "الاستدعاء:" + +msgid "Command to extract translations:" +msgstr "أمر استخراج التّرجمات:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"يُستخدم هذا الأمر لإطلاق المستخرج.\n" +"يُوسّع ‎%o إلى اسم ملفّ الخرج، و‎%K إلى\n" +"قائمة الكلمات المفتاحيّة، و‎%F إلى قائمة ملفّات الدّخل،\n" +"و‎%C إلى راية طقم المحارف (طالع أدناه)." + +msgid "An item in keywords list:" +msgstr "عنصر في قائمة الكلمات المفتاحيّة:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"سيُرفق هذا بسطر الأمر مرّة لكلّ ملفّ دخل.\n" +"يُوسّع ‎%K إلى الكلمة المفتاحيّة." + +msgid "An item in input files list:" +msgstr "عنصر في قائمة ملفّات الدّخل:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"سيُرفق هذا بسطر الأمر مرّة لكلّ ملفّ دخل.\n" +"يُوسّع ‎%f إلى اسم الملفّ." + +msgid "Source code charset:" +msgstr "طقم محارف الكود المصدريّ:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"سيُرفق هذا بسطر الأمر فقط إن أُعطي طقم المحارف.\n" +"يُوسّع ‎%c إلى قيمة طقم المحارف." + +msgid "Catalog properties" +msgstr "خصائص الكتالوج" + +msgid "Project name and version:" +msgstr "اسم المشروع وإصداره:" + +msgid "Plural Forms:" +msgstr "صيغ المعدود:" + +msgid "Use default rules for this language" +msgstr "استخدم قواعد اللغة الافتراضيّة" + +msgid "Use custom expression" +msgstr "استخدم تعبيرًا مخصّصًا" + +msgid "Learn about plural forms" +msgstr "تعلّم حول صيغ المعدود" + +msgid "Charset:" +msgstr "طقم المحارف:" + +msgid "Team:" +msgstr "الفريق:" + +msgid "Team's email address:" +msgstr "بريد الفريق الإلكترونيّ:" + +msgid "Translation properties" +msgstr "خصائص التّرجمة" + +msgid "Sources paths" +msgstr "مسارات المصادر" + +msgid "Extract text from source files in the following directories:" +msgstr "استخرج النّصوص من الملفّات المصدريّة في الأدلّة التّالية:" + +msgid "Base path:" +msgstr "المسار الأساس:" + +msgid "Sources keywords" +msgstr "كلمات المصادر المفتاحيّة" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"استخدم الكلمات المفتاحيّة هذه (أسماء الدّوال) للتعرّف على\n" +"السلاسل القابلة للتّرجمة في الملفات المصدريّة:" + +msgid "Learn about gettext keywords" +msgstr "تعلّم حول كلمات غِت​تكست المفتاحيّة" + +msgid "Update summary" +msgstr "ملخص التّحديث" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"عُثر على هذه السلاسل في المصادر لكنّها غير موجودة في الكتالوج.\n" +"سيُضيفها «محرّر Po» الآن إلى الكتالوج." + +msgid "New strings" +msgstr "السلاسل الجديدة" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"السّلاسل لم تعد موجودة في المصادر.\n" +"سيحذفها «محرّر Po» من الكتالوج الآن." + +msgid "Obsolete strings" +msgstr "السّلاسل البائدة" + +msgid "(0 new, 0 obsolete)" +msgstr "(لا جديدة، لا بائدة)" + +msgid "Open" +msgstr "افتح" + +msgid "Save catalog" +msgstr "احفظ الكتالوج" + +msgid "Validate" +msgstr "تحقّق من السّلامة" + +msgid "Check for errors in the translation" +msgstr "تحقّق الأخطاء في التّرجمة" + +msgid "Update" +msgstr "حدّث" + +msgid "Update catalog - synchronize it with sources" +msgstr "تحديث الكتالوج - زامِنه مع المصادر" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "يُبدَّل إن كانت للسلسلة المحدّدة ترجمة مُبهمة" + +msgid "Show or hide the sidebar" +msgstr "أظهر الشّريط الجانبيّ أو أخفه" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "نصّ المصدر السابق:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"نصّ المصدر القديم (قبل أن يتغيّر أثناء التحديث) الذي تقابله الترجمة المبهمة." + +msgid "Notes for translators:" +msgstr "ملاحظات للمترجمين:" + +msgid "Add comment" +msgstr "أضف تعليقًا" + +msgid "Add Comment" +msgstr "أضف تعليقًا" + +msgid "Translation suggestions:" +msgstr "اقتراحات التّرجمة:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "لا مطابقات" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "لا مطابقات" + +msgid "This string was found in Poedit’s translation memory." +msgstr "عُثر على السّلسلة في ذاكرة ترجمة «محرّر Po»." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(الجديدة: %i، البائدة: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "يستورد التّرجمات: %d" + +msgid "Poedit Update" +msgstr "حدّث محرّر Po" + +msgid "Preparing migration..." +msgstr "يحضّر التّرحيل..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "حالة إغلاق التّرحيل: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "يحتاج «محرّر Po» إلى تحويل ذاكرة التّرجمة إلى نسق جديد." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"يجب فعل هذا قبل بدء «محرّر Po». قد يأخذ ذلك بضع دقائق إن كان لديك الكثير من " +"التّرجمات المخزّنة، لكن يفترض أن يكون ذلك أسرع بكثير." + +msgid "Proceed" +msgstr "تقدّم" + +msgid "Translation memory migration failed." +msgstr "فشل ترحيل ذاكرة التّرجمة." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"تعذّر ترحيل بيانات ذاكرة التّرجمة. الخطأ كان:\n" +"\n" +"%s\n" +"فضلًا راسل help@poedit.net وسنُصلح الأمر." + +msgid "Cannot create temporary directory." +msgstr "تعذّر إنشاء الدّليل المؤقّت." + +msgid "Welcome to Poedit" +msgstr "مرحبًا في «محرّر Po»" + +msgid "Edit a translation" +msgstr "حرّر ترجمة" + +msgid "Open an existing PO file and edit the translation." +msgstr "افتح ملفّ PO موجود وحرّر التّرجمة." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "خُذ ملفّ PO أو قالب POT موجودين وأنشئ ترجمة منهما." + +msgid "Collaborate on a translation with Crowdin" +msgstr "تعاون على التّرجمة عبر كراودِن" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "نزّل ملفًّا من مشروع كراودِن، ترجمه وزامن تعديلاتك." + +msgid "What is Crowdin?" +msgstr "ما كراودِن؟" + +msgid "There are no translations. That’s unusual." +msgstr "ليست هناك ترجمات. هذا غير طبيعي." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"المدخلات المترجمة لا تُضاف يدويًّا إلى نظام غِت‌تكست، ولكنّها تُستخرج آليًّا من الكود " +"المصدريّ. هكذا تبقى محدّثة ودقيقة. يستخدم المترجمون ملفّات PO القالبيّة (POT) " +"التي جهّزها المطوّر." + +msgid "(Learn more about GNU gettext)" +msgstr "(اطّلع على المزيد عن غنو غِت‌تكست)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "الطريقة الأسهل لملء هذا الكتالوج هي بتحديثه من POT:" + +msgid "Update from POT" +msgstr "حدّث من POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "خُذ السّلاسل التّرجميّة من قالب POT موجود." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "يمكنك أيضًا استخراج السّلاسل التّرجميّة مباشرةً من الكود المصدريّ:" + +msgid "Extract from sources" +msgstr "استخرج من المصادر" + +msgid "Configure source code extraction in Properties." +msgstr "اضبط استخراج الكود المصدريّ في الخصائص." + +msgid "Sync" +msgstr "زامن" + +msgid "Synchronize the translation with Crowdin" +msgstr "زامن التّرجمة مع كراودِن" diff --git a/locales/az.mo b/locales/az.mo new file mode 100644 index 0000000000000000000000000000000000000000..5cf8a248e008c362e1171bd964d42e4ecff15099 GIT binary patch literal 47738 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

#3#`Xgp#{vGOJhFFm4j2g@9Xv0b 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 literal 0 HcmV?d00001 diff --git a/locales/az.po b/locales/az.po new file mode 100644 index 0000000..76eaadf --- /dev/null +++ b/locales/az.po @@ -0,0 +1,1961 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:03-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Azerbaijani\n" +"Language: az_AZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: az\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Bu xəbərdarlıq mesajını gizlədin" + +msgid "Don't Show Again" +msgstr "Bir Daha Göstərmə" + +msgid "Don't show again" +msgstr "Bir daha göstərilməsin" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i sətir '%s' faylından doğru olaraq yüklənmədi." +msgstr[1] "%i sətir '%s' faylından doğru olaraq yüklənmədi." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d sətri, '%s' faylında pozulmuşdur (%s məlumatı keçərli deyil)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Yararsız başlıq: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Yararsız kataloq faylı: cəm forması msgstr, msgid_plural ilə birlikdə " +"istifadə edilmişdir" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Yararsız kataloq faylı: cəm forma msgstr, msgid_plural olmadan istifadə " +"edilmişdir" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Kataloq yüklənərkən bəzi problemlər oldu. Bəzi məlumatlar itmiş və ya " +"yararsız ola bilər." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "%s faylı yüklənmədi, ola bilsin ki yararsızdır." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' faylı bütöv-oxunan olduğu üçün qeyd edilə bilməz.\n" +"Başqa bir adla qeyd edin." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s faylı qeyd edilmədi." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Fayl gözəl şəkildə formatlanmadı, ancaq problemsiz qeyd edildi." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Kataloq, kataloq parametrlərində təyin edilən '%s' xarakter əmrində qeyd " +"edilə bilmədi.\n" +"\n" +"Buna görə də UTF-8 olaraq qeyd edildi və parametrlər buna görə dəyişdirildi." + +msgid "Error saving catalog" +msgstr "kataloq qeyd edilərkən xəta oldu" + +msgid "PO Translation Files" +msgstr "PO Tərcümə Faylları" + +msgid "POT Translation Templates" +msgstr "POT Tərcümə Şablonları" + +msgid "All Translation Files" +msgstr "Bütün Tərcümə Faylları" + +msgid "Merging differences..." +msgstr "Fərqliliklər birləşdirilir..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' düzgün POT faylı deyil." + +msgid "(Use default language)" +msgstr "(Mövcud dildən istifadə et)" + +msgid "Select your preferred language" +msgstr "İstifadə etmək istədiyiniz dili seçin" + +msgid "Language selection" +msgstr "Dil seçimi" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Dəyişikliklər Poedit yenidən başladıldıqdan sonra aktiv olacaq." + +msgid "Downloading translations is disabled in this project." +msgstr "Bu layihədə tərcümələri endirmək deaktivasiya edildi." + +msgid "Not authorized, please sign in again." +msgstr "İzniniz yoxdur, lütfən təkrar daxil olun." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin bir onlayn lokalizasiya idarəetmə platforması və iş birliyinə " +"əsaslanan tərcümə alətidir. Poedit problemsiz olaraq Crowdin-də idarə edilən " +"PO fayllarını sinxronlaşdıra bilər." + +msgid "Sign In" +msgstr "Giriş" + +msgid "Sign in" +msgstr "Giriş" + +msgid "Sign Out" +msgstr "Çıxış" + +msgid "Sign out" +msgstr "Çıxış" + +msgid "Waiting for authentication…" +msgstr "Təsdiqləmə üçün gözləyir..." + +msgid "Updating user information…" +msgstr "İstifadəçi məlumatları yenilənir..." + +msgid "Signed in as:" +msgstr "Giriş edən:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin Haqqında Məlumat Əldə Edin" + +msgid "Learn more about Crowdin" +msgstr "Crowdin haqqında məlumat əldə edin" + +msgid "Sign in to Crowdin" +msgstr "Crowdin-ə giriş edin" + +msgid "Open Crowdin translation" +msgstr "Crowdin tərcüməsini aç" + +msgid "Project:" +msgstr "Layihə:" + +msgid "Language:" +msgstr "Dil:" + +msgid "File:" +msgstr "Fayl:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Crowdin hesabınızda siyahılanan heç bir tərcümə layihəsi yoxdur." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Bu layihə, Poedit içində tərcümə edilə bilinən heç bir fayla sahib deyil." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Bu fayl sadəcə Crowdin-in veb interfeysində redaktə edilə bilər." + +msgid "Downloading latest translations…" +msgstr "Ən son tərcümələr endirilir…" + +msgid "Syncing with Crowdin" +msgstr "Crowdin ilə sinxronlaşdır" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin ilə sinxronlaşdırma baş tutmadı." + +msgid "Crowdin error" +msgstr "Crowdin xətası" + +msgid "Uploading translations…" +msgstr "Tərcümələr göndərilir…" + +msgid "&Copy" +msgstr "&Köçür" + +msgid "Learn more" +msgstr "Daha çox məlumat" + +msgid "Learn More" +msgstr "Daha çox məlumat" + +#, c-format +msgid "Failed command: %s" +msgstr "Əmr xətası: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext kataloqlarını birləşdirərkən bir xəta baş verdi." + +msgid "Scanning files..." +msgstr "Fayllar yoxlanılır..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s faylları ayrışdırılır..." + +msgid "Failed to load extracted catalog." +msgstr "Çıxardıldığı kataloq yüklənmədi." + +msgid "&Help" +msgstr "&Yardım" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO faylları birbaşa Poedit içində redaktə edilə bilməz." + +msgid "Error opening file" +msgstr "Fayl açılması sırasında xəta" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Lütfən bunun yerinə əlaqədar PO faylını açın və redaktə edin. Qeyd etdiyiniz " +"zaman, MO faylı da yenilənəcəkdir." + +msgid "don't delete temporary files (for debugging)" +msgstr "müvəqqəti faylları silməyin (nasazlıqların təmiri üçün)" + +msgid "handle a poedit:// URI" +msgstr "bir poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit əməliyyatı ilə əlaqə qurmaq baş tutmadı." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Gözlənilməz bir xəta baş verdi: %s" + +msgid "Unhandled exception occurred." +msgstr "Gözlənilməz bir xəta baş verdi." + +msgid "Open catalog" +msgstr "Kataloqu aç" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' faylı yoxdur." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s Haqqında" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versiya %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Xidmətlər" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s Gizlət" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Digərlərini Gizlət" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Hamısını Göstər" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s Çıx" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit asan istifadə edilə bilən bir tərcümə redaktorudur." + +msgid "Catalogs Manager" +msgstr "Kataloq Meneceri" + +msgid "Check for Updates..." +msgstr "Yenilənmə üçün yoxla..." + +msgid "&Edit" +msgstr "&Redaktə et" + +msgid "Undo" +msgstr "Geri qaytar" + +msgid "Redo" +msgstr "Yeniləyin" + +msgid "Paste and Match Style" +msgstr "Yapışdır və Stilləri Tutuşdur" + +msgid "Delete" +msgstr "Sil" + +msgid "Spelling and Grammar" +msgstr "Yazma və Qrammatika" + +msgid "Show Spelling and Grammar" +msgstr "Yazma və Qrammatikanı Göstər" + +msgid "Check Document Now" +msgstr "Sənədi Yenidən Yoxla" + +msgid "Check Spelling While Typing" +msgstr "Tərcümə vaxtı orfoqrafiyanı yoxla" + +msgid "Check Grammar With Spelling" +msgstr "Qrammatikanı və Yazma Qaydasını Yoxla" + +msgid "Correct Spelling Automatically" +msgstr "Yazı Avtomatik Korreksiya Edilsin" + +msgid "Substitutions" +msgstr "Dəyişikliklər" + +msgid "Show Substitutions" +msgstr "Dəyişikliklər Göstərilsin" + +msgid "Smart Copy/Paste" +msgstr "Ağıllı Köçürmə/Yapışdırma" + +msgid "Smart Quotes" +msgstr "Ağıllı Sitatlar" + +msgid "Smart Dashes" +msgstr "Ağıllı Tirelər" + +msgid "Smart Links" +msgstr "Ağıllı Bağlantılar" + +msgid "Text Replacement" +msgstr "Mətn Dəyişikliyi" + +msgid "Transformations" +msgstr "Transformasiyalar" + +msgid "Make Upper Case" +msgstr "Böyük Hərfə Çevirin" + +msgid "Make Lower Case" +msgstr "Kiçik Hərfə Çevirin" + +msgid "Capitalize" +msgstr "Böyüdün" + +msgid "Speech" +msgstr "Danışın" + +msgid "Start Speaking" +msgstr "Danışmağa Başlayın" + +msgid "Stop Speaking" +msgstr "Danışmağı Dayandırın" + +msgid "&View" +msgstr "&Bax" + +msgid "Enter Full Screen" +msgstr "Tam Ekran Daxil edin" + +msgid "Window" +msgstr "Pəncərə" + +msgid "Minimize" +msgstr "Minimallaşdır" + +msgid "Zoom" +msgstr "Yaxınlaşdır" + +msgid "Bring All to Front" +msgstr "Tamamını Önə Gətir" + +msgid "PO Translation" +msgstr "PO Tərcümə" + +msgid "The file cannot be opened." +msgstr "Fayl açılmadı." + +msgid "Invalid file" +msgstr "Xətalı fayl" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Fayl yararsızdır ya da fayl formatı Poedit tərəfindən təyin edilə bilmir." + +msgid "&Undo" +msgstr "&Geri Al" + +msgid "&Redo" +msgstr "&Yenilə" + +msgid "Cu&t" +msgstr "Kə&s" + +msgid "Cut" +msgstr "Kəs" + +msgid "Copy" +msgstr "Köçür" + +msgid "&Paste" +msgstr "&Yapışdır" + +msgid "Paste" +msgstr "Yapışdır" + +msgid "&Delete" +msgstr "&Sİl" + +msgid "Select &All" +msgstr "Tamamını &Seç" + +msgid "Select All" +msgstr "Tamamını Seç" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Yuxarı" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Aşağı" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit pəncərəsinə birdən artıq faylı sürüşdürüb buraxa bilməzsiniz." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' faylı bir mesaj kataloqu deyil." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fayl" + +msgid "&Go" +msgstr "&Get" + +msgid "Source text:" +msgstr "Mənbə mətni:" + +msgid "Singular:" +msgstr "Tək:" + +msgid "Plural:" +msgstr "Cəm:" + +msgid "Translation:" +msgstr "Tərcümə:" + +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 Faylları sadəcə şablonlardır və özü-özündən hər hansı bir tərcüməyə " +"sahib olmazlar.\n" +"Bir tərcümə etmək üçün şablonu əsas alan yeni bir PO faylı yaradın." + +msgid "Create New Translation" +msgstr "Yeni Tərcümə Yarat" + +msgid "Create new translation" +msgstr "Yeni tərcümə yarat" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Yazı korrektoru deaktivasiya edildi, çünki %s üçün lüğət qurulmuş deyil." + +msgid "Install" +msgstr "Qur" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Kataloq modifikasiya edildi. Dəyişikliklər qeyd edilsinmi?" + +msgid "Save changes" +msgstr "Dəyişiklikləri qeyd et" + +msgid "Your changes will be lost if you don't save them." +msgstr "Qeyd etməsəniz dəyişikliklər yox olacaqdır." + +msgid "Save" +msgstr "Qeyd et" + +msgid "Don't save" +msgstr "Qeyd etmə" + +msgid "Don't Save" +msgstr "Qeyd Etmə" + +msgid "Save as..." +msgstr "Fərqli qeyd et..." + +msgid "Compile to..." +msgstr "Kompliyasiya..." + +msgid "Compiled Translation Files" +msgstr "Kompliyasiya Edilmiş Tərcümə Faylları" + +msgid "Export as..." +msgstr "İxrac et..." + +msgid "HTML Files" +msgstr "HTML Faylları" + +msgid "Open catalog template" +msgstr "Kataloq şablonunu aç" + +msgid "Updating catalog" +msgstr "Kataloq yenilənir" + +msgid "Source code not available." +msgstr "Mənbə kodu əlçatan deyil." + +msgid "Updating failed" +msgstr "Yenilənmə baş tutmadı" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Tərcümələr mənbə kodundan yenilənmədi, çünki kataloqun Xüsusiyyətlərində " +"göstərilən mövqedə heç bir kod tapılmadı." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Kataloqdakı yazılar böyük ehtimalla yanlışdır." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Kataloq yenilənmədi. Əlavə məlumat üçünn 'Detallar >>' düyməsinə tıklayın." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Tərcümədə %d xəta tapıldı." +msgstr[1] "Tərcümədə %d xəta tapıldı." + +msgid "Validation results" +msgstr "Təsdiqləmə nəticələri" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Xətalı sətirlər siyahıda qırmızı rəngdə göstərilir. Xəta haqqında məlumata " +"baxmaq üçün sətri seçin." + +msgid "The file was saved safely." +msgstr "Fayl təhlükəsiz bir şəkildə qeyd edildi." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Fayl problemsiz olaraq MO formatında kompliyasiya olundu və qeyd edildi, " +"ancaq böyük ehtimalla ola bilsin ki, düzgün işləməsin." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "Fayl problemsiz qeyd edildi, ancaq MO formatında baş tutmadı." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Fayl, MO formatında kompliyasiya edildibi, ancaq böyük ehtimalla, düzgün " +"işləməyəcək." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Fayl, MO formatında kompliyasiya edilə bilməz və istifadə edilə bilməz." + +msgid "No problems with the translation found." +msgstr "Tərcümə ilə əlaqqədar heç bir problem tapılmadı." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Tərcümə istifadə üçün hazırdır, ancaq %d sətir hələlik tərcümə edilməmişdir." +msgstr[1] "" +"Tərcümə istifadə üçün hazırdır, ancaq %d sətir hələlik tərcümə edilməmişdir." + +msgid "The translation is ready for use." +msgstr "Tərcümə istifadə üçün hazırdır." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit, “%s” faylındakı etibarsız içəriyi avtomatik olaraq düzəltdi." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Fayl, PO fayllarında izin verilməyən və faylın istifadəsinə mane olan " +"köçürmə elementlərinə sahib olmaqdadır. Poedit problemi həll etdi, ancaq " +"qeyri-səlis olaraq işarələnən hər bir elementin tərcüməsini gözdən keçirməli " +"və lazım gələrsə redaktə etməlisiniz." + +msgid "Language of the translation isn't set." +msgstr "Tərcümə dili qurulmamışdır." + +msgid "Set Language" +msgstr "Dili Qur" + +msgid "Set language" +msgstr "Dil qurun" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Tərcümə dili doğru olaraq qurulmazsa, məsləhətlər istifadə edilə bilməz. Cəm " +"formatlar kimi, digər özəlliklər də təsirlənə bilər." + +msgid "Language of the translation is the same as source language." +msgstr "Tərcümə dili mənbə dili ilə eynidir." + +msgid "Fix Language" +msgstr "Dili Düzəlt" + +msgid "Fix language" +msgstr "Dili düzəlt" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Bu kataloqda cəm formalı sətirlər var, ancaq Cəm-Formatlı başlıq " +"konfiqurasiya edilməmişdir." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Bu kataloqda, Cəm-Format başlığında göstərilən cəm format miqdarından fərqli " +"sətirlər var." + +msgid "Required header Plural-Forms is missing." +msgstr "Gərəkli başlıq Cəm-Formatları əksikdir." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Cəm-Formatı başlığında sintaksis xətası (\"%s\")." + +msgid "Fix the Header" +msgstr "Başlığı Düzəlt" + +msgid "Fix the header" +msgstr "Başlığı düzəlt" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "%s üçün istifadə edilən cəm formatı ifadəsi alışılmış deyil." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Baxış" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Mesaj kataloq faylı '%s' yüklənərkən bir xəta baş verdi." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "%d / %d (%d %%) tərcümə edildi" + +#, c-format +msgid "Remaining: %d" +msgstr "Qalan: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d xəta" +msgstr[1] "%d xəta" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d yazı" +msgstr[1] "%d yazı" + +msgid " (unsaved)" +msgstr " (qeyd edilməmiş)" + +msgid " (modified)" +msgstr " (modifikasiya edilmiş)" + +msgid "Go" +msgstr "Get" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Tərcümə yaddaşı yenilənə bilmədi: %s" + +msgid "Purge deleted translations" +msgstr "Silinmiş tərcümələri yox edin" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Artıq istifadə edilməyən bütün əməliyyatların silinməsini istəyirsinizmi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Davam etsəniz, silinmək üçün işarələnmiş bütün tərcümələr yox olacaq. " +"Gələcəkdə bunlar yenidən əlavə olunarsa, təkrar tərcümə etmək " +"məcburiyyətində qalacaqsınız." + +msgid "Keep" +msgstr "Tut" + +msgid "Purge" +msgstr "Yox edin" + +msgid "Fill missing translations from TM" +msgstr "Əksik tərcümələri TY-dan doldurun" + +msgid "Only fill in exact matches" +msgstr "Sadəcə tam uyğunluqları doldur" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Mövcud olaraq, doğru olmayan nəticələr də doldurulur və qeyri-səlis olaraq " +"işarələnir. Sadəcə doğru eyniləşmələri daxil etmək üçün bu seçimi işarələyin." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Tam eyniləşmələri qeyri-səlis olaraq işarələmə" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Sadəcə TY-nın keyfiyyətinə güvənirsinizsə aktivləşdirin. Mövcud olaraq, TY-" +"dan olan bütün eyniləşmələr qeyri-səlis olaraq işarələnir və gözdən " +"keçirilməlidir." + +msgid "Fill" +msgstr "Doldur" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d sətir tərcümə yadaşından dolduruldu." +msgstr[1] "%d sətir tərcümə yaddaşından dolduruldu." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Tərcümələrin bəzi hissələri doğru korreksiya edilmədiyi üçün, qeyri-səlis " +"olaraq işarələnmişdir. Siz onların doğru yazıldığını yoxlamadan keçirin." + +msgid "No entries could be filled from the translation memory." +msgstr "Yazılar tərcümə yaddaşından doldurula bilməz." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TY bu faylın məzmununa oxşayan heç bir sətrə sahib deyil. Bu yarım-avtomatik " +"tərcümələr üçün keçərlidir. Poedit bunları əllə tərcümə edilmiş fayllardan " +"öyrənəcək." + +msgid "Translating" +msgstr "Tərcümə edilir" + +msgid "Filling missing translations from TM..." +msgstr "Əksik tərcümələr TY-dan doldurulur..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u sətir tərcümə edildi" +msgstr[1] "%u sətir tərcümə edildi" + +msgid "Copy from source text" +msgstr "Mənbə mətnindən köçür" + +msgid "Copy from Source Text" +msgstr "Mənbə Mətnindən Köçür" + +msgid "Clear translation" +msgstr "Tərcüməni təmizlə" + +msgid "Clear Translation" +msgstr "Tərcüməni Təmizlə" + +msgid "Edit comment" +msgstr "Şərhi redaktə et" + +msgid "Edit Comment" +msgstr "Şərhi Redaktə Et" + +msgid "References:" +msgstr "Referanslar:" + +msgid "Everything" +msgstr "Hər şey" + +#, c-format +msgid "Form %i" +msgstr "Format %i" + +msgid "Singular" +msgstr "Tək" + +msgid "Zero" +msgstr "Sıfır" + +msgid "One" +msgstr "Bir" + +msgid "Two" +msgstr "İki" + +msgid "Plural" +msgstr "Cəm" + +msgid "Other" +msgstr "Digər" + +msgid "&Bookmarks" +msgstr "&Seçilmişlər" + +#, c-format +msgid "Set bookmark %i" +msgstr "Seçilmiş qur %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Seçilmişə get %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Seçilmiş Qur %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Seçilmişlərə geri dön %i" + +msgid "Hide Sidebar" +msgstr "Yan menyunu Gizlət" + +msgid "Show Sidebar" +msgstr "Yan menyunu Göstər" + +msgid "Hide Status Bar" +msgstr "Status Çubuğunu Gizlət" + +msgid "Show Status Bar" +msgstr "Status Çubuğunu Göstər" + +msgid "Source text" +msgstr "Mənbə mətni" + +msgid "Translation" +msgstr "Tərcümə" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Mənbə mətni — %s" + +msgid "unknown language" +msgstr "bilinməyən dil" + +#, c-format +msgid "Translation — %s" +msgstr "Tərcümə — %s" + +msgid "Error:" +msgstr "Xəta:" + +msgid "Source file" +msgstr "Mənbə faylı" + +msgid "Source file occurrence:" +msgstr "Mənbə kodu yaradılması:" + +msgid "Open in Editor" +msgstr "Redaktorda Aç" + +msgid "Open in editor" +msgstr "Redaktorda aç" + +msgid "No references for the selected item." +msgstr "Seçilmiş element üçün heç bir mənbə yoxdur." + +#, c-format +msgid "Error opening file %s!" +msgstr "'%s' faylı açılarkən xəta oldu!" + +msgid "Find" +msgstr "Tap" + +msgid "Replace" +msgstr "Dəyişdir" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Parametrlər" + +msgid "Ignore case" +msgstr "Böyük-kiçik hərfləri gözardı et" + +msgid "Wrap around" +msgstr "Çevrəsində sürüşdür" + +msgid "Whole words only" +msgstr "Mətnə eyni ilə uyğun gələnləri tap" + +msgid "Find in source texts" +msgstr "Mənbə mətnlərdə axtar" + +msgid "Find in translations" +msgstr "Tərcümələrdə tap" + +msgid "Find in comments" +msgstr "Şərhlərdə tapın" + +msgid "Close" +msgstr "Bağla" + +msgid "Replace All" +msgstr "Tamamını Dəyişdir" + +msgid "Replace all" +msgstr "Tamamını dəyişdir" + +msgid "< &Previous" +msgstr "< &Öncəki" + +msgid "&Next >" +msgstr "&Sonrakı >" + +msgid "String to find" +msgstr "Tapılacaq sətir" + +msgid "Replacement string" +msgstr "Dəyişdirmə sətri" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Proqram işə salına bilmir: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Dil Kodu və ya Adı (məs. az_AZ)" + +msgid "Translation Language" +msgstr "Tərcümə Dili" + +msgid "Language of the translation:" +msgstr "Tərcümə dili:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Kataloq meneceri" + +msgid "Catalog" +msgstr "Kataloq" + +msgid "Total" +msgstr "Ümumi" + +msgid "Untrans" +msgstr "Tərcümə edilməmiş" + +msgid "Fuzzy" +msgstr "Qeyri-səlis" + +msgid "Bad Tokens" +msgstr "Yararsız maddələr" + +msgid "Last modified" +msgstr "Son modifikasiya" + +msgid "Select directory" +msgstr "Direktoriya seç" + +msgid "Directories:" +msgstr "Direktoriyalar:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Siz layihəni silmək istəyirsiniz?" + +msgid "Confirmation" +msgstr "Təsdiq" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Siz həqiqətən də kütləvi şəkildə\n" +"bütün kateqoriyaları yeniləmk istəyirsinizmi?" + +msgid "Information about the translator" +msgstr "Tərcüməçi haqqında məlumat" + +msgid "Name:" +msgstr "Ad:" + +msgid "Your Name" +msgstr "Adınız" + +msgid "Email:" +msgstr "E-poçt:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Adınız və e-poçt ünvanınız sadəcə GNU gettext fayllarında Son Tərcüməçi " +"başlığını tərtibləmək üçün istifadə edilir." + +msgid "Editing" +msgstr "Redaktə" + +msgid "Automatically compile MO file when saving" +msgstr "Qeyd etmə sırasında MO faylının kompliyasiyası" + +msgid "Show summary after catalog update" +msgstr "Kataloq yeniləndikdən sonra nəticələr göstərilsin" + +msgid "Check spelling" +msgstr "Yazma qaydasını yoxla" + +msgid "Always change focus to text input field" +msgstr "Hər zaman giriş sahəsində mətn fokusunu dəyişdir" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Bu parametr aktivləşdirildiyində, işarələyici əsla sətir siyahısına " +"fokuslana bilməz. Beləcə fokusu dəyişdirmək üçün (Tab) tuşuna basmadan " +"tərcüməni həmən yaza bilərsiniz. Gəzinmək üçün Ctrl-Aşağı/Yuxarı oxlarından " +"istifadə etməlisiniz." + +msgid "Appearance" +msgstr "Görünüş" + +msgid "Use custom list font:" +msgstr "Özəl şrift siyahısından istifadə et:" + +msgid "Use custom text fields font:" +msgstr "Özəl şrift sahəsindən istifadə et:" + +msgid "Change UI language" +msgstr "İnrfeys dilini dəyiş" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 və ya daha yenisi gərəkdir)" + +msgid "General" +msgstr "Əsas" + +msgid "Use translation memory" +msgstr "Tərcümə yaddaşından istifadə et" + +msgid "Learn From Files..." +msgstr "Fayllardan Öyrənilsin..." + +msgid "Learn from files..." +msgstr "Fayllardan öyrənilsin..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Sıfırla" + +msgid "Consult TM when updating from sources" +msgstr "Mənbələrdən yenilənərkən TY dəstəyi alınsın" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Poedit aktiv olduqda yeni yazıları əvvəlki tərcümələrdən doldurmağa " +"çalışacaq\n" +"Əgər TY boşdursa bu o qədər də effektiv olmayacaq və\n" +"tərcümə bazası artdıqca TY bir o qədər mükəmməl çalışacaq." + +msgid "Stored translations:" +msgstr "Qeyd edilmiş tərcümələr:" + +msgid "Database size on disk:" +msgstr "Verilənlər bazasının diskdəki ölçüsü:" + +msgid "Select translation files to import" +msgstr "İdxal ediləcək tərcümə fayllarını seçin" + +msgid "Translation Memory" +msgstr "Tərcümə Yaddaşı" + +msgid "Importing translations..." +msgstr "Tərcümələr idxal edilir..." + +msgid "Finalizing..." +msgstr "Tamamlanır..." + +msgid "Reset translation memory" +msgstr "Tərcümə yaddaşını sıfırla" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Tərcümə yaddaşını sıfırlamaq istədiyinizə əminsiniz?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Tərcümə yaddaşını sildikdə bütün saxlanılan tərcümələri siləcək. Bunu geri " +"ala bilməyəcəksiz." + +msgid "Cancel" +msgstr "İmtina" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TY" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Mənbə kodu ekstraktorları mənbə kodu fayllarında tərcümə ediləcək sətrləri " +"tapmaq və onları çıxararaq tərcümə etməyə hazır vəziyyətə gətirirlər." + +msgid "New" +msgstr "Yeni" + +msgid "Edit" +msgstr "Redaktə et" + +msgid "Delete extractor" +msgstr "Ekstraktoru sil" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "“%s” ekstraktorunu silmək istədiyinizdən əminsinizmi?" + +msgid "Extractors" +msgstr "Ekstraktorlar" + +msgid "Accounts" +msgstr "Hesablar" + +msgid "Automatically check for updates" +msgstr "Yenilənmələr üçün avtomatik yoxla" + +msgid "Include beta versions" +msgstr "Beta versiyaları da alınsın" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta versiyalar ən son xüsusiyyətlərə malikdirlər, ancaq stabil işləmə " +"xüsusunda bir az qeyri-stabildirlər." + +msgid "Updates" +msgstr "Yenilənmələr" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Bu parametrlər, PO fayllarının daxili formatlarına təsir edə bilər. Məsələn, " +"versiya testi səbəbilə xüsusi tələbləriniz varsa onları korrektə edin." + +msgid "Line endings:" +msgstr "Sətir sonları:" + +msgid "Unix (recommended)" +msgstr "Unix (məsləhət görülür)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Sürüşdürmə yönü:" + +msgid "Preserve formatting of existing files" +msgstr "Var olan faylların formatını qoru" + +msgid "Advanced" +msgstr "Qabaqcıl" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Nizamlamalar" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Qovluqları Buraya Sürüşdürün və Buraxın\n" +"\n" +"ya da + düyməsindən istifadə edin" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Qovluqları buraya sürüşdürün və buraxın\n" +"\n" +"ya da + düyməsindən istifadə edin" + +msgid "Add Folders..." +msgstr "Qovluqları Əlavə Et..." + +msgid "Add folders..." +msgstr "Qovluqları əlavə et..." + +msgid "Add Files..." +msgstr "Faylları Əlavə Et..." + +msgid "Add files..." +msgstr "Faylları əlavə et..." + +msgid "Add Wildcard..." +msgstr "Şablona Görə Əlavə Et..." + +msgid "Add wildcard..." +msgstr "Şablona görə əlavə et..." + +msgid "Paths" +msgstr "Yollar" + +msgid "Excluded paths" +msgstr "İstisna edilmiş yollar" + +msgid "Additional keywords" +msgstr "Əlavə açar kəlmələr" + +msgid "Name of the project the translation is for" +msgstr "Bunun üçün hazırlanan tərcümənin adı:" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "məs. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (məsləhət görülür)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Lütfən əvvəlcə faylı qeyd edin. Qeyd etdikdən sonra bu bölmə redaktə edilə " +"bilər." + +msgid "Comment:" +msgstr "Şərh:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "T&əmizlə" + +msgid "Clear the comment" +msgstr "Şərhi silin" + +msgid "Create new translations project" +msgstr "Yeni tərcümə layihəsi hazırlayın" + +msgid "Edit the project" +msgstr "Layihəni redaktə et" + +msgid "Delete the project" +msgstr "Layihəni sil" + +msgid "Update all" +msgstr "Tamamını yenilə" + +msgid "Update all catalogs in the project" +msgstr "Layihədəki bütün kataloqları yenilə" + +msgid "Edit project" +msgstr "Layihəni redaktə et" + +msgid "Project name:" +msgstr "Layihənin adı:" + +msgid "Browse" +msgstr "Gətir" + +msgid "Add directory to the list" +msgstr "Siyahıya kataloq əlavə et" + +msgid "&New..." +msgstr "&Yeni..." + +msgid "New from &POT/PO file..." +msgstr "&POT/PO faylından yenisi..." + +msgid "New From &POT/PO File..." +msgstr "&POT/PO Faylından Yenisi..." + +msgid "&Open..." +msgstr "&Aç..." + +msgid "Open Recent" +msgstr "Son İstifadə Edilənləri Açın" + +msgid "Open from Crowdin..." +msgstr "Crowdin-dən aç..." + +msgid "Open From Crowdin..." +msgstr "Crowdin-dən Aç..." + +msgid "&Close" +msgstr "&Bağla" + +msgid "&Save" +msgstr "&Qeyd et" + +msgid "Save &as..." +msgstr "Fərqli &qeyd et..." + +msgid "Save &As..." +msgstr "Fərqli &Qeyd et..." + +msgid "Compile to MO..." +msgstr "MO faylına kompliyasiya..." + +msgid "E&xport as HTML..." +msgstr "HTML olaraq i&xrac et..." + +msgid "Check for updates..." +msgstr "Yeni versiya üçün yoxlanış..." + +msgid "&Preferences..." +msgstr "&Xüsusiyyətlər..." + +msgid "Catalogs &manager" +msgstr "Kataloq &meneceri" + +msgid "Catalogs &Manager" +msgstr "Kataloq &Meneceri" + +msgid "E&xit" +msgstr "Ç&ıx" + +msgid "Quit" +msgstr "Çıx" + +msgid "Copy from singular" +msgstr "Tək olandan köçür" + +msgid "Copy From Singular" +msgstr "Tək Olandan Köçür" + +msgid "Translation is &fuzzy" +msgstr "Tərcümə &qeyri-səlisdir" + +msgid "Translation Is &Fuzzy" +msgstr "Tərcümə &Qeyri-səlisdir" + +msgid "Edit &comment" +msgstr "&Şərhi redaktə et" + +msgid "Edit &Comment" +msgstr "&Şərhi Redaktə Et" + +msgid "Suggestions" +msgstr "Məsləhətlər" + +msgid "&Show references" +msgstr "&Parametrləri göstər" + +msgid "&Show References" +msgstr "&Parametrləri Göstər" + +msgid "&Find..." +msgstr "&Tap..." + +msgid "Replace..." +msgstr "Dəyişdir..." + +msgid "Find next" +msgstr "Sonrakını tapın" + +msgid "Find previous" +msgstr "Öncəkini tapın" + +msgid "Find and Replace..." +msgstr "Tap və Dəyişdir..." + +msgid "Find Next" +msgstr "Sonrakını Tapın" + +msgid "Find Previous" +msgstr "Öncəkini Tapın" + +msgid "&Preferences" +msgstr "&Xüsusiyyətlər" + +msgid "Display entry &IDs" +msgstr "Qeyd &№ və kodlar göstərilsin" + +msgid "Display Entry &IDs" +msgstr "Qeyd &№ və Kodlar Göstərilsin" + +msgid "Sort by &file order" +msgstr "&Fayldakı sıraya görə sırala" + +msgid "Sort by &File Order" +msgstr "&Fayldakı Sıraya Görə Sırala" + +msgid "Sort by &source" +msgstr "&Mənbəyə görə sırala" + +msgid "Sort by &Source" +msgstr "&Mənbə Mətninə Görə Sırala" + +msgid "Sort by &translation" +msgstr "&Tərcüməyə görə sırala" + +msgid "Sort by &Translation" +msgstr "&Tərcüməyə Görə Sırala" + +msgid "&Group by context" +msgstr "&Kontekstə görə qrup" + +msgid "&Group By Context" +msgstr "&Kontekstə Görə Qrup" + +msgid "Entries with errors first" +msgstr "Əvvəlcə xətalı olan yazılar" + +msgid "Entries with Errors First" +msgstr "Əvvəlcə Xətalı Olan Yazılar" + +msgid "&Untranslated entries first" +msgstr "&Tərcümə edilməmiş yazılar ən üstdə görünsün" + +msgid "&Untranslated Entries First" +msgstr "&Tərcümə Edilməmiş Yazılar Ən Üstdə Görünsün" + +msgid "Show sidebar" +msgstr "Yan menyunu göstər" + +msgid "Show status bar" +msgstr "Status çubuğunu göstər" + +msgid "C&atalog" +msgstr "K&ataloq" + +msgid "&Update from sources" +msgstr "&Mənbədən yenilə" + +msgid "&Update from Sources" +msgstr "&Mənbədən Yenilə" + +msgid "Update from &POT file..." +msgstr "&POT Fayldan yenilə..." + +msgid "Update from &POT File..." +msgstr "&POT Fayldan Yenilə..." + +msgid "Sync with Crowdin" +msgstr "Crowdin ilə Sinxronlaşdırın" + +msgid "Fill missing translations from &TM..." +msgstr "Əksik tərcümələri &TY-dan doldurun..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Əksik tərcümələri &TY-dan doldurun..." + +msgid "&Purge deleted translations" +msgstr "&Silinmiş tərcümələri yox edin" + +msgid "&Purge Deleted Translations" +msgstr "&Silinmiş Tərcümələri Yox Edin " + +msgid "&Validate translations" +msgstr "&Tərcümələri təsdiqlə" + +msgid "&Validate Translations" +msgstr "&Tərcümələri Təsdiqlə" + +msgid "&Properties..." +msgstr "&Xüsusiyyətlər..." + +msgid "&Done and next" +msgstr "&Tamamla və sonrakı" + +msgid "&Done and Next" +msgstr "&Tamamla və Sonrakı" + +msgid "&Previous translation" +msgstr "&Öncəki tərcümə" + +msgid "&Previous Translation" +msgstr "&Öncəki Tərcümə" + +msgid "&Next translation" +msgstr "&Sonrakı tərcümə" + +msgid "&Next Translation" +msgstr "&Sonrakı Tərcümə" + +msgid "P&revious unfinished" +msgstr "Ö&ncəki tamamlanmamış" + +msgid "P&revious Unfinished" +msgstr "Ö&ncəki Tamamlanmamış" + +msgid "Ne&xt unfinished" +msgstr "S&onrakı tamamlanmamış" + +msgid "Ne&xt Unfinished" +msgstr "S&onrakı Tamamlanmamış" + +msgid "Previous plural form" +msgstr "Əvvəlki cəm növü" + +msgid "Previous Plural Form" +msgstr "Əvvəlki Cəm Növü" + +msgid "Next plural form" +msgstr "Növbəti cəm növü" + +msgid "Next Plural Form" +msgstr "Növbəti Cəm Növü" + +msgid "&Online help" +msgstr "&Onlayn yardım" + +msgid "&Online Help" +msgstr "&Onlayn Yardım" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext kitabı" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext Kitabı" + +msgid "&About Poedit" +msgstr "&Poedit Haqqında" + +msgid "&About" +msgstr "&Haqqında" + +msgid "Extractor setup" +msgstr "Ekstraktoru qur" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Vergüllə ayrılmış uzantı siyahısı (məs. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Çağrış:" + +msgid "Command to extract translations:" +msgstr "Tərcümələri çıxarmaq üçün əmr:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Bu, ekstraktoru işlətmək üçün istifadə edilən əmrdir.\n" +"%o çıxış faylı adına, %K açar kəlmələrin siyahısına,\n" +"%F giriş fayllarının siyahısına, \n" +"%C nsimvoluna dönüşür (aşağıya baxın)." + +msgid "An item in keywords list:" +msgstr "Açar kəlmələri siyahısındakı bir maddə:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Bu, hər açar kəlmə üçün bir dəfə əmr sətrinə\n" +"əlavə ediləcəkdir. %k açar kəlməni yazar." + +msgid "An item in input files list:" +msgstr "Giriş faylları siyahısındakı bir maddə:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Bu, hər yazı faylı üçün bir dəfə əmr sətrinə\n" +"əlavə ediləcəkdir. %f fayl adını yazar." + +msgid "Source code charset:" +msgstr "Mənbə kodu kodlaşması:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Mənbə xarakter əmri verilmişdirsə,\n" +"bu əmr sətrinə əlavə ediləcəkdir.\n" +"%c xarakter dəyərini yazar." + +msgid "Catalog properties" +msgstr "Kataloq xüsusiyyətləri" + +msgid "Project name and version:" +msgstr "Layihənin adı və versiyası:" + +msgid "Plural Forms:" +msgstr "Cəm Formatları:" + +msgid "Use default rules for this language" +msgstr "Bu dil üçün mövcud qaydalardan istifadə edilsin" + +msgid "Use custom expression" +msgstr "Özəl ifadədən istifadə edilsin" + +msgid "Learn about plural forms" +msgstr "Cəm formatları öyrənin" + +msgid "Charset:" +msgstr "Kodlaşdırma:" + +msgid "Team:" +msgstr "Komanda:" + +msgid "Team's email address:" +msgstr "Komandanın e-poçt ünvanı:" + +msgid "Translation properties" +msgstr "Tərcümə xüsusiyyətləri" + +msgid "Sources paths" +msgstr "Mənbə yolları" + +msgid "Extract text from source files in the following directories:" +msgstr "Mənbə fayllarındakı mətnləri bu direktoriyaya çıxart:" + +msgid "Base path:" +msgstr "Əsas yol:" + +msgid "Sources keywords" +msgstr "Mənbə açar kəlmələri" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Mənbə fayllarındakı tərcümə edilə bilinən sətirlər tanındığında, mövcud " +"olanların yanında bu açar kəlmələr (funksiya adları) istifadə edilsin." + +msgid "Learn about gettext keywords" +msgstr "Gettext açar kəlmələrindən öyrənilsin" + +msgid "Update summary" +msgstr "Yenilənmənin nəticəsi" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Mənbədə olan bu sətirlər kataloqda yoxdur.\n" +"Poedit bunları kataloqa əlavə edəcək." + +msgid "New strings" +msgstr "Yeni sətir" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "Bu sətirlər artıq mənbədə yoxdur.Poedit bunları kataloqdan çıxardacaq." + +msgid "Obsolete strings" +msgstr "Əski sətirlər" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 yeni, 0 əski)" + +msgid "Open" +msgstr "Aç" + +msgid "Save catalog" +msgstr "Kataloqu qeyd et" + +msgid "Validate" +msgstr "Təsdiqlə" + +msgid "Check for errors in the translation" +msgstr "Tərcümədəki xətaları yoxla" + +msgid "Update" +msgstr "Yenilə" + +msgid "Update catalog - synchronize it with sources" +msgstr "Kataloqu yenilə - mənbə ilə sinxronlaşdır" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Seçilən sətrin qeyri-səlis tərcümə statusunu dəyişdirir" + +msgid "Show or hide the sidebar" +msgstr "Yan paneli göstər/gizlət" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Öncəki mənbə mətni:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Qeyri-səlis tərcümənin uyğun gəldiyi əski mənbə mətn ( bir yenilənmə " +"əsnasında dəyişdirilmədən əvvəlki vəziyyəti)." + +msgid "Notes for translators:" +msgstr "Tərcüməçilər üçün qeydlər:" + +msgid "Add comment" +msgstr "Şərh əlavə et" + +msgid "Add Comment" +msgstr "Şərh Əlavə Et" + +msgid "Translation suggestions:" +msgstr "Tərcümə xüsusiyyətləri:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Uyğunluq tapılmadı" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Uyğunluq Tapılmadı" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Bu sətr Poedit-in TY tapıldı." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Yeni: %i, əski: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Tərcümələr idxal edilir: %d" + +msgid "Poedit Update" +msgstr "Poedit Yenilənməsi" + +msgid "Preparing migration..." +msgstr "Miqrasiya hazırlanır..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Miqrasiya çıxış statusu: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Tərcümə yaddaşının Poedit tərəfindən yeni bir formata çevrilməsi gərəkdir." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Bu hərəkət Poedit işə salınmadan əvvəl edilməlidir. Çox miqdarda tərcümə " +"qeyd edilmişdirsə bu hərəkət bir neçə dəqiqə çəkə bilər, ancaq əsasən daha " +"az bir vaxtda tamamlanır." + +msgid "Proceed" +msgstr "İşlənir" + +msgid "Translation memory migration failed." +msgstr "Tərcümə yaddaşının miqrasiyası baş tutmadı." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Tərcümə yaddaşının məlumatları miqrasiya edilə bilməz. Xəta:\n" +" \n" +"%s \n" +"Lütfən, help@poedit.net ünvanına müraciət edin və biz sizə problemin " +"həllində yardım edək." + +msgid "Cannot create temporary directory." +msgstr "Müvəqqəti direktoriya yaradıla bilmir." + +msgid "Welcome to Poedit" +msgstr "Poedit-ə Xoş Gəlmisiniz" + +msgid "Edit a translation" +msgstr "Tərcüməni redaktə et" + +msgid "Open an existing PO file and edit the translation." +msgstr "Mövcud olan bir PO faylını açaraq tərcüməni redaktə edin." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Mövcud olan bir PO faylı ya da POT şablonundan yeni bir tərcümə yaradın." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Crowdin ilə bir tərcümə üzərində ortaq çalış" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Crowdin layihəsindən bir fayl endirin, tərcümə edin və təkrar " +"dəyişikliklərinizi sinxronlaşdırın." + +msgid "What is Crowdin?" +msgstr "Crowdin nədir?" + +msgid "There are no translations. That’s unusual." +msgstr "Orada heç bir tərcümə yoxdur. Bu qeyri-adi bir şeydir." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Tərcümə edilə bilinən yazılar əl ilə Gettext sisteminə əlavə edilə bilmədi, " +"ancaq mənbə kod\n" +"içindən alındı. Bu şəkildə aktual qalırlar.\n" +"Əsasən proqramçı tərəfindən hazırlanmış PO şablon fayllarından (POT) " +"istifadə edilir." + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU GETTEXT haqqında daha ətraflı məlumat)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Bu kataloqu doldurmağın ən asan yolu bir POT faylından yeniləməkdir:" + +msgid "Update from POT" +msgstr "POT-dan Yenilə" + +msgid "Take translatable strings from an existing POT template." +msgstr "" +"Tərcümə edilə bilinən sətirləri birbaşa POT şablonundan ala bilərsiniz." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Tərcümə edilə bilinən sətirləri birbaşa mənbə kodundan ala bilərsiniz:" + +msgid "Extract from sources" +msgstr "Mənbələrdən alınsın" + +msgid "Configure source code extraction in Properties." +msgstr "Xüsusiyyətlər bölməsindən mənbə koddan almağı konfiqurasiya edin." + +msgid "Sync" +msgstr "Sinxronlaşdır" + +msgid "Synchronize the translation with Crowdin" +msgstr "Tərcüməni Crowdin ilə sinxronlaşdır" diff --git a/locales/be.mo b/locales/be.mo new file mode 100644 index 0000000000000000000000000000000000000000..d3f9cc1310aeac126b86246dae0ad5f8b6b031ae GIT binary patch literal 60515 zcmd6w37lM2mH!{Iw}60v;QBz*B#>@G+%W732}B5qBwQ1s{mRc;Ve|JH!2|7KA1+YIgo zZUv77w}Ilr$3fNi7f}3i*bCt$@CD#Yz*mCL18)SUfcJqa_np8Wfv+O{8}LBz6)(!N zQ^9U^y-vk#p+ z0DNBHvEcrsXMuXY2vj@EB0T_V-q!|h1`i_rAozT6B+~y0ik^Ez1l50N;8B4mfZ~U< zLD6Fon1feBSH1&I8gmQGt%b=UINZ0{|Zp^_gU~{@Q0x0@5tl5p6Q^{vm$*qD7s$^svm2? zGr?;>)$I( zK-K>#Q1ks5C_eipxD?#$M3;|R;9J09^6vsCgNL2u?ac&5zr~>VsuxuKt3i$X8c=+7 zBdC793skv}fi#tU7L@$%0`XM-08rz2Hh2_x3@B4^Vc;7;$?+!eQ1I_S(er!Y0&v$; zd|Zn_(d$BR5_oaom7wbT5U6^-1d5)&1yz36Q(aH(1uFkQ@abRr&<562 z=UJfWHyL~`cpUf?@I3Ip!3)6;falNh_nvZ^&+C5RGs&L}O5SFHId}o6b}k21{~A#G zcRjcp_zv(0@SPwmntcXr2mb;-8*HEL^EV3=UCsqXm)C%zV?U_ztN}HD*MWNPy^;P5 zsB+&1RqmIO|6kxsNFOxE>pK$^|6BlyZ*K-ghtCCm6%=3oTi~C;!$?2j(f9D1+0Y#VBgL?1kz*_@90HX4;ZIS*pcqHjv=VD{P zqd`4i08Rq00oC7+f||e2fvWfOpxXZ?xC;CZsCj$!%Y8mpf}-OUp!o6@Q2qKaI34^1 zsCoP;sCoVasB-(Ebi|j>51bC}N%~Y!^q32(-2A|9P~}%f`WjI5yaU_--VbWt&N$28 zefxCgTLB03# zNS^~fmGpU_-tUU%uZ#SZfmecUJl_aPuiXw#20sR>oo|4ezwd&VgTDtg?!g5yzo6Q= zBJi!C>bn`-2fQ=zqoDN0gP_WP2~@dng8PF{fRfwag3=R*zQV`*Qt)Y{PXSfmf=ItA z(tV)%b2+#dxH|IR3W|QWfO`KPP~-a)sPTLSRDC~>=YIkZC*5|A({U=O`d$?26Tt&X z&yM`_LD97m=^D5<>B~TkXAP+OZv-{ocSicdp!o0sQ2qK6C_ea3>k&j$|z-wo~uJ^-rR z=Oh1Xk^j@k{}ZTo_gb7~*MkRv;=jAV1Hku#;-78cLEsNS>CZoaM}r5S>-ytV5Z2C4 z1CIl51P=zk2#W6>2i5N%fu9Ed2;K@lbe@-Ae7@7+dhmzje*i@FWE(GF%>w=l*adc8 z$XLM}K+)|9Q2BoWFVUZo(+Bx)O`Fn@VB7oxJ$Rw{~6$cq^E+)KN)-hxEMSHyc|3f+z6`N z2SM@8!{9pb3*fHcxmD-e3≫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 Up~@)(gDWrTt#o&G)%vpk2Q^Q!!2kdN literal 0 HcmV?d00001 diff --git a/locales/be.po b/locales/be.po new file mode 100644 index 0000000..db24016 --- /dev/null +++ b/locales/be.po @@ -0,0 +1,1967 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:03-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Belarusian\n" +"Language: be_BY\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: be\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Не паказваць больш гэта апавяшчэнне" + +msgid "Don't Show Again" +msgstr "Больш не паказваць" + +msgid "Don't show again" +msgstr "Больш не паказваць" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i радок файла '%s' не быў загружаны карэктна." +msgstr[1] "%i радкоў файла '%s' не было загружана карэктна." +msgstr[2] "%i радкоў файла '%s' не было загружана карэктна." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Радок %d файла '%s' пашкоджаны (некарэктныя дадзеныя %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Памылковы фармат загалоўка: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Сапсаваны файл каталога: форма адзіночнага ліку msgstr ужываецца разам з " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Сапсаваны файл каталога: форма множнага ліку msgstr ужыта без msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Пры загрузцы каталога ўзнікла памылка. У выніку чаго, некаторыя дадзеныя " +"могуць быць пашкоджаныя ці адсутнічаць." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Немагчыма загрузіць файл %s, Магчыма, што ён пашкоджаны." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Файл '%s' даступны толькі для чытання і яго нельга захаваць.\n" +"Калі ласка, прызначце яму іншае імя." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Не атрымалася захаваць файл %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Узнікла праблема падчас фарматавання файла (але ён быў паспяхова захаваны)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Каталог не атрымалася захаваць у кадаванні \"%s\", як адзначана ў наладах " +"каталога. \n" +"\n" +"Ён быў захаваны ў кадаванні UTF-8, і налады былі зменены адпаведным чынам." + +msgid "Error saving catalog" +msgstr "Памылка захавання каталога" + +msgid "PO Translation Files" +msgstr "Файлы перакладу PO" + +msgid "POT Translation Templates" +msgstr "Шаблоны перакладу POT" + +msgid "All Translation Files" +msgstr "Усе файлы перакладаў" + +msgid "Merging differences..." +msgstr "Злучэнне адрозненняў..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "\"%s\" не з'яўляецца карэктным POT-файлам." + +msgid "(Use default language)" +msgstr "(Ужываць мову па змаўчанні)" + +msgid "Select your preferred language" +msgstr "Выберыце пажаданую мову" + +msgid "Language selection" +msgstr "Выбар мовы" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Вы павінны перазапусціць Poedit, каб змены набылі моц." + +msgid "Downloading translations is disabled in this project." +msgstr "Запампоўка перакладаў адключана ў гэтым праекце." + +msgid "Not authorized, please sign in again." +msgstr "Не аўтарызаваны, калі ласка, увайдзіце яшчэ раз." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin - гэта сеціўная прылада для сумеснай лакалізацыі і перакладу. Poedit " +"можа аўтаматычна сінхранізаваць PO файлы з Crowdin." + +msgid "Sign In" +msgstr "Увайсці" + +msgid "Sign in" +msgstr "Увайсці" + +msgid "Sign Out" +msgstr "Выйсці" + +msgid "Sign out" +msgstr "Выйсці" + +msgid "Waiting for authentication…" +msgstr "Чаканне аўтарызацыі…" + +msgid "Updating user information…" +msgstr "Абнаўленне звестак пра карыстальніка…" + +msgid "Signed in as:" +msgstr "Вы ўвайшлі як:" + +msgid "Learn More About Crowdin" +msgstr "Даведацца больш пра Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Даведацца больш пра Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Увайсці ў Crowdin" + +msgid "Open Crowdin translation" +msgstr "Адкрыць пераклад Crowdin" + +msgid "Project:" +msgstr "Праект:" + +msgid "Language:" +msgstr "Мова:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "У вашым уліковым запісе Crowdin няма праектаў для перакладу." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Гэты праект не змяшчае файлаў, якія могуць быць перакладзены ў Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Гэты файл можа быць зменены толькі ў вэб-інтэрфейсе Crowdin." + +msgid "Downloading latest translations…" +msgstr "Пампаванне найноўшых перакладаў…" + +msgid "Syncing with Crowdin" +msgstr "Сінхранізацыя з Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Сінхранізаваць з Crowdin не атрымалася." + +msgid "Crowdin error" +msgstr "Памылка Crowdin" + +msgid "Uploading translations…" +msgstr "Дасыланне перакладу…" + +msgid "&Copy" +msgstr "&Скапіяваць" + +msgid "Learn more" +msgstr "Даведацца больш" + +msgid "Learn More" +msgstr "Даведацца больш" + +#, c-format +msgid "Failed command: %s" +msgstr "Памылка выканання каманды: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Не атрымалася аб'яднаць каталогі gettext." + +msgid "Scanning files..." +msgstr "Сканаванне файлаў..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Аналіз %s файлаў..." + +msgid "Failed to load extracted catalog." +msgstr "Не атрымалася загрузіць выняты каталог." + +msgid "&Help" +msgstr "&Даведка" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Файлы з пашырэннем MO нельга змяніць непасрэдна ў Poedit." + +msgid "Error opening file" +msgstr "Памылка адкрыцця файла" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Калі ласка, адкрыйце і змяніце адпаведны PO файл. Пасля яго захавання, MO " +"файл таксама абнавіцца." + +msgid "don't delete temporary files (for debugging)" +msgstr "не выдаляць часовыя файлы (для адладкі)" + +msgid "handle a poedit:// URI" +msgstr "апрацаваць адрас poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Памылка падключэння да працэсу Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Адбылося непрадбачанае выключэнне: %s" + +msgid "Unhandled exception occurred." +msgstr "Адбылося непрадбачанае выключэнне." + +msgid "Open catalog" +msgstr "Адкрыць каталог" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Файл '%s' не існуе." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Пра %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Версія %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Сэрвісы" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Схаваць %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Схаваць іншыя" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Паказаць усе" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Выйсці з %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit - гэта просты ў выкарыстанні рэдактар перакладаў." + +msgid "Catalogs Manager" +msgstr "Менеджар каталогаў" + +msgid "Check for Updates..." +msgstr "Праверыць наяўнасць абнаўленняў..." + +msgid "&Edit" +msgstr "&Праўка" + +msgid "Undo" +msgstr "Вярнуць" + +msgid "Redo" +msgstr "Аднавіць" + +msgid "Paste and Match Style" +msgstr "Стыль капіявання і ўстаўкі" + +msgid "Delete" +msgstr "Выдаліць" + +msgid "Spelling and Grammar" +msgstr "Праверка правапісу і граматыка" + +msgid "Show Spelling and Grammar" +msgstr "Паказваць арфаграфічныя і граматычныя памылкі" + +msgid "Check Document Now" +msgstr "Праверыць дакумент" + +msgid "Check Spelling While Typing" +msgstr "Правяраць правапіс падчас уводу" + +msgid "Check Grammar With Spelling" +msgstr "Правяраць граматыку і правапіс" + +msgid "Correct Spelling Automatically" +msgstr "Выпраўляць правапіс аўтаматычна" + +msgid "Substitutions" +msgstr "Замены" + +msgid "Show Substitutions" +msgstr "Паказваць замены" + +msgid "Smart Copy/Paste" +msgstr "Інтэлектуальная капіяванне/устаўка" + +msgid "Smart Quotes" +msgstr "Інтэлектуальныя двукоссі" + +msgid "Smart Dashes" +msgstr "Інтэлектуальны працяжнік" + +msgid "Smart Links" +msgstr "Інтэлектуальныя спасылкі" + +msgid "Text Replacement" +msgstr "Замена тэксту" + +msgid "Transformations" +msgstr "Пераўтварэнні" + +msgid "Make Upper Case" +msgstr "Канвертаваць у вялікія літары" + +msgid "Make Lower Case" +msgstr "Канвертаваць у маленькія літары" + +msgid "Capitalize" +msgstr "Вялікімі літарамі" + +msgid "Speech" +msgstr "Маўленне" + +msgid "Start Speaking" +msgstr "Пачаць агучванне" + +msgid "Stop Speaking" +msgstr "Спыніць агучванне" + +msgid "&View" +msgstr "&Выгляд" + +msgid "Enter Full Screen" +msgstr "Перайсці ў поўнаэкранны рэжым" + +msgid "Window" +msgstr "Акно" + +msgid "Minimize" +msgstr "Згарнуць" + +msgid "Zoom" +msgstr "Маштаб" + +msgid "Bring All to Front" +msgstr "Змясціць усё на пярэднім плане" + +msgid "PO Translation" +msgstr "Файл перакладу PO" + +msgid "The file cannot be opened." +msgstr "Не атрымліваецца адкрыць файл." + +msgid "Invalid file" +msgstr "Памылковы файл" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Магчыма файл пашкоджаны ці мае фармат, які не падтрымліваецца Poedit." + +msgid "&Undo" +msgstr "&Вярнуць" + +msgid "&Redo" +msgstr "&Аднавіць" + +msgid "Cu&t" +msgstr "Выра&заць" + +msgid "Cut" +msgstr "Выразаць" + +msgid "Copy" +msgstr "Скапіяваць" + +msgid "&Paste" +msgstr "&Уставіць" + +msgid "Paste" +msgstr "Уставіць" + +msgid "&Delete" +msgstr "&Выдаліць" + +msgid "Select &All" +msgstr "Выбраць у&сё" + +msgid "Select All" +msgstr "Выбраць усё" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Уверх" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Уніз" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "У акно Poedit можна перацягнуць толькі адзін файл." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Файл '%s' не з'яўляецца каталогам паведамленняў." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "&Перайсці" + +msgid "Source text:" +msgstr "Зыходны тэкст:" + +msgid "Singular:" +msgstr "Адзіночны:" + +msgid "Plural:" +msgstr "Множны:" + +msgid "Translation:" +msgstr "Пераклад:" + +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 з'яўляюцца толькі шаблонамі і не змяшчаюць у сабе " +"перакладаў.\n" +"Каб зрабіць пераклад стварыце файл PO з шаблона." + +msgid "Create New Translation" +msgstr "Стварыць новы пераклад" + +msgid "Create new translation" +msgstr "Стварыць новы пераклад" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Праверка правапісу адключана, таму што слоўнік для %s не ўсталяваны." + +msgid "Install" +msgstr "Усталяваць" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталог зменены. Вы жадаеце захаваць змяненні?" + +msgid "Save changes" +msgstr "Захаваць змяненні" + +msgid "Your changes will be lost if you don't save them." +msgstr "Вашы змяненні будуць страчаныя, калі не захаваць іх." + +msgid "Save" +msgstr "Захаваць" + +msgid "Don't save" +msgstr "Не захоўваць" + +msgid "Don't Save" +msgstr "Не захоўваць" + +msgid "Save as..." +msgstr "Захаваць як..." + +msgid "Compile to..." +msgstr "Кампіляваць у..." + +msgid "Compiled Translation Files" +msgstr "Скампіляваныя файлы перакладу" + +msgid "Export as..." +msgstr "Экспартаваць як..." + +msgid "HTML Files" +msgstr "HTML-файл" + +msgid "Open catalog template" +msgstr "Адкрыць шаблон каталога" + +msgid "Updating catalog" +msgstr "Абнаўленне каталога" + +msgid "Source code not available." +msgstr "Зыходны код не даступны." + +msgid "Updating failed" +msgstr "Не атрымалася абнавіць" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Пераклады не могуць быць абноўлены з зыходнага кода, таму што код не быў " +"знойдзены ў папцы, азначанай ва ўласцівасцях каталога." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Запісы ў каталога, напэўна, памылковыя." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Не атрымалася абнавіць каталог. Пстрыкніце на кнопку \"Дэталі>>\", каб " +"атрымаць дадатковыя звесткі." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "У перакладзе знойдзена %d праблема." +msgstr[1] "У перакладзе знойдзены %d праблемы." +msgstr[2] "У перакладзе знойдзена %d праблем." + +msgid "Validation results" +msgstr "Вынікі праверкі" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Запісы з памылкамі былі вылучаны ў спісе чырвоным колерам. Калі выбраць такі " +"запіс, будуць паказаныя падрабязныя звесткі пра памылку." + +msgid "The file was saved safely." +msgstr "Файл быў паспяхова захаваны." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файл быў паспяхова захаваны і скампіляваны ў фармат MO, але магчыма будзе " +"працаваць некарэктна." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Файл быў паспяхова захаваны, але яго не атрымалася скампіляваць у фармат MO " +"для далейшага выкарыстання." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Файл быў скампіляваны ў фармат MO, але магчыма будзе працаваць некарэктна." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Не атрымалася скампіляваць файл у фармат MO для далейшага выкарыстання." + +msgid "No problems with the translation found." +msgstr "Праблем у перакладзе не знойдзена." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Пераклад гатовы да выкарыстання, але %d запіс яшчэ не перакладзены." +msgstr[1] "" +"Пераклад гатовы да выкарыстання, але %d запісы яшчэ не перакладзена." +msgstr[2] "" +"Пераклад гатовы да выкарыстання, але %d запісаў яшчэ не перакладзена." + +msgid "The translation is ready for use." +msgstr "Пераклад гатовы да выкарыстання." + +msgid "Context:" +msgstr "Кантэкст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit аўтаматычна выправіў памылковы змест у файле \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Гэты файл змяшчаў у сабе элементы, якія паўтараюцца. Такія элементы " +"забараняецца выкарыстоўваць у PO-файлах і робіць немагчымым выкарыстанне " +"файла. Poedit выправіў гэту памылку, але вы павінны перагледзець усе " +"элементы, якія пазначаны як недакладныя і выправіць іх, калі патрабуецца." + +msgid "Language of the translation isn't set." +msgstr "Мова перакладу не азначана." + +msgid "Set Language" +msgstr "Выбраць мову" + +msgid "Set language" +msgstr "Выбраць мову" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Прапановы не даступныя, калі мова перакладу не азначаная. Іншыя магчымасці, " +"такія як формы множнага ліку, таксама могуць быць парушаныя." + +msgid "Language of the translation is the same as source language." +msgstr "Мова перакладу супадае з зыходнай мовай." + +msgid "Fix Language" +msgstr "Выправіць мову" + +msgid "Fix language" +msgstr "Выправіць мову" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"У дадзеным каталозе ёсць запісы з формамі множнага ліку, але адсутнічае " +"загаловак \"Plural-Forms\"." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Запісы ў гэтым каталога маюць колькасць формаў множнага ліку, якое " +"адрозніваецца ад азначанага ў загалоўку \"Plural-Forms\"" + +msgid "Required header Plural-Forms is missing." +msgstr "Неабходны загаловак \"Plural-Forms\" адсутнічае." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Сінтаксічная памылка ў загалоўку \"Plural-Forms\" (\"%s\")." + +msgid "Fix the Header" +msgstr "Выправіць загаловак" + +msgid "Fix the header" +msgstr "Выправіць загаловак" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Выраз формы множнага ліку, якое выкарыстоўваецца ў каталога, з'яўляецца " +"незвычайным для %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Праверыць" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Памылка загрузкі файла каталога паведамленняў \"%s\"." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Перакладзена: %d з %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Засталося: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d памылка" +msgstr[1] "%d памылкі" +msgstr[2] "%d памылак" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d запіс" +msgstr[1] "%d запісы" +msgstr[2] "%d запісаў" + +msgid " (unsaved)" +msgstr " (не захавана)" + +msgid " (modified)" +msgstr "(зменены)" + +msgid "Go" +msgstr "Перайсці" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Не атрымалася абнавіць памяць перакладаў: %s" + +msgid "Purge deleted translations" +msgstr "Знішчыць вылучаныя пераклады" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Жадаеце выдаліць усе пераклады, якія больш не выкарыстоўваюцца?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Калі працягнуць аперацыю, усе пераклады, пазначаныя як выдаленыя, будуць " +"цалкам знішчаныя. Калі яны будуць даданыя назад у будучым, іх прыйдзецца " +"перакладаць паўторна." + +msgid "Keep" +msgstr "Пакінуць" + +msgid "Purge" +msgstr "Знішчыць" + +msgid "Fill missing translations from TM" +msgstr "Запоўніць прапушчаныя пераклады з памяці перакладаў" + +msgid "Only fill in exact matches" +msgstr "Запаўняць толькі пры дакладным супадзенні" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Па змаўчанні, тыя пераклады, якія супадаюць часткова таксама будуць " +"запоўнены і пазначаны недакладнымі. Азначце гэты параметр, каб уключыць " +"толькі дакладныя супадзенні." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Не пазначаць дакладныя супадзенні недакладнымі" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Уключыце гэта толькі ў тым выпадку, калі вы ўпэўнены ў якасці вашай памяці " +"перакладаў. Па змаўчанні, усе супадзенні з памяці перакладаў пазначаюцца як " +"недакладныя і іх патрабуецца перагледзець." + +msgid "Fill" +msgstr "Запоўніць" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "З памяці перакладаў быў узяты %d запіс." +msgstr[1] "З памяці перакладаў былі ўзятыя %d запісы." +msgstr[2] "З памяці перакладаў было ўзята %d запісаў." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "Пераклады былі адзначаныя як недакладныя. Праверце іх правільнасць." + +msgid "No entries could be filled from the translation memory." +msgstr "Не атрымалася запоўніць радкі, выкарыстоўваючы памяць перакладаў." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Памяць перакладаў не змяшчае радкоў, падобных на змесціва гэтага файла. Яна " +"падыходзіць толькі для паўаўтаматычнага перакладу пасля таго, як Poedit " +"збярэ дастаткова дадзеных з файлаў, якія вы пераклалі ўручную." + +msgid "Translating" +msgstr "Перакладаецца" + +msgid "Filling missing translations from TM..." +msgstr "Запоўніце прапушчаныя пераклады з памяці перакладаў..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Перакладзены %u радок" +msgstr[1] "Перакладзена %u радкі" +msgstr[2] "Перакладзена %u радкоў" + +msgid "Copy from source text" +msgstr "Скапіяваць зыходны тэкст" + +msgid "Copy from Source Text" +msgstr "Скапіяваць зыходны тэкст" + +msgid "Clear translation" +msgstr "Ачысціць пераклад" + +msgid "Clear Translation" +msgstr "Ачысціць пераклад" + +msgid "Edit comment" +msgstr "Рэдагаваць каментар" + +msgid "Edit Comment" +msgstr "Рэдагаваць каментар" + +msgid "References:" +msgstr "Спасылкі:" + +msgid "Everything" +msgstr "Усё" + +#, c-format +msgid "Form %i" +msgstr "Форма %i" + +msgid "Singular" +msgstr "Адзіночны" + +msgid "Zero" +msgstr "Нуль" + +msgid "One" +msgstr "Адзін" + +msgid "Two" +msgstr "Два" + +msgid "Plural" +msgstr "Множны" + +msgid "Other" +msgstr "Iншае" + +msgid "&Bookmarks" +msgstr "&Закладкі" + +#, c-format +msgid "Set bookmark %i" +msgstr "Дадаць закладку %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Перайсці да закладкі %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Дадаць закладку %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Перайсці да закладкі %i" + +msgid "Hide Sidebar" +msgstr "Схаваць бакавую панэль" + +msgid "Show Sidebar" +msgstr "Паказаць бакавую панэль" + +msgid "Hide Status Bar" +msgstr "Схаваць радок стану" + +msgid "Show Status Bar" +msgstr "Паказаць радок стану" + +msgid "Source text" +msgstr "Зыходны тэкст" + +msgid "Translation" +msgstr "Пераклад" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Зыходны тэкст — %s" + +msgid "unknown language" +msgstr "невядомая мова" + +#, c-format +msgid "Translation — %s" +msgstr "Пераклад — %s" + +msgid "Error:" +msgstr "Памылка:" + +msgid "Source file" +msgstr "Зыходны файл" + +msgid "Source file occurrence:" +msgstr "Размяшчэнне зыходнага файла:" + +msgid "Open in Editor" +msgstr "Адкрыць у рэдактары" + +msgid "Open in editor" +msgstr "Адкрыць у рэдактары" + +msgid "No references for the selected item." +msgstr "Няма спасылкі для выбранага элемента." + +#, c-format +msgid "Error opening file %s!" +msgstr "Памылка адкрыцця файла %s!" + +msgid "Find" +msgstr "Знайсці" + +msgid "Replace" +msgstr "Замяніць" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Налады" + +msgid "Ignore case" +msgstr "Ігнараваць рэгістр" + +msgid "Wrap around" +msgstr "Шукаць бясконца" + +msgid "Whole words only" +msgstr "Толькі цэлыя словы" + +msgid "Find in source texts" +msgstr "Шукаць у зыходных тэкстах" + +msgid "Find in translations" +msgstr "Шукаць у перакладах" + +msgid "Find in comments" +msgstr "Шукаць у перакладах" + +msgid "Close" +msgstr "Закрыць" + +msgid "Replace All" +msgstr "Замяніць усё" + +msgid "Replace all" +msgstr "Замяніць усё" + +msgid "< &Previous" +msgstr "< &Папярэдні" + +msgid "&Next >" +msgstr "&Наступны >" + +msgid "String to find" +msgstr "Радок пошуку" + +msgid "Replacement string" +msgstr "Радок замены" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Не атрымліваецца выканаць праграму: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Код мовы ці назва (напр. en_GB)" + +msgid "Translation Language" +msgstr "Мова перакладу" + +msgid "Language of the translation:" +msgstr "Мова перакладу:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Кіраўнік каталогаў" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Усяго" + +msgid "Untrans" +msgstr "Неперакладзеных" + +msgid "Fuzzy" +msgstr "Недакладны" + +msgid "Bad Tokens" +msgstr "Памылковыя лексемы" + +msgid "Last modified" +msgstr "Апошняе змяненне" + +msgid "Select directory" +msgstr "Выберыце каталог" + +msgid "Directories:" +msgstr "Каталогі:" + +msgid "" +msgstr "<без назвы>" + +msgid "Do you want to delete the project?" +msgstr "Вы жадаеце выдаліць гэты праект?" + +msgid "Confirmation" +msgstr "Пацвярджэнне" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Вы сапраўды жадаеце абнавіць\n" +"усе каталогі ў гэтым праекце?" + +msgid "Information about the translator" +msgstr "Звесткі пра перакладчыка" + +msgid "Name:" +msgstr "Імя:" + +msgid "Your Name" +msgstr "Ваша імя" + +msgid "Email:" +msgstr "Электронная пошта:" + +msgid "your_email@example.com" +msgstr "vasha_elposhta@pryklad.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ваша імя і адрас электроннай пошты будуць выкарыстоўвацца толькі пры " +"пазначэнні апошняга перакладчыка ў загалоўках GNU gettext файлаў." + +msgid "Editing" +msgstr "Рэдагаванне" + +msgid "Automatically compile MO file when saving" +msgstr "Аўтаматычна кампіляваць MO файл пры захаванні" + +msgid "Show summary after catalog update" +msgstr "Паказваць зводку пасля абнаўлення каталога" + +msgid "Check spelling" +msgstr "Правяраць правапіс" + +msgid "Always change focus to text input field" +msgstr "Заўсёды рабіць поле для ўводу тэксту актыўным" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ніколі не рабіць актыўным спіс з радкамі. Калі ўключана, для перамяшчэння з " +"дапамогай клавіятуры неабходна выкарыстоўваць Ctrl+стрэлкі. Гэты параметр " +"таксама дазваляе ўводзіць тэкст імгненна, без папярэдняга націску клавішы " +"TAB для пераключэння фокуса." + +msgid "Appearance" +msgstr "Знешні выгляд" + +msgid "Use custom list font:" +msgstr "Выкарыстоўваць карыстальніцкі шрыфт для спісу:" + +msgid "Use custom text fields font:" +msgstr "Выкарыстоўваць карыстальніцкі тэкст у палях уводу:" + +msgid "Change UI language" +msgstr "Змяніць мову інтэрфейсу" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(патрабуецца Windows 8 ці больш новая версія)" + +msgid "General" +msgstr "Агульныя" + +msgid "Use translation memory" +msgstr "Выкарыстоўваць памяць перакладаў" + +msgid "Learn From Files..." +msgstr "Вывучыць з файлаў..." + +msgid "Learn from files..." +msgstr "Вывучыць з файлаў..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Скінуць" + +msgid "Consult TM when updating from sources" +msgstr "Выкарыстоўваць памяць перакладаў пры абнаўленні з зыходнага кода" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Калі ўключана, Poedit паспрабуе аўтаматычна перакласці\n" +"новыя радкі, выкарыстоўваючы раней назапашаную памяць перакладаў. Калі " +"памяць перакладаў змяшчае\n" +"мала дадзеных, сэнсу ад гэтай функцыі будзе мала. Чым больш перакладаў вы\n" +"рэдагуеце, тым больш будзе памяць перакладаў і тым лепш яна будзе дапамагаць." + +msgid "Stored translations:" +msgstr "Захаваныя пераклады:" + +msgid "Database size on disk:" +msgstr "Памер базы дадзеных на дыску:" + +msgid "Select translation files to import" +msgstr "Выберыце файлы перакладу для імпартавання" + +msgid "Translation Memory" +msgstr "Памяць перакладаў" + +msgid "Importing translations..." +msgstr "Імпартаванне перакладаў..." + +msgid "Finalizing..." +msgstr "Завяршэнне..." + +msgid "Reset translation memory" +msgstr "Скінуць памяць перакладаў" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Вы ўпэўненыя, што хочаце скінуць памяць перакладаў?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Ачыстка памяці перакладаў незваротна выдаліць усе пераклады, якія " +"захоўваюцца ў ёй. Вы не зможаце скасаваць гэтую аперацыю." + +msgid "Cancel" +msgstr "Скасаваць" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Памяць перакладаў (TM)" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Экстрактары выкарыстоўвацца для пошуку радкоў, якія перакладаюцца ў файлах " +"зыходнага кода і вымаюць іх так, каб іх можна было перакласці." + +msgid "New" +msgstr "Новы" + +msgid "Edit" +msgstr "Змяніць" + +msgid "Delete extractor" +msgstr "Выдаліць экстрактар" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Вы ўпэўненыя, што хочаце выдаліць экстрактар \"%s\"?" + +msgid "Extractors" +msgstr "Экстрактары" + +msgid "Accounts" +msgstr "Уліковыя запісы" + +msgid "Automatically check for updates" +msgstr "Аўтаматычна правяраць наяўнасць новых версій" + +msgid "Include beta versions" +msgstr "У тым ліку правяраць бэта-версіі" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Бэта-версіі ўключаюць усе самыя новыя функцыі і ўдасканаленні, але могуць " +"быць менш стабільнымі." + +msgid "Updates" +msgstr "Абнаўленні" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Гэтыя параметры ўплываюць на ўнутранае фарматаванне файлаў PO. Скарэктуйце " +"іх, калі ў вас ёсць адмысловыя патрабаванні, напрыклад, калі вы карыстаецеся " +"сістэмай кантролю версій." + +msgid "Line endings:" +msgstr "Сканчэнне радкоў:" + +msgid "Unix (recommended)" +msgstr "Unix (пажадана)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Перанос:" + +msgid "Preserve formatting of existing files" +msgstr "Захоўваць фарматаванне існуючых файлаў" + +msgid "Advanced" +msgstr "Пашыраныя налады" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Налады %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Перацягніце папкі сюды\n" +"\n" +"ці выкарыстоўвайце кнопку \"+\"" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Перацягніце папкі сюды\n" +"\n" +"ці выкарыстоўвайце кнопку \"+\"" + +msgid "Add Folders..." +msgstr "Дадаць папкі..." + +msgid "Add folders..." +msgstr "Дадаць папкі..." + +msgid "Add Files..." +msgstr "Дадаць файлы..." + +msgid "Add files..." +msgstr "Дадаць файлы..." + +msgid "Add Wildcard..." +msgstr "Дадаць шаблон..." + +msgid "Add wildcard..." +msgstr "Дадаць шаблон..." + +msgid "Paths" +msgstr "Шляхі" + +msgid "Excluded paths" +msgstr "Выключаныя шляхі" + +msgid "Additional keywords" +msgstr "Дадатковыя ключавыя словы" + +msgid "Name of the project the translation is for" +msgstr "Назва праекта перакладу для" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "напрыклад, plurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (пажадана)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Калі ласка, першапачаткова захавайце файл. Да гэтага гэты раздзел не можа " +"быць зменены." + +msgid "Comment:" +msgstr "Каментар:" + +msgid "OK" +msgstr "Добра" + +msgid "C&lear" +msgstr "А&чысціць" + +msgid "Clear the comment" +msgstr "Ачысціць каментар" + +msgid "Create new translations project" +msgstr "Стварыць новы праект перакладу" + +msgid "Edit the project" +msgstr "Рэдагаваць праект" + +msgid "Delete the project" +msgstr "Выдаліць праект" + +msgid "Update all" +msgstr "Абнавіць усё" + +msgid "Update all catalogs in the project" +msgstr "Абнавіць усе каталогі праекта" + +msgid "Edit project" +msgstr "Рэдагаваць праект" + +msgid "Project name:" +msgstr "Назва праекта:" + +msgid "Browse" +msgstr "Агляд" + +msgid "Add directory to the list" +msgstr "Дадаць каталог у спіс" + +msgid "&New..." +msgstr "&Новы..." + +msgid "New from &POT/PO file..." +msgstr "Новы каталог з &POT/PO файла..." + +msgid "New From &POT/PO File..." +msgstr "Новы каталог з &POT/PO файла..." + +msgid "&Open..." +msgstr "&Адкрыць..." + +msgid "Open Recent" +msgstr "Адкрыць нядаўнія файлы" + +msgid "Open from Crowdin..." +msgstr "Адкрыць з Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Адкрыць з Crowdin..." + +msgid "&Close" +msgstr "Закрыць" + +msgid "&Save" +msgstr "&Захаваць" + +msgid "Save &as..." +msgstr "Захаваць &як..." + +msgid "Save &As..." +msgstr "Захаваць &як..." + +msgid "Compile to MO..." +msgstr "Кампіляваць у MO файл..." + +msgid "E&xport as HTML..." +msgstr "Эк&спартаваць як HTML..." + +msgid "Check for updates..." +msgstr "Праверыць наяўнасць абнаўлення..." + +msgid "&Preferences..." +msgstr "&Налады..." + +msgid "Catalogs &manager" +msgstr "&Менеджар каталогаў" + +msgid "Catalogs &Manager" +msgstr "&Менеджар каталогаў" + +msgid "E&xit" +msgstr "В&ыхад" + +msgid "Quit" +msgstr "Выйсці" + +msgid "Copy from singular" +msgstr "Капіяваць форму адзінага ліку" + +msgid "Copy From Singular" +msgstr "Капіяваць форму адзінага ліку" + +msgid "Translation is &fuzzy" +msgstr "&Недакладны пераклад" + +msgid "Translation Is &Fuzzy" +msgstr "Недакладны &пераклад" + +msgid "Edit &comment" +msgstr "Рэдагаваць &каментар" + +msgid "Edit &Comment" +msgstr "Змяніць &каментар" + +msgid "Suggestions" +msgstr "Прапановы" + +msgid "&Show references" +msgstr "&Паказаць спасылкі" + +msgid "&Show References" +msgstr "&Паказваць спасылкі" + +msgid "&Find..." +msgstr "&Знайсці..." + +msgid "Replace..." +msgstr "Замяніць..." + +msgid "Find next" +msgstr "Знайсці наступны" + +msgid "Find previous" +msgstr "Знайсці папярэдні" + +msgid "Find and Replace..." +msgstr "Знайсці і замяніць..." + +msgid "Find Next" +msgstr "Знайсці наступны" + +msgid "Find Previous" +msgstr "Знайсці папярэдні" + +msgid "&Preferences" +msgstr "&Налады" + +msgid "Display entry &IDs" +msgstr "Паказваць ну&мары радкоў" + +msgid "Display Entry &IDs" +msgstr "Паказваць ну&мары радкоў" + +msgid "Sort by &file order" +msgstr "Сартаваць як у &файле" + +msgid "Sort by &File Order" +msgstr "Сартаваць як у &файле" + +msgid "Sort by &source" +msgstr "Сартаваць як у &арыгінале" + +msgid "Sort by &Source" +msgstr "Сартаваць як у &арыгінале" + +msgid "Sort by &translation" +msgstr "Сартаваць як у &перакладзе" + +msgid "Sort by &Translation" +msgstr "Сартаваць як у &перакладзе" + +msgid "&Group by context" +msgstr "&Групаваць па кантэксце" + +msgid "&Group By Context" +msgstr "&Групаваць па кантэксце" + +msgid "Entries with errors first" +msgstr "Першымі адлюстроўваць запісы з памылкамі" + +msgid "Entries with Errors First" +msgstr "Першымі адлюстроўваць запісы з памылкамі" + +msgid "&Untranslated entries first" +msgstr "Спачатку &неперакладзеныя запісы" + +msgid "&Untranslated Entries First" +msgstr "Спачатку &неперакладзеныя запісы" + +msgid "Show sidebar" +msgstr "Паказаць бакавую панэль" + +msgid "Show status bar" +msgstr "Паказаць радок стану" + +msgid "C&atalog" +msgstr "К&аталог" + +msgid "&Update from sources" +msgstr "&Абнавіць з зыходнага кода" + +msgid "&Update from Sources" +msgstr "&Абнавіць з зыходнага кода" + +msgid "Update from &POT file..." +msgstr "Абнавіць з файла &POT..." + +msgid "Update from &POT File..." +msgstr "Абнавіць з файла &POT..." + +msgid "Sync with Crowdin" +msgstr "Сінхранізаваць з Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Запоўніць прапушчаныя пераклады з &памяці перакладаў..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Запоўніць прапушчаныя пераклады з &памяці перакладаў..." + +msgid "&Purge deleted translations" +msgstr "&Знішчыць вылучаныя пераклады" + +msgid "&Purge Deleted Translations" +msgstr "&Знішчыць вылучаныя пераклады" + +msgid "&Validate translations" +msgstr "&Праверыць пераклад" + +msgid "&Validate Translations" +msgstr "&Праверыць пераклад" + +msgid "&Properties..." +msgstr "&Уласцівасці..." + +msgid "&Done and next" +msgstr "&Скончыць і перайсці да наступнага" + +msgid "&Done and Next" +msgstr "&Скончыць і перайсці да наступнага" + +msgid "&Previous translation" +msgstr "&Папярэдні пераклад" + +msgid "&Previous Translation" +msgstr "&Папярэдні пераклад" + +msgid "&Next translation" +msgstr "&Наступны пераклад" + +msgid "&Next Translation" +msgstr "&Наступны пераклад" + +msgid "P&revious unfinished" +msgstr "Па&пярэдні незавершаны" + +msgid "P&revious Unfinished" +msgstr "Па&пярэдні незавершаны" + +msgid "Ne&xt unfinished" +msgstr "На&ступны незавершаны" + +msgid "Ne&xt Unfinished" +msgstr "На&ступны незавершаны" + +msgid "Previous plural form" +msgstr "Папярэдняя форма множнага ліку" + +msgid "Previous Plural Form" +msgstr "Папярэдняя форма множнага ліку" + +msgid "Next plural form" +msgstr "Наступная форма множнага ліку" + +msgid "Next Plural Form" +msgstr "Наступная форма множнага ліку" + +msgid "&Online help" +msgstr "&Сеціўная даведка" + +msgid "&Online Help" +msgstr "&Сеціўная даведка" + +msgid "&GNU gettext manual" +msgstr "&Дакументацыя GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Дакументацыя GNU gettext" + +msgid "&About Poedit" +msgstr "&Пра Poedit" + +msgid "&About" +msgstr "&Пра праграму" + +msgid "Extractor setup" +msgstr "Налады экстрактара" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Спіс пышырэнняў, падзеленых кропкай з коскай (напрыклад *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Выклік:" + +msgid "Command to extract translations:" +msgstr "Каманда для вымання перакладу:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Дадзеная каманда выкарыстоўваецца, каб запусціць экстрактар.\n" +"%o абазначае назву выходнага файла, %K - спіс\n" +"ключавых слоў, %F - спіс уваходных файлаў,\n" +"%C - кадаванне (гл. ніжэй)." + +msgid "An item in keywords list:" +msgstr "Элемент у спісе ключавых слоў:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Гэта будзе дададзена ў камандны радок для кожнага\n" +"ключавога слова. %k азначае ключавое слова." + +msgid "An item in input files list:" +msgstr "Элемент у спісе ўваходных файлаў:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Гэта будзе дадзена ў камандны радок для\n" +"кожнага ўваходнага файла. %f азначае назву файла." + +msgid "Source code charset:" +msgstr "Кадаванне зыходнага кода:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Гэта будзе дададзена ў камандны радок, толькі калі было азначана\n" +"кадаванне зыходнага файла. %c азначае кадаванне." + +msgid "Catalog properties" +msgstr "Уласцівасці каталога" + +msgid "Project name and version:" +msgstr "Назва і версія праекта:" + +msgid "Plural Forms:" +msgstr "Множныя Формы:" + +msgid "Use default rules for this language" +msgstr "Выкарыстоўваць правілы па змаўчанні для гэтай мовы" + +msgid "Use custom expression" +msgstr "Выкарыстоўваць выраз карыстальніка" + +msgid "Learn about plural forms" +msgstr "Даведацца больш пра формы множнага ліку" + +msgid "Charset:" +msgstr "Кадаванне:" + +msgid "Team:" +msgstr "Каманда:" + +msgid "Team's email address:" +msgstr "Адрас электроннай пошты каманды:" + +msgid "Translation properties" +msgstr "Уласцівасці перакладу" + +msgid "Sources paths" +msgstr "Шлях да зыходнага файла" + +msgid "Extract text from source files in the following directories:" +msgstr "Вымаць тэкст з зыходных файлаў у наступных каталогах:" + +msgid "Base path:" +msgstr "Базавы шлях:" + +msgid "Sources keywords" +msgstr "Ключавыя словы зыходных файлаў" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Выкарыстоўвайце гэтыя ключавыя словы (імёны функцый) для распазнання\n" +"радкоў, якія перакладаюцца ў зыходных файлах:" + +msgid "Learn about gettext keywords" +msgstr "Даведацца больш пра ключавыя словы gettext" + +msgid "Update summary" +msgstr "Абнавіць зводку" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Гэтыя радкі знойдзены у зыходных файлах, але яны адсутнічаюць у каталозе.\n" +"Poedit зараз дадасць іх у каталог." + +msgid "New strings" +msgstr "Новыя радкі" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Больш няма гэтых радкоў у зыходных файлах.\n" +"Poedit зараз выдаліць іх з каталога." + +msgid "Obsolete strings" +msgstr "Састарэлыя радкі" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 новых, 0 састарэлых)" + +msgid "Open" +msgstr "Адчыніць" + +msgid "Save catalog" +msgstr "Захаваць каталог" + +msgid "Validate" +msgstr "Праверыць" + +msgid "Check for errors in the translation" +msgstr "Праверыць наяўнасць памылак у перакладзе" + +msgid "Update" +msgstr "Абнавіць" + +msgid "Update catalog - synchronize it with sources" +msgstr "Абнавіць каталог - сінхранізаваць яго з зыходнымі файламі" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Уключана, калі выбраны радок змяшчае недакладны пераклад" + +msgid "Show or hide the sidebar" +msgstr "Паказаць ці схаваць бакавую панэль" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Папярэдні зыходны тэкст:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Стары зыходны тэкст (да абнаўлення), якому адпавядае недакладны пераклад." + +msgid "Notes for translators:" +msgstr "Заўвагі для перакладчыка:" + +msgid "Add comment" +msgstr "Дадаць каментар" + +msgid "Add Comment" +msgstr "Дадаць каментар" + +msgid "Translation suggestions:" +msgstr "Варыянты перакладу:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Супадзенняў не знойдзена" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Супадзенняў не знойдзена" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Гэты радок быў знойдзены ў памяці перакладаў Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Новыя: %i, састарэлыя: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Імпартаванне перакладаў: %d" + +msgid "Poedit Update" +msgstr "Абнаўленне Poedit" + +msgid "Preparing migration..." +msgstr "Падрыхтоўка да міграцыі..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Стан завяршэння міграцыі: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit патрабуецца канвертаваць вашу памяць перакладаў у новы фармат." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Гэта неабходна зрабіць перад запускам Poedit. Калі ў вас захавана шмат " +"перакладаў, то на гэта можа спатрэбіцца некалькі хвілін, але звычайна гэта " +"выконваецца хутчэй." + +msgid "Proceed" +msgstr "Працягнуць" + +msgid "Translation memory migration failed." +msgstr "Не атрымалася выканаць міграцыю памяці перакладаў." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Дадзеныя памяці перакладаў не атрымалася мігрыраваць. Адбылася памылка:\n" +"\n" +"%s\n" +"Дашліце гэту памылку на адрас help@poedit.net, і мы паспрабуем выправіць яе." + +msgid "Cannot create temporary directory." +msgstr "Не атрымалася стварыць часовы каталог." + +msgid "Welcome to Poedit" +msgstr "Сардэчна запрашаем у Poedit" + +msgid "Edit a translation" +msgstr "Змяніць пераклад" + +msgid "Open an existing PO file and edit the translation." +msgstr "Адкрыць існуючы PO-файл і змяніць пераклад." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Стварэнне перакладу на падставе існуючага PO-файла ці POT-шаблона." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Супольная праца над перакладам з Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Спампаваць файл з праекта Crowdin, перакласці яго і сінхранізаваць змены " +"назад." + +msgid "What is Crowdin?" +msgstr "Што такое Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Вельмі дзіўна, але пераклад адсутнічае." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Запісы, якія перакладаюцца не дадаюцца ўручную ў сістэму Gettext, а " +"аўтаматычна вымаюцца\n" +"з зыходнага кода. Такім чынам, забяспечваецца іх актуальнасць і " +"дакладнасць.\n" +"Перакладчыкі звычайна працуюць з PO-файламі (POT-шаблоны), якія падрыхтаваў " +"для іх распрацоўшчык." + +msgid "(Learn more about GNU gettext)" +msgstr "(Даведацца больш пра GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Самы просты спосаб перакласці гэты каталог - абнавіць яго з POT:" + +msgid "Update from POT" +msgstr "Абнавіць з POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Выманне радкоў для перакладу з існуючага POT-шаблона." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Вы таксама можаце выняць радкі для перакладу непасрэдна з зыходнага кода:" + +msgid "Extract from sources" +msgstr "Выняць з зыходнага кода" + +msgid "Configure source code extraction in Properties." +msgstr "Наладзьце выманне зыходнага кода ў раздзеле \"Уласцівасці\"." + +msgid "Sync" +msgstr "Сінхранізацыя" + +msgid "Synchronize the translation with Crowdin" +msgstr "Сінхранізаваць пераклад з Crowdin" diff --git a/locales/be@latin.mo b/locales/be@latin.mo new file mode 100644 index 0000000000000000000000000000000000000000..14b86e072dc0269b790d2a6804dca3c0a6bf5039 GIT binary patch literal 9593 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 w8Pwy~p^_SKs{jB1 literal 0 HcmV?d00001 diff --git a/locales/be@latin.po b/locales/be@latin.po new file mode 100644 index 0000000..a087ee9 --- /dev/null +++ b/locales/be@latin.po @@ -0,0 +1,2004 @@ +# Belarusian latin translation of poedit +# Alaksandar Navicki , 2007 +msgid "" +msgstr "" +"Project-Id-Version: Poedit 1.6\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2008-03-03 14:41+0200\n" +"Last-Translator: Alaksandar Navicki \n" +"Language-Team: \n" +"Language: be@latin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" + +msgid "Hide this notification message" +msgstr "" + +msgid "Don't Show Again" +msgstr "" + +msgid "Don't show again" +msgstr "" + +#, fuzzy, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i radkoÅ­ fajłu '%s' nie byli adčytanyja pravilna." +msgstr[1] "%i radkoÅ­ fajłu '%s' nie byli adčytanyja pravilna." +msgstr[2] "%i radkoÅ­ fajłu '%s' nie byli adčytanyja pravilna." + +#, fuzzy, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%u radok fajłu '%s' niapravilny (niapravilnyja źviestki %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Zdefarmavanaja Å¡apka: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"PaÅ¡kodžany fajł katalohu: adzinočny lik z msgstr užyty razam z msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "PaÅ¡kodžany fajł katalohu: množny lik z msgstr užyty biez msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Zdarylisia pamyłki padčas zahruzki katalohu, i tamu moža nie stavać častki " +"źviestak, albo jany mohuć być niapravilnymi." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Niemahčyma zahruzić fajł %s. Vierahodna, jon paÅ¡kodžany." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Fajł '%s' tolki dla čytańnia i nia moža być zapisany.\n" +"ZapiÅ¡y jaho pad inÅ¡aj nazvaj." + +#, c-format +msgid "Couldn't save file %s." +msgstr "" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" + +#, fuzzy, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Hety kataloh nia moh być zapisany z naboram znakaÅ­\n" +"'%s', abranym u naładach katalohu. Zamiest hetaha jon byÅ­\n" +"zapisany Å­ farmacie UTF-8, i nałady taksama adpaviedna zmadyfikavanyja." + +msgid "Error saving catalog" +msgstr "Pamyłka pry zapisie katalohu" + +#, fuzzy +msgid "PO Translation Files" +msgstr "Pamiać pierakładaÅ­" + +#, fuzzy +msgid "POT Translation Templates" +msgstr "Pamiać pierakładaÅ­" + +msgid "All Translation Files" +msgstr "" + +msgid "Merging differences..." +msgstr "Spałučeńnie roźnic..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nie źjaÅ­lajecca pravilnym fajłam POT." + +msgid "(Use default language)" +msgstr "(Užyj zmoŭčanuju movu)" + +msgid "Select your preferred language" +msgstr "" + +msgid "Language selection" +msgstr "Vybar movy" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Kab źmieny byli zachavanyja, treba Å­ruchomić prahramu Poedit znoÅ­." + +msgid "Downloading translations is disabled in this project." +msgstr "" + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid "Sign Out" +msgstr "" + +msgid "Sign out" +msgstr "" + +msgid "Waiting for authentication…" +msgstr "" + +msgid "Updating user information…" +msgstr "" + +msgid "Signed in as:" +msgstr "" + +msgid "Learn More About Crowdin" +msgstr "" + +msgid "Learn more about Crowdin" +msgstr "" + +msgid "Sign in to Crowdin" +msgstr "" + +msgid "Open Crowdin translation" +msgstr "" + +msgid "Project:" +msgstr "" + +msgid "Language:" +msgstr "Mova:" + +msgid "File:" +msgstr "" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "" + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "" + +msgid "Learn more" +msgstr "" + +msgid "Learn More" +msgstr "" + +#, c-format +msgid "Failed command: %s" +msgstr "Pamyłka zahadu: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Nie Å­dałosia spałuvyć katalahi gettext." + +msgid "Scanning files..." +msgstr "Skanavańnie fajłaÅ­..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "ApracoÅ­ka %s fajłaÅ­..." + +msgid "Failed to load extracted catalog." +msgstr "Nie Å­dałosia zahruzić raspakavany katalah." + +msgid "&Help" +msgstr "&Dapamoha" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +#, fuzzy +msgid "Error opening file" +msgstr "Pamyłka pry adčynieńni fajłu %s!" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "Adčyni kataloh" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fajł '%s' nie isnuje." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, fuzzy, c-format +msgid "About %s" +msgstr "Pra Poedit" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, fuzzy, c-format +msgid "Version %s" +msgstr "versija" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "" + +#, fuzzy +msgid "Catalogs Manager" +msgstr "&KiraÅ­nik katalohaÅ­" + +msgid "Check for Updates..." +msgstr "" + +msgid "&Edit" +msgstr "&Redahuj" + +msgid "Undo" +msgstr "Viarni" + +msgid "Redo" +msgstr "" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "Vydal" + +msgid "Spelling and Grammar" +msgstr "" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "" + +#, fuzzy +msgid "Transformations" +msgstr "Pierakład" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "" + +msgid "Start Speaking" +msgstr "" + +msgid "Stop Speaking" +msgstr "" + +msgid "&View" +msgstr "&Vyhlad" + +msgid "Enter Full Screen" +msgstr "" + +#, fuzzy +msgid "Window" +msgstr "Windows" + +msgid "Minimize" +msgstr "" + +msgid "Zoom" +msgstr "" + +msgid "Bring All to Front" +msgstr "" + +#, fuzzy +msgid "PO Translation" +msgstr "Pierakład" + +msgid "The file cannot be opened." +msgstr "" + +msgid "Invalid file" +msgstr "" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +#, fuzzy +msgid "&Undo" +msgstr "Viarni" + +msgid "&Redo" +msgstr "" + +msgid "Cu&t" +msgstr "" + +msgid "Cut" +msgstr "" + +msgid "Copy" +msgstr "" + +msgid "&Paste" +msgstr "" + +msgid "Paste" +msgstr "" + +#, fuzzy +msgid "&Delete" +msgstr "Vydal" + +msgid "Select &All" +msgstr "" + +msgid "Select All" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Niemahčyma puścić bolÅ¡ za adzin fajł na vakno Poedit." + +#, fuzzy, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fajł '%s' nie źjaÅ­lajecca kataloham paviedamleńniaÅ­." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fajł" + +msgid "&Go" +msgstr "" + +#, fuzzy +msgid "Source text:" +msgstr "Kryničny fajł" + +msgid "Singular:" +msgstr "Adzinočny lik:" + +msgid "Plural:" +msgstr "Množny lik:" + +#, fuzzy +msgid "Translation:" +msgstr "Pierakład" + +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 "" + +msgid "Create New Translation" +msgstr "" + +#, fuzzy +msgid "Create new translation" +msgstr "Stvary novy prajekt pierakładaÅ­" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Kataloh zmadyfikavany. Zapisać źmieny?" + +msgid "Save changes" +msgstr "ZapiÅ¡y źmieny" + +msgid "Your changes will be lost if you don't save them." +msgstr "" + +msgid "Save" +msgstr "ZapiÅ¡y" + +msgid "Don't save" +msgstr "" + +msgid "Don't Save" +msgstr "" + +msgid "Save as..." +msgstr "ZapiÅ¡y jak..." + +msgid "Compile to..." +msgstr "" + +#, fuzzy +msgid "Compiled Translation Files" +msgstr "Pierakład" + +msgid "Export as..." +msgstr "Ekspartuj jak..." + +msgid "HTML Files" +msgstr "" + +msgid "Open catalog template" +msgstr "Adčyni Å¡ablon katalohu" + +#, fuzzy +msgid "Updating catalog" +msgstr "Aktualizacyja katalohu..." + +#, fuzzy +msgid "Source code not available." +msgstr "Kadavańnie kryničnaha kodu:" + +#, fuzzy +msgid "Updating failed" +msgstr "Aktualizacyja katalohu..." + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Zapisy Å­ katalohu vierahodna niapravilnyja." + +#, fuzzy +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Nie Å­dałosia aktualizavać kataloh. Kab paznajomicca z padrabiaznaściami, " +"klikni 'Bolej>>'." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, fuzzy +msgid "Validation results" +msgstr "Pamiać pierakładaÅ­" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +#, fuzzy +msgid "No problems with the translation found." +msgstr "Spasyłak da hetaj frazy nia znojdziena." + +#, fuzzy, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Pierakład &sumniÅ­ny" +msgstr[1] "Pierakład &sumniÅ­ny" +msgstr[2] "Pierakład &sumniÅ­ny" + +#, fuzzy +msgid "The translation is ready for use." +msgstr "Pierakład &sumniÅ­ny" + +#, fuzzy +msgid "Context:" +msgstr "Kryničny fajł" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +#, fuzzy +msgid "Set Language" +msgstr "Abiary movu" + +#, fuzzy +msgid "Set language" +msgstr "Abiary movu" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "" + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, fuzzy, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Pamyłka pry zahruzcy fajłu katalohu paviedamleńniaÅ­ '" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr " (zmadyfikavany)" + +msgid "Go" +msgstr "" + +#, fuzzy, c-format +msgid "Failed to update translation memory: %s" +msgstr "Aktualizuj pamiać pierakładaÅ­" + +msgid "Purge deleted translations" +msgstr "Ačyść ad nieŭžyvanych pierakładaÅ­" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" + +#, fuzzy +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"SapraÅ­dy vydalić usie nieŭžyvanyja pierakłady z katalohu?\n" +"Kali tak, daviadziecca pierakładać ich jašče raz, kali raptam u budučyni ich " +"znoÅ­ dadaduć." + +msgid "Keep" +msgstr "" + +msgid "Purge" +msgstr "" + +#, fuzzy +msgid "Fill missing translations from TM" +msgstr "Znajdzi Å­ pierakładach" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, fuzzy, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "Aktualizuj pamiać pierakładaÅ­" +msgstr[1] "Aktualizuj pamiać pierakładaÅ­" +msgstr[2] "Aktualizuj pamiać pierakładaÅ­" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +#, fuzzy +msgid "Translating" +msgstr "Pierakład" + +#, fuzzy +msgid "Filling missing translations from TM..." +msgstr "Znajdzi Å­ pierakładach" + +#, fuzzy, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "AÅ­tamatyčna pierakładziena %u fraz" +msgstr[1] "AÅ­tamatyčna pierakładziena %u fraz" +msgstr[2] "AÅ­tamatyčna pierakładziena %u fraz" + +#, fuzzy +msgid "Copy from source text" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "Copy from Source Text" +msgstr "" + +#, fuzzy +msgid "Clear translation" +msgstr "Pierakład" + +#, fuzzy +msgid "Clear Translation" +msgstr "Pierakład" + +msgid "Edit comment" +msgstr "Redahuj kamentar" + +#, fuzzy +msgid "Edit Comment" +msgstr "Redahuj &kamentar" + +msgid "References:" +msgstr "Spasyłki:" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "&Bookmarks" +msgstr "&Zakładki" + +#, fuzzy, c-format +msgid "Set bookmark %i" +msgstr "Paznač zakładku %i\tAlt-%i" + +#, fuzzy, c-format +msgid "Go to bookmark %i" +msgstr "Pierajdzi da zakładki %i\tCtrl-%i" + +#, fuzzy, c-format +msgid "Set Bookmark %i" +msgstr "Paznač zakładku %i\tAlt-%i" + +#, fuzzy, c-format +msgid "Go to Bookmark %i" +msgstr "Pierajdzi da zakładki %i\tCtrl-%i" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +#, fuzzy +msgid "Source text" +msgstr "Kryničny fajł" + +msgid "Translation" +msgstr "Pierakład" + +msgid "ID" +msgstr "" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "" + +#, fuzzy, c-format +msgid "Translation — %s" +msgstr "Pierakład" + +msgid "Error:" +msgstr "" + +msgid "Source file" +msgstr "Kryničny fajł" + +#, fuzzy +msgid "Source file occurrence:" +msgstr "Kryničny fajł" + +#, fuzzy +msgid "Open in Editor" +msgstr "Redaktar" + +#, fuzzy +msgid "Open in editor" +msgstr "Redaktar" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Pamyłka pry adčynieńni fajłu %s!" + +#, fuzzy +msgid "Find" +msgstr "Znajdzi..." + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "Tolki cełyja słovy" + +msgid "Find in source texts" +msgstr "" + +#, fuzzy +msgid "Find in translations" +msgstr "Pierakład" + +msgid "Find in comments" +msgstr "Znajdzi Å­ kamentaroch" + +#, fuzzy +msgid "Close" +msgstr "Za&čyni" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +#, fuzzy +msgid "< &Previous" +msgstr "< Papiaredni" + +#, fuzzy +msgid "&Next >" +msgstr "Nastupny >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, fuzzy, c-format +msgid "Cannot execute program: %s" +msgstr "Niemahčyma Å­ruchomić prahramu: " + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +#, fuzzy +msgid "Translation Language" +msgstr "Pierakład" + +#, fuzzy +msgid "Language of the translation:" +msgstr "Ačyść ad nieŭžyvanych pierakładaÅ­" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit – KiraÅ­nik katalohaÅ­" + +msgid "Catalog" +msgstr "Kataloh" + +msgid "Total" +msgstr "Usiaho" + +msgid "Untrans" +msgstr "Niepierakł" + +msgid "Fuzzy" +msgstr "SumniÅ­ny" + +msgid "Bad Tokens" +msgstr "Drennyja tokeny" + +msgid "Last modified" +msgstr "NiadaÅ­na zmadyfikavana" + +msgid "Select directory" +msgstr "Abiary kataloh" + +msgid "Directories:" +msgstr "Katalohi:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "SapraÅ­dy vydalić hety prajekt?" + +msgid "Confirmation" +msgstr "Paćvierdžańnie" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Ty sapraÅ­dy chočaÅ¡ masava aktualizavać\n" +"usie katalohi Å­ hetym prajekcie?" + +#, fuzzy +msgid "Information about the translator" +msgstr "Ačyść ad nieŭžyvanych pierakładaÅ­" + +msgid "Name:" +msgstr "" + +#, fuzzy +msgid "Your Name" +msgstr "Imia j proźvišča:" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +#, fuzzy +msgid "Editing" +msgstr "Redahuj" + +#, fuzzy +msgid "Automatically compile MO file when saving" +msgstr "AÅ­tamatyčna stvaraj fajł .mo pry zapisie" + +msgid "Show summary after catalog update" +msgstr "Pakazvaj padsumavańni paśla aktualizacyi katalohu" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "Zaŭždy pierachodź da pola Å­vodu tekstu" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nikoli nie davaj fokus śpisu radkoÅ­. Kali Å­klučana, treba karystacca Ctrl" +"+strełkami dla navihacyi z klavijatury, ale možna taksama Å­vodzić tekst " +"adrazu, biez naciskańnia Tab, kab źmianić fokus." + +msgid "Appearance" +msgstr "" + +#, fuzzy +msgid "Use custom list font:" +msgstr "Užyj ułasny Å¡ryft dla tekstavych paloÅ­" + +#, fuzzy +msgid "Use custom text fields font:" +msgstr "Užyj ułasny Å¡ryft dla tekstavych paloÅ­" + +msgid "Change UI language" +msgstr "Źmiani movu interfejsu" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +#, fuzzy +msgid "Use translation memory" +msgstr "Aktualizuj pamiać pierakładaÅ­" + +#, fuzzy +msgid "Learn From Files..." +msgstr "ApracoÅ­ka %s fajłaÅ­..." + +#, fuzzy +msgid "Learn from files..." +msgstr "ApracoÅ­ka %s fajłaÅ­..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +#, fuzzy +msgid "Stored translations:" +msgstr "SumniÅ­ny pierakład" + +msgid "Database size on disk:" +msgstr "" + +#, fuzzy +msgid "Select translation files to import" +msgstr "Aktualizuj pamiać pierakładaÅ­" + +msgid "Translation Memory" +msgstr "Pamiać pierakładaÅ­" + +#, fuzzy +msgid "Importing translations..." +msgstr "AÅ­tamatyčnyja pierakłady:" + +msgid "Finalizing..." +msgstr "" + +#, fuzzy +msgid "Reset translation memory" +msgstr "Aktualizuj pamiać pierakładaÅ­" + +#, fuzzy +msgid "Are you sure you want to reset the translation memory?" +msgstr "Aktualizuj pamiać pierakładaÅ­" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Anuluj" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Novy" + +msgid "Edit" +msgstr "Redahuj" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +#, fuzzy +msgid "Extractors" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "Accounts" +msgstr "" + +#, fuzzy +msgid "Automatically check for updates" +msgstr "AÅ­tamatyčna praviaraj najaÅ­naść novaj versii Poedit" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +#, fuzzy +msgid "Updates" +msgstr "Aktualizuj" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +#, fuzzy +msgid "Line endings:" +msgstr "Farmat zakančeńnia radkoÅ­:" + +msgid "Unix (recommended)" +msgstr "" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Ściežki" + +msgid "Excluded paths" +msgstr "" + +#, fuzzy +msgid "Additional keywords" +msgstr "Abjekt u śpisie klučavych słovaÅ­:" + +#, fuzzy +msgid "Name of the project the translation is for" +msgstr "Spasyłak da hetaj frazy nia znojdziena." + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "Kamentar:" + +msgid "OK" +msgstr "OK" + +#, fuzzy +msgid "C&lear" +msgstr "Vyčyść" + +msgid "Clear the comment" +msgstr "Vyčyść hety kamentar" + +msgid "Create new translations project" +msgstr "Stvary novy prajekt pierakładaÅ­" + +msgid "Edit the project" +msgstr "Redahuj prajekt" + +msgid "Delete the project" +msgstr "Vydal prajekt" + +msgid "Update all" +msgstr "Aktualizuj usie" + +msgid "Update all catalogs in the project" +msgstr "Aktualizuj usie katalohi Å­ prajekcie" + +msgid "Edit project" +msgstr "Redahuj prajekt" + +msgid "Project name:" +msgstr "Nazva prajektu:" + +msgid "Browse" +msgstr "Prahladaj" + +msgid "Add directory to the list" +msgstr "Dadaj kataloh u śpis" + +#, fuzzy +msgid "&New..." +msgstr "&Novy kataloh..." + +#, fuzzy +msgid "New from &POT/PO file..." +msgstr "Aktualizuj z fajłu &POT..." + +#, fuzzy +msgid "New From &POT/PO File..." +msgstr "Aktualizuj z fajłu &POT..." + +msgid "&Open..." +msgstr "&Adčyni..." + +#, fuzzy +msgid "Open Recent" +msgstr "Adčyni kataloh" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "Za&čyni" + +msgid "&Save" +msgstr "&ZapiÅ¡y" + +msgid "Save &as..." +msgstr "ZapiÅ¡y &jak..." + +#, fuzzy +msgid "Save &As..." +msgstr "ZapiÅ¡y &jak..." + +msgid "Compile to MO..." +msgstr "" + +#, fuzzy +msgid "E&xport as HTML..." +msgstr "Ekspartuj jak..." + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&Ułasnyja nałady..." + +msgid "Catalogs &manager" +msgstr "&KiraÅ­nik katalohaÅ­" + +#, fuzzy +msgid "Catalogs &Manager" +msgstr "&KiraÅ­nik katalohaÅ­" + +#, fuzzy +msgid "E&xit" +msgstr "Redahuj" + +msgid "Quit" +msgstr "" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Pierakład &sumniÅ­ny" + +#, fuzzy +msgid "Translation Is &Fuzzy" +msgstr "Pierakład &sumniÅ­ny" + +msgid "Edit &comment" +msgstr "Redahuj &kamentar" + +#, fuzzy +msgid "Edit &Comment" +msgstr "Redahuj &kamentar" + +#, fuzzy +msgid "Suggestions" +msgstr "Pamiać pierakładaÅ­" + +msgid "&Show references" +msgstr "&Pakazvaj spasyłki" + +#, fuzzy +msgid "&Show References" +msgstr "&Pakazvaj spasyłki" + +msgid "&Find..." +msgstr "&Znajdzi..." + +msgid "Replace..." +msgstr "" + +#, fuzzy +msgid "Find next" +msgstr "Znajdzi Å­ kamentaroch" + +#, fuzzy +msgid "Find previous" +msgstr "< Papiaredni" + +msgid "Find and Replace..." +msgstr "" + +#, fuzzy +msgid "Find Next" +msgstr "Znajdzi Å­ kamentaroch" + +#, fuzzy +msgid "Find Previous" +msgstr "< Papiaredni" + +#, fuzzy +msgid "&Preferences" +msgstr "Nałady" + +#, fuzzy +msgid "Display entry &IDs" +msgstr "Pakazvaj &numary radkoÅ­" + +#, fuzzy +msgid "Display Entry &IDs" +msgstr "Pakazvaj &dvukośsi" + +msgid "Sort by &file order" +msgstr "" + +msgid "Sort by &File Order" +msgstr "" + +#, fuzzy +msgid "Sort by &source" +msgstr "Pierakład" + +msgid "Sort by &Source" +msgstr "" + +#, fuzzy +msgid "Sort by &translation" +msgstr "SumniÅ­ny pierakład" + +#, fuzzy +msgid "Sort by &Translation" +msgstr "Pierakład" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "" + +msgid "&Untranslated Entries First" +msgstr "" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "K&ataloh" + +msgid "&Update from sources" +msgstr "&Aktualizuj z krynicaÅ­" + +#, fuzzy +msgid "&Update from Sources" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "Update from &POT file..." +msgstr "Aktualizuj z fajłu &POT..." + +#, fuzzy +msgid "Update from &POT File..." +msgstr "Aktualizuj z fajłu &POT..." + +msgid "Sync with Crowdin" +msgstr "" + +#, fuzzy +msgid "Fill missing translations from &TM..." +msgstr "Znajdzi Å­ pierakładach" + +#, fuzzy +msgid "Fill Missing Translations from &TM..." +msgstr "Znajdzi Å­ pierakładach" + +msgid "&Purge deleted translations" +msgstr "&Ačyść ad nieŭžyvanych pierakładaÅ­" + +#, fuzzy +msgid "&Purge Deleted Translations" +msgstr "&Ačyść ad nieŭžyvanych pierakładaÅ­" + +#, fuzzy +msgid "&Validate translations" +msgstr "&Pryciemnieny śpis pierakładaÅ­" + +#, fuzzy +msgid "&Validate Translations" +msgstr "Pierakład" + +#, fuzzy +msgid "&Properties..." +msgstr "&Ułasnyja nałady..." + +#, fuzzy +msgid "&Done and next" +msgstr "Znajdzi Å­ kamentaroch" + +msgid "&Done and Next" +msgstr "" + +#, fuzzy +msgid "&Previous translation" +msgstr "Pierakład" + +#, fuzzy +msgid "&Previous Translation" +msgstr "Pierakład" + +#, fuzzy +msgid "&Next translation" +msgstr "Pierakład" + +#, fuzzy +msgid "&Next Translation" +msgstr "Pierakład" + +msgid "P&revious unfinished" +msgstr "" + +msgid "P&revious Unfinished" +msgstr "" + +msgid "Ne&xt unfinished" +msgstr "" + +msgid "Ne&xt Unfinished" +msgstr "" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "" + +msgid "&Online Help" +msgstr "" + +#, fuzzy +msgid "&GNU gettext manual" +msgstr "Dakumentacyja GNU gettext" + +#, fuzzy +msgid "&GNU gettext Manual" +msgstr "Dakumentacyja GNU gettext" + +#, fuzzy +msgid "&About Poedit" +msgstr "&Pra..." + +#, fuzzy +msgid "&About" +msgstr "&Pra..." + +#, fuzzy +msgid "Extractor setup" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Śpis paÅ¡yreńniaÅ­, padzielenych znakam ';' (naprykład: *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Vyklik:" + +#, fuzzy +msgid "Command to extract translations:" +msgstr "AÅ­tamatyčnyja pierakłady:" + +#, fuzzy +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Heta zahad, jaki vykarystoÅ­vajecca dziela Å­ruchamleńnia analizatara.\n" +"%o aznačaje nazvu vyjściovaha fajłu, %K śpis klučavych słovaÅ­,\n" +"%F śpis uvachodnych fajłaÅ­, %C paznačaje kadavańnie (hladzi nižej)." + +msgid "An item in keywords list:" +msgstr "Abjekt u śpisie klučavych słovaÅ­:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Heta budzie dałučana da zahadnaha radka\n" +"dla kožnaha klučavoha słova. %k razhortvaje klučavoje słova." + +msgid "An item in input files list:" +msgstr "Abjekt u śpisie Å­vachodnych fajłaÅ­:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Heta budzie dadadziena da zahdanaha radka\n" +"dla kožnaha Å­vachodnaha fajłu. %f razhortvaje nazvu fajłu." + +msgid "Source code charset:" +msgstr "Kadavańnie kryničnaha kodu:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" + +msgid "Catalog properties" +msgstr "" + +msgid "Project name and version:" +msgstr "Nazva prajektu i versija:" + +msgid "Plural Forms:" +msgstr "Formy množnaha liku:" + +#, fuzzy +msgid "Use default rules for this language" +msgstr "(Užyj zmoŭčanuju movu)" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "Nabor znakaÅ­:" + +msgid "Team:" +msgstr "Supołka:" + +msgid "Team's email address:" +msgstr "Adras email supołki:" + +#, fuzzy +msgid "Translation properties" +msgstr "Pamiać pierakładaÅ­" + +#, fuzzy +msgid "Sources paths" +msgstr "Ściežki poÅ¡uku" + +msgid "Extract text from source files in the following directories:" +msgstr "" + +msgid "Base path:" +msgstr "AsnoÅ­naja ściežka:" + +#, fuzzy +msgid "Sources keywords" +msgstr "Ściežki poÅ¡uku" + +#, fuzzy +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Užyj hetyja klučavyja słovy (nazvy funkcyjaÅ­) dziela raspaznańnia\n" +"pierakładaÅ­ u fajłach-krynicach, jak dadatak da zmoŭčanych słovaÅ­." + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "Aktualizuj padsumavańnie" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Hetyja frazy byli znojdzienyja Å­ aryhinale, ale ich niama Å­ katalohu.\n" +"Poedit dadaść ich zaraz u kataloh." + +msgid "New strings" +msgstr "Novyja frazy" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Hetych fraz u aryhinale ŭžo niama.\n" +"Poedit vydalić ich zaraz z katalohu." + +msgid "Obsolete strings" +msgstr "Sastarełyja frazy" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 novych, 0 sastarełych)" + +msgid "Open" +msgstr "Adčyni" + +msgid "Save catalog" +msgstr "ZapiÅ¡y kataloh" + +#, fuzzy +msgid "Validate" +msgstr "Pamiać pierakładaÅ­" + +#, fuzzy +msgid "Check for errors in the translation" +msgstr "Skapijuj aryhinał u pole pierakładu" + +msgid "Update" +msgstr "Aktualizuj" + +msgid "Update catalog - synchronize it with sources" +msgstr "Aktualizuj kataloh – synchranizuj jaho z krynicami" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Uklučana, kali dla zaznačanaj frazy jość sumniÅ­ny pierakład" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +#, fuzzy +msgid "Previous source text:" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +#, fuzzy +msgid "Notes for translators:" +msgstr "AÅ­tamatyčnyja pierakłady:" + +#, fuzzy +msgid "Add comment" +msgstr "Redahuj kamentar" + +#, fuzzy +msgid "Add Comment" +msgstr "Redahuj &kamentar" + +#, fuzzy +msgid "Translation suggestions:" +msgstr "Pamiać pierakładaÅ­" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +#, fuzzy +msgid "No matches found" +msgstr "Nia znojdziena fajłaÅ­ u: " + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +#, fuzzy +msgid "This string was found in Poedit’s translation memory." +msgstr "Aktualizuj pamiać pierakładaÅ­" + +#, fuzzy, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(%i novych, %i sastarełych)" + +#, fuzzy, c-format +msgid "Importing translations: %d" +msgstr "AÅ­tamatyčnyja pierakłady:" + +#, fuzzy +msgid "Poedit Update" +msgstr "Poedit" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +#, fuzzy +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Aktualizuj pamiać pierakładaÅ­" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "Praciah" + +#, fuzzy +msgid "Translation memory migration failed." +msgstr "Pamyłka bazy źviestak: %s" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +#, fuzzy +msgid "Cannot create temporary directory." +msgstr "Niemahčyma stvaryć kataloh bazy źviestak!" + +#, fuzzy +msgid "Welcome to Poedit" +msgstr "&Pra..." + +#, fuzzy +msgid "Edit a translation" +msgstr "Pierakład" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +#, fuzzy +msgid "Update from POT" +msgstr "Aktualizuj z fajłu &POT..." + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +#, fuzzy +msgid "Extract from sources" +msgstr "&Aktualizuj z krynicaÅ­" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/bg.mo b/locales/bg.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b9c904412a3d0b4af0cb6e6dd4cce1aeb5b46e1 GIT binary patch literal 58787 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 F{x1WQf%E_X literal 0 HcmV?d00001 diff --git a/locales/ca.po b/locales/ca.po new file mode 100644 index 0000000..54e987c --- /dev/null +++ b/locales/ca.po @@ -0,0 +1,1970 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-26 13:00-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Amaga aquesta notificació" + +msgid "Don't Show Again" +msgstr "No tornis a mostrar-ho" + +msgid "Don't show again" +msgstr "No ho mostris més" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i línia del fitxer «%s» no s’ha carregat correctament." +msgstr[1] "%i línies del fitxer «%s» no s’han carregat correctament." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "La línia %d del fitxer «%s» està malmesa (dades %s no vàlids)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "El format de la capçalera és incorrecte: «%s»" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Fitxer de catàleg malmès: la forma singular del msgstr s'ha fet servir " +"conjuntament amb msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Fitxer de catàleg malmès: la forma plural del msgstr s'ha fet servir sense " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"S’han produït errors en carregar el catàleg. És possible que manquin algunes " +"dades o que estiguin malmeses." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "No s’ha pogut carregar el fitxer «%s»; és probable que estigui malmès." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"El fitxer «%s» és de només lectura i no es pot desar.\n" +"Hauríeu de desar-lo amb un altre nom." + +#, c-format +msgid "Couldn't save file %s." +msgstr "No s’ha pogut desar el fitxer %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"S’ha produït un problema en formatar el fitxer (però s’ha desat " +"correctament)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"No s'ha pogut desar el catàleg en el joc de caràcters «%s» com especificat " +"en\n" +"els ajusts de catàleg.\n" +"\n" +"S'ha desat en UTF-8 i l'ajust s'ha modificat en conseqüència." + +msgid "Error saving catalog" +msgstr "S’ha produït un error en desar el catàleg" + +msgid "PO Translation Files" +msgstr "Fitxers de traducció PO" + +msgid "POT Translation Templates" +msgstr "Plantilles de traducció .POT" + +msgid "All Translation Files" +msgstr "Tots els fitxers de traducció" + +msgid "Merging differences..." +msgstr "S’estan fusionant les diferències…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "El fitxer POT «%s» no és vàlid." + +msgid "(Use default language)" +msgstr "(Utilitza l’idioma per defecte)" + +msgid "Select your preferred language" +msgstr "Trieu el vostre idioma preferit" + +msgid "Language selection" +msgstr "Selecció d’idioma" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Heu de reiniciar el Poedit perquè aquest canvi tingui efecte." + +msgid "Downloading translations is disabled in this project." +msgstr "Aquest projecte ha inhabilitat les baixades de traduccions." + +msgid "Not authorized, please sign in again." +msgstr "Acció no autoritzada. Inicieu una sessió de nou." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"El Crowdin és una plataforma de gestió de localització en línia i una eina " +"de traducció col·laborativa. El Poedit pot sincronitzar sense problema els " +"fitxers PO gestionats al Crowdin." + +msgid "Sign In" +msgstr "Inicia la sessió" + +msgid "Sign in" +msgstr "Inicia la sessió" + +msgid "Sign Out" +msgstr "Finalitza la sessió" + +msgid "Sign out" +msgstr "Finalitza la sessió" + +msgid "Waiting for authentication…" +msgstr "S’està esperant l’autenticació…" + +msgid "Updating user information…" +msgstr "S’està actualitzant la informació de l’usuari…" + +msgid "Signed in as:" +msgstr "Sessió iniciada com a:" + +msgid "Learn More About Crowdin" +msgstr "Més informació sobre el Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Més informació sobre el Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Inicia la sessió a Crowdin" + +msgid "Open Crowdin translation" +msgstr "Obre una traducció del Crowdin" + +msgid "Project:" +msgstr "Projecte:" + +msgid "Language:" +msgstr "Idioma:" + +msgid "File:" +msgstr "Fitxer:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" +"No hi ha cap projecte de traducció llistat al vostre compte de Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Aquest projecte no té cap fitxer que es pugui traduir al Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Aquest fitxer només es pot editar en la interfície web del Crowdin." + +msgid "Downloading latest translations…" +msgstr "S’estan baixant les traduccions més recents…" + +msgid "Syncing with Crowdin" +msgstr "S'està sincronitzant amb el Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "La sincronització amb el Crowdin ha fallat." + +msgid "Crowdin error" +msgstr "Error del Crowdin" + +msgid "Uploading translations…" +msgstr "S’estan pujant les traduccions…" + +msgid "&Copy" +msgstr "&Copia" + +msgid "Learn more" +msgstr "Més informació" + +msgid "Learn More" +msgstr "Més informació" + +#, c-format +msgid "Failed command: %s" +msgstr "Ha fallat l’ordre: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "No s'han pogut fusionar els catàlegs del gettext." + +msgid "Scanning files..." +msgstr "S’estan analitzant els fitxers…" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "S’estan analitzant els fitxers %s…" + +msgid "Failed to load extracted catalog." +msgstr "No s'ha pogut carregar el catàleg extret." + +msgid "&Help" +msgstr "&Ajuda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Els fitxers MO no es poden editar directament al Poedit." + +msgid "Error opening file" +msgstr "S’ha produït un error en obrir el fitxer" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Obriu i editeu el fitxer .po corresponent en el seu lloc. Quan ho deseu, el " +"fitxer .mo s’actualitzarà." + +msgid "don't delete temporary files (for debugging)" +msgstr "no suprimeixis els fitxers temporals (per a la depuració)" + +msgid "handle a poedit:// URI" +msgstr "gestiona un URI poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Ha fallat la comunicació amb el procès de Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "S’ha produït una excepció no controlada: %s" + +msgid "Unhandled exception occurred." +msgstr "S’ha produït una excepció no controlada." + +msgid "Open catalog" +msgstr "Obre el catàleg" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "El fitxer «%s» no existeix." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Quant al %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versió %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Serveis" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Amaga el %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Amaga la resta" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mostra-ho tot" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Surt del %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "El Poedit és un editor de traduccions fàcil de fer servir." + +msgid "Catalogs Manager" +msgstr "Gestor de catàlegs" + +msgid "Check for Updates..." +msgstr "Comprova si hi ha actualitzacions…" + +msgid "&Edit" +msgstr "&Edita" + +msgid "Undo" +msgstr "Desfés" + +msgid "Redo" +msgstr "Refés" + +msgid "Paste and Match Style" +msgstr "Enganxa amb el mateix estil" + +msgid "Delete" +msgstr "Suprimeix" + +msgid "Spelling and Grammar" +msgstr "Ortografia i gramàtica" + +msgid "Show Spelling and Grammar" +msgstr "Mostra l'ortografia i la gramàtica" + +msgid "Check Document Now" +msgstr "Comprova el document ara" + +msgid "Check Spelling While Typing" +msgstr "Comprova l'ortografia mentre s'escriu" + +msgid "Check Grammar With Spelling" +msgstr "Comprova la gramàtica amb l'ortografia" + +msgid "Correct Spelling Automatically" +msgstr "Corregeix l'ortografia automàticament" + +msgid "Substitutions" +msgstr "Substitucions" + +msgid "Show Substitutions" +msgstr "Mostra les substitucions" + +msgid "Smart Copy/Paste" +msgstr "Copia/enganxa intel·ligentment" + +msgid "Smart Quotes" +msgstr "Cometes tipogràfiques" + +msgid "Smart Dashes" +msgstr "Guions intel·ligents" + +msgid "Smart Links" +msgstr "Enllaços intel·ligents" + +msgid "Text Replacement" +msgstr "Reemplaçament de text" + +msgid "Transformations" +msgstr "Transformacions" + +msgid "Make Upper Case" +msgstr "Converteix a majúscules" + +msgid "Make Lower Case" +msgstr "Converteix a minúscules" + +msgid "Capitalize" +msgstr "Majúscules inicials" + +msgid "Speech" +msgstr "Vocalització" + +msgid "Start Speaking" +msgstr "Comença a parlar" + +msgid "Stop Speaking" +msgstr "Deixa de parlar" + +msgid "&View" +msgstr "&Visualitza" + +msgid "Enter Full Screen" +msgstr "Pantalla sencera" + +msgid "Window" +msgstr "Finestra" + +msgid "Minimize" +msgstr "Minimitza" + +msgid "Zoom" +msgstr "Escala" + +msgid "Bring All to Front" +msgstr "Envia tot al capdavant" + +msgid "PO Translation" +msgstr "Traducció PO" + +msgid "The file cannot be opened." +msgstr "No es pot obrir el fitxer." + +msgid "Invalid file" +msgstr "El fitxer no és vàlid" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "El fitxer pot ser o malmès o d'un format no reconegut pel Poedit." + +msgid "&Undo" +msgstr "&Desfés" + +msgid "&Redo" +msgstr "&Refés" + +msgid "Cu&t" +msgstr "Re&talla" + +msgid "Cut" +msgstr "Retalla" + +msgid "Copy" +msgstr "Copia" + +msgid "&Paste" +msgstr "&Enganxa" + +msgid "Paste" +msgstr "Enganxa" + +msgid "&Delete" +msgstr "&Suprimeix" + +msgid "Select &All" +msgstr "Selecciona-ho &tot" + +msgid "Select All" +msgstr "Selecciona-ho tot" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maj+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Retorn" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "↑" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "↓" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maj" + +msgid "You can't drop more than one file on Poedit window." +msgstr "No podeu deixar anar més d'un fitxer a la finestra del Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "El fitxer «%s» no és un catàleg de missatges." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fitxer" + +msgid "&Go" +msgstr "&Navega" + +msgid "Source text:" +msgstr "Text font:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Traducció:" + +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 "" +"Els fitxers POT només són plantilles i no contenen cap traducció.\n" +"Per a fer una traducció, creeu un fitxer PO nou basat en la plantilla." + +msgid "Create New Translation" +msgstr "Crea una traducció nova" + +msgid "Create new translation" +msgstr "Crea una traducció nova" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"La correcció ortogràfica está inhabilitada perquè no s’ha instal·lat el " +"diccionari del %s." + +msgid "Install" +msgstr "Instal·la" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "S’ha modificat el catàleg. Voleu desar els canvis?" + +msgid "Save changes" +msgstr "Desa els canvis" + +msgid "Your changes will be lost if you don't save them." +msgstr "Els canvis es perdran si no els deseu." + +msgid "Save" +msgstr "Desa" + +msgid "Don't save" +msgstr "No ho desis" + +msgid "Don't Save" +msgstr "No ho desis" + +msgid "Save as..." +msgstr "Anomena i desa…" + +msgid "Compile to..." +msgstr "Compila-ho a…" + +msgid "Compiled Translation Files" +msgstr "Fitxers de traducció compilats" + +msgid "Export as..." +msgstr "Exporta com a..." + +msgid "HTML Files" +msgstr "Fitxers HTML" + +msgid "Open catalog template" +msgstr "Obre la plantilla de catàleg" + +msgid "Updating catalog" +msgstr "S’està actualitzant el catàleg" + +msgid "Source code not available." +msgstr "El codi font no és disponible." + +msgid "Updating failed" +msgstr "L’actualització ha fallat" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"No s’han pogut actualitzar les traduccions des del codi font perquè no s’ha " +"trobat cap codi a la ubicació especificada a les propietats del catàleg." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Les entrades del catàleg són probablement incorrectes." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Ha fallat l'actualització del catàleg. Feu clic a 'Detalls >>' per a obtenir-" +"ne més detalls." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "S'ha trobat %d problema amb la traducció." +msgstr[1] "S'han trobat %d problemes amb la traducció." + +msgid "Validation results" +msgstr "Resultats de la validació" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Les entrades amb errors s'han marcat en vermell a la llista. Els detalls de " +"l'error es mostraran quan seleccioneu l'entrada." + +msgid "The file was saved safely." +msgstr "El fitxer s’ha desat amb seguretat." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"El fitxer s’ha desat amb seguretat i compilat en el format MO, però és " +"probable que no en funcioni correctament." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"El fitxer s’ha desat amb seguretat, però no es pot compilar i usar en el " +"format MO." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"El fitxer s’ha compilat en el format MO, però probablement no funcionarà " +"correctament." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "No és possible compilar el fitxer en el format MO per utilitzar-ho." + +msgid "No problems with the translation found." +msgstr "No s'ha trobat cap problema amb la traducció." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"La traducció ja és a punt per ser usada, però encara no s’ha traduït %d " +"cadena." +msgstr[1] "" +"La traducció ja és a punt per ser usada, però encara no s’han traduït %d " +"cadenes." + +msgid "The translation is ready for use." +msgstr "La traducció ja és a punt i podeu utilitzar-la." + +msgid "Context:" +msgstr "Context:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"El Poedit ha corregit automàticament el contingut invàlid en el fitxer «%s»." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"El fitxer contenia elements duplicats. Això no es permet als fitxers PO; en " +"cas contrari el fitxer no es podria fer servir. El Poedit ha corregit el " +"problema, però hauríeu de revisar les traduccions de qualssevol elements " +"marcats com a difusos i corregir-les si cal." + +msgid "Language of the translation isn't set." +msgstr "L'idioma de la traducció no està establert." + +msgid "Set Language" +msgstr "Estableix l'idioma" + +msgid "Set language" +msgstr "Seleccioneu l'idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Els suggeriments no es disposen si l'idioma de traducció no està establerta " +"correctament. Altres característiques, com les formes plurals, també es " +"poden afectar." + +msgid "Language of the translation is the same as source language." +msgstr "L'idioma de la traducció es el mateix que l'idioma font." + +msgid "Fix Language" +msgstr "Corregeix l’idioma" + +msgid "Fix language" +msgstr "Corregeix l’idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Aquest catàleg té entrades amb formes plurals, però no té la capçalera " +"Plural-Forms configurada." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Les entrades en aquest catàleg tenen un nombre total de formes plurals " +"diferent del que diu la capçalera Plural-Forms del catàleg" + +msgid "Required header Plural-Forms is missing." +msgstr "Falta la capçalera necessària Plural-Forms." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Hi ha un error de sintaxis a la capçalera Plural-Forms («%s»)." + +msgid "Fix the Header" +msgstr "Corregeix la capçalera" + +msgid "Fix the header" +msgstr "Corregeix la capçalera" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "L'expressió de formes plurals usada pel catàleg és inusual per al %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Repassa" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "S’ha produït un error en carregar el catàleg de missatges «%s»." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduït: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Resten: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errors" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entrades" + +msgid " (unsaved)" +msgstr " (no desat)" + +msgid " (modified)" +msgstr " (modificat)" + +msgid "Go" +msgstr "Vés-hi" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Ha fallat l'actualització de memòria de traducció: %s" + +msgid "Purge deleted translations" +msgstr "Purga les traduccions obsoletes" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Voleu suprimir totes les traduccions que ja no s'usin?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Si continueu amb la purga, totes les traduccions marcades com a suprimides " +"s'eliminaran permanentment. Si continueu amb la supressió les haureu de " +"traduir de nou en cas que tornin a ser afegides en un futur." + +msgid "Keep" +msgstr "Manté" + +msgid "Purge" +msgstr "Purga" + +msgid "Fill missing translations from TM" +msgstr "Emplena cadenes no traduïdes mitjançant la MT" + +msgid "Only fill in exact matches" +msgstr "Únicament emplena les coincidències exactes" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Per defecte, els resultats inexactes s'omplen també i es marquen com a " +"difuses. Seleccioneu aquesta opció per a incloure només coincidències " +"exactes." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "No marquis les coincidències exactes com a difuses" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Només habilita-ho si confieu en la qualitat del vostre MT. Per defecte, " +"totes les coincidències de la MT es marquen com a difuses i es deuen revisar." + +msgid "Fill" +msgstr "Omple" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrada ha estat omplerta mitjançant la memòria de traducció." +msgstr[1] "%d entrades han estat omplertes mitjançant la memòria de traducció." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Les traduccions s'han marcat com a difuses, ja que poden ser incorrectes. " +"Les hauria de revisar per comprovar-les." + +msgid "No entries could be filled from the translation memory." +msgstr "No s'han pogut omplir cadenes mitjançant la MT." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"La MT no conté cap cadena similar al contingut d'aquest fitxer. Només serà " +"efectiu per traduccions semi-automàtiques després de que Poedit aprengui " +"prou dels fitxers que vagi traduint manualment." + +msgid "Translating" +msgstr "Traduint" + +msgid "Filling missing translations from TM..." +msgstr "Omplint cadenes no traduïdes mitjançant la MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "S’ha traduït %u cadena" +msgstr[1] "S’han traduït %u cadenes" + +msgid "Copy from source text" +msgstr "Copia del text font" + +msgid "Copy from Source Text" +msgstr "Copia del text font" + +msgid "Clear translation" +msgstr "Neteja la traducció" + +msgid "Clear Translation" +msgstr "Neteja la traducció" + +msgid "Edit comment" +msgstr "Edita el comentari" + +msgid "Edit Comment" +msgstr "Edita el comentari" + +msgid "References:" +msgstr "Referències:" + +msgid "Everything" +msgstr "Tot" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Un" + +msgid "Two" +msgstr "Dos" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Altre" + +msgid "&Bookmarks" +msgstr "&Marcadors" + +#, c-format +msgid "Set bookmark %i" +msgstr "Estableix el marcador %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Vés al marcador %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Estableix el marcador %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Vés al marcador %i" + +msgid "Hide Sidebar" +msgstr "Amaga la barra lateral" + +msgid "Show Sidebar" +msgstr "Mostra la barra lateral" + +msgid "Hide Status Bar" +msgstr "Amaga la barra d'estat" + +msgid "Show Status Bar" +msgstr "Mostra la barra d'estat" + +msgid "Source text" +msgstr "Text font" + +msgid "Translation" +msgstr "Traducció" + +msgid "ID" +msgstr "Id." + +#, c-format +msgid "Source text — %s" +msgstr "Text font — %s" + +msgid "unknown language" +msgstr "idioma desconegut" + +#, c-format +msgid "Translation — %s" +msgstr "Traducció — %s" + +msgid "Error:" +msgstr "Error:" + +msgid "Source file" +msgstr "Fitxer de codi font" + +msgid "Source file occurrence:" +msgstr "Ocurrència al fitxer font:" + +msgid "Open in Editor" +msgstr "Obre en l’editor" + +msgid "Open in editor" +msgstr "Obre en l’editor" + +msgid "No references for the selected item." +msgstr "No hi ha referències per a l'ítem seleccionat." + +#, c-format +msgid "Error opening file %s!" +msgstr "S'ha produït un error en obrir el fitxer %s!" + +msgid "Find" +msgstr "Troba" + +msgid "Replace" +msgstr "Reemplaça" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcions" + +msgid "Ignore case" +msgstr "Ignora majúscules/minúscules" + +msgid "Wrap around" +msgstr "Embolcalla al voltant" + +msgid "Whole words only" +msgstr "Només les paraules senceres" + +msgid "Find in source texts" +msgstr "Cerca en els texts font" + +msgid "Find in translations" +msgstr "Troba a les traduccions" + +msgid "Find in comments" +msgstr "Cerca als comentaris" + +msgid "Close" +msgstr "Tanca" + +msgid "Replace All" +msgstr "Reemplaça-ho tot" + +msgid "Replace all" +msgstr "Reemplaça-ho tot" + +msgid "< &Previous" +msgstr "< &Anterior" + +msgid "&Next >" +msgstr "&Següent >" + +msgid "String to find" +msgstr "Cadena a trobar" + +msgid "Replacement string" +msgstr "Cadena de substitució" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "No es pot executar el programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Codi d’idioma o nom (p. ex., ca_ES)" + +msgid "Translation Language" +msgstr "Idioma de la traducció" + +msgid "Language of the translation:" +msgstr "Idioma de la traducció:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gestor de catàlegs" + +msgid "Catalog" +msgstr "Catàleg" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "No traduït" + +msgid "Fuzzy" +msgstr "Difuses" + +msgid "Bad Tokens" +msgstr "Cadenes mal escrites" + +msgid "Last modified" +msgstr "Darrera modificació" + +msgid "Select directory" +msgstr "Seleccioneu el directori" + +msgid "Directories:" +msgstr "Directoris:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Voleu suprimir el projecte?" + +msgid "Confirmation" +msgstr "Confirmació" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Segur que voleu actualitzar en massa\n" +"tots els catàlegs d'aquest projecte?" + +msgid "Information about the translator" +msgstr "Informació sobre el traductor" + +msgid "Name:" +msgstr "Nom:" + +msgid "Your Name" +msgstr "El vostre nom" + +msgid "Email:" +msgstr "Adreça electrònica:" + +msgid "your_email@example.com" +msgstr "adreça@exemple.cat" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"El vostre nom i adreça electrònica s’utilitzen només per establir el valor " +"de la capçalera «Last-Translator» als fitxers de GNU gettext." + +msgid "Editing" +msgstr "Edició" + +msgid "Automatically compile MO file when saving" +msgstr "Compila el fitxer MO automàticament en desar" + +msgid "Show summary after catalog update" +msgstr "Mostra el resum després de l'actualització del catàleg" + +msgid "Check spelling" +msgstr "Comprova l'ortografia" + +msgid "Always change focus to text input field" +msgstr "Canvia sempre el focus al camp d'introducció de text" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Mai permetis que el llistat de cadenes obtingui el focus. Si està habilitat, " +"haureu d'emprar les Ctrl+fletxes per la navegació amb el teclat, però també " +"podreu escriure immediatament sense haver de prémer Tab per a canviar el " +"focus." + +msgid "Appearance" +msgstr "Aparença" + +msgid "Use custom list font:" +msgstr "Tipus de lletra personalitzat per a les llistes:" + +msgid "Use custom text fields font:" +msgstr "Tipus de lletra personalitzat per als camps de text:" + +msgid "Change UI language" +msgstr "Canvia l’idioma de la interfície" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(necessita Windows 8 o superior)" + +msgid "General" +msgstr "General" + +msgid "Use translation memory" +msgstr "Usa la memòria de traducció" + +msgid "Learn From Files..." +msgstr "Aprèn de fitxers..." + +msgid "Learn from files..." +msgstr "Aprèn dels fitxers…" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Reinicialitza" + +msgid "Consult TM when updating from sources" +msgstr "Consulta el MT mentre s'actualitza des de les fonts" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Si es troba activada, Poedit mirarà d'omplir les noves entrades usant\n" +"traduccions prèvies que estiguin desades en la memòria de traducció.\n" +"Si la MT és quasi buida, no serà molt efectiu. Quan més traduccions\n" +"faci i més gran sigui la MT, més bé funcionarà." + +msgid "Stored translations:" +msgstr "Traduccions emmagatzemades:" + +msgid "Database size on disk:" +msgstr "Mida de base de dades en disc:" + +msgid "Select translation files to import" +msgstr "Seleccioneu els fitxers de traducció que importar" + +msgid "Translation Memory" +msgstr "Memòria de traducció" + +msgid "Importing translations..." +msgstr "Important traduccions..." + +msgid "Finalizing..." +msgstr "Finalitzant..." + +msgid "Reset translation memory" +msgstr "Esborra la memòria de traduccions" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Esteu segur que voleu restabir la memòria de traduccions?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Restablir la memòria de traducció irrevocablement en suprimirà totes les " +"traduccions emmagatzemades. No podeu desfer aquesta operació." + +msgid "Cancel" +msgstr "Cancel·la" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Els extractors de codi font s’utilitzen per trobar cadenes traduïbles en els " +"fitxers de codi font i extraure-les de manera que es puguin traduir." + +msgid "New" +msgstr "Nou" + +msgid "Edit" +msgstr "Edita" + +msgid "Delete extractor" +msgstr "Suprimeix l’extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Esteu segur que voleu suprimir l’extractor «%s»?" + +msgid "Extractors" +msgstr "Extractors" + +msgid "Accounts" +msgstr "Comptes" + +msgid "Automatically check for updates" +msgstr "Comprova si hi ha actualitzacions automàticament" + +msgid "Include beta versions" +msgstr "Inclou les versions beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Les versions beta contenen les funcionalitats i millores més recents, però " +"poden ser una mica menys estables." + +msgid "Updates" +msgstr "Actualitzacions" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Aquests ajusts afecten el format intern dels fitxers PO. Ajusteu-los si " +"teniu requisits específics, per exemple, pel control de versions." + +msgid "Line endings:" +msgstr "Finals de línies:" + +msgid "Unix (recommended)" +msgstr "Unix (recomanat)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Ajusta a:" + +msgid "Preserve formatting of existing files" +msgstr "Preserva el format dels fitxers existents" + +msgid "Advanced" +msgstr "Avançades" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferències del %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arrossegueu i deixeu anar carpetes aquí\n" +"\n" +"o usa el botó +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arrossegueu i deixeu anar carpetes aquí\n" +"\n" +"o usa el botó +" + +msgid "Add Folders..." +msgstr "Afegeix carpetes..." + +msgid "Add folders..." +msgstr "Afegeix carpetes..." + +msgid "Add Files..." +msgstr "Afegeix fitxers..." + +msgid "Add files..." +msgstr "Afegeix fitxers..." + +msgid "Add Wildcard..." +msgstr "Afegeix comodí..." + +msgid "Add wildcard..." +msgstr "Afegeix comodí..." + +msgid "Paths" +msgstr "Camins" + +msgid "Excluded paths" +msgstr "Camins exclosos" + +msgid "Additional keywords" +msgstr "Paraules clau addicionals" + +msgid "Name of the project the translation is for" +msgstr "Nom del projecte pel qual és la traducció" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "per exemple, nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomanat)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Deseu el fitxer primer. No es pot editar aquesta secció fins llavors." + +msgid "Comment:" +msgstr "Comentari:" + +msgid "OK" +msgstr "D’acord" + +msgid "C&lear" +msgstr "&Neteja" + +msgid "Clear the comment" +msgstr "Neteja el comentari" + +msgid "Create new translations project" +msgstr "Crea un nou projecte de traduccions" + +msgid "Edit the project" +msgstr "Edita el projecte" + +msgid "Delete the project" +msgstr "Suprimeix el projecte" + +msgid "Update all" +msgstr "Actualitza-ho tot" + +msgid "Update all catalogs in the project" +msgstr "Actualitza tots els catàlegs del projecte" + +msgid "Edit project" +msgstr "Edita el projecte" + +msgid "Project name:" +msgstr "Nom del projecte:" + +msgid "Browse" +msgstr "Navega" + +msgid "Add directory to the list" +msgstr "Afegeix el directori a la llista" + +msgid "&New..." +msgstr "&Nou..." + +msgid "New from &POT/PO file..." +msgstr "Nou des de fitxer &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Nou des de fitxer &POT/PO..." + +msgid "&Open..." +msgstr "&Obre..." + +msgid "Open Recent" +msgstr "Obre recents" + +msgid "Open from Crowdin..." +msgstr "Obre des del Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Obre des del Crowdin..." + +msgid "&Close" +msgstr "&Tanca" + +msgid "&Save" +msgstr "De&sa" + +msgid "Save &as..." +msgstr "&Anomena i desa..." + +msgid "Save &As..." +msgstr "&Anomena i desa..." + +msgid "Compile to MO..." +msgstr "Compila a MO..." + +msgid "E&xport as HTML..." +msgstr "E&xporta com HTML..." + +msgid "Check for updates..." +msgstr "Cerca actualitzacions..." + +msgid "&Preferences..." +msgstr "&Preferències..." + +msgid "Catalogs &manager" +msgstr "&Gestor de catàlegs" + +msgid "Catalogs &Manager" +msgstr "&Gestor de catàlegs" + +msgid "E&xit" +msgstr "&Surt" + +msgid "Quit" +msgstr "Surt" + +msgid "Copy from singular" +msgstr "Copia del singular" + +msgid "Copy From Singular" +msgstr "Copia del singular" + +msgid "Translation is &fuzzy" +msgstr "Traducció pro&visional" + +msgid "Translation Is &Fuzzy" +msgstr "Traducció pro&visional" + +msgid "Edit &comment" +msgstr "&Edita el comentari" + +msgid "Edit &Comment" +msgstr "&Edita el comentari" + +msgid "Suggestions" +msgstr "Suggeriments" + +msgid "&Show references" +msgstr "Mo&stra les referències" + +msgid "&Show References" +msgstr "Mo&stra les referències" + +msgid "&Find..." +msgstr "&Cerca..." + +msgid "Replace..." +msgstr "Substitueix..." + +msgid "Find next" +msgstr "Cerca el següent" + +msgid "Find previous" +msgstr "Cerca l'anterior" + +msgid "Find and Replace..." +msgstr "Troba i substitueix..." + +msgid "Find Next" +msgstr "Cerca el següent" + +msgid "Find Previous" +msgstr "Cerca l'anterior" + +msgid "&Preferences" +msgstr "&Preferències" + +msgid "Display entry &IDs" +msgstr "Mostra els &id. de les entrades" + +msgid "Display Entry &IDs" +msgstr "Mostra els &id. de les entrades" + +msgid "Sort by &file order" +msgstr "&Ordena per ordre de fitxer" + +msgid "Sort by &File Order" +msgstr "Ordena per &ordre de fitxer" + +msgid "Sort by &source" +msgstr "Ordena per &font" + +msgid "Sort by &Source" +msgstr "Ordena per &font" + +msgid "Sort by &translation" +msgstr "Ordena per &traducció" + +msgid "Sort by &Translation" +msgstr "Ordena per &traducció" + +msgid "&Group by context" +msgstr "A&grupa pel context" + +msgid "&Group By Context" +msgstr "A&grupa pel context" + +msgid "Entries with errors first" +msgstr "Primer les entrades amb errors" + +msgid "Entries with Errors First" +msgstr "Entrades amb errors primers" + +msgid "&Untranslated entries first" +msgstr "&Primer les entrades no trad&uïdes" + +msgid "&Untranslated Entries First" +msgstr "&Primer les entrades no trad&uïdes" + +msgid "Show sidebar" +msgstr "Mostra la barra lateral" + +msgid "Show status bar" +msgstr "Mostra la barra d'estat" + +msgid "C&atalog" +msgstr "&Catàleg" + +msgid "&Update from sources" +msgstr "Act&ualitza des de les fonts" + +msgid "&Update from Sources" +msgstr "Act&ualitza des de les fonts" + +msgid "Update from &POT file..." +msgstr "Actualitza des del fitxer &POT..." + +msgid "Update from &POT File..." +msgstr "Actualitza des del fitxer &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronitza amb el Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Omple les traduccions mancants des de la &MT..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Omplir les traduccions mancants des de la &MT..." + +msgid "&Purge deleted translations" +msgstr "&Purga les traduccions suprimides" + +msgid "&Purge Deleted Translations" +msgstr "&Purga les traduccions suprimides" + +msgid "&Validate translations" +msgstr "&Valida les traduccions" + +msgid "&Validate Translations" +msgstr "&Valida les traduccions" + +msgid "&Properties..." +msgstr "&Propietats..." + +msgid "&Done and next" +msgstr "&Fet, següent" + +msgid "&Done and Next" +msgstr "&Fet, següent" + +msgid "&Previous translation" +msgstr "Traducció &anterior" + +msgid "&Previous Translation" +msgstr "Traducció &anterior" + +msgid "&Next translation" +msgstr "Traducció &següent" + +msgid "&Next Translation" +msgstr "Traducció &següent" + +msgid "P&revious unfinished" +msgstr "Ante&rior no finalitzada" + +msgid "P&revious Unfinished" +msgstr "Ante&rior no finalitzada" + +msgid "Ne&xt unfinished" +msgstr "&Següent no finalitzada" + +msgid "Ne&xt Unfinished" +msgstr "&Següent no finalitzada" + +msgid "Previous plural form" +msgstr "Forma plural anterior" + +msgid "Previous Plural Form" +msgstr "Forma plural anterior" + +msgid "Next plural form" +msgstr "Forma plural següent" + +msgid "Next Plural Form" +msgstr "Forma plural següent" + +msgid "&Online help" +msgstr "&Ajuda en línia" + +msgid "&Online Help" +msgstr "&Ajuda en línia" + +msgid "&GNU gettext manual" +msgstr "Manual del &gettext de GNU" + +msgid "&GNU gettext Manual" +msgstr "Manual del &gettext de GNU" + +msgid "&About Poedit" +msgstr "&Quant al Poedit" + +msgid "&About" +msgstr "&Quant a" + +msgid "Extractor setup" +msgstr "Paràmetres de l’extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Llistat d'extensions separades per punt i coma (p. ex. *.cpp,*.h):" + +msgid "Invocation:" +msgstr "Invocació:" + +msgid "Command to extract translations:" +msgstr "Ordre d’extracció de les traduccions:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Aquesta és l’ordre emprada per a iniciar l’extractor.\n" +"%o s’expandeix al nom del fitxer de sortida, %K al llistat\n" +"de paraules clau, %F al llistat de fitxers de sortida,\n" +"%C al joc de caràcters (vegeu-ho més avall)." + +msgid "An item in keywords list:" +msgstr "Un element de la llista de paraules clau:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Això s'adjuntarà a la línia d'ordres un cop\n" +"per cada paraula clau. %k s'expandeix a la paraula clau." + +msgid "An item in input files list:" +msgstr "Un element de la llista dels fitxers d'entrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Això s'adjuntarà a la línia d'ordres un cop\n" +"per cada fitxer de sortida. %f s'expandeix al nom del fitxer." + +msgid "Source code charset:" +msgstr "Joc de caràcters del codi font:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Això s'adjuntarà a la línia d'ordres\n" +"només si s'ha especificat el joc de caràcters d'origen. %c s'expandeix al " +"valor del joc de caràcters." + +msgid "Catalog properties" +msgstr "Propietats del catàleg" + +msgid "Project name and version:" +msgstr "Nom i versió del projecte:" + +msgid "Plural Forms:" +msgstr "Formes plurals:" + +msgid "Use default rules for this language" +msgstr "Usa les regles per defecte en aquest idioma" + +msgid "Use custom expression" +msgstr "Usa una expressió personalitzada" + +msgid "Learn about plural forms" +msgstr "Apreneu sobre les formes plurals" + +msgid "Charset:" +msgstr "Joc de caràcters:" + +msgid "Team:" +msgstr "Equip:" + +msgid "Team's email address:" +msgstr "Adreça electrònica de l’equip:" + +msgid "Translation properties" +msgstr "Propietats de la traducció" + +msgid "Sources paths" +msgstr "Camins de fonts" + +msgid "Extract text from source files in the following directories:" +msgstr "Extreu el text dels fitxers font dels següents directoris:" + +msgid "Base path:" +msgstr "Camí base:" + +msgid "Sources keywords" +msgstr "Paraules clau de fonts" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Usa aquestes paraules clau (noms de funcions) per a reconèixer les\n" +"cadenes traduïbles en els fitxers de codi font:" + +msgid "Learn about gettext keywords" +msgstr "Més informació sobre les paraules clau del gettext" + +msgid "Update summary" +msgstr "Actualitza resum" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Aquestes cadenes són al codi font però no en el catàleg.\n" +"El Poedit els afegirà al catàleg ara." + +msgid "New strings" +msgstr "Cadenes noves" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Aquestes cadenes ja no són al codi font.\n" +"El Poedit les suprimirà del catàleg ara." + +msgid "Obsolete strings" +msgstr "Cadenes obsoletes" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 noves, 0 obsoletes)" + +msgid "Open" +msgstr "Obre" + +msgid "Save catalog" +msgstr "Desa el catàleg" + +msgid "Validate" +msgstr "Valida" + +msgid "Check for errors in the translation" +msgstr "Comprova si hi ha errors a la traducció" + +msgid "Update" +msgstr "Actualitza" + +msgid "Update catalog - synchronize it with sources" +msgstr "Actualitza el catàleg - sincronitza'l amb les fonts" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Commutat si la cadena seleccionada té una traducció difusa" + +msgid "Show or hide the sidebar" +msgstr "Mostra o amaga la barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Text font previ:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"El text font vell (abans que canviés durant una actualització) al qual " +"correspon la traducció difusa." + +msgid "Notes for translators:" +msgstr "Notes per als traductors:" + +msgid "Add comment" +msgstr "Afegeix un comentari" + +msgid "Add Comment" +msgstr "Afegeix un comentari" + +msgid "Translation suggestions:" +msgstr "Suggeriments de traducció:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "No s’han trobat coincidències" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "No s’han trobat coincidències" + +msgid "This string was found in Poedit’s translation memory." +msgstr "S'ha trobat aquesta cadena en la memòria de traducció del Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Noves: %i, obsoletes: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Important traduccions: %d" + +msgid "Poedit Update" +msgstr "Actualització del Poedit" + +msgid "Preparing migration..." +msgstr "Preparant la migració..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estat de la migració: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"El Poedit necessita convertir la vostra memòria de traducció a un format nou." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Cal fer això abans que Poedit pugi iniciar-se. Pot trigar uns minuts si " +"teniu moltes traduccions emmagatzemades, però normalment deu ser molt més " +"ràpid." + +msgid "Proceed" +msgstr "Continua" + +msgid "Translation memory migration failed." +msgstr "La migració de la memòria de traducció ha fallat." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Les dades de la memòria de traducció no s’han pogut migrar. L’error ha " +"estat:\n" +"\n" +"%s\n" +"Envieu un missatge (en anglès) a help@poedit.net i ho arreglarem." + +msgid "Cannot create temporary directory." +msgstr "No s'ha pogut crear el directori temporal." + +msgid "Welcome to Poedit" +msgstr "Us donem la benvinguda al Poedit" + +msgid "Edit a translation" +msgstr "Edita una traducció" + +msgid "Open an existing PO file and edit the translation." +msgstr "Obre un fitxer PO existent i edita la traducció." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Pren un fitxer PO o plantilla existent i crea una nova traducció de el." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Col·labora en una traducció amb el Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Baixa el fitxer d'un projecte del Crowdin, traduïu-ho i sincronitzeu-ho amb " +"els vostres canvis." + +msgid "What is Crowdin?" +msgstr "Què és el Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "No hi ha traduccions. Això es inusual." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Les entrades traduïbles no s'afegeixen manualment en el sistema Gettext, " +"sinó que s'extreuen\n" +"automàticament des del codi font. D'aquesta manera, queden actualitzades i " +"correctes.\n" +"Els traductors típicament usen fitxers de plantilla PO (POTs) preparats pels " +"pel desenvolupador." + +msgid "(Learn more about GNU gettext)" +msgstr "(Apreneu més sobre el GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"La manera més senzilla d'omplir aquest catàleg es actualitzar-lo des d'un " +"POT:" + +msgid "Update from POT" +msgstr "Actualitza des del POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Pren cadenes traduïbles d'una plantilla POT existent." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "També pots extreure cadenes traduïbles directament del codi font:" + +msgid "Extract from sources" +msgstr "Extreu des de les fonts" + +msgid "Configure source code extraction in Properties." +msgstr "Configura l'extracció de codi font en els Propietats." + +msgid "Sync" +msgstr "Sincronitza" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronitza la traducció amb el Crowdin" diff --git a/locales/ckb.mo b/locales/ckb.mo new file mode 100644 index 0000000000000000000000000000000000000000..f56731af5052889e5c514f15fdbe71922bbfac05 GIT binary patch literal 33758 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\n" +"Language-Team: Sorani (Kurdish)\n" +"Language: ckb_IR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ckb\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "شاردنەوەی ئەم پەیامی ئاگادارکردنەوەیە" + +msgid "Don't Show Again" +msgstr "دووبارە پیشانی مەدە" + +msgid "Don't show again" +msgstr "دووبارە پیشانی مەدەرەوە" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i دێڕلە فایلی '%s' بە دروستی نەکراوەتەوە." +msgstr[1] "%i دێڕ لە فایلی '%s' بە دروستی نەکاروەتەوە." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "هێلی %d لە فایلی '%s' تێکچووە (زانیارییەکانی '%s' دروست نین)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "ناوونیشانی تێکچوو: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"پەڕگەی کەتەلۆگی تێکشکاو:فۆڕمی وەرگێڕانی تاک بەکاردێت پێکەوە لەگەڵ " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "پەڕگەی کەتەلۆگی تێکشکاو:فۆڕمی وەرگێڕانی کۆ بەکاردێت بەبێ msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"هەڵەیەک ڕوویدا لە کاتی بارکردنی کەتەلۆگ.هەندێک لە داتاکان ڕەنگە دیارنەبن " +"یاخود تێکشکابن لە ئەنجامی ئەو هەڵەیەدا." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "نەتوانرا پەڕگەی %s باربکرێت،بەزۆریی پێدەچێت تێکشکابێت." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"پەڕگەی '%s' تەنیا دەخوێنرێتەوە و ناتوانرێت پاشەکەوت بکرێن.\n" +"تکایە لە ژێر ناوێکی دیکەدا پاشەکەوتی بکە." + +#, c-format +msgid "Couldn't save file %s." +msgstr "نەتوانرا پەڕگە پاشەکەوت بکرێت %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"کێشەیەک ڕوویدا لە کاتی بەمەرجکردنی پەڕگەکە(بەڵام هەرچۆنێک بێت پاشەکەوتکرا)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"كەتەلۆگەكە ناتوانێت پاشەکەوت لە '%s' هەروەك دياريى كرد لە تایبەتمەندی " +"كەتەلۆگ.\n" +"\n" +"I پاشەکەوت كرا بە UTF-8 لەجياتى و دانانەوەيەكە بەم شێوەيە گۆڕا." + +msgid "Error saving catalog" +msgstr "هەڵە لە پاشەکەوتکردنی کەتەلۆگ" + +msgid "PO Translation Files" +msgstr "بوخچەی وەڕگێرانی PO" + +msgid "POT Translation Templates" +msgstr "تێمپلەتى وەرگێڕانی POT" + +msgid "All Translation Files" +msgstr "هەموو فایلەکانی وەرگێڕان" + +msgid "Merging differences..." +msgstr "لکاندنی جیاوازییەکان" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' پەڕگەیەکی دروستی POT نییە." + +msgid "(Use default language)" +msgstr "(زمانی بنەڕەتی بەکاربهێنە)" + +msgid "Select your preferred language" +msgstr "زمانی پەسەندکراوت دەستنیشان بکە" + +msgid "Language selection" +msgstr "هەڵبژاردنەکانی زمان" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" +"پێویستە دووبارە Poedit دەستپێبکەیتەوە بۆ ئەوەی گۆڕانکارییەکان شوێنی خۆیان " +"بگرن." + +msgid "Downloading translations is disabled in this project." +msgstr "لە پڕۆژەیەدا دابەزاندنی وەڕگێرانەکان لەکار خراوە." + +msgid "Not authorized, please sign in again." +msgstr "دەسەڵاتی پێى نەدراوە، تكايە دووبارە بڕۆ ژوورەوە." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin پڕۆگرامێکی سەرهێلە بۆ خۆماڵی کردن و ئەمرازێکی وەرگێرانی گرووپی و " +"هاوبەشە. Poedit بە شێوەی سەرەتایی توانایی هەیە بۆ هەهانگی PO لە Crowdin." + +msgid "Sign In" +msgstr "چونەژوورەوە" + +msgid "Sign in" +msgstr "چونەژوورەوە" + +msgid "Sign Out" +msgstr "دەرچوون" + +msgid "Sign out" +msgstr "دەرچوون" + +msgid "Waiting for authentication…" +msgstr "چاوەڕوانی ڕێگەپێدانبە…" + +msgid "Updating user information…" +msgstr "نوێکردنەوەی زانیارییەکانی بەکارهێنەر…" + +msgid "Signed in as:" +msgstr "چویتەژوورەوە وەک:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin زانیاری زیاتر دەربارەی" + +msgid "Learn more about Crowdin" +msgstr "Crowdin زانیاری زیاتر دەربارەی" + +msgid "Sign in to Crowdin" +msgstr "Crowdin چونەژوورەوە بۆ" + +msgid "Open Crowdin translation" +msgstr "Crowdin کردنەوەی ئامرازی وەرگێڕانی" + +msgid "Project:" +msgstr "پڕۆژە:" + +msgid "Language:" +msgstr "زمان:" + +msgid "File:" +msgstr "فایل:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "هیچ پرۆژەیەکی وەرگێران لە ئەکاونتی Crowdin تۆ ریزبەند نەکراوە." + +msgid "This project has no files that can be translated in Poedit." +msgstr "ئەم پڕۆژەیە هیچ پەڕگەیەکی تێدانیە لە Poedit وەربگێردرێت." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "ئەم فايلە دەتوانێت تەنها پاكنووس بكرێت لە رووکاری وێبی Crowdin." + +msgid "Downloading latest translations…" +msgstr "دابەزاندنی دوایین وەرگێرانەکان…" + +msgid "Syncing with Crowdin" +msgstr "هەماهەنگ کردن لەگەڵ Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "هەماهەنگ کردن لەگەڵ Crowdin سەرکەوتوو نەبوو." + +msgid "Crowdin error" +msgstr "هەڵەی Crowdin" + +msgid "Uploading translations…" +msgstr "بەرزکردنەوەی وەرگێران…" + +msgid "&Copy" +msgstr "&لەبەرگرتنەوە" + +msgid "Learn more" +msgstr "زیاتر بزانە" + +msgid "Learn More" +msgstr "زیاتر فێربە" + +#, c-format +msgid "Failed command: %s" +msgstr "فەرمان سەرکەوتوو نەبوو: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "لکاندنی کەتەلۆگەکان سەرکەوتوو نەبوو." + +msgid "Scanning files..." +msgstr "پشکنینی پەڕگەکان..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "شیکردنەوەی %s پەڕگە..." + +msgid "Failed to load extracted catalog." +msgstr "نەتوانرا دەرهێنانی کەتەلۆگ باربکرێت." + +msgid "&Help" +msgstr "&یارمەتی" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "ناتواندرێت راستەوخۆ پەڕەگەکانی MO لە ناو Poedit دەستکاری بکرێت." + +msgid "Error opening file" +msgstr "هەڵە هەیە لە کردنەوەی فایلدا" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"تکایە پەڕگەی PO دووبارە بکەرەوە و دەستکاری بکە لە جیاتی ئەمە. کاتێک تۆ " +"پاشەکەوتی دەکەیت, پەرگەی MO بە باشی نوێ دەبێتەوە." + +msgid "don't delete temporary files (for debugging)" +msgstr "پەڕگە کاتییەکان مەسڕەوە(بۆ ڕاستکردنەوە)" + +msgid "handle a poedit:// URI" +msgstr "هەڵسوکەوت بکە لەگەڵ poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "کردنەوەی کەتەلۆگ" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "پەڕگەی '%s' بوونی نییە." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "دەربارەی %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "وەشان %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit دەستکاریکەرێکی سادە و ئاسان لە بەکارهێنانە بۆ وەرگێڕانەکان." + +msgid "Catalogs Manager" +msgstr "" + +msgid "Check for Updates..." +msgstr "پشکنین بۆ نوێکردنەوە..." + +msgid "&Edit" +msgstr "&دەستکاری" + +msgid "Undo" +msgstr "پووچکردنەوە" + +msgid "Redo" +msgstr "پێشتر" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "سڕینەوە" + +msgid "Spelling and Grammar" +msgstr "" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "" + +msgid "Transformations" +msgstr "" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "دەنگ" + +msgid "Start Speaking" +msgstr "قسە بکە" + +msgid "Stop Speaking" +msgstr "راوەستاندنی قشەکردن" + +msgid "&View" +msgstr "&بینین" + +msgid "Enter Full Screen" +msgstr "پڕ بە شاشە" + +msgid "Window" +msgstr "پەنجەرە" + +msgid "Minimize" +msgstr "بچوککردنەوە" + +msgid "Zoom" +msgstr "نزیکخستنەوە" + +msgid "Bring All to Front" +msgstr "گشتی بۆ پێشەوە بهێنە" + +msgid "PO Translation" +msgstr "PO وەرگێرانی" + +msgid "The file cannot be opened." +msgstr "ئەم پەڕگەیە ناتواندرێت بکرێتەوە." + +msgid "Invalid file" +msgstr "جۆری فایل نادروستە" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "فايلەكە لەوانەيە پەڕگەکە تێک بچێت يان لە نەناسرێتەوە لەلايەن Poedit." + +msgid "&Undo" +msgstr "&پێشتر" + +msgid "&Redo" +msgstr "&دواتر" + +msgid "Cu&t" +msgstr "بڕ&ین" + +msgid "Cut" +msgstr "بڕین" + +msgid "Copy" +msgstr "لەبەرگرتنەوە" + +msgid "&Paste" +msgstr "&دانان" + +msgid "Paste" +msgstr "دانان" + +msgid "&Delete" +msgstr "&سڕینەوە" + +msgid "Select &All" +msgstr "دیاریکردنی &هەمووی" + +msgid "Select All" +msgstr "دیاریکردنی هەمووی" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "دوگمەی سەرەوە" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "دوگمەی خوارەوە" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "ناتوانیت زیاتر لە یەک پەڕگە فڕێ بدەیت لە پەنجەرەی Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "پەڕگە '%s' پەیامی کەتەلۆگ نییە." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&پەڕگە" + +msgid "&Go" +msgstr "&بڕۆ" + +msgid "Source text:" +msgstr "دەقی ژێدەر:" + +msgid "Singular:" +msgstr "تاک:" + +msgid "Plural:" +msgstr "کۆ:" + +msgid "Translation:" +msgstr "وەرگێڕان:" + +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 تەنها تێمپلەتن و هیچ وەرگێڕان لە خۆيان ناگرن. \n" +" وەرگێڕان دروەست دەکەن، پەڕگەیەکی PO ی نوێ دروست بكە لەسەر بنەماى تێمپلەتەكە." + +msgid "Create New Translation" +msgstr "دروستکردنی وەرگێڕانی نوێ" + +msgid "Create new translation" +msgstr "دروستکردنی وەرگێڕانی نوێ" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "هەڵەگری زمانەوەانی ناچالاکە چونکە فەرهەنگ نامە بۆ %s دانەمەزراوە." + +msgid "Install" +msgstr "دابەزاندن" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "کەتەلۆگ گۆڕدرا.دەتەوێت گۆڕانکارییەکان پاشەکەوت بکەیت؟" + +msgid "Save changes" +msgstr "پاشەکەوت کردنی گۆڕانکارییەکان" + +msgid "Your changes will be lost if you don't save them." +msgstr "گۆڕانکارییەکانت لەدەست دەچێت ئەگەر پاشەکەوتیان نەکەیت." + +msgid "Save" +msgstr "پاشەکەوت کردن" + +msgid "Don't save" +msgstr "پاشەکەوتی مەکە" + +msgid "Don't Save" +msgstr "پاشەکەوتی مەکە" + +msgid "Save as..." +msgstr "پاشەکەوت کردن وەکو..." + +msgid "Compile to..." +msgstr "بەروارد کردن لەگەڵ..." + +msgid "Compiled Translation Files" +msgstr "فایلە وەرگێڕدراوە بەراوردکراوەکان" + +msgid "Export as..." +msgstr "هەناردن وەکو..." + +msgid "HTML Files" +msgstr "HTML فایلەکانی" + +msgid "Open catalog template" +msgstr "کردنەوەی کەتەلۆگی داڕێژە" + +msgid "Updating catalog" +msgstr "نوێکردنەوەی تۆمارەکان" + +msgid "Source code not available." +msgstr "کۆدی سەرچاوە کراوە بوونی نیە." + +msgid "Updating failed" +msgstr "نوێکردنەوە سەرکەوتو نەبوو" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "تێئاخنرییوەکان لە کەتەلۆگەکە بە زۆری پێدەچێت نادروست بن." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"نوێکردنەوەی کەتەلۆگەکە شکستی هێنا. کرتە بکە لەسەر 'زانیاری >>' بۆ زانیاری " +"زیاتر." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" + +msgid "Validation results" +msgstr "" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "وەرگێڕانەکە ئامادەیە بۆ بەکارهێنان." + +msgid "Context:" +msgstr "" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "ڕێکخستنی زمان" + +msgid "Set language" +msgstr "ڕێکخستنی زمان" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "زمان چاک بکە" + +msgid "Fix language" +msgstr "زمان چاک بکە" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"ئەم کەتەلۆگە بڕگەی تێدایە بە فۆڕمی کۆ،بەڵام شێوەپێدانی فۆڕمی-کۆی نییە لە " +"ناوونیشانەکەدا." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"بڕگەکان لەم کەتەلۆگە کۆ فۆڕمی جیاوازیان هەیە هەژماردەکرێت لەوەی ناونیشانی " +"فۆڕمە کۆیەکانی کەتەلۆگەکە دەفەرمووێت" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "هەڵەی ڕستەکار لە ناوونیشانی فۆڕمی کۆ (\"%s\")." + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "چاککردنەوەی ناوونیشان" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "چاو پیاخشاندنەوە" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "پەیامی هەڵە لە بارکردنی پەڕگەی کەتەلۆگ '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "وەرگێڕدراو: %d لە %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "ماوە: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr " (گۆڕدراو)" + +msgid "Go" +msgstr "بڕۆ" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "پاکژکردنەوەی وەرگێڕانە سڕدراوەکان" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "دەتەوێت هەموو ئەو وەرگێڕانە لاببەیت کە چیتر بەکارنایەن؟" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"ئەگەر بەردەوام بیت لەگەڵ بەرکەنارخستن،هەموو ئەو وەرگێڕدراوانەی نیشانەکراون " +"وەکو سڕدراوە بە یەکجاریی لادەبرێن.ئەو کات دەبێت دووبارە وەریان بگێڕیتەوە " +"ئەگەر زیادکران لە داهاتوودا." + +msgid "Keep" +msgstr "هێشتنەوە" + +msgid "Purge" +msgstr "پاکژکردنەوە" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "پڕکردنەوە" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d لە یادگەی وەرگێڕانڕا پڕکرایەوە." +msgstr[1] "%d لە یادگەی وەرگێڕانڕا پڕکرایەوە." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"وەرگێرانەکان بە لێڵ نیشانکراون، چونکە لەوانەیە دروست نەبن. پێویستە " +"بەسەریاندا بچییەوە بۆ ئەوەی دڵنیاببیەوە." + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "وەرگێڕان" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" + +msgid "Copy from source text" +msgstr "لەبەرگرتنەوەی لە دەقی ژێدەرەکەوە" + +msgid "Copy from Source Text" +msgstr "لەبەرگرتنەوەی لە دەقی ژێدەرەکەوە" + +msgid "Clear translation" +msgstr "سڕینەوەی وەرگێڕان" + +msgid "Clear Translation" +msgstr "سڕینەوەی وەرگێڕان" + +msgid "Edit comment" +msgstr "دەستکاریکردنی لێدوان" + +msgid "Edit Comment" +msgstr "" + +msgid "References:" +msgstr "ئاماژەپێکراوەکان:" + +msgid "Everything" +msgstr "هەموو شتێک" + +#, c-format +msgid "Form %i" +msgstr "فۆڕم %i" + +msgid "Singular" +msgstr "تاک" + +msgid "Zero" +msgstr "سفر" + +msgid "One" +msgstr "یەک" + +msgid "Two" +msgstr "دوو" + +msgid "Plural" +msgstr "کۆ" + +msgid "Other" +msgstr "جۆری تر" + +msgid "&Bookmarks" +msgstr "&دڵخوازەکان" + +#, c-format +msgid "Set bookmark %i" +msgstr "ڕێکخستنی نیشانەکراوی %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "چوون بۆ نیشانەکراوی %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "ڕێکخستنی نیشانەکراوی %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "چوون بۆ نیشانەکراوی %i" + +msgid "Hide Sidebar" +msgstr "شاردنەوەی لاتەنیشت" + +msgid "Show Sidebar" +msgstr "پیشاندانی لاتەنیشت" + +msgid "Hide Status Bar" +msgstr "شارنەوەی شریتی دۆخ" + +msgid "Show Status Bar" +msgstr "پیشاندانی شریتی دۆخ" + +msgid "Source text" +msgstr "دەقی ژێدەر" + +msgid "Translation" +msgstr "وەرگێڕانەکان" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "سەرچاوەی دەق — %s" + +msgid "unknown language" +msgstr "زمانی نەزانراو" + +#, c-format +msgid "Translation — %s" +msgstr "وەرگێڕان — %s" + +msgid "Error:" +msgstr "هەڵە:" + +msgid "Source file" +msgstr "پەڕگەی ژێدەر" + +msgid "Source file occurrence:" +msgstr "گوێزەرەوەکانی کۆدی ژێدەر:" + +msgid "Open in Editor" +msgstr "کردنەوە لە دەستکاریکەردا" + +msgid "Open in editor" +msgstr "کردنەوە لە دەستکاریکەردا" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "هەڵە لە کردنەوەی پەڕگەی %s!" + +msgid "Find" +msgstr "دۆزینەوە" + +msgid "Replace" +msgstr "جێگۆڕین" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "هەڵبژاردنەکان" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "تەنیا گشت وشەکان" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "دۆزینەوە لە وەرگێڕاندا" + +msgid "Find in comments" +msgstr "دۆزینەوە لە لێدوانەکان" + +msgid "Close" +msgstr "داخستن" + +msgid "Replace All" +msgstr "جێگۆڕینی هەمووی" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "ناتوانرێت پرۆگرام جێبەجێ بکرێت: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - سازکاریی کەتەلۆگەکان" + +msgid "Catalog" +msgstr "کەتەلۆگ" + +msgid "Total" +msgstr "هەموو" + +msgid "Untrans" +msgstr "" + +msgid "Fuzzy" +msgstr "ناڕوون" + +msgid "Bad Tokens" +msgstr "هێماگەلە خراپەکان" + +msgid "Last modified" +msgstr "دوایین گۆڕانکاریی" + +msgid "Select directory" +msgstr "پێڕست دەستنیشان بکە" + +msgid "Directories:" +msgstr "پێڕستەکان:" + +msgid "" +msgstr "<ناونەنراو>" + +msgid "Do you want to delete the project?" +msgstr "دەتەوێت پرۆژەکە بسڕیتەوە؟" + +msgid "Confirmation" +msgstr "دڵنیاییپێدان" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"دڵنیای کە دەتەوێت نوێکردنەوەیەکی گشتیی\n" +"هەموو کەتەلۆگەکان بکەیت لەم پرۆژەیە؟" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "دەستکاریکردن" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "کورتەیەک پیشان بدە پاش نوێکردنەوەی کەتەلۆگ" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "هەمیشە سەرنج بگۆڕە بۆ خانەی تێئاخنینی دەق" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"هەرگیز مەهێڵە لیستێک لە زنجیرەنووسەکان سەرنج ببەن.ئەگەر چالاککرا،پێویستە " +"Ctrl- و ئاراستەکان بەکاربهێنیت بۆ ڕێنیشاندەرەکانی تەختەکلیل بەڵام دەشتوانیت " +"بەخێرایی دەق بنووسیت بە بێ ئەوەی کرتە لەسەر تاب بکەیت بۆ گۆڕینی سەرنج." + +msgid "Appearance" +msgstr "ڕووکار" + +msgid "Use custom list font:" +msgstr "بەکارهێنانی فۆنتی تایبەتی:" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "گۆڕینی زمان" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(پێویستی بە ویندۆزی ٨ یان نوێترە)" + +msgid "General" +msgstr "گشتی" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "ڕێکخستنەوە" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "بیرگەی وەرگێڕان" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "هەڵوەشاندنەوە" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "نوێ" + +msgid "Edit" +msgstr "دەستکاریکردن" + +msgid "Delete extractor" +msgstr "سڕینەوەی دەرهێنەر" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "ئایا دڵنیایت لە سڕینەوەی دەرهێنەری “%s” extractor؟" + +msgid "Extractors" +msgstr "دەهێنەرەکان" + +msgid "Accounts" +msgstr "هەژمار" + +msgid "Automatically check for updates" +msgstr "پشکنین بۆ نوێکردنەوە بەخۆکاری" + +msgid "Include beta versions" +msgstr "هەروەها وەشانی بیتا" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "نوێکردنەوە" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (پێشنیارکراو)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "پەرەسەندوو" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "زایدکردنی فۆڵدەر..." + +msgid "Add folders..." +msgstr "زایدکردنی فۆڵدەر..." + +msgid "Add Files..." +msgstr "زیادکردنی فایل..." + +msgid "Add files..." +msgstr "زیادکردنی فایل..." + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "ڕێچکەکان" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (پێشنیارکراو)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "لێدوان:" + +msgid "OK" +msgstr "باشە" + +msgid "C&lear" +msgstr "" + +msgid "Clear the comment" +msgstr "سڕینەوەی لێدوان" + +msgid "Create new translations project" +msgstr "دروستکردنی پرۆژەیەکی نوێی وەرگێڕان" + +msgid "Edit the project" +msgstr "دەستکاریکردنی پرۆژەکە" + +msgid "Delete the project" +msgstr "سڕینەوەی پرۆژەکە" + +msgid "Update all" +msgstr "نوێکردنەوەی هەموو" + +msgid "Update all catalogs in the project" +msgstr "نوێکردنەوەی هەموو کەتەلۆگەکان لە پرۆژەکە" + +msgid "Edit project" +msgstr "دەستکاریکردنی پرۆژە" + +msgid "Project name:" +msgstr "ناوی پرۆژە:" + +msgid "Browse" +msgstr "گەڕان" + +msgid "Add directory to the list" +msgstr "زیادکردنی پێڕست بۆ لیستەکە" + +msgid "&New..." +msgstr "" + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&کردنەوە..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&داخستن" + +msgid "&Save" +msgstr "&پاشەکەوت کردن" + +msgid "Save &as..." +msgstr "پاشەکەوت کردن &وەکو..." + +msgid "Save &As..." +msgstr "پاشەکەوت کردن &وەکو..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&سازکارییەکان..." + +msgid "Catalogs &manager" +msgstr "سازکاریی &کەتەلۆگەکان" + +msgid "Catalogs &Manager" +msgstr "سازکاریی &کەتەلۆگەکان" + +msgid "E&xit" +msgstr "چوو&نەدەرەوە" + +msgid "Quit" +msgstr "وازهێنان" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "وەرگێڕان &ناڕوونە" + +msgid "Translation Is &Fuzzy" +msgstr "وەرگێڕان &ناڕوونە" + +msgid "Edit &comment" +msgstr "دەستکاریکردنی &لێدوان" + +msgid "Edit &Comment" +msgstr "دەستکاریکردنی &لێدوان" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&پیشاندانی ئاماژەپێکراوەکان" + +msgid "&Show References" +msgstr "&پیشاندانی ئاماژەپێکراوەکان" + +msgid "&Find..." +msgstr "&دۆزینەوە..." + +msgid "Replace..." +msgstr "جێگۆڕین..." + +msgid "Find next" +msgstr "دۆزینەوەی دواتر" + +msgid "Find previous" +msgstr "دۆزینەوەی پێشتر" + +msgid "Find and Replace..." +msgstr "دۆزینەوە و جێگۆڕین..." + +msgid "Find Next" +msgstr "دۆزینەوەی دواتر" + +msgid "Find Previous" +msgstr "دۆزینەوەی پێشتر" + +msgid "&Preferences" +msgstr "&سازکارییەکان" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "ڕێکخستن بەپێی &ڕیزی پەڕگە" + +msgid "Sort by &File Order" +msgstr "ڕێکخستن بەپێی &ڕیزی پەڕگە" + +msgid "Sort by &source" +msgstr "ڕێکخستن بەپێی &ژێدەر" + +msgid "Sort by &Source" +msgstr "ڕێکخستن بەپێی &ژێدەر" + +msgid "Sort by &translation" +msgstr "ڕێکخستن بەپێی &وەرگێڕان" + +msgid "Sort by &Translation" +msgstr "ڕێکخستن بەپێی &وەرگێڕان" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&سەرەتا وەرنەگێڕدراوە تێئاخنراوەکان" + +msgid "&Untranslated Entries First" +msgstr "&سەرەتا وەرنەگێڕدراوە تێئاخنراوەکان" + +msgid "Show sidebar" +msgstr "پیشاندانی لاتەنیشت" + +msgid "Show status bar" +msgstr "پیشاندانی شریتی دۆخ" + +msgid "C&atalog" +msgstr "کە&تەلۆگ" + +msgid "&Update from sources" +msgstr "&نوێکردنەوە لە ژێدەرەکانەوە" + +msgid "&Update from Sources" +msgstr "&نوێکردنەوە لە ژێدەرەکانەوە" + +msgid "Update from &POT file..." +msgstr "نوێکردنەوە لە پەڕگەی &POT ـەوە..." + +msgid "Update from &POT File..." +msgstr "نوێکردنەوە لە پەڕگەی &POT ـەوە..." + +msgid "Sync with Crowdin" +msgstr "Crowdin هاوکاتکردن لەگەڵ " + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&پاکژکردنەوەی وەرگێڕانە سڕاوەکان" + +msgid "&Purge Deleted Translations" +msgstr "&پاکژکردنەوەی وەرگێڕانە سڕاوەکان" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "&تایبەتمەندییەکان..." + +msgid "&Done and next" +msgstr "&جێبەجێکراو و بچۆ دانەی دواتر" + +msgid "&Done and Next" +msgstr "&جێبەجێکراو و بچۆ دانەی دواتر" + +msgid "&Previous translation" +msgstr "&وەرگێڕانی پێشتر" + +msgid "&Previous Translation" +msgstr "&وەرگێڕانی پێشتر" + +msgid "&Next translation" +msgstr "&وەرگێڕانی دواتر" + +msgid "&Next Translation" +msgstr "&وەرگێڕانی دواتر" + +msgid "P&revious unfinished" +msgstr "تەواو&نەکراوی پێشوو" + +msgid "P&revious Unfinished" +msgstr "تەواو&نەکراوی پێشوو" + +msgid "Ne&xt unfinished" +msgstr "تەواو&نەکراوی دواتر" + +msgid "Ne&xt Unfinished" +msgstr "تەواو&نەکراوی دواتر" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&یارمەتی سەرهێڵ" + +msgid "&Online Help" +msgstr "&یارمەتی سەرهێڵ" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "&Poedit دەربارەی" + +msgid "&About" +msgstr "&دەربارە" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "لیستێک لە extensions جیاکرانەتەوە بە خاڵبۆر (e.g. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "دانەیەک لە لیستەی وشەکلیلەکان:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"ئەمە هاوپێچ دەکرێت بۆ دێڕی فەرمی یەکجار\n" +"بۆ هەر کلیلەوشەیەک. %k فراوانی دەکات بۆ کلیلەوشەکە." + +msgid "An item in input files list:" +msgstr "دانەیەک لە لیستەی تێئاخنینی پەڕگەکان:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"ئەمە هاوپێچ دەکرێت بۆ دێڕی فەرمی یەکجار\n" +"بۆ هەر پەڕگەیەکی تێچوو. %f فراوانی دەکات بۆ ناوی پەڕگە." + +msgid "Source code charset:" +msgstr "هێڵکاری کۆدی ژێدەر:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"ئەمە هاوپێچ دەکرێت بۆ دێڕی فەرمان\n" +"تەنیا ئەگەر کۆدی هێڵکاریی ژێدەر درابوو. %c فرااوانی دەکات بۆ نرخی هێڵکاریی." + +msgid "Catalog properties" +msgstr "تایبەتمەندییەکانی کەتەلۆگ" + +msgid "Project name and version:" +msgstr "ناو و وەشانی پرۆژە:" + +msgid "Plural Forms:" +msgstr "فۆڕمە دووانییەکان:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "Koma tîpan (Charset):" + +msgid "Team:" +msgstr "ستافی کار:" + +msgid "Team's email address:" +msgstr "پۆستی ئەلیکترۆنی ستافی کار:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "ژێدەرەکانی ڕێچکەکان" + +msgid "Extract text from source files in the following directories:" +msgstr "دەرهێنانی دەق لە پەڕگەکانی ژێدەرەوە لە پێڕستەکانی دادێ:" + +msgid "Base path:" +msgstr "ڕێچکەی بنچینە:" + +msgid "Sources keywords" +msgstr "ژێدەرەکانی کلیلەوشە" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"ئەم کلیلەوشانە بەکاربهێنە(ناوی نەخشەکان) بۆ ناسینەوەی ئەو زنجیرەنووسانەی " +"دەتوانرێت وەربگێڕدرێت\n" +"لە پەڕگەکانی ژێدەرەکە:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "کورتە نوێ بکەرەوە" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"ئەم زنجیرەنووسانە دۆزرانەوە لە ژێدەرەکاندا بەڵام لە کەتەلۆگەکەدا نەبوون.\n" +"Poedit ئێستا زیادیان دەکات بۆ کەتەلۆگەکە." + +msgid "New strings" +msgstr "زنجیرەنووسەی نوێ" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"ئەم زنجیرەنووسانە چیتر لە ژێدەرەکەدا نین.\n" +"Poedit ئێستا لە کەتەلۆگەکە لایان دەبات." + +msgid "Obsolete strings" +msgstr "زنجیرەنووسەی کۆن" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 نوێ، 0 کۆن)" + +msgid "Open" +msgstr "کردنەوە" + +msgid "Save catalog" +msgstr "پاشەکەوت کردنی کەتەلۆگ" + +msgid "Validate" +msgstr "" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "نوێکردنەوە" + +msgid "Update catalog - synchronize it with sources" +msgstr "نوێکردنەوەی کەتەلۆگ - هاوکاتکردنی لەگەڵ ژێدەرەکاندایە" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "جێگیرکردن ئەگەر زنجیرەنووسەی دەستنیشانکراو وەرگێڕانی ناڕوونی هەبوو" + +msgid "Show or hide the sidebar" +msgstr "پیشاندان و شارنەوەی لاتەنیشت" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "" + +msgid "Add comment" +msgstr "نووسینی لێدوان" + +msgid "Add Comment" +msgstr "نووسینی لێدوان" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "Poedit نوێکردنەوەی" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "چوونەپێش" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "ناتوانرێت پێڕستی کاتی دروست بکرێت." + +msgid "Welcome to Poedit" +msgstr "Poedit بەخێربێیت بۆ" + +msgid "Edit a translation" +msgstr "دەستکاریکردنی وەرگێڕان" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "چییە Crowdin" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/co.mo b/locales/co.mo new file mode 100644 index 0000000000000000000000000000000000000000..e3675352649e58b6a4100d173e5415b754dac528 GIT binary patch literal 47947 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\n" +"Language-Team: Corsican\n" +"Language: co_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: co\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Piattà stu messaghju di nutificazione" + +msgid "Don't Show Again" +msgstr "Ùn Affissà Più" + +msgid "Don't show again" +msgstr "Ùn affissà più" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i linea di u schedariu '%s' ùn hè micca caricata bè." +msgstr[1] "%i linee di u schedariu '%s' ùn sò micca caricate bè." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "A linea %d di u schedariu '%s' hè alterata (dati %s falsi)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Rubrica malfuttuta : '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Schedariu di catalogu alteratu : forma singulare msgstr impiegata inseme cù " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Schedariu di catalogu alteratu : forma plurale msgstr impiegata senza " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Ci eranu sbaglii durante u caricamentu di u catalogu. Podasse qualchì datu " +"manca o hè alteratu." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Ùn pò micca caricà u schedariu %s, podasse hè alteratu." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"U schedariu '%s' pò solu esse lettu è ùn pò micca esse\n" +"arregistratu. Ci vole à salvallu cù un altru nome." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Ùn pò micca arregistrà u schedariu %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Ci era un penseru durante a creazione di u schedariu (ma hè statu creatu " +"quantunque)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"U catalogu ùn pò micca esse arregistratu cù u mazzu di caratteri '%s' " +"indicatu in e preferenze di u catalogu.\n" +"\n" +"Hè statu arregistratu in UTF-8 è l'ozzione hè statu mudificata." + +msgid "Error saving catalog" +msgstr "Sbagliu à l'arregistramentu di u catalogu" + +msgid "PO Translation Files" +msgstr "Schedarii di Traduzzione PO" + +msgid "POT Translation Templates" +msgstr "Mudelli di Traduzzione POT" + +msgid "All Translation Files" +msgstr "Tutti Schedarii di Traduzzione" + +msgid "Merging differences..." +msgstr "Unisce e sfarenze..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' ùn hè micca un schedariu POT accettevule." + +msgid "(Use default language)" +msgstr "(Impiegà a lingua predefinita)" + +msgid "Select your preferred language" +msgstr "Selezziunà a vostra lingua preferita" + +msgid "Language selection" +msgstr "Scelta di a lingua" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Ci vole à rilancià Poedit per piglià stu cambiamentu in effettu." + +msgid "Downloading translations is disabled in this project." +msgstr "Telecaricà e traduzzioni ùn hè micca pussibule cù stu prughjettu." + +msgid "Not authorized, please sign in again." +msgstr "Micca auturizatu, autenticassi torna." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin hè una piattaforma inlinea di ghjestione di lucalizazione è un " +"attrezzu di traduzzione in collaborazione. Poedit pò dinù sincrunizà i " +"schedarii PO amministrati da Crowdin." + +msgid "Sign In" +msgstr "Autenticazione" + +msgid "Sign in" +msgstr "Autenticazione" + +msgid "Sign Out" +msgstr "Scunnettassi" + +msgid "Sign out" +msgstr "Scunnettassi" + +msgid "Waiting for authentication…" +msgstr "In attesa d'autenticazione…" + +msgid "Updating user information…" +msgstr "Mudificazione di l'infurmazioni di l'utilizatore..." + +msgid "Signed in as:" +msgstr "Autenticatu cum'è :" + +msgid "Learn More About Crowdin" +msgstr "Sapene di Più Nant'à Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Sapene di più nant'à Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Autenticassi à Crowdin" + +msgid "Open Crowdin translation" +msgstr "Apre una traduzzione Crowdin" + +msgid "Project:" +msgstr "Prughjettu :" + +msgid "Language:" +msgstr "Lingua :" + +msgid "File:" +msgstr "Schedariu :" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ùn ci hè micca di prughjettu di traduzzione in u vostru contu Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Stu prughjettu ùn hà alcunu schedariu chì pò esse traduttu in Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Stu schedariu pò esse mudificatu solu in l'interfaccia web di Crowdin." + +msgid "Downloading latest translations…" +msgstr "Telecaricamentu in corsu di l'ultime traduzzioni..." + +msgid "Syncing with Crowdin" +msgstr "Sincrunizendu cù Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Fiascu di a sincrunisazione cù Crowdin." + +msgid "Crowdin error" +msgstr "Sbagliu da Crowdin" + +msgid "Uploading translations…" +msgstr "Incaricamentu in corsu di e traduzzioni..." + +msgid "&Copy" +msgstr "Cu&pià" + +msgid "Learn more" +msgstr "Per sapene di più" + +msgid "Learn More" +msgstr "Per Sapene di Più" + +#, c-format +msgid "Failed command: %s" +msgstr "Cummanda fiasca : %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Fiascu per unisce i cataloghi gettext." + +msgid "Scanning files..." +msgstr "Esaminà i schedarii..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analisa di i schedarii %s..." + +msgid "Failed to load extracted catalog." +msgstr "Fiascu per caricà u catalogu estrattu." + +msgid "&Help" +msgstr "Ai&utu" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "I schedarii MO ùn ponu micca esse mudificati cù Poedit." + +msgid "Error opening file" +msgstr "Sbagliu à l'apertura di u schedariu" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Aprite è mudificate u schedariu PO currispondente. Quandu l'arregistrarete, " +"u schedariu MO serà mudificatu dinù." + +msgid "don't delete temporary files (for debugging)" +msgstr "ùn cacciate micca i schedarii timpurari (per spannà)" + +msgid "handle a poedit:// URI" +msgstr "Manighjà un poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Fiascu per cummunicà cù u prucessu Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Un anumalia imprevista s'hè affaccata : %s" + +msgid "Unhandled exception occurred." +msgstr "Un anumalia imprevista s'hè affaccata." + +msgid "Open catalog" +msgstr "Apre un catalogu" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "U schedariu '%s' ùn esiste micca." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Apprupositu di %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versione %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servizii" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Piattà %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Piattà l'Altri" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Affissà Tuttu" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Esce %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "" +"Poedit hè un editore di traduzzione faciule à aduprà. A traduzzione in " +"lingua corsa hè statu fatta da Patriccollu di Santa Maria Sichè." + +msgid "Catalogs Manager" +msgstr "Amministratore di Cataloghi" + +msgid "Check for Updates..." +msgstr "Circà i Rinnovi..." + +msgid "&Edit" +msgstr "&Mudificà" + +msgid "Undo" +msgstr "Disfà" + +msgid "Redo" +msgstr "Rifà" + +msgid "Paste and Match Style" +msgstr "Incullà è fà Currisponde u Stilu" + +msgid "Delete" +msgstr "Caccià" + +msgid "Spelling and Grammar" +msgstr "Ortugrafia è Gramatica" + +msgid "Show Spelling and Grammar" +msgstr "Affissà Ortugrafia è Gramatica" + +msgid "Check Document Now" +msgstr "Verificà u ducumentu avà" + +msgid "Check Spelling While Typing" +msgstr "Verificà l'ortugrafia scrivendu" + +msgid "Check Grammar With Spelling" +msgstr "Verificà a gramatica cù l'ortugrafia" + +msgid "Correct Spelling Automatically" +msgstr "Currege l'ortugrafia autumaticamente" + +msgid "Substitutions" +msgstr "Sustituzioni" + +msgid "Show Substitutions" +msgstr "Affissà i Sustituzioni" + +msgid "Smart Copy/Paste" +msgstr "Cupià/Incullà Astutu" + +msgid "Smart Quotes" +msgstr "Virgulette Astute" + +msgid "Smart Dashes" +msgstr "Lineette Astute" + +msgid "Smart Links" +msgstr "Liami Astuti" + +msgid "Text Replacement" +msgstr "Rimpiazzamentu di Testu" + +msgid "Transformations" +msgstr "Trasfurmazioni" + +msgid "Make Upper Case" +msgstr "Fà Maiuscule" + +msgid "Make Lower Case" +msgstr "Fà Minuscule" + +msgid "Capitalize" +msgstr "Tuttu in Maiuscule" + +msgid "Speech" +msgstr "Discussione" + +msgid "Start Speaking" +msgstr "Principià un Discorsu" + +msgid "Stop Speaking" +msgstr "Piantà u Discorsu" + +msgid "&View" +msgstr "&Affissà" + +msgid "Enter Full Screen" +msgstr "Passà in Screnu Sanu" + +msgid "Window" +msgstr "Finestra" + +msgid "Minimize" +msgstr "Impuculì in lu spaziu di nutificazione di u sistema" + +msgid "Zoom" +msgstr "Ingrandamentu" + +msgid "Bring All to Front" +msgstr "Mette Tuttu di Fronte" + +msgid "PO Translation" +msgstr "Traduzzione PO" + +msgid "The file cannot be opened." +msgstr "U schedariu ùn pò micca esse apertu." + +msgid "Invalid file" +msgstr "Schedariu inaccettevule" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"U schedariu pò esse alteratu o in una forma micca ricunnisciuta da Poedit." + +msgid "&Undo" +msgstr "&Disfà" + +msgid "&Redo" +msgstr "&Rifà" + +msgid "Cu&t" +msgstr "&Taglià" + +msgid "Cut" +msgstr "Taglià" + +msgid "Copy" +msgstr "Cupià" + +msgid "&Paste" +msgstr "&Incullà" + +msgid "Paste" +msgstr "Incullà" + +msgid "&Delete" +msgstr "Caccià" + +msgid "Select &All" +msgstr "&Selezziunà Tuttu" + +msgid "Select All" +msgstr "Selezziunà Tuttu" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maiusc+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Entrée" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Sù" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Ghjò" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maiusc" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Ùn pudete micca depone più d'unu schedariu in a finestra di Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "U schedariu '%s' ùn hè micca un catalogu di messaghju." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Schedariu" + +msgid "&Go" +msgstr "&Và" + +msgid "Source text:" +msgstr "Testu d'urigine :" + +msgid "Singular:" +msgstr "Singulare :" + +msgid "Plural:" +msgstr "Plurale :" + +msgid "Translation:" +msgstr "Traduzzione :" + +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 "" +"I schedarii POT sò solu mudelli è ùn cuntenenu micca di traduzzione.\n" +"Per fà una traduzzione, create un novu schedariu PO appughjatu nant'à u " +"mudellu." + +msgid "Create New Translation" +msgstr "Creà una Nova Traduzzione" + +msgid "Create new translation" +msgstr "Creà una nova traduzzione" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"U cuntrollu d'ortugrafia hè disattivatu, perchè u dizziunariu %s ùn hè micca " +"installatu." + +msgid "Install" +msgstr "Installà" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalogu mudificatu. Vulete arregistrà i cambiamenti ?" + +msgid "Save changes" +msgstr "Arregistrà i cambiamenti" + +msgid "Your changes will be lost if you don't save them." +msgstr "I vostri cambiamenti seranu persi s'è voi ùn li arregistrate micca." + +msgid "Save" +msgstr "Arregistrà" + +msgid "Don't save" +msgstr "Ùn arregistrà micca" + +msgid "Don't Save" +msgstr "Ùn Arregistrà Micca" + +msgid "Save as..." +msgstr "Arregistrà cù u nome..." + +msgid "Compile to..." +msgstr "Compilà ver di..." + +msgid "Compiled Translation Files" +msgstr "Schedarii di Traduzzione Trasfurmati da una Cumpilazione" + +msgid "Export as..." +msgstr "Espurtà cù u nome..." + +msgid "HTML Files" +msgstr "Schedarii HTML" + +msgid "Open catalog template" +msgstr "Apre u mudellu di catalogu" + +msgid "Updating catalog" +msgstr "Mudificazione di catalogu" + +msgid "Source code not available." +msgstr "U testu d'urigine ùn hè micca dispunibule." + +msgid "Updating failed" +msgstr "Mudificazione fiasca" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"E traduzzioni ùn ponu micca esse mudificate à partesi di u testu d'urigine, " +"perchè alcunu testu ùn hè statu trovu in u locu indicatu in e Pruprietà di u " +"catalogu." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Qualchì entrata in u catalogu hè gattiva." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Mudificazione di u catalogu falsa. Sceglie 'Detaglii >>' per sapene più." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d penseru trovu in a traduzzione." +msgstr[1] "%d penseri trovi in a traduzzione." + +msgid "Validation results" +msgstr "Risultati di a validazione" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Entrate cù sbaglii sò marcate di rossu in a lista. I detaglii di u sbagliu " +"seranu videvule quandu l'entrata serà selezziunata." + +msgid "The file was saved safely." +msgstr "U schedariu hè statu arregistratu bè." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"U schedariu hè statu arregistratu è trasfurmatu in a forma MO, ma ùn puderà " +"micca funziunà bè." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"U schedariu hè statu arregistratu bè, ma ùn pò micca esse trasfurmatu in a " +"forma MO è impiegatu." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"U schedariu hè statu trasfurmatu in a forma MO, ma podasse ùn funziunerà " +"micca bè." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "U schedariu ùn pò micca esse trasfurmatu in a forma MO è impiegatu." + +msgid "No problems with the translation found." +msgstr "Ùn ci hè penseri cù sta traduzzione." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"A traduzzione hè pronta à l'approdu, ma %d entrata ùn hè micca tradutta." +msgstr[1] "" +"A traduzzione hè pronta à l'approdu, ma %d entrate ùn sò micca tradutte." + +msgid "The translation is ready for use." +msgstr "A traduzzione hè pronta à l'approdu." + +msgid "Context:" +msgstr "Cuntestu :" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit hà currettu autumaticamente u cuntenutu gattivu in u schedariu “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"U schedariu cuntinia elementi in doppiu, ciò ch'ùn hè micca permessu in i " +"schedarii PO è pudia impedisce u schedariu d'esse impiegatu. Poedit hà " +"currettu u penseru, ma ci vole à verificà e traduzzioni di l'elementi chì sò " +"marcati cum'è dubbitosi è à curregelli s'ellu hè bisognu." + +msgid "Language of the translation isn't set." +msgstr "A lingua di a traduzzione ùn hè micca definita." + +msgid "Set Language" +msgstr "Definisce a Lingua" + +msgid "Set language" +msgstr "Definisce a lingua" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"E suggestioni ùn sò micca dispunibule s'è a lingua di traduzzione ùn hè " +"micca definita bè. D'altre funzioni, cum'è e forme plurale, ponu esse " +"affettate dinù." + +msgid "Language of the translation is the same as source language." +msgstr "A lingua di a traduzzione hè listessa chì quella d'urigine." + +msgid "Fix Language" +msgstr "Currege a Lingua" + +msgid "Fix language" +msgstr "Currege a lingua" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Stu catalogu hà entrate cù forme plurale, ma a rubrica Forme-Plurale ùn hè " +"micca pronta." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Entrate in stu catalogu anu sfarente contu di forme plurale chì ciò chì hè " +"scrittu in a rubrica di stu catalogu" + +msgid "Required header Plural-Forms is missing." +msgstr "Manca a rubrica Forme-Plurale chì hè richiesta." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Sbagliu di sintassa in a rubrica Forme-Plurale (\"%s\")." + +msgid "Fix the Header" +msgstr "Currege a Rubrica" + +msgid "Fix the header" +msgstr "Currege a rubrica" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"L'espressione di e forme plurale impiegata da u catalogu hè strana per a " +"lingua %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revista" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "" +"Sbagliu durante u caricamentu di u schedariu di catalogu di messaghju '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduttu : %d frà %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Restu : %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d sbagliu" +msgstr[1] "%d sbaglii" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrata" +msgstr[1] "%d entrate" + +msgid " (unsaved)" +msgstr " (micca arregistratu)" + +msgid " (modified)" +msgstr " (mudificatu)" + +msgid "Go" +msgstr "Và" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Fiascu per rinnovà a memoria di a traduzzione: %s" + +msgid "Purge deleted translations" +msgstr "Spurgulà e traduzzioni cacciate" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Vulete toglie tutte e traduzzioni ch'ùn sò più impiegate ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"S'è voi cuntinuate cusì, tutte e traduzzioni marchate cum'è cacciate seranu " +"tolte per sempre. Ci vulerà à traducele torna s'elle sò aghjunte à l'avvene." + +msgid "Keep" +msgstr "Cunservà" + +msgid "Purge" +msgstr "Spurgulà" + +msgid "Fill missing translations from TM" +msgstr "Riempie e traduzzioni viote à partesi di a MdT" + +msgid "Only fill in exact matches" +msgstr "Riempie solu e frase uguale" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Di bona regula, i resulti chì s'assumuglianu sò riempiuti dinù è annutati " +"cum'è dubbitosi. Attivà st'ozzione per riempie solu e frase uguale." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ùn marcate micca e frase uguale cum'è dubbitose" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Attivà solu st'ozzione s'è voi site sicuru di a vostra MdT. Osinnò tutte e " +"suggestioni chì venenu di a MdT sò annutate cum'è dubbitose è deveranu esse " +"verificate." + +msgid "Fill" +msgstr "Riempie" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrata appruvistata da a memoria di traduzzione." +msgstr[1] "%d entrate appruvistate da a memoria di traduzzione." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"E traduzzioni sò statu marcate cum'è dubbitose, perchè sò podasse imprecise. " +"Ci vole à verificà a so accuratezza." + +msgid "No entries could be filled from the translation memory." +msgstr "Alcuna entrata appruvistata da a memoria di traduzzione." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"A MdT ùn cuntene alcuna frasa simile à u cuntenutu di stu schedariu. Quessu " +"funziona bè per traduzzioni mezu-autumatiche dopu chì Poedit abbia amparatu " +"abbastanza da i schedarii tradutti da una manera manuale." + +msgid "Translating" +msgstr "Traduzzione autumatica in corsu" + +msgid "Filling missing translations from TM..." +msgstr "Riempiime in corsu di e traduzzioni viote à partesi di a MdT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u frasa tradutta autumaticamente" +msgstr[1] "%u frase tradutte autumaticamente" + +msgid "Copy from source text" +msgstr "Cupià da u testu d'&urigine" + +msgid "Copy from Source Text" +msgstr "Cupià da u Testu d'&Urigine" + +msgid "Clear translation" +msgstr "&Viutà a traduzzione" + +msgid "Clear Translation" +msgstr "&Viutà a Traduzzione" + +msgid "Edit comment" +msgstr "Mudificà u cummentu" + +msgid "Edit Comment" +msgstr "Mudificà u Cummentu" + +msgid "References:" +msgstr "Referenze :" + +msgid "Everything" +msgstr "Tuttu" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singulare" + +msgid "Zero" +msgstr "Zeru" + +msgid "One" +msgstr "Unu" + +msgid "Two" +msgstr "Dui" + +msgid "Plural" +msgstr "Plurale" + +msgid "Other" +msgstr "Altru" + +msgid "&Bookmarks" +msgstr "&Indette" + +#, c-format +msgid "Set bookmark %i" +msgstr "Definisce l'indetta %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Andà à l'indetta %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Definisce l'Indetta %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Andà à l'Indetta %i" + +msgid "Hide Sidebar" +msgstr "Piantà a Barra Laterale" + +msgid "Show Sidebar" +msgstr "Affissà a Barra Laterale" + +msgid "Hide Status Bar" +msgstr "Piattà a Barra di Statu" + +msgid "Show Status Bar" +msgstr "Affissà a Barra di Statu" + +msgid "Source text" +msgstr "Testu d'urigine" + +msgid "Translation" +msgstr "Traduzzione" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Testu d'urigine — %s" + +msgid "unknown language" +msgstr "lingua scunnisciuta" + +#, c-format +msgid "Translation — %s" +msgstr "Traduzzione — %s" + +msgid "Error:" +msgstr "Sbagliu :" + +msgid "Source file" +msgstr "Schedariu d'urigine" + +msgid "Source file occurrence:" +msgstr "Occurrenza di schedariu d'urigine :" + +msgid "Open in Editor" +msgstr "Apre cù l'Editore" + +msgid "Open in editor" +msgstr "Apre cù l'editore" + +msgid "No references for the selected item." +msgstr "Alcuna referenza per l'elementu selezziunatu." + +#, c-format +msgid "Error opening file %s!" +msgstr "Sbagliu à l'apertura di u schedariu '%s' !" + +msgid "Find" +msgstr "Circà" + +msgid "Replace" +msgstr "Rimpiazzà" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Ozzioni" + +msgid "Ignore case" +msgstr "Ùn sfarenzià micca maiuscule è minuscule" + +msgid "Wrap around" +msgstr "Circunvoglie" + +msgid "Whole words only" +msgstr "Solu e parolle sane" + +msgid "Find in source texts" +msgstr "Circà in i testi d'urigine" + +msgid "Find in translations" +msgstr "Circà in e traduzzioni" + +msgid "Find in comments" +msgstr "Circà in i cummenti" + +msgid "Close" +msgstr "Chjode" + +msgid "Replace All" +msgstr "Rimpiazzà Tutti" + +msgid "Replace all" +msgstr "Rimpiazzà tutti" + +msgid "< &Previous" +msgstr "< &Precedente" + +msgid "&Next >" +msgstr "&Seguente >" + +msgid "String to find" +msgstr "Frasa à circà" + +msgid "Replacement string" +msgstr "Frasa di rimpiazzamentu" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ùn pò micca eseguisce u prugramma : %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Codice o Nome di a Lingua (i.e. : en_GB)" + +msgid "Translation Language" +msgstr "Lingua di Traduzzione" + +msgid "Language of the translation:" +msgstr "Lingua di a traduzzione :" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Amministratore di cataloghi" + +msgid "Catalog" +msgstr "Catalogu" + +msgid "Total" +msgstr "Tutale" + +msgid "Untrans" +msgstr "Micca traduttu" + +msgid "Fuzzy" +msgstr "Dubbitosu" + +msgid "Bad Tokens" +msgstr "Marche Gattive" + +msgid "Last modified" +msgstr "Mudificatu u" + +msgid "Select directory" +msgstr "Selezziunà u cartulare" + +msgid "Directories:" +msgstr "Cartulari :" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vulete caccià u prughjettu ?" + +msgid "Confirmation" +msgstr "Cunfirmazione" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Site sicuru di vulè mudificà in massa\n" +"tutti i cataloghi di stu prughjettu ?" + +msgid "Information about the translator" +msgstr "Infurmazione apprupositu di u traduttore" + +msgid "Name:" +msgstr "Nome :" + +msgid "Your Name" +msgstr "U vostru Nome" + +msgid "Email:" +msgstr "Indirizzu elettronicu:" + +msgid "your_email@example.com" +msgstr "u_vostru_indirizzu_email@esempiu.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"I vostri nome è indirizzu elettronicu sò solu impiegati per definisce a " +"rubrica di l'Ultimu Traduttore in i schedarii gettext GNU." + +msgid "Editing" +msgstr "Mudificazione" + +msgid "Automatically compile MO file when saving" +msgstr "Pruduce autumaticamente u schedariu MO à l'arregistramentu" + +msgid "Show summary after catalog update" +msgstr "Affissà u riassuntu dopu à u rinnovu di u catalogu" + +msgid "Check spelling" +msgstr "Verificà l'ortugrafia" + +msgid "Always change focus to text input field" +msgstr "Dà a primura à u testu piuttostu chì à a lista" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ùn dà mai a primura à a lista di frase. Osinnò, ci vole à impiegà e Ctrl-" +"fleccie per navigà, ma hè ancu pussibule di scrive u testu cusì, senza pone " +"nant'à Tab per cambià a primura." + +msgid "Appearance" +msgstr "Aspettu" + +msgid "Use custom list font:" +msgstr "Impiegà una grafia persunalizata per a lista :" + +msgid "Use custom text fields font:" +msgstr "Impiegà una grafia persunalizata per i testi :" + +msgid "Change UI language" +msgstr "Cambià a lingua di l'interfaccia" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(richiede Windows 8 o più recente)" + +msgid "General" +msgstr "Generale" + +msgid "Use translation memory" +msgstr "Impiegà a memoria di traduzzione" + +msgid "Learn From Files..." +msgstr "Amparà da i Schedarii..." + +msgid "Learn from files..." +msgstr "Amparà da schedarii..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Viutà" + +msgid "Consult TM when updating from sources" +msgstr "Esaminà a MdT quandu a mudificazione si face da i testi d'urigine" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"S'è st'ozzione hè attiva, Poedit pruverà di riempie e nove entrate\n" +"impieghendu e vostre precedente traduzzioni arregistrate in a memoria di\n" +"traduzzione. S'è a MdT hè guasi viota, ùn serà micca assai efficiente.\n" +"Più vi ferete di traduzzioni, più a MdT crescerà è serà efficiente." + +msgid "Stored translations:" +msgstr "Traduzzioni ammanugliate :" + +msgid "Database size on disk:" +msgstr "Dimensione di a banca di dati nant'à u dischettu :" + +msgid "Select translation files to import" +msgstr "Selezziunà i schedarii di traduzzione à impurtà" + +msgid "Translation Memory" +msgstr "Memoria di Traduzzione" + +msgid "Importing translations..." +msgstr "Impurtazione di traduzzioni in corsu..." + +msgid "Finalizing..." +msgstr "Cumpiimentu in corsu..." + +msgid "Reset translation memory" +msgstr "Viutà a memoria di traduzzione" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Site sicuru di vulè viutà a memoria di traduzzione ?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"A viotatura di a memoria di traduzzione caccierà tutte e traduzzioni chì sò " +"arregistrate dentru. Ùn pudete micca disfà st'operazione." + +msgid "Cancel" +msgstr "Abbandunà" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MdT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"I prugrammi d'estrazzione sò fatti per truvà e frase traducevule in i " +"schedarii di testu d'urigine, è estraelle per ch'elle sianu tradutte." + +msgid "New" +msgstr "Novu" + +msgid "Edit" +msgstr "Mudificà" + +msgid "Delete extractor" +msgstr "Squassà l'attrezzu d'estrazzione" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Site sicuru di vulè squassà l'attrezzu d'estrazzione “%s” ?" + +msgid "Extractors" +msgstr "Estrazzione" + +msgid "Accounts" +msgstr "Conti" + +msgid "Automatically check for updates" +msgstr "Cuntrollà autumaticamente i rinnovi" + +msgid "Include beta versions" +msgstr "Include e versioni 'beta'" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"E versioni 'beta' cuntenenu l'ultimi funzioni è migliuramenti ma ponu esse " +"un pocu menu stabule." + +msgid "Updates" +msgstr "Rinnovi" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ste preferenze affettanu a forma interna di i schedarii PO. Accunciatele s'è " +"voi avete una dumanda particulare, per indettu, un cuntrollu di versione." + +msgid "Line endings:" +msgstr "Fine di a linea :" + +msgid "Unix (recommended)" +msgstr "Unix (ricumandatu)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Girà à :" + +msgid "Preserve formatting of existing files" +msgstr "Cunservà a forma di i schedarii chì esistenu" + +msgid "Advanced" +msgstr "Espertu" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferenze di %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Sguillà é Depone i Cartulari Quì\n" +"\n" +"o impiegate u buttone +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Sguillà é depone i cartulari quì\n" +"\n" +"o impiegate u buttone +" + +msgid "Add Folders..." +msgstr "Aghjunghje Cartulari..." + +msgid "Add folders..." +msgstr "Aghjunghje cartulari..." + +msgid "Add Files..." +msgstr "Aghjunghje Schedarii..." + +msgid "Add files..." +msgstr "Aghjunghje schedarii..." + +msgid "Add Wildcard..." +msgstr "Aghjunghje un Caratteru Genericu..." + +msgid "Add wildcard..." +msgstr "Aghjunghje un caratteru genericu..." + +msgid "Paths" +msgstr "Passeghji" + +msgid "Excluded paths" +msgstr "Passeghji escludi" + +msgid "Additional keywords" +msgstr "Parolle chjave addiziunale" + +msgid "Name of the project the translation is for" +msgstr "Nome di prughjettu di sta traduzzione" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "i.e. : nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (ricumandatu)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"In primu locu, ci vole à arregistrà u schedariu. Osinnò sta sezzione ùn pò " +"micca esse mudificata." + +msgid "Comment:" +msgstr "Cummentu :" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Viutà" + +msgid "Clear the comment" +msgstr "Viutà u cummentu" + +msgid "Create new translations project" +msgstr "Creà un novu prughjettu di traduzzioni" + +msgid "Edit the project" +msgstr "Mudificà u prughjettu" + +msgid "Delete the project" +msgstr "Caccià u prughjettu" + +msgid "Update all" +msgstr "Mudificà tuttu" + +msgid "Update all catalogs in the project" +msgstr "Mudificà tutti i cataloghi di stu prughjettu" + +msgid "Edit project" +msgstr "Mudificà u prughjettu" + +msgid "Project name:" +msgstr "Nome di prughjettu :" + +msgid "Browse" +msgstr "Sfuglià" + +msgid "Add directory to the list" +msgstr "Aghjunghje u cartulare à a lista" + +msgid "&New..." +msgstr "&Novu..." + +msgid "New from &POT/PO file..." +msgstr "Novu da un schedariu P&OT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Novu da un Schedariu P&OT/PO..." + +msgid "&Open..." +msgstr "&Apre..." + +msgid "Open Recent" +msgstr "Apre Recente" + +msgid "Open from Crowdin..." +msgstr "Apre cù Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Apre Cù Crowdin..." + +msgid "&Close" +msgstr "&Chjode" + +msgid "&Save" +msgstr "A&rregistrà" + +msgid "Save &as..." +msgstr "Arregistrà &cù u nome..." + +msgid "Save &As..." +msgstr "Arregistrà &cù u Nome..." + +msgid "Compile to MO..." +msgstr "Trasfurmà in un schedariu MO..." + +msgid "E&xport as HTML..." +msgstr "Espurtà cum'è &HTML..." + +msgid "Check for updates..." +msgstr "Circà i rinno&vi..." + +msgid "&Preferences..." +msgstr "&Preferenze..." + +msgid "Catalogs &manager" +msgstr "A&mministratore di cataloghi" + +msgid "Catalogs &Manager" +msgstr "A&mministratore di Cataloghi" + +msgid "E&xit" +msgstr "&Esce" + +msgid "Quit" +msgstr "Esce" + +msgid "Copy from singular" +msgstr "Cupià da singulare" + +msgid "Copy From Singular" +msgstr "Cupià da Singulare" + +msgid "Translation is &fuzzy" +msgstr "A traduzzione hè du&bbitosa" + +msgid "Translation Is &Fuzzy" +msgstr "A Traduzzione Hè Du&bbitosa" + +msgid "Edit &comment" +msgstr "&Mudificà u cummentu" + +msgid "Edit &Comment" +msgstr "&Mudificà u Cummentu" + +msgid "Suggestions" +msgstr "Suggestioni" + +msgid "&Show references" +msgstr "&Affissà e referenze" + +msgid "&Show References" +msgstr "&Affissà e Referenze" + +msgid "&Find..." +msgstr "&Circà..." + +msgid "Replace..." +msgstr "Rimpiazzà..." + +msgid "Find next" +msgstr "Circà seguente" + +msgid "Find previous" +msgstr "Circà precedente" + +msgid "Find and Replace..." +msgstr "Circà è Rimpiazzà..." + +msgid "Find Next" +msgstr "Circà Seguente" + +msgid "Find Previous" +msgstr "Circà Precedente" + +msgid "&Preferences" +msgstr "&Preferenze" + +msgid "Display entry &IDs" +msgstr "Affissà l'&ID di l'entrate" + +msgid "Display Entry &IDs" +msgstr "Affissà l'&ID di l'Entrate" + +msgid "Sort by &file order" +msgstr "Classificà da l'&ordine di schedariu" + +msgid "Sort by &File Order" +msgstr "Classificà da l'&Ordine di Schedariu" + +msgid "Sort by &source" +msgstr "Classificà da u testu d'&urigine" + +msgid "Sort by &Source" +msgstr "Classificà da u Testu d'&Urigine" + +msgid "Sort by &translation" +msgstr "Classificà da a &traduzzione" + +msgid "Sort by &Translation" +msgstr "Classificà da a &Traduzzione" + +msgid "&Group by context" +msgstr "&Gruppu da contestu" + +msgid "&Group By Context" +msgstr "&Gruppu da Contestu" + +msgid "Entries with errors first" +msgstr "Elementi cù &sbaglii in primu" + +msgid "Entries with Errors First" +msgstr "Elementi cù Sbaglii in Primu" + +msgid "&Untranslated entries first" +msgstr "&Elementi micca tradutti in primu" + +msgid "&Untranslated Entries First" +msgstr "&Elementi Micca Tradutti in Primu" + +msgid "Show sidebar" +msgstr "Affissà a barra laterale" + +msgid "Show status bar" +msgstr "Affissà a barra di statu" + +msgid "C&atalog" +msgstr "&Catalogu" + +msgid "&Update from sources" +msgstr "&Mudificà da i testi d'urigine" + +msgid "&Update from Sources" +msgstr "&Mudificà da i Testi d'Urigine" + +msgid "Update from &POT file..." +msgstr "Mudificà da un schedariu P&OT..." + +msgid "Update from &POT File..." +msgstr "Mudificà da un Schedariu P&OT..." + +msgid "Sync with Crowdin" +msgstr "Sincrunizà cù Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Riempie e traduzzioni viote à partesi di a Md&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Riempie e Traduzzioni Viote à partesi di a Md&T..." + +msgid "&Purge deleted translations" +msgstr "Spur&gulà e traduzzioni cacciate" + +msgid "&Purge Deleted Translations" +msgstr "Spur&gulà e Traduzzioni Cacciate" + +msgid "&Validate translations" +msgstr "&Validazione di e traduzzione" + +msgid "&Validate Translations" +msgstr "&Validazione di e Traduzzione" + +msgid "&Properties..." +msgstr "&Pruprietà..." + +msgid "&Done and next" +msgstr "&Fattu eppò seguente" + +msgid "&Done and Next" +msgstr "&Fattu eppò Seguente" + +msgid "&Previous translation" +msgstr "Traduzzione &precedente" + +msgid "&Previous Translation" +msgstr "Traduzzione &Precedente" + +msgid "&Next translation" +msgstr "Traduzzione &seguente" + +msgid "&Next Translation" +msgstr "Traduzzione &Seguente" + +msgid "P&revious unfinished" +msgstr "Incumpletu p&recedente" + +msgid "P&revious Unfinished" +msgstr "Incumpletu P&recedente" + +msgid "Ne&xt unfinished" +msgstr "Incumpletu s&eguente" + +msgid "Ne&xt Unfinished" +msgstr "Incumpletu S&eguente" + +msgid "Previous plural form" +msgstr "Forma plurale precedente" + +msgid "Previous Plural Form" +msgstr "Forma Plurale Precedente" + +msgid "Next plural form" +msgstr "Forma plurale seguente" + +msgid "Next Plural Form" +msgstr "Forma Plurale Seguente" + +msgid "&Online help" +msgstr "Aiutu &inlinea" + +msgid "&Online Help" +msgstr "Aiutu &Inlinea" + +msgid "&GNU gettext manual" +msgstr "&Ducumentazione GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Ducumentazione GNU gettext" + +msgid "&About Poedit" +msgstr "&Apprupositu di Poedit" + +msgid "&About" +msgstr "&Apprupositu" + +msgid "Extractor setup" +msgstr "Installazione di l'attrezzu d'estrazzione" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista di i stinzioni separati da punti-virgule (i.e. *.cpp;*.h) :" + +msgid "Invocation:" +msgstr "Invucazione :" + +msgid "Command to extract translations:" +msgstr "Cummanda per estrae e traduzzioni :" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ghjè a cummanda impiegata per lancià l'attrezzu d'estrazzione.\n" +"%o hè u nome di schedariu in esciuta, %K per a lista\n" +"di e parolle chjave, %F per a lista di schedarii in entrata,\n" +"%C per l'ozzione di u mazzu di caratteri (fighjate inghjò)." + +msgid "An item in keywords list:" +msgstr "Un elementu in a lista di e parolle chjave :" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Quessu serà ligatu à a linea di cummanda una volta\n" +"per ogni parolla chjave. %k estende à a parolla chjave." + +msgid "An item in input files list:" +msgstr "Un elementu in a lista di schedarii d'entrata :" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Quessu serà ligatu à a linea di cummanda una volta per ogni\n" +"schedariu in entrata. %f estende à u nome di schedariu." + +msgid "Source code charset:" +msgstr "Mazzu di caratteri di u testu d'urigine :" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Quessu serà ligatu à a linea di cummanda solu s'è ci hè un\n" +"mazzu di caratteri di u testu d'urigine. %c estende à stu valore." + +msgid "Catalog properties" +msgstr "Pruprietà di u catalogu" + +msgid "Project name and version:" +msgstr "Nome è versione di prughjettu :" + +msgid "Plural Forms:" +msgstr "Forme Plurale :" + +msgid "Use default rules for this language" +msgstr "Impiegà e regule predefinite per sta lingua" + +msgid "Use custom expression" +msgstr "Impiegà un espressione predefinita" + +msgid "Learn about plural forms" +msgstr "Per amparà nant'à e forme plurale" + +msgid "Charset:" +msgstr "Mazzu di caratteri :" + +msgid "Team:" +msgstr "Squadra :" + +msgid "Team's email address:" +msgstr "Indirizzu elettronicu di a squadra :" + +msgid "Translation properties" +msgstr "Pruprietà di a traduzzione" + +msgid "Sources paths" +msgstr "Passeghji d'urigine" + +msgid "Extract text from source files in the following directories:" +msgstr "Estrae testu da i schedarii d'urigine in sti cartulari :" + +msgid "Base path:" +msgstr "Passeghju di basa :" + +msgid "Sources keywords" +msgstr "Parolle chjave di testi d'urigine" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Aduprate ste parolle chjave (nomi di funzioni) per ricunnosce e frase\n" +"chì sò à traduce in i schedarii d'urigine :" + +msgid "Learn about gettext keywords" +msgstr "Per amparà nant'à e parolle chjave gettext" + +msgid "Update summary" +msgstr "Riassuntu di e mudificazioni" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ste frase sò statu trove in i testi d'urigine ma micca in u catalogu.\n" +"Poedit hà da aghjunghjelle à u catalogu avà." + +msgid "New strings" +msgstr "Frase nove" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ste frase ùn sò più in i testi d'urigine.\n" +"Poedit hà da togliele da u catalogu avà." + +msgid "Obsolete strings" +msgstr "Frase anziane" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nova, 0 anziana)" + +msgid "Open" +msgstr "Apre" + +msgid "Save catalog" +msgstr "Arregistrà u catalogu" + +msgid "Validate" +msgstr "Validazione" + +msgid "Check for errors in the translation" +msgstr "Circà i sbaglii in a traduzzione" + +msgid "Update" +msgstr "Mudificà" + +msgid "Update catalog - synchronize it with sources" +msgstr "Mudificà u catalogu - Sincrunizallu cù i testi d'urigine" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Attivata s'è a frasa selezziunata hà una traduzzione dubbitosa" + +msgid "Show or hide the sidebar" +msgstr "Affissà o piantà a barra laterale" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "U precedente testu d'urigine :" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"U vechju testu d'urigine (nanzu ch'ellu sia cambiatu) chì curresponde à a " +"traduzzione dubbitosa." + +msgid "Notes for translators:" +msgstr "Annutazioni per i traduttori :" + +msgid "Add comment" +msgstr "Aghjunghje un cummentu" + +msgid "Add Comment" +msgstr "Aghjunghje un Cummentu" + +msgid "Translation suggestions:" +msgstr "Suggestioni di traduzzione :" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Alcuna occurrenza trova" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Alcuna Occurrenza Trova" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Sta frasa hè statu trova in a memoria di traduzzione di Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nove : %i, anziane : %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Impurtazione di traduzzioni : %d" + +msgid "Poedit Update" +msgstr "Rinnovu di Poedit" + +msgid "Preparing migration..." +msgstr "Appruntamentu di a migrazione..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Statu di fine di migrazione : %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit hà bisognu di cunvertisce a vostra memoria di traduzzione in una nova " +"forma." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"St'operazione hè à fà nanzu chì Poedit possa dimarrà. Quessa pò durà qualchì " +"minuta s'ella ci hè assai traduzzioni, ma aspessu, pò andà piu prestu." + +msgid "Proceed" +msgstr "Cuntinuà" + +msgid "Translation memory migration failed." +msgstr "Migrazione fiasca di a memoria di traduzzione." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"I dati di a vostra memoria di traduzzione ùn ponu micca esse trasfurmati. U " +"sbagliu hè :\n" +"\n" +"%s\n" +"Mandate un email à help@poedit.net è u curregeremu." + +msgid "Cannot create temporary directory." +msgstr "Ùn pò micca creà u cartulare timpurariu." + +msgid "Welcome to Poedit" +msgstr "Benvenuta in Poedit" + +msgid "Edit a translation" +msgstr "Mudificà una traduzzione" + +msgid "Open an existing PO file and edit the translation." +msgstr "Apre un schedariu PO chì esiste è mudificà a traduzzione." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Parte da un schedariu PO o un mudellu POT chì esiste per creà una nova " +"traduzzione." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Cullaburà à una traduzzione cù Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Telecaricà un schedariu à partesi di un prughjettu Crowdin, traducellu è " +"sincrunizà e vostre mudificazioni dopu." + +msgid "What is Crowdin?" +msgstr "Cosa hè Crowdin ?" + +msgid "There are no translations. That’s unusual." +msgstr "Ùn ci hè mancuna traduzzione. Quessa pare stranu." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"L'elementi traducevule ùn sò micca aghjunti à a manu in u sistema Gettext, " +"ma sò autumaticamente estratti\n" +"da u testu d'urigine. Cusì, sò sempre attualizati è esatti.\n" +"Di bona regula, i traduttori impieganu i schedarii di mudellu PO (POT) " +"appruntati da u prugrammatore." + +msgid "(Learn more about GNU gettext)" +msgstr "(Sapene di più nant'à GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"A manera a più simplice di riempie stu catalogu hè di rinnuvallu da un POT :" + +msgid "Update from POT" +msgstr "Mudificà da un POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Piglià e frase traducevule da un mudellu POT chì esiste." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Pudete dinù estrae e frase traducevule da i schedarii d'urigine :" + +msgid "Extract from sources" +msgstr "Estrae da i schedarii d'urigine" + +msgid "Configure source code extraction in Properties." +msgstr "" +"Sceglie l'ozzioni di l'estrazzione da i schedarii d'urigine in Pruprietà." + +msgid "Sync" +msgstr "Sincrunizà" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincrunizà a traduzzione cù Crowdin" diff --git a/locales/cs.mo b/locales/cs.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3fb4e2a2530393f14f2d6bdd53830f49d517881 GIT binary patch literal 47148 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

  • $K7^TL3~}nrx+vpzmp(4{xqDS5 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 Zy!<_8bl>@Lw6>!$aDeebV~$Uw{eSJ9@>l=> literal 0 HcmV?d00001 diff --git a/locales/cs.po b/locales/cs.po new file mode 100644 index 0000000..df3d735 --- /dev/null +++ b/locales/cs.po @@ -0,0 +1,1966 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:03-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Schovat toto oznámení" + +msgid "Don't Show Again" +msgstr "Příště nezobrazovat" + +msgid "Don't show again" +msgstr "Příště již nezobrazovat" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i řádek souboru ‚%s‘ nebyl načten správně." +msgstr[1] "%i řádky souboru ‚%s‘ nebyly načteny správně." +msgstr[2] "%i řádků souboru ‚%s‘ nebylo načteno správně." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Řádek %d souboru ‚%s‘ je poÅ¡kozený (neplatná data v %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "PoÅ¡kozená hlavička: ‚%s‘" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Å patný katalog: verze msgstr pro singulár použita spolu s msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Å patný katalog: verze msgstr pro plurál použita bez msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Při načítání katalogu doÅ¡lo k chybě. Některé překlady mohou chybět nebo být " +"poÅ¡kozené." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Soubor %s nelze načíst, pravděpodobně je poÅ¡kozený." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Soubor ‚%s‘ je jen pro čtení a není možné jej přepsat.\n" +"Uložte katalog pod jiným názvem." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Soubor %s nelze uložit." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Při formátování souboru doÅ¡lo k chybě (ale byl úspěšně uložen)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog nemohl být uložen ve znakové sadě ‚%s‘ zadané ve vlastnostech " +"katalogu.\n" +"\n" +"Místo toho byl uložen v UTF-8 a nastavení bylo přísluÅ¡ně změněno." + +msgid "Error saving catalog" +msgstr "Při ukládání katalogu doÅ¡lo k chybě" + +msgid "PO Translation Files" +msgstr "Soubory překladů PO" + +msgid "POT Translation Templates" +msgstr "Å ablony překladů POT" + +msgid "All Translation Files" +msgstr "VÅ¡echny překladové soubory" + +msgid "Merging differences..." +msgstr "Slučování rozdílů..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "POT soubor ‚%s‘ je poÅ¡kozený." + +msgid "(Use default language)" +msgstr "(výchozí jazyk)" + +msgid "Select your preferred language" +msgstr "Vyberte preferovaný jazyk" + +msgid "Language selection" +msgstr "Výběr jazyka" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Tato změna se projeví až po opětovném spuÅ¡tění Poeditu." + +msgid "Downloading translations is disabled in this project." +msgstr "Stahování překladů je pro tento projekt zakázáno." + +msgid "Not authorized, please sign in again." +msgstr "Nedostatečná oprávnění, zkuste se znovu přihlásit." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin je online platforma pro správu lokalizací a nástroj pro spolupráci " +"na překladu. Poedit umožňuje jednoduchou synchronizaci PO souborů " +"spravovaných prostřednictvím Crowdin." + +msgid "Sign In" +msgstr "Přihlásit se" + +msgid "Sign in" +msgstr "Přihlásit se" + +msgid "Sign Out" +msgstr "Odhlásit se" + +msgid "Sign out" +msgstr "Odhlásit se" + +msgid "Waiting for authentication…" +msgstr "Čekání na ověření…" + +msgid "Updating user information…" +msgstr "Aktualizace informací o uživateli…" + +msgid "Signed in as:" +msgstr "Přihlášen jako:" + +msgid "Learn More About Crowdin" +msgstr "Další informace o Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Další informace o Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Přihlásit se do Crowdin" + +msgid "Open Crowdin translation" +msgstr "Otevřít Crowdin překlad" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Jazyk:" + +msgid "File:" +msgstr "Soubor:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ve vaÅ¡em Crowdin účtu nemáte nastaveny žádné překladové projekty." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Projekt neobsahuje žádné soubory, které by bylo možné přeložit " +"prostřednictvím programu Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Tento soubor lze upravit pouze prostřednictvím webového rozhraní Crowdin." + +msgid "Downloading latest translations…" +msgstr "Stahování nejnovějších překladů…" + +msgid "Syncing with Crowdin" +msgstr "Synchronizace s Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synchronizace s Crowdin se nezdařila." + +msgid "Crowdin error" +msgstr "Crowdin chyba" + +msgid "Uploading translations…" +msgstr "Odesílání překladů…" + +msgid "&Copy" +msgstr "&Kopírovat" + +msgid "Learn more" +msgstr "Další informace" + +msgid "Learn More" +msgstr "Další informace" + +#, c-format +msgid "Failed command: %s" +msgstr "Příkaz selhal: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Při slučování gettext katalogů doÅ¡lo k chybě." + +msgid "Scanning files..." +msgstr "Prohledávání souborů..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Probíhá prohledávání souborů %s..." + +msgid "Failed to load extracted catalog." +msgstr "Při načítání extrahovaného katalogu doÅ¡lo k chybě." + +msgid "&Help" +msgstr "&Nápověda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Poedit nepodporuje přímou úpravu MO souborů." + +msgid "Error opening file" +msgstr "Při otevírání souboru doÅ¡lo k chybě" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Místo toho otevřete a upravte odpovídající soubor PO. Poté co ho uložíte, " +"bude automaticky aktualizován i soubor MO." + +msgid "don't delete temporary files (for debugging)" +msgstr "nemazat dočasné soubory (kvůli ladění)" + +msgid "handle a poedit:// URI" +msgstr "zpracovat poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Nelze komunikovat s procesem Poeditu." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "DoÅ¡lo k neoÅ¡etřené výjimce: %s" + +msgid "Unhandled exception occurred." +msgstr "DoÅ¡lo k neoÅ¡etřené výjimce." + +msgid "Open catalog" +msgstr "Otevřít katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Soubor ‚%s‘ neexistuje." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "O aplikaci %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Verze %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Služby" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Skrýt %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Skrýt ostatní" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Zobrazit vÅ¡e" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Ukončit %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit je jednoduchý editor překladů." + +msgid "Catalogs Manager" +msgstr "Správce katalogů" + +msgid "Check for Updates..." +msgstr "Vyhledat aktualizace…" + +msgid "&Edit" +msgstr "Úpra&vy" + +msgid "Undo" +msgstr "Zpět" + +msgid "Redo" +msgstr "Znovu" + +msgid "Paste and Match Style" +msgstr "Vložit a přizpůsobit styl" + +msgid "Delete" +msgstr "Smazat" + +msgid "Spelling and Grammar" +msgstr "Pravopis a gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Zobrazit pravopis a gramatiku" + +msgid "Check Document Now" +msgstr "Zkontrolovat dokument" + +msgid "Check Spelling While Typing" +msgstr "Kontrolovat pravopis během psaní" + +msgid "Check Grammar With Spelling" +msgstr "Kontrolovat i gramatiku" + +msgid "Correct Spelling Automatically" +msgstr "Automaticky opravovat pravopis" + +msgid "Substitutions" +msgstr "Náhrady" + +msgid "Show Substitutions" +msgstr "Zobrazit náhrady" + +msgid "Smart Copy/Paste" +msgstr "Chytré kopírování/vkládání" + +msgid "Smart Quotes" +msgstr "Chytré uvozovky" + +msgid "Smart Dashes" +msgstr "Chytré pomlčky" + +msgid "Smart Links" +msgstr "Chytré odkazy" + +msgid "Text Replacement" +msgstr "Náhrady textu" + +msgid "Transformations" +msgstr "Transformace" + +msgid "Make Upper Case" +msgstr "VÅ¡echna písmena velká" + +msgid "Make Lower Case" +msgstr "VÅ¡echna písmena malá" + +msgid "Capitalize" +msgstr "První písmena velká" + +msgid "Speech" +msgstr "Předčítání" + +msgid "Start Speaking" +msgstr "Spustit předčítání" + +msgid "Stop Speaking" +msgstr "Ukončit předčítání" + +msgid "&View" +msgstr "&Zobrazení" + +msgid "Enter Full Screen" +msgstr "Zobrazit na celou obrazovku" + +msgid "Window" +msgstr "Okno" + +msgid "Minimize" +msgstr "Minimalizovat" + +msgid "Zoom" +msgstr "Přepnout velikost" + +msgid "Bring All to Front" +msgstr "Přenést vÅ¡e do popředí" + +msgid "PO Translation" +msgstr "Překlady PO" + +msgid "The file cannot be opened." +msgstr "Soubor nelze otevřít." + +msgid "Invalid file" +msgstr "Neplatný soubor" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Soubor je poÅ¡kozen, nebo používá neznámý formát." + +msgid "&Undo" +msgstr "&Zpět" + +msgid "&Redo" +msgstr "P&rovést znovu" + +msgid "Cu&t" +msgstr "Vyjmou&t" + +msgid "Cut" +msgstr "Vyjmout" + +msgid "Copy" +msgstr "Kopírovat" + +msgid "&Paste" +msgstr "&Vložit" + +msgid "Paste" +msgstr "Vložit" + +msgid "&Delete" +msgstr "&Smazat" + +msgid "Select &All" +msgstr "Vybr&at vÅ¡e" + +msgid "Select All" +msgstr "Vybrat vÅ¡e" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Nahoru" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Dolů" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Na okno Poeditu nelze přetáhnou více než jeden soubor." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Soubor ‚%s‘ není překladový katalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Soubor" + +msgid "&Go" +msgstr "Pře&jít" + +msgid "Source text:" +msgstr "Zdrojový text:" + +msgid "Singular:" +msgstr "Singulár:" + +msgid "Plural:" +msgstr "Plurál:" + +msgid "Translation:" +msgstr "Překlad:" + +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 "" +"Soubory POT jsou jen Å¡ablony a sami o sobě neobsahují žádné překlady.\n" +"Pro vytvoření překladu vytvořte na základě Å¡ablony nový PO soubor." + +msgid "Create New Translation" +msgstr "Vytvořit nový překlad" + +msgid "Create new translation" +msgstr "Vytvořit nový překlad" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Kontrola pravopisu je zakázána, protože slovník pro jazyk %s není " +"nainstalován." + +msgid "Install" +msgstr "Nainstalovat" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog byl změněn. Chcete změny uložit?" + +msgid "Save changes" +msgstr "Uložit změny" + +msgid "Your changes will be lost if you don't save them." +msgstr "Pokud je neuložíte, přijdete o vÅ¡echny změny." + +msgid "Save" +msgstr "Uložit" + +msgid "Don't save" +msgstr "Neukládat" + +msgid "Don't Save" +msgstr "Neukládat" + +msgid "Save as..." +msgstr "Uložit jako..." + +msgid "Compile to..." +msgstr "Zkompilovat do..." + +msgid "Compiled Translation Files" +msgstr "Zkompilované překladové soubory" + +msgid "Export as..." +msgstr "Exportovat jako..." + +msgid "HTML Files" +msgstr "Soubory HTML" + +msgid "Open catalog template" +msgstr "Otevřít Å¡ablonu katalogu" + +msgid "Updating catalog" +msgstr "Probíhá aktualizace katalogu" + +msgid "Source code not available." +msgstr "Zdrojový kód není k dispozici." + +msgid "Updating failed" +msgstr "Aktualizace selhala" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Aktualizace překladu ze zdrojového kódu se nezdařila, protože v umístěních " +"uvedených ve vlastnostech katalogu nebyl nalezen žádný kód." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Položky katalogu jsou pravděpodobně chybné." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Aktualizace katalogu selhala. Podrobnosti zobrazíte kliknutím na tlačítko " +"'Detaily >>'." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Nalezen %d problém s překladem." +msgstr[1] "Nalezeny %d problémy s překladem." +msgstr[2] "Nalezeno %d problémů s překladem." + +msgid "Validation results" +msgstr "Výsledky kontroly" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Položky obsahující chyby byly v seznamu zvýrazněny červenou barvou. " +"Podrobnosti o chybě se zobrazí po vybrání chybné položky." + +msgid "The file was saved safely." +msgstr "Soubor byl úspěšně uložen." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Soubor byl úspěšně uložen a zkompilován do formátu MO, ale pravděpodobně " +"nebude fungovat správně." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Soubor byl úspěšně uložen, ale nepůjde jej zkompilovat do formátu MO a " +"používat." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Soubor byl zkompilován do formátu MO, ale pravděpodobně nebude pracovat " +"správně." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Soubor se nepodařilo zkompilovat do formátu MO a není tak možné ho použít." + +msgid "No problems with the translation found." +msgstr "V překladu nebyly nalezeny žádné problémy." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Překlad je připraven k použití, ale %d položka jeÅ¡tě není přeložená." +msgstr[1] "" +"Překlad je připraven k použití, ale %d položky jeÅ¡tě nejsou přeloženy." +msgstr[2] "" +"Překlad je připraven k použití, ale %d položek jeÅ¡tě není přeloženo." + +msgid "The translation is ready for use." +msgstr "Překlad je připraven k použití." + +msgid "Context:" +msgstr "Kontext:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit automaticky opravil chybný obsah souboru „%s“." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Soubor obsahoval duplicitní položky, což není v PO souborech povoleno a " +"zabránilo by to jejich použití. Poedit tento problém opravil, ale měli byste " +"zkontrolovat vÅ¡echny překlady označené jako přibližné a v případě potřeby je " +"opravit." + +msgid "Language of the translation isn't set." +msgstr "Jazyk překladu není nastaven." + +msgid "Set Language" +msgstr "Nastavit jazyk" + +msgid "Set language" +msgstr "Nastavit jazyk" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Pokud není správně nastaven jazyk překladu, nejsou k dispozici návrhy. " +"Ovlivněny mohou být i další funkce, jako například formy plurálu." + +msgid "Language of the translation is the same as source language." +msgstr "Jazyk překladu je shodný s jazykem zdroje." + +msgid "Fix Language" +msgstr "Opravit jazyk" + +msgid "Fix language" +msgstr "Opravit jazyk" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"V katalogu jsou položky s plurály, ale není nastavená hlavička Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"U položek katalogu je použit jiný počet forem plurálu, než jaký je nastaven " +"v hlavičce Plural-Forms" + +msgid "Required header Plural-Forms is missing." +msgstr "V hlavičce chybí povinná položka Plural-Forms." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaktická chyba v hlavičce Plural-Forms („%s“)." + +msgid "Fix the Header" +msgstr "Opravit hlavičku" + +msgid "Fix the header" +msgstr "Opravit hlavičku" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Výraz pro formy plurálu používá pro jazyk %s nezvyklý formát." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Zkontrolovat" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Při načítání katalogu ‚%s‘ doÅ¡lo k chybě." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Přeloženo: %d z %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Zbývá: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d chyba" +msgstr[1] "%d chyby" +msgstr[2] "%d chyb" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d položka" +msgstr[1] "%d položky" +msgstr[2] "%d položek" + +msgid " (unsaved)" +msgstr " (neuloženo)" + +msgid " (modified)" +msgstr " (změněno)" + +msgid "Go" +msgstr "Přejít" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Aktualizace překladové paměti se nezdařila: %s" + +msgid "Purge deleted translations" +msgstr "&Smazat staré překlady" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Chcete odstranit vÅ¡echny již nepoužívané překlady?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Pokud budete pokračovat, vÅ¡echny překlady označené jako smazané budou " +"natrvalo odstraněny. Pokud budou přísluÅ¡né řetězce později přidány zpět, tak " +"je budete muset znovu přeložit." + +msgid "Keep" +msgstr "Ponechat" + +msgid "Purge" +msgstr "Smazat" + +msgid "Fill missing translations from TM" +msgstr "Doplnit chybějící překlady z překladové paměti" + +msgid "Only fill in exact matches" +msgstr "Doplnit pouze při přesné shodě" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Ve výchozím nastavení jsou doplněny i nepřesné výsledky, které jsou označeny " +"jako přibližné. ZaÅ¡krtněte tuto volbu, pokud chcete zahrnout pouze přesné " +"shody." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Přesné shody neoznačovat jako přibližné" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Povolte pouze pokud důvěřujete kvalitě použité překladové paměti. Ve " +"výchozím nastavení jsou vÅ¡echny překlady doplněné z překladové paměti " +"označeny jako přibližné a měly by být zkontrolovány." + +msgid "Fill" +msgstr "Doplnit" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d položka vyplněná z překladové paměti." +msgstr[1] "%d položky vyplněny z překladové paměti." +msgstr[2] "%d položek vyplněno z překladové paměti." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Překlady byly označeny jako přibližné, protože mohou být nepřesné. Jejich " +"správnost by měla být zkontrolována." + +msgid "No entries could be filled from the translation memory." +msgstr "Z překladové paměti se nepodařilo vyplnit žádné položky." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Překladová paměť neobsahuje žádné texty podobné obsahu tohoto souboru. " +"Poloautomaticky je schopna efektivně překládat teprve poté, co se Poedit " +"naučí dostatek dat z ručně přeložených souborů." + +msgid "Translating" +msgstr "Probíhá překlad" + +msgid "Filling missing translations from TM..." +msgstr "Vyplňování překladů z překladové paměti..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Přeložen jeden řetězec" +msgstr[1] "Přeloženy %u řetězce" +msgstr[2] "Přeloženo %u řetězců" + +msgid "Copy from source text" +msgstr "Zkopírovat ze zdrojového textu" + +msgid "Copy from Source Text" +msgstr "Zkopírovat ze zdrojového textu" + +msgid "Clear translation" +msgstr "Smazat překlad" + +msgid "Clear Translation" +msgstr "Smazat překlad" + +msgid "Edit comment" +msgstr "Upravit komentář" + +msgid "Edit Comment" +msgstr "Upravit komentář" + +msgid "References:" +msgstr "Odkazy:" + +msgid "Everything" +msgstr "VÅ¡e" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singulár" + +msgid "Zero" +msgstr "Nula" + +msgid "One" +msgstr "Jeden" + +msgid "Two" +msgstr "Dva" + +msgid "Plural" +msgstr "Plurál" + +msgid "Other" +msgstr "Ostatní" + +msgid "&Bookmarks" +msgstr "&Záložky" + +#, c-format +msgid "Set bookmark %i" +msgstr "Nastavit záložku %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Přejít na záložku %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Nastavit záložku %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Přejít na záložku %i" + +msgid "Hide Sidebar" +msgstr "Skrýt postranní panel" + +msgid "Show Sidebar" +msgstr "Zobrazit postranní panel" + +msgid "Hide Status Bar" +msgstr "Skrýt stavový řádek" + +msgid "Show Status Bar" +msgstr "Zobrazit stavový řádek" + +msgid "Source text" +msgstr "Zdrojový text" + +msgid "Translation" +msgstr "Překlad" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Zdrojový text — %s" + +msgid "unknown language" +msgstr "neznámý jazyk" + +#, c-format +msgid "Translation — %s" +msgstr "Překlad — %s" + +msgid "Error:" +msgstr "Chyba:" + +msgid "Source file" +msgstr "Zdrojový soubor" + +msgid "Source file occurrence:" +msgstr "Výskyt ve zdrojovém kódu:" + +msgid "Open in Editor" +msgstr "Otevřít v editoru" + +msgid "Open in editor" +msgstr "Otevřít v editoru" + +msgid "No references for the selected item." +msgstr "Žádné výskyty vybrané položky." + +#, c-format +msgid "Error opening file %s!" +msgstr "Při otevírání souboru %s doÅ¡lo k chybě!" + +msgid "Find" +msgstr "Najít" + +msgid "Replace" +msgstr "Nahradit" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Možnosti" + +msgid "Ignore case" +msgstr "Ignorovat velikost písmen" + +msgid "Wrap around" +msgstr "Po dosažení konce hledat od začátku" + +msgid "Whole words only" +msgstr "Jen celá slova" + +msgid "Find in source texts" +msgstr "Hledat ve zdrojových textech" + +msgid "Find in translations" +msgstr "Hledat v překladech" + +msgid "Find in comments" +msgstr "Hledat v komentářích" + +msgid "Close" +msgstr "Zavřít" + +msgid "Replace All" +msgstr "Nahradit vÅ¡e" + +msgid "Replace all" +msgstr "Nahradit vÅ¡e" + +msgid "< &Previous" +msgstr "< &Předchozí" + +msgid "&Next >" +msgstr "&Další >" + +msgid "String to find" +msgstr "Hledaný řetězec" + +msgid "Replacement string" +msgstr "Nahradit za" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Není možné spustit program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kód, nebo název jazyku (např. cs_CZ)" + +msgid "Translation Language" +msgstr "Jazyk překladu" + +msgid "Language of the translation:" +msgstr "Jazyk překladu:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - správce katalogů" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Celkem" + +msgid "Untrans" +msgstr "Nepřelož" + +msgid "Fuzzy" +msgstr "Přibližný" + +msgid "Bad Tokens" +msgstr "Chybné překlady" + +msgid "Last modified" +msgstr "Poslední změna" + +msgid "Select directory" +msgstr "Vyberte adresář" + +msgid "Directories:" +msgstr "Adresáře:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Opravdu chcete vybraný projekt smazat?" + +msgid "Confirmation" +msgstr "Potvrzení" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Opravdu chcete provést hromadnou aktualizaci vÅ¡ech\n" +"katalogů ve vybraném projektu?" + +msgid "Information about the translator" +msgstr "Informace o překladateli" + +msgid "Name:" +msgstr "Jméno:" + +msgid "Your Name" +msgstr "VaÅ¡e jméno" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "vas_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"VaÅ¡e jméno a e-mail budou použity pouze k nastavení položky Last-Translator " +"v hlavičce souborů GNU gettext." + +msgid "Editing" +msgstr "Editace" + +msgid "Automatically compile MO file when saving" +msgstr "Při uložení automaticky zkompilovat MO soubor" + +msgid "Show summary after catalog update" +msgstr "Po aktualizaci katalogu zobrazit přehled změn" + +msgid "Check spelling" +msgstr "Kontrolovat pravopis" + +msgid "Always change focus to text input field" +msgstr "Vždy zaměřovat vstupní pole pro překlad" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nikdy nezaměří seznam s řetězci. Pokud je tato volba aktivní, je k pohybu v " +"seznamu řetězců pomocí klávesnice nutné použít Ctrl+Å¡ipky. Na druhou stranu " +"ale umožňuje rovnou začít psát text, bez nutnosti mačkat Tab." + +msgid "Appearance" +msgstr "Vzhled" + +msgid "Use custom list font:" +msgstr "Použít vlastní písmo pro seznam:" + +msgid "Use custom text fields font:" +msgstr "Použít vlastní písmo pro textová pole:" + +msgid "Change UI language" +msgstr "Změnit jazyk" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(vyžaduje Windows 8 nebo novější)" + +msgid "General" +msgstr "Obecné" + +msgid "Use translation memory" +msgstr "Použít překladovou paměť" + +msgid "Learn From Files..." +msgstr "Načíst ze souborů..." + +msgid "Learn from files..." +msgstr "Načíst ze souborů..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Vymazat" + +msgid "Consult TM when updating from sources" +msgstr "Při aktualizaci ze zdrojových souborů použít překladovou paměť" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Poedit se pokusí vyplnit nové položky s použitím vaÅ¡ich\n" +"předchozích překladů uložených v překladové paměti. Je-li\n" +"ale paměť téměř prázdná, nebude příliÅ¡ účinná. Čím více\n" +"toho přeložíte a čím větší je paměť, tím budou výsledky lepší." + +msgid "Stored translations:" +msgstr "Uložené překlady:" + +msgid "Database size on disk:" +msgstr "Velikost databáze:" + +msgid "Select translation files to import" +msgstr "Vyberte překladové soubory, které chcete importovat" + +msgid "Translation Memory" +msgstr "Překladová paměť" + +msgid "Importing translations..." +msgstr "Probíhá import překladů..." + +msgid "Finalizing..." +msgstr "Dokončování..." + +msgid "Reset translation memory" +msgstr "Vymazat překladovou paměť" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Opravdu chcete překladovou paměť vymazat?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Vymazáním překladové paměti nenávratně smažete vÅ¡echny v ní uložené " +"překlady. Po provedení této akce už neexistuje žádná možnost obnovy." + +msgid "Cancel" +msgstr "ZruÅ¡it" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Extraktory zdrojového kódu slouží k vyhledání přeložitelných řetězců v " +"souborech zdrojového kódu a jejich extrakci pro účely překladu." + +msgid "New" +msgstr "Nový" + +msgid "Edit" +msgstr "Upravit" + +msgid "Delete extractor" +msgstr "Smazat extraktor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Opravdu chcete „%s“ extraktor smazat?" + +msgid "Extractors" +msgstr "Extraktory" + +msgid "Accounts" +msgstr "Účty" + +msgid "Automatically check for updates" +msgstr "Automaticky kontrolovat dostupnost aktualizací" + +msgid "Include beta versions" +msgstr "Upozorňovat na beta verze" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta verze obsahují nejnovější funkce a vylepÅ¡ení, ale mohou mít problémy se " +"spolehlivostí." + +msgid "Updates" +msgstr "Aktualizace" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Tato nastavení ovlivňují formátování PO souborů. Upravte je pokud máte " +"specifické požadavky například kvůli správě verzí." + +msgid "Line endings:" +msgstr "Konce řádků:" + +msgid "Unix (recommended)" +msgstr "Unix (doporučeno)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Zalomit po:" + +msgid "Preserve formatting of existing files" +msgstr "Zachovat stávající formátování souboru" + +msgid "Advanced" +msgstr "Pokročilé" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Nastavení %su" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Sem přetáhněte adresáře\n" +"\n" +"nebo použijte tlačítko +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Sem přetáhněte adresáře\n" +"\n" +"nebo použijte tlačítko +" + +msgid "Add Folders..." +msgstr "Přidat adresáře..." + +msgid "Add folders..." +msgstr "Přidat adresáře..." + +msgid "Add Files..." +msgstr "Přidat soubory..." + +msgid "Add files..." +msgstr "Přidat soubory..." + +msgid "Add Wildcard..." +msgstr "Přidat zástupný řetězec..." + +msgid "Add wildcard..." +msgstr "Přidat zástupný řetězec..." + +msgid "Paths" +msgstr "Cesty" + +msgid "Excluded paths" +msgstr "Ignorovat cesty" + +msgid "Additional keywords" +msgstr "Další klíčová slova" + +msgid "Name of the project the translation is for" +msgstr "Název projektu, pro který je překlad určen" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "například nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (doporučeno)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Nejdříve soubor uložte, jinak nebude možné tuto sekci editovat." + +msgid "Comment:" +msgstr "Komentář:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Smazat" + +msgid "Clear the comment" +msgstr "Odstranit komentář" + +msgid "Create new translations project" +msgstr "Vytvořit nový překladový projekt" + +msgid "Edit the project" +msgstr "Upravit projekt" + +msgid "Delete the project" +msgstr "Smazat projekt" + +msgid "Update all" +msgstr "Aktualizovat vÅ¡echny katalogy" + +msgid "Update all catalogs in the project" +msgstr "Aktualizovat vÅ¡echny katalogy v projektu" + +msgid "Edit project" +msgstr "Upravit projekt" + +msgid "Project name:" +msgstr "Název projektu:" + +msgid "Browse" +msgstr "Procházet" + +msgid "Add directory to the list" +msgstr "Přidat adresář do seznamu" + +msgid "&New..." +msgstr "&Nový..." + +msgid "New from &POT/PO file..." +msgstr "Nový z &POT/PO souboru..." + +msgid "New From &POT/PO File..." +msgstr "Nový z &POT/PO souboru..." + +msgid "&Open..." +msgstr "&Otevřít..." + +msgid "Open Recent" +msgstr "Otevřít poslední položku" + +msgid "Open from Crowdin..." +msgstr "Otevřít z Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Otevřít z Crowdin..." + +msgid "&Close" +msgstr "&Zavřít" + +msgid "&Save" +msgstr "&Uložit" + +msgid "Save &as..." +msgstr "Uložit &jako..." + +msgid "Save &As..." +msgstr "Uložit &jako..." + +msgid "Compile to MO..." +msgstr "Zkompilovat do MO..." + +msgid "E&xport as HTML..." +msgstr "Exportovat jako HTML..." + +msgid "Check for updates..." +msgstr "Vyhledat aktualizace…" + +msgid "&Preferences..." +msgstr "Nasta&vení..." + +msgid "Catalogs &manager" +msgstr "Správce &katalogů" + +msgid "Catalogs &Manager" +msgstr "Správce &katalogů" + +msgid "E&xit" +msgstr "&Konec" + +msgid "Quit" +msgstr "Ukončit" + +msgid "Copy from singular" +msgstr "Zkopírovat ze singuláru" + +msgid "Copy From Singular" +msgstr "Zkopírovat ze singuláru" + +msgid "Translation is &fuzzy" +msgstr "Překlad je &přibližný" + +msgid "Translation Is &Fuzzy" +msgstr "Překlad je &přibližný" + +msgid "Edit &comment" +msgstr "Upravit &komentář" + +msgid "Edit &Comment" +msgstr "Upravit &komentář" + +msgid "Suggestions" +msgstr "Návrhy" + +msgid "&Show references" +msgstr "&Zobrazit odkazy" + +msgid "&Show References" +msgstr "&Zobrazit odkazy" + +msgid "&Find..." +msgstr "&Najít..." + +msgid "Replace..." +msgstr "Nahradit..." + +msgid "Find next" +msgstr "Najít další" + +msgid "Find previous" +msgstr "Najít předchozí" + +msgid "Find and Replace..." +msgstr "Najít a nahradit..." + +msgid "Find Next" +msgstr "Najít další" + +msgid "Find Previous" +msgstr "Najít předchozí" + +msgid "&Preferences" +msgstr "Nasta&vení" + +msgid "Display entry &IDs" +msgstr "Zobrazit &ID položek" + +msgid "Display Entry &IDs" +msgstr "Zobrazit &ID položek" + +msgid "Sort by &file order" +msgstr "Seřadit podle pořadí v &souboru" + +msgid "Sort by &File Order" +msgstr "Seřadit podle pořadí v &souboru" + +msgid "Sort by &source" +msgstr "Seřadit podle &zdrojového textu" + +msgid "Sort by &Source" +msgstr "Seřadit podle &zdrojového textu" + +msgid "Sort by &translation" +msgstr "Seřadit podle &překladu" + +msgid "Sort by &Translation" +msgstr "Seřadit podle &překladu" + +msgid "&Group by context" +msgstr "S&eskupit podle kontextu" + +msgid "&Group By Context" +msgstr "S&eskupit podle kontextu" + +msgid "Entries with errors first" +msgstr "Položky s chybami jako první" + +msgid "Entries with Errors First" +msgstr "Položky s chybami jako první" + +msgid "&Untranslated entries first" +msgstr "&Nepřeložené položky jako první" + +msgid "&Untranslated Entries First" +msgstr "&Nepřeložené položky jako první" + +msgid "Show sidebar" +msgstr "Zobrazit postranní panel" + +msgid "Show status bar" +msgstr "Zobrazit stavový řádek" + +msgid "C&atalog" +msgstr "&Katalog" + +msgid "&Update from sources" +msgstr "&Aktualizovat ze zdrojového kódu" + +msgid "&Update from Sources" +msgstr "&Aktualizovat ze zdrojového kódu" + +msgid "Update from &POT file..." +msgstr "Aktualizovat z &POT souboru..." + +msgid "Update from &POT File..." +msgstr "Aktualizovat z &POT souboru..." + +msgid "Sync with Crowdin" +msgstr "Synchronizovat s Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "&Doplnit chybějící překlady z překladové paměti..." + +msgid "Fill Missing Translations from &TM..." +msgstr "&Doplnit chybějící překlady z překladové paměti..." + +msgid "&Purge deleted translations" +msgstr "&Smazat staré překlady" + +msgid "&Purge Deleted Translations" +msgstr "&Smazat staré překlady" + +msgid "&Validate translations" +msgstr "&Zkontrolovat překlad" + +msgid "&Validate Translations" +msgstr "&Zkontrolovat překlad" + +msgid "&Properties..." +msgstr "&Vlastnosti…" + +msgid "&Done and next" +msgstr "&Hotovo a další" + +msgid "&Done and Next" +msgstr "&Hotovo a další" + +msgid "&Previous translation" +msgstr "&Předchozí překlad" + +msgid "&Previous Translation" +msgstr "&Předchozí překlad" + +msgid "&Next translation" +msgstr "&Další překlad" + +msgid "&Next Translation" +msgstr "&Další překlad" + +msgid "P&revious unfinished" +msgstr "Předchozí ne&dokončená" + +msgid "P&revious Unfinished" +msgstr "Předchozí ne&dokončená" + +msgid "Ne&xt unfinished" +msgstr "Další &nedokončená" + +msgid "Ne&xt Unfinished" +msgstr "Další &nedokončená" + +msgid "Previous plural form" +msgstr "Předchozí forma plurálu" + +msgid "Previous Plural Form" +msgstr "Předchozí forma plurálu" + +msgid "Next plural form" +msgstr "Další forma plurálu" + +msgid "Next Plural Form" +msgstr "Další forma plurálu" + +msgid "&Online help" +msgstr "&Nápověda online" + +msgid "&Online Help" +msgstr "&Nápověda online" + +msgid "&GNU gettext manual" +msgstr "Dokumentace GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Dokumentace GNU gettext" + +msgid "&About Poedit" +msgstr "&O aplikaci Poedit" + +msgid "&About" +msgstr "&O aplikaci" + +msgid "Extractor setup" +msgstr "Nastavení extraktoru" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Seznam přípon oddělených středníky (např. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "SpuÅ¡tění:" + +msgid "Command to extract translations:" +msgstr "Příkaz pro extrakci překladů:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Tento příkaz bude použit ke spuÅ¡tění extraktoru.\n" +"%o bude nahrazeno názvem výstupního souboru,\n" +"%K seznamem klíčových slov, %F seznamem\n" +"vstupních souborů a %C parametrem znakové sady (viz níže)." + +msgid "An item in keywords list:" +msgstr "Položka seznamu klíčových slov:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Tento parametr bude do příkazové řádky vložen jednou pro každé\n" +"klíčové slovo. %k bude nahrazeno klíčovým slovem." + +msgid "An item in input files list:" +msgstr "Položka seznamu vstupních souborů:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Tento parametr bude do příkazové řádky vložen jednou pro každý\n" +"vstupní soubor. %f bude nahrazeno názvem souboru." + +msgid "Source code charset:" +msgstr "Znaková sada zdrojáků:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Tento parametr bude do příkazové řádky vložen jen pokud byla zadána\n" +"znaková sada zdrojových souborů. %c bude nahrazeno znakovou sadou." + +msgid "Catalog properties" +msgstr "Vlastnosti katalogu" + +msgid "Project name and version:" +msgstr "Název a verze projektu:" + +msgid "Plural Forms:" +msgstr "Formy plurálu:" + +msgid "Use default rules for this language" +msgstr "Použít výchozí pravidla pro tento jazyk" + +msgid "Use custom expression" +msgstr "Použít vlastní výraz" + +msgid "Learn about plural forms" +msgstr "Podrobnosti o formách plurálu" + +msgid "Charset:" +msgstr "Znaková sada:" + +msgid "Team:" +msgstr "Tým:" + +msgid "Team's email address:" +msgstr "Emailová adresa týmu:" + +msgid "Translation properties" +msgstr "Vlastnosti překladu" + +msgid "Sources paths" +msgstr "Prohledávané cesty" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrahovat text ze zdrojových souborů v těchto adresářích:" + +msgid "Base path:" +msgstr "Základní cesta:" + +msgid "Sources keywords" +msgstr "Klíčová slova" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Uvedená klíčová slova (názvy funkcí) se použijí k rozeznání přeložitelných\n" +"řetězců ve zdrojovém kódu:" + +msgid "Learn about gettext keywords" +msgstr "Podrobnosti o klíčových slovech gettext" + +msgid "Update summary" +msgstr "Výsledek aktualizace" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Tyto řetězce se vyskytují ve zdrojácích, ale nejsou v katalogu.\n" +"Poedit je nyní do katalogu přidá." + +msgid "New strings" +msgstr "Nové řetězce" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Tyto řetězce již nejsou ve zdrojácích.\n" +"Poedit je nyní z katalogu odstraní." + +msgid "Obsolete strings" +msgstr "Odstraněné řetězce" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nových, 0 odstraněných)" + +msgid "Open" +msgstr "Otevřít" + +msgid "Save catalog" +msgstr "Uložit katalog" + +msgid "Validate" +msgstr "Zkontrolovat" + +msgid "Check for errors in the translation" +msgstr "Zkontrolovat, zda překlad neobsahuje chyby" + +msgid "Update" +msgstr "Aktualizovat" + +msgid "Update catalog - synchronize it with sources" +msgstr "Aktualizovat katalog - synchronizovat jej se zdrojovými kódy" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Aktivní pokud se u vybrané položky jedná o přibližný překlad" + +msgid "Show or hide the sidebar" +msgstr "Zobrazit nebo skrýt postranní panel" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Původní zdrojový text:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Původní zdrojový text (než byl při aktualizaci změněn), kterému odpovídá " +"použitý přibližný překlad." + +msgid "Notes for translators:" +msgstr "Poznámky pro překladatele:" + +msgid "Add comment" +msgstr "Přidat komentář" + +msgid "Add Comment" +msgstr "Přidat komentář" + +msgid "Translation suggestions:" +msgstr "Návrhy překladu:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nenalezena žádná shoda" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nenalezena žádná shoda" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Tento řetězec byl nalezen v překladové paměti Poeditu." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nové: %i, nepoužité: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Probíhá import překladů: %d" + +msgid "Poedit Update" +msgstr "Aktualizace Poedit" + +msgid "Preparing migration..." +msgstr "Probíhá příprava migrace..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Chybový kód migrace: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit potřebuje převést vaÅ¡i překladovou paměť na nový formát." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"To musí být provedeno před spuÅ¡těním programu. Pokud máte uložen velký počet " +"překladů, může migrace trvat až několik minut, ale běžně proběhne mnohem " +"rychleji." + +msgid "Proceed" +msgstr "Provést" + +msgid "Translation memory migration failed." +msgstr "Migrace překladové paměti se nezdařila." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"DoÅ¡lo k chybě a migrace dat překladové paměti se nezdařila. Chyba:\n" +"\n" +"%s\n" +"ZaÅ¡lete e-mail na adresu help@poedit.net a my problém vyřešíme." + +msgid "Cannot create temporary directory." +msgstr "Nelze vytvořit adresář na dočasné soubory." + +msgid "Welcome to Poedit" +msgstr "Vítá vás Poedit" + +msgid "Edit a translation" +msgstr "Upravit překlad" + +msgid "Open an existing PO file and edit the translation." +msgstr "Otevře existující PO katalog a umožní jeho úpravu." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Použije existující soubor PO nebo POT jako Å¡ablonu pro vytvoření nového " +"překladu." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Spolupracovat na překladu prostřednictvím Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Stáhne soubor z Crowdin projektu a po jeho překladu synchronizuje provedené " +"změny zpět." + +msgid "What is Crowdin?" +msgstr "Co je Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "V souboru nejsou žádné překlady. To je neobvyklé." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Při použití systému gettext nejsou položky překladu přidávány ručně, ale " +"jsou automaticky extrahovány\n" +"ze zdrojového kódu. Tak zůstávají aktuální a přesné.\n" +"Překladatelé větÅ¡inou používají PO Å¡ablony (soubory POT) připravené vývojáři." + +msgid "(Learn more about GNU gettext)" +msgstr "(další informace o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Nejjednodušším způsobem naplnění tohoto katalogu je jeho aktualizace z POT " +"souboru:" + +msgid "Update from POT" +msgstr "Aktualizovat z POT souboru" + +msgid "Take translatable strings from an existing POT template." +msgstr "Načte přeložitelné řetězce z existující POT Å¡ablony." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Přeložitelné řetězce můžete také extrahovat přímo ze zdrojového kódu:" + +msgid "Extract from sources" +msgstr "Extrahovat ze zdrojových souborů" + +msgid "Configure source code extraction in Properties." +msgstr "" +"Parametry pro extrakci ze zdrojového kódu nastavte ve Vlastnostech katalogu." + +msgid "Sync" +msgstr "Synchronizovat" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchronizovat překlad s Crowdin" diff --git a/locales/da.mo b/locales/da.mo new file mode 100644 index 0000000000000000000000000000000000000000..70ca891547dff5fb9740d1f4a46042b7ee4b886c GIT binary patch literal 44876 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 ZCQirihx8Y|A7W=`!jfdzck=0w{}15L;1vJ> literal 0 HcmV?d00001 diff --git a/locales/da.po b/locales/da.po new file mode 100644 index 0000000..71a6c3f --- /dev/null +++ b/locales/da.po @@ -0,0 +1,1953 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Danish\n" +"Language: da_DK\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: da\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Skjul denne pÃ¥mindelsesmeddelelse" + +msgid "Don't Show Again" +msgstr "Vis ikke igen" + +msgid "Don't show again" +msgstr "Vis ikke igen" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i linje i filen '%s' blev ikke indlæst korrekt." +msgstr[1] "%i linjer i filen '%s' blev ikke indlæst korrekt." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Linje %d i filen \"%s\" er korrupt (ikke gyldige %s data)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Forkert udformet filhovede: \"%s\"" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Fejl i katalogfil: entalsform msgstr anvendt sammen med msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Fejl i katalogfil: flertalsform msgstr anvendt uden msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Der var fejl ved indlæsning af kataloget. Som følge heraf kan nogle data " +"mangle eller være forkerte." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Fejl ved indlæsning af filen %s, indholdet er sandsynligvis ødelagt." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Filen \"%s\" er skrivebeskyttet og kan ikke overskrives.\n" +"Gem den venligst under et andet navn." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Kunne ikke gemme filen %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Der er et problem med at formatere filen pænt (men den blev gemt)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Kataloget kunne ikke gemmes med tegnsættet \"%s\" som angivet i " +"katalogindstillingerne.\n" +"\n" +"Det blev gemt med UTF-8 i stedet, og indstillingen blev ændret tilsvarende." + +msgid "Error saving catalog" +msgstr "Fejl ved gemning af katalog" + +msgid "PO Translation Files" +msgstr "PO oversættelsesfiler" + +msgid "POT Translation Templates" +msgstr "POT oversættelses skabeloner" + +msgid "All Translation Files" +msgstr "Alle oversættelsesfiler" + +msgid "Merging differences..." +msgstr "Samler forskelle..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "\"%s\" er ikke en gyldig POT-fil." + +msgid "(Use default language)" +msgstr "(vælg standardsprog)" + +msgid "Select your preferred language" +msgstr "Vælg dit foretrukne sprog" + +msgid "Language selection" +msgstr "Sprogvalg" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Du skal genstarte Poedit før denne ændring træder i kraft." + +msgid "Downloading translations is disabled in this project." +msgstr "Download af oversættelser er deaktiveret i dette projekt." + +msgid "Not authorized, please sign in again." +msgstr "Ikke godkendt, log venligst ind igen." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin er en online lokaliseringhÃ¥ndterings platform og et kollaborativt " +"oversættelsesværktøj. Poedit kan uden problemer synkronisere PO-filer der " +"bliver hÃ¥ndteret pÃ¥ Crowdin." + +msgid "Sign In" +msgstr "Log ind" + +msgid "Sign in" +msgstr "Log ind" + +msgid "Sign Out" +msgstr "Log ud" + +msgid "Sign out" +msgstr "Log ud" + +msgid "Waiting for authentication…" +msgstr "Venter pÃ¥ godkendelse…" + +msgid "Updating user information…" +msgstr "Opdaterer brugeroplysninger…" + +msgid "Signed in as:" +msgstr "Logget ind som:" + +msgid "Learn More About Crowdin" +msgstr "Lær mere om Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Lær mere om Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Log ind pÃ¥ Crowdin" + +msgid "Open Crowdin translation" +msgstr "Åbn Crowdin-oversættelse" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Sprog:" + +msgid "File:" +msgstr "Fil:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ingen oversættelsesprojekter i din Crowdin-konto." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Dette projekt har ikke nogen filer der kan oversættes i Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Denne fil kan kun redigeres i Crowdin’s webgrænseflade." + +msgid "Downloading latest translations…" +msgstr "Downloader seneste oversættelser…" + +msgid "Syncing with Crowdin" +msgstr "Synkroniserer med Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synkronisering med Crowdin mislykkedes." + +msgid "Crowdin error" +msgstr "Crowdin fejl" + +msgid "Uploading translations…" +msgstr "Uploader oversættelser…" + +msgid "&Copy" +msgstr "&Kopiér" + +msgid "Learn more" +msgstr "Find ud af mere" + +msgid "Learn More" +msgstr "Lær mere" + +#, c-format +msgid "Failed command: %s" +msgstr "Fejlet kommando: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Der opstod en fejl ved sammenfletning af gettext-kataloger." + +msgid "Scanning files..." +msgstr "Skanner filer..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Skanner %s-filer..." + +msgid "Failed to load extracted catalog." +msgstr "Kunne ikke indlæse udtrukket katalog." + +msgid "&Help" +msgstr "&Hjælp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO filer kan ikke redigeres direkte i Poedit." + +msgid "Error opening file" +msgstr "Fejl ved Ã¥bning af filen" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Åben og rediger venligst den tilhørende PO fil i stedet. NÃ¥r du gemmer den, " +"vil MO filen ogsÃ¥ blive opdateret." + +msgid "don't delete temporary files (for debugging)" +msgstr "slet ikke midlertidige filer (til fejlretning)" + +msgid "handle a poedit:// URI" +msgstr "hÃ¥ndtér en poedit://-URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Der kunne ikke kommunikere med Poedit-processen." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "UhÃ¥ndteret undtagelse opstod: %s" + +msgid "Unhandled exception occurred." +msgstr "UhÃ¥ndteret undtagelse opstod." + +msgid "Open catalog" +msgstr "Åbn katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Filen \"%s\" findes ikke." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Om %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Tjenester" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Skjul %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Skjul øvrige" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Vis alle" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Afslut %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit er et værktøj som gør det nemt at oversætte." + +msgid "Catalogs Manager" +msgstr "KataloghÃ¥ndtering" + +msgid "Check for Updates..." +msgstr "Søg efter opdateringer..." + +msgid "&Edit" +msgstr "&Redigér" + +msgid "Undo" +msgstr "Fortryd" + +msgid "Redo" +msgstr "Gentag" + +msgid "Paste and Match Style" +msgstr "Indsæt og tilpas stil" + +msgid "Delete" +msgstr "Slet" + +msgid "Spelling and Grammar" +msgstr "Stavning og grammatik" + +msgid "Show Spelling and Grammar" +msgstr "Vis stavning og grammatik" + +msgid "Check Document Now" +msgstr "Tjek dokument nu" + +msgid "Check Spelling While Typing" +msgstr "Tjek stavning mens du skriver" + +msgid "Check Grammar With Spelling" +msgstr "Kontrollér grammatik med stavning" + +msgid "Correct Spelling Automatically" +msgstr "Kontroller automatisk stavning" + +msgid "Substitutions" +msgstr "Erstatninger" + +msgid "Show Substitutions" +msgstr "Vis erstatninger" + +msgid "Smart Copy/Paste" +msgstr "Smart kopier/indsæt" + +msgid "Smart Quotes" +msgstr "Smarte citater" + +msgid "Smart Dashes" +msgstr "Smarte bindestreger" + +msgid "Smart Links" +msgstr "Smarte links" + +msgid "Text Replacement" +msgstr "Tekst erstatning" + +msgid "Transformations" +msgstr "Transformeringer" + +msgid "Make Upper Case" +msgstr "Lav til store bogstaver" + +msgid "Make Lower Case" +msgstr "Lav til smÃ¥ bogstaver" + +msgid "Capitalize" +msgstr "Stort begyndelsesbogstav" + +msgid "Speech" +msgstr "Tale" + +msgid "Start Speaking" +msgstr "Start tale" + +msgid "Stop Speaking" +msgstr "Stop tale" + +msgid "&View" +msgstr "&Vis" + +msgid "Enter Full Screen" +msgstr "Fuldskærm" + +msgid "Window" +msgstr "Vindue" + +msgid "Minimize" +msgstr "Minimer" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Bring alle frem" + +msgid "PO Translation" +msgstr "PO Oversættelse" + +msgid "The file cannot be opened." +msgstr "Filen kan ikke Ã¥bnes." + +msgid "Invalid file" +msgstr "Ugyldig fil" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Filen kan enten være korrupt eller i et format som ikke genkendes af Poedit." + +msgid "&Undo" +msgstr "&Fortryd" + +msgid "&Redo" +msgstr "&Gentag" + +msgid "Cu&t" +msgstr "Kli&p" + +msgid "Cut" +msgstr "Klip" + +msgid "Copy" +msgstr "Kopier" + +msgid "&Paste" +msgstr "&Sæt ind" + +msgid "Paste" +msgstr "Indsæt" + +msgid "&Delete" +msgstr "&Slet" + +msgid "Select &All" +msgstr "Vælg &alle" + +msgid "Select All" +msgstr "Vælg alle" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Op" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Ned" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Du kan ikke slippe mere end en fil pÃ¥ et Poedit-vindue." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Filen \"%s\" er ikke et meddelelseskatalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fil" + +msgid "&Go" +msgstr "&GÃ¥ til" + +msgid "Source text:" +msgstr "Oprindelig tekst:" + +msgid "Singular:" +msgstr "Ental:" + +msgid "Plural:" +msgstr "Flertal:" + +msgid "Translation:" +msgstr "Oversættelse:" + +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-filer er kun skabeloner som ikke indeholder nogen oversættelser.\n" +"For at oprette en oversættelse skal du oprette en ny PO-fil fra skabelonen." + +msgid "Create New Translation" +msgstr "Opret ny oversættelse" + +msgid "Create new translation" +msgstr "Opret ny oversættelse" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Stavekontrol er deaktiveret, da ordbogen for %s ikke er installeret." + +msgid "Install" +msgstr "Installer" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog ændret. Vil du gemme ændringerne?" + +msgid "Save changes" +msgstr "Gem ændringer" + +msgid "Your changes will be lost if you don't save them." +msgstr "Dine ændringer vil gÃ¥ tabt hvis du ikke gemmer dem." + +msgid "Save" +msgstr "Gem" + +msgid "Don't save" +msgstr "Gem ikke" + +msgid "Don't Save" +msgstr "Gem ikke" + +msgid "Save as..." +msgstr "Gem som..." + +msgid "Compile to..." +msgstr "Kompiler til..." + +msgid "Compiled Translation Files" +msgstr "Kompilerede oversættelsesfiler" + +msgid "Export as..." +msgstr "Eksportér som..." + +msgid "HTML Files" +msgstr "HTML filer" + +msgid "Open catalog template" +msgstr "Åbn katalogskabelon" + +msgid "Updating catalog" +msgstr "Opdaterer katalog" + +msgid "Source code not available." +msgstr "Kildekoden er ikke tilgængelig." + +msgid "Updating failed" +msgstr "Opdatering mislykkedes" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Oversættelserne kunne ikke opdateres fra kildekoden, da der ikke blev fundet " +"nogen kode pÃ¥ det sted som er angivet i katalogets egenskaber." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Poster i kataloget er sandsynligvis ukorrekt." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Opdatering af katalog fejlede. Klik pÃ¥ \"Detaljer >>\" for yderligere " +"oplysninger." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Fandt %d problem med oversættelsen." +msgstr[1] "Fandt %d problemer med oversættelsen." + +msgid "Validation results" +msgstr "Valideringsresultatet" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Emner med fejl er markeret med rødt i listen. Detaljer om fejlen vil blive " +"vist nÃ¥r du vælger sÃ¥dan et emne." + +msgid "The file was saved safely." +msgstr "Filen blev gemt sikkert." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Filen blev gemt korrekt og kompileret til MO-formatet, men den vil " +"sandsynligvis ikke virke korrekt." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Denne blev gemt korrekt, men den kan ikke kompileres til MO-formatet og " +"bruges." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Filen blev kompileret til MO format, men vil sandsynligvis ikke virke " +"korrekt." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Filen kan ikke kompileres til MO format og bruges." + +msgid "No problems with the translation found." +msgstr "Der blev ikke fundet nogle problemer med oversættelsen." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Oversættelsen er klar til brug, men %d emner er endnu ikke oversat." +msgstr[1] "Oversættelsen er klar til brug, men %d emne er endnu ikke oversat." + +msgid "The translation is ready for use." +msgstr "Oversættelsen er klar til brug." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit rettede automatisk ugyldigt indhold i filen \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Filen indeholdt duplikerede emner som ikke er tilladt i PO filer, og som " +"kunne forhindre filen i at blive brugt. Poedit rettede fejlen, men du bør " +"gennemgÃ¥ oversættelser af alle emner der er markeret som uafklaret og rette " +"dem om nødvendigt." + +msgid "Language of the translation isn't set." +msgstr "Sprog for oversættelsen er ikke angivet." + +msgid "Set Language" +msgstr "Indstil sprog" + +msgid "Set language" +msgstr "Angiv sprog" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Forslag er ikke tilgængelige hvis oversættelsessproget ikke er angivet " +"korrekt. Andre ting, sÃ¥som flertalsformer kan ogsÃ¥ blive pÃ¥virket." + +msgid "Language of the translation is the same as source language." +msgstr "Oversættelsessproget er det samme som kildesproget." + +msgid "Fix Language" +msgstr "Ret sprog" + +msgid "Fix language" +msgstr "Ret sprog" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Dette katalog har poster med flertalsformer, men har ikke konfigureret et " +"Plural-Forms-filhovede." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Posterne i dette katalog har et andet antal flertalsformer end hvad " +"katalogets Plural-Forms-filhovede siger" + +msgid "Required header Plural-Forms is missing." +msgstr "Det pÃ¥krævede filhovede Plural-Forms mangler." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaksfejl i Plural-Forms-filhovede (\"%s\")." + +msgid "Fix the Header" +msgstr "Ret headeren" + +msgid "Fix the header" +msgstr "Ret filhovedet" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Flertals formular udtrykket der bruges af kataloget er usædvanligt for %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Korrektur" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Fejl ved indlæsning af meddelelseskatalogfilen \"%s\"." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Oversat: %d af %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Mangler: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d fejl" +msgstr[1] "%d fejl" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d post" +msgstr[1] "%d poster" + +msgid " (unsaved)" +msgstr " (ikke gemt)" + +msgid " (modified)" +msgstr " (ændret)" + +msgid "Go" +msgstr "GÃ¥" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Kunne ikke opdatere oversættelseshukommelsen: %s" + +msgid "Purge deleted translations" +msgstr "Tøm slettede oversættelser" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Vil du slette alle oversættelser som ikke længere er i brug?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Hvis du fortsætter vil alle oversættelser som er markeret som slettede, " +"blive fjernet permanent. Du vil skulle oversætte dem igen hvis de senere " +"igen bliver brugt." + +msgid "Keep" +msgstr "Behold" + +msgid "Purge" +msgstr "Tøm" + +msgid "Fill missing translations from TM" +msgstr "Udfyld manglende oversættelser fra TM" + +msgid "Only fill in exact matches" +msgstr "Udfyld kun nøjagtige overensstemmelser" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Som standard vil unøjagtige resultater ogsÃ¥ blive udfyldt og markeret som " +"uafklaret. Marker dette punkt for kun at inkludere nøjagtige " +"overensstemmelser." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Marker ikke nøjagtige overensstemmelser som uafklarede" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Marker kun hvis du stoler pÃ¥ kvaliteten af din TM. Som standard vil alle " +"overensstemmelser fra TM'en være markeret som uafklaret og bør gennemlæses." + +msgid "Fill" +msgstr "Udfyld" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d emne blev udfyldt fra oversættelseshukommelsen." +msgstr[1] "%d emner blev udfyldt fra oversættelseshukommelsen." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Oversættelserne blev markeret som uafklarede, da de kan være forkerte. Du " +"bør tjekke deres korrekthed." + +msgid "No entries could be filled from the translation memory." +msgstr "Der kunne ikke udfyldes nogen emner fra oversættelseshukommelsen." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"OH indeholder ikke nogen strenge der svarer til indholdet af denne fil. Den " +"er kun god til halv-automatiske oversættelser nÃ¥r Poedit har lært nok fra " +"filer du har oversat manuelt." + +msgid "Translating" +msgstr "Oversætter" + +msgid "Filling missing translations from TM..." +msgstr "Udfylder manglende oversættelser fra OH..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Oversat %u streng" +msgstr[1] "Oversat %u strenge" + +msgid "Copy from source text" +msgstr "Kopiér fra kildetekst" + +msgid "Copy from Source Text" +msgstr "Kopiér fra kildetekst" + +msgid "Clear translation" +msgstr "Ryd oversættelse" + +msgid "Clear Translation" +msgstr "Ryd oversættelse" + +msgid "Edit comment" +msgstr "Redigér kommentar" + +msgid "Edit Comment" +msgstr "Redigér kommentar" + +msgid "References:" +msgstr "Referencer:" + +msgid "Everything" +msgstr "Alt" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Ental" + +msgid "Zero" +msgstr "Nul" + +msgid "One" +msgstr "En" + +msgid "Two" +msgstr "To" + +msgid "Plural" +msgstr "Flertal" + +msgid "Other" +msgstr "Andet" + +msgid "&Bookmarks" +msgstr "&Bogmærker" + +#, c-format +msgid "Set bookmark %i" +msgstr "Indstil bogmærket %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "GÃ¥ til bogmærket %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Indstil bogmærket %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "GÃ¥ til bogmærket %i" + +msgid "Hide Sidebar" +msgstr "Skjul sidebjælke" + +msgid "Show Sidebar" +msgstr "Vis sidebjælke" + +msgid "Hide Status Bar" +msgstr "Skjul statuslinje" + +msgid "Show Status Bar" +msgstr "Vis statuslinje" + +msgid "Source text" +msgstr "Oprindelig tekst" + +msgid "Translation" +msgstr "Oversættelse" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Kildetekst — %s" + +msgid "unknown language" +msgstr "ukendt sprog" + +#, c-format +msgid "Translation — %s" +msgstr "Oversættelse — %s" + +msgid "Error:" +msgstr "Fejl:" + +msgid "Source file" +msgstr "Kildefil" + +msgid "Source file occurrence:" +msgstr "Kildefilsforekomst:" + +msgid "Open in Editor" +msgstr "Åben i editor" + +msgid "Open in editor" +msgstr "Åben i editor" + +msgid "No references for the selected item." +msgstr "Ingen referencer for at det valgte emne." + +#, c-format +msgid "Error opening file %s!" +msgstr "Fejl ved Ã¥bning af filen %s!" + +msgid "Find" +msgstr "Find" + +msgid "Replace" +msgstr "Erstat" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Indstillinger" + +msgid "Ignore case" +msgstr "Ignorer forskelle pÃ¥ store og smÃ¥ bogstaver" + +msgid "Wrap around" +msgstr "Ombrydning" + +msgid "Whole words only" +msgstr "Kun hele ord" + +msgid "Find in source texts" +msgstr "Find i kildetekster" + +msgid "Find in translations" +msgstr "Find i oversættelser" + +msgid "Find in comments" +msgstr "Find i kommentarer" + +msgid "Close" +msgstr "Luk" + +msgid "Replace All" +msgstr "Erstat alle" + +msgid "Replace all" +msgstr "Erstat alle" + +msgid "< &Previous" +msgstr "< &Forrige" + +msgid "&Next >" +msgstr "&Næste >" + +msgid "String to find" +msgstr "Streng som skal findes" + +msgid "Replacement string" +msgstr "Erstatningsstreng" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Kan ikke udføre program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Sprogkode eller navn (f.eks. da_DK)" + +msgid "Translation Language" +msgstr "Oversættelsessprog" + +msgid "Language of the translation:" +msgstr "Sprog for oversættelsen:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - KataloghÃ¥ndtering" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "I alt" + +msgid "Untrans" +msgstr "Ikke-oversat" + +msgid "Fuzzy" +msgstr "Uafklaret" + +msgid "Bad Tokens" +msgstr "DÃ¥rlige symboler" + +msgid "Last modified" +msgstr "Sidst ændret" + +msgid "Select directory" +msgstr "Vælg mappe" + +msgid "Directories:" +msgstr "Mapper:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vil du slette projektet?" + +msgid "Confirmation" +msgstr "Bekræftelse" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Vil du virkelig masseopdatere alle\n" +"kataloger i dette projekt?" + +msgid "Information about the translator" +msgstr "Information om oversætteren" + +msgid "Name:" +msgstr "Navn:" + +msgid "Your Name" +msgstr "Dit navn" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "din_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Dit navn og din e-mailadresse bruges kun til at udfylde Last-Translator " +"headeren i GNU gettext filer." + +msgid "Editing" +msgstr "Redigerer" + +msgid "Automatically compile MO file when saving" +msgstr "Kompiler automatisk MO fil nÃ¥r der gemmes" + +msgid "Show summary after catalog update" +msgstr "Vis resumé efter opdatering af katalog" + +msgid "Check spelling" +msgstr "Stavekontrol" + +msgid "Always change focus to text input field" +msgstr "Skift altid fokus til indtastningsfeltet for tekst" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Fokusér aldrig pÃ¥ listen med strenge. Hvis det er slÃ¥et til, skal du bruge " +"Ctrl-piletaster for at navigere med tastaturet, men du kan til gengæld " +"indtaste tekst uden at skulle bruge tabulator tasten for at flytte fokus." + +msgid "Appearance" +msgstr "Udseende" + +msgid "Use custom list font:" +msgstr "Brug tilpasset skrifttype til lister:" + +msgid "Use custom text fields font:" +msgstr "Brug tilpasset skrifttype til tekstfelter:" + +msgid "Change UI language" +msgstr "Skift brugerfladens sprog" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(kræver Windows 8 eller nyere)" + +msgid "General" +msgstr "Generelt" + +msgid "Use translation memory" +msgstr "Brug oversættelseshukommelse" + +msgid "Learn From Files..." +msgstr "Lær fra filer..." + +msgid "Learn from files..." +msgstr "Lær fra filer..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Nulstil" + +msgid "Consult TM when updating from sources" +msgstr "Tjek OH ved opdatering fra kilder" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Hvis aktiveret, vil Poedit prøver at udfylde nye emner ved at bruge dine " +"tidligere\n" +"oversættelser som er gemt i oversættelseshukommelsen. Hvis OH næsten er\n" +"tom, vil den ikke være særlig effektiv. Jo flere oversættelser\n" +"du redigerer og jo større OH vokser, jo bedre bliver den." + +msgid "Stored translations:" +msgstr "Gemte oversættelser:" + +msgid "Database size on disk:" +msgstr "Databasestørrelse pÃ¥ disk:" + +msgid "Select translation files to import" +msgstr "Vælg oversættelsesfiler der skal importeres" + +msgid "Translation Memory" +msgstr "Oversættelseshukommelse" + +msgid "Importing translations..." +msgstr "Importerer oversættelser..." + +msgid "Finalizing..." +msgstr "Færdigører..." + +msgid "Reset translation memory" +msgstr "Nulstil oversættelseshukommelsen" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Er du sikker pÃ¥ at du ønsker at nulstille oversættelseshukommelsen?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Nulstilling af oversættelseshukommelsen vil uigenkaldeligt slette alle gemte " +"oversættelser i den. Du kan ikke fortryde denne handling." + +msgid "Cancel" +msgstr "Annullér" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Kildekode udtrækkerer bruges til at finde oversætbare strenge i kildekode-" +"filerne og trækker dem ud sÃ¥ de kan oversættes." + +msgid "New" +msgstr "Ny" + +msgid "Edit" +msgstr "Redigér" + +msgid "Delete extractor" +msgstr "Slet udtrækker" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Er du sikker pÃ¥ at du vil slette \"%s\"-udtrækkeren?" + +msgid "Extractors" +msgstr "Udtrækkere" + +msgid "Accounts" +msgstr "Konti" + +msgid "Automatically check for updates" +msgstr "Søg automatisk efter opdateringer" + +msgid "Include beta versions" +msgstr "Medtag betaversioner" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Betaversioner indeholder de nyeste funktioner og forbedringer, men kan være " +"lidt mindre stabile." + +msgid "Updates" +msgstr "Opdateringer" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Disse indstillinger pÃ¥virker den interne formatering af PO filer. Tilpas dem " +"hvis du har specielle krav f.eks pÃ¥ grund af versionskontrol." + +msgid "Line endings:" +msgstr "Linjeafslutninger:" + +msgid "Unix (recommended)" +msgstr "Unix (anbefalet)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Ombryd ved:" + +msgid "Preserve formatting of existing files" +msgstr "Bevar formatering af eksisterende filer" + +msgid "Advanced" +msgstr "Avanceret" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s indstillinger" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Træk og slip mapper her\n" +"\n" +"eller brug +-knappen" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Træk og slip mapper her\n" +"\n" +"eller brug +-knappen" + +msgid "Add Folders..." +msgstr "Tilføj mapper..." + +msgid "Add folders..." +msgstr "Tilføj mapper..." + +msgid "Add Files..." +msgstr "Tilføj filer..." + +msgid "Add files..." +msgstr "Tilføj filer..." + +msgid "Add Wildcard..." +msgstr "Tilføj jokertegn..." + +msgid "Add wildcard..." +msgstr "Tilføj jokertegn..." + +msgid "Paths" +msgstr "Stier" + +msgid "Excluded paths" +msgstr "Udelukkede stier" + +msgid "Additional keywords" +msgstr "Yderligere nøgleord" + +msgid "Name of the project the translation is for" +msgstr "Navn pÃ¥ projektet som oversættelsen er til" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "f.eks. nplurals=2; plural=(n != 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (anbefalet)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Gem venligst filen først. Denne kan sektion kan ikke redigere før det er " +"sket." + +msgid "Comment:" +msgstr "Kommentar:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Ryd" + +msgid "Clear the comment" +msgstr "Ryd kommentaren" + +msgid "Create new translations project" +msgstr "Opret nyt oversættelsesprojekt" + +msgid "Edit the project" +msgstr "Redigér projektet" + +msgid "Delete the project" +msgstr "Slet projektet" + +msgid "Update all" +msgstr "Opdatér alle" + +msgid "Update all catalogs in the project" +msgstr "Opdatér alle kataloger i projektet" + +msgid "Edit project" +msgstr "Redigér projekt" + +msgid "Project name:" +msgstr "Projektnavn:" + +msgid "Browse" +msgstr "Gennemse" + +msgid "Add directory to the list" +msgstr "Tilføj mappe til listen" + +msgid "&New..." +msgstr "&Ny..." + +msgid "New from &POT/PO file..." +msgstr "Ny fra &POT-/PO-fil..." + +msgid "New From &POT/PO File..." +msgstr "Ny fra &POT-/PO-fil..." + +msgid "&Open..." +msgstr "&Åbn..." + +msgid "Open Recent" +msgstr "Åbn nylige" + +msgid "Open from Crowdin..." +msgstr "Åbn fra Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Åbn fra Crowdin..." + +msgid "&Close" +msgstr "&Luk" + +msgid "&Save" +msgstr "&Gem" + +msgid "Save &as..." +msgstr "Gem &som..." + +msgid "Save &As..." +msgstr "Gem &som..." + +msgid "Compile to MO..." +msgstr "Kompiler til MO..." + +msgid "E&xport as HTML..." +msgstr "E&ksportér som HTML..." + +msgid "Check for updates..." +msgstr "Søg efter opdateringer..." + +msgid "&Preferences..." +msgstr "&Indstillinger..." + +msgid "Catalogs &manager" +msgstr "&KataloghÃ¥ndtering" + +msgid "Catalogs &Manager" +msgstr "&KataloghÃ¥ndtering" + +msgid "E&xit" +msgstr "&Afslut" + +msgid "Quit" +msgstr "Afslut" + +msgid "Copy from singular" +msgstr "Kopiér fra ental" + +msgid "Copy From Singular" +msgstr "Kopiér fra ental" + +msgid "Translation is &fuzzy" +msgstr "Oversættelsen er &uafklaret" + +msgid "Translation Is &Fuzzy" +msgstr "Oversættelsen er &uafklaret" + +msgid "Edit &comment" +msgstr "Redigér &kommentar" + +msgid "Edit &Comment" +msgstr "Redigér &kommentar" + +msgid "Suggestions" +msgstr "Forslag" + +msgid "&Show references" +msgstr "&Vis referencer" + +msgid "&Show References" +msgstr "&Vis referencer" + +msgid "&Find..." +msgstr "&Find..." + +msgid "Replace..." +msgstr "Erstat..." + +msgid "Find next" +msgstr "Find næste" + +msgid "Find previous" +msgstr "Find forrige" + +msgid "Find and Replace..." +msgstr "Find og erstat..." + +msgid "Find Next" +msgstr "Find næste" + +msgid "Find Previous" +msgstr "Find forrige" + +msgid "&Preferences" +msgstr "&Indstillinger" + +msgid "Display entry &IDs" +msgstr "Vis emne &ID'er" + +msgid "Display Entry &IDs" +msgstr "Vis emne &ID'er" + +msgid "Sort by &file order" +msgstr "Sortér efter &filrækkefølge" + +msgid "Sort by &File Order" +msgstr "Sortér efter &filrækkefølge" + +msgid "Sort by &source" +msgstr "Sortér efter &kilde" + +msgid "Sort by &Source" +msgstr "Sortér efter &kilde" + +msgid "Sort by &translation" +msgstr "Sortér efter &oversættelse" + +msgid "Sort by &Translation" +msgstr "Sortér efter &oversættelse" + +msgid "&Group by context" +msgstr "&Grupper efter kontekst" + +msgid "&Group By Context" +msgstr "&Grupper efter kontekst" + +msgid "Entries with errors first" +msgstr "Emner med fejl først" + +msgid "Entries with Errors First" +msgstr "Emner med fejl først" + +msgid "&Untranslated entries first" +msgstr "&Ikke-oversatte poster først" + +msgid "&Untranslated Entries First" +msgstr "&Ikke-oversatte poster først" + +msgid "Show sidebar" +msgstr "Vis sidebjælke" + +msgid "Show status bar" +msgstr "Vis statuslinje" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Opdatér fra kilder" + +msgid "&Update from Sources" +msgstr "&Opdatér fra kilder" + +msgid "Update from &POT file..." +msgstr "Opdatér fra &POT-fil..." + +msgid "Update from &POT File..." +msgstr "Opdatér fra &POT-fil..." + +msgid "Sync with Crowdin" +msgstr "Synkronisér med Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Udfyld manglende oversættelser fra &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Udfyld manglende oversættelser fra &TM..." + +msgid "&Purge deleted translations" +msgstr "&Tøm slettede oversættelser" + +msgid "&Purge Deleted Translations" +msgstr "&Tøm slettede oversættelser" + +msgid "&Validate translations" +msgstr "&Validér oversættelser" + +msgid "&Validate Translations" +msgstr "&Validér oversættelser" + +msgid "&Properties..." +msgstr "&Egenskaber..." + +msgid "&Done and next" +msgstr "Fæ&rdig og næste" + +msgid "&Done and Next" +msgstr "Fæ&rdig og næste" + +msgid "&Previous translation" +msgstr "&Forrige oversættelse" + +msgid "&Previous Translation" +msgstr "&Forrige oversættelse" + +msgid "&Next translation" +msgstr "&Næste oversættelse" + +msgid "&Next Translation" +msgstr "&Næste oversættelse" + +msgid "P&revious unfinished" +msgstr "F&orrige ufærdige" + +msgid "P&revious Unfinished" +msgstr "F&orrige ufærdige" + +msgid "Ne&xt unfinished" +msgstr "N&æste ufærdige" + +msgid "Ne&xt Unfinished" +msgstr "N&æste ufærdige" + +msgid "Previous plural form" +msgstr "Forrige flertalsform" + +msgid "Previous Plural Form" +msgstr "Forrige flertalsform" + +msgid "Next plural form" +msgstr "Næste flertalsform" + +msgid "Next Plural Form" +msgstr "Næste flertalsform" + +msgid "&Online help" +msgstr "&Onlinehjælp" + +msgid "&Online Help" +msgstr "&Onlinehjælp" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext manual" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext manual" + +msgid "&About Poedit" +msgstr "&Om Poedit" + +msgid "&About" +msgstr "&Om" + +msgid "Extractor setup" +msgstr "Udtrækker opsætning" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Liste med filendelser, adskilt med semikolon (f.eks. *.cpp, *.h):" + +msgid "Invocation:" +msgstr "Udførsel:" + +msgid "Command to extract translations:" +msgstr "Kommando til at udtrække oversættelser:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Dette er kommandoen der bruges til at afvikle udtrækkeren.\n" +"%o bliver til navnet for outputfilen, %K til listen\n" +"over nøgleord, %F til listen over inputfiler,\n" +"%C til tegnsætflag (se nedenfor)." + +msgid "An item in keywords list:" +msgstr "En post i nøgleordslisten:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Dette vil blive vedhæftet til kommandolinjen en\n" +"gang for hvert nøgleord. %k erstattes med nøgleordet." + +msgid "An item in input files list:" +msgstr "En post i listen over inddata filer:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Dette vil blive vedhæftet til kommandolinjen en\n" +"gang for hver inddatafil. %f erstattes med filnavnet." + +msgid "Source code charset:" +msgstr "Kildekodens tegnsæt:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Dette vil blive vedhæftet til kommandolinjen, dog kun\n" +"hvis kildekodens tegnsæt er givet. %c erstattes med tegnsætværdien." + +msgid "Catalog properties" +msgstr "Egenskaber for katalog" + +msgid "Project name and version:" +msgstr "Projektnavn og version:" + +msgid "Plural Forms:" +msgstr "Flertalsformer:" + +msgid "Use default rules for this language" +msgstr "Brug standardregler for dette sprog" + +msgid "Use custom expression" +msgstr "Brug tilpasset udtryk" + +msgid "Learn about plural forms" +msgstr "Lær mere om flertalsformer" + +msgid "Charset:" +msgstr "Tegnsæt:" + +msgid "Team:" +msgstr "Hold:" + +msgid "Team's email address:" +msgstr "Holdets e-mail-adresse:" + +msgid "Translation properties" +msgstr "Oversættelsesegenskaber" + +msgid "Sources paths" +msgstr "Søgestier" + +msgid "Extract text from source files in the following directories:" +msgstr "Udtræk tekst fra kildefiler i følgende mapper:" + +msgid "Base path:" +msgstr "Grundlæggende sti:" + +msgid "Sources keywords" +msgstr "Nøgleord i kildefil" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Brug disse nøgleord (funktionsnavne) til at genkende\n" +"oversættelige strenge i kildefiler:" + +msgid "Learn about gettext keywords" +msgstr "Lær om gettext nøgleord" + +msgid "Update summary" +msgstr "Opdatér resumé" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Disse strenge blev fundet i kilderne, men er ikke i kataloget.\n" +"Poedit vil nu føje dem til kataloget." + +msgid "New strings" +msgstr "Nye strenge" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Disse strenge er ikke længere i kilderne.\n" +"Poedit vil nu fjerne dem fra kataloget." + +msgid "Obsolete strings" +msgstr "Forældede strenge" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nye, 0 forældede)" + +msgid "Open" +msgstr "Åbn" + +msgid "Save catalog" +msgstr "Gem katalog" + +msgid "Validate" +msgstr "Validér" + +msgid "Check for errors in the translation" +msgstr "Find fejl i oversættelsen" + +msgid "Update" +msgstr "Opdatér" + +msgid "Update catalog - synchronize it with sources" +msgstr "Opdatér katalog - synkronisér med kilder" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "SlÃ¥et til hvis den valgte streng er uafklaret" + +msgid "Show or hide the sidebar" +msgstr "Vis eller skjul sidepanelet" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Tidligere kildetekst:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Den gamle kildetekst (før den blev ændret ved en opdatering) som uafklaret " +"oversættelse svarer til." + +msgid "Notes for translators:" +msgstr "Noter til oversættere:" + +msgid "Add comment" +msgstr "Tilføj kommentar" + +msgid "Add Comment" +msgstr "Tilføj kommentar" + +msgid "Translation suggestions:" +msgstr "Oversættelsesforslag:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ingen fundet" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ingen fundet" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Denne streng blev fundet i Poedit's oversættelseshukommelse." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nye: %i, forældede: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importerer oversættelser: %d" + +msgid "Poedit Update" +msgstr "Poedit opdatering" + +msgid "Preparing migration..." +msgstr "Forbereder migrering..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migrering afslutningstatus: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit skal konvertere din oversættelseshukommelse til et nyt format." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Dette skal gøres før Poedit kan starte. Det kan tage et par minutter hvis du " +"har mange gemte oversættelser, men bør normalt være væsentligt hurtigere." + +msgid "Proceed" +msgstr "Fortsæt" + +msgid "Translation memory migration failed." +msgstr "Migrering af oversættelseshukommelse mislykkedes." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Dine oversættelseshukommelsesdata kunne ikke migreres. Fejlen var:\n" +"\n" +"%s\n" +"Send venligst en e-mail til help@poedit.net og vi fÃ¥r det løst." + +msgid "Cannot create temporary directory." +msgstr "Kan ikke oprette midlertidig mappe." + +msgid "Welcome to Poedit" +msgstr "Velkommen til Poedit" + +msgid "Edit a translation" +msgstr "Redigér en oversættelse" + +msgid "Open an existing PO file and edit the translation." +msgstr "Åbn en eksisterende PO-fil og redigér oversættelsen." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Tag en eksisterende PO-fil eller POT-skabelon og opret en ny oversættelse " +"fra den." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Samarbejd om en oversættelse med Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Download en fil fra et Crowdin-projekt, oversæt og synkronisér dine " +"ændringer tilbage." + +msgid "What is Crowdin?" +msgstr "Hvad er Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Der er ikke nogen oversættelser. Det er usædvanligt." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Oversættelige emner tilføjes ikke manuelt i Gettext-systemet, men udtrækkes " +"automatisk\n" +"fra kildekoden. PÃ¥ denne mÃ¥de er de altid opdateret og korrekte.\n" +"Oversættere bruger typisk PO-skabelonfiler (POT) som er lavet til dem af " +"udvikleren." + +msgid "(Learn more about GNU gettext)" +msgstr "(lær mere om GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Den nemmeste mÃ¥de at fylde dette katalog, er ved at opdatere det fra en POT:" + +msgid "Update from POT" +msgstr "Opdatér fra POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Tag oversætbare strenge fra en eksisterende POT-skabelon." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Du kan ogsÃ¥ udtrække oversætbare strenge direkte fra kildekoden:" + +msgid "Extract from sources" +msgstr "Udtræk fra kilder" + +msgid "Configure source code extraction in Properties." +msgstr "Konfigurér kildekode-udtrækning i Egenskaber." + +msgid "Sync" +msgstr "Synk" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synkronisér oversættelsen med Crowdin" diff --git a/locales/de.mo b/locales/de.mo new file mode 100644 index 0000000000000000000000000000000000000000..07a387e4cb62ed7873b53fb6ceceb1510b5a71ca GIT binary patch literal 48164 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 N&|q)8(ucK{{68)cKPmtK literal 0 HcmV?d00001 diff --git a/locales/de.po b/locales/de.po new file mode 100644 index 0000000..0114533 --- /dev/null +++ b/locales/de.po @@ -0,0 +1,1986 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: German\n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: de\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Diese Benachrichtigung nicht anzeigen" + +msgid "Don't Show Again" +msgstr "Nicht mehr anzeigen" + +msgid "Don't show again" +msgstr "Nicht mehr anzeigen" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i Zeile der Datei »%s« wurde nicht korrekt geladen." +msgstr[1] "%i Zeilen der Datei »%s« wurden nicht korrekt geladen." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Zeile %d der Datei »%s« ist beschädigt (ungültige %s-Daten)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Fehlerhafter Header: »%s«" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Beschädigte Katalogdatei: Verwendung von msgstr in Singularform mit " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Beschädigte Katalogdatei: Verwendung von msgstr in Pluralform ohne " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Beim Laden des Katalogs sind Fehler aufgetreten. Einige Daten können fehlen " +"oder beschädigt sein." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "" +"Die Datei »%s« konnte nicht geladen werden. Sie ist vermutlich beschädigt." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Die Datei »%s« ist schreibgeschützt.\n" +"Bitte speichern Sie sie unter einem anderen Namen." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Datei »%s« kann nicht gespeichert werden." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Es gab einen Fehler beim Schön-Formatieren der Datei, sie wurde aber korrekt " +"gespeichert." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Der Katalog konnte nicht im Zeichensatz »%s« gespeichert werden.\n" +"\n" +"Er wurde stattdessen in UTF-8 gespeichert, die Katalog-Optionen wurden " +"entsprechend angepasst." + +msgid "Error saving catalog" +msgstr "Fehler beim Speichern der Katalogdatei" + +msgid "PO Translation Files" +msgstr "PO-Übersetzungsdateien" + +msgid "POT Translation Templates" +msgstr "POT-Übersetzungsvorlagen" + +msgid "All Translation Files" +msgstr "Alle Übersetzungsdateien" + +msgid "Merging differences..." +msgstr "Änderungen werden zusammengefügt …" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "»%s« ist keine gültige POT-Datei." + +msgid "(Use default language)" +msgstr "(Standardsprache verwenden)" + +msgid "Select your preferred language" +msgstr "Bitte wählen Sie Ihre Sprache aus" + +msgid "Language selection" +msgstr "Sprachauswahl" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Sie müssen Poedit neu starten, damit diese Änderung wirksam wird." + +msgid "Downloading translations is disabled in this project." +msgstr "Herunterladen von Übersetzungen ist in diesem Projekt deaktiviert." + +msgid "Not authorized, please sign in again." +msgstr "Nicht autorisiert, bitte melden Sie sich erneut an." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin ist eine Onlineplattform zur Lokalisierung und ein Werkzeug zum " +"gemeinsamen Übersetzen. Poedit kann PO-Dateien, die mittels Crowdin " +"verwaltet werden, problemlos synchronisieren." + +msgid "Sign In" +msgstr "Anmelden" + +msgid "Sign in" +msgstr "Anmelden" + +msgid "Sign Out" +msgstr "Abmelden" + +msgid "Sign out" +msgstr "Abmelden" + +msgid "Waiting for authentication…" +msgstr "Auf Authentifizierung warten …" + +msgid "Updating user information…" +msgstr "Benutzerinformationen werden aktualisiert …" + +msgid "Signed in as:" +msgstr "Angemeldet als:" + +msgid "Learn More About Crowdin" +msgstr "Erfahren Sie mehr über Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Erfahren Sie mehr über Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Bei Crowdin anmelden" + +msgid "Open Crowdin translation" +msgstr "Crowdin-Übersetzung öffnen" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Sprache:" + +msgid "File:" +msgstr "Datei:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Es sind keine Übersetzungsprojekte in Ihrem Crowdin-Konto gelistet." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"In diesem Projekt befinden sich keine Dateien, die mit Poedit übersetzt " +"werden können." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Diese Datei kann nur in der Weboberfläche von Crowdin bearbeitet werden." + +msgid "Downloading latest translations…" +msgstr "Neueste Übersetzungen werden heruntergeladen …" + +msgid "Syncing with Crowdin" +msgstr "Synchronisierung mit Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Fehler bei der Synchronisierung mit Crowdin." + +msgid "Crowdin error" +msgstr "Crowdin Fehler" + +msgid "Uploading translations…" +msgstr "Übersetzungen werden hochgeladen …" + +msgid "&Copy" +msgstr "&Kopieren" + +msgid "Learn more" +msgstr "Weitere Informationen" + +msgid "Learn More" +msgstr "Weitere Informationen" + +#, c-format +msgid "Failed command: %s" +msgstr "Fehlgeschlagener Befehl: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Zusammenführen der gettext-Kataloge fehlgeschlagen." + +msgid "Scanning files..." +msgstr "Dateien werden untersucht …" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s-Dateien werden verarbeitet …" + +msgid "Failed to load extracted catalog." +msgstr "Laden des extrahierten Kataloges fehlgeschlagen." + +msgid "&Help" +msgstr "&Hilfe" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO-Dateien können nicht direkt in Poedit bearbeitet werden." + +msgid "Error opening file" +msgstr "Fehler beim Öffnen der Datei" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Bitte öffnen Sie stattdessen die zugehörige PO-Datei. Wenn Sie die Datei " +"speichern, wird die MO-Datei ebenfalls aktualisiert." + +msgid "don't delete temporary files (for debugging)" +msgstr "Temporäre Dateien nicht entfernen (für Fehlersuche)" + +msgid "handle a poedit:// URI" +msgstr "poedit:// Adresse verwenden" + +msgid "Failed to communicate with Poedit process." +msgstr "Kommunikation mit Poedit-Prozess fehlgeschlagen." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ein unerwarteter Fehler ist aufgetreten: %s" + +msgid "Unhandled exception occurred." +msgstr "Ein unerwarteter Fehler ist aufgetreten." + +msgid "Open catalog" +msgstr "Katalog öffnen" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Die Datei »%s« existiert nicht." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Über %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Dienste" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s ausblenden" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Andere ausblenden" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Alle anzeigen" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s beenden" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit ist ein einfach zu benutzender Übersetzungseditor." + +msgid "Catalogs Manager" +msgstr "Katalogverwaltung" + +msgid "Check for Updates..." +msgstr "Auf Aktualisierungen prüfen …" + +msgid "&Edit" +msgstr "&Bearbeiten" + +msgid "Undo" +msgstr "Rückgängig" + +msgid "Redo" +msgstr "Wiederherstellen" + +msgid "Paste and Match Style" +msgstr "Einsetzen und Stil anpassen" + +msgid "Delete" +msgstr "Löschen" + +msgid "Spelling and Grammar" +msgstr "Rechtschreibung und Grammatik" + +msgid "Show Spelling and Grammar" +msgstr "Rechtschreibung und Grammatik anzeigen" + +msgid "Check Document Now" +msgstr "Dokument jetzt prüfen" + +msgid "Check Spelling While Typing" +msgstr "Rechtschreibung während der Eingabe prüfen" + +msgid "Check Grammar With Spelling" +msgstr "Grammatik zusätzlich zur Rechtschreibung prüfen" + +msgid "Correct Spelling Automatically" +msgstr "Automatische Rechtschreibkorrektur" + +msgid "Substitutions" +msgstr "Ersetzungen" + +msgid "Show Substitutions" +msgstr "Ersetzungen anzeigen" + +msgid "Smart Copy/Paste" +msgstr "Intelligentes Kopieren/Einsetzen" + +msgid "Smart Quotes" +msgstr "Intelligente Anführungszeichen" + +msgid "Smart Dashes" +msgstr "Intelligente Bindestriche" + +msgid "Smart Links" +msgstr "Intelligente Links" + +msgid "Text Replacement" +msgstr "Textersetzung" + +msgid "Transformations" +msgstr "Transformationen" + +msgid "Make Upper Case" +msgstr "Großschreiben" + +msgid "Make Lower Case" +msgstr "Kleinschreiben" + +msgid "Capitalize" +msgstr "Wortanfänge großschreiben" + +msgid "Speech" +msgstr "Sprache" + +msgid "Start Speaking" +msgstr "Sprechen starten" + +msgid "Stop Speaking" +msgstr "Sprechen stoppen" + +msgid "&View" +msgstr "&Ansicht" + +msgid "Enter Full Screen" +msgstr "Vollbild" + +msgid "Window" +msgstr "Fenster" + +msgid "Minimize" +msgstr "Minimieren" + +msgid "Zoom" +msgstr "Vergrößern" + +msgid "Bring All to Front" +msgstr "Alle in den Vordergrund bringen" + +msgid "PO Translation" +msgstr "PO-Übersetzung" + +msgid "The file cannot be opened." +msgstr "Die Datei kann nicht geöffnet werden." + +msgid "Invalid file" +msgstr "Ungültige Datei" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Die Datei ist entweder beschädigt oder Poedit konnte das Format nicht " +"erkennen." + +msgid "&Undo" +msgstr "&Rückgängig" + +msgid "&Redo" +msgstr "&Wiederherstellen" + +msgid "Cu&t" +msgstr "&Ausschneiden" + +msgid "Cut" +msgstr "Ausschneiden" + +msgid "Copy" +msgstr "Kopieren" + +msgid "&Paste" +msgstr "E&infügen" + +msgid "Paste" +msgstr "Einfügen" + +msgid "&Delete" +msgstr "&Löschen" + +msgid "Select &All" +msgstr "&Alles auswählen" + +msgid "Select All" +msgstr "Alles auswählen" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Strg+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Umschalt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Eingabe" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Hoch" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Runter" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "strg" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "umschalt" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Sie können nicht mehr als eine Datei ins Poedit-Fenster ziehen." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Die Datei »%s« ist kein Text-Katalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Datei" + +msgid "&Go" +msgstr "&Navigieren" + +msgid "Source text:" +msgstr "Quelltext:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Übersetzung:" + +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-Dateien sind nur Vorlagen, sie enthalten selbst keine Übersetzungen.\n" +"Um eine Übersetzung zu starten, legen Sie eine neue PO-Datei an, die auf der " +"Vorlage basiert." + +msgid "Create New Translation" +msgstr "Neue Übersetzung anlegen" + +msgid "Create new translation" +msgstr "Neue Übersetzung erstellen" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Die Rechtschreibprüfung ist deaktiviert, weil das Wörterbuch für %s nicht " +"installiert ist." + +msgid "Install" +msgstr "Installieren" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog geändert. Änderungen speichern?" + +msgid "Save changes" +msgstr "Änderungen speichern" + +msgid "Your changes will be lost if you don't save them." +msgstr "Ihre Änderungen gehen verloren, wenn Sie diese nicht speichern." + +msgid "Save" +msgstr "Speichern" + +msgid "Don't save" +msgstr "Nicht speichern" + +msgid "Don't Save" +msgstr "Nicht speichern" + +msgid "Save as..." +msgstr "Speichern unter …" + +msgid "Compile to..." +msgstr "Kompilieren nach …" + +msgid "Compiled Translation Files" +msgstr "Kompilierte Übersetzungsdateien" + +msgid "Export as..." +msgstr "Exportieren als …" + +msgid "HTML Files" +msgstr "HTML-Dateien" + +msgid "Open catalog template" +msgstr "Katalogvorlage öffnen" + +msgid "Updating catalog" +msgstr "Katalog wird aktualisiert" + +msgid "Source code not available." +msgstr "Der Quellcode steht nicht zur Verfügung." + +msgid "Updating failed" +msgstr "Die Aktualisierung ist fehlgeschlagen" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Übersetzungen konnten nicht aus dem Quellcode aktualisiert werden, weil kein " +"Quellcode an dem in den Katalogeinstellungen angegebenen Ort gefunden wurde." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogeinträge sind möglicherweise ungültig." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Aktualisierung des Kataloges fehlgeschlagen. Klicken Sie für weitere " +"Informationen auf »Details >>«." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Es wurde %d Problem mit der Übersetzung gefunden" +msgstr[1] "Es wurden %d Probleme mit der Übersetzung gefunden" + +msgid "Validation results" +msgstr "Überprüfungsergebnisse" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Fehlerhafte Einträge wurden in der Liste rot markiert. Beim Auswählen eines " +"dieser Einträge werden Details zum Fehler angezeigt." + +msgid "The file was saved safely." +msgstr "Die Datei wurde sicher gespeichert." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Die Datei wurde sicher gespeichert und in das MO-Format konvertiert, aber " +"möglicherweise funktioniert es nicht korrekt." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Die Datei wurde gespeichert, aber das Kompilieren ins MO-Format schlug fehl " +"und kann daher nicht verwendet werden." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Die Datei wurde in das MO-Format kompiliert, allerdings wird sie " +"wahrscheinlich nicht ordnungsgemäß funktionieren." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Die Datei kann nicht in das MO-Format kompiliert und verwendet werden." + +msgid "No problems with the translation found." +msgstr "Es wurden keine Probleme mit der Übersetzung gefunden." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Die Übersetzung ist bereit für die Nutzung, aber %d Eintrag ist noch nicht " +"übersetzt." +msgstr[1] "" +"Die Übersetzung ist bereit für die Nutzung, aber %d Einträge sind noch nicht " +"übersetzt." + +msgid "The translation is ready for use." +msgstr "Die Übersetzung kann verwendet werden." + +msgid "Context:" +msgstr "Zusammenhang:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Ungültige Inhalte der Datei »%s« wurden von Poedit automatisch korrigiert." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Die Datei enthält doppelte Einträge, was in PO-Dateien nicht zulässig ist " +"und dazu führen würde, dass die Datei nicht verwendet wird. Dieses Problem " +"wurde von Poedit behoben. Sie sollten allerdings Übersetzungen, die als " +"unklar markiert sind, prüfen und diese falls erforderlich korrigieren." + +msgid "Language of the translation isn't set." +msgstr "Sprache der Übersetzung ist nicht festgelegt." + +msgid "Set Language" +msgstr "Sprache festlegen" + +msgid "Set language" +msgstr "Sprache festlegen" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Vorschläge sind nicht verfügbar, wenn die Übersetzungssprache nicht richtig " +"eingestellt ist. Andere Funktionen wie z.B. Pluralformen, können ebenfalls " +"betroffen sein." + +msgid "Language of the translation is the same as source language." +msgstr "Sprache der Übersetzung ist dieselbe wie die Ausgangssprache." + +msgid "Fix Language" +msgstr "Sprache korrekt festlegen" + +msgid "Fix language" +msgstr "Sprache korrekt festlegen" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Dieser Katalog hat Einträge mit Plural-Formen, jedoch sind im Kopfbereich " +"der Datei keine Plural-Formen eingerichtet." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Einträge in diesem Katalog haben eine andere Anzahl an Plural-Formen als im " +"Kopfbereich des Kataloges angegeben." + +msgid "Required header Plural-Forms is missing." +msgstr "Im Kopfbereich der Datei fehlt die Angabe »Plural-Forms«." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaxfehler im Dateikopf bei »Plural-Forms« (»%s«)." + +msgid "Fix the Header" +msgstr "Kopfbereich reparieren" + +msgid "Fix the header" +msgstr "Kopfbereich reparieren" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Verwendete Plural-Form des Kataloges ist unüblich für %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Überprüfen" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Fehler beim Laden der Katalogdatei »%s«." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Übersetzt: %d von %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Verbleibend: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d Fehler" +msgstr[1] "%d Fehler" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d Eintrag" +msgstr[1] "%d Einträge" + +msgid " (unsaved)" +msgstr " (ungespeichert)" + +msgid " (modified)" +msgstr " (geändert)" + +msgid "Go" +msgstr "Navigieren" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Fehler beim Aktualisieren des Übersetzungsspeichers: %s" + +msgid "Purge deleted translations" +msgstr "Ungenutzte Übersetzungen entfernen" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Sollen alle nicht mehr verwendeten Übersetzungen entfernt werden?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Wenn Sie mit dem Bereinigen fortfahren, werden alle als gelöscht markierten " +"Texte endgültig gelöscht. Wenn die Texte in Zukunft wieder hinzugefügt " +"werden, müssen Sie sie erneut übersetzen." + +msgid "Keep" +msgstr "Behalten" + +msgid "Purge" +msgstr "Bereinigen" + +msgid "Fill missing translations from TM" +msgstr "Fehlende Übersetzungen aus dem Übersetzungsspeicher füllen" + +msgid "Only fill in exact matches" +msgstr "Nur genaue Treffer ausfüllen" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Standardmäßig werden ungenaue Ergebnisse auch übernommen und als unklar " +"markiert. Wählen Sie diese Option, um nur exakte Übereinstimmungen zu " +"übernehmen." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Genaue Treffer nicht als unklar markieren" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Nur aktivieren, wenn Sie der Qualität Ihres Übersetzungsspeichers vertrauen. " +"Standardmäßig werden alle automatischen Übersetzungen als unklar markiert " +"und sollten überprüft werden." + +msgid "Fill" +msgstr "Befüllen" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d Eintrag wurde aus dem Übersetzungsspeicher übernommen." +msgstr[1] "%d Einträge wurden aus dem Übersetzungsspeicher übernommen." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Die Übersetzungen sind als unklar markiert, weil sie ungenau sein könnten. " +"Sie sollten die Einträge auf ihre Richtigkeit überprüfen." + +msgid "No entries could be filled from the translation memory." +msgstr "Aus dem Übersetzungsspeicher konnten keine Einträge übernommen werden." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Der Übersetzungsspeicher beinhaltet keine Zeichenketten, die dem Inhalt " +"dieser Datei ähneln. Der Übersetzungsspeicher kann erst dann effizient bei " +"semi-automatischen Übersetzungen helfen, wenn Poedit ausreichend von den " +"bisherigen Übersetzungen gelernt hat." + +msgid "Translating" +msgstr "Übersetzungen werden übernommen" + +msgid "Filling missing translations from TM..." +msgstr "Fehlende Übersetzungen werden aus dem Übersetzungsspeicher gefüllt …" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u Zeichenkette übersetzt" +msgstr[1] "%u Zeichenketten übersetzt" + +msgid "Copy from source text" +msgstr "Quelltext übernehmen" + +msgid "Copy from Source Text" +msgstr "Quelltext übernehmen" + +msgid "Clear translation" +msgstr "Übersetzung löschen" + +msgid "Clear Translation" +msgstr "Übersetzung löschen" + +msgid "Edit comment" +msgstr "Kommentar bearbeiten" + +msgid "Edit Comment" +msgstr "Kommentar bearbeiten" + +msgid "References:" +msgstr "Verweise:" + +msgid "Everything" +msgstr "Alles" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Null" + +msgid "One" +msgstr "Singular" + +msgid "Two" +msgstr "Zwei" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Plural" + +msgid "&Bookmarks" +msgstr "&Lesezeichen" + +#, c-format +msgid "Set bookmark %i" +msgstr "Lesezeichen %i festlegen" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Zu Lesezeichen %i springen" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Lesezeichen %i festlegen" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Zu Lesezeichen %i springen" + +msgid "Hide Sidebar" +msgstr "Seitenleiste ausblenden" + +msgid "Show Sidebar" +msgstr "Seitenleiste anzeigen" + +msgid "Hide Status Bar" +msgstr "Statusleiste ausblenden" + +msgid "Show Status Bar" +msgstr "Statusleiste anzeigen" + +msgid "Source text" +msgstr "Quelltext" + +msgid "Translation" +msgstr "Übersetzung" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Quelltext — %s" + +msgid "unknown language" +msgstr "unbekannte Sprache" + +#, c-format +msgid "Translation — %s" +msgstr "Übersetzung – %s" + +msgid "Error:" +msgstr "Fehler:" + +msgid "Source file" +msgstr "Quelldatei" + +msgid "Source file occurrence:" +msgstr "Vorkommen in Quelldatei:" + +msgid "Open in Editor" +msgstr "In Editor öffnen" + +msgid "Open in editor" +msgstr "In Editor öffnen" + +msgid "No references for the selected item." +msgstr "Keine Verweise für das ausgewählte Element." + +#, c-format +msgid "Error opening file %s!" +msgstr "Fehler beim Öffnen der Datei »%s«." + +msgid "Find" +msgstr "Suchen" + +msgid "Replace" +msgstr "Ersetzen" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Optionen" + +msgid "Ignore case" +msgstr "Groß-/Kleinschreibung ignorieren" + +msgid "Wrap around" +msgstr "Am Ende von vorne beginnen" + +msgid "Whole words only" +msgstr "Nur ganze Wörter" + +msgid "Find in source texts" +msgstr "In Quelltexten suchen" + +msgid "Find in translations" +msgstr "In Übersetzungen suchen" + +msgid "Find in comments" +msgstr "In Kommentaren suchen" + +msgid "Close" +msgstr "Schließen" + +msgid "Replace All" +msgstr "Alle ersetzen" + +msgid "Replace all" +msgstr "Alle ersetzen" + +msgid "< &Previous" +msgstr "< &Zurück" + +msgid "&Next >" +msgstr "&Weiter >" + +msgid "String to find" +msgstr "Zu suchende Zeichenkette" + +msgid "Replacement string" +msgstr "Ersatzzeichenkette" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Programm konnte nicht ausgeführt werden: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Sprachcode oder Name (z.B. de_DE)" + +msgid "Translation Language" +msgstr "Übersetzungssprache" + +msgid "Language of the translation:" +msgstr "Sprache der Übersetzung:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit-Katalogverwaltung" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Gesamt" + +msgid "Untrans" +msgstr "Nicht übersetzt" + +msgid "Fuzzy" +msgstr "Unklar" + +msgid "Bad Tokens" +msgstr "Ungültige Zeichenketten" + +msgid "Last modified" +msgstr "Letzte Änderung" + +msgid "Select directory" +msgstr "Ordner auswählen" + +msgid "Directories:" +msgstr "Ordner:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Möchten Sie das Projekt löschen?" + +msgid "Confirmation" +msgstr "Bestätigung" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Möchten Sie wirklich alle Kataloge dieses\n" +"Projekts aktualisieren?" + +msgid "Information about the translator" +msgstr "Informationen zum Übersetzer" + +msgid "Name:" +msgstr "Name:" + +msgid "Your Name" +msgstr "Ihr Name" + +msgid "Email:" +msgstr "E-Mail:" + +msgid "your_email@example.com" +msgstr "ihr_name@beispiel.org" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ihr Name und die E-Mail-Adresse werden nur verwendet, um den »Last-" +"Translator«-Eintrag in GNU gettext-Dateien zu setzen." + +msgid "Editing" +msgstr "Bearbeiten" + +msgid "Automatically compile MO file when saving" +msgstr "MO-Datei beim Speichern automatisch erstellen" + +msgid "Show summary after catalog update" +msgstr "Bericht nach Katalogaktualisierung anzeigen" + +msgid "Check spelling" +msgstr "Rechtschreibung prüfen" + +msgid "Always change focus to text input field" +msgstr "Den Fokus immer auf das Eingabefeld setzen" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Der Zeichenkettenliste nie den Fokus geben. Wenn aktiviert, müssen Sie Strg-" +"Pfeiltasten zur Navigation benutzen. Sie können jedoch auch sofort Text " +"eingeben, ohne vorher zum Ändern des Fokus Tab drücken zu müssen." + +msgid "Appearance" +msgstr "Erscheinungsbild" + +msgid "Use custom list font:" +msgstr "Benutzerdefinierte Schriftart für Listen verwenden:" + +msgid "Use custom text fields font:" +msgstr "Benutzerdefinierte Schriftart für Textfelder verwenden:" + +msgid "Change UI language" +msgstr "GUI-Sprache auswählen" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(benötigt Windows 8 oder neuer)" + +msgid "General" +msgstr "Allgemein" + +msgid "Use translation memory" +msgstr "Übersetzungsspeicher verwenden" + +msgid "Learn From Files..." +msgstr "Aus Dateien befüllen …" + +msgid "Learn from files..." +msgstr "Aus Dateien befüllen …" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Zurücksetzen" + +msgid "Consult TM when updating from sources" +msgstr "Übersetzungsspeicher beim Aktualisieren von Quellen hinzuziehen" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Wenn aktiviert, versucht Poedit neue Einträge automatisch von vorherigen\n" +"Übersetzungen im Übersetzungsspeicher zu übersetzen. Wenn der Speicher\n" +"fast leer ist, ist die Funktion nicht besonders effektiv. Je mehr " +"Übersetzungen\n" +"Sie bearbeiten und je größer der Speicher wird, desto effektiver wird es." + +msgid "Stored translations:" +msgstr "Gespeicherte Übersetzungen:" + +msgid "Database size on disk:" +msgstr "Größe der Datenbank auf der Festplatte:" + +msgid "Select translation files to import" +msgstr "Übersetzungsdateien zum Importieren auswählen" + +msgid "Translation Memory" +msgstr "Übersetzungsspeicher" + +msgid "Importing translations..." +msgstr "Übersetzungen werden importiert …" + +msgid "Finalizing..." +msgstr "Abschließen …" + +msgid "Reset translation memory" +msgstr "Übersetzungsspeicher zurücksetzen" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" +"Sind Sie sicher, dass der Übersetzungsspeicher zurückgesetzt werden soll?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Das Zurücksetzen des Übersetzungsspeichers löscht alle darin gespeicherten " +"Übersetzungen unwiderruflich. Dieser Schritt kann nicht rückgängig gemacht " +"werden." + +msgid "Cancel" +msgstr "Abbrechen" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Quellcode-Extraktoren werden verwendet, um übersetzbare Zeichenketten in den " +"Quellcode-Dateien zu suchen und diese zu extrahieren, so dass sie übersetzt " +"werden können." + +msgid "New" +msgstr "Neu" + +msgid "Edit" +msgstr "Bearbeiten" + +msgid "Delete extractor" +msgstr "Extraktor entfernen" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Sind Sie sicher, dass der Extraktor »%s« entfernt werden soll?" + +msgid "Extractors" +msgstr "Extraktoren" + +msgid "Accounts" +msgstr "Konten" + +msgid "Automatically check for updates" +msgstr "Automatisch nach Aktualisierungen suchen" + +msgid "Include beta versions" +msgstr "Beta-Versionen einbeziehen" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-Versionen enthalten die neuesten Funktionen und Verbesserungen, können " +"allerdings etwas weniger stabil sein." + +msgid "Updates" +msgstr "Aktualisierungen" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Diese Einstellungen betreffen die interne Formatierung der PO-Dateien. " +"Passen Sie sie an, wenn Sie, z.B. für Versionskontrolle, bestimmte " +"Anforderungen haben." + +msgid "Line endings:" +msgstr "Zeilenenden:" + +msgid "Unix (recommended)" +msgstr "Unix (empfohlen)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Umbrechen bei:" + +msgid "Preserve formatting of existing files" +msgstr "Formatierung vorhandener Dateien beibehalten" + +msgid "Advanced" +msgstr "Erweitert" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s-Einstellungen" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Ziehen und legen Sie Ordner hier ab\n" +"\n" +"oder verwenden Sie den + Knopf" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Ziehen und legen Sie Ordner hier ab\n" +"\n" +"oder verwenden Sie den + Knopf" + +msgid "Add Folders..." +msgstr "Ordner hinzufügen …" + +msgid "Add folders..." +msgstr "Ordner hinzufügen …" + +msgid "Add Files..." +msgstr "Dateien hinzufügen …" + +msgid "Add files..." +msgstr "Dateien hinzufügen …" + +msgid "Add Wildcard..." +msgstr "Platzhalter hinzufügen …" + +msgid "Add wildcard..." +msgstr "Platzhalter hinzufügen …" + +msgid "Paths" +msgstr "Pfade" + +msgid "Excluded paths" +msgstr "Ausgeschlossene Pfade" + +msgid "Additional keywords" +msgstr "Zusätzliche Schlüsselwörter" + +msgid "Name of the project the translation is for" +msgstr "Name des Projektes der Übersetzung" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "z.B. nplurals=2; plural=(n != 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (empfohlen)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Bitte speichern Sie die Datei vorher. Dieser Abschnitt kann bis dahin nicht " +"bearbeitet werden." + +msgid "Comment:" +msgstr "Kommentar:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Löschen" + +msgid "Clear the comment" +msgstr "Kommentar löschen" + +msgid "Create new translations project" +msgstr "Neues Übersetzungsprojekt erstellen" + +msgid "Edit the project" +msgstr "Projekt bearbeiten" + +msgid "Delete the project" +msgstr "Projekt löschen" + +msgid "Update all" +msgstr "Alle aktualisieren" + +msgid "Update all catalogs in the project" +msgstr "Alle Kataloge des Projektes aktualisieren" + +msgid "Edit project" +msgstr "Projekt bearbeiten" + +msgid "Project name:" +msgstr "Projektname:" + +msgid "Browse" +msgstr "Durchsuchen" + +msgid "Add directory to the list" +msgstr "Ordner zur Liste hinzufügen" + +msgid "&New..." +msgstr "&Neu …" + +msgid "New from &POT/PO file..." +msgstr "Neu aus &POT/PO Datei …" + +msgid "New From &POT/PO File..." +msgstr "Neu aus &POT/PO Datei …" + +msgid "&Open..." +msgstr "Ö&ffnen …" + +msgid "Open Recent" +msgstr "Zuletzt geöffnete Dateien" + +msgid "Open from Crowdin..." +msgstr "Von Crowdin öffnen …" + +msgid "Open From Crowdin..." +msgstr "Von Crowdin öffnen …" + +msgid "&Close" +msgstr "S&chließen" + +msgid "&Save" +msgstr "&Speichern" + +msgid "Save &as..." +msgstr "Speichern &unter …" + +msgid "Save &As..." +msgstr "Speichern &unter …" + +msgid "Compile to MO..." +msgstr "MO-Datei erstellen …" + +msgid "E&xport as HTML..." +msgstr "E&xportieren als HTML …" + +msgid "Check for updates..." +msgstr "Auf Aktualisierungen prüfen …" + +msgid "&Preferences..." +msgstr "&Einstellungen …" + +msgid "Catalogs &manager" +msgstr "&Katalogverwaltung" + +msgid "Catalogs &Manager" +msgstr "&Katalogverwaltung" + +msgid "E&xit" +msgstr "&Beenden" + +msgid "Quit" +msgstr "Beenden" + +msgid "Copy from singular" +msgstr "Von Singular kopieren" + +msgid "Copy From Singular" +msgstr "Von Singular kopieren" + +msgid "Translation is &fuzzy" +msgstr "Übersetzung ist &unklar" + +msgid "Translation Is &Fuzzy" +msgstr "Übersetzung ist &unklar" + +msgid "Edit &comment" +msgstr "&Kommentar bearbeiten" + +msgid "Edit &Comment" +msgstr "&Kommentar bearbeiten" + +msgid "Suggestions" +msgstr "Vorschläge" + +msgid "&Show references" +msgstr "&Verweise anzeigen" + +msgid "&Show References" +msgstr "&Verweise anzeigen" + +msgid "&Find..." +msgstr "&Suchen …" + +msgid "Replace..." +msgstr "Ersetzen …" + +msgid "Find next" +msgstr "Nächstes Vorkommen suchen" + +msgid "Find previous" +msgstr "Vorheriges Vorkommen suchen" + +msgid "Find and Replace..." +msgstr "Suchen und ersetzen …" + +msgid "Find Next" +msgstr "Nächstes Vorkommen suchen" + +msgid "Find Previous" +msgstr "Vorheriges Vorkommen suchen" + +msgid "&Preferences" +msgstr "&Einstellungen" + +msgid "Display entry &IDs" +msgstr "Zeige Eintrag-&IDs" + +msgid "Display Entry &IDs" +msgstr "Zeige Eintrag-&IDs" + +msgid "Sort by &file order" +msgstr "Nach &Datei sortieren" + +msgid "Sort by &File Order" +msgstr "Nach &Datei sortieren" + +msgid "Sort by &source" +msgstr "Nach &Quelltext sortieren" + +msgid "Sort by &Source" +msgstr "Nach &Quelltext sortieren" + +msgid "Sort by &translation" +msgstr "Nach &Übersetzung sortieren" + +msgid "Sort by &Translation" +msgstr "Nach &Übersetzung sortieren" + +msgid "&Group by context" +msgstr "Nach Zusammenhang &gruppieren" + +msgid "&Group By Context" +msgstr "Nach Zusammenhang &gruppieren" + +msgid "Entries with errors first" +msgstr "Einträge mit Fehlern zuerst" + +msgid "Entries with Errors First" +msgstr "Einträge mit Fehlern zuerst" + +msgid "&Untranslated entries first" +msgstr "&Nicht übersetzte Einträge zuerst" + +msgid "&Untranslated Entries First" +msgstr "&Nicht übersetzte Einträge zuerst" + +msgid "Show sidebar" +msgstr "Seitenleiste anzeigen" + +msgid "Show status bar" +msgstr "Statusleiste anzeigen" + +msgid "C&atalog" +msgstr "&Katalog" + +msgid "&Update from sources" +msgstr "&Aus Quellen aktualisieren" + +msgid "&Update from Sources" +msgstr "&Aus Quellen aktualisieren" + +msgid "Update from &POT file..." +msgstr "Aus &POT-Datei aktualisieren …" + +msgid "Update from &POT File..." +msgstr "Aus &POT-Datei aktualisieren …" + +msgid "Sync with Crowdin" +msgstr "Mit Crowdin synchronisieren" + +msgid "Fill missing translations from &TM..." +msgstr "Fehlende Übersetzungen aus dem Übersetzungsspeicher &füllen …" + +msgid "Fill Missing Translations from &TM..." +msgstr "Fehlende Übersetzungen aus dem Übersetzungsspeicher &füllen …" + +msgid "&Purge deleted translations" +msgstr "&Ungenutzte Übersetzungen entfernen" + +msgid "&Purge Deleted Translations" +msgstr "&Ungenutzte Übersetzungen entfernen" + +msgid "&Validate translations" +msgstr "&Übersetzungen prüfen" + +msgid "&Validate Translations" +msgstr "&Übersetzungen prüfen" + +msgid "&Properties..." +msgstr "&Eigenschaften …" + +msgid "&Done and next" +msgstr "&Erledigt und weiter" + +msgid "&Done and Next" +msgstr "&Erledigt und weiter" + +msgid "&Previous translation" +msgstr "&Vorherige Übersetzung" + +msgid "&Previous Translation" +msgstr "&Vorherige Übersetzung" + +msgid "&Next translation" +msgstr "&Nächste Übersetzung" + +msgid "&Next Translation" +msgstr "&Nächste Übersetzung" + +msgid "P&revious unfinished" +msgstr "V&orherige unfertige" + +msgid "P&revious Unfinished" +msgstr "V&orherige unfertige" + +msgid "Ne&xt unfinished" +msgstr "N&ächste unfertige" + +msgid "Ne&xt Unfinished" +msgstr "N&ächste unfertige" + +msgid "Previous plural form" +msgstr "Vorige Plural-Form" + +msgid "Previous Plural Form" +msgstr "Vorige Plural-Form" + +msgid "Next plural form" +msgstr "Nächste Plural-Form" + +msgid "Next Plural Form" +msgstr "Nächste Plural-Form" + +msgid "&Online help" +msgstr "&Online-Hilfe" + +msgid "&Online Help" +msgstr "&Online-Hilfe" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext Dokumentation" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext Dokumentation" + +msgid "&About Poedit" +msgstr "&Über Poedit" + +msgid "&About" +msgstr "&Über" + +msgid "Extractor setup" +msgstr "Extraktor-Einrichtung" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Durch Semikola getrennte Liste der Dateiendungen (z.B. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Aufruf:" + +msgid "Command to extract translations:" +msgstr "Befehl, um Übersetzungen zu extrahieren:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Mit diesem Befehl wird der Extraktor gestartet,\n" +"wobei die folgenden Ersetzungen stattfinden:\n" +"%o durch den Namen der Ausgabedatei,\n" +"%K durch die Liste der Schlüsselwörter,\n" +"%F durch die Liste der Eingabedateien,\n" +"%C durch den Zeichensatz (siehe unten)." + +msgid "An item in keywords list:" +msgstr "Ein Eintrag in der Schlüsselwortliste:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Wird für jedes Schlüsselwort einmal an die Kommandozeile\n" +"angehängt. %k repräsentiert das Schlüsselwort." + +msgid "An item in input files list:" +msgstr "Ein Eintrag in der Eingabedatei-Liste:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Wird für jede Eingabedatei einmal an die Kommandozeile\n" +"angehängt. %f repräsentiert den Dateinamen." + +msgid "Source code charset:" +msgstr "Zeichensatz des Quellcodes:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Wird nur dann an die Kommandozeile angefügt, wenn der\n" +"Zeichensatz des Quellcodes übergeben wurde. %c repräsentiert den Zeichensatz." + +msgid "Catalog properties" +msgstr "Katalog-Eigenschaften" + +msgid "Project name and version:" +msgstr "Projektname und -version:" + +msgid "Plural Forms:" +msgstr "Pluralformen:" + +msgid "Use default rules for this language" +msgstr "Standard-Regeln für diese Sprache verwenden" + +msgid "Use custom expression" +msgstr "Benutzerdefinierten Ausdruck verwenden" + +msgid "Learn about plural forms" +msgstr "Weitere Informationen zu Pluralformen" + +msgid "Charset:" +msgstr "Zeichensatz:" + +msgid "Team:" +msgstr "Übersetzerteam:" + +msgid "Team's email address:" +msgstr "E-Mail-Adresse des Übersetzerteams:" + +msgid "Translation properties" +msgstr "Übersetzungseinstellungen" + +msgid "Sources paths" +msgstr "Quell-Pfade" + +msgid "Extract text from source files in the following directories:" +msgstr "Text aus Quelldateien in den folgenden Ordnern extrahieren:" + +msgid "Base path:" +msgstr "Ausgangspfad:" + +msgid "Sources keywords" +msgstr "Schlüsselwörter aus Quelltexten" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Diese Schlüsselwörter (Funktionsnamen) benutzen, um übersetzbare\n" +"Zeichenketten in Quelldateien zu erkennen:" + +msgid "Learn about gettext keywords" +msgstr "Weitere Informationen zu gettext-Schlüsselwörtern" + +msgid "Update summary" +msgstr "Zusammenfassung der Aktualisierung" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Diese Zeichenketten wurden in den Quelldateien gefunden, aber nicht im " +"Katalog.\n" +"Poedit wird sie jetzt dem Katalog hinzufügen." + +msgid "New strings" +msgstr "Neue Zeichenketten" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Diese Zeichenketten befinden sich nicht mehr in den Quelldateien.\n" +"Poedit wird sie jetzt aus dem Katalog entfernen." + +msgid "Obsolete strings" +msgstr "Veraltete Zeichenketten" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 neu, 0 veraltet)" + +msgid "Open" +msgstr "Öffnen" + +msgid "Save catalog" +msgstr "Katalog speichern" + +msgid "Validate" +msgstr "Prüfen" + +msgid "Check for errors in the translation" +msgstr "Auf Fehler in der Übersetzung prüfen" + +msgid "Update" +msgstr "Aktualisieren" + +msgid "Update catalog - synchronize it with sources" +msgstr "Katalog aktualisieren – mit Quellen synchronisieren" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "" +"Gesetzt, wenn die ausgewählte Zeichenkette eine unklare Übersetzung enthält" + +msgid "Show or hide the sidebar" +msgstr "Seitenleiste anzeigen oder verbergen" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Bisheriger Quelltext:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Früherer Quelltext (vor der Änderung durch eine Aktualisierung), zu der die " +"unklare Übersetzung gehört." + +msgid "Notes for translators:" +msgstr "Anmerkungen für Übersetzer:" + +msgid "Add comment" +msgstr "Kommentar hinzufügen" + +msgid "Add Comment" +msgstr "Kommentar hinzufügen" + +msgid "Translation suggestions:" +msgstr "Übersetzungsvorschläge:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Keine Treffer gefunden" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Keine Treffer gefunden" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Diese Zeichenkette wurde im Übersetzungsspeicher von Poedit gefunden." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Neu: %i, veraltet: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "%d Übersetzungen werden importiert" + +msgid "Poedit Update" +msgstr "Aktualisierung von Poedit" + +msgid "Preparing migration..." +msgstr "Migration wird vorbereitet …" + +#, c-format +msgid "Migration exit status: %d" +msgstr "Rückgabestatus der Migration: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit muss den Übersetzungsspeicher in ein neues Format umwandeln." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Das muss erledigt werden, bevor Poedit starten kann. Der Vorgang kann je " +"nach Anzahl der Übersetzungen einige Minuten dauern, aber normalerweise geht " +"es schneller." + +msgid "Proceed" +msgstr "Fortsetzen" + +msgid "Translation memory migration failed." +msgstr "Migration des Übersetzungsspeichers fehlgeschlagen." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Ihr Übersetzungsspeicher konnte nicht migriert werden. Der Fehler war:\n" +"\n" +"%s\n" +"Bitte senden Sie eine E-Mail an help@poedit.net, damit wir das Problem " +"beheben können." + +msgid "Cannot create temporary directory." +msgstr "Temporäres Verzeichnis konnte nicht erstellt werden." + +msgid "Welcome to Poedit" +msgstr "Willkommen bei Poedit" + +msgid "Edit a translation" +msgstr "Übersetzung bearbeiten" + +msgid "Open an existing PO file and edit the translation." +msgstr "Existierende PO-Datei öffnen und Übersetzung bearbeiten." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Eine existierende PO-Datei oder POT-Vorlage verwenden und eine neue " +"Übersetzung daraus erstellen." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Arbeiten Sie an einer Übersetzung mit Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Herunterladen einer Datei aus einem Crowdin Projekt, übersetzen und " +"zurücksynchronisieren Ihrer Änderungen." + +msgid "What is Crowdin?" +msgstr "Was ist Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Es gibt keine Übersetzungen. Das ist ungewöhnlich." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Übersetzbare Einträge werden nicht manuell in das Gettext-System " +"hinzugefügt, sondern automatisch aus dem \n" +"Quellcode extrahiert. So bleibt immer alles aktuell und genau.\n" +"Übersetzer verwenden üblicherweise PO-Vorlagen (POTs), welche von " +"Programmierern vorbereitet werden." + +msgid "(Learn more about GNU gettext)" +msgstr "(Mehr über GNU gettext erfahren)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Der einfachste Weg, den Katalog zu aktualisieren, ist aus einer POT-Datei:" + +msgid "Update from POT" +msgstr "Aus POT-Datei aktualisieren" + +msgid "Take translatable strings from an existing POT template." +msgstr "Übersetzbare Zeichenketten aus existierender POT-Vorlage verwenden." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Sie können die zu übersetzenden Zeichenketten auch direkt aus dem Quellcode " +"extrahieren:" + +msgid "Extract from sources" +msgstr "Aus Quellcode extrahieren" + +msgid "Configure source code extraction in Properties." +msgstr "Quellcode-Extrahierung in den Einstellungen konfigurieren." + +msgid "Sync" +msgstr "Sync" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchronisieren der Übersetzung mit Crowdin" diff --git a/locales/el.mo b/locales/el.mo new file mode 100644 index 0000000000000000000000000000000000000000..a530e358f28a92e96615db38385cb0f5bab85cde GIT binary patch literal 45650 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 literal 0 HcmV?d00001 diff --git a/locales/el.po b/locales/el.po new file mode 100644 index 0000000..0514ef3 --- /dev/null +++ b/locales/el.po @@ -0,0 +1,1929 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:04-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Greek\n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: el\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Απόκρυψη του παρόντος μηνύματος επισήμανσης" + +msgid "Don't Show Again" +msgstr "Μην το ξαναδείξεις" + +msgid "Don't show again" +msgstr "Να μην εμφανιστεί ξανά" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i γραμμή του αρχείου '%s', δεν φορτώθηκε σωστά." +msgstr[1] "%i γραμμές του αρχείου '%s' δεν φορτώθηκαν σωστά." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" +"Η γραμμή %d του αρχείου '%s' είναι κατεστραμμένη (τα δεδομένα %s δεν είναι " +"έγκυρα)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Παραμορφωμένη κεφαλίδα: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Κατεστραμμένο αρχείο καταλόγου: ο ενικός msgstr χρησιμοποιείται μαζί με " +"msgid_plural " + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Κατεστραμμένο αρχείο καταλόγου: ο πληθυντικός msgstr χρησιμοποιείται χωρίς " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Υπήρξαν λάθη κατά το φόρτωμα του καταλόγου. Κατά συνέπεια κάποια δεδομένα " +"μπορεί να λείπουν ή να είναι αλλοιωμένα." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Σφάλμα στη φόρτωση του φακέλου '%s'. Είναι, μάλλον, αλλοιωμένος." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Το αρχείο '%s' είναι μόνο για ανάγνωση και δεν μπορεί να αποθηκευθεί.\n" +"Παρακαλώ αποθήκευσέ το με διαφορετικό όνομα." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Αδυναμία αποθήκευσης του αρχείου %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Υπήρξε ένα πρόβλημα στην καλή μορφοποίηση του αρχείου (αλλά, κατά τα άλλα, " +"αποθηκεύθηκε εντάξει)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Ο κατάλογος δεν μπορούσε να αποθηκευτεί με χαρακτήρες '%s', \n" +"όπως προσδιορίστηκε στις ρυθμίσεις του καταλόγου. \n" +"\n" +"Αντ' αυτού, αποθηκεύτηκε σε ΓιουΤιΕφ-8 (UTF-8)\n" +"και η ρύθμιση τροποποιήθηκε αναλόγως." + +msgid "Error saving catalog" +msgstr "Σφάλμα αποθήκευσης καταλόγου" + +msgid "PO Translation Files" +msgstr "Αρχεία μετάφρασης PO" + +msgid "POT Translation Templates" +msgstr "Πρότυπα μετάφρασης POT" + +msgid "All Translation Files" +msgstr "Όλα τα αρχεία μετάφρασης" + +msgid "Merging differences..." +msgstr "Συνένωση διαφορών..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' δεν είναι έγκυρο αρχείο POT." + +msgid "(Use default language)" +msgstr "(Χρήση εξ ορισμού γλώσσας)" + +msgid "Select your preferred language" +msgstr "Επιλογή της γλώσσας προτίμησης" + +msgid "Language selection" +msgstr "Επιλογή Γλώσσας" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" +"Πρέπει να γίνει επανεκκίνηση του Poedit, ώστε αυτή η αλλαγή να έχει επίδραση." + +msgid "Downloading translations is disabled in this project." +msgstr "Η λήψη μεταφράσεων είναι απενεργοποιημένη για αυτό το έργο." + +msgid "Not authorized, please sign in again." +msgstr "Δεν επιτρέπεται, Παρακαλούμε συνδεθείτε ξανά." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Το Crodwin είναι μία online πλατφόρμα τοπκοποίησης και ένα συνεργατικό " +"εργαλείο μεταφράσεων. Το Poedit μπορεί να συγχρονίσει αρχεία PO που " +"βρίσκονται στο Crodwin με ευκολία." + +msgid "Sign In" +msgstr "Σύνδεση" + +msgid "Sign in" +msgstr "Σύνδεση" + +msgid "Sign Out" +msgstr "Αποσύνδεση" + +msgid "Sign out" +msgstr "Αποσύνδεση" + +msgid "Waiting for authentication…" +msgstr "Αναμονή για έλεγχο ταυτότητας…" + +msgid "Updating user information…" +msgstr "Ενημέρωση των πληροφοριών χρήστη…" + +msgid "Signed in as:" +msgstr "Συνδεδεμένος ως:" + +msgid "Learn More About Crowdin" +msgstr "Μάθετε περισσότερα σχετικά με το Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Μάθετε περισσότερα σχετικά με το Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Συνδεθείτε στο Crowdin" + +msgid "Open Crowdin translation" +msgstr "Ανοικτή μετάφραση Crowdin" + +msgid "Project:" +msgstr "Εργασία:" + +msgid "Language:" +msgstr "Γλώσσα:" + +msgid "File:" +msgstr "Αρχείο:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "Γίνεται λήψη των τελευταίων μεταφράσεων…" + +msgid "Syncing with Crowdin" +msgstr "Συγχρονισμός με το Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Ο συγχρονισμός με το Crowdin απέτυχε." + +msgid "Crowdin error" +msgstr "Σφάλμα του Crodwin" + +msgid "Uploading translations…" +msgstr "Μεταφόρτωση μεταφράσεων…" + +msgid "&Copy" +msgstr "&Αντιγραφή" + +msgid "Learn more" +msgstr "Περισσότερες πληροφορίες" + +msgid "Learn More" +msgstr "Μάθετε Περισσότερα" + +#, c-format +msgid "Failed command: %s" +msgstr "Αποτυχία τη εντολής: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Αποτυχία στη συγχώνευση των καταλόγων gettext." + +msgid "Scanning files..." +msgstr "Σάρωση αρχείων..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Ανάλυση %s αρχείων..." + +msgid "Failed to load extracted catalog." +msgstr "Αποτυχία στη φόρτωση του εξαγόμενου κατάλογου." + +msgid "&Help" +msgstr "&Βοήθεια" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "Σφάλμα κατά το άνοιγμα του αρχείου" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "χωρίς διαγραφή των προσωρινών αρχείων (για αποσφαλμάτωση)" + +msgid "handle a poedit:// URI" +msgstr "Χειρίσου ένα poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Παρουσιάστηκε ανεπίλυτη εξαίρεση: %s" + +msgid "Unhandled exception occurred." +msgstr "Παρουσιάστηκε ανεπίλυτη εξαίρεση." + +msgid "Open catalog" +msgstr "Άνοιγμα καταλόγου" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Το αρχείο '%s' δεν υπάρχει." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Περί του %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Έκδοση %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Το Poedit είναι ένας εύκολος στη χρήση επεξεργαστής μεταφράσεων." + +msgid "Catalogs Manager" +msgstr "Διαχειριστής Καταλόγων" + +msgid "Check for Updates..." +msgstr "Έλεγχος για Ενημερώσεις..." + +msgid "&Edit" +msgstr "&Επεξεργασία" + +msgid "Undo" +msgstr "Αναίρεση" + +msgid "Redo" +msgstr "Επαναφορά" + +msgid "Paste and Match Style" +msgstr "Επικόλληση και Ταίριασμα Τεχνοτροπίας" + +msgid "Delete" +msgstr "Διαγραφή" + +msgid "Spelling and Grammar" +msgstr "Ορθογραφία και Γραμματική" + +msgid "Show Spelling and Grammar" +msgstr "Εμφάνιση Ορθογραφίας και Γραμματικής" + +msgid "Check Document Now" +msgstr "Έλεγχος του Εγγράφου, Τώρα" + +msgid "Check Spelling While Typing" +msgstr "Έλεγχος της Ορθογραφίας Κατά την Πληκτρολόγηση" + +msgid "Check Grammar With Spelling" +msgstr "Έλεγχος της Γραμματικής με Ορθογραφία" + +msgid "Correct Spelling Automatically" +msgstr "Αυτόματη Επιδιόρθωση της Ορθογραφίας" + +msgid "Substitutions" +msgstr "Αντικαταστάσεις" + +msgid "Show Substitutions" +msgstr "Εμφάνιση των Αντικαταστάσεων" + +msgid "Smart Copy/Paste" +msgstr "Έξυπνη Αντιγραφή/Επικόλληση" + +msgid "Smart Quotes" +msgstr "Έξυπνα Εισαγωγικά" + +msgid "Smart Dashes" +msgstr "Έξυπνες Παύλες" + +msgid "Smart Links" +msgstr "Έξυπνοι Δεσμοί" + +msgid "Text Replacement" +msgstr "Αντικατάσταση Κειμένου" + +msgid "Transformations" +msgstr "Μετασχηματισμοί" + +msgid "Make Upper Case" +msgstr "Μετατροπή σε Κεφαλαία" + +msgid "Make Lower Case" +msgstr "Μετατροπή σε Πεζά" + +msgid "Capitalize" +msgstr "Το πρώτο γράμμα κεφαλαίο" + +msgid "Speech" +msgstr "Ομιλία" + +msgid "Start Speaking" +msgstr "Αρχίνισμα της Ομιλίας" + +msgid "Stop Speaking" +msgstr "Σταμάτημα της Ομιλίας" + +msgid "&View" +msgstr "&Προβολή" + +msgid "Enter Full Screen" +msgstr "Πλήρης οθόνη" + +msgid "Window" +msgstr "Παράθυρο" + +msgid "Minimize" +msgstr "Ελαχιστοποίηση" + +msgid "Zoom" +msgstr "Μεγέθυνση" + +msgid "Bring All to Front" +msgstr "Φέρτε όλα προς τα εμπρός" + +msgid "PO Translation" +msgstr "Μετάφραση PO" + +msgid "The file cannot be opened." +msgstr "Το αρχείο δεν μπορεί να να ανοιχτεί." + +msgid "Invalid file" +msgstr "Μη έγκυρο αρχείο" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Το αρχείο μπορεί είτε να είναι φθαρμένο, ή να είναι σε μία μορφή, την οποία " +"δεν αναγνωρίζει το Ποέντιτ. " + +msgid "&Undo" +msgstr "&Αναίρεση" + +msgid "&Redo" +msgstr "Επαναφο&ρά" + +msgid "Cu&t" +msgstr "Απο&κοπή" + +msgid "Cut" +msgstr "Αποκοπή" + +msgid "Copy" +msgstr "Αντιγραφή" + +msgid "&Paste" +msgstr "&Επικόλληση" + +msgid "Paste" +msgstr "Επικόλληση" + +msgid "&Delete" +msgstr "&Διαγραφή" + +msgid "Select &All" +msgstr "Επιλογή Ό&λων" + +msgid "Select All" +msgstr "Επιλογή όλων" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Πάνω" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Κάτω" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" +"Δε μπορείτε να σύρετε περισσότερα από ένα αρχείο πάνω σε ένα παράθυρο Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Το αρχείο '%s' δεν είναι κατάλογος μηνυμάτων." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Αρχείο" + +msgid "&Go" +msgstr "&Μετάβαση" + +msgid "Source text:" +msgstr "Πηγαίο κείμενο:" + +msgid "Singular:" +msgstr "Ενικός:" + +msgid "Plural:" +msgstr "Πληθυντικός:" + +msgid "Translation:" +msgstr "Μετάφραση:" + +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 είναι μόνο πρότυπα και δεν περιέχουν μεταφράσεις. \n" +"Για να κάνετε μια μετάφραση, δημιουργήστε ένα νέο αρχείο PO που βασίζεται " +"στο πρότυπο." + +msgid "Create New Translation" +msgstr "Δημιουργία νέας μετάφρασης" + +msgid "Create new translation" +msgstr "Δημιουργία νέας μετάφρασης" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Ο ορθογραφικός έλεγχος είναι απενεργοποιημένος, επειδή το λεξικό για %s δεν " +"είναι εγκατεστημένο." + +msgid "Install" +msgstr "Εγκατάσταση" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Ο κατάλογος τροποποιήθηκε. Θέλετε να γίνει αποθήκευση των αλλαγών;" + +msgid "Save changes" +msgstr "Αποθήκευση αλλαγών" + +msgid "Your changes will be lost if you don't save them." +msgstr "Οι αλλαγές που έχεις κάνει θα χαθούν, εάν δεν τις αποθηκεύσεις." + +msgid "Save" +msgstr "Αποθήκευση" + +msgid "Don't save" +msgstr "Να μην αποθηκευθεί" + +msgid "Don't Save" +msgstr "Να μην Αποθηκευθεί" + +msgid "Save as..." +msgstr "Αποθήκευση ως..." + +msgid "Compile to..." +msgstr "Μεταγλώττιση σε..." + +msgid "Compiled Translation Files" +msgstr "Μεταγλωττισμένα αρχεία μετάφρασης" + +msgid "Export as..." +msgstr "Εξαγωγή ως..." + +msgid "HTML Files" +msgstr "Αρχεία HTML" + +msgid "Open catalog template" +msgstr "Άνοιγμα προτύπου καταλόγου" + +msgid "Updating catalog" +msgstr "Ενημερώνεται ο κατάλογος" + +msgid "Source code not available." +msgstr "Ο πηγαίος κώδικας δεν είναι διαθέσιμος." + +msgid "Updating failed" +msgstr "Η ενημέρωση απέτυχε" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Οι καταχωρήσεις στον κατάλογο είναι μάλλον λανθασμένες." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Η ενημέρωση του καταλόγου απέτυχε. \n" +"Για περισσότερες πληροφορίες, κλίκαρε στο 'Λεπτομέρειες >>' ." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Βρέθηκε %d ζήτημα στην μετάφραση." +msgstr[1] "Βρέθηκαν %d ζητήματα στην μετάφραση." + +msgid "Validation results" +msgstr "Αποτέλεσμα επικύρωσης" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Οι θέσεις με σφάλματα έχουν επισημανθεί με κόκκινο στην λίστα. Οι " +"λεπτομέρειες του σφάλματος θα εμφανιστούν, όταν επιλέξεις τη συγκεκριμένη " +"θέση." + +msgid "The file was saved safely." +msgstr "Το αρχείο αποθηκεύθηκε με ασφάλεια." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Το αρχείο σώθηκε με ασφάλεια και μεταγλωττίστηκε σε μορφή MO, αλλά κατά πάσα " +"πιθανότητα δεν θα λειτουργήσει σωστά." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Το αρχείο αποθηκεύθηκε επιτυχώς, όμως δεν μπορεί να γίνει σύνθεση του " +"αρχείου σε μορφή MO, ώστε, μετά, να χρησιμοποιηθεί." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Το αρχείο μεταγλωττίστηκε σε μορφή MO, αλλά κατά πάσα πιθανότητα δεν θα " +"λειτουργήσει σωστά." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "Δεν βρέθηκε κανένα πρόβλημα στην μετάφραση." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "Η μετάφραση είναι έτοιμη προς χρήση." + +msgid "Context:" +msgstr "Περιεχόμενα:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "δεν έχει οριστεί η γλώσσα της μετάφρασης." + +msgid "Set Language" +msgstr "Ορισμός γλώσσας" + +msgid "Set language" +msgstr "Ορισμός γλώσσας" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "Επιδιόρθωση γλώσσας" + +msgid "Fix language" +msgstr "Επιδιόρθωση γλώσσας" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Αυτός ο κατάλογος έχει θέσεις με μορφές πληθυντικού, όμως δεν είναι " +"ρυθμισμένη η «Plural-Forms» κεφαλίδα του." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Οι θέσεις, σε αυτό τον Κατάλογο Μετάφρασης, έχουν διαφορετικό πλήθος μορφών " +"πληθυντικού, από όσες αναφέρει η κεφαλίδα «Plural-Forms» του καταλόγου." + +msgid "Required header Plural-Forms is missing." +msgstr "Λείπει η απαιτούμενη κεφαλίδα «Plural-Forms»." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Σφάλμα σύνταξης στην κεφαλίδα «Plural-Forms» (\"%s\")." + +msgid "Fix the Header" +msgstr "Επιδιόρθωση της κεφαλίδας" + +msgid "Fix the header" +msgstr "Επιδιόρθωση της κεφαλίδας" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Οι μορφές πληθυντικού, οι οποίες χρησιμοποιούνται για τον κατάλογο, είναι " +"ασυνήθιστες για το %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Επισκόπηση" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Σφάλμα στη φόρτωση του αρχείου καταλόγου μηνυμάτων '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Μεταφράστηκαν %d από %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Απομένουν: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "Σφάλμα %d" +msgstr[1] "Σφάλματα %d" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d είσοδος" +msgstr[1] "%d είσοδοι" + +msgid " (unsaved)" +msgstr " (μη αποθηκευμένο)" + +msgid " (modified)" +msgstr " (τροποποιήθηκε)" + +msgid "Go" +msgstr "Μετάβαση" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Αδυναμία ενημέρωσης της μεταφραστικής μνήμης: %s" + +msgid "Purge deleted translations" +msgstr "Ε&κκαθάριση διαγραμμένων μεταφράσεων" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Θα ήθελες να αφαιρεθούν όλες οι μεταφράσεις, οι οποίες έπαψαν να " +"χρησιμοποιούνται;" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Αν συνεχίσεις με την εκκαθάριση, θα απομακρυνθούν όλες τις μεταφράσεις οι " +"οποίες έχουν επισημανθεί ως διαγραμμένες.\n" +"Θα πρέπει να ξανακάνεις τις μεταφράσεις, από την αρχή, αν προστεθούν ξανά " +"στο μέλλον." + +msgid "Keep" +msgstr "Διατήρηση" + +msgid "Purge" +msgstr "Εκκαθάριση" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "Συμπλήρωση" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "Μετάφραση" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Μεταφράστηκε %u συμβολοσειρά" +msgstr[1] "Μεταφράστηκαν %u συμβολοσειρές" + +msgid "Copy from source text" +msgstr "Αντιγραφή από το πηγαίο κείμενο" + +msgid "Copy from Source Text" +msgstr "Αντιγραφή από το Πηγαίο Κείμενο" + +msgid "Clear translation" +msgstr "Εκκαθάριση της μετάφρασης" + +msgid "Clear Translation" +msgstr "Εκκαθάριση της Μετάφρασης" + +msgid "Edit comment" +msgstr "Επεξεργασία σχολίου" + +msgid "Edit Comment" +msgstr "Επεξεργασία των Σχολίων" + +msgid "References:" +msgstr "Αναφορές:" + +msgid "Everything" +msgstr "Τα πάντα" + +#, c-format +msgid "Form %i" +msgstr "Μορφή %i" + +msgid "Singular" +msgstr "Ενικός" + +msgid "Zero" +msgstr "Μηδέν" + +msgid "One" +msgstr "Ένα" + +msgid "Two" +msgstr "Δύο" + +msgid "Plural" +msgstr "Πληθυντικός" + +msgid "Other" +msgstr "Άλλο" + +msgid "&Bookmarks" +msgstr "&Σελιδοδείκτες" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "Πηγαίο κείμενο" + +msgid "Translation" +msgstr "Μετάφραση" + +msgid "ID" +msgstr "Ταυτότητα" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "άγνωστη γλώσσα" + +#, c-format +msgid "Translation — %s" +msgstr "Μετάφραση — %s" + +msgid "Error:" +msgstr "Σφάλμα:" + +msgid "Source file" +msgstr "Αρχείο πηγαίου κώδικα" + +msgid "Source file occurrence:" +msgstr "Συνύπαρξη πηγαίου αρχείου:" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Σφάλμα ανοίγματος αρχείου %s!" + +msgid "Find" +msgstr "Εύρεση" + +msgid "Replace" +msgstr "Αντικατάσταση" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Επιλογές" + +msgid "Ignore case" +msgstr "Αγνόηση κεφαλαιοποίησης" + +msgid "Wrap around" +msgstr "Ξεκίνα από την αρχή" + +msgid "Whole words only" +msgstr "Πλήρης λέξεις μόνο" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "Ανεύρεση στα σχόλια" + +msgid "Close" +msgstr "Κλείσιμο" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "< &Προηγούμενο" + +msgid "&Next >" +msgstr "&Επόμενο >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Αδυναμία εκτέλεσης του προγράμματος: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Κωδικός ή Όνομα της γλώσσας (πχ, en_GB)" + +msgid "Translation Language" +msgstr "Γλώσσα Μετάφρασης" + +msgid "Language of the translation:" +msgstr "Γλώσσα της μετάφρασης:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Διαχειριστής καταλόγων" + +msgid "Catalog" +msgstr "Κατάλογος" + +msgid "Total" +msgstr "Συνολικά" + +msgid "Untrans" +msgstr "Μη μεταφρασμένο" + +msgid "Fuzzy" +msgstr "Ασαφές" + +msgid "Bad Tokens" +msgstr "Άσχημα Κουπόνια" + +msgid "Last modified" +msgstr "Τελευταία τροποποίηση" + +msgid "Select directory" +msgstr "Επιλογή φακέλου" + +msgid "Directories:" +msgstr "Φάκελοι αρχείων:" + +msgid "" +msgstr "<δίχως όνομα>" + +msgid "Do you want to delete the project?" +msgstr "Επιθυμείς να διαγράψεις την εργασία;" + +msgid "Confirmation" +msgstr "Επιβεβαίωση" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Θέλεις πραγματικά να κάνεις μαζική ενημέρωση\n" +"σε όλους τους καταλόγους αυτής της εργασίας;" + +msgid "Information about the translator" +msgstr "Πληροφορίες σχετικά με το μεταφραστή" + +msgid "Name:" +msgstr "Όνομα:" + +msgid "Your Name" +msgstr "Το Όνομά σας" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "Επεξεργασία" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "Εμφάνιση περίληψης μετά την ενημέρωση του καταλόγου" + +msgid "Check spelling" +msgstr "Έλεγχος ορθογραφίας" + +msgid "Always change focus to text input field" +msgstr "Πάντα αλλαγή εστίασης στο πεδίο εισόδου κειμένου" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ποτέ μην αφήνετε τη λίστα των στίχων να εστιαστεί. Αν ενεργοποιηθεί, πρέπει " +"να χρησιμοποιήσετε το Ctrl-βελάκια για πλοήγηση μέσω πληκτρολογίου, αλλά " +"μπορείτε επίσης να πληκτρολογήσετε κείμενο αμέσως, χωρίς να χρειαστεί να " +"πατήσετε το πλήκτρο Tab για αλλαγή εστίασης." + +msgid "Appearance" +msgstr "Εμφάνιση" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "Επιλογή γλώσσας UI" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(απαιτείται Windows 8 ή νεότερο)" + +msgid "General" +msgstr "Γενικές ρυθμίσεις" + +msgid "Use translation memory" +msgstr "Χρήση της μεταφραστικής μνήμης" + +msgid "Learn From Files..." +msgstr "Εκμάθηση από Αρχεία..." + +msgid "Learn from files..." +msgstr "Εκμάθηση από τα αρχεία..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "Να συμβουλεύεται την Μετ.Μνήμη όταν γίνεται ενημέρωση από πηγές" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "Αποθηκευμένες μεταφράσεις:" + +msgid "Database size on disk:" +msgstr "Το μέγεθος της βάσης δεδομένων στο δίσκο:" + +msgid "Select translation files to import" +msgstr "Επέλεξε τα αρχεία μετάφρασης προς εισαγωγή" + +msgid "Translation Memory" +msgstr "Μεταφραστική Μνήμη" + +msgid "Importing translations..." +msgstr "Εισάγονται οι μεταφράσεις..." + +msgid "Finalizing..." +msgstr "Τελικοποίηση..." + +msgid "Reset translation memory" +msgstr "Επαναφορά μεταφραστικής μνήμης" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Ακύρωση" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Νέο" + +msgid "Edit" +msgstr "Επεξεργασία" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "Περιλαμβανομένων των δοκιμαστικών εκδόσεων" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "UNIX (προτείνεται)" + +msgid "Windows" +msgstr "Microsoft Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "Για προχωρημένους" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "Προσθέσετε φακέλους..." + +msgid "Add folders..." +msgstr "Προσθέσετε φακέλους..." + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Διαδρομές" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "Επιπρόσθετες λέξεις-κλειδιά" + +msgid "Name of the project the translation is for" +msgstr "Το όνομα της εργασίας για την οποία είναι η μετάφραση" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "παράδειγμα nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (προτείνεται)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Παρακαλώ αποθήκευσε αυτό το αρχείο, πρώτα, ώστε να μπορεί να γίνει, μετά, " +"επεξεργασία αυτού του τμήματος." + +msgid "Comment:" +msgstr "Σχόλιο:" + +msgid "OK" +msgstr "Εντάξει" + +msgid "C&lear" +msgstr "&Καθαρισμός" + +msgid "Clear the comment" +msgstr "Καθαρισμός σχολίου" + +msgid "Create new translations project" +msgstr "Δημιουργία νέας εργασίας μετάφρασης" + +msgid "Edit the project" +msgstr "Επεξεργασία εργασίας" + +msgid "Delete the project" +msgstr "Διαγραφή εργασίας" + +msgid "Update all" +msgstr "Ενημέρωση όλων" + +msgid "Update all catalogs in the project" +msgstr "Ενημέρωση όλων των καταλόγων στην εργασία" + +msgid "Edit project" +msgstr "Επεξεργασία εργασίας" + +msgid "Project name:" +msgstr "Όνομα εργασίας:" + +msgid "Browse" +msgstr "Εξερεύνηση" + +msgid "Add directory to the list" +msgstr "Προσθήκη φακέλου στη λίστα" + +msgid "&New..." +msgstr "&Νέο..." + +msgid "New from &POT/PO file..." +msgstr "Νέος από αρχείο &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Νέος από Αρχείο &POT/PO..." + +msgid "&Open..." +msgstr "&Άνοιγμα..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&Κλείσιμο" + +msgid "&Save" +msgstr "&Αποθήκευση" + +msgid "Save &as..." +msgstr "Αποθήκευση &ως..." + +msgid "Save &As..." +msgstr "Αποθήκευση &Ως..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "Ε&ξαγωγή ως HTML..." + +msgid "Check for updates..." +msgstr "Έλεγχος ενημερώσεων..." + +msgid "&Preferences..." +msgstr "&Προτιμήσεις..." + +msgid "Catalogs &manager" +msgstr "&Διαχειριστής Καταλόγων" + +msgid "Catalogs &Manager" +msgstr "&Διαχειριστής Καταλόγων" + +msgid "E&xit" +msgstr "Έ&ξοδος" + +msgid "Quit" +msgstr "Τερματισμός" + +msgid "Copy from singular" +msgstr "Αντιγραφή από ενικό" + +msgid "Copy From Singular" +msgstr "Αντιγραφή από ενικό" + +msgid "Translation is &fuzzy" +msgstr "Η μετάφραση είναι &ασαφής" + +msgid "Translation Is &Fuzzy" +msgstr "Η Μετάφραση είναι &Ασαφής" + +msgid "Edit &comment" +msgstr "Επεξεργασία &σχολίου" + +msgid "Edit &Comment" +msgstr "Επεξεργασία των Σ&χολίων" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&Εμφάνιση αναφορών" + +msgid "&Show References" +msgstr "&Εμφάνιση των Αναφορών" + +msgid "&Find..." +msgstr "&Εύρεση..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "Εύρεση επόμενου" + +msgid "Find previous" +msgstr "Εύρεση προηγούμενου" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "Εύρεση Επόμενου" + +msgid "Find Previous" +msgstr "Εύρεση Προηγούμενου" + +msgid "&Preferences" +msgstr "&Προτιμήσεις" + +msgid "Display entry &IDs" +msgstr "Προβολή της ταυτότητας του ειση&γμένου" + +msgid "Display Entry &IDs" +msgstr "Προβολή της Ταυτότητας του Ειση&γμένου" + +msgid "Sort by &file order" +msgstr "Ταξινόμηση κατά τη σειρά των &σρχείων" + +msgid "Sort by &File Order" +msgstr "Ταξινόμηση κατά τη Σειρά των &Αρχείων" + +msgid "Sort by &source" +msgstr "Ταξινόμηση κατά τη &πηγή" + +msgid "Sort by &Source" +msgstr "Ταξινόμηση κατά τη &Πηγή" + +msgid "Sort by &translation" +msgstr "Ταξινόμηση κατά τη &μετάφραση" + +msgid "Sort by &Translation" +msgstr "Ταξινόμηση κατά τη &Μετάφραση" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "Καταχωρήσεις με σφάλματα πρώτες" + +msgid "Entries with Errors First" +msgstr "Καταχωρήσεις με σφάλματα πρώτες" + +msgid "&Untranslated entries first" +msgstr "Πρώτα οι &αμετάφραστες καταχωρήσεις" + +msgid "&Untranslated Entries First" +msgstr "Πρώτα οι &Αμετάφραστες Καταχωρήσεις" + +msgid "Show sidebar" +msgstr "Εμφάνιση πλευρικής μπάρας" + +msgid "Show status bar" +msgstr "Εμφάνιση γραμμής κατάστασης" + +msgid "C&atalog" +msgstr "Κ&ατάλογος" + +msgid "&Update from sources" +msgstr "&Ενημέρωση από τις πηγές" + +msgid "&Update from Sources" +msgstr "&Ενημέρωση από τις Πηγές" + +msgid "Update from &POT file..." +msgstr "Ενημέρωση από το αρχείο &POT..." + +msgid "Update from &POT File..." +msgstr "Ενημέρωση από το Αρχείο &POT..." + +msgid "Sync with Crowdin" +msgstr "Συγχρονισμός με Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "Ε&κκαθάριση των διαγραμμένων μεταφράσεων" + +msgid "&Purge Deleted Translations" +msgstr "Ε&κκαθάριση των Διαγραμμένων Μεταφράσεων" + +msgid "&Validate translations" +msgstr "Επι&κύρωση των μεταφράσεων" + +msgid "&Validate Translations" +msgstr "Επι&κύρωση των Μεταφράσεων" + +msgid "&Properties..." +msgstr "&Ιδιότητες..." + +msgid "&Done and next" +msgstr "Έ&γκριση και μετάβαση στο επόμενο" + +msgid "&Done and Next" +msgstr "Έ&γκριση και Μετάβαση στο Επόμενο" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "&Προηγούμενο ατελές" + +msgid "P&revious Unfinished" +msgstr "&Προηγούμενο Ατελές" + +msgid "Ne&xt unfinished" +msgstr "&Επόμενο ατελές" + +msgid "Ne&xt Unfinished" +msgstr "&Επόμενο Ατελές" + +msgid "Previous plural form" +msgstr "Προηγούμενη μορφή πληθυντικού" + +msgid "Previous Plural Form" +msgstr "Προηγούμενη μορφή πληθυντικού" + +msgid "Next plural form" +msgstr "Επόμενη μορφή πληθυντικού" + +msgid "Next Plural Form" +msgstr "Επόμενη μορφή πληθυντικού" + +msgid "&Online help" +msgstr "&Διαδικτυακή βοήθεια" + +msgid "&Online Help" +msgstr "&Διαδικτυακή Βοήθεια" + +msgid "&GNU gettext manual" +msgstr "Οδηγίες χρήσης του &ΤζιΕνΓιού γκέττεξτ" + +msgid "&GNU gettext Manual" +msgstr "Οδηγίες Χρήσης του &ΤζιΕνΓιού γκέττεξτ (GNU gettext)" + +msgid "&About Poedit" +msgstr "Σχετικά με το Ποέντιτ" + +msgid "&About" +msgstr "&Περί" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Η λίστα των επεκτάσεων χωρίζεται από άνω τελείες (πχ *.cpp · *.h):" + +msgid "Invocation:" +msgstr "Κλήση:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Ένα αντικείμενο στη λίστα των λέξεων κλειδιών:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Αυτό θα προσαρτηθεί στη γραμμή εντολών μία φορά\n" +"για κάθε λέξη κλειδί. Το %k αναπτύσσει τη λέξη κλειδί." + +msgid "An item in input files list:" +msgstr "Ένα αντικείμενο στη λίστα των αρχείων εισαγωγής:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Αυτό θα προσαρτηθεί στη γραμμή εντολών μία φορά\n" +"για κάθε αρχείο εισόδου. Το %f αναπτύσσει το όνομα αρχείου." + +msgid "Source code charset:" +msgstr "Σύνολο χαρακτήρων πηγαίου κώδικα:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Αυτό θα προσαρτηθεί στη γραμμή εντολών μόνο αν δοθεί\n" +"το σύνολο χαρακτήρων πηγαίου κώδικα. Το %c αναπτύσσει την τιμή του συνόλου " +"χαρακτήρων." + +msgid "Catalog properties" +msgstr "Ιδιότητες καταλόγου" + +msgid "Project name and version:" +msgstr "Όνομα εργασίας και έκδοση:" + +msgid "Plural Forms:" +msgstr "Μορφές Πληθυντικού:" + +msgid "Use default rules for this language" +msgstr "Χρήση των προκαθορισμένων κανόνων για αυτή τη γλώσσα" + +msgid "Use custom expression" +msgstr "Χρήση προσαρμοσμένων εκφράσεων" + +msgid "Learn about plural forms" +msgstr "Πληροφορίες για τις Μορφές Πληθυντικού" + +msgid "Charset:" +msgstr "Σύνολο Χαρακτήρων:" + +msgid "Team:" +msgstr "Ομάδα:" + +msgid "Team's email address:" +msgstr "Ηλεκτρονική διεύθυνση ομάδας:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "Διαδρομές των πηγών" + +msgid "Extract text from source files in the following directories:" +msgstr "Εξαγωγή του κειμένου από τα πηγαία αρχεία στους ακόλουθους φακέλους:" + +msgid "Base path:" +msgstr "Διαδρομή βάσης:" + +msgid "Sources keywords" +msgstr "Λέξεις-κλειδιά των πηγών" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Χρήση αυτών των λέξεων κλειδιών (ονόματα συναρτήσεων) προς αναγνώριση " +"μεταφράσιμων στίχων\n" +"στα πηγαία αρχεία:" + +msgid "Learn about gettext keywords" +msgstr "Εκμάθηση από λέξεις-κλειδιά του γκέττεξτ" + +msgid "Update summary" +msgstr "Περίληψη ενημέρωσης" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Αυτοί οι στίχοι βρέθηκαν στα πηγαία αρχεία αλλά δεν ήταν στον κατάλογο.\n" +"Το Poedit θα τους προσθέσει στον κατάλογο τώρα." + +msgid "New strings" +msgstr "Νέοι στίχοι" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Αυτοί οι στίχοι δεν υπάρχουν πλέον στα πηγαία αρχεία.\n" +"Το Poedit θα τους αφαιρέσει τώρα από τον κατάλογο." + +msgid "Obsolete strings" +msgstr "Στίχοι εκτός χρήσης" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 νέο, 0 εκτός χρήσης)" + +msgid "Open" +msgstr "Άνοιγμα" + +msgid "Save catalog" +msgstr "Αποθήκευση καταλόγου" + +msgid "Validate" +msgstr "Επικύρωση" + +msgid "Check for errors in the translation" +msgstr "Έλεγχος λαθών στη μετάφραση" + +msgid "Update" +msgstr "Ενημέρωση" + +msgid "Update catalog - synchronize it with sources" +msgstr "Ενημέρωση καταλόγου - συγχρονισμός με τον πηγαίο κώδικα" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Ενεργοποιημένο αν ο επιλεγμένος στίχος έχει ασαφή μετάφραση" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Σημειώσεις για τους Μεταφραστές:" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "Εισάγονται οι μεταφράσεις: %d" + +msgid "Poedit Update" +msgstr "Ενημέρωση του Ποέντιτ" + +msgid "Preparing migration..." +msgstr "Προετοιμασία της μετανάστευσης..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Πρέπει το Ποέντιτ να μετατρέψει την μεταφραστική μνήμη σε μια νέα μορφή." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Αυτό πρέπει να γίνει πριν ξεκινήσει το Ποέντιτ. \n" +"Ίσως να χρειαστούν μερικά λεπτά, αν έχεις αποθηκευμένες πολλές " +"μεταφράσεις. \n" +"Συνήθως, όμως, διαρκεί αρκετά λιγότερο." + +msgid "Proceed" +msgstr "Συνέχιση" + +msgid "Translation memory migration failed." +msgstr "Αποτυχία μετανάστευσης της μεταφραστικής μνήμης." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "Αδυναμία δημιουργίας του φακέλου των προσωρινών αρχείων." + +msgid "Welcome to Poedit" +msgstr "Καλώς ήρθες στο Ποέντιτ" + +msgid "Edit a translation" +msgstr "Επεξεργασία μιας μετάφρασης" + +msgid "Open an existing PO file and edit the translation." +msgstr "Άνοιγμα ενός υπάρχοντος αρχείου .PO, και επεξεργασία της μετάφρασης. " + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Χρησιμοποίησε ένα υπάρχον αρχείο .PO, ή ένα πρότυπο .POT, και δημιούργησε " +"μία νέα μετάφραση." + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "Δεν υπάρχουν μεταφράσεις. Αυτό είναι ασυνήθιστο." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Οι μεταφράσιμοι στίχοι δεν προσθέτονται αυτόματα στο σύστημα του Γκέττεξτ,\n" +"αλλά εξάγονται αυτόματα, από τον πηγαίο κώδικα.\n" +"Έτσι είναι, πάντα, της τελευταίας έκδοσης και ακριβείς.\n" +"Οι μεταφραστές, συνήθως, χρησιμοποιούν πρότυπα αρχεία PO (.POTs),\n" +"τα οποία έχουν προετοιμάσει για αυτούς οι προγραμματιστές." + +msgid "(Learn more about GNU gettext)" +msgstr "(Μάθε περισσότερα για το ΤζιΕνΓιού γκέττεξτ)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Ο πιο απλός τρόπος για να γεμίσεις αυτό τον κατάλογο, είναι να κάνεις " +"ενημέρωση από ένα αρχείο .POT:" + +msgid "Update from POT" +msgstr "Ενημέρωση από το αρχείο POΤ" + +msgid "Take translatable strings from an existing POT template." +msgstr "Πάρε μεταφράσιμους στίχους από ένα υπάρχον πρότυπο .POT." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Μπορείς, επίσης να εξάγεις μεταφράσιμους στίχους, κατευθείαν από τον πηγαίο " +"κώδικα:" + +msgid "Extract from sources" +msgstr "Εξαγωγή από τις πηγές" + +msgid "Configure source code extraction in Properties." +msgstr "Ρύθμισε την εξαγωγή του πηγαίου κώδικα στις Ιδιότητες." + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/en_GB.mo b/locales/en_GB.mo new file mode 100644 index 0000000000000000000000000000000000000000..f2577ecc40b4943118841224d46715b8d817447b GIT binary patch literal 43394 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\n" +"Language-Team: English, United Kingdom\n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: en-GB\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Hide this notification message" + +msgid "Don't Show Again" +msgstr "Don't Show Again" + +msgid "Don't show again" +msgstr "Don't show again" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i line of file '%s' was not loaded correctly." +msgstr[1] "%i line of file '%s' was not loaded correctly." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Line %d of file '%s' is corrupted (not valid %s data)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Malformed header: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Broken catalogue file: singular form msgstr used together with msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Broken catalogue file: plural form msgstr used without msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"There were errors when loading the catalogue. Some data may be missing or " +"corrupted as the result." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Couldn't load file %s, it is probably corrupted." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Couldn't save file %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"There was a problem formatting the file nicely (but it was saved all right)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"The catalogue couldn't be saved in '%s' charset as specified in catalogue " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." + +msgid "Error saving catalog" +msgstr "Error saving catalogue" + +msgid "PO Translation Files" +msgstr "PO Translation Files" + +msgid "POT Translation Templates" +msgstr "POT Translation Templates" + +msgid "All Translation Files" +msgstr "All Translation Files" + +msgid "Merging differences..." +msgstr "Merging differences..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' is not a valid POT file." + +msgid "(Use default language)" +msgstr "(Use default language)" + +msgid "Select your preferred language" +msgstr "Select your preferred language" + +msgid "Language selection" +msgstr "Language selection" + +msgid "You must restart Poedit for this change to take effect." +msgstr "You must restart Poedit for this change to take effect." + +msgid "Downloading translations is disabled in this project." +msgstr "Downloading translations is disabled in this project." + +msgid "Not authorized, please sign in again." +msgstr "Not authorised, please sign in again." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin is an online localisation management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." + +msgid "Sign In" +msgstr "Sign In" + +msgid "Sign in" +msgstr "Sign in" + +msgid "Sign Out" +msgstr "Sign Out" + +msgid "Sign out" +msgstr "Sign out" + +msgid "Waiting for authentication…" +msgstr "Waiting for authentication…" + +msgid "Updating user information…" +msgstr "Updating user information…" + +msgid "Signed in as:" +msgstr "Signed in as:" + +msgid "Learn More About Crowdin" +msgstr "Learn More About Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Learn more about Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Sign in to Crowdin" + +msgid "Open Crowdin translation" +msgstr "Open Crowdin translation" + +msgid "Project:" +msgstr "Project:" + +msgid "Language:" +msgstr "Language:" + +msgid "File:" +msgstr "File:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "No translation projects listed in your Crowdin account." + +msgid "This project has no files that can be translated in Poedit." +msgstr "This project has no files that can be translated in Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "This file can only be edited in Crowdin’s web interface." + +msgid "Downloading latest translations…" +msgstr "Downloading latest translations…" + +msgid "Syncing with Crowdin" +msgstr "Syncing with Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Syncing with Crowdin failed." + +msgid "Crowdin error" +msgstr "Crowdin error" + +msgid "Uploading translations…" +msgstr "Uploading translations…" + +msgid "&Copy" +msgstr "&Copy" + +msgid "Learn more" +msgstr "Learn more" + +msgid "Learn More" +msgstr "Learn More" + +#, c-format +msgid "Failed command: %s" +msgstr "Failed command: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Failed to merge gettext catalogues." + +msgid "Scanning files..." +msgstr "Scanning files..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Parsing %s files..." + +msgid "Failed to load extracted catalog." +msgstr "Failed to load extracted catalogue." + +msgid "&Help" +msgstr "&Help" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO files can’t be directly edited in Poedit." + +msgid "Error opening file" +msgstr "Error opening file" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." + +msgid "don't delete temporary files (for debugging)" +msgstr "don't delete temporary files (for debugging)" + +msgid "handle a poedit:// URI" +msgstr "handle a poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Failed to communicate with Poedit process." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Unhandled exception occurred: %s" + +msgid "Unhandled exception occurred." +msgstr "Unhandled exception occurred." + +msgid "Open catalog" +msgstr "Open catalogue" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "File '%s' doesn't exist." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "About %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit is an easy to use translations editor." + +msgid "Catalogs Manager" +msgstr "Catalogs Manager" + +msgid "Check for Updates..." +msgstr "Check for Updates..." + +msgid "&Edit" +msgstr "&Edit" + +msgid "Undo" +msgstr "Undo" + +msgid "Redo" +msgstr "Redo" + +msgid "Paste and Match Style" +msgstr "Paste and Match Style" + +msgid "Delete" +msgstr "Delete" + +msgid "Spelling and Grammar" +msgstr "Spelling and Grammar" + +msgid "Show Spelling and Grammar" +msgstr "Show Spelling and Grammar" + +msgid "Check Document Now" +msgstr "Check Document Now" + +msgid "Check Spelling While Typing" +msgstr "Check Spelling While Typing" + +msgid "Check Grammar With Spelling" +msgstr "Check Grammar With Spelling" + +msgid "Correct Spelling Automatically" +msgstr "Correct Spelling Automatically" + +msgid "Substitutions" +msgstr "Substitutions" + +msgid "Show Substitutions" +msgstr "Show Substitutions" + +msgid "Smart Copy/Paste" +msgstr "Smart Copy/Paste" + +msgid "Smart Quotes" +msgstr "Smart Quotes" + +msgid "Smart Dashes" +msgstr "Smart Dashes" + +msgid "Smart Links" +msgstr "Smart Links" + +msgid "Text Replacement" +msgstr "Text Replacement" + +msgid "Transformations" +msgstr "Transformations" + +msgid "Make Upper Case" +msgstr "Make Upper Case" + +msgid "Make Lower Case" +msgstr "Make Lower Case" + +msgid "Capitalize" +msgstr "Capitalise" + +msgid "Speech" +msgstr "Speech" + +msgid "Start Speaking" +msgstr "Start Speaking" + +msgid "Stop Speaking" +msgstr "Stop Speaking" + +msgid "&View" +msgstr "&View" + +msgid "Enter Full Screen" +msgstr "Enter Full Screen" + +msgid "Window" +msgstr "Window" + +msgid "Minimize" +msgstr "Minimise" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Bring All to Front" + +msgid "PO Translation" +msgstr "PO Translation" + +msgid "The file cannot be opened." +msgstr "The file cannot be opened." + +msgid "Invalid file" +msgstr "Invalid file" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"The file may be either corrupted or in a format not recognised by Poedit." + +msgid "&Undo" +msgstr "&Undo" + +msgid "&Redo" +msgstr "&Redo" + +msgid "Cu&t" +msgstr "Cu&t" + +msgid "Cut" +msgstr "Cut" + +msgid "Copy" +msgstr "Copy" + +msgid "&Paste" +msgstr "&Paste" + +msgid "Paste" +msgstr "Paste" + +msgid "&Delete" +msgstr "&Delete" + +msgid "Select &All" +msgstr "Select &All" + +msgid "Select All" +msgstr "Select All" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "You can't drop more than one file on Poedit window." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "File '%s' is not a message catalogue." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&File" + +msgid "&Go" +msgstr "&Go" + +msgid "Source text:" +msgstr "Source text:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Translation:" + +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 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." + +msgid "Create New Translation" +msgstr "Create New Translation" + +msgid "Create new translation" +msgstr "Create new translation" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." + +msgid "Install" +msgstr "Install" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalogue modified. Do you want to save changes?" + +msgid "Save changes" +msgstr "Save changes" + +msgid "Your changes will be lost if you don't save them." +msgstr "Your changes will be lost if you don't save them." + +msgid "Save" +msgstr "Save" + +msgid "Don't save" +msgstr "Don't save" + +msgid "Don't Save" +msgstr "Don't Save" + +msgid "Save as..." +msgstr "Save as..." + +msgid "Compile to..." +msgstr "Compile to..." + +msgid "Compiled Translation Files" +msgstr "Compiled Translation Files" + +msgid "Export as..." +msgstr "Export as..." + +msgid "HTML Files" +msgstr "HTML Files" + +msgid "Open catalog template" +msgstr "Open catalogue template" + +msgid "Updating catalog" +msgstr "Updating catalogue" + +msgid "Source code not available." +msgstr "Source code not available." + +msgid "Updating failed" +msgstr "Updating failed" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalogue’s Properties." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Entries in the catalogue are probably incorrect." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Updating the catalogue failed. Click on 'Details >>' for details." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d issue with the translation found." +msgstr[1] "%d issues with the translation found." + +msgid "Validation results" +msgstr "Validation results" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." + +msgid "The file was saved safely." +msgstr "The file was saved safely." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "The file cannot be compiled into the MO format and used." + +msgid "No problems with the translation found." +msgstr "No problems with the translation found." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"The translation is ready for use, but %d entry is not translated yet." +msgstr[1] "" +"The translation is ready for use, but %d entries are not translated yet." + +msgid "The translation is ready for use." +msgstr "The translation is ready for use." + +msgid "Context:" +msgstr "Context:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit automatically fixed invalid content in the file “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." + +msgid "Language of the translation isn't set." +msgstr "Language of the translation isn't set." + +msgid "Set Language" +msgstr "Set Language" + +msgid "Set language" +msgstr "Set language" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." + +msgid "Language of the translation is the same as source language." +msgstr "Language of the translation is the same as source language." + +msgid "Fix Language" +msgstr "Fix Language" + +msgid "Fix language" +msgstr "Fix language" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"This catalogue has entries with plural forms, but doesn't have Plural-Forms " +"header configured." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Entries in this catalogue have different plural forms count from what " +"catalogue's Plural-Forms header says" + +msgid "Required header Plural-Forms is missing." +msgstr "Required header Plural-Forms is missing." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntax error in Plural-Forms header (\"%s\")." + +msgid "Fix the Header" +msgstr "Fix the Header" + +msgid "Fix the header" +msgstr "Fix the header" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Plural forms expression used by the catalogue is unusual for %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Review" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Error loading message catalogue file '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Translated: %d of %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Remaining: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errors" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entry" +msgstr[1] "%d entries" + +msgid " (unsaved)" +msgstr " (unsaved)" + +msgid " (modified)" +msgstr " (modified)" + +msgid "Go" +msgstr "Go" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Failed to update translation memory: %s" + +msgid "Purge deleted translations" +msgstr "Purge deleted translations" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Do you want to remove all translations that are no longer used?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." + +msgid "Keep" +msgstr "Keep" + +msgid "Purge" +msgstr "Purge" + +msgid "Fill missing translations from TM" +msgstr "Fill missing translations from TM" + +msgid "Only fill in exact matches" +msgstr "Only fill in exact matches" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Don’t mark exact matches as fuzzy" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." + +msgid "Fill" +msgstr "Fill" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entry was filled from the translation memory." +msgstr[1] "%d entries were filled from the translation memory." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." + +msgid "No entries could be filled from the translation memory." +msgstr "No entries could be filled from the translation memory." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." + +msgid "Translating" +msgstr "Translating" + +msgid "Filling missing translations from TM..." +msgstr "Filling missing translations from TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Translated %u string" +msgstr[1] "Translated %u strings" + +msgid "Copy from source text" +msgstr "Copy from source text" + +msgid "Copy from Source Text" +msgstr "Copy from Source Text" + +msgid "Clear translation" +msgstr "Clear translation" + +msgid "Clear Translation" +msgstr "Clear Translation" + +msgid "Edit comment" +msgstr "Edit comment" + +msgid "Edit Comment" +msgstr "Edit Comment" + +msgid "References:" +msgstr "References:" + +msgid "Everything" +msgstr "Everything" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "One" + +msgid "Two" +msgstr "Two" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Other" + +msgid "&Bookmarks" +msgstr "&Bookmarks" + +#, c-format +msgid "Set bookmark %i" +msgstr "Set bookmark %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Go to bookmark %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Set Bookmark %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Go to Bookmark %i" + +msgid "Hide Sidebar" +msgstr "Hide Sidebar" + +msgid "Show Sidebar" +msgstr "Show Sidebar" + +msgid "Hide Status Bar" +msgstr "Hide Status Bar" + +msgid "Show Status Bar" +msgstr "Show Status Bar" + +msgid "Source text" +msgstr "Source text" + +msgid "Translation" +msgstr "Translation" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Source text — %s" + +msgid "unknown language" +msgstr "unknown language" + +#, c-format +msgid "Translation — %s" +msgstr "Translation — %s" + +msgid "Error:" +msgstr "Error:" + +msgid "Source file" +msgstr "Source file" + +msgid "Source file occurrence:" +msgstr "Source file occurrence:" + +msgid "Open in Editor" +msgstr "Open in Editor" + +msgid "Open in editor" +msgstr "Open in editor" + +msgid "No references for the selected item." +msgstr "No references for the selected item." + +#, c-format +msgid "Error opening file %s!" +msgstr "Error opening file %s!" + +msgid "Find" +msgstr "Find" + +msgid "Replace" +msgstr "Replace" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Options" + +msgid "Ignore case" +msgstr "Ignore case" + +msgid "Wrap around" +msgstr "Wrap around" + +msgid "Whole words only" +msgstr "Whole words only" + +msgid "Find in source texts" +msgstr "Find in source texts" + +msgid "Find in translations" +msgstr "Find in translations" + +msgid "Find in comments" +msgstr "Find in comments" + +msgid "Close" +msgstr "Close" + +msgid "Replace All" +msgstr "Replace All" + +msgid "Replace all" +msgstr "Replace all" + +msgid "< &Previous" +msgstr "< &Previous" + +msgid "&Next >" +msgstr "&Next >" + +msgid "String to find" +msgstr "String to find" + +msgid "Replacement string" +msgstr "Replacement string" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Cannot execute program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Language Code or Name (e.g. en_GB)" + +msgid "Translation Language" +msgstr "Translation Language" + +msgid "Language of the translation:" +msgstr "Language of the translation:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Catalogues manager" + +msgid "Catalog" +msgstr "Catalogue" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Untrans" + +msgid "Fuzzy" +msgstr "Fuzzy" + +msgid "Bad Tokens" +msgstr "Bad Tokens" + +msgid "Last modified" +msgstr "Last modified" + +msgid "Select directory" +msgstr "Select directory" + +msgid "Directories:" +msgstr "Directories:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Do you want to delete the project?" + +msgid "Confirmation" +msgstr "Confirmation" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Do you really want to do mass update of\n" +"all catalogues in this project?" + +msgid "Information about the translator" +msgstr "Information about the translator" + +msgid "Name:" +msgstr "Name:" + +msgid "Your Name" +msgstr "Your Name" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "your_e-mail@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Your name and e-mail address are only used to set the Last-Translator header " +"of GNU gettext files." + +msgid "Editing" +msgstr "Editing" + +msgid "Automatically compile MO file when saving" +msgstr "Automatically compile MO file when saving" + +msgid "Show summary after catalog update" +msgstr "Show summary after catalogue update" + +msgid "Check spelling" +msgstr "Check spelling" + +msgid "Always change focus to text input field" +msgstr "Always change focus to text input field" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." + +msgid "Appearance" +msgstr "Appearance" + +msgid "Use custom list font:" +msgstr "Use custom list font:" + +msgid "Use custom text fields font:" +msgstr "Use custom text fields font:" + +msgid "Change UI language" +msgstr "Change UI language" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(requires Windows 8 or newer)" + +msgid "General" +msgstr "General" + +msgid "Use translation memory" +msgstr "Use translation memory" + +msgid "Learn From Files..." +msgstr "Learn From Files..." + +msgid "Learn from files..." +msgstr "Learn from files..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Reset" + +msgid "Consult TM when updating from sources" +msgstr "Consult TM when updating from sources" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." + +msgid "Stored translations:" +msgstr "Stored translations:" + +msgid "Database size on disk:" +msgstr "Database size on disk:" + +msgid "Select translation files to import" +msgstr "Select translation files to import" + +msgid "Translation Memory" +msgstr "Translation Memory" + +msgid "Importing translations..." +msgstr "Importing translations..." + +msgid "Finalizing..." +msgstr "Finalising..." + +msgid "Reset translation memory" +msgstr "Reset translation memory" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Are you sure you want to reset the translation memory?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." + +msgid "Cancel" +msgstr "Cancel" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." + +msgid "New" +msgstr "New" + +msgid "Edit" +msgstr "Edit" + +msgid "Delete extractor" +msgstr "Delete extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Are you sure you want to delete the “%s” extractor?" + +msgid "Extractors" +msgstr "Extractors" + +msgid "Accounts" +msgstr "Accounts" + +msgid "Automatically check for updates" +msgstr "Automatically check for updates" + +msgid "Include beta versions" +msgstr "Include beta versions" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." + +msgid "Updates" +msgstr "Updates" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." + +msgid "Line endings:" +msgstr "Line endings:" + +msgid "Unix (recommended)" +msgstr "Unix (recommended)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Wrap at:" + +msgid "Preserve formatting of existing files" +msgstr "Preserve formatting of existing files" + +msgid "Advanced" +msgstr "Advanced" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Drag and drop folders here\n" +"\n" +"or use the + button" + +msgid "Add Folders..." +msgstr "Add Folders..." + +msgid "Add folders..." +msgstr "Add folders..." + +msgid "Add Files..." +msgstr "Add Files..." + +msgid "Add files..." +msgstr "Add files..." + +msgid "Add Wildcard..." +msgstr "Add Wildcard..." + +msgid "Add wildcard..." +msgstr "Add wildcard..." + +msgid "Paths" +msgstr "Paths" + +msgid "Excluded paths" +msgstr "Excluded paths" + +msgid "Additional keywords" +msgstr "Additional keywords" + +msgid "Name of the project the translation is for" +msgstr "Name of the project the translation is for" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "e.g. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recommended)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Please save the file first. This section cannot be edited until then." + +msgid "Comment:" +msgstr "Comment:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "C&lear" + +msgid "Clear the comment" +msgstr "Clear the comment" + +msgid "Create new translations project" +msgstr "Create new translations project" + +msgid "Edit the project" +msgstr "Edit the project" + +msgid "Delete the project" +msgstr "Delete the project" + +msgid "Update all" +msgstr "Update all" + +msgid "Update all catalogs in the project" +msgstr "Update all catalogues in the project" + +msgid "Edit project" +msgstr "Edit project" + +msgid "Project name:" +msgstr "Project name:" + +msgid "Browse" +msgstr "Browse" + +msgid "Add directory to the list" +msgstr "Add directory to the list" + +msgid "&New..." +msgstr "&New..." + +msgid "New from &POT/PO file..." +msgstr "New from &POT/PO file..." + +msgid "New From &POT/PO File..." +msgstr "New From &POT/PO File..." + +msgid "&Open..." +msgstr "&Open..." + +msgid "Open Recent" +msgstr "Open Recent" + +msgid "Open from Crowdin..." +msgstr "Open from Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Open From Crowdin..." + +msgid "&Close" +msgstr "&Close" + +msgid "&Save" +msgstr "&Save" + +msgid "Save &as..." +msgstr "Save &as..." + +msgid "Save &As..." +msgstr "Save &As..." + +msgid "Compile to MO..." +msgstr "Compile to MO..." + +msgid "E&xport as HTML..." +msgstr "E&xport as HTML..." + +msgid "Check for updates..." +msgstr "Check for updates..." + +msgid "&Preferences..." +msgstr "&Preferences..." + +msgid "Catalogs &manager" +msgstr "Catalogues &manager" + +msgid "Catalogs &Manager" +msgstr "Catalogues &Manager" + +msgid "E&xit" +msgstr "E&xit" + +msgid "Quit" +msgstr "Quit" + +msgid "Copy from singular" +msgstr "Copy from singular" + +msgid "Copy From Singular" +msgstr "Copy From Singular" + +msgid "Translation is &fuzzy" +msgstr "Translation is &fuzzy" + +msgid "Translation Is &Fuzzy" +msgstr "Translation Is &Fuzzy" + +msgid "Edit &comment" +msgstr "Edit &comment" + +msgid "Edit &Comment" +msgstr "Edit &Comment" + +msgid "Suggestions" +msgstr "Suggestions" + +msgid "&Show references" +msgstr "&Show references" + +msgid "&Show References" +msgstr "&Show References" + +msgid "&Find..." +msgstr "&Find..." + +msgid "Replace..." +msgstr "Replace..." + +msgid "Find next" +msgstr "Find next" + +msgid "Find previous" +msgstr "Find previous" + +msgid "Find and Replace..." +msgstr "Find and Replace..." + +msgid "Find Next" +msgstr "Find Next" + +msgid "Find Previous" +msgstr "Find Previous" + +msgid "&Preferences" +msgstr "&Preferences" + +msgid "Display entry &IDs" +msgstr "Display entry &IDs" + +msgid "Display Entry &IDs" +msgstr "Display Entry &IDs" + +msgid "Sort by &file order" +msgstr "Sort by &file order" + +msgid "Sort by &File Order" +msgstr "Sort by &File Order" + +msgid "Sort by &source" +msgstr "Sort by &source" + +msgid "Sort by &Source" +msgstr "Sort by &Source" + +msgid "Sort by &translation" +msgstr "Sort by &translation" + +msgid "Sort by &Translation" +msgstr "Sort by &Translation" + +msgid "&Group by context" +msgstr "&Group by context" + +msgid "&Group By Context" +msgstr "&Group By Context" + +msgid "Entries with errors first" +msgstr "Entries with errors first" + +msgid "Entries with Errors First" +msgstr "Entries with Errors First" + +msgid "&Untranslated entries first" +msgstr "&Untranslated entries first" + +msgid "&Untranslated Entries First" +msgstr "&Untranslated Entries First" + +msgid "Show sidebar" +msgstr "Show sidebar" + +msgid "Show status bar" +msgstr "Show status bar" + +msgid "C&atalog" +msgstr "C&atalogue" + +msgid "&Update from sources" +msgstr "&Update from sources" + +msgid "&Update from Sources" +msgstr "&Update from Sources" + +msgid "Update from &POT file..." +msgstr "Update from &POT file..." + +msgid "Update from &POT File..." +msgstr "Update from &POT File..." + +msgid "Sync with Crowdin" +msgstr "Sync with Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Fill missing translations from &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Fill Missing Translations from &TM..." + +msgid "&Purge deleted translations" +msgstr "&Purge deleted translations" + +msgid "&Purge Deleted Translations" +msgstr "&Purge Deleted Translations" + +msgid "&Validate translations" +msgstr "&Validate translations" + +msgid "&Validate Translations" +msgstr "&Validate Translations" + +msgid "&Properties..." +msgstr "&Properties..." + +msgid "&Done and next" +msgstr "&Done and next" + +msgid "&Done and Next" +msgstr "&Done and Next" + +msgid "&Previous translation" +msgstr "&Previous translation" + +msgid "&Previous Translation" +msgstr "&Previous Translation" + +msgid "&Next translation" +msgstr "&Next translation" + +msgid "&Next Translation" +msgstr "&Next Translation" + +msgid "P&revious unfinished" +msgstr "P&revious unfinished" + +msgid "P&revious Unfinished" +msgstr "P&revious Unfinished" + +msgid "Ne&xt unfinished" +msgstr "Ne&xt unfinished" + +msgid "Ne&xt Unfinished" +msgstr "Ne&xt Unfinished" + +msgid "Previous plural form" +msgstr "Previous plural form" + +msgid "Previous Plural Form" +msgstr "Previous Plural Form" + +msgid "Next plural form" +msgstr "Next plural form" + +msgid "Next Plural Form" +msgstr "Next Plural Form" + +msgid "&Online help" +msgstr "&Online help" + +msgid "&Online Help" +msgstr "&Online Help" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext manual" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext Manual" + +msgid "&About Poedit" +msgstr "&About Poedit" + +msgid "&About" +msgstr "&About" + +msgid "Extractor setup" +msgstr "Extractor setup" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "List of extensions separated by semicolons (e.g. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Invocation:" + +msgid "Command to extract translations:" +msgstr "Command to extract translations:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." + +msgid "An item in keywords list:" +msgstr "An item in keywords list:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." + +msgid "An item in input files list:" +msgstr "An item in input files list:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." + +msgid "Source code charset:" +msgstr "Source code charset:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" + +msgid "Catalog properties" +msgstr "Catalogue properties" + +msgid "Project name and version:" +msgstr "Project name and version:" + +msgid "Plural Forms:" +msgstr "Plural Forms:" + +msgid "Use default rules for this language" +msgstr "Use default rules for this language" + +msgid "Use custom expression" +msgstr "Use custom expression" + +msgid "Learn about plural forms" +msgstr "Learn about plural forms" + +msgid "Charset:" +msgstr "Charset:" + +msgid "Team:" +msgstr "Team:" + +msgid "Team's email address:" +msgstr "Team's e-mail address:" + +msgid "Translation properties" +msgstr "Translation properties" + +msgid "Sources paths" +msgstr "Sources paths" + +msgid "Extract text from source files in the following directories:" +msgstr "Extract text from source files in the following directories:" + +msgid "Base path:" +msgstr "Base path:" + +msgid "Sources keywords" +msgstr "Sources keywords" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Use these keywords (function names) to recognise translatable strings\n" +"in source files:" + +msgid "Learn about gettext keywords" +msgstr "Learn about gettext keywords" + +msgid "Update summary" +msgstr "Update summary" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"These strings were found in the sources but were not in the catalogue.\n" +"Poedit will add them to the catalogue now." + +msgid "New strings" +msgstr "New strings" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalogue now." + +msgid "Obsolete strings" +msgstr "Obsolete strings" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 new, 0 obsolete)" + +msgid "Open" +msgstr "Open" + +msgid "Save catalog" +msgstr "Save catalogue" + +msgid "Validate" +msgstr "Validate" + +msgid "Check for errors in the translation" +msgstr "Check for errors in the translation" + +msgid "Update" +msgstr "Update" + +msgid "Update catalog - synchronize it with sources" +msgstr "Update catalogue - synchronise it with sources" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Toggled if selected string has fuzzy translation" + +msgid "Show or hide the sidebar" +msgstr "Show or hide the sidebar" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Previous source text:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." + +msgid "Notes for translators:" +msgstr "Notes for translators:" + +msgid "Add comment" +msgstr "Add comment" + +msgid "Add Comment" +msgstr "Add Comment" + +msgid "Translation suggestions:" +msgstr "Translation suggestions:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "No matches found" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "No Matches Found" + +msgid "This string was found in Poedit’s translation memory." +msgstr "This string was found in Poedit’s translation memory." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(New: %i, obsolete: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importing translations: %d" + +msgid "Poedit Update" +msgstr "Poedit Update" + +msgid "Preparing migration..." +msgstr "Preparing migration..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migration exit status: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit needs to convert your translation memory to a new format." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." + +msgid "Proceed" +msgstr "Proceed" + +msgid "Translation memory migration failed." +msgstr "Translation memory migration failed." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please e-mail help@poedit.net and we’ll get it fixed." + +msgid "Cannot create temporary directory." +msgstr "Cannot create temporary directory." + +msgid "Welcome to Poedit" +msgstr "Welcome to Poedit" + +msgid "Edit a translation" +msgstr "Edit a translation" + +msgid "Open an existing PO file and edit the translation." +msgstr "Open an existing PO file and edit the translation." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Take an existing PO file or POT template and create a new translation from " +"it." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Collaborate on a translation with Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Download a file from Crowdin project, translate and sync your changes back." + +msgid "What is Crowdin?" +msgstr "What is Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "There are no translations. That’s unusual." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." + +msgid "(Learn more about GNU gettext)" +msgstr "(Learn more about GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "The simplest way to fill this catalogue is to update it from a POT:" + +msgid "Update from POT" +msgstr "Update from POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Take translatable strings from an existing POT template." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"You can also extract translatable strings directly from the source code:" + +msgid "Extract from sources" +msgstr "Extract from sources" + +msgid "Configure source code extraction in Properties." +msgstr "Configure source code extraction in Properties." + +msgid "Sync" +msgstr "Sync" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchronise the translation with Crowdin" diff --git a/locales/es.mo b/locales/es.mo new file mode 100644 index 0000000000000000000000000000000000000000..e16aa2cbe7d04ec71d1381074d7fef4a77572937 GIT binary patch literal 47080 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 literal 0 HcmV?d00001 diff --git a/locales/es.po b/locales/es.po new file mode 100644 index 0000000..4d18e3c --- /dev/null +++ b/locales/es.po @@ -0,0 +1,1967 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:05-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Spanish\n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: es-ES\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ocultar este mensaje de notificación" + +msgid "Don't Show Again" +msgstr "No mostrar de nuevo" + +msgid "Don't show again" +msgstr "No mostrar de nuevo" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "No se cargó %i línea del archivo «%s» correctamente." +msgstr[1] "No se cargaron %i líneas del archivo «%s» correctamente." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "La línea %d del archivo «%s» está dañada (datos %s no válidos)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Cabecera con formato incorrecto: «%s»" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Archivo de catálogo dañado: forma singular msgstr usada junto con " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Archivo de catálogo dañado: forma plural msgstr usada sin msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Se produjeron errores al leer el catálogo. Es posible que algunos datos se " +"hayan perdido o dañado." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "No se pudo cargar el archivo «%s»; probablemente esté dañado." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"El archivo «%s» es de solo lectura y no se puede guardar.\n" +"Guárdelo con un nombre diferente." + +#, c-format +msgid "Couldn't save file %s." +msgstr "No se pudo guardar el archivo %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Ocurrió un problema al dar formato al archivo (pero se guardó correctamente)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"No se pudo guardar el catálogo en el conjunto de caracteres «%s» como se\n" +"especificó en las preferencias de este.\n" +"\n" +"Como consecuencia, se ha guardado en UTF-8 y se ha modificado la preferencia." + +msgid "Error saving catalog" +msgstr "Error al guardar el catálogo" + +msgid "PO Translation Files" +msgstr "Archivos de traducción PO" + +msgid "POT Translation Templates" +msgstr "Plantillas de traducción POT" + +msgid "All Translation Files" +msgstr "Todos los archivos de traducción" + +msgid "Merging differences..." +msgstr "Combinando las diferencias…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "«%s» no es un archivo POT válido." + +msgid "(Use default language)" +msgstr "(Usar idioma predeterminado)" + +msgid "Select your preferred language" +msgstr "Seleccione el idioma que prefiera" + +msgid "Language selection" +msgstr "Selección de idioma" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Debe reiniciar Poedit para que los cambios surtan efecto." + +msgid "Downloading translations is disabled in this project." +msgstr "La descarga de traducciones está desactivada en este proyecto." + +msgid "Not authorized, please sign in again." +msgstr "Acción no autorizada. Acceda a la cuenta de nuevo." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin es una plataforma de gestión de regionalización y traducción " +"colaborativa en línea. Poedit puede sincronizar archivos PO gestionados con " +"Crowdin." + +msgid "Sign In" +msgstr "Acceder" + +msgid "Sign in" +msgstr "Acceder" + +msgid "Sign Out" +msgstr "Salir" + +msgid "Sign out" +msgstr "Salir" + +msgid "Waiting for authentication…" +msgstr "Esperando la autenticación…" + +msgid "Updating user information…" +msgstr "Actualizando la información del usuario…" + +msgid "Signed in as:" +msgstr "Se identificó como:" + +msgid "Learn More About Crowdin" +msgstr "Más información sobre Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Más información sobre Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Acceder a Crowdin" + +msgid "Open Crowdin translation" +msgstr "Abrir traducción de Crowdin" + +msgid "Project:" +msgstr "Proyecto:" + +msgid "Language:" +msgstr "Idioma:" + +msgid "File:" +msgstr "Archivo:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "No hay proyectos de traducción en su cuenta de Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Este proyecto no contiene archivos traducibles en Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Este archivo solo puede editarse en la interfaz web de Crowdin." + +msgid "Downloading latest translations…" +msgstr "Descargando las traducciones más recientes…" + +msgid "Syncing with Crowdin" +msgstr "Sincronizando con Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Falló la sincronización con Crowdin." + +msgid "Crowdin error" +msgstr "Error de Crowdin" + +msgid "Uploading translations…" +msgstr "Cargando las traducciones…" + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Más información" + +msgid "Learn More" +msgstr "Más información" + +#, c-format +msgid "Failed command: %s" +msgstr "Orden errónea: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Error al combinar los catálogos de Gettext." + +msgid "Scanning files..." +msgstr "Analizando los archivos…" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analizando archivos en %s…" + +msgid "Failed to load extracted catalog." +msgstr "Falló la carga del catálogo extraído." + +msgid "&Help" +msgstr "Ay&uda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "No se pueden editar los archivos MO directamente en Poedit." + +msgid "Error opening file" +msgstr "Error al abrir el archivo" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"En su lugar, abra y edite el archivo PO correspondiente. Cuando lo guarde, " +"el archivo MO se actualizará también." + +msgid "don't delete temporary files (for debugging)" +msgstr "no eliminar archivos temporales (para depuración)" + +msgid "handle a poedit:// URI" +msgstr "manejar un URI poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "No se pudo comunicar con el proceso de Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Se produjo una excepción no controlada: %s" + +msgid "Unhandled exception occurred." +msgstr "Se produjo una excepción no controlada." + +msgid "Open catalog" +msgstr "Abrir catálogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "El archivo «%s» no existe." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Acerca de %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versión %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servicios" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ocultar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ocultar el resto" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mostrar todo" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Salir de %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit es un editor de traducciones fácil de usar." + +msgid "Catalogs Manager" +msgstr "Gestor de catálogos" + +msgid "Check for Updates..." +msgstr "Buscar actualizaciones…" + +msgid "&Edit" +msgstr "&Editar" + +msgid "Undo" +msgstr "Deshacer" + +msgid "Redo" +msgstr "Rehacer" + +msgid "Paste and Match Style" +msgstr "Pegar con el mismo estilo" + +msgid "Delete" +msgstr "Eliminar" + +msgid "Spelling and Grammar" +msgstr "Ortografía y gramática" + +msgid "Show Spelling and Grammar" +msgstr "Mostrar ortografía y gramática" + +msgid "Check Document Now" +msgstr "Revisar el documento ahora" + +msgid "Check Spelling While Typing" +msgstr "Revisar ortografía al escribir" + +msgid "Check Grammar With Spelling" +msgstr "Comprobar gramática con la ortografía" + +msgid "Correct Spelling Automatically" +msgstr "Corregir ortografía automáticamente" + +msgid "Substitutions" +msgstr "Sustituciones" + +msgid "Show Substitutions" +msgstr "Mostrar sustituciones" + +msgid "Smart Copy/Paste" +msgstr "Copipegado inteligente" + +msgid "Smart Quotes" +msgstr "Comillas tipográficas" + +msgid "Smart Dashes" +msgstr "Guiones inteligentes" + +msgid "Smart Links" +msgstr "Enlaces inteligentes" + +msgid "Text Replacement" +msgstr "Sustitución de texto" + +msgid "Transformations" +msgstr "Transformaciones" + +msgid "Make Upper Case" +msgstr "Convertir en mayúsculas" + +msgid "Make Lower Case" +msgstr "Convertir en minúsculas" + +msgid "Capitalize" +msgstr "A mayúsculas" + +msgid "Speech" +msgstr "Habla" + +msgid "Start Speaking" +msgstr "Comenzar a hablar" + +msgid "Stop Speaking" +msgstr "Dejar de hablar" + +msgid "&View" +msgstr "&Ver" + +msgid "Enter Full Screen" +msgstr "Modo de pantalla completa" + +msgid "Window" +msgstr "Ventana" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Escala" + +msgid "Bring All to Front" +msgstr "Traer todo al frente" + +msgid "PO Translation" +msgstr "Traducción en PO" + +msgid "The file cannot be opened." +msgstr "No se puede abrir el archivo." + +msgid "Invalid file" +msgstr "El archivo no es válido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "El archivo puede estar dañado o en un formato que Poedit no reconoce." + +msgid "&Undo" +msgstr "&Deshacer" + +msgid "&Redo" +msgstr "&Rehacer" + +msgid "Cu&t" +msgstr "Cor&tar" + +msgid "Cut" +msgstr "Cortar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "&Pegar" + +msgid "Paste" +msgstr "Pegar" + +msgid "&Delete" +msgstr "&Eliminar" + +msgid "Select &All" +msgstr "Seleccionar &todo" + +msgid "Select All" +msgstr "Seleccionar todo" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Mayús+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Intro" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "↑" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "↓" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "mayús" + +msgid "You can't drop more than one file on Poedit window." +msgstr "No se puede soltar más de un archivo en la ventana de Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "El archivo «%s» no es un catálogo de mensajes." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Archivo" + +msgid "&Go" +msgstr "&Navegar" + +msgid "Source text:" +msgstr "Texto de origen:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Traducción:" + +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 "" +"Los archivos POT son plantillas; no contienen traducciones.\n" +"Para realizar una traducción, cree un archivo PO nuevo basado en la " +"plantilla." + +msgid "Create New Translation" +msgstr "Crear traducción nueva" + +msgid "Create new translation" +msgstr "Crear traducción nueva" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Se desactivó la revisión ortográfica porque falta el diccionario para el %s." + +msgid "Install" +msgstr "Instalar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Se ha modificado el catálogo. ¿Quiere guardar los cambios?" + +msgid "Save changes" +msgstr "Guardar cambios" + +msgid "Your changes will be lost if you don't save them." +msgstr "Los cambios se perderán si no los guarda." + +msgid "Save" +msgstr "Guardar" + +msgid "Don't save" +msgstr "No guardar" + +msgid "Don't Save" +msgstr "No guardar" + +msgid "Save as..." +msgstr "Guardar como…" + +msgid "Compile to..." +msgstr "Compilar en…" + +msgid "Compiled Translation Files" +msgstr "Archivos de traducción compilados" + +msgid "Export as..." +msgstr "Exportar a…" + +msgid "HTML Files" +msgstr "Archivos HTML" + +msgid "Open catalog template" +msgstr "Abrir plantilla de catálogo" + +msgid "Updating catalog" +msgstr "Actualizando el catálogo" + +msgid "Source code not available." +msgstr "El código fuente no está disponible." + +msgid "Updating failed" +msgstr "Falló la actualización" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"No se pudieron actualizar las traducciones a partir del código fuente porque " +"no se encontró el código en la ubicación especificada en las propiedades del " +"catálogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Es probable que algunos mensajes del catálogo sean incorrectos." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Falló la actualización del catálogo. Pulse en «Detalles» para más " +"información." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Se encontró %d problema en la traducción." +msgstr[1] "Se encontraron %d problemas en la traducción." + +msgid "Validation results" +msgstr "Resultados de la validación" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Las entradas con errores se han marcado en rojo en la lista. Se mostrarán " +"detalles del error cuando seleccione la entrada." + +msgid "The file was saved safely." +msgstr "Se ha guardado el archivo con seguridad." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Se guardó el archivo con seguridad y se compiló en el formato MO, pero es " +"posible que no funcione correctamente." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"El archivo se guardó con seguridad, pero no puede compilarse en el formato " +"MO ni usarse." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"El archivo se compiló en el formato MO, pero es posible que no funcione " +"correctamente." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "El archivo no se puede compilar en el archivo MO para su uso." + +msgid "No problems with the translation found." +msgstr "No se encontraron problemas con esta traducción." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"La traducción está lista para su uso, pero aún no se ha traducido %d cadena." +msgstr[1] "" +"La traducción está lista para su uso, pero aún no se han traducido %d " +"cadenas." + +msgid "The translation is ready for use." +msgstr "La traducción está lista para su uso." + +msgid "Context:" +msgstr "Contexto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit corrigió automáticamente el contenido no válido del archivo «%s»." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"El archivo contenía elementos duplicados, lo que impediría su " +"funcionamiento. Poedit ha corregido el problema, pero debe revisar las " +"traducciones de cualesquier elementos marcados como provisionales y " +"corregirlas si es necesario." + +msgid "Language of the translation isn't set." +msgstr "No se ha establecido el idioma de la traducción." + +msgid "Set Language" +msgstr "Establecer idioma" + +msgid "Set language" +msgstr "Establecer el idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Si el idioma de traducción no se configura correctamente, se afectarán " +"funcionalidades como las sugerencias y la gestión de formas plurales." + +msgid "Language of the translation is the same as source language." +msgstr "El idioma de la traducción es igual que el del texto original." + +msgid "Fix Language" +msgstr "Corregir idioma" + +msgid "Fix language" +msgstr "Corregir idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Este catálogo tiene entradas con formas en plural, pero no tiene configurada " +"la cabecera «Plural-Forms»." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Hay entradas en este catálogo con una cantidad de formas de plural distinta " +"a la establecida en la cabecera «Plural-Forms»" + +msgid "Required header Plural-Forms is missing." +msgstr "Falta la cabecera obligatoria «Plural-Forms»." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Error de sintaxis en la cabecera de formas de plural («%s»)." + +msgid "Fix the Header" +msgstr "Corregir la cabecera" + +msgid "Fix the header" +msgstr "Corregir la cabecera" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"La expresión de formas plurales usada en el catálogo es inusual en el %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revisar" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Ocurrió un error al cargar el catálogo de mensajes «%s»." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traducidas: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Quedan: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errores" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entradas" + +msgid " (unsaved)" +msgstr "(sin guardar)" + +msgid " (modified)" +msgstr " (modificado)" + +msgid "Go" +msgstr "Ir" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "No se pudo actualizar la memoria de traducciones: %s" + +msgid "Purge deleted translations" +msgstr "Purgar traducciones eliminadas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "¿Quiere eliminar todas las traducciones que ya no se usan?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Si continúa con el purgado se eliminarán permanentemente todas las " +"traducciones no utilizadas. Si las cadenas correspondientes se vuelven a " +"añadir, deberá traducirlas de nuevo." + +msgid "Keep" +msgstr "Conservar" + +msgid "Purge" +msgstr "Purgar" + +msgid "Fill missing translations from TM" +msgstr "Cubrir traducciones pendientes a partir de la MT" + +msgid "Only fill in exact matches" +msgstr "Solo correspondencias exactas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"De manera predeterminada, los resultados imprecisos se rellenarán y marcarán " +"como provisionales. Active esta opción para incluir solo las coincidencias " +"exactas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "No marcar coincidencias exactas como provisionales" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Active esta opción solo si confía en la calidad de la MT. De manera " +"predeterminada, todas las coincidencias se marcan como provisionales para su " +"revisión." + +msgid "Fill" +msgstr "Rellenar" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d cadena rellenada desde la memoria de traducción." +msgstr[1] "%d cadenas rellenadas desde la memoria de traducción." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Las traducciones se marcaron como provisionales porque podrían ser " +"imprecisas. Necesita revisarlas para asegurar su exactitud." + +msgid "No entries could be filled from the translation memory." +msgstr "No se pudo rellenar ninguna entrada desde la memoria de traducción." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"La MT no contiene ninguna cadena similar al contenido de este archivo. Solo " +"será efectiva para traducciones semiautomáticas después de que Poedit haya " +"aprendido lo suficiente de archivos traducidos manualmente por el usuario." + +msgid "Translating" +msgstr "Traduciendo" + +msgid "Filling missing translations from TM..." +msgstr "Rellenando traducciones faltantes desde MT…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Se tradujo %u cadena" +msgstr[1] "Se tradujeron %u cadenas" + +msgid "Copy from source text" +msgstr "Copiar del texto original" + +msgid "Copy from Source Text" +msgstr "Copiar del texto original" + +msgid "Clear translation" +msgstr "Borrar la traducción" + +msgid "Clear Translation" +msgstr "Borrar la traducción" + +msgid "Edit comment" +msgstr "Editar comentario" + +msgid "Edit Comment" +msgstr "Editar comentario" + +msgid "References:" +msgstr "Referencias:" + +msgid "Everything" +msgstr "Todo" + +#, c-format +msgid "Form %i" +msgstr "Formulario %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Cero" + +msgid "One" +msgstr "Uno" + +msgid "Two" +msgstr "Dos" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Otro" + +msgid "&Bookmarks" +msgstr "&Marcadores" + +#, c-format +msgid "Set bookmark %i" +msgstr "Crear marcador %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ir al marcador %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Crear marcador %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ir al marcador %i" + +msgid "Hide Sidebar" +msgstr "Ocultar barra lateral" + +msgid "Show Sidebar" +msgstr "Mostrar barra lateral" + +msgid "Hide Status Bar" +msgstr "Ocultar barra de estado" + +msgid "Show Status Bar" +msgstr "Mostrar barra de estado" + +msgid "Source text" +msgstr "Texto de origen" + +msgid "Translation" +msgstr "Traducción" + +msgid "ID" +msgstr "Id." + +#, c-format +msgid "Source text — %s" +msgstr "Texto de origen: %s" + +msgid "unknown language" +msgstr "idioma desconocido" + +#, c-format +msgid "Translation — %s" +msgstr "Traducción: %s" + +msgid "Error:" +msgstr "Error:" + +msgid "Source file" +msgstr "Archivo de origen" + +msgid "Source file occurrence:" +msgstr "Ocurrencia en archivo de fuente:" + +msgid "Open in Editor" +msgstr "Abrir en el editor" + +msgid "Open in editor" +msgstr "Abrir en el editor" + +msgid "No references for the selected item." +msgstr "No hay referencias para el elemento seleccionado." + +#, c-format +msgid "Error opening file %s!" +msgstr "Ocurrió un error al abrir el archivo %s." + +msgid "Find" +msgstr "Buscar" + +msgid "Replace" +msgstr "Reemplazar" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opciones" + +msgid "Ignore case" +msgstr "Ignorar mayúsculas y minúsculas" + +msgid "Wrap around" +msgstr "Búsqueda bidireccional" + +msgid "Whole words only" +msgstr "Solo palabras completas" + +msgid "Find in source texts" +msgstr "Encontrar en textos originales" + +msgid "Find in translations" +msgstr "Buscar en traducciones" + +msgid "Find in comments" +msgstr "Buscar en los comentarios" + +msgid "Close" +msgstr "Cerrar" + +msgid "Replace All" +msgstr "Reemplazar todo" + +msgid "Replace all" +msgstr "Reemplazar todo" + +msgid "< &Previous" +msgstr "< &Anterior" + +msgid "&Next >" +msgstr "&Siguiente >" + +msgid "String to find" +msgstr "Texto que encontrar" + +msgid "Replacement string" +msgstr "Texto de reemplazo" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "No se puede ejecutar el programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Código o nombre de idioma (p. ej., es_MX)" + +msgid "Translation Language" +msgstr "Idioma de la traducción" + +msgid "Language of the translation:" +msgstr "Idioma de la traducción:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit: Gestor de catálogos" + +msgid "Catalog" +msgstr "Catálogo" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Sin traducir" + +msgid "Fuzzy" +msgstr "Provisional" + +msgid "Bad Tokens" +msgstr "Símbolos erróneos" + +msgid "Last modified" +msgstr "Última modificación" + +msgid "Select directory" +msgstr "Seleccione la carpeta" + +msgid "Directories:" +msgstr "Carpetas:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "¿Quiere eliminar el proyecto?" + +msgid "Confirmation" +msgstr "Confirmación" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"¿Quiere realizar una actualización en masa\n" +"de todos los catálogos de este proyecto?" + +msgid "Information about the translator" +msgstr "Información acerca del traductor" + +msgid "Name:" +msgstr "Nombre:" + +msgid "Your Name" +msgstr "Su nombre" + +msgid "Email:" +msgstr "Dirección de correo electrónico:" + +msgid "your_email@example.com" +msgstr "dirección@ejemplo.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Estos datos se utilizan únicamente para establecer el valor de la cabecera " +"«Last-Translator» de los archivos de GNU gettext." + +msgid "Editing" +msgstr "Edición" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar automáticamente el archivo MO al guardar" + +msgid "Show summary after catalog update" +msgstr "Mostrar resumen tras actualizar el catálogo" + +msgid "Check spelling" +msgstr "Revisar la ortografía" + +msgid "Always change focus to text input field" +msgstr "Enfocar siempre el campo de entrada de texto" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"No dejar que la lista de cadenas retenga el enfoque. Si esta opción está " +"activada puede usarse la combinación de Ctrl + teclas de dirección para " +"moverse por la lista y comenzar a teclear inmediatamente sin necesidad de " +"pulsar el tabulador para cambiar el foco." + +msgid "Appearance" +msgstr "Apariencia" + +msgid "Use custom list font:" +msgstr "Usar tipo de letra personalizado en listas:" + +msgid "Use custom text fields font:" +msgstr "Usar tipo de letra personalizado en campos de texto:" + +msgid "Change UI language" +msgstr "Cambiar idioma de la interfaz" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(se necesita Windows 8 o posterior)" + +msgid "General" +msgstr "Generales" + +msgid "Use translation memory" +msgstr "Usar memoria de traducción" + +msgid "Learn From Files..." +msgstr "Aprender de los archivos…" + +msgid "Learn from files..." +msgstr "Aprender de los archivos…" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Restablecer" + +msgid "Consult TM when updating from sources" +msgstr "Consultar MT al actualizar desde fuentes" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Si se activa, Poedit intentará rellenar las entradas nuevas utilizando las\n" +"traducciones almacenadas en la memoria de traducción. Si la MT está\n" +"mayormente vacía, el proceso no será muy efectivo. Mientras más\n" +"traducciones edite y mayor sea la MT, mejor será el resultado." + +msgid "Stored translations:" +msgstr "Traducciones almacenadas:" + +msgid "Database size on disk:" +msgstr "Tamaño de base de datos en el disco:" + +msgid "Select translation files to import" +msgstr "Seleccione los archivos de traducción que se importarán" + +msgid "Translation Memory" +msgstr "Memoria de traducciones" + +msgid "Importing translations..." +msgstr "Importando las traducciones…" + +msgid "Finalizing..." +msgstr "Finalizando…" + +msgid "Reset translation memory" +msgstr "Restablecer memoria de traducción" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "¿Está seguro de que quiere restablecer la memoria de traducción?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Al reiniciar la memoria de traducción se borrarán todas las traducciones " +"almacenadas. Esta operación no se puede deshacer." + +msgid "Cancel" +msgstr "Cancelar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Los extractores de código fuente se usan para encontrar los mensajes " +"traducibles en los archivos de código fuente y extraerlos para permitir su " +"traducción." + +msgid "New" +msgstr "Nuevo" + +msgid "Edit" +msgstr "Editar" + +msgid "Delete extractor" +msgstr "Eliminar extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "¿Realmente quiere eliminar el extractor «%s»?" + +msgid "Extractors" +msgstr "Extractores" + +msgid "Accounts" +msgstr "Cuentas" + +msgid "Automatically check for updates" +msgstr "Buscar actualizaciones automáticamente" + +msgid "Include beta versions" +msgstr "Incluir versiones beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Las versiones beta contienen las funcionalidades y mejoras más recientes, " +"pero pueden resultar menos estables." + +msgid "Updates" +msgstr "Actualizaciones" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Estos valores afectan el formato interno de los archivos PO. Ajústelos si " +"usted tiene requisitos específicos; por ejemplo, debido al control de " +"versiones." + +msgid "Line endings:" +msgstr "Finales de las líneas:" + +msgid "Unix (recommended)" +msgstr "Unix (recomendado)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Ajustar en:" + +msgid "Preserve formatting of existing files" +msgstr "Conservar el formato de los archivos existentes" + +msgid "Advanced" +msgstr "Avanzadas" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferencias de %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastre y suelte carpetas aquí\n" +"\n" +"o use el botón +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastre y suelte carpetas aquí\n" +"\n" +"o use el botón +" + +msgid "Add Folders..." +msgstr "Añadir carpetas…" + +msgid "Add folders..." +msgstr "Añadir carpetas…" + +msgid "Add Files..." +msgstr "Añadir archivos..." + +msgid "Add files..." +msgstr "Añadir archivos..." + +msgid "Add Wildcard..." +msgstr "Añadir comodín…" + +msgid "Add wildcard..." +msgstr "Añadir comodín…" + +msgid "Paths" +msgstr "Rutas" + +msgid "Excluded paths" +msgstr "Rutas excluidas" + +msgid "Additional keywords" +msgstr "Palabras clave adicionales" + +msgid "Name of the project the translation is for" +msgstr "El nombre del proyecto al que se destina esta traducción" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p. ej., nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomendado)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Guarde el archivo primero. No se podrá editar esta sección hasta que lo haga." + +msgid "Comment:" +msgstr "Comentario:" + +msgid "OK" +msgstr "Aceptar" + +msgid "C&lear" +msgstr "&Vaciar" + +msgid "Clear the comment" +msgstr "Borrar el comentario" + +msgid "Create new translations project" +msgstr "Crear proyecto de traducción nuevo" + +msgid "Edit the project" +msgstr "Editar el proyecto" + +msgid "Delete the project" +msgstr "Eliminar el proyecto" + +msgid "Update all" +msgstr "Actualizar todo" + +msgid "Update all catalogs in the project" +msgstr "Actualizar todos los catálogos del proyecto" + +msgid "Edit project" +msgstr "Editar proyecto" + +msgid "Project name:" +msgstr "Nombre del proyecto:" + +msgid "Browse" +msgstr "Examinar" + +msgid "Add directory to the list" +msgstr "Añadir carpeta a la lista" + +msgid "&New..." +msgstr "&Nuevo…" + +msgid "New from &POT/PO file..." +msgstr "Nueva desde archivo &POT/PO…" + +msgid "New From &POT/PO File..." +msgstr "Nueva desde archivo &POT/PO…" + +msgid "&Open..." +msgstr "&Abrir…" + +msgid "Open Recent" +msgstr "Abrir recientes" + +msgid "Open from Crowdin..." +msgstr "Abrir desde Crowdin…" + +msgid "Open From Crowdin..." +msgstr "Abrir desde Crowdin..." + +msgid "&Close" +msgstr "&Cerrar" + +msgid "&Save" +msgstr "&Guardar" + +msgid "Save &as..." +msgstr "G&uardar como…" + +msgid "Save &As..." +msgstr "G&uardar como…" + +msgid "Compile to MO..." +msgstr "Compilar en MO…" + +msgid "E&xport as HTML..." +msgstr "E&xportar a HTML…" + +msgid "Check for updates..." +msgstr "Buscar actualizaciones…" + +msgid "&Preferences..." +msgstr "&Preferencias…" + +msgid "Catalogs &manager" +msgstr "&Gestor de catálogos" + +msgid "Catalogs &Manager" +msgstr "&Gestor de catálogos" + +msgid "E&xit" +msgstr "&Salir" + +msgid "Quit" +msgstr "Salir" + +msgid "Copy from singular" +msgstr "Copiar del singular" + +msgid "Copy From Singular" +msgstr "Copiar del singular" + +msgid "Translation is &fuzzy" +msgstr "Traducción &provisional" + +msgid "Translation Is &Fuzzy" +msgstr "Traducción &provisional" + +msgid "Edit &comment" +msgstr "Editar &comentario" + +msgid "Edit &Comment" +msgstr "Editar &comentario" + +msgid "Suggestions" +msgstr "Sugerencias" + +msgid "&Show references" +msgstr "&Mostrar referencias" + +msgid "&Show References" +msgstr "&Mostrar referencias" + +msgid "&Find..." +msgstr "&Buscar…" + +msgid "Replace..." +msgstr "Reemplazar..." + +msgid "Find next" +msgstr "Buscar siguiente" + +msgid "Find previous" +msgstr "Buscar anterior" + +msgid "Find and Replace..." +msgstr "Buscar y reemplazar..." + +msgid "Find Next" +msgstr "Buscar siguiente" + +msgid "Find Previous" +msgstr "Buscar anterior" + +msgid "&Preferences" +msgstr "&Preferencias" + +msgid "Display entry &IDs" +msgstr "Mostrar &identificadores de entradas" + +msgid "Display Entry &IDs" +msgstr "Mostrar &identificadores de entradas" + +msgid "Sort by &file order" +msgstr "Ordenar por &archivo" + +msgid "Sort by &File Order" +msgstr "Ordenar por &archivo" + +msgid "Sort by &source" +msgstr "Ordenar por &origen" + +msgid "Sort by &Source" +msgstr "Ordenar por &origen" + +msgid "Sort by &translation" +msgstr "Ordenar por &traducción" + +msgid "Sort by &Translation" +msgstr "Ordenar por &traducción" + +msgid "&Group by context" +msgstr "A&grupar por contexto" + +msgid "&Group By Context" +msgstr "A&grupar por contexto" + +msgid "Entries with errors first" +msgstr "Primero las entradas con errores" + +msgid "Entries with Errors First" +msgstr "Primero las entradas con errores" + +msgid "&Untranslated entries first" +msgstr "Entradas &sin traducir primero" + +msgid "&Untranslated Entries First" +msgstr "Entradas &sin traducir primero" + +msgid "Show sidebar" +msgstr "Mostrar barra lateral" + +msgid "Show status bar" +msgstr "Mostrar barra de estado" + +msgid "C&atalog" +msgstr "&Catálogo" + +msgid "&Update from sources" +msgstr "Act&ualizar desde fuentes" + +msgid "&Update from Sources" +msgstr "&Actualizar desde fuentes" + +msgid "Update from &POT file..." +msgstr "Actualizar desde archivo &POT…" + +msgid "Update from &POT File..." +msgstr "Actualizar desde archivo &POT…" + +msgid "Sync with Crowdin" +msgstr "Sincronizar con Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Cubrir traducciones faltantes a partir de M&T…" + +msgid "Fill Missing Translations from &TM..." +msgstr "Cubrir traducciones faltantes a partir de M&T…" + +msgid "&Purge deleted translations" +msgstr "&Purgar traducciones sin usar" + +msgid "&Purge Deleted Translations" +msgstr "&Purgar traducciones sin usar" + +msgid "&Validate translations" +msgstr "&Validar traducciones" + +msgid "&Validate Translations" +msgstr "&Validar traducciones" + +msgid "&Properties..." +msgstr "&Propiedades…" + +msgid "&Done and next" +msgstr "&Hecho, siguiente" + +msgid "&Done and Next" +msgstr "&Hecho, siguiente" + +msgid "&Previous translation" +msgstr "Traducción &anterior" + +msgid "&Previous Translation" +msgstr "Traducción &anterior" + +msgid "&Next translation" +msgstr "Traducción &siguiente" + +msgid "&Next Translation" +msgstr "Traducción &siguiente" + +msgid "P&revious unfinished" +msgstr "Ante&rior sin terminar" + +msgid "P&revious Unfinished" +msgstr "Ante&rior sin terminar" + +msgid "Ne&xt unfinished" +msgstr "Siguien&te sin terminar" + +msgid "Ne&xt Unfinished" +msgstr "Siguien&te sin terminar" + +msgid "Previous plural form" +msgstr "Forma plural anterior" + +msgid "Previous Plural Form" +msgstr "Forma plural anterior" + +msgid "Next plural form" +msgstr "Forma plural siguiente" + +msgid "Next Plural Form" +msgstr "Forma plural siguiente" + +msgid "&Online help" +msgstr "&Ayuda en línea" + +msgid "&Online Help" +msgstr "&Ayuda en línea" + +msgid "&GNU gettext manual" +msgstr "Manual de &Gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual de &GNU gettext" + +msgid "&About Poedit" +msgstr "A&cerca de Poedit" + +msgid "&About" +msgstr "A&cerca de" + +msgid "Extractor setup" +msgstr "Configuración de extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista de extensiones separadas por punto y coma (p. ej., *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Ejecución:" + +msgid "Command to extract translations:" +msgstr "Orden para extraer las traducciones:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Esta orden se utiliza para abrir el extractor.\n" +"%o expande el nombre del archivo de salida, %K muestra\n" +"las palabras clave, %F enlista los archivos de entrada y\n" +"%C define el conjunto de caracteres (vea abajo)." + +msgid "An item in keywords list:" +msgstr "Un elemento de la lista de palabras clave:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Esto se añadirá a la línea de órdenes una vez por\n" +"cada palabra clave. %k contiene la palabra clave." + +msgid "An item in input files list:" +msgstr "Un elemento de la lista de archivos de entrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Esto se añadirá a la línea de órdenes una vez por cada\n" +"archivo de entrada. %f se expande al nombre del archivo." + +msgid "Source code charset:" +msgstr "Conjunto de caracteres del código fuente:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Esto se adjuntará a la línea de órdenes solo si se proporcionó\n" +"el conjunto de caracteres del origen. %c expande al valor del conjunto." + +msgid "Catalog properties" +msgstr "Propiedades del catálogo" + +msgid "Project name and version:" +msgstr "Nombre del proyecto y versión:" + +msgid "Plural Forms:" +msgstr "Formas plurales:" + +msgid "Use default rules for this language" +msgstr "Usar reglas predeterminadas de este idioma" + +msgid "Use custom expression" +msgstr "Usar una expresión personalizada" + +msgid "Learn about plural forms" +msgstr "Más información sobre formas plurales" + +msgid "Charset:" +msgstr "Conjunto de caracteres:" + +msgid "Team:" +msgstr "Equipo:" + +msgid "Team's email address:" +msgstr "Dirección de correo e. del equipo:" + +msgid "Translation properties" +msgstr "Propiedades de traducción" + +msgid "Sources paths" +msgstr "Rutas de fuentes" + +msgid "Extract text from source files in the following directories:" +msgstr "" +"Extraer textos de archivos de código fuente en las carpetas siguientes:" + +msgid "Base path:" +msgstr "Directorio raíz:" + +msgid "Sources keywords" +msgstr "Palabras clave originales" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Usar estas palabras clave (nombres de funciones) para reconocer mensajes\n" +"traducibles en los archivos fuente:" + +msgid "Learn about gettext keywords" +msgstr "Más información sobre palabras clave de gettext" + +msgid "Update summary" +msgstr "Resumen de la actualización" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Estas cadenas aparecen en los archivos fuente pero no están\n" +"en el catálogo. Poedit los añadirá ahora al catálogo." + +msgid "New strings" +msgstr "Cadenas nuevas" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Estas cadenas ya no se encuentran en los archivos\n" +"fuente. Poedit las eliminará del catálogo." + +msgid "Obsolete strings" +msgstr "Cadenas obsoletas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nuevas, 0 obsoletas)" + +msgid "Open" +msgstr "Abrir" + +msgid "Save catalog" +msgstr "Guardar catálogo" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Buscar errores en la traducción" + +msgid "Update" +msgstr "Actualizar" + +msgid "Update catalog - synchronize it with sources" +msgstr "Actualizar catálogo: sincronizarlo con los orígenes" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Activado si la cadena seleccionada tiene una traducción provisional" + +msgid "Show or hide the sidebar" +msgstr "Mostrar u ocultar la barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texto fuente anterior:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"El antiguo texto fuente (antes de que cambiara durante la actualización) al " +"que corresponde la traducción aproximada (fuzzy)." + +msgid "Notes for translators:" +msgstr "Notas para traductores:" + +msgid "Add comment" +msgstr "Añadir comentario" + +msgid "Add Comment" +msgstr "Añadir comentario" + +msgid "Translation suggestions:" +msgstr "Sugerencias de traducción:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "No se hallaron coincidencias" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "No se hallaron coincidencias" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Esta cadena se encontró en la memoria de traducción de Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nuevas: %i, obsoletas: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importando las traducciones: %d" + +msgid "Poedit Update" +msgstr "Actualización de Poedit" + +msgid "Preparing migration..." +msgstr "Preparando la migración…" + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estado de salida de migración: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit necesita convertir la memoria de traducciones a un formato nuevo." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Debe realizar esto antes de iniciar Poedit. Puede tomar algunos minutos si " +"ha almacenado muchas traducciones, pero por lo general el proceso es rápido." + +msgid "Proceed" +msgstr "Continuar" + +msgid "Translation memory migration failed." +msgstr "Falló la migración de la memoria de traducción." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"No se pudieron migrar los datos de la memoria de traducción. El error fue:\n" +"\n" +"%s\n" +"Envíe un mensaje (en inglés) a help@poedit.net y le ayudaremos a corregirlo." + +msgid "Cannot create temporary directory." +msgstr "No se puede crear la carpeta temporal." + +msgid "Welcome to Poedit" +msgstr "Le damos la bienvenida a Poedit" + +msgid "Edit a translation" +msgstr "Editar una traducción" + +msgid "Open an existing PO file and edit the translation." +msgstr "Abrir un archivo PO existente y editar la traducción." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Tomar un archivo PO o POT existente y crear una traducción a partir de este." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Colaborar con una traducción en Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Descargue un archivo de un proyecto de Crowdin, tradúzcalo y sincronice sus " +"cambios." + +msgid "What is Crowdin?" +msgstr "¿Qué es Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "No hay traducciones. Eso es inusual." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Las entradas traducibles no se añaden manualmente en el sistema Gettext, " +"sino que se extraen\n" +"automáticamente del código fuente. Así se mantienen actualizadas y " +"precisas.\n" +"Los traductores normalmente emplean plantillas de PO (POT) que proporcionan " +"los desarrolladores." + +msgid "(Learn more about GNU gettext)" +msgstr "(Más información sobre GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"La manera más simple de rellenar este catálogo es actualizarlo desde un POT:" + +msgid "Update from POT" +msgstr "Actualizar desde POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Tomar las cadenas traducibles desde una plantilla POT existente." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"También puede extraer las cadenas traducibles directamente del código fuente:" + +msgid "Extract from sources" +msgstr "Extraer desde código fuente" + +msgid "Configure source code extraction in Properties." +msgstr "Configure la extracción de código fuente en Propiedades." + +msgid "Sync" +msgstr "Sincronización" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar la traducción con Crowdin" diff --git a/locales/et.mo b/locales/et.mo new file mode 100644 index 0000000000000000000000000000000000000000..20657ae498328b4bda275a0f33d425cbe8d83c95 GIT binary patch literal 23453 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\n" +"Language-Team: Estonian\n" +"Language: et_EE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: et\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Selle teate peitmine" + +msgid "Don't Show Again" +msgstr "Ära enam näita" + +msgid "Don't show again" +msgstr "Rohkem mitte näidata" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Sobimatu päis: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Katkine kataloogi fail: msgstr vormi on kasutatud koos msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Katkine kataloogi fail: msgstr vorm ilma msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Mõned vead tekkisid kataloogi laadimisel. Mõned andmed on puudu või vigase " +"tulemusega." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "EI saadud laadida faili %s, see on tugevasti vigane." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Fail '%s' on loetav-ainult ja seda ei suudetud salvestada.\n" +"Palun salvesta erineva nime all." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Faili %s pole võimalik salvestada." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Faili kauni vormindusega tekkis viga (kuid see salvestati edukalt)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "Tõrge kataloogi salvestamisel" + +msgid "PO Translation Files" +msgstr "PO tõlkefailid" + +msgid "POT Translation Templates" +msgstr "POT tõlkemallid" + +msgid "All Translation Files" +msgstr "Kõik tõlkefailid" + +msgid "Merging differences..." +msgstr "Ühendan erinevused..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' pole korrektne POT fail." + +msgid "(Use default language)" +msgstr "(Kasuta vaikekeelt)" + +msgid "Select your preferred language" +msgstr "Vali enda meeliskeel" + +msgid "Language selection" +msgstr "Keelevalik" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Selle muudatuse jõustumiseks peab Poedit-i taaskäivitama." + +msgid "Downloading translations is disabled in this project." +msgstr "" + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "Logi sisse" + +msgid "Sign in" +msgstr "Logi sisse" + +msgid "Sign Out" +msgstr "Logi Välja" + +msgid "Sign out" +msgstr "Logi välja" + +msgid "Waiting for authentication…" +msgstr "Autentimise ootamine…" + +msgid "Updating user information…" +msgstr "Kasutaja info uuendamine…" + +msgid "Signed in as:" +msgstr "Sisse logitud kasutajana:" + +msgid "Learn More About Crowdin" +msgstr "" + +msgid "Learn more about Crowdin" +msgstr "" + +msgid "Sign in to Crowdin" +msgstr "" + +msgid "Open Crowdin translation" +msgstr "Ava Crowdin tõlge" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Keel:" + +msgid "File:" +msgstr "Fail:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "" + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "&Kopeeri" + +msgid "Learn more" +msgstr "Uuri lähemalt" + +msgid "Learn More" +msgstr "Uuri lähemalt" + +#, c-format +msgid "Failed command: %s" +msgstr "Käsuviga: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Viga teksti ühildumisel antud kataloogis." + +msgid "Scanning files..." +msgstr "Skaneerin faile..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Liigendan %s faile..." + +msgid "Failed to load extracted catalog." +msgstr "Viga kataloogi lahtipakkimisel." + +msgid "&Help" +msgstr "A&bi" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "Tõrge faili avamisel" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "ajutisi faile ei kustutata (silumiseks)" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "Kataloogi avamine" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Pole faili '%s'." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Programmist %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versioon %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit on lihtne tõlkimise abivahend." + +msgid "Catalogs Manager" +msgstr "Kataloogide haldamine" + +msgid "Check for Updates..." +msgstr "Uuenduste kontroll..." + +msgid "&Edit" +msgstr "&Redigeerimine" + +msgid "Undo" +msgstr "Taasta" + +msgid "Redo" +msgstr "Korda" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "Kustuta" + +msgid "Spelling and Grammar" +msgstr "" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "" + +msgid "Substitutions" +msgstr "Asendused" + +msgid "Show Substitutions" +msgstr "Näita asendusi" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "Nutikad jutumärkid" + +msgid "Smart Dashes" +msgstr "Nutikad mõttekriipsud" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "Teksti asendamine" + +msgid "Transformations" +msgstr "Teisendused" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "Suure algus tähega" + +msgid "Speech" +msgstr "Kõne" + +msgid "Start Speaking" +msgstr "Alusta rääkimist" + +msgid "Stop Speaking" +msgstr "Lõpeta rääkimine" + +msgid "&View" +msgstr "&Vaade" + +msgid "Enter Full Screen" +msgstr "Aktiveeri täisekraan" + +msgid "Window" +msgstr "Aken" + +msgid "Minimize" +msgstr "Minimeeri" + +msgid "Zoom" +msgstr "Suurendus" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "PO tõlge" + +msgid "The file cannot be opened." +msgstr "Faili ei saa avada." + +msgid "Invalid file" +msgstr "Vigane fail" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "&Võta tagasi" + +msgid "&Redo" +msgstr "&Tee uuesti" + +msgid "Cu&t" +msgstr "Lõik&a" + +msgid "Cut" +msgstr "Lõika" + +msgid "Copy" +msgstr "Kopeeri" + +msgid "&Paste" +msgstr "&Aseta" + +msgid "Paste" +msgstr "Aseta" + +msgid "&Delete" +msgstr "K&ustuta" + +msgid "Select &All" +msgstr "V&ali kõik" + +msgid "Select All" +msgstr "Vali kõik" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl +" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Üles" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Alla" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Sa saad Poedit aknasse kukutada vaid ühe faili." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fail '%s' pole sõnumikataloog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fail" + +msgid "&Go" +msgstr "&Liikumine" + +msgid "Source text:" +msgstr "Originaaltekst:" + +msgid "Singular:" +msgstr "Ainsus:" + +msgid "Plural:" +msgstr "Mitmus:" + +msgid "Translation:" +msgstr "Tõlge:" + +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 "" + +msgid "Create New Translation" +msgstr "Loo uus tõlge" + +msgid "Create new translation" +msgstr "Loo uus tõlge" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "Paigalda" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Kataloogi on muudetud. Kas soovid muudatused salvestada?" + +msgid "Save changes" +msgstr "Salvesta muudatused" + +msgid "Your changes will be lost if you don't save them." +msgstr "Tehtud muudatused lähevad kaotsi, kui neid ei salvestata." + +msgid "Save" +msgstr "Salvesta" + +msgid "Don't save" +msgstr "Ära salvesta" + +msgid "Don't Save" +msgstr "Ära salvesta" + +msgid "Save as..." +msgstr "Salvesta kui..." + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "Ekspordi kui..." + +msgid "HTML Files" +msgstr "HTML-failid" + +msgid "Open catalog template" +msgstr "Kataloogimalli avamine" + +msgid "Updating catalog" +msgstr "Kataloogi uuendamine" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "Uuendamine ebaõnnestus" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Kirjed kataloogis on tõenäoliselt vigased." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Kataloogi uuendamine nurjus. Täpsustuse jaoks klõpsa nupule \"Üksikasjad >>" +"\"." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Tõlkest leiti %d probleem." +msgstr[1] "Tõlkest leiti %d probleemi." + +msgid "Validation results" +msgstr "Kontrolli tulemused" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Vigadega tekstid märgiti loendis punasega. Vea üksikasju kuvatakse teksti " +"märkimisel." + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Fail salvestati edukalt, kuid seda polnud võimalik kompileerida MO " +"vormingusse ning kasutusele võtta." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "Tõlgetest ei leitud vigu." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "Tõlge on kasutamiseks valmis." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "Määra keel" + +msgid "Set language" +msgstr "Määra keel" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "Paranda keel" + +msgid "Fix language" +msgstr "Paranda keel" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Kataloogis on tekste mitmusvormidega, kuid sel pole Plural-Forms päis " +"seadistatud." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Selle kataloogi tekstide mitmusvormide arv erineb Plural-Forms päises " +"sätestatust" + +msgid "Required header Plural-Forms is missing." +msgstr "Vajalik päis Plural-Forms (mitmusvormid) puudub." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Süntaksi viga Plural-Forms päises (\"%s\")." + +msgid "Fix the Header" +msgstr "Paranda päis" + +msgid "Fix the header" +msgstr "Paranda päis" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Vaata üle" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Viga sõnumi laadimisel failis '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "Jäänud: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d viga" +msgstr[1] "%d viga" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d kirje" +msgstr[1] "%d kirjet" + +msgid " (unsaved)" +msgstr " (salvestamata)" + +msgid " (modified)" +msgstr " (muudetud)" + +msgid "Go" +msgstr "Mine" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Tõlkemälu uuendamine ebaõnnestus: %s" + +msgid "Purge deleted translations" +msgstr "Kustutatud tõlgete puhastamine" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Kas tahad eemaldada tõlked, mida enam ei kasutata?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Kui sa jätkad puhastamisega, eemaldatakse kõik kustutatuks märgitud tõlked " +"lõplikult. Kui need kunagi uuesti lisatakse, pead need uuesti tõlkima." + +msgid "Keep" +msgstr "Säilita" + +msgid "Purge" +msgstr "Puhasta" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "Tõlkimine" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" + +msgid "Copy from source text" +msgstr "Lähteteksti kopeerimine" + +msgid "Copy from Source Text" +msgstr "Kopeeri lähtetekst" + +msgid "Clear translation" +msgstr "Tõlke eemaldamine" + +msgid "Clear Translation" +msgstr "Eemalda tõlge" + +msgid "Edit comment" +msgstr "Kommentaari muutmine" + +msgid "Edit Comment" +msgstr "Kommentaari muutmine" + +msgid "References:" +msgstr "Viited:" + +msgid "Everything" +msgstr "Kõik" + +#, c-format +msgid "Form %i" +msgstr "%i vorm" + +msgid "Singular" +msgstr "Ainsus" + +msgid "Zero" +msgstr "Null" + +msgid "One" +msgstr "Üks" + +msgid "Two" +msgstr "Kaks" + +msgid "Plural" +msgstr "Mitmus" + +msgid "Other" +msgstr "Muu" + +msgid "&Bookmarks" +msgstr "&Järjehoidjad" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "Peida külgriba" + +msgid "Show Sidebar" +msgstr "Näita külgriba" + +msgid "Hide Status Bar" +msgstr "Peida olekuriba" + +msgid "Show Status Bar" +msgstr "Näita olekuriba" + +msgid "Source text" +msgstr "Originaaltekst" + +msgid "Translation" +msgstr "Tõlge" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Lähtetekst — %s" + +msgid "unknown language" +msgstr "tundmatu keel" + +#, c-format +msgid "Translation — %s" +msgstr "Tõlge — %s" + +msgid "Error:" +msgstr "Viga:" + +msgid "Source file" +msgstr "Lähtefail" + +msgid "Source file occurrence:" +msgstr "Lähtefaili esinemine:" + +msgid "Open in Editor" +msgstr "Ava redaktoris" + +msgid "Open in editor" +msgstr "Ava redaktoris" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Tõrge faili %s avamisel!" + +msgid "Find" +msgstr "Leia" + +msgid "Replace" +msgstr "Asenda" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Valikud" + +msgid "Ignore case" +msgstr "Ignoreeri tähesuurust" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "Ainult terved sõnad" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "Otsitakse kommentaaridest" + +msgid "Close" +msgstr "Sulge" + +msgid "Replace All" +msgstr "Asenda kõik" + +msgid "Replace all" +msgstr "Asenda kõik" + +msgid "< &Previous" +msgstr "< &Eelmine" + +msgid "&Next >" +msgstr "&Järgmine >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Programmi pole võimalik käivitada: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "Tõlkekeel" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Kataloogihaldur" + +msgid "Catalog" +msgstr "Kataloog" + +msgid "Total" +msgstr "Kokku" + +msgid "Untrans" +msgstr "Tõlkimata" + +msgid "Fuzzy" +msgstr "Kahtlane" + +msgid "Bad Tokens" +msgstr "Halvad võtmed" + +msgid "Last modified" +msgstr "Viimati muudetud" + +msgid "Select directory" +msgstr "Kataloogi valimine" + +msgid "Directories:" +msgstr "Kataloogid:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Kas sa soovid selle projekti kustutada?" + +msgid "Confirmation" +msgstr "Kinnitus" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Kas sa soovid tõesti massuuendada\n" +"kõiki katalooge selles projektis?" + +msgid "Information about the translator" +msgstr "Info tõlkija kohta" + +msgid "Name:" +msgstr "Nimi:" + +msgid "Your Name" +msgstr "Sinu nimi" + +msgid "Email:" +msgstr "E-post:" + +msgid "your_email@example.com" +msgstr "sinu_epost@domeen.ee" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "Muutmine" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "Kokkuvõte kataloogi uuendamise järel" + +msgid "Check spelling" +msgstr "Kontrolli õigekirja" + +msgid "Always change focus to text input field" +msgstr "Fookus on alati tekstisisestusväljal" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ära luba tekstinimekirjal fookust haarata. Kui sisse lülitatud, pead " +"kasutama klaviatuuriga navigeerimiseks Ctrl-nooli, kuid teksti võib " +"sisestada ka vahetult, ilma Tab-klahviga fookust vahetamata." + +msgid "Appearance" +msgstr "Välimus" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "Muuda kasutajaliidese keelt" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "Üldine" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Lähtesta" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "Tõlkemälu" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Katkesta" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Uus" + +msgid "Edit" +msgstr "Muuda" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "Kontod" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "Uuendused" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "Realõpud:" + +msgid "Unix (recommended)" +msgstr "Unix (soovituslik)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Reamurdmine:" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "Lisavalikud" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "Lisa kaustad..." + +msgid "Add folders..." +msgstr "Lisa kaustad..." + +msgid "Add Files..." +msgstr "Lisa failid..." + +msgid "Add files..." +msgstr "Lisa failid..." + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Rajad" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (soovituslik)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "Kommentaar:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Tühjenda" + +msgid "Clear the comment" +msgstr "Tühjenda kommentaar" + +msgid "Create new translations project" +msgstr "Loo uus tõlkeprojekt" + +msgid "Edit the project" +msgstr "Projekti muutmine" + +msgid "Delete the project" +msgstr "Kustuta projekt" + +msgid "Update all" +msgstr "Uuenda kõik" + +msgid "Update all catalogs in the project" +msgstr "Uuenda kõiki projekti katalooge" + +msgid "Edit project" +msgstr "Projekti muutmine" + +msgid "Project name:" +msgstr "Projekti nimetus:" + +msgid "Browse" +msgstr "Lehitse" + +msgid "Add directory to the list" +msgstr "Lisa kataloog nimistusse" + +msgid "&New..." +msgstr "&Uus..." + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&Avamine..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "Su&lge" + +msgid "&Save" +msgstr "&Salvesta" + +msgid "Save &as..." +msgstr "Salvesta &kui..." + +msgid "Save &As..." +msgstr "Salvesta &kui..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&Eelistused..." + +msgid "Catalogs &manager" +msgstr "&Kataloogihaldur" + +msgid "Catalogs &Manager" +msgstr "&Kataloogihaldur" + +msgid "E&xit" +msgstr "&Välju" + +msgid "Quit" +msgstr "Lõpeta" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Tõlge on k&ahtlane" + +msgid "Translation Is &Fuzzy" +msgstr "Tõlge on k&ahtlane" + +msgid "Edit &comment" +msgstr "Redigeeri ko&mmentaari" + +msgid "Edit &Comment" +msgstr "Muuda &kommentaari" + +msgid "Suggestions" +msgstr "Soovitused" + +msgid "&Show references" +msgstr "&Näita viiteid" + +msgid "&Show References" +msgstr "&Näita viiteid" + +msgid "&Find..." +msgstr "&Otsi..." + +msgid "Replace..." +msgstr "Asenda..." + +msgid "Find next" +msgstr "Leia järgmine" + +msgid "Find previous" +msgstr "Leia eelmine" + +msgid "Find and Replace..." +msgstr "Otsi ja asenda..." + +msgid "Find Next" +msgstr "Leia järgmine" + +msgid "Find Previous" +msgstr "Leia eelmine" + +msgid "&Preferences" +msgstr "&Eelistused" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "Sortimine &failide järgi" + +msgid "Sort by &File Order" +msgstr "Sortimine &failide järgi" + +msgid "Sort by &source" +msgstr "Sortimine &lähtekoodi järgi" + +msgid "Sort by &Source" +msgstr "Sortimine &lähtekoodi järgi" + +msgid "Sort by &translation" +msgstr "Sortimine &tõlke järgi" + +msgid "Sort by &Translation" +msgstr "Sortimine &tõlke järgi" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&Tõlkimata tekstid eespool" + +msgid "&Untranslated Entries First" +msgstr "Tõlkimata tekstid &eespool" + +msgid "Show sidebar" +msgstr "Näita külgriba" + +msgid "Show status bar" +msgstr "Näita olekuriba" + +msgid "C&atalog" +msgstr "&Kataloog" + +msgid "&Update from sources" +msgstr "&Uuenda lähtekoodist" + +msgid "&Update from Sources" +msgstr "&Uuenda lähtekoodist" + +msgid "Update from &POT file..." +msgstr "Uuendus &POT failist..." + +msgid "Update from &POT File..." +msgstr "Uuendus &POT failist..." + +msgid "Sync with Crowdin" +msgstr "Sünkroonimine Crowdiniga" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&Puhasta kustutatud tõlked" + +msgid "&Purge Deleted Translations" +msgstr "&Puhasta kustutatud tõlgetest" + +msgid "&Validate translations" +msgstr "&Kontrolli tõlkeid" + +msgid "&Validate Translations" +msgstr "&Kontrolli tõlkeid" + +msgid "&Properties..." +msgstr "&Eelistused..." + +msgid "&Done and next" +msgstr "&Valmis, järgmine" + +msgid "&Done and Next" +msgstr "&Valmis, järgmine" + +msgid "&Previous translation" +msgstr "&Eelmine tõlge" + +msgid "&Previous Translation" +msgstr "&Eelmine tõlge" + +msgid "&Next translation" +msgstr "&Järgmine tõlge" + +msgid "&Next Translation" +msgstr "&Järgmine tõlge" + +msgid "P&revious unfinished" +msgstr "Eel&mine lõpetamata" + +msgid "P&revious Unfinished" +msgstr "Eel&mine lõpetamata" + +msgid "Ne&xt unfinished" +msgstr "Järgmine &lõpetamata" + +msgid "Ne&xt Unfinished" +msgstr "Järgmine &lõpetamata" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Veebiabi" + +msgid "&Online Help" +msgstr "&Veebiabi" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "&Poeditist" + +msgid "&About" +msgstr "&Programmist" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Laiendite nimistu, eraldaja semikoolon (nt *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Käivitamine:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Liige võtmesõnade nimistus:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"See lisatakse käsureale üks kord iga võtmesõna\n" +"kohta. %k asendatakse võtmesõnaga." + +msgid "An item in input files list:" +msgstr "Liige sisendfailide nimistus:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"See lisatakse käsureale üks kord iga sisendfaili\n" +"kohta. %f asendatakse sisendfaili nimega." + +msgid "Source code charset:" +msgstr "Lähtekoodi märgistik:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"See lisatakse käsureale ainult siis, kui on toodud algteksti\n" +"märgistik. %c asendatakse märgistiku väärtusega." + +msgid "Catalog properties" +msgstr "Kataloogi omadused" + +msgid "Project name and version:" +msgstr "Projekti nimi ja versioon:" + +msgid "Plural Forms:" +msgstr "Mitmuse vormid:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "Kasuta kohandatud väljendeid" + +msgid "Learn about plural forms" +msgstr "Mitmuse vormide kohta lähemalt uurimine" + +msgid "Charset:" +msgstr "Märgistik:" + +msgid "Team:" +msgstr "Meeskond:" + +msgid "Team's email address:" +msgstr "Meeskonna e-postiaadress:" + +msgid "Translation properties" +msgstr "Tõlke omadused" + +msgid "Sources paths" +msgstr "Otsingurajad" + +msgid "Extract text from source files in the following directories:" +msgstr "Teksti otsitakse järgnevates kataloogides asuvast lähtekoodist:" + +msgid "Base path:" +msgstr "Baasrada:" + +msgid "Sources keywords" +msgstr "Lähtekoodi võtmesõnad" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Kasuta neid võtmesõnu (funktsioonide nimesid) leidmaks lähtekoodist\n" +"tõlgitavaid sõnesid:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "Uuendamise kokkuvõte" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Need tekstid leiti lähtekoodist, kuid ei ole kataloogis.\n" +"Poedit lisab need nüüd kataloogi." + +msgid "New strings" +msgstr "Uued tekstid" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Need tekstid pole enam lähtekoodis.\n" +"Poedit eemaldab need nüüd kataloogist." + +msgid "Obsolete strings" +msgstr "Iganenud tekstid" + +msgid "(0 new, 0 obsolete)" +msgstr "(uusi 0, iganenuid 0)" + +msgid "Open" +msgstr "Ava" + +msgid "Save catalog" +msgstr "Salvesta kataloog" + +msgid "Validate" +msgstr "Kontrolli" + +msgid "Check for errors in the translation" +msgstr "Tõlkest vigade otsimine" + +msgid "Update" +msgstr "Uuenda" + +msgid "Update catalog - synchronize it with sources" +msgstr "Uuenda kataloog - sünkroniseeri lähtekoodiga" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Märgitud, kui valitud tekst sisaldab kahtlast tõlget" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Märkused tõlkijate jaoks:" + +msgid "Add comment" +msgstr "Lisa kommentaar" + +msgid "Add Comment" +msgstr "Lisa kommentaar" + +msgid "Translation suggestions:" +msgstr "Tõlkesoovitused:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Vasteid ei leitud" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Vasteid ei leitud" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "Jätka" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "Pole võimalik luua ajutist kataloogi." + +msgid "Welcome to Poedit" +msgstr "" + +msgid "Edit a translation" +msgstr "Muuda tõlget" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "Mis on Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "Sünkroonimine" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/eu.mo b/locales/eu.mo new file mode 100644 index 0000000000000000000000000000000000000000..576609fc4b0203922f8977c589f261138baf82dd GIT binary patch literal 45214 zcmcJY37B0)nfH(EwCp>AdRV%XK)MqGDz-rAB%P!QSs)2ZT;O!yo9;{BzPGtcI^8NF z3gU`@qK*sTf+8x8jtlDOI0`zBjE*z7>x}4(GAcSMu7iHR|NB;*du}J{_&wiupH%-( z)u~hKyVYBDPQHEEUawC09lJ-891ni)kRz43VuD{k3c>Ddr;-?wZ!oNQ2CAs*asd!{LFyEpz660 zRQsPE(nrCAiPym+!RG~hHFyy5yTIeXj|BWOsQP~v@Yf(iocuoE!At#q3hKGOfGfZw zh(9Y}6FiFe^#N}MRqhAD$AcdOH6C9Fp8!4#9t|FNnm^YID&JY4=5rf32yPE}JGejb zZ-VOge+K*ssQkYMH9mVS^L`!*9!xw1b$=;%EO-{Ed>4Tlk1JczXH{+_LDsQs({ymCzAd$@NwYXpz8S?D0+GTgtU@xfvV>K z8h0r8#DJ%PhY(*0>i!l`^^Ax3G^lxhLBLzVBZz+#JPG__i2nlAc<#?2sQhCBo)YjZ zQ1q|?)Oc(GQ}8NK_1y}p9q$0ehxdT$&u2hLF?kTwyd8FClJtU41ohl7sQK9ds{Nb6 zBf;$<{+tlM0TkW64TSWPPlHE+j|4p6sUANG)VvLXYR5M4MsNaD`+p0nJ`tz*d2dkV z>stY8{I-Ikt177SpAV|v z*Mp*~n?ben&7kt#4N_I|X;A$87zR)I4+Yha~j{)xkHJ<+l zZUXl_*ZZ{v)Oc+Jd%?>BUJI(cyFit5KdAA11XTV#hg?qW2P*wA@Nh5%HI8S1YX5M+ zZQ%aI>!9+_g6ijs0=^1V|8EcYUQqM!2~gwznGnApL@g!{fSQl52K+BjAhkFA)0E#aEBjEpl#}Yq$jmw>W zQ1ta=aBnaJHNWElcY+@!{$fyaVtB2$cO>8_sBw8VsOMf3@U;Q&1QB`3M?(B(-~!@% zj-X?}Q$gL|1ond0gKF=4K+WI1pvwI$sQSMKUJZT=)Vw|GJfDwQP~&(ND7t(NsCK;z zTn2s^)I9zW)I9$hRK9}{I-<*y0xkphB|ZddJVrp}+ZeC}D*tSVUk_?L-w3`E{1B*l zTYJ7g{|r#|jfVJ6utxkUkf}_54DJJ-zTW3^5JVItYeBW+MWF8A0IHr_zyrbeg6D!C z2m8T4gn0i3AHN!?@w^sP`|k?)cc9wy0I2eR2&&wlg9m~KZgjdh4pje71~ty7fO~<% zpq@J~#4iLNOZ;L`&yR)sSBCW2fY*XO+`kc&Tzdn!5WE{yJzoVif8Pe@z+ZvtcVknS zUr_a274RjX%DV+T0K7fmdqByJkAlj7Kd5|P0}lbe2a0bW0VOAnxxoAT6!2i;=YlG4 zQ;0t^#HT>DXAayCe11rO38?XV4XEe;8dU#2393K;3aY#xhx@+;PaxiNp^xKYQ01Kw z;%9@05g!iemw+1AEX3>J{=|2J>d!Tx%D)*@e{T!%cY&hAdqB18eo%Dqt&sk+kiO4m zPd_T)so-_wI~UZve+E>!4}wR74~O_ZTfCizfvUe3RC|_zYVS%=<8=YJ4!i_B0(>iY z5O@!$e4h>JUk>R%4C%iGRquXVljIfP5uoVrE#RTxJ3!ITN5CV%?}Cz_zXneQkG#m` z#}Ei6PgTDb^3x4ck&%gB&ABR_f-zWV}5Ydy|cqwZZ z@EhP5IIxYrf;WL0x9@>U{{x81O2(e<{dgOw`9I?sE(b0G7Zbl1JRkfScsaQIneZ-n z8%PyN-?Lb|fmefMNgf6V!F89x+u(KJjo`A&T_1fKlw3_Rf9_0>EXf@pO-S|`b^CD? z)HvJ>icVe!{tCPkJO#X+P8<(@9@Kn16z~yHTd}YJ+?rV_X1G#@X~Pq4Im~}@-9&0@FP(CzW=!Q^Q3@J z1$BQTcoJ9zA*JM%p!)xPP<;M-Q0?D$!rS>cQ2px#Mb|4q)xS01c5ol!GvL19RiNhK zI&eSmCU7nIdhm4cd!Xk1n2O7ZP2g$7w}DK3@-px_;KQKCck&9yX;9^Wee6 z{|$U1_>+JKPkT8_K+XG8LG|z4fER%(zY0o!wFABi6kWbQ;QgS{UBKUiD(}cEy}si? z-9HOF0o)9Ve%s)2;7y?T=RKhM@z3CD@LK^-Zg~16sCk+JHQv{P>etJ`L%}zKYX9A! z>bp1G|0Zbs1S;SDP0x26sC=h^ny<{=B|RZw*M0&o#{J*alR4@|)aK=t#N;2Gef zp!i`~%kA?kzyabnf@<&Ifro*g1rb5XH^3vnbK6dzTfqy6-v+AOpMf`mzX8>*m+tWS zxFz7N-~!U$0gA7`2#U@g21Osg0M7(}52}ApneqN^3OEiPP5M>f;ovQx#{Zq*QQ!x` zBfmYklAna0pbpt^`j7p9_jl?gTZi9|TqJ$3Z>!#Ss5th(8LZq#rW}je}1GReuvy z|85HSj*$LwQ0@5^cqjNHP~&>bvwdFP04n|#P;_-CsCL{3YCiu7RC~S)s-2I3M}vDH z426#a*MQ4FJwFFZ?!N{UzkLPNeEfTe|02X61(%V2=ySattH8~~*MY}@w}PjG9}V|^ z0v=2Jm!R5r$W`91V*;K6YTnKQ)$a8nJ{s;f16~Vio?ZirE^i0b|95~IzxRMk!B2x% zf{%dW^YQ07z8GYRle@svz>}}`eqRKp3G)Cx5quS>cK!`0difYAI{YN4@%SpJ`hEls zf_psQ+kG}Dxo{z<{Fj5`yP1G@fTs|D095_SHU8W(Q1rM4d?r{0RsZKe)&C{17yJsS ze2;=Dc;X8@eI+QmtbiJqHmLD@4rp=-RD0hDitpbKJ`TJORDZq$icTH@_1wNM4D%E4 zlz?Xi+yII`E(g`$N{G*ZdlA1HRDIV5d_5@o`)g3`{5Yt3J_o8j-vE{WVekpyUe|g# zCxQDu2AdarBk4=83v>;Np1upJACHFgV_xL*+z;+U`bJRoTomHt0c+p_(%aw};2Xh( z;Fm!0#qU6k%i-6%yjuW@50`gO*&wc~(S_;{ZPs-Dw8eqg+4*Usf-j;!?XKjdI3LZ+l4ys?z z2UYHiL6!GfQ1bpR@JR3K3m!rIl_C9Y zpvrq6DE_<;R6Fhm#eWZgM}a>DRnNY!@%)bi)sKM?Uk<9=%^`gvq|b)*mxF5mo57pF z4}&Lx>t5^QTnCRK{yb3Sz7{+hyc5*;d=eDj{tKvjegdkUd%>(L!2>|Ga}%ikj)R)N z7O3Z57~;2q8khHi%J)(5P2guk`uJaYy$$dL(q94|3%(2N1MdU-!5@QrfXBU_y(aJp z;OSr!RQ|VvYTqY8_2(bJzX87v-UinFD?!cwGeC`Z z6VyDv5L7>J0QUe7dZ(9nD7Y{2lfhHL#i01+5>WNL2o!z14wPKF1Kc0H3lv>_0PF+r z1@+vIK(+U{yL^70465B5K=D@ws=PLMBzO&|_P!Rp2)r9qdHcM}@Arep5nlX`}n3Q+BT8>n`D0Ne-s2TofV9no z`-uM)LF4$}1o7GFAuc+tGT|8pfT3(M_lhixP}ma-w)UO z)2_cIaV_x*cr5sj;ob}=x$$kVSLs~e6YiY^o)NAu1UGW8O!zl~exD?yy5RR3?thb@ z-+tgfgX;*dBYcGTe-eJewdSBjh`)d3;Nm zp!xY4;c?uHzo!(gmA0JtiwQ3!e3J0bgog-^CEP_gjXYZkXK_7F*o$xqA^z5Iy)X5C zoP_5RL|ghTA^kr<#7FW7*GGkCZVLEf(w7rHN6@e8kW7Hf$n!FS=y@68F_ix%;`ebq z4IV()n=np%72#H{^;_&s!EIfG-CR0rh(-LG=F|Mfm;BAvq`9zcJu9NWYV?lrTct&qBJg z*9kw@1;1YsUJ>qnC*U)|zaf+eV}!d2I|=$7Mmvun>_PaFC)xV+J6!h??kC^9gb##! zf<@t3UB6F%`0eMA99FpZebU}c{A$8Wxt9DK4Ec6|uOy&;lCKi}lc3+;v_n71hA;En z=fNKmM!7zk@F>^%&2g>Y=fQ`;P2iI(#sB;QcopHJq;CNKJ>-8P*FPobcN%HG2KOi2 zLHHlSUW8ACypIiS`2%V3_w{%IUPAaD;cetU7`zI6fN&Pq{{s$y`l*;li9ds&-;cq! z5>6yEi2sOiH9@}_!g|s#CcJ^`32+PHi(F3=UO>>VNmxw!h2Zl+{iFwrzn75yxp42@ z;3eVuec;~`4yIwl;B7qg62jSBpAE_`(C^2Dx7wBexfHmAJjLG!i9eZy--Fi@Mz}tg zurJ{*!bt@E-bpx!aHb-K-;q4?OyX+^lU%BwWPx>j;0% z_3hvnK>eP>^@HFOLH)iF@F4JT>im!=n+>7MeM!HQa1_`5;5Wg?5Jb@5@pW^!4M1CF8jsqWGxUYPVDa218{z1aGNc$Jvx!4STmas6UllDWdS9q@Egpht*i2s53_d?p=kai2#>%o5jF9Y8L zHpBhfz^9XT1wp@42~QyGL3)euhLCRocrfAF-1|GQMp(_YewT6mFhRc~z`p{YMc9+D zlJHN2W1t89uIK&*gqLx>E<95OKSuml;9<%Xe*Z-LK%P62_%Vb5;-4XWg6o4wzXAL- z@k6TEEM|lL;^KX!2j+HR1XY^6Gae;qM6VClr4-6WO06f;qe>w55 zgnPG=o`vhXxn4y0R>*rkxEJkP!TpQ5K7;UFuAfGDD&d_3{jMZDL|8-k5^1LrYFx+P zR^neF@;1V|L*jeEcac5{4u`bu;1FrABIx%@@VDW*4!)7JH-Z}oOSt|o-Aflv)k~G_ zm2znj*X>#}+o8+eQd+LH8nf}DQf|h}*>omrrrRskYPpndZ`7yK)nzbtR zS~^vpsyAi_;sZRJ&XgPF|MfGCM!jJV>%!`-G@I>mI#X#)>{8kGdb?J#x-1h_{i$4) zv|6c^)B1KbrkpP5Z7#6x)atFYTF**!X{_F8l*d|Cb-=SX=jB&l{>TH(bW@|eoeZ@x zMyzjWwBBw7NH^8Xr3$eX_4?#g)|lk}%4(gR^1hYz>Di=jRk>Pj5nENKg;}kXZYb|0 zdmgP>blA#RP3x1s)fKuvFp%`E*|0SoFSlCcNY`hzc2@09n~G_5(i`>mbh=_TU0JW` zftWHnOV>ln+A2l4A+mtoc z&8~qeL_ANUyrWWYH@mANm#21Bxv5c~E;m|`nLpZYjF(d%%u?}r#(R_9E7?GoiZsi; z3(F-&XEXHA---H6dSPKAEulEGTWiX_6&`WAhj508h}KtE8cjyE>z0Fm8OwsmhMmi>86cajN%89 zg-g>~d1i6CG_8*|>!P?t$-?u?Sp&YUL)e)}HZ2eow;_bVw70T2e?&3Tw>HaZsk}XF zSK*$lHr~$0Ra&EbWxLX#w--a7^_gaRW?FBk)^cM}a#pIDw`oky8m)|M)QG@)FQJ9&wr$+5(l?h-4Krdc(eEYHr=8zr@FM}}Z2B}3I}k+LB<3MI95Dt~6O z*=9O6!F)hr^)Z-8Z4mEPYSYXu!oErowY1VIPmz`w3T9FJv zEwlA@+H8l5nXJ}QUCv+D?FX-ZLvQoJtKXPXeIwI|EdS%rK{90u*sV6TiIx}JdmttP;;tzV}MpS5VRzz4e40c%BuBoYvy1&U2Qj*aymAZPBq7y zEu;OCX*Dq>X_eAto@@6dG^wav%^JIw(W;{(;0{-j^GljR6QLCXKQD$VvavB5gPfwn zusEG&qM=_Yeuf4sV5Urmq^hLPNR?sGo|~H;NLSkYv?h>4^=Y#T=y$!w%vEY*)pm(N zilsBD%qDL*t?cum;GznVB`ZZ{Re`kaSc9=g3Y4d&>x~S~%6W_@Jxh6Kd8|zyre(a5 zO(CV4+?uX1z?Hc&mp0N7k#}zS45X{-M#+(YWdsEdYA(;SQ)vk}DhanNp>eNCJzhAekUHig}w1my24vFg7RW`i<7!!1t|s zA=YIE1YwEwv%NAd(dD|9=0lXBI$5!dP{FdGO7b@(fY3ff#1ZM1^)6UU28qEW68lbn#QA9az@eU0FapvoWG|#fRxT!)VPN8%RI^lbvPio`Ah+AqQf+}7wk`#G zkyA(}m=aJE`=Sha)%u>&J)9bOeo0n9(1t2F7wtl5gQY2V1IW}YMyF($bRuM_J$Uu&q%Rwjj2?yom!<`B6~aR^DrBanbs5sa=+T%Z zl2GWz;=Hjm9m=pd#xQ9_5uT1_W0M1US>n^6(u=)(@aj9dvJ~%$W0-iUa#MY#*FyCJ z$#CCJ)^+?vF)>aUuUpoiFY#k*HT_9h;<-`ju_!7n)^)2(Dp~=#T(!)Rsw`3@GbKp; z4^L&4>R>XA=xO-hbak5v-HiS$*OX!lks$x0@uA73Xcq}+XqPPXpqQOOi1{a^A<>?; z)NK{57MV_%(k=;SL^$D@1+0zDxanVwannpE$}G1V*krTKyc%1(54(o)WmIf{-3hwO z7g4*rV{V3Ei_pVHoGoMub}f1y8?REe^}NQ;%0u-qJXmc_=(FbX+{{{5iO^-UJvJfP zR2F+OAZnbs3PeUzNEIYV?4r}C)?YCr7DG)LMZDqJViNN8gpdrQC}S8bPh=V~NN1ro zP3%syn@VP`GGvk3jL_V=?p8m;A<<0#f?^87FHitWkZOHKRY!Zu1XXyLzG9znYB`TL zlhq6%11lPa-OR`eNoZlEwrd#am|-?&?)4CHvB*W6bg~*>qwusYPBBD3d-)VhnAaO;Gn9m+Mjei4l9lOmX4)_`78sWZ_9eks#ZDB^v8>e^|9Kl%#qb=ua$TdfogszyUJJY7Sm8%SVo_XmE!}_LP5Ae zD0-NLU|@+3JBh{qcuwv4#7G7&o#O^8TLM4%e!9|g* z)?y@CQ?8X+R3&Tb{F6}`J#fn6DWkzBrxZ!=R20%o)>g0ydjoEy0^E_7wwW8FEKxkt zVo}&kSH!q!2dE0SDl{uwGRTQ!WK}Y<9Z_P6WO1}nOaMvw)3oiHbH+^elSGc3Mr|V# z(`a#IdWyrxA`{O|P)yynP;kYj)T-gZUad5HYS{4oETdYpW(`{PVgl${;wCL4*2h|y zRRif39x}I3vA!OO$FkI#C_v@1+>}uesu;(_!_ZW0R8Gl;cmghlb7_Yj9>X%O)S^pw z8m}Bgw|G~>qqD4Z>qYBe7uKxAkUoqM29ldCrGfNPina`hiwP~1QJFy@~YPbv#5hFGC+(8gDptb{>Sfn(VtSgtNlgJe5O08Ou(i;#l>B92B z_yA;c*_suLI$3ab7wZr`BK4Hi)I-=SfkC4SZ{W{7D?y4@_>K?nePV_uJj8RKOe^q$OZx*~N&2Ym6tp?ZT(MuAg zhuZ~TXkMGvCcUNZ%>da%aRrqw6c_ol^1(i*Ln&m&dCjMjmppIcT~vS&!Bgtw;TZ-qwVyui#TLX@(Mo08Ho^ zrLV8lDpPW>7!d|?3x?|MNRLV_>tM2>+=p9oD=X_-r8$9P(-Ydo1Vj?9H1`Y2iqq)f z7SnL1E%nfRoC6YZxnPxynQD_)eq*iZ`ZMe{JkeAwcj{;zzinE>`l zHjx~&)37D8lvXg@OBLp)inx?XBR3oZ#>7D#!$xktE!n7~chT!QKxbwYoUr?F!7pLu zDFWAU>V_-(a6_~hZ-oAli3YgUjQ6=QZW7y+} z6q9VMl?h@OQ^HaPn)g;i)S`x8$>v$5H7hE!CSe+Bvn+RuYH^$oRNVbUuWAL=QCH># z_0=f!;d5mfIYpqsf z=ZZq1I1!dL#Z>mZSqzT{+uENG5p%U_q3o$fJ@c!@QW-|>z|htTqN>EA5*5wFjHYB$ zU);GX@Ome)!0)toOUE8gx}(7=(`Hs7Q@RCP#uoHs_iZkBRhzvof3e-PAt=>daLNG5 zXl+)*>gv>IYHF8iH3f)H#rB!oRC&Kpkir zOpyBir~S1y8ULo6TeB$oO>9LpldznqYqn)#IPqv$GNjz5hD-p_$y8LbVr-I|@RqY$d24>C|JM}8-daiPt0{~Naa=5488 z(8evMKUzZB_IhVaeUJn^RdSA)4H4Fnq}qB?J7xK`%;Ca1GhCWW*cByrZO1tpGN}(m za5OQCVdXnOMhsW~TjcvNGk(JjeF(E47~<5~>Y{?%UG})#=fSHgtq@jWg{Q(oy@KcI zQn)f&ZK!Ds4Br}KVJg;A%cLEW%`l<;N&ALOS|}my%R1ME%P6%ikJ}#2WV5(bw3G{+ z&F;zS)0l?q!ew;(%*K0#4tNvz*8K+I{YvCCe4%}|+sOT`mW(>CCDqHcm zX0e;a1-EW?ikPTuXB*oNTv#jRHIB<|OU<{vM5JMV%=2&VEW|x$dlW6$YP%}3By5BU zE$StBnqd)dH@YKUkXHD9v#m`ymW1!=Nb#>hy`aU**MmVgI5poTB5AuI_4 z((ai!V*NEp%=c{b3zDdiZ3#Awmbk+3gjE@KGUID^Sz2(4$geMG*V&~`Hp>OgI)bx7 zNVJU&98sOL&9-^eiErshvreK(e~udzA9R7y$x|Q^5_NtBp~t8~gT9|xOvHxut$)|b zCi)o?Z2peCkV7QeXi+A6rCzYnvg^X=)tun)f(&)Jn3+v>vXIpnyRmIDw2IA;=E`>9 zyHs8IEfpNIdC#>iZRfX`1Mixa0mW++#j7OJ3b$k4X6LYm-(};=R60ak9-ByvcE_~Y zD-K06#a#u?50u9;Q!!9xsbUIOBqysD>!H$g!$rCtVPl;Oo3b`6IUlq{HdK?ThGcV# zgE7UJ*fow2a!0ghYbg<_W+d6%%`@%san3#{CwKDeuo+Ys(BM@mmYwso`l-=J^x9$> zEyL-$)J((tM8)FZX=lJXMki1 zv`lUO!s!OL3yN(vvl|WK#l<^a{9;+Ujs8yQJjnJZn=ewg9M&k6v|t^yRQ+XvSx~6S z7KV(~jQPvW#Za`AX-SdZI2v)SOeL(!;NE{^`(HY-jL z0>T7rFuyQM8~8!WwR(Ge!WYXf2aM-s=f>fHF0cf#9Cd0_U5Fyumca5?AsA#7o0HUb z1cInC_t$iJ%#OfH^28@0Rv7{;1A6GmjJ#y=`K?=4_n%2#v$}2eGz#GX%NjjfI^=>V zrJUF>lQA7T8eh52FQ{2zFlDWqS!e}ISbC4X1n@+m6G?S^JOA@&AiD z@-qIfscL?!eT+Cw86Css2U|E=hA?e^%S}yDnk`xoJ#GpuV&+^M`!TSbKhYmPUbc4C zBFXDOkl@k5^TL@$*Ff0OW*J8|glb`ou+7J0xU7@>M0i1cQ39w2@@k*Xbtcs6Bhwp> zvPTApPe2v3a$^5QrD!`QV-Q3Ie`!IxR3%NetJjEDcPxR~sQ)^r@q8`O>}E4Dj4Xw~ zK{eZIrDqiH&COdYRjy@y)D(1)qBZ4Ju zRK_P-(tcL6^)Bq$+xbiF_)3zrn7A;(1L@{E>rMH}V^`xgW$2C_PLi0`Q|K5AazGx;KUWm`o}*8pRbZwpB~(wW+BN}LRo zTUZb?$ZX7U#z@^%D}pmR40JdkgD_Hqn`T0yMS|QkVG_>SaGzO=KEz1zwffBbl5HT( z-6|PZDAo?0+FcQ3xEDvZt4j2~9^_?>ptIeB0wG&%uuiOhf}xHcWV4OB?J>=J+)cN! z+np7}2>IbUQ(hDvwU-|OMHvSN5={=Kmr>(PdDJIyyY`eBUmoS3daPY#=_zR;b)uTJ zG4$+KzQ7ph>D7tBY4Vxa&~xU_VDeaW`Qhg(a-nyf6@ee6hg)&Wi1gJlUH;#ATp9_r zxTkleZbhqMdzC}$3!7!_aH3C*MeSsZCtB$PTbOpC}zaC!N=f&Er$DdOQN5SlB73I*v8^H@p%TDtU|+rdnD9pG)`->Rx4wzW7AcfLLKt!F~blY z?+n89c9xG;<2d`zwSlyEtT>@@`0?SjBYpgDYJ=>?$~_X0Wm;62SSrw7To=WNRz)>` zL2u@j9|(%Vb-Jyq@OUfPQXd~T!;c||dnIAOHCMiYP#9t!VBwc+(URT8n+U?=__u9A z5ZM+D4T(3GWFtXCad*Cnbrl+#)w(3OrRV^_YMv%u?_Pqp{7s%$8*f zV&;`1*u&mb5tqip-8j*MkAWQ-ZK{Ri`*5+`*ZC4iW6q8zYQ4EgTWYvNp&LyYO`eiN zLrpJXoK~@XMckoSa`ocxHW9qr#Lf_vbymr?Z~42B(A&Exe+0GExn`#&mM^+RLIuBTz7KAX+1)Zhxv{k{1jvsfC;8&8}UlbfA|I7U#%hZFr0g`}?g zb~KM8!M3i0KjTI~u7V1)+_6HC8pfQ`^tl+&Z0MM-Z3_hL$y9V}Ad?cfl|vtxw3&M1 ziznU@@?%0AzgU#m%T!xyoR2SwCCWR;%Kpwk-JLOLkw0~pX>F2$6G8KfZE0|lt<(Gy zX$H_alfq@xe28D?kRUT-mZ%u}?PO{6E!e_{vohIWJn zo)%HLbkT{}t<$;D)*&?B=;015%*#b=u}H?rsQ|AOQ*E<;JGRnbG1b-*_6m~7Dc+24 zku}Xaor= zPIsU46%wb}^`KRgi=}qy zRj_!LlfVmjT1{fENFOHt!dw69KC!#s`Qem-NqG*qX}ym8NuJ?CeXR6^%qcGTUx z2Fu9!Ry?*7O_H<4WPf-z-<9feW7*=yEQx3q%Eu@^&;g_VCK_&q(n&3FjZ8>n|)&z-hy#DN-Zl2V*0BN168aa2i5 zCv%|;B-_f3da|uvpGvZ7D;eXkO5#Hh5A3s<>@Pe8C8@FI^dU+Brd^cSDy8N|dh_gM zPYeFjvlrIVbJEimJuPvus%4!uXK=}qbnAs9NmCmwNxL@55}?-MG}c6o%d8LQaxy{7 z^8v^>?hf{kl==e)@UEJb*Ms|zO^5#VdNZwmMSHy2zokCNfOic*4-&55-XwvU`d1;0 z2h(LsPkVCz(lh&)o|c~W)WKy>K6UA`rAx`!ue~ryldgPE>R)z7dfL*#rKk5VJ%fDn zW_U2&!TaYsDwFA1JF+pZ&h_X(rG5^1{pHkt`9cRdsoA`;UCvVn({lT=;mtkkN7fH_ zdUx8u(w>zFD7dOd``cbLckIg5bb0_vwJt{n~8tZB> zU1IOml$%QeSx(nmJ;}nXill3EQjORD$F=PD3Bmj}X6foJ2D1|l1yd`@M~wdZI*2UoS*=WqM}k-RE;er{g#sE?MheQMcc z(zli!2Ug>a_8f1S`{{uY6P@a?YGYFQMp`>7N#DBqG$+d1yfZS#+eKXT4a3YdNoPgZ z+WymcJ?l!HD5P@u!X6q@f3jo+&UiY2NzwHofZ^t3yIN5zD5)s*%EcS!)w5dCw;r#` zT%BoXr)!y6DA&7ENS`RCpP!9$_G6BMS1@Fi%qq_tu8#%82&-Ku6!PY2k$6bk=utNj$$FvMJgHNw#=SibeOIzcAGfRlpSIIs zpN~eRSOU|wCfqLCbiiXmFzy14?i^RSsN)% zB#x^6e2Ku=Z!$ff5^9ynq5X1sKopv`M#9AVbHQ!&(@{P8<|E3kCxbE2lsfT=s3 zIv*O~BMx3Wb?_Q?nd)&<+h+%c zoH8>1cEC`h0b{D;;<=%w(Y`TMi^<3);qF=%zd)c;8C$ELPY~2wb=c0nUeH}k=Eb<2 z@nRlYZx-xIaHa((5+>8+_>N9H|8+;X7!4yL+VBd za;{&)<$M~Fvw6jtd>iFR1fovVj5tF0$IQFbRp?`(E)joMT@~a?M&+$JoB6uBAzA^wTx%xfbK^Uo+sPe8jcuDD3RXHX^>1(UYj1n3nPs$~9S&K^oZCQSDg! zC^Ytkb4)SIc&Aa_84%7YYFh>hK+Q2t~_3^O|kT!QkOb2e$IWRA&6x4X`gAgoyYf=fG0-zb$GMDNK`#MVbAe_A^w)5?zVEx|O(U{fqB8;x**NX2e|Ln_`U8jy3c3TtAU zV`zkYxHdS&Kg9#171(>OV!o5}Rc}6~ozb;&O+=#FsD=#`tVJWpoZt#%?qjlO8R}ZqE$r+3?1b_=S*&Og?t<+{9 zqpCq#1Ub`>sg6qVsB~H$LppV=tuXR3RwPOpIfRGVBB|!cD^m|;X+??C&yn{PSw$pm zonOI7*s~)W^T*wkK{~pTlMA|zwMw(2Ssjpd9_%j-67QrVu{9cT?2^K*T{GuRca@{e z+q7h0aP4s!4)f%)F`CSi3Yoghh9GQuUXhNAaW30w%M{LO|bNn5)#CFU9e=6%gMp zp`~Y)RIVbiqM_a)xE9VK={#~tX83ZbU%JK?Y$nT1V4>6K6Z!>7%X>P$*oEm`7$7xi z47&ubE+z+(b@pwBzF{O~CGo$jpfR1j*Omw8MHt*lMv2&AD12y)Mo9V@Mp8FDo+rl9 zLGNpF%>v>J55vd+v*3dru8%eJqfztpXlTTA4KhuLHh~nmk2(|0U`^J05DFPz`l+Ym zGI3~cLBm`2GIqppcq|$k?M{))lk?ly5a{<@amfrf^^}uEGqr(a zq_4r#EXO&YV%~t%UIKPaE=e~WmfQh3oE@#_Kc2Enme^j6LM$2s7|_i35B-H&yD4P_aI|l8C0eN9~Yw^EX4ddW5yvpV=gbZ+0Fb^UNon9aVG1@ zko07yfLiKJASEt(cgc}=r5cvSo&!5v23dX=O6HZZV1zMX*2T_Z082(yr-jvdPV#~Tqgk1%SS>0CM&bo(h$d7#Ri10-J)bY~-H?#?DP531;qoknZ_z-xCJV)N)JFIH z6JmXFafeVYdBW(5WZHonWyX#69+ast=XR^4wiWVUeBcE~Dex{zpUQhv3d z#jWk0C3RH>`Q!#CHxRq_C^DVpk`@*XQ|g68r06tE8C74pWg@sIxm0d^p+GDp3{$YR(q~!7*44M!ZSsfu8lajaY3j zb~<1MCXEu9QoWI(2hEu&Y|B2r?Yih}mEvsB|$0eA#GYf7|Pxoac<02zemLBPLU`h)K)EqIW_Eu~gFeq~ZkU-?|a z3{^)t)2iC?Ji{z&5bb=)qL_Mx9CxzaU}Ps?#3A3Z=r^y6>DAFp1fPG=qM6CPEkT+^ zk!&sy`PJgo_e8qNcM$09D6SdgfvkVC{@ehN$xLDK0Scj&WUb5%^sq*d8tRuM!K#i8 zG4f68ydXkWmNho4=B0oy({0#!Zo_t3F&-R~<*0QbFACT0nH-kLKwKP)F^)~1$$rOW zCw(T>X=^c=$?jgbLIX&187~@y##k&tNR=Fz)d&p-%5g+qb=5Ltz&5+&n+aw)BVzU(7{ND`8nujW)JNZ|L^_|Qm!Nc zV$Lkax~^8rQ{nkt-t!it?}E@Mz6nxsYZ?Mm%`S_02%ob#JW*9p#9*?vtjV*byfIa} zPV0Hj2(qxGOTg3KtyZ{~jl(V7M1HnLn3JaamjXal&IaHYR6njH| zG$W0SEN^}*U#aG4C_OVtqpg~Zm>_2~j3*hjAU3<4;EBiNV}-)v0w`T!doNu%nN$C| zbJ2I%%H~1|k#;+F8a2)(Yh@j}N%ETB2xxrEf5w%Ba*44;*+Rio3Qu$u9`d%I#?5s?(zAGUl1C!-8yoQpwFxHmF#%ZI!kXO4; z!vYzYO2jvUcqyc6BwHbM9m+ipW4U5}aoR-_5OwV4Fvg_{Z{XnX#=lOZT{dg=+&|99 zY5eld6x$#nAL4^ABItV!5#CLbSIKqm=c_iV5QZ-2V4zzy}!#E_jDwHL^Wz!vQS*K};=AUs1gXN0U)*2eE zkm@TH;|6Ir3=wo%3t(5BK}H7Slh(GBZfbOL-I6OKYNbcEosD@q$+z>OCW8y)t&wh% z5}|vs(5zT!r$}>qhjVieK&aKaI}BHY!nFn>`8 zJ9+C($1yAt{7%+V&8RFfi~RY;3QT*seT}fjR`$QS5Uxb^*qxpm$@WZYw2XKOnVi*V zee_ycjcQ<&PI<8mbfH!l$X!D)8Xnj`S*N=Nd^f5Va(eMGZOC>Sv}uIN*Vz&;3YL6R zyeL;_bre`xQi$YUU2XHm95|5F)JZbNy~ehk3n~GmaP`zC$*dgoTwa(B07)Y(j~ONu36a?a7cAFcPvhcxpQig2jd1IeM3` z8r>{Lg9IM5)m-!&1g8e>3Ftw>z%?C(<4wn+V)Ozfv9hy$G6(zKhBy@FG(yT{yvBej zXtjZkd7#^Kj2z1;H(}G>CN6&MH+ivxN#=?aPm^j)`_ou71$FJ#gbal(lJJaNzBaK4 zG7|w1gSiSAb+ssLu1cjt4G<37x*Zz=Asb4LbP~EA91Etwm}J%^fv@8Os@DWi{$Rdz zpD4F+Ul|ESLXz$tm0LclFyd(Lj)ITwd(-=Fsv`7lX>9t5@yLtC{`IYGI@G0_Y!8&g zF3l7Z84KSd(E<@^g7;aQG?*$T;iUv@d5;(=nBTVFH7`RUP5a%pK@^c0wBkV#k#!lnxU684>c+%Nbj!n%;3k>_zbh|5JYQ9d23ElpSm|7@# z$hLYhb zM>2IM4RI`}wUbp!{xI~&%j@Qn8|o8f&UF$-`hsXHrnTn!?C5B@keJPXva*{eA+`L; zktj25Us;qRx!IlSPGPr-IHJ<^go|#myhM^y{Z5bp|g1NPKX%1#jbk!5Z z;o^LmWbDIM7fU61i&!?8JzdxUM}oU((>4l2Yc|PeNx@;aTT4Y-3%#1b}lI^-xu{2-7@ggRLd$K92#GK-nC zjdEVSX(y9dydfdF6tSpB+F5QM9fey2t!_jxnXyFIbPOgphBX}6Xxg*i;wu49frs3R zj~$Rz7_4|xyISFgLU+TAooWiD+FnJnCF6gKGV^F!`=Lg>I>E?mZ*~WUF^ekA>4WC? z+p5I)-z246N0^>gjBPDx?*#+K1Ow&*D!<@DwpD-Fmodk)=C5#o53-NlgosfD42N0J zvP#ADbABHu3Oodr7X5R!*RSePT%)93G{p9tOdnVJ?FbahW-}ES z#ju=2E6eL9IfoAw8pL}OwzYeD{9QbIQk)*2reu}EDF9|pJZ$PwGb$oBlU~L7VJ!1Y z%Oc_YrF-QvEqpo_vDs8u{8pH|ogjR(VDblSt23s`KBJMW2@oon7B)~ik|*wo;!`qK z=A3yv;%dzLpn7a_#bcO!96*KLaB}eaSlE-;^-KyfzOyvJtu<=yuY&JE-QLA(PdjCq z=W@yE+T0M)17VIeH7PE9?1q`X6bWg^UW*iQCCT+^EYzWyIZnchovrU$#^qxx_LA$< z_z>?LbI~qU@)CDD4JD*@=w0V5l15eb$hh_hs0cwN>pRR6JG3&;owU@K|1Sl18uk~H zQC9;sq}w{XYMtq^VY1abj8|N5`B`%)dttE6%!&+S8^|2jo%W#gLFdSfwmc8JS#Y_i zkrjFa9U>(u8K@%UM~o()2(e^ZJeE4JRHf5FzGEgcp0_9#Q=9ofWfRzhaoaNDUlvd6#0}M&_$J9E=djDyU}ff#Og>Wf z)*y?V+qJhwvvpcRRr9$&ZDdYhmdW?tD!a&$I^zFukjp@$fQYf}M}$8cXwtUq+;JAu zzF@+5LCpNG31;D5fi#k9+(fJshqH;qYW#qSw3v}zzM?S#ch3T?l~U^}HS(G?Mtq&i z=)wm+YAQ(`9Dp5F*)`VjI3x?^#;M<$}L5fELmofYt*dN4$=b z1NvGCwn*4N@>@)?c7+&mdd#OYM0pfWCwkYBSMO2uXw4uyg=2Nn29PF`t(P_Q{Sq?8 z-dkP#2NEhv-!HM}StgmOfQ2E6X7w!e-C^j5el7C$2iIF@d05k!5Oje?mxGFf1NZO}uIcqGkeu+DaxoWYFXJ3e$2qGV#&agugM+4y#UoG6!}mUB+8C#bt| z|GiUb$2;Z}+s@6bpph}KSf%*RjoAY>wUOTE=T_T-??{uIlPWBt>7==?F|)(XNyWY6f@*(+3BK`G=D@5WAI zFZbwd39rM3Q=Q@1AvUk{SX_dOTTOhL#caGUPRKuAqT`+nf25gtMtEdDo=_ zTUV=%;Eh8&g|l2{chQ@$QDpwzupbfj!jLhh+!+bz)tm~*9V(U)NL>HLiJcv_kwB0m zh?#wxM1;P+ZPK4jF6t<0wGA#nj3<1;gwgD%<6RR*G&sl?`CilhbNH)+SnR#`_VNJ@ zyDL%AF$VOiX|ys5=8$GD&r~?Z6f?6@ve$V#nY!k)`|-dq{?%%o7S|yh_!$jbuo9$- zFbv{p|4!}9OukZ=Ya=!{d|owADBKgTOWGP~#Hs6WXP90yI(U6vi!UWHBRNOs3P;UC z`FgXY;_?NOIY=gT2%dMKv_M{gf84(L$Q#ml%%tXdUpl_F>945xPK~*=n=DP*_GU1Q zmXn1fe)7N1%S6YIniMOwL9us4@owN3hLz$lbgr~|l|M7yfyyBr_KKZFU2n#N;)QJa z*s$9Je+Jh?KD_caq=oGEnUf){10ynyhb5h<28| zp;VD~sKE^M4zU#-9i2Xu^XJ^w8%WnxSy!W#78Eu&7Nq(hO1>2@^9*CuU3W++TR+-K z*3NOJTxifDbvq|io*l1?4Q()dt;<)p8j?a-r zGQ~&hg1a+jGV#a5NG2_qJFYAlNA88l3oPmZH~d)ka6nETGuIgisa#;%9Ev;i_QE_j zDNJoE)5&_Lxs|}hQJLb#vv-80BJxWq+xR}6_H|^F>V+AmH}^7%JrS}tlsa~R|A1o_ zm0WK_`P<68+nYt#)^bj0vBl4kKSm%bWR4+mAU?~#s4}7#+trkKVLPVt`emyQvjXJv zm6Z0=E}c;ca)x~i2_soDHcrOwvTL=N^D|xHjo@h4@}UiD5JDwbSWKOWftfSUjGbGs z0)u`u7ZqZ!=slEMd7EC1u(Lycnd?*ZlU@zgoQ6e)Ec)E!vPF*3s6S_ikjy#L?LzB% zK|7~{)Q-9J8^ya0v@=2OBTPB=NXgJ)!8Q)E+6g{y_\n" +"Language-Team: Basque\n" +"Language: eu_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: eu\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ezkutatu jakinarazpen mezu hau" + +msgid "Don't Show Again" +msgstr "Ez Erakutsi Berriro" + +msgid "Don't show again" +msgstr "Ez erakutsi berriro" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i lerro '%s' agiritik ez da zuzen gertatu." +msgstr[1] "%i lerro '%s' agiritik ez dira zuzen gertatu." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d lerroa hondaturik dago '%s' agirian (%s datu baliogabea)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Idazburu akastuna: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Katalogo agiria hautsita: msgstr forma bakuna msgid_anitzarekin batera " +"erabili da" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Katalogo agiria hautsita: msgstr forma anitza msgid_anitza gabe erabili da" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Katalogoa gertatzerakoan akatsak egon dira. Ondorioz, datu batzuk ez dira " +"egongo edo okerrak izango dira." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Ezinezkoa %s agiria gertatzea, zihurrenik hondatuta dago." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' agiria irakurtzekoa bakarrik da eta ezin da gorde.\n" +"Mesedez, gorde izen ezberdin batekin." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Ezinezkoa %s agiria gordetzea." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Arazo bat egon da agiria ongi formateatzerakoan (baina ongi gorde da)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogoa ezin izan da '%s' hizki-kodean gorde katalogo ezarpenetan " +"adierazi bezala.\n" +"\n" +"UTF-8 kodeaketan gorde da ordez eta ezarpenak ere era berean aldatu dira." + +msgid "Error saving catalog" +msgstr "Akatsa katalogoa gordetzerakoan" + +msgid "PO Translation Files" +msgstr "PO Itzulpen Agiriak" + +msgid "POT Translation Templates" +msgstr "POT Itzulpen Ereduak" + +msgid "All Translation Files" +msgstr "Itzulpen Agiri Guztiak" + +msgid "Merging differences..." +msgstr "Ezberdintasunak batzen..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' ez da baliozko POT agiria." + +msgid "(Use default language)" +msgstr "(Erabili berezko hizkuntza)" + +msgid "Select your preferred language" +msgstr "Hautatu zure gogoko hizkuntza " + +msgid "Language selection" +msgstr "Hizkuntza hautapena" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Poedit berrabiarazi behar duzu aldaketa honek eragina izateko." + +msgid "Downloading translations is disabled in this project." +msgstr "Itzulpenak jeistea ezgaituta dago egitasmo honetan." + +msgid "Not authorized, please sign in again." +msgstr "Baimen gabe, mesedez hasi saioa berriro." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin onlineko lokalizazio kudeaketa plataforma bat eta elkarlaguntza " +"itzulpen tresna bat da. Poedit-ek arazo gabe aldiberetu ditzake Crowdinen " +"kudeatutako PO agiriak." + +msgid "Sign In" +msgstr "Hasi saioa" + +msgid "Sign in" +msgstr "Hasi saioa" + +msgid "Sign Out" +msgstr "Amaitu Saioa" + +msgid "Sign out" +msgstr "Amaitu saioa" + +msgid "Waiting for authentication…" +msgstr "Egiaztapenaren zain..." + +msgid "Updating user information…" +msgstr "Erabiltzaile argibideak eguneratzen..." + +msgid "Signed in as:" +msgstr "Saio hasita honela:" + +msgid "Learn More About Crowdin" +msgstr "Jakin Gehiago Crowdin Buruz" + +msgid "Learn more about Crowdin" +msgstr "Jakin gehiago Crowdin buruz" + +msgid "Sign in to Crowdin" +msgstr "Hasi saio Crowdin-en" + +msgid "Open Crowdin translation" +msgstr "Ireki Crowdin itzulpena" + +msgid "Project:" +msgstr "Egitasmoa:" + +msgid "Language:" +msgstr "Hizkuntza:" + +msgid "File:" +msgstr "Agiria:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ez dago itzulpen egitasmorik zerrendatuta zure Crowdin kontuan." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Egitasmoak ez du Poedit-en itzuli daitekeen agiririk." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Agiri hau Crowdin-en web interfazean besterik ezin da editatu." + +msgid "Downloading latest translations…" +msgstr "Azken itzulpenak jeisten..." + +msgid "Syncing with Crowdin" +msgstr "Crowdin-ekin aldiberetzen" + +msgid "Syncing with Crowdin failed." +msgstr "Hutsegitea Crowdin-ekin aldiberetzean." + +msgid "Crowdin error" +msgstr "Crowdin akatsa" + +msgid "Uploading translations…" +msgstr "Itzulpenak igotzen..." + +msgid "&Copy" +msgstr "&Kopiatu" + +msgid "Learn more" +msgstr "Jakin gehiago" + +msgid "Learn More" +msgstr "Jakin gehiago" + +#, c-format +msgid "Failed command: %s" +msgstr "Komando hutsegitea: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Hutsegitea gettext katalogoak batzerakoan." + +msgid "Scanning files..." +msgstr "Agiriak mihatzen..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s agiri aztertzen..." + +msgid "Failed to load extracted catalog." +msgstr "Hutsegitea ateratako katalogoa gertatzerakoan." + +msgid "&Help" +msgstr "&Laguntza" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO agiriak ezin dira zuzenean editatu Poedit-en." + +msgid "Error opening file" +msgstr "Akatsa agiria irekitzerakoan" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Mesedez ireki eta editatu dagokion PO agiria ordez. Gordetzen duzunean, MO " +"agiria ere eguneratuko da." + +msgid "don't delete temporary files (for debugging)" +msgstr "ez ezabatu aldibaterako agiriak (garbiketarako)" + +msgid "handle a poedit:// URI" +msgstr "kudeatu poedit:// URI bat" + +msgid "Failed to communicate with Poedit process." +msgstr "Hutsegitea Poedit prozesuarekin harremantzean." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Kudeatu ezinezko salbuespen bat gertatu da: %s" + +msgid "Unhandled exception occurred." +msgstr "Kudeatu ezinezko salbuespen bat gertatu da." + +msgid "Open catalog" +msgstr "Ireki" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' agiria ez dago." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Honi buruz %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Bertsioa %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Zerbitzuak" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ezkutatu %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ezkutatu Besteak" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Erakutsi Denak" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Utzi %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit itzulpen editatzaile erabilterraz bat da." + +msgid "Catalogs Manager" +msgstr "Katalogoen Kudeatzailea" + +msgid "Check for Updates..." +msgstr "Egiaztatu Eguneraketarik dagoen..." + +msgid "&Edit" +msgstr "&Editatu" + +msgid "Undo" +msgstr "Desegin" + +msgid "Redo" +msgstr "Berregin" + +msgid "Paste and Match Style" +msgstr "Itsatsi eta Berdindu Estiloa" + +msgid "Delete" +msgstr "Ezabatu" + +msgid "Spelling and Grammar" +msgstr "Idazketa eta Gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Erakutsi Idazketa eta Gramatika" + +msgid "Check Document Now" +msgstr "Egiaztau Agiria &Orain" + +msgid "Check Spelling While Typing" +msgstr "Egin Idaz Egiaztapena Idazterakoan" + +msgid "Check Grammar With Spelling" +msgstr "Egin Idaz Egiaztapena" + +msgid "Correct Spelling Automatically" +msgstr "Zuzendu Idazketa Berezgaitasunez" + +msgid "Substitutions" +msgstr "Ordezpenak" + +msgid "Show Substitutions" +msgstr "Erakutsi Ordezpenak" + +msgid "Smart Copy/Paste" +msgstr "Itsatsi/Kopiatu Adimentsua" + +msgid "Smart Quotes" +msgstr "Adartxo Adimentsuak" + +msgid "Smart Dashes" +msgstr "Elkarmarra Adimentsuak" + +msgid "Smart Links" +msgstr "Lotura Adimentsuak" + +msgid "Text Replacement" +msgstr "Idazki Ordezpena" + +msgid "Transformations" +msgstr "Eraldaketak" + +msgid "Make Upper Case" +msgstr "Egin Hizkiak Larriak" + +msgid "Make Lower Case" +msgstr "Egin Hizkiak xeheak" + +msgid "Capitalize" +msgstr "Larri" + +msgid "Speech" +msgstr "Hizketa" + +msgid "Start Speaking" +msgstr "Hasi Hizketa" + +msgid "Stop Speaking" +msgstr "Gelditu Hizketa" + +msgid "&View" +msgstr "&Ikusi" + +msgid "Enter Full Screen" +msgstr "Sartu Ikusleiho Osoan" + +msgid "Window" +msgstr "Leihoa" + +msgid "Minimize" +msgstr "Txikiendu" + +msgid "Zoom" +msgstr "Zooma" + +msgid "Bring All to Front" +msgstr "Ekarri Denak Aurrera" + +msgid "PO Translation" +msgstr "PO Itzulpena" + +msgid "The file cannot be opened." +msgstr "Agiria ezin da ireki." + +msgid "Invalid file" +msgstr "Agiri baliogabea" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Agiria hondatuta edo Poedit-ek ezagutzen ez duen heuskarri batean dagoela " +"dirudi." + +msgid "&Undo" +msgstr "&Desegin" + +msgid "&Redo" +msgstr "&Berregin" + +msgid "Cu&t" +msgstr "&Ebaki" + +msgid "Cut" +msgstr "Ebaki" + +msgid "Copy" +msgstr "Kopiatu" + +msgid "&Paste" +msgstr "&Itsatsi" + +msgid "Paste" +msgstr "Itsatsi" + +msgid "&Delete" +msgstr "E&zabatu" + +msgid "Select &All" +msgstr "Hautatu &Denak" + +msgid "Select All" +msgstr "Hautatu Denak" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ktrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Aldatu+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Sartu" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Gora" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Behera" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ktrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "aldatu" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Ezin duzu agiri bat baino gehiago askatu Poedit-en leihoan." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' agiria ez da mezu katalogo bat." + +msgid "Poedit" +msgstr "aPoedit" + +msgid "&File" +msgstr "&Agiria" + +msgid "&Go" +msgstr "&Joan" + +msgid "Source text:" +msgstr "Iturburu idazkia:" + +msgid "Singular:" +msgstr "Bakuna:" + +msgid "Plural:" +msgstr "Anitza:" + +msgid "Translation:" +msgstr "Itzulpena:" + +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 agiriak ereduak besterik ez dira eta ez dute inolako itzulpenik berez.\n" +"Itzulpena egiteko, sortu PO agiri berri bat ereduan ohinarrituz." + +msgid "Create New Translation" +msgstr "Sortu Itzulpen Berria" + +msgid "Create new translation" +msgstr "Sortu itzulpen berria" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Idaz-egiaztapena ezgaituta, %s-rako hiztegia ez dagoelako ezarrita." + +msgid "Install" +msgstr "Ezarri" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogoa aldatu egin da. Aldaketak gordetzea nahi duzu?" + +msgid "Save changes" +msgstr "Gorde aldaketak" + +msgid "Your changes will be lost if you don't save them." +msgstr "Zure aldaketak galdu egingo dira ez badituzu gordetzen." + +msgid "Save" +msgstr "Gorde" + +msgid "Don't save" +msgstr "Ez gorde" + +msgid "Don't Save" +msgstr "Ez Gorde" + +msgid "Save as..." +msgstr "Gorde honela..." + +msgid "Compile to..." +msgstr "Bildu hona..." + +msgid "Compiled Translation Files" +msgstr "Bildutako Itzulpen Agiriak" + +msgid "Export as..." +msgstr "Esportatu honela..." + +msgid "HTML Files" +msgstr "HTML Agiriak" + +msgid "Open catalog template" +msgstr "Ireki katalogo eredua" + +msgid "Updating catalog" +msgstr "Katalogoa eguneratzen" + +msgid "Source code not available." +msgstr "Iturburu kodea ez dago eskuragarri." + +msgid "Updating failed" +msgstr "Eguneraketa hutsegitea" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Itzulpenak ezin dira eguneratu iturburu kodetik, ez delako koderik aurkitu " +"katalogoaren Ezaugarrietan adierazitako kokalekuan." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogoko sarrerak zihurrenik oker egongo dira." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Hutsegitea katalogoa eguneratzerakoan. Klikatu 'Xehetasunak' >>' xehetasunak " +"ikusteko." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d arazo aurkitu da itzulpenarekin. " +msgstr[1] "%d arazo aurkitu dira itzulpenarekin." + +msgid "Validation results" +msgstr "Balioztapen emaitzak" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Akatsa duten sarrerak gorriz markatzen dira zerrendan. Akats xehetasunak " +"erakutsiko dira sarrera bat hautatzen duzunean." + +msgid "The file was saved safely." +msgstr "Agiria seguru gorde da." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Agiria seguru gorde eta MO heuskarrian bildu da, baina zihurrenik ez du ongi " +"lan egingo." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Agiria seguru gorde da, baina ezin da MO heuskarrian bildu eta erabili." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Agiria MO heuskarrian bildu da, baina zihurrenik ez du ongi lan egingo." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Agiai ezin da MO heuskarrian bildu eta erabili." + +msgid "No problems with the translation found." +msgstr "Ez da itzulpen arazorik aurkitu." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Itzulpena erabiltzeko gertu dago, baina %d sarrera ez dago itzulita oraindik." +msgstr[1] "" +"Itzulpena erabiltzeko gertu dago, baina %d sarrera ez daude itzulita " +"oraindik." + +msgid "The translation is ready for use." +msgstr "Itzulpena erabiltzeko gertu dago." + +msgid "Context:" +msgstr "Hitzingurua:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit-ek berezgaitasunez zuzendu ditu \"%s\" agiriko eduki baliogabeak." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Agiriak gai bikoiztuak ditu, zeina ez dago ahalbidetuta PO agirietan eta " +"agiria erabiltzea saihestuko da. Poedit-ek arazo hau zuzendu du, baina " +"zalantzazkoa bezala markaturiko gaien itzulpenak berrikusi behar dituzu eta " +"zuzendu beharrezkoa bada." + +msgid "Language of the translation isn't set." +msgstr "Itzulpenaren hizkuntza ez dago ezarrita." + +msgid "Set Language" +msgstr "Ezarri Hizkuntza" + +msgid "Set language" +msgstr "Ezarri hizkuntza " + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Iradokizunak ez daude eskuragarri itzulpen hizkuntza ez badago zuzen " +"ezarrita. Beste ezaugarri batzuk, forma anitzak bezalakoak, badaiteke " +"eragina izatea ere." + +msgid "Language of the translation is the same as source language." +msgstr "Itzulpen hizkuntza iturburu hizkuntzaren berdina da." + +msgid "Fix Language" +msgstr "Zuzendu Hizkuntza" + +msgid "Fix language" +msgstr "Zuzendu hizkuntza" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Katalogo honek aniz formako sarrerak ditu, baina ez du Anitz-Forma " +"idazbururik itxuraturik." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Sarrerek katalogo honetan anitz forma eskaera ezberdinak dituzte " +"katalogoaren Anitz-Forma idazburuak dioenarekiko" + +msgid "Required header Plural-Forms is missing." +msgstr "Beharrezko idazburu Anitz-Forma ez dago." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Joskera akatsa Anitz-Forma idazburuan (\"%s\")." + +msgid "Fix the Header" +msgstr "Zuzendu Idazburua" + +msgid "Fix the header" +msgstr "Zuzendu idazburua" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Katalogoak erabiltzen dituen anitz formak ezohikoak dira %s-rako." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Berrikusi" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Akatsa mezu katalogo agiria gertatzerakoan '%s '." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Itzulita: %d -> %d-tik (%%%d)" + +#, c-format +msgid "Remaining: %d" +msgstr "Gelditzen dira: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d akats" +msgstr[1] "%d akats" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d sarrera" +msgstr[1] "%d sarrera" + +msgid " (unsaved)" +msgstr " (gordegabe)" + +msgid " (modified)" +msgstr "(aldatuta)" + +msgid "Go" +msgstr "Joan" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Hutsegitea itzulpen oroimena eguneratzerakoan: %s" + +msgid "Purge deleted translations" +msgstr "Garbitu ezabatutako itzulpenak" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Luzaroan erabili ez diren itzulpen guztiak kentzea nahi dituzu?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Garbiketarekin jarraitzen baduzu, ezabaturik bezala markaturiko itzulpen " +"guztiak betirako kenduko dira. Berriro itzuli beharko dituzu atzera gehitzen " +"badira." + +msgid "Keep" +msgstr "Heutsi" + +msgid "Purge" +msgstr "Garbitu" + +msgid "Fill missing translations from TM" +msgstr "Bete ez dauden itzulpenak IO-tik" + +msgid "Only fill in exact matches" +msgstr "Bete zehatz bat datozenak bakarrik" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Berez, zehatzak ez diren emaitzak bete egiten dira eta zalantzazko bezala " +"markatu. Hautatu aukera hau zehatz bat datozenak bakarrik barneratzeko." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ez markatu zehatz bat datozenak zalantzazko bezala" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Gaitu bakarrik zure IO-ren ontasunaz fidatzen bazara. Berez, IO-tiko bat " +"datozen guztiak zalantzazko bezala markatzen dira eta berrikusi egin behar " +"dira." + +msgid "Fill" +msgstr "Bete" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d sarrera itzulpen oroimenetik bete da." +msgstr[1] "%d sarrera itzulpen oroimenetik bete dira." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Itzulpenak zalantzazkoak bezala markatu dira, ez zehatzak izan " +"daitezkeelako. Berrikusi egin behar dituzu zuzentzeko." + +msgid "No entries could be filled from the translation memory." +msgstr "Ez dago itzulpen oroimenetik bete daitekeen sarrerarik." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"IO-k ez agiri honen edukiaren antzekoa den katerik. Eraginkorra da bakarrik " +"erdi-berezgaitasunezko itzulpenetarako Poedit-ek eskuz itzuli dituzun " +"agirietatik nahikoa ikasi ondoren." + +msgid "Translating" +msgstr "Itzultzen" + +msgid "Filling missing translations from TM..." +msgstr "Ez Dauden Itzulpenak IO-etik betetzen" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u kate itzulita" +msgstr[1] "%u kate itzulita" + +msgid "Copy from source text" +msgstr "Kopiatu iturburu idazkitik" + +msgid "Copy from Source Text" +msgstr "Kopiatu Iturburu Idazkitik" + +msgid "Clear translation" +msgstr "Garbitu itzulpena" + +msgid "Clear Translation" +msgstr "Garbitu Itzulpena" + +msgid "Edit comment" +msgstr "Editatu aipamena" + +msgid "Edit Comment" +msgstr "Editatu Aipamena" + +msgid "References:" +msgstr "Xehetasunak:" + +msgid "Everything" +msgstr "Dena" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Bakuna" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Bat" + +msgid "Two" +msgstr "Bi" + +msgid "Plural" +msgstr "Anitza" + +msgid "Other" +msgstr "Beste" + +msgid "&Bookmarks" +msgstr "&Lastermarkak" + +#, c-format +msgid "Set bookmark %i" +msgstr "Ezarri %i lastermarka" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Joan %i lastermarkara" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Ezarri %i Lastermarka" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Joan %i Lastermarkara" + +msgid "Hide Sidebar" +msgstr "Ezkutatu Albobarra" + +msgid "Show Sidebar" +msgstr "Erakutsi Albobarra" + +msgid "Hide Status Bar" +msgstr "Ezkutatu Egoera Barra" + +msgid "Show Status Bar" +msgstr "Erakutsi Egoera Barra" + +msgid "Source text" +msgstr "Iturburu idazkia" + +msgid "Translation" +msgstr "Itzulpena" + +msgid "ID" +msgstr "ID-a" + +#, c-format +msgid "Source text — %s" +msgstr "Iturburu idazkia — %s" + +msgid "unknown language" +msgstr "hizkuntza ezezaguna" + +#, c-format +msgid "Translation — %s" +msgstr "Itzulpena — %s" + +msgid "Error:" +msgstr "Akatsa:" + +msgid "Source file" +msgstr "Iturburu agiria" + +msgid "Source file occurrence:" +msgstr "Iturburu agiri gertaera:" + +msgid "Open in Editor" +msgstr "Ireki Editatzailean" + +msgid "Open in editor" +msgstr "Ireki editatzailean" + +msgid "No references for the selected item." +msgstr "Ez da xehetasunik aurkitu hautaturiko gaiarentzat." + +#, c-format +msgid "Error opening file %s!" +msgstr "Akatsa %s agiria irekitzerakoan!" + +msgid "Find" +msgstr "Bilatu" + +msgid "Replace" +msgstr "Ordeztu" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Aukerak" + +msgid "Ignore case" +msgstr "Ezikusi larri-xeheak" + +msgid "Wrap around" +msgstr "Inguratu" + +msgid "Whole words only" +msgstr "Hitz osoak bakarrik" + +msgid "Find in source texts" +msgstr "Bilatu iturburu idazkietan" + +msgid "Find in translations" +msgstr "Bilatu itzulpenetan" + +msgid "Find in comments" +msgstr "Bilatu aipamenetan" + +msgid "Close" +msgstr "Itxi" + +msgid "Replace All" +msgstr "Ordeztu Denak" + +msgid "Replace all" +msgstr "Ordeztu denak" + +msgid "< &Previous" +msgstr "< &Aurrekoa" + +msgid "&Next >" +msgstr "&Hurrengoa >" + +msgid "String to find" +msgstr "Bilatzeko katea" + +msgid "Replacement string" +msgstr "Ordezte katea" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ezin da programa abiarazi: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Hizkuntza Kodea edo Izena (adib. en_GB)" + +msgid "Translation Language" +msgstr "Itzulpen Hizkuntza" + +msgid "Language of the translation:" +msgstr "Itzulpenaren hizkuntza:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Katalogoen kudeatzailea" + +msgid "Catalog" +msgstr "Katalogoa" + +msgid "Total" +msgstr "Guztira" + +msgid "Untrans" +msgstr "Itzuligabeak" + +msgid "Fuzzy" +msgstr "Zalantzazkoak" + +msgid "Bad Tokens" +msgstr "Okerrak" + +msgid "Last modified" +msgstr "Azken aldaketa" + +msgid "Select directory" +msgstr "Hautatu zuzenbidea" + +msgid "Directories:" +msgstr "Zuzenbideak:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Egitasmoa ezabatu nahi duzu?" + +msgid "Confirmation" +msgstr "Baieztapena" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Egitan nahi duzu egitasmo honetako\n" +"katalogo guztien eguneraketa egitea?" + +msgid "Information about the translator" +msgstr "Itzultzaileari buruzko argibideak" + +msgid "Name:" +msgstr "Izena:" + +msgid "Your Name" +msgstr "Zure Izena" + +msgid "Email:" +msgstr "Post@:" + +msgid "your_email@example.com" +msgstr "zure-posta@adibidea.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Zure izena eta post@ helbidea GNU gettext agirietan Azken-Itzultzailea " +"idazburua jartzeko besterik ez dira erabiliko." + +msgid "Editing" +msgstr "Editatzen" + +msgid "Automatically compile MO file when saving" +msgstr "Berezgaitasunez bildu MO agiria gordetzerakoan" + +msgid "Show summary after catalog update" +msgstr "Erakutsi laburpena katalogoa eguneratu ondoren" + +msgid "Check spelling" +msgstr "Idaz egiaztapena" + +msgid "Always change focus to text input field" +msgstr "Betik aldatu fokua idazki sarrera eremura" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Kate zerrendei fokutzea eragozten die. Gaitua badago, Ktrl-geziak erabili " +"behar dituzu nabigatzeko baina horrela berehala idatzi dezakezu, Tab sakatu " +"behar izan gabe fokua aldatzeko." + +msgid "Appearance" +msgstr "Itxura" + +msgid "Use custom list font:" +msgstr "Erabili norbere zerrendako hizkia:" + +msgid "Use custom text fields font:" +msgstr "Erabili norbere idazki eremu hizkia:" + +msgid "Change UI language" +msgstr "Aldatu EI hizkuntza" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 edo berriagoa behar du)" + +msgid "General" +msgstr "Orokorra" + +msgid "Use translation memory" +msgstr "Erabili itzulpen oroimena" + +msgid "Learn From Files..." +msgstr "Irakurri Agirietatik..." + +msgid "Learn from files..." +msgstr "Hartu agirietatik..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Berrezarri" + +msgid "Consult TM when updating from sources" +msgstr "Begiratu IO iturburuetatik eguneratzerakoan" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Gaituta badago, Poedit saiatuko da sarrera berriak betetzen\n" +"itzulpen oroimenean biltegiratutako zure aurreko itzulpenak erabiliz.\n" +"IO erdi-hutsik badago, ez da oso eraginkorra izango. Zenbat eta\n" +"itzulpen gehiago editatu eta IO handiagoa izan, lorpenak hobeak dira." + +msgid "Stored translations:" +msgstr "Biltegiratutako Itzulpenak:" + +msgid "Database size on disk:" +msgstr "Datubasearen neurria diskan:" + +msgid "Select translation files to import" +msgstr "Hautatu inportatzeko itzulpen agiriak" + +msgid "Translation Memory" +msgstr "Itzulpen Oroimena" + +msgid "Importing translations..." +msgstr "Itzulpenak inportatzen..." + +msgid "Finalizing..." +msgstr "Amaitzen..." + +msgid "Reset translation memory" +msgstr "Berrezarri itzulpen oroimena" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Zihur zaude itzulpen oraimena berrezartzea nahi duzula?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Itzulpen oroimena berrezartzeak atzerabiderik gabe ezabatuko ditu bertan " +"biltegiratutako itzulpen guztiak. Ezin duzu eragiketa hau desegin." + +msgid "Cancel" +msgstr "Ezeztatu" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "IO" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Iturburu kode ateratzaileak iturburu kode agirietan kate itzulgarriak " +"bilatzeko eta hauek ateratzeko erabiltzen dira, horrela itzuli ahal izateko." + +msgid "New" +msgstr "Berria" + +msgid "Edit" +msgstr "Editatu" + +msgid "Delete extractor" +msgstr "Ezabatu ateratzailea" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Zihur zaude \"%s\" ateratzailea ezabatzea nahi duzula?" + +msgid "Extractors" +msgstr "Ateratzaileak" + +msgid "Accounts" +msgstr "Kontuak" + +msgid "Automatically check for updates" +msgstr "Berezgaitasunez egiaztatu eguneraketak" + +msgid "Include beta versions" +msgstr "Beta bertsioak barne" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta bertsioek azken ezaugarriak eta hobekuntzak dituzte, baina apur bat " +"ezegonkorrak izan daitezke." + +msgid "Updates" +msgstr "Eguneraketak" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ezarpen hauek PO agirien barneko heuskarriari eragiten diote. Zehaztu " +"betebehar bereiziren bat baduzu, adib. bertsio kontrola." + +msgid "Line endings:" +msgstr "Lerro amaierak:" + +msgid "Unix (recommended)" +msgstr "Unix (gomendatua)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Inguratu:" + +msgid "Preserve formatting of existing files" +msgstr "Heutsi dauden agirien heuskarriari" + +msgid "Advanced" +msgstr "Aurreratua" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Hobespenak" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastatu eta Askatu Agiritegiak Hona\n" +"\n" +"edo erabili + botoia" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastatu eta askatu agiritegiak hona\n" +"\n" +"edo erabili + botoia" + +msgid "Add Folders..." +msgstr "Gehitu Agiritegiak..." + +msgid "Add folders..." +msgstr "Gehitu agiritegiak..." + +msgid "Add Files..." +msgstr "Gehitu Agiriak..." + +msgid "Add files..." +msgstr "Gehitu agiriak..." + +msgid "Add Wildcard..." +msgstr "Gehitu Ordez-hizkia..." + +msgid "Add wildcard..." +msgstr "Gehitu ordez-hizkia..." + +msgid "Paths" +msgstr "Helburuak" + +msgid "Excluded paths" +msgstr "Baztertutako helburuak" + +msgid "Additional keywords" +msgstr "Giltza-hitz gehigarriak:" + +msgid "Name of the project the translation is for" +msgstr "Itzulpen egitasmo honetarako izena" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "Adib. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (gomendatua)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Mesedez gorde agiria lehenik. Atal hau ezin ordura arte editatu." + +msgid "Comment:" +msgstr "Aipamena:" + +msgid "OK" +msgstr "Ongi" + +msgid "C&lear" +msgstr "&Garbitu" + +msgid "Clear the comment" +msgstr "Garbitu aipamena " + +msgid "Create new translations project" +msgstr "Sortu itzulpen egitasmo berria" + +msgid "Edit the project" +msgstr "Editatu egitasmoa" + +msgid "Delete the project" +msgstr "Ezabatu egitasmoa" + +msgid "Update all" +msgstr "Eguneratu denak" + +msgid "Update all catalogs in the project" +msgstr "Eguneratu egitasmoko katalogo guztiak " + +msgid "Edit project" +msgstr "Editatu egitasmoa" + +msgid "Project name:" +msgstr "Egitasmoaren izena:" + +msgid "Browse" +msgstr "Bilatu" + +msgid "Add directory to the list" +msgstr "Gehitu zuzenbidea zerrendara" + +msgid "&New..." +msgstr "&Berria..." + +msgid "New from &POT/PO file..." +msgstr "Berria &POT/PO agiritik..." + +msgid "New From &POT/PO File..." +msgstr "Berria &POT/PO Agiritik..." + +msgid "&Open..." +msgstr "&Ireki..." + +msgid "Open Recent" +msgstr "Ireki Berrikia" + +msgid "Open from Crowdin..." +msgstr "Ireki Crowdin-etik..." + +msgid "Open From Crowdin..." +msgstr "Ireki Crowdin-etik..." + +msgid "&Close" +msgstr "&Itxi" + +msgid "&Save" +msgstr "&Gorde" + +msgid "Save &as..." +msgstr "G&orde honela..." + +msgid "Save &As..." +msgstr "G&orde Honela..." + +msgid "Compile to MO..." +msgstr "Bildu MO-ra..." + +msgid "E&xport as HTML..." +msgstr "E&sportatu HTML bezala..." + +msgid "Check for updates..." +msgstr "Egiaztatu egunerakerik dagoen..." + +msgid "&Preferences..." +msgstr "&Hobespenak..." + +msgid "Catalogs &manager" +msgstr "&Katalogo kudeatzailea" + +msgid "Catalogs &Manager" +msgstr "Katalogo &Kudeatzailea" + +msgid "E&xit" +msgstr "I&rten" + +msgid "Quit" +msgstr "Utzi" + +msgid "Copy from singular" +msgstr "Kopiatu Bakunetik" + +msgid "Copy From Singular" +msgstr "Kopiatu Bakunetik" + +msgid "Translation is &fuzzy" +msgstr "Itzulpena zalantzazkoa da" + +msgid "Translation Is &Fuzzy" +msgstr "&Itzulpena Zalantzazkoa da" + +msgid "Edit &comment" +msgstr "Editatu &Aipamena" + +msgid "Edit &Comment" +msgstr "Editatu &Aipamena" + +msgid "Suggestions" +msgstr "Iradokizunak" + +msgid "&Show references" +msgstr "Erakutsi &xehetasunak" + +msgid "&Show References" +msgstr "Erakutsi &xehetasunak" + +msgid "&Find..." +msgstr "Bilatu..." + +msgid "Replace..." +msgstr "Ordeztu..." + +msgid "Find next" +msgstr "Bilatu &hurrengoa" + +msgid "Find previous" +msgstr "Bilatu a&urrekoa" + +msgid "Find and Replace..." +msgstr "Bilatu eta Ordeztu..." + +msgid "Find Next" +msgstr "Bilatu Hurrengoa" + +msgid "Find Previous" +msgstr "Bilatu Aurrekoa" + +msgid "&Preferences" +msgstr "&Hobespenak" + +msgid "Display entry &IDs" +msgstr "Erakutsi sarrera &ID-ak" + +msgid "Display Entry &IDs" +msgstr "Erakutsi Sarrera &ID-ak" + +msgid "Sort by &file order" +msgstr "Antolatu a&giriz" + +msgid "Sort by &File Order" +msgstr "Antolatu A&giriz" + +msgid "Sort by &source" +msgstr "Antolatu i&turburuz" + +msgid "Sort by &Source" +msgstr "Antolatu I&turburuz" + +msgid "Sort by &translation" +msgstr "Antolatu itz&ulpenez" + +msgid "Sort by &Translation" +msgstr "Antolatu Itz&ulpenez" + +msgid "&Group by context" +msgstr "&Multzokatu hitzinguruz" + +msgid "&Group By Context" +msgstr "&Multzokatu Hitzinguruz" + +msgid "Entries with errors first" +msgstr "Akatsak dituzten sarrerak lehenik" + +msgid "Entries with Errors First" +msgstr "Akatsak dituzten Sarrerak Lehenik" + +msgid "&Untranslated entries first" +msgstr "Itzuligabeko &Sarrerak Lehenik" + +msgid "&Untranslated Entries First" +msgstr "Itzuligabeko &Sarrerak Lehenik" + +msgid "Show sidebar" +msgstr "Erakutsi albobarra" + +msgid "Show status bar" +msgstr "Erakutsi egoera barra" + +msgid "C&atalog" +msgstr "&Katalogoa" + +msgid "&Update from sources" +msgstr "Eguneratu &Iturburuetatik" + +msgid "&Update from Sources" +msgstr "Eguneratu &Iturburuetatik" + +msgid "Update from &POT file..." +msgstr "Eguneratu &POT agiritik" + +msgid "Update from &POT File..." +msgstr "Eguneratu &POT Agiritik..." + +msgid "Sync with Crowdin" +msgstr "Aldiberetu Crowdin-ekin" + +msgid "Fill missing translations from &TM..." +msgstr "Bete ez dauden itzulpenak &IO-tik..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Bete Ez dauden Itzulpenak &IO-etik..." + +msgid "&Purge deleted translations" +msgstr "&Garbitu ezabaturiko itzulpenak" + +msgid "&Purge Deleted Translations" +msgstr "&Garbitu Ezabaturiko Itzulpenak" + +msgid "&Validate translations" +msgstr "&Balioztatu itzulpenak" + +msgid "&Validate Translations" +msgstr "&Balioztatu Itzulpenak" + +msgid "&Properties..." +msgstr "E&zaugarriak..." + +msgid "&Done and next" +msgstr "&Eginda eta hurrengoa" + +msgid "&Done and Next" +msgstr "&Eginda eta Hurrengoa" + +msgid "&Previous translation" +msgstr "A&urreko itzulpena" + +msgid "&Previous Translation" +msgstr "A&urreko Itzulpena" + +msgid "&Next translation" +msgstr "&Hurrengo itzulpena" + +msgid "&Next Translation" +msgstr "&Hurrengo Itzulpena" + +msgid "P&revious unfinished" +msgstr "A&urreko amaitugabea" + +msgid "P&revious Unfinished" +msgstr "A&urreko Amaitugabea" + +msgid "Ne&xt unfinished" +msgstr "Hu&rrengo amaitugabea" + +msgid "Ne&xt Unfinished" +msgstr "Hu&rrengo Amaitugabea" + +msgid "Previous plural form" +msgstr "Aurreko forma anitza" + +msgid "Previous Plural Form" +msgstr "Aurreko Forma Anitza" + +msgid "Next plural form" +msgstr "Hurrengo forma anitza" + +msgid "Next Plural Form" +msgstr "Hurrengo Forma Anitza" + +msgid "&Online help" +msgstr "&Online laguntza" + +msgid "&Online Help" +msgstr "&Online Laguntza" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext eskuliburua" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext Eskuliburua" + +msgid "&About Poedit" +msgstr "&Poedit buruz" + +msgid "&About" +msgstr "&Honi buruz" + +msgid "Extractor setup" +msgstr "Ateratzaile ezarpena" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Luzapenen zerrenda puntu eta kakotxaz bananduta (adib. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Deiak:" + +msgid "Command to extract translations:" +msgstr "Itzulpenak ateratzeko agindua:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Hau ateratzailea abiarazteko agindua da.\n" +"%o-k irteerako agiri izenetara hedatzen du, %K-k hitz\n" +"garrantzitsuen zerrendara, %F-k sarrerako agirietara,\n" +"%C-k hizki-kode ikurretara (ikusi behean)." + +msgid "An item in keywords list:" +msgstr "Gai bat giltza-hitzen zerrendan:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Hau giltza-hitz bakoitzerako behin erantsiko da\n" +"agindu lerrora. %k gako-hitza da. " + +msgid "An item in input files list:" +msgstr "Gai bat sarrera agirien zerrendan:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Hau sarrera agiri bakoitzerako behin erantsiko da agindu lerrora. %f agiri " +"izena da. " + +msgid "Source code charset:" +msgstr "Iturburu kode hizkia:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Hau iturburu hizki-kodea eman bada bakarrik\n" +"erantsiko da agindu lerrora. %c-k hizki-kode balioa hedatzen du." + +msgid "Catalog properties" +msgstr "Katalogoaren ezaugarriak" + +msgid "Project name and version:" +msgstr "Egitasmoaren izena eta bertsioa:" + +msgid "Plural Forms:" +msgstr "Anitz Formak:" + +msgid "Use default rules for this language" +msgstr "Erabili berezko arauak hizkuntza honetarako" + +msgid "Use custom expression" +msgstr "Erabili norbere adierazpena" + +msgid "Learn about plural forms" +msgstr "Jakin gehiago anitz formetaz" + +msgid "Charset:" +msgstr "Hizkikodea:" + +msgid "Team:" +msgstr "Taldea:" + +msgid "Team's email address:" +msgstr "Taldearen post@ helbidea:" + +msgid "Translation properties" +msgstr "Itzulpenaren ezaugarriak" + +msgid "Sources paths" +msgstr "Iturburuen helburuak" + +msgid "Extract text from source files in the following directories:" +msgstr "Atera idazkia iturburu agirietatik hurrengo zuzenbideetan:" + +msgid "Base path:" +msgstr "Ohinarri helburua:" + +msgid "Sources keywords" +msgstr "Iturburuetako giltza-hitzak" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Erabili giltza-hitz hauek (eginkizun izenak) iturburu agirietan\n" +"kate itzulgarriak ezagutzeko:" + +msgid "Learn about gettext keywords" +msgstr "Jakin gehiago gettext giltza-hitzetaz" + +msgid "Update summary" +msgstr "Eguneratu laburpena" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Kate hauek iturburuan aurkitu dira, baina katalogoan ez.\n" +"Poedit-ek orain katalogora gehituko ditu." + +msgid "New strings" +msgstr "Kate berriak" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Kate hauek jadanik ez daude iturburuetan.\n" +"Poedit-ek orain katalogotik ezabatuko ditu." + +msgid "Obsolete strings" +msgstr "Kate zaharkituak" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 berri, 0 zaharkitu)" + +msgid "Open" +msgstr "Ireki" + +msgid "Save catalog" +msgstr "Gorde katalogoa" + +msgid "Validate" +msgstr "Balioztatu" + +msgid "Check for errors in the translation" +msgstr "Egiaztatu itzulpenean akatsik dagoen" + +msgid "Update" +msgstr "Eguneratu" + +msgid "Update catalog - synchronize it with sources" +msgstr "Eguneratu katalogoa - aldiberetu iturburuekin " + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Sakatuta hautaturiko katea zalantzazko itzulpena bada" + +msgid "Show or hide the sidebar" +msgstr "Erakutsi edo ezkutatu albobarra" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Aurreko iturburu idazkia:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Zalantzazko itzulpena dagokion iturburu idazki zaharra (eguneraketa batean " +"aldatu aurrekoa)." + +msgid "Notes for translators:" +msgstr "Itzultzaileentzako oharrak:" + +msgid "Add comment" +msgstr "Gehitu aipamena" + +msgid "Add Comment" +msgstr "Gehitu Aipamena" + +msgid "Translation suggestions:" +msgstr "Itzulpen iradokizunak:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ez da bat datorrenik aurkitu" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ez Da Bat Datorrenik Aurkitu" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Kate hau Poedit-en itzulpen oroimenean aurkitu da." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Berria: %i, zaharkitua: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Itzulpenak inportatzen: %d" + +msgid "Poedit Update" +msgstr "Poedit Eguneraketa" + +msgid "Preparing migration..." +msgstr "Migrazioa gertatzen..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migrazioa irteera egoera: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit-ek zure itzulpen oroimena heuskarri berri batera bihurtu beharra du" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Hau Poedit abiarazi ahal aurretik egin behar da. Minutu gutxi batzuk hartu " +"ditzake itzulpen asko badituzu biltegiratuta, baina arrunt askoz azkarragoa " +"izan behar da." + +msgid "Proceed" +msgstr "Ekin" + +msgid "Translation memory migration failed." +msgstr "Itzulpen oroimen migrazio hutsegitea." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Zure itzulpen oroimen datuak ezin dira migratu. Akatsa izan da:\n" +"\n" +"%s\n" +"Mesedez bidali post@ bat hona: help@poedit.net eta zuzentzen saiatuko gara." + +msgid "Cannot create temporary directory." +msgstr "Ezin da aldibaterako zuzenbiderik sortu" + +msgid "Welcome to Poedit" +msgstr "Ongi etorri Poedit-era" + +msgid "Edit a translation" +msgstr "Editatu itzulpen bat" + +msgid "Open an existing PO file and edit the translation." +msgstr "Ireki badagoen PO agiri bat eta editatu itzulpena." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Hartu badagoen PO agiri bat edo POT eredu bat eta sortu itzulpen berri bat " +"bertatik." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Lagundu itzulpen batean Crowdin-ekin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Jeitsi agiri bat Crowdin egitasmotik, itzuli eta aldiberetu zure aldaketak " +"berriro." + +msgid "What is Crowdin?" +msgstr "Zer da Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Ez dago itzulpenik. Hori ezohikoa da." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Sarrera itzulgarriak ez dira eskuz gehitzen Gettext sisteman, baina " +"berezgaitasunez ateratzen dira\n" +"iturburu kodetik. Honela, eguneratuta eta zehatz daude.\n" +"Itzultzaileek arrunt garatzaileek beraientzat gertaturiko PO eredu agiriak " +"(POT-ak) erabiltzen dituzte." + +msgid "(Learn more about GNU gettext)" +msgstr "(Jakin gehiago GNU gettext buruz)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Katalogo hau betetzeko bide arruntena POT batetik eguneratzea da:" + +msgid "Update from POT" +msgstr "Eguneratu POT-etik" + +msgid "Take translatable strings from an existing POT template." +msgstr "Hartu kate itzulgarriak badagoen POT eredu batetik." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Kate itzulgarriak zuzenean atera ditzakezu iturburu kodetik" + +msgid "Extract from sources" +msgstr "&Atera iturburuetatik" + +msgid "Configure source code extraction in Properties." +msgstr "Itxuratu iturburu kode aterapena Ezaugarriak-en" + +msgid "Sync" +msgstr "Aldiberetu" + +msgid "Synchronize the translation with Crowdin" +msgstr "Aldiberetu itzulpena Crowdin-ekin" diff --git a/locales/fa.mo b/locales/fa.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e7ac6c534a7b901d8ac4541275636fb027cdb8e GIT binary patch literal 29366 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 TWCi>d-oCde$OvBHPo@3?rCx5) literal 0 HcmV?d00001 diff --git a/locales/fa.po b/locales/fa.po new file mode 100644 index 0000000..4347fd1 --- /dev/null +++ b/locales/fa.po @@ -0,0 +1,1860 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Persian\n" +"Language: fa_IR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: fa\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "این اعلان را پنهان کن" + +msgid "Don't Show Again" +msgstr "دیگر نشان نده" + +msgid "Don't show again" +msgstr "دوباره نمایش نده" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i خط از فایل %s درست بارگزاری نشده است." +msgstr[1] "%i خط از فایل %s درست بارگزاری نشده است." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "خط %d از فایل %s خراب است(داده معتبر %s نیست)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "سربرگ نادرست: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "پرونده مخدوش شده : msgstr تکی با استفاده از msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "پرونده مخدوش شده : msgstr جمعی بدون استفاده از msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "خطا در هنگام باز کردن پرونده. برخی از داده از بین رفته است." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "ناتوان در بازکردن فایل %s ، فایل خراب است." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"فایل '%s' فقط خواندنی استو نمی تواندی ذخیره شود\n" +"لطفا با نام دیگری ذخیره نمایید." + +#, c-format +msgid "Couldn't save file %s." +msgstr "فایل %s نمی تواند ذخیره شود." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"در فرمت کردن به صورت کاملا صحیح مشکلی به وجود آمده(به هرحال فایل ذخیره شده)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "خطا در ذخیره کردن پوشه" + +msgid "PO Translation Files" +msgstr "فایل های ترجمه Po" + +msgid "POT Translation Templates" +msgstr "قالب ترجمه POT" + +msgid "All Translation Files" +msgstr "تمام فایل های ترجمه" + +msgid "Merging differences..." +msgstr "پیوست تفاوت‌ها..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' یک پرونده معتبر POT نمی‌باشد." + +msgid "(Use default language)" +msgstr "(استفاده از زبان پیش‌فرض)" + +msgid "Select your preferred language" +msgstr "زبانی که ترجیحی را انتخاب کنید" + +msgid "Language selection" +msgstr "گزینش زبان" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" +"شما باید Poedit را برای تأثیر کردن این تغییرات دوباره راه‌اندازی نمایید." + +msgid "Downloading translations is disabled in this project." +msgstr "دانلود ترجمه برای این پروژه مسدود است." + +msgid "Not authorized, please sign in again." +msgstr "ورودی غیر مجاز,لطفا مجددا وارد شوید." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin یک برنامه ی آنلاین محلی سازی زبان و ابزار ترجمه گروهی و مشترکانه " +"است. Poedit به صورت پیشفرض توانایی همگام سازی فایل های PO در Crowdin دارد." + +msgid "Sign In" +msgstr "ورود" + +msgid "Sign in" +msgstr "ورود" + +msgid "Sign Out" +msgstr "خروج" + +msgid "Sign out" +msgstr "خروج" + +msgid "Waiting for authentication…" +msgstr "در حال انتظار برای تأیید اعتبار…" + +msgid "Updating user information…" +msgstr "به روز رسانی اطلاعات کاربر…" + +msgid "Signed in as:" +msgstr "ورود به عنوان:" + +msgid "Learn More About Crowdin" +msgstr "اطلاعات بیشتر در مورد Crowdin" + +msgid "Learn more about Crowdin" +msgstr "اطلاعات بیشتر در مورد Crowdin" + +msgid "Sign in to Crowdin" +msgstr "ورود به Crowdin" + +msgid "Open Crowdin translation" +msgstr "باز کردن ترجمه Crowdin" + +msgid "Project:" +msgstr "پروژه:" + +msgid "Language:" +msgstr "زبان:" + +msgid "File:" +msgstr "فایل:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "هیچ پروژه‌ای ترجمه شده در حساب Crowdin وجود ندارد." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "در حال دانلود آخرین ترجمه…" + +msgid "Syncing with Crowdin" +msgstr "همگام سازی با Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "همگام سازی با Crowdin موفقیت آمیز نبود." + +msgid "Crowdin error" +msgstr "خطای Crowdin" + +msgid "Uploading translations…" +msgstr "در حال آپلود ترجمه…" + +msgid "&Copy" +msgstr "& کپی" + +msgid "Learn more" +msgstr "بیشتر بدانید" + +msgid "Learn More" +msgstr "بیشتر بدانید" + +#, c-format +msgid "Failed command: %s" +msgstr "فرمان‌های شکست خورده: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "پرونده '%s' پوشه پیغام نمی‌باشد." + +msgid "Scanning files..." +msgstr "در حال پویش پرونده‌ها..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "در حال تجزیه پرونده‌های %s ..." + +msgid "Failed to load extracted catalog." +msgstr "پرونده '%s' پوشه پیغام نمی‌باشد." + +msgid "&Help" +msgstr "&راهنما" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "فایل های MO نمی توانند به طور مستقیم در Poedit ویرایش شوند." + +msgid "Error opening file" +msgstr "در باز کردن فابل خطایی رخ داد" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "باز کردن پوشه" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "پرونده '%s' وجود ندارد.." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "درباره %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "نسخه %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit ابزاری آسان برای ویرایش ترجمه هاست." + +msgid "Catalogs Manager" +msgstr "مدیریت کاتالوگ" + +msgid "Check for Updates..." +msgstr "بررسی برای بروزرسانی..." + +msgid "&Edit" +msgstr "&ویرایش" + +msgid "Undo" +msgstr "بازگرد" + +msgid "Redo" +msgstr "از سر" + +msgid "Paste and Match Style" +msgstr "جای گذاری و تطابق قالب" + +msgid "Delete" +msgstr "حذف" + +msgid "Spelling and Grammar" +msgstr "املا و دستور زبان" + +msgid "Show Spelling and Grammar" +msgstr "نمایش املاء و دستورزبان" + +msgid "Check Document Now" +msgstr "سند را بررسی کن" + +msgid "Check Spelling While Typing" +msgstr "بررسی املا در هنگام تایپ" + +msgid "Check Grammar With Spelling" +msgstr "بررسی دستور زبان با املا" + +msgid "Correct Spelling Automatically" +msgstr "تصحیح خودکار املاء" + +msgid "Substitutions" +msgstr "جایگزینی" + +msgid "Show Substitutions" +msgstr "نمایش جایگزینی ها" + +msgid "Smart Copy/Paste" +msgstr "کپی/جای گذاری هوشمند" + +msgid "Smart Quotes" +msgstr "نقل قول هوشمند" + +msgid "Smart Dashes" +msgstr "خط تیره های هوشمند" + +msgid "Smart Links" +msgstr "پیوندهای هوشمند" + +msgid "Text Replacement" +msgstr "جایگزینی متن" + +msgid "Transformations" +msgstr "تغییر شکل ها" + +msgid "Make Upper Case" +msgstr "حروف را بزرگ کن" + +msgid "Make Lower Case" +msgstr "حروف را کوچک کن" + +msgid "Capitalize" +msgstr "درشت نویسی" + +msgid "Speech" +msgstr "گفتار" + +msgid "Start Speaking" +msgstr "شروع به صحبت کردن" + +msgid "Stop Speaking" +msgstr "توقف صحبت کردن" + +msgid "&View" +msgstr "&نما" + +msgid "Enter Full Screen" +msgstr "حالت تمام صفحه" + +msgid "Window" +msgstr "پنجره" + +msgid "Minimize" +msgstr "کوچک سازی" + +msgid "Zoom" +msgstr "بزرگنمايی" + +msgid "Bring All to Front" +msgstr "آوردن همه به جلو" + +msgid "PO Translation" +msgstr "ترجمه PO" + +msgid "The file cannot be opened." +msgstr "پرونده باز نمی شود." + +msgid "Invalid file" +msgstr "فایل نا معتبر" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "&بازگشت" + +msgid "&Redo" +msgstr "& ازنو" + +msgid "Cu&t" +msgstr "بریدن و انتقال" + +msgid "Cut" +msgstr "برش" + +msgid "Copy" +msgstr "کپی" + +msgid "&Paste" +msgstr "جاي گذاري[&P]" + +msgid "Paste" +msgstr "جای گذاری" + +msgid "&Delete" +msgstr "حذف" + +msgid "Select &All" +msgstr "انتخاب همه" + +msgid "Select All" +msgstr "انتخاب همه" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl +" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "بالا" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "پایین" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "شما می‌توانید بیش از یک پرونده را در پنجره Poedit بیاندازید." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "پرونده '%s' پیام کاتالوگ نیست." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&پرونده" + +msgid "&Go" +msgstr "& برو" + +msgid "Source text:" +msgstr "منبع متن:" + +msgid "Singular:" +msgstr "مفرد:" + +msgid "Plural:" +msgstr "جمع:" + +msgid "Translation:" +msgstr "ترجمه:" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "ایجاد ترجمه جدید" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "غلط املایی یاب غیر فعال است,زیرا لغت نامه برای %s نصب نشده." + +msgid "Install" +msgstr "نصب" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "پوشه تغییر کرد. آیا می‌خواهید تغییرات را ذخیره نمایید؟" + +msgid "Save changes" +msgstr "ذخیره‌ی تغییرات" + +msgid "Your changes will be lost if you don't save them." +msgstr "اگر ذخیره نکنید، تغییرات شما از بین می رود." + +msgid "Save" +msgstr "ذخیره" + +msgid "Don't save" +msgstr "ذخیره نکن" + +msgid "Don't Save" +msgstr "ذخیره نکن" + +msgid "Save as..." +msgstr "ذخیره با نام..." + +msgid "Compile to..." +msgstr "کامپایل به..." + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "خروجی بصورت..." + +msgid "HTML Files" +msgstr "پرونده HTML" + +msgid "Open catalog template" +msgstr "باز کردن الگوی پوشه" + +msgid "Updating catalog" +msgstr "به روزرسانی لیست" + +msgid "Source code not available." +msgstr "کد منبع موجود نیست." + +msgid "Updating failed" +msgstr "به روز رسانی انجام نشد" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "ورودی‌های در پوشه احتمالا درست نیست." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" + +msgid "Validation results" +msgstr "نتایج ارزیابی" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "پرونده به راحتی ذخیره شده است." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"پرونده با خیال راحت ذخیره شده است، ولی نمی تواند آن را وارد به فرمت MO " +"درآورده و از آن استفاده شود." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "هیچ مشکلی با ترجمه یافت نشد." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "ترجمه آماده برای استفاده است، اما نوشته های %d هنوز ترجمه شده است." +msgstr[1] "ترجمه آماده برای استفاده است، اما نوشته های %d هنوز ترجمه شده است." + +msgid "The translation is ready for use." +msgstr "ترجمه آماده برای استفاده است." + +msgid "Context:" +msgstr "چهار چوب:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "زبان ترجمه مشخص نگردیده است." + +msgid "Set Language" +msgstr "انتخاب زبان" + +msgid "Set language" +msgstr "انتخاب زبان" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "زبانی که قصد دارید به آن ترجمه کنید همان زبان فایل ترجمه است." + +msgid "Fix Language" +msgstr "تعمیر زبان" + +msgid "Fix language" +msgstr "تعمیر زبان" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "" + +msgid "Fix the Header" +msgstr "تعمیر سرنویس" + +msgid "Fix the header" +msgstr "تعمیر سرنویس" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "بررسی" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "خطا در بارکردن پیغام پرونده پوشه '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "باقی مانده: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d خطا" +msgstr[1] "%d خطا" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" + +msgid " (unsaved)" +msgstr " (ذخیره نشده)" + +msgid " (modified)" +msgstr " (تغییریافته)" + +msgid "Go" +msgstr "برو" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "لیست ترجمه‌های &سایه شده" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" + +msgid "Keep" +msgstr "نگه‌دار" + +msgid "Purge" +msgstr "پاکسازی" + +msgid "Fill missing translations from TM" +msgstr "پرکردن ترجمه های از دست رفته توسط TM" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "پر کردن" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "ترجمه کردن" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" + +msgid "Copy from source text" +msgstr "کپی کردن از خود متن" + +msgid "Copy from Source Text" +msgstr "کپی کردن از خود متن" + +msgid "Clear translation" +msgstr "پاکسازی ترجمه" + +msgid "Clear Translation" +msgstr "پاکسازی ترجمه" + +msgid "Edit comment" +msgstr "ویرایش توضیح" + +msgid "Edit Comment" +msgstr "ویرایش توضیح" + +msgid "References:" +msgstr "مرجع‌ها:" + +msgid "Everything" +msgstr "همه چیز" + +#, c-format +msgid "Form %i" +msgstr "از %i" + +msgid "Singular" +msgstr "مفرد" + +msgid "Zero" +msgstr "صفر" + +msgid "One" +msgstr "یک" + +msgid "Two" +msgstr "دو" + +msgid "Plural" +msgstr "جمع" + +msgid "Other" +msgstr "سایر موارد" + +msgid "&Bookmarks" +msgstr "نشاندارها" + +#, c-format +msgid "Set bookmark %i" +msgstr "تنظیم نشانک %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "برو به نشانک %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "تنظیم نشانک %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "برو به نشانک %i" + +msgid "Hide Sidebar" +msgstr "پنهان کردن نوار جانبی" + +msgid "Show Sidebar" +msgstr "نمایش نوار جانبی" + +msgid "Hide Status Bar" +msgstr "پنهان کردن نوار وضعیت" + +msgid "Show Status Bar" +msgstr "نمایش نوار وضعیت" + +msgid "Source text" +msgstr "منبع متن" + +msgid "Translation" +msgstr "ترجمه" + +msgid "ID" +msgstr "شناسه" + +#, c-format +msgid "Source text — %s" +msgstr "منبع متن — %s" + +msgid "unknown language" +msgstr "زبان ناشناخته" + +#, c-format +msgid "Translation — %s" +msgstr "ترجمه — %s" + +msgid "Error:" +msgstr "خطا:" + +msgid "Source file" +msgstr "پرونده منبع" + +msgid "Source file occurrence:" +msgstr "" + +msgid "Open in Editor" +msgstr "باز کردن در ویرایشگر" + +msgid "Open in editor" +msgstr "باز کردن در ویرایشگر" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "خطا در باز کردن پرونده %s!" + +msgid "Find" +msgstr "یافتن" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "فقط کلمه کامل" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "یافتن در توضیحات" + +msgid "Close" +msgstr "ببند" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "قبلی >" + +msgid "&Next >" +msgstr "& بعدی >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "برنامه اجرا نمی شود: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "کد زبان و یا نام (به عنوان مثال en_GB)" + +msgid "Translation Language" +msgstr "ترجمه زبان" + +msgid "Language of the translation:" +msgstr "زبان ترجمه:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - مدیر پوشه" + +msgid "Catalog" +msgstr "پوشه" + +msgid "Total" +msgstr "جمع کل" + +msgid "Untrans" +msgstr "ترجمه نشده" + +msgid "Fuzzy" +msgstr "نامعلوم" + +msgid "Bad Tokens" +msgstr "نشانه‌های خراب" + +msgid "Last modified" +msgstr "آخرین تغییر" + +msgid "Select directory" +msgstr "انتخاب شاخه" + +msgid "Directories:" +msgstr "شاخه‌ها:" + +msgid "" +msgstr "<بی‌نام>" + +msgid "Do you want to delete the project?" +msgstr "آیا می‌خواهید که این پروژه را حذف کنید؟" + +msgid "Confirmation" +msgstr "تایید" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"آیا واقعاً می‌خواهید همه پوشه‌ها در این\n" +"پروژه بروزسازی نمایید؟" + +msgid "Information about the translator" +msgstr "اطلاعات در مورد مترجم" + +msgid "Name:" +msgstr "نام:" + +msgid "Your Name" +msgstr "اسم شما" + +msgid "Email:" +msgstr "پست الکترونیک:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "در حال ویرایش" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "نشان دادن خلاصه بعد از بروزسازی پوشه" + +msgid "Check spelling" +msgstr "بررسی املا" + +msgid "Always change focus to text input field" +msgstr "همیشه تمرکز به محوطه درونداد متن تغییر داده شود" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"هرگز اجازه نده که لیست رشته‌ها تمرکز را بگیرد. اگر فعال شده، شما باید از " +"پیکان‌های صفحه‌کلید برای صفحه‌نوردی استفاده کرده ولی همچنین می‌توانید بلافاصله " +"نگارش متن را بدون فشار دادن کلید جهش برای تغییر تمرکز انجام دهید." + +msgid "Appearance" +msgstr "ظاهر" + +msgid "Use custom list font:" +msgstr "استفاده از فهرست فونت سفارشی:" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "تغییر زیان " + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(ویندوز 8 یا جدیدتر ضروری است)" + +msgid "General" +msgstr "عمومی" + +msgid "Use translation memory" +msgstr "استفاده از حافظه ترجمه" + +msgid "Learn From Files..." +msgstr "یاد بگیرید از پرونده ها..." + +msgid "Learn from files..." +msgstr "یاد بگیرید از پرونده ها..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "تنظیم مجدد" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "ترجمه های ذخیره شده:" + +msgid "Database size on disk:" +msgstr "حجم پایگاه داده بر روی دیسک:" + +msgid "Select translation files to import" +msgstr "انتخاب پرونده های ترجمه برای درون ریزی" + +msgid "Translation Memory" +msgstr "حافظه ترجمه" + +msgid "Importing translations..." +msgstr "درون ریزی ترجمه ها" + +msgid "Finalizing..." +msgstr "نهایی..." + +msgid "Reset translation memory" +msgstr "تنظیم مجدد حافظه ترجمه" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "آیا مطمئن هستید می خواهید حافظه ترجمه را تنظیم مجدد کنید؟" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "لغو" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "جدید" + +msgid "Edit" +msgstr "ویرایش" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "استخراج کننده" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "به روز رسانی ها" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "انتهای خط:" + +msgid "Unix (recommended)" +msgstr "یونیکس (توصیه شده)" + +msgid "Windows" +msgstr "پنجره‌ها" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "پیشرفته" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "مسیرها" + +msgid "Excluded paths" +msgstr "مسیر های جدا شده" + +msgid "Additional keywords" +msgstr "واژه های كليدی اضافی" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "توضیح:" + +msgid "OK" +msgstr "تایید" + +msgid "C&lear" +msgstr "" + +msgid "Clear the comment" +msgstr "پاک کردن توضیح" + +msgid "Create new translations project" +msgstr "ایجاد یک پروژه‌ی ترجمه جدید" + +msgid "Edit the project" +msgstr "ویرایش پروژه" + +msgid "Delete the project" +msgstr "حذف پروژه" + +msgid "Update all" +msgstr "بروزسازی همه" + +msgid "Update all catalogs in the project" +msgstr "بروزسازی همه پوشه‌ها در پروژه" + +msgid "Edit project" +msgstr "ویرایش پروژه" + +msgid "Project name:" +msgstr "نام پروژه:" + +msgid "Browse" +msgstr "مرور" + +msgid "Add directory to the list" +msgstr "افزودن شاخه به لیست" + +msgid "&New..." +msgstr "& جدید..." + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&باز کردن..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&بستن" + +msgid "&Save" +msgstr "&ذخیره" + +msgid "Save &as..." +msgstr "ذخیره با &نام..." + +msgid "Save &As..." +msgstr "" + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&ترجیحات..." + +msgid "Catalogs &manager" +msgstr "مدیر &پوشه‌ها" + +msgid "Catalogs &Manager" +msgstr "" + +msgid "E&xit" +msgstr "خروج" + +msgid "Quit" +msgstr "خروج" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "ترجمه نام&علوم است" + +msgid "Translation Is &Fuzzy" +msgstr "" + +msgid "Edit &comment" +msgstr "ویرایش تو&ضیح" + +msgid "Edit &Comment" +msgstr "" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&نشان دادن مرجع‌ها" + +msgid "&Show References" +msgstr "" + +msgid "&Find..." +msgstr "&یافتن..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "یافتن بعدی" + +msgid "Find previous" +msgstr "یافتن قبلی" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "یافتن بعدی" + +msgid "Find Previous" +msgstr "یافتن قبلی" + +msgid "&Preferences" +msgstr "&ترجیحات" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "مرتب کردن بر اساس پرونده سفارش" + +msgid "Sort by &File Order" +msgstr "مرتب کردن بر اساس پرونده سفارش" + +msgid "Sort by &source" +msgstr "مرتب کردن بر اساس منبع" + +msgid "Sort by &Source" +msgstr "مرتب کردن بر اساس منبع" + +msgid "Sort by &translation" +msgstr "مرتب کردن بر اساس ترجمه" + +msgid "Sort by &Translation" +msgstr "مرتب کردن بر اساس & ترجمه" + +msgid "&Group by context" +msgstr "& گروه بندی بر اساس زمینه" + +msgid "&Group By Context" +msgstr "& گروه بندی بر اساس زمینه" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "اول ورود ترجمه نشده ها" + +msgid "&Untranslated Entries First" +msgstr "اول ورود ترجمه نشده ها" + +msgid "Show sidebar" +msgstr "نمایش نوار جانبی" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "پوشه" + +msgid "&Update from sources" +msgstr "بروز&سازی از منابع" + +msgid "&Update from Sources" +msgstr "بروز رسانی از منابع" + +msgid "Update from &POT file..." +msgstr "بروزسازی از پرونده &POT..." + +msgid "Update from &POT File..." +msgstr "بروزسازی از پرونده POT..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "حذف ترجمه های پاک شده" + +msgid "&Purge Deleted Translations" +msgstr "" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "" + +msgid "&Done and next" +msgstr "انجام و بعدی" + +msgid "&Done and Next" +msgstr "انجام و بعدی" + +msgid "&Previous translation" +msgstr "ترجمه قبلی" + +msgid "&Previous Translation" +msgstr "ترجمه قبلی" + +msgid "&Next translation" +msgstr "& ترجمه های بعدی" + +msgid "&Next Translation" +msgstr " ترجمه های بعدی" + +msgid "P&revious unfinished" +msgstr "ناتمام های قبل" + +msgid "P&revious Unfinished" +msgstr "ناتمام های قبل" + +msgid "Ne&xt unfinished" +msgstr "ناتمام های بعد" + +msgid "Ne&xt Unfinished" +msgstr "نا تمام های بعد" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "راهنمایی برخط" + +msgid "&Online Help" +msgstr "راهنمایی برخط" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "درباره Poedit" + +msgid "&About" +msgstr "درباره" + +msgid "Extractor setup" +msgstr "نصب استخراج کننده" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "لیست دنباله‌های جدا شده توسط سمیکلون (e.g. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "احضاریه:" + +msgid "Command to extract translations:" +msgstr "فرمان برای استخراج ترجمه:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "یک مورد در لیست واژه‌های کلیدی:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"این به خط فرمان یکبار برای هر پرونده‌ی درونداد ضمیمه خواهد شد. %k به کلیدواژه " +"گسترش می‌یابد." + +msgid "An item in input files list:" +msgstr "یک مورد در لیست پرونده‌های درونداد:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"این به خط فرمان یکبار برای هر پرونده‌ی درونداد ضمیمه خواهد شد. %f به نام " +"پرونده گسترش می‌یابد." + +msgid "Source code charset:" +msgstr "مجموعه‌نویسه کد منبع:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" + +msgid "Catalog properties" +msgstr "" + +msgid "Project name and version:" +msgstr "نسخه و نام پروژه:" + +msgid "Plural Forms:" +msgstr "حالت‌های جمع:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "مجموعه‌نویسه:" + +msgid "Team:" +msgstr "گروه:" + +msgid "Team's email address:" +msgstr "نشانی پست الکترونیکی گروه:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "" + +msgid "Extract text from source files in the following directories:" +msgstr "" + +msgid "Base path:" +msgstr "مسیر پایه:" + +msgid "Sources keywords" +msgstr "واژه های كليدی منابع" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "خلاصه بروزسازی" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"این رشته‌ها در منابع یافت شد ولی در پوشه وجود نداشتند.\n" +"Poedit آنها را به پوشه اکنون اضافه می‌کند." + +msgid "New strings" +msgstr "رشته‌های جدید" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"این رشته‌ها دیگر در منابع نیستند.\n" +"Poedit آنها از پوشه اکنون برمی‌دارد." + +msgid "Obsolete strings" +msgstr "رشته‌های کهنه" + +msgid "(0 new, 0 obsolete)" +msgstr ")Û° جدید, Û° کهنه)" + +msgid "Open" +msgstr "باز کردن" + +msgid "Save catalog" +msgstr "ذخیره پوشه" + +msgid "Validate" +msgstr "تایید اعتبار" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "بروزسازی" + +msgid "Update catalog - synchronize it with sources" +msgstr "پوشه بروزسازی - همزمان سازی آن با منابع" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "تعویض اگر رشته انتخاب شده ترجمه نامعلوم دارد" + +msgid "Show or hide the sidebar" +msgstr "نمایش یا عدم نمایش نوار" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "متن منبع قبلی:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "یادداشت ها برای مترجمان:" + +msgid "Add comment" +msgstr "اضافه کردن نظر" + +msgid "Add Comment" +msgstr "اضافه کردن نظر" + +msgid "Translation suggestions:" +msgstr "پیشنهاد های ترجمه:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "به روز رسانی Poedit" + +msgid "Preparing migration..." +msgstr "آماده انتقال..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "وضعیت خروج انتقال: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "پیشروی" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "" + +msgid "Welcome to Poedit" +msgstr "خوش آمدید به Poedit" + +msgid "Edit a translation" +msgstr "ویرایش ترجمه" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/fi.mo b/locales/fi.mo new file mode 100644 index 0000000000000000000000000000000000000000..48b37c360a521f0a14f05a58d39c96f0e7010603 GIT binary patch literal 46223 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 literal 0 HcmV?d00001 diff --git a/locales/fi.po b/locales/fi.po new file mode 100644 index 0000000..eeae51f --- /dev/null +++ b/locales/fi.po @@ -0,0 +1,1958 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-26 13:01-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Finnish\n" +"Language: fi_FI\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: fi\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Piilota tämä ilmoitus" + +msgid "Don't Show Again" +msgstr "Älä näytä enää" + +msgid "Don't show again" +msgstr "Älä näytä enää" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i rivi tiedostosta ”%s” ei latautunut oikein." +msgstr[1] "%i riviä tiedostosta ”%s” ei latautunut oikein." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Rivi %d tiedostossa ”%s” on korruptoitunut (ei kelvollista %s-dataa)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Vääränmuotoinen otsake: ”%s”" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Rikkinäinen katalogitiedosto: yksikkomuotoista msgstr:ää käytetty yhdessä " +"msgid_plural:in kanssa" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Rikkinäinen katalogitiedosto: monikkomuotoista msgstr:ää käytetty ilman " +"msgid_plural:ia" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Katalogia ladattaessa kohdattiin virheitä. Osa tiedoista saattaa sen " +"seurauksena puuttua tai olla vioittunutta." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Virhe ladattaessa tiedostoa %s. Se on todennäköisesti vioittunut." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Tiedosto ”%s” voidaan vain lukea, mutta ei tallentaa.\n" +"Tallenna toisella nimellä." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Virhe tallennettaessa tiedostoa %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Tiedoston muotoilemisessa oli ongelma (mutta sen tallennus onnistui)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogia ei voitu tallentaa ”%s”-merkistöön kuten katalogin ominaisuuksissa " +"on määritelty.\n" +"\n" +"Se tallennettiin sen sijaan UTF-8-muodossa ja asetusta muutettiin " +"vastaavasti." + +msgid "Error saving catalog" +msgstr "Virhe katalogia tallennettaessa" + +msgid "PO Translation Files" +msgstr "PO-käännöstiedostot" + +msgid "POT Translation Templates" +msgstr "POT-käännöspohjat" + +msgid "All Translation Files" +msgstr "Kaikki käännöstiedostot" + +msgid "Merging differences..." +msgstr "Yhdistetään eroavaisuuksia..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "”%s” ei ole kelvollinen POT-tiedosto." + +msgid "(Use default language)" +msgstr "(Käytä oletuskieltä)" + +msgid "Select your preferred language" +msgstr "Valitse ensisijainen kieli" + +msgid "Language selection" +msgstr "Kielen valinta" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Poedit täytyy käynnistää uudestaan muutoksien käyttöön ottamiseksi." + +msgid "Downloading translations is disabled in this project." +msgstr "Käännösten lataus on poistettu käytöstä tässä projektissa." + +msgid "Not authorized, please sign in again." +msgstr "Ei valtuutusta; kirjaudu uudelleen." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin on verkossa toimiva lokalisoinninhallinta-alusta ja yhteistyökalu " +"kääntämiseen. Poedit osaa saumattomasti synkronoida Crowdinissa hallittuja " +"PO-tiedostoja." + +msgid "Sign In" +msgstr "Kirjaudu" + +msgid "Sign in" +msgstr "Kirjaudu" + +msgid "Sign Out" +msgstr "Kirjaudu ulos" + +msgid "Sign out" +msgstr "Kirjaudu ulos" + +msgid "Waiting for authentication…" +msgstr "Odotetaan todennusta..." + +msgid "Updating user information…" +msgstr "Päivitetään käyttäjätietoja..." + +msgid "Signed in as:" +msgstr "Kirjautuneena käyttäjänä:" + +msgid "Learn More About Crowdin" +msgstr "Lisätietoja Crowdinista" + +msgid "Learn more about Crowdin" +msgstr "Lisätietoja Crowdinista" + +msgid "Sign in to Crowdin" +msgstr "Kirjaudu Crowdiniin" + +msgid "Open Crowdin translation" +msgstr "Avaa Crowdin-käännös" + +msgid "Project:" +msgstr "Projekti:" + +msgid "Language:" +msgstr "Kieli:" + +msgid "File:" +msgstr "Tiedosto:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Crowdin-tiliisi ei liity käännösprojekteja." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Tässä projektissa ei ole Poeditillä käännettäviä tiedostoja." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Tätä tiedostoa voi muokata vain Crowdinin web-käyttöliittymässä." + +msgid "Downloading latest translations…" +msgstr "Ladataan uusimmat käännökset..." + +msgid "Syncing with Crowdin" +msgstr "Synkronoidaan Crowdiniin" + +msgid "Syncing with Crowdin failed." +msgstr "Synkronointi Crowdiniin epäonnistui." + +msgid "Crowdin error" +msgstr "Crowdin-virhe" + +msgid "Uploading translations…" +msgstr "Lähetetään käännöksiä..." + +msgid "&Copy" +msgstr "&Kopioi" + +msgid "Learn more" +msgstr "Lisätietoja" + +msgid "Learn More" +msgstr "Lisätietoja" + +#, c-format +msgid "Failed command: %s" +msgstr "Epäonnistunut komento: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext-katalogien yhdistäminen epäonnistui." + +msgid "Scanning files..." +msgstr "Selataan tiedostoja..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Jäsennetään %s tiedostoa..." + +msgid "Failed to load extracted catalog." +msgstr "Poimitun katalogin lataaminen epäonnistui." + +msgid "&Help" +msgstr "&Ohje" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO-tiedostoja ei voi suoraan muokata Poeditillä." + +msgid "Error opening file" +msgstr "Virhe tiedoston avaamisessa" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Avaa ja muokkaa sen sijaan vastaavaa PO-tiedostoa. Kun se tallennetaan, MO-" +"tiedosto päivittyy samalla." + +msgid "don't delete temporary files (for debugging)" +msgstr "älä poista tilapäistiedostoja (vianjäljitystä varten)" + +msgid "handle a poedit:// URI" +msgstr "käsittele poedit://-osoite" + +msgid "Failed to communicate with Poedit process." +msgstr "Kommunikointi Poedit-prosessin kanssa epäonnistui." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Tapahtui käsittelemätön poikkeus: %s" + +msgid "Unhandled exception occurred." +msgstr "Tapahtui käsittelemätön poikkeus." + +msgid "Open catalog" +msgstr "Avaa katalogi" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Tiedostoa ”%s” ei ole olemassa." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Tietoja: %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versio %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Palvelut" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Kätke %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Kätke muut" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Näytä kaikki" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Lopeta %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit on helppokäyttöinen käännöseditori." + +msgid "Catalogs Manager" +msgstr "Katalogien hallinta" + +msgid "Check for Updates..." +msgstr "Tarkista päivitykset..." + +msgid "&Edit" +msgstr "&Muokkaa" + +msgid "Undo" +msgstr "Kumoa" + +msgid "Redo" +msgstr "Tee uudelleen" + +msgid "Paste and Match Style" +msgstr "Liitä ja sovita tyyliin" + +msgid "Delete" +msgstr "Poista" + +msgid "Spelling and Grammar" +msgstr "Oikeinkirjoitus ja kielioppi" + +msgid "Show Spelling and Grammar" +msgstr "Näytä oikeinkirjoitus ja kielioppi" + +msgid "Check Document Now" +msgstr "Tarkista dokumentti nyt" + +msgid "Check Spelling While Typing" +msgstr "Tarkista oikeinkirjoitus näppäilyn aikana" + +msgid "Check Grammar With Spelling" +msgstr "Tarkista kielioppi oikeinkirjoituksen ohella" + +msgid "Correct Spelling Automatically" +msgstr "Korjaa oikeinkirjoitus automaattisesti" + +msgid "Substitutions" +msgstr "Korvaukset" + +msgid "Show Substitutions" +msgstr "Näytä korvaukset" + +msgid "Smart Copy/Paste" +msgstr "Älykäs kopiointi/liittäminen" + +msgid "Smart Quotes" +msgstr "Älykkäät lainausmerkit" + +msgid "Smart Dashes" +msgstr "Älykkäät yhdysmerkit" + +msgid "Smart Links" +msgstr "Älykkäät linkit" + +msgid "Text Replacement" +msgstr "Tekstin korvaus" + +msgid "Transformations" +msgstr "Muunnokset" + +msgid "Make Upper Case" +msgstr "Muuta suuraakkosiksi" + +msgid "Make Lower Case" +msgstr "Muuta pienaakkosiksi" + +msgid "Capitalize" +msgstr "Isot alkukirjaimet" + +msgid "Speech" +msgstr "Puhe" + +msgid "Start Speaking" +msgstr "Aloita puhuminen" + +msgid "Stop Speaking" +msgstr "Lopeta puhuminen" + +msgid "&View" +msgstr "&Näytä" + +msgid "Enter Full Screen" +msgstr "Siirry koko näytön tilaan" + +msgid "Window" +msgstr "Ikkuna" + +msgid "Minimize" +msgstr "Pienennä" + +msgid "Zoom" +msgstr "Zoomaa" + +msgid "Bring All to Front" +msgstr "Tuo kaikki eteen" + +msgid "PO Translation" +msgstr "PO-käännös" + +msgid "The file cannot be opened." +msgstr "Tiedostoa ei voi avata." + +msgid "Invalid file" +msgstr "Virheellinen tiedosto" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Tiedosto voi olla joko vioittunut tai muodossa, jota Poedit ei tunne." + +msgid "&Undo" +msgstr "K&umoa" + +msgid "&Redo" +msgstr "&Tee uudelleen" + +msgid "Cu&t" +msgstr "&Leikkaa" + +msgid "Cut" +msgstr "Leikkaa" + +msgid "Copy" +msgstr "Kopioi" + +msgid "&Paste" +msgstr "L&iitä" + +msgid "Paste" +msgstr "Sijoita" + +msgid "&Delete" +msgstr "&Poista" + +msgid "Select &All" +msgstr "Valitse k&aikki" + +msgid "Select All" +msgstr "Valitse kaikki" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Vaihto+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Ylänuoli" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Alanuoli" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "vaihto" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Et voi tiputtaa enempää kuin yhden tiedoston Poedit-ikkunaan." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Tiedosto ”%s” ei ole viestikatalogi." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Tiedosto" + +msgid "&Go" +msgstr "&Siirry" + +msgid "Source text:" +msgstr "Lähdeteksti:" + +msgid "Singular:" +msgstr "Yksikkö:" + +msgid "Plural:" +msgstr "Monikko:" + +msgid "Translation:" +msgstr "Käännös:" + +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-tiedostot ovat pelkkiä käännöspohjia, eivätkä itse sisällä käännöksiä.\n" +"Tee käännös luomalla uusi PO-tiedosto käännöspohjan perusteella." + +msgid "Create New Translation" +msgstr "Luo uusi käännös" + +msgid "Create new translation" +msgstr "Luo uusi käännös" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Oikeinkirjoituksen tarkistus on poissa käytöstä, koska kielelle %s ei ole " +"asennettu sanakirjaa." + +msgid "Install" +msgstr "Asenna" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogia muokattu. Haluatko tallentaa muutokset?" + +msgid "Save changes" +msgstr "Tallenna muutokset" + +msgid "Your changes will be lost if you don't save them." +msgstr "Muutokset menetetään, jos et tallenna niitä." + +msgid "Save" +msgstr "Tallenna" + +msgid "Don't save" +msgstr "Älä tallenna" + +msgid "Don't Save" +msgstr "Älä tallenna" + +msgid "Save as..." +msgstr "Tallenna nimellä..." + +msgid "Compile to..." +msgstr "Muunna..." + +msgid "Compiled Translation Files" +msgstr "Muunnetut käännöstiedostot" + +msgid "Export as..." +msgstr "Vie tiedosto..." + +msgid "HTML Files" +msgstr "HTML-tiedostot" + +msgid "Open catalog template" +msgstr "Avaa katalogimallipohja" + +msgid "Updating catalog" +msgstr "Päivitetään katalogia" + +msgid "Source code not available." +msgstr "Lähdekoodi ei ole käytettävissä." + +msgid "Updating failed" +msgstr "Päivitys epäonnistui" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Käännösten päivittäminen lähdekoodista ei onnistunut, koska katalogin " +"ominaisuuksissa annetusta sijainnista ei löytynyt koodia." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogin merkinnät ovat todennäköisesti virheelliset." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Katalogin päivitys epäonnistui. Valitse ”Lisää >>” saadaksesi lisätietoja." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Käännöksestä löytyi %d ongelma." +msgstr[1] "Käännöksestä löytyi %d ongelmaa." + +msgid "Validation results" +msgstr "Validoinnin tulokset" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Virheelliset viestit on merkitty listassa punaisella värillä. Tällaisen " +"viestin valitsemalla näytetään tarkemmat tiedot virheestä." + +msgid "The file was saved safely." +msgstr "Tiedosto tallennettiin turvallisesti." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Tiedosto tallennettiin turvallisesti ja muunnettiin MO-muotoon, mutta se ei " +"todennäköisesti toimi oikein." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Tiedosto tallennettiin turvallisesti, mutta sitä ei voida muuntaa MO-muotoon " +"eikä käyttää." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Tiedosto muunnettiin MO-muotoon, mutta se ei todennäköisesti toimi oikein." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Tiedostoa ei voi muuntaa MO-muotoon eikä sitä voi käyttää." + +msgid "No problems with the translation found." +msgstr "Käännöksestä ei löytynyt ongelmia." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Käännös on käyttövalmis, mutta %d viesti on vielä kääntämättä." +msgstr[1] "Käännös on käyttövalmis, mutta %d viestiä on vielä kääntämättä." + +msgid "The translation is ready for use." +msgstr "Käännös on käyttövalmis." + +msgid "Context:" +msgstr "Asiayhteys:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit korjasi automaattisesti tiedoston ”%s” virheellisen sisällön." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Tiedosto sisälsi kahdenkertaisia kohtia, mikä ei ole sallittua PO-" +"tiedostoissa ja estäisi tiedoston käytön. Poedit korjasi ongelman, mutta " +"käännöksestä on syytä käydä läpi kaikki vajaiksi merkityt viestit ja " +"tarvittaessa korjata ne." + +msgid "Language of the translation isn't set." +msgstr "Käännöksen kieltä ei ole vielä asetettu." + +msgid "Set Language" +msgstr "Aseta kieli" + +msgid "Set language" +msgstr "Aseta kieli" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Ehdotukset eivät ole käytettävissä, jos käännöksen kieltä ei ole asetettu " +"oikein. Muut ominaisuudet, kuten monikkomuodot, voivat myös toimia väärin." + +msgid "Language of the translation is the same as source language." +msgstr "Käännöksen kieli on sama kuin lähdekieli." + +msgid "Fix Language" +msgstr "Korjaa kieli" + +msgid "Fix language" +msgstr "Korjaa kieli" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Tässä katalogissa on monikkomuotoja, vaikka siinä ei ole määritetty Plural-" +"Forms -otsaketta." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Tämän katalogin merkinnöillä on eri monikkomuotojen määrä kuin katalogin " +"Plural-Forms-otsakkeessa sanotaan" + +msgid "Required header Plural-Forms is missing." +msgstr "Pakollinen otsake Plural-Forms puuttuu." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Kielioppivirhe Plural-Forms -otsakkeessa (”%s”)." + +msgid "Fix the Header" +msgstr "Korjaa otsake" + +msgid "Fix the header" +msgstr "Korjaa otsake" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Katalogissa käytetty Plural-Forms-lauseke on epätavallinen kielelle %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Katselmointi" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Virhe ladattaessa viestikatalogitiedostoa ”%s”." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Käännetty: %d/%d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Jäljellä: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d virhe" +msgstr[1] "%d virhettä" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d viesti" +msgstr[1] "%d viestiä" + +msgid " (unsaved)" +msgstr " (tallentamaton)" + +msgid " (modified)" +msgstr " (muokattu)" + +msgid "Go" +msgstr "Siirry" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Käännösmuistin päivitys epäonnistui: %s" + +msgid "Purge deleted translations" +msgstr "Puhdista poistetut käännökset" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Haluatko todella poistaa kaikki käännökset, joita ei enää käytetä?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Jos jatkat puhdistamista, kaikki poistetuiksi merkityt käännökset hävitetään " +"lopullisesti. Sinun täytyy kääntää ne uudestaan, mikäli ne tulevaisuudessa " +"palaavat käyttöön." + +msgid "Keep" +msgstr "Pidä" + +msgid "Purge" +msgstr "Puhdista" + +msgid "Fill missing translations from TM" +msgstr "Täytä puuttuvat käännökset käännösmuistista" + +msgid "Only fill in exact matches" +msgstr "Täytä vain tarkat täsmäävyydet" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Oletuksena käännökset täytetään myös epätäsmällisten tulosten perustella ja " +"merkitään vajaiksi. Valitse tämä vaihtoehto, jos haluat käyttää vain " +"tarkasti täsmääviä." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Älä merkitse tarkkoja täsmäävyyksiä vajaiksi" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Ota käyttöön vain, jos luotat käännösmuistin laatuun. Muussa tapauksessa " +"kaikki täsmäävyydet merkitään vajaiksi ja ne on syytä tarkistaa." + +msgid "Fill" +msgstr "Täytä" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d viesti täytettiin käännösmuistista." +msgstr[1] "%d viestiä täytettiin käännösmuistista." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Käännökset merkittiin vajaiksi. Ne on syytä käydä läpi oikeellisuuden " +"varmistamiseksi." + +msgid "No entries could be filled from the translation memory." +msgstr "Yhtään käännöstä ei voitu täyttää käännösmuistista." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Käännösmuisti ei sisällä yhtään tämän tiedoston sisältöä muistuttavaa " +"merkkijonoa. Käännösmuisti toimii tehokkaasti puoliautomaattiseen " +"kääntämiseen vasta kun Poedit on oppinut tarpeeksi manuaalisesti " +"käännetyistä tiedostoista." + +msgid "Translating" +msgstr "Käännetään" + +msgid "Filling missing translations from TM..." +msgstr "Täydennetään puuttuvat käännökset käännösmuistista..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Käännetty %u merkkijono" +msgstr[1] "Käännetty %u merkkijonoa" + +msgid "Copy from source text" +msgstr "Kopioi lähdetekstistä" + +msgid "Copy from Source Text" +msgstr "Kopioi lähdetekstistä" + +msgid "Clear translation" +msgstr "Tyhjennä käännös" + +msgid "Clear Translation" +msgstr "Tyhjennä käännös" + +msgid "Edit comment" +msgstr "Muokkaa kommenttia" + +msgid "Edit Comment" +msgstr "Muokkaa kommenttia" + +msgid "References:" +msgstr "Viitteet:" + +msgid "Everything" +msgstr "Kaikki" + +#, c-format +msgid "Form %i" +msgstr "Muoto %i" + +msgid "Singular" +msgstr "Yksikkö" + +msgid "Zero" +msgstr "Nolla" + +msgid "One" +msgstr "Yksi" + +msgid "Two" +msgstr "Kaksi" + +msgid "Plural" +msgstr "Monikko" + +msgid "Other" +msgstr "Muut" + +msgid "&Bookmarks" +msgstr "&Kirjanmerkit" + +#, c-format +msgid "Set bookmark %i" +msgstr "Aseta kirjanmerkki %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Siirry kirjanmerkkiin %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Aseta kirjanmerkki %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Siirry kirjanmerkkiin %i" + +msgid "Hide Sidebar" +msgstr "Piilota sivupalkki" + +msgid "Show Sidebar" +msgstr "Näytä sivupalkki" + +msgid "Hide Status Bar" +msgstr "Piilota tilarivi" + +msgid "Show Status Bar" +msgstr "Näytä tilarivi" + +msgid "Source text" +msgstr "Lähdeteksti" + +msgid "Translation" +msgstr "Käännös" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Lähdeteksti — %s" + +msgid "unknown language" +msgstr "tuntematon kieli" + +#, c-format +msgid "Translation — %s" +msgstr "Käännös — %s" + +msgid "Error:" +msgstr "Virhe:" + +msgid "Source file" +msgstr "Lähdetiedosto" + +msgid "Source file occurrence:" +msgstr "Lähdetiedoston esiintymä:" + +msgid "Open in Editor" +msgstr "Avaa editorissa" + +msgid "Open in editor" +msgstr "Avaa editorissa" + +msgid "No references for the selected item." +msgstr "Ei viittauksia valittuun kohteeseen." + +#, c-format +msgid "Error opening file %s!" +msgstr "Virhe tiedostoa %s avattaessa!" + +msgid "Find" +msgstr "Etsi" + +msgid "Replace" +msgstr "Korvaa" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Valinnat" + +msgid "Ignore case" +msgstr "Älä huomioi kirjainkokoa" + +msgid "Wrap around" +msgstr "Jatka alusta" + +msgid "Whole words only" +msgstr "Vain kokonaiset sanat" + +msgid "Find in source texts" +msgstr "Etsi lähdeteksteistä" + +msgid "Find in translations" +msgstr "Etsi käännöksistä" + +msgid "Find in comments" +msgstr "Hae kommenteista" + +msgid "Close" +msgstr "Sulje" + +msgid "Replace All" +msgstr "Korvaa kaikki" + +msgid "Replace all" +msgstr "Korvaa kaikki" + +msgid "< &Previous" +msgstr "< &Edellinen" + +msgid "&Next >" +msgstr "&Seuraava >" + +msgid "String to find" +msgstr "Etsittävä teksti" + +msgid "Replacement string" +msgstr "Korvaava teksti" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ei voida suorittaa ohjelmaa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kielen koodi tai nimi (esim. fi_FI)" + +msgid "Translation Language" +msgstr "Käännöksen kieli" + +msgid "Language of the translation:" +msgstr "Käännöksen kieli:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Katalogien hallinta" + +msgid "Catalog" +msgstr "Katalogi" + +msgid "Total" +msgstr "Yhteensä" + +msgid "Untrans" +msgstr "Ei käänn" + +msgid "Fuzzy" +msgstr "Vajaa" + +msgid "Bad Tokens" +msgstr "Virheelliset merkit" + +msgid "Last modified" +msgstr "Muokattu viimeksi" + +msgid "Select directory" +msgstr "Valitse kansio" + +msgid "Directories:" +msgstr "Kansiot:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Haluatko todella poistaa projektin?" + +msgid "Confirmation" +msgstr "Vahvistus" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Haluatko todella massapäivittää\n" +"tämän projektin kaikki katalogit?" + +msgid "Information about the translator" +msgstr "Tietoja kääntäjästä" + +msgid "Name:" +msgstr "Nimi:" + +msgid "Your Name" +msgstr "Nimesi" + +msgid "Email:" +msgstr "Sähköposti:" + +msgid "your_email@example.com" +msgstr "sähköpostiosoitteesi@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Nimeäsi ja sähköpostiosoitettasi käytetään ainoastaan GNU-gettext-" +"tiedostojen Last-Translator-otsakkeessa." + +msgid "Editing" +msgstr "Muokkaus" + +msgid "Automatically compile MO file when saving" +msgstr "Muunna automaattisesti MO-tiedostoksi tallennettaessa" + +msgid "Show summary after catalog update" +msgstr "Näytä yhteenveto katalogin päivityksen jälkeen" + +msgid "Check spelling" +msgstr "Tarkista oikeinkirjoitus" + +msgid "Always change focus to text input field" +msgstr "Tarkenna aina tekstinsyöttökenttään" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Älä koskaan tarkenna merkkijonolistaan. Jos tämä on käytössä, näppäimistöä " +"käytettäessä liikkumiseen täytyy käyttää Ctrl-nuolia, mutta toisaalta " +"tekstiä voi kirjoittaa välittömästi, ilman että tarvitsee painaa sarkainta " +"tarkennuksen vaihtamiseksi." + +msgid "Appearance" +msgstr "Ulkoasu" + +msgid "Use custom list font:" +msgstr "Listan fontti:" + +msgid "Use custom text fields font:" +msgstr "Tekstikenttien fontti:" + +msgid "Change UI language" +msgstr "Vaihda käyttöliittymän kieli" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(vaatii Windows 8:n tai uudemman)" + +msgid "General" +msgstr "Yleiset" + +msgid "Use translation memory" +msgstr "Käytä käännösmuistia" + +msgid "Learn From Files..." +msgstr "Opi tiedostoista..." + +msgid "Learn from files..." +msgstr "Opi tiedostoista..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Tyhjennä" + +msgid "Consult TM when updating from sources" +msgstr "Hyödynnä käännösmuistia päivitettäessä lähteistä" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Jos asetus on käytössä, Poedit yrittää täyttää uudet viestit käyttäen\n" +"aiempia käännösmuistiin tallennettuja käännöksiä. Jos käännösmuisti\n" +"on lähes tyhjä, täyttö ei toimi tehokkaasti. Mitä enemmän käännöksiä\n" +"muokkaat ja mitä suuremmaksi muisti kasvaa, sitä parempi tulos." + +msgid "Stored translations:" +msgstr "Tallennetut käännökset:" + +msgid "Database size on disk:" +msgstr "Tietokannan koko levyllä:" + +msgid "Select translation files to import" +msgstr "Valitse tuotavat käännöstiedostot" + +msgid "Translation Memory" +msgstr "Käännösmuisti" + +msgid "Importing translations..." +msgstr "Tuodaan käännöksiä..." + +msgid "Finalizing..." +msgstr "Viimeistellään..." + +msgid "Reset translation memory" +msgstr "Tyhjennä käännösmuisti" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Haluatko varmasti tyhjentää käännösmuistin?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Käännösmuistin tyhjentäminen tuhoaa kaikki sen sisältämät käännökset " +"peruuttamattomasti. Tätä toimenpidettä ei voi perua." + +msgid "Cancel" +msgstr "Peruuta" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Muisti" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Lähdekoodipoimimia käytetään käännettävien tekstien etsimiseen " +"lähdekooditiedostoista sekä näiden tekstien poimimiseen käännöksen tekemistä " +"varten." + +msgid "New" +msgstr "Uusi" + +msgid "Edit" +msgstr "Muokkaa" + +msgid "Delete extractor" +msgstr "Poista poimin" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Haluatko varmasti poistaa “%s“-poimimen?" + +msgid "Extractors" +msgstr "Poimimet" + +msgid "Accounts" +msgstr "Tilit" + +msgid "Automatically check for updates" +msgstr "Tarkista päivitykset automaattisesti" + +msgid "Include beta versions" +msgstr "Tarkista myös beta-versiot" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-versiot sisältävät uusimmat ominaisuudet ja parannukset, mutta " +"saattavat olla hieman epävakaampia." + +msgid "Updates" +msgstr "Päivitykset" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Nämä asetukset vaikuttavat PO-tiedostojen sisäiseen muotoiluun. Niitä voi " +"tarvittaessa muuttaa esim. versionhallinnasta johtuvien vaatimusten vuoksi." + +msgid "Line endings:" +msgstr "Rivinvaihdot:" + +msgid "Unix (recommended)" +msgstr "Unix (suositeltu)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Rivitys:" + +msgid "Preserve formatting of existing files" +msgstr "Säilytä olemassa olevien tiedostojen muotoilu" + +msgid "Advanced" +msgstr "Lisäasetukset" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%sin asetukset" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Vedä ja pudota kansioita tähän\n" +"\n" +"tai käytä +-painiketta" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Vedä ja pudota kansioita tähän\n" +"\n" +"tai käytä +-painiketta" + +msgid "Add Folders..." +msgstr "Lisää kansioita..." + +msgid "Add folders..." +msgstr "Lisää kansioita..." + +msgid "Add Files..." +msgstr "Lisää tiedostoja..." + +msgid "Add files..." +msgstr "Lisää tiedostoja" + +msgid "Add Wildcard..." +msgstr "Lisää korvausmerkki..." + +msgid "Add wildcard..." +msgstr "Lisää korvausmerkki..." + +msgid "Paths" +msgstr "Polut" + +msgid "Excluded paths" +msgstr "Ohitettavat polut" + +msgid "Additional keywords" +msgstr "Lisäavainsanat" + +msgid "Name of the project the translation is for" +msgstr "Projektin nimi, jolle tämä käännös on tarkoitettu" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "esim. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (suositeltu)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Tallenna tiedosto ensin. Tätä osaa ei voi muokata sitä ennen." + +msgid "Comment:" +msgstr "Kommentti:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "T&yhjennä" + +msgid "Clear the comment" +msgstr "Tyhjennä kommentti" + +msgid "Create new translations project" +msgstr "Luo uusi käännösprojekti" + +msgid "Edit the project" +msgstr "Muokkaa projektia" + +msgid "Delete the project" +msgstr "Poista projekti" + +msgid "Update all" +msgstr "Päivitä kaikki" + +msgid "Update all catalogs in the project" +msgstr "Päivitä projektin kaikki katalogit" + +msgid "Edit project" +msgstr "Muokkaa projektia" + +msgid "Project name:" +msgstr "Projektin nimi:" + +msgid "Browse" +msgstr "Selaa" + +msgid "Add directory to the list" +msgstr "Lisää kansio listaan" + +msgid "&New..." +msgstr "&Uusi..." + +msgid "New from &POT/PO file..." +msgstr "Uusi &POT/PO-tiedostosta..." + +msgid "New From &POT/PO File..." +msgstr "Uusi &POT/PO-tiedostosta..." + +msgid "&Open..." +msgstr "&Avaa..." + +msgid "Open Recent" +msgstr "Avaa äskettäinen" + +msgid "Open from Crowdin..." +msgstr "Avaa Crowdinista..." + +msgid "Open From Crowdin..." +msgstr "Avaa Crowdinista..." + +msgid "&Close" +msgstr "&Sulje" + +msgid "&Save" +msgstr "Ta&llenna" + +msgid "Save &as..." +msgstr "Tallenna &nimellä..." + +msgid "Save &As..." +msgstr "Tallenna &nimellä..." + +msgid "Compile to MO..." +msgstr "Muunna MO-muotoon..." + +msgid "E&xport as HTML..." +msgstr "&Vie HTML-muodossa..." + +msgid "Check for updates..." +msgstr "Tarkista päivitykset..." + +msgid "&Preferences..." +msgstr "&Asetukset..." + +msgid "Catalogs &manager" +msgstr "Katalo&gien hallinta" + +msgid "Catalogs &Manager" +msgstr "Katalo&gien hallinta" + +msgid "E&xit" +msgstr "&Lopeta" + +msgid "Quit" +msgstr "Lopeta" + +msgid "Copy from singular" +msgstr "Kopioi yksiköstä" + +msgid "Copy From Singular" +msgstr "Kopioi yksiköstä" + +msgid "Translation is &fuzzy" +msgstr "Käännös on &vajaa" + +msgid "Translation Is &Fuzzy" +msgstr "Käännös on &vajaa" + +msgid "Edit &comment" +msgstr "Muokkaa &kommenttia" + +msgid "Edit &Comment" +msgstr "Muokkaa &kommenttia" + +msgid "Suggestions" +msgstr "Ehdotukset" + +msgid "&Show references" +msgstr "&Näytä viittaukset" + +msgid "&Show References" +msgstr "&Näytä viittaukset" + +msgid "&Find..." +msgstr "E&tsi..." + +msgid "Replace..." +msgstr "Korvaa..." + +msgid "Find next" +msgstr "Etsi seuraava" + +msgid "Find previous" +msgstr "Etsi edellinen" + +msgid "Find and Replace..." +msgstr "Etsi ja korvaa..." + +msgid "Find Next" +msgstr "Etsi seuraava" + +msgid "Find Previous" +msgstr "Etsi edellinen" + +msgid "&Preferences" +msgstr "A&setukset" + +msgid "Display entry &IDs" +msgstr "Näytä viestien &ID:t" + +msgid "Display Entry &IDs" +msgstr "Näytä viestien &ID:t" + +msgid "Sort by &file order" +msgstr "Järjestä &tiedostojärjestyksen mukaan" + +msgid "Sort by &File Order" +msgstr "Järjestä &tiedostojen järjestyksen mukaan" + +msgid "Sort by &source" +msgstr "Järjestä läht&een mukaan" + +msgid "Sort by &Source" +msgstr "Järjestä läht&een mukaan" + +msgid "Sort by &translation" +msgstr "Järjestä &käännöksen mukaan" + +msgid "Sort by &Translation" +msgstr "Järjestä &käännöksen mukaan" + +msgid "&Group by context" +msgstr "&Ryhmittele konteksteittain" + +msgid "&Group By Context" +msgstr "&Ryhmittele konteksteittain" + +msgid "Entries with errors first" +msgstr "Virheitä sisältävät ensin" + +msgid "Entries with Errors First" +msgstr "Virheitä sisältävät ensin" + +msgid "&Untranslated entries first" +msgstr "Kääntämättö&mät ensin" + +msgid "&Untranslated Entries First" +msgstr "Kääntämättö&mät ensin" + +msgid "Show sidebar" +msgstr "Näytä sivupalkki" + +msgid "Show status bar" +msgstr "Näytä tilarivi" + +msgid "C&atalog" +msgstr "K&atalogi" + +msgid "&Update from sources" +msgstr "P&äivitä lähteestä" + +msgid "&Update from Sources" +msgstr "P&äivitä lähteestä" + +msgid "Update from &POT file..." +msgstr "Päivitä &POT-tiedostosta..." + +msgid "Update from &POT File..." +msgstr "Päivitä &POT-tiedostosta..." + +msgid "Sync with Crowdin" +msgstr "Synkronoi Crowdiniin" + +msgid "Fill missing translations from &TM..." +msgstr "Täytä puuttuvat käännökset käännös&muistista..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Täytä puuttuvat käännökset käännös&muistista..." + +msgid "&Purge deleted translations" +msgstr "P&uhdista poistetut käännökset" + +msgid "&Purge Deleted Translations" +msgstr "P&uhdista poistetut käännökset" + +msgid "&Validate translations" +msgstr "&Validoi käännökset" + +msgid "&Validate Translations" +msgstr "&Validoi käännökset" + +msgid "&Properties..." +msgstr "Om&inaisuudet..." + +msgid "&Done and next" +msgstr "&Valmis ja seuraava" + +msgid "&Done and Next" +msgstr "&Valmis ja seuraava" + +msgid "&Previous translation" +msgstr "&Edellinen käännös" + +msgid "&Previous Translation" +msgstr "&Edellinen käännös" + +msgid "&Next translation" +msgstr "&Seuraava käännös" + +msgid "&Next Translation" +msgstr "&Seuraava käännös" + +msgid "P&revious unfinished" +msgstr "E&dellinen keskeneräinen" + +msgid "P&revious Unfinished" +msgstr "E&dellinen keskeneräinen" + +msgid "Ne&xt unfinished" +msgstr "Se&uraava keskeneräinen" + +msgid "Ne&xt Unfinished" +msgstr "Se&uraava keskeneräinen" + +msgid "Previous plural form" +msgstr "Edellinen monikkomuoto" + +msgid "Previous Plural Form" +msgstr "Edellinen monikkomuoto" + +msgid "Next plural form" +msgstr "Seuraava monikkomuoto" + +msgid "Next Plural Form" +msgstr "Seuraava monikkomuoto" + +msgid "&Online help" +msgstr "&Ohje verkossa" + +msgid "&Online Help" +msgstr "&Ohje verkossa" + +msgid "&GNU gettext manual" +msgstr "&GNU gettextin manuaali" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettextin manuaali" + +msgid "&About Poedit" +msgstr "&Tietoja Poeditistä" + +msgid "&About" +msgstr "&Tietoja" + +msgid "Extractor setup" +msgstr "Poimimen asetukset" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista tiedostopäätteistä eroteltuna puolipisteillä (esim. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Suoritus:" + +msgid "Command to extract translations:" +msgstr "Komento käännettävien tekstien poimimiseen:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Tätä komentoa käytetään poimimen suorittamiseen.\n" +"%o laajennetaan tulostiedoston nimeksi, %K avainsana-\n" +"listaksi, %F syötetiedostojen listaksi,\n" +"%C merkistölipuksi (ks. alempaa)." + +msgid "An item in keywords list:" +msgstr "Kohde avainsanalistassa:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Tämä liitetään komentojen listaan kerran\n" +"kuhunkin avainsanaan. %f laajennetaan avainsanaksi." + +msgid "An item in input files list:" +msgstr "Kohde syöttötiedostojen listassa:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Tämä liitetään komentoriville kerran\n" +"kuhunkin syötetiedostoon. %f laajennetaan tiedostonimeksi." + +msgid "Source code charset:" +msgstr "Lähdekoodin merkistö:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Tämä liitetään komentoriville vain,\n" +"jos kohteen koodimerkistö on annettu. %c laajennetaan merkistöarvoksi." + +msgid "Catalog properties" +msgstr "Katalogin ominaisuudet" + +msgid "Project name and version:" +msgstr "Projektin nimi ja versio:" + +msgid "Plural Forms:" +msgstr "Monikkomuodot:" + +msgid "Use default rules for this language" +msgstr "Käytä tämän kielen oletussääntöjä" + +msgid "Use custom expression" +msgstr "Käytä omaa lauseketta" + +msgid "Learn about plural forms" +msgstr "Lisätietoja monikkomuodoista" + +msgid "Charset:" +msgstr "Merkistö:" + +msgid "Team:" +msgstr "Tiimi:" + +msgid "Team's email address:" +msgstr "Tiimin sähköpostiosoite:" + +msgid "Translation properties" +msgstr "Käännöksen ominaisuudet" + +msgid "Sources paths" +msgstr "Lähteiden polut" + +msgid "Extract text from source files in the following directories:" +msgstr "Pura tekstit lähdekoodeista, jotka ovat seuraavissa kansioissa:" + +msgid "Base path:" +msgstr "Kantapolku:" + +msgid "Sources keywords" +msgstr "Lähteiden avainsanat" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Käytä näitä avainsanoja (funktion nimiä) tunnistettaessa lähdetiedostoista\n" +"käännettäviä merkkijonoja:" + +msgid "Learn about gettext keywords" +msgstr "Lisätietoja gettextin avainsanoista" + +msgid "Update summary" +msgstr "Päivityksen yhteenveto" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Nämä merkkijonot löytyivät lähteestä, mutta ei katalogista.\n" +"Poedit lisää ne nyt katalogiin." + +msgid "New strings" +msgstr "Uudet merkkijonot" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Nämä merkkijonot eivät ole enää lähteissä.\n" +"Poedit poistaa ne nyt katalogista." + +msgid "Obsolete strings" +msgstr "Vanhentunut merkkijono" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 uutta, 0 vanhentunutta)" + +msgid "Open" +msgstr "Avaa" + +msgid "Save catalog" +msgstr "Tallenna katalogi" + +msgid "Validate" +msgstr "Validoi" + +msgid "Check for errors in the translation" +msgstr "Tarkista käännöksen virheet" + +msgid "Update" +msgstr "Päivitä" + +msgid "Update catalog - synchronize it with sources" +msgstr "Päivityskatalogi - synkronoi se lähteen kanssa" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Päällä, jos valitulla tekstillä on vajaa käännös" + +msgid "Show or hide the sidebar" +msgstr "Näytä tai piilota sivupalkki" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Aiempi lähdeteksti:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Tähän vajaaseen käännökseen liittyvä vanha lähdeteksti (ennen sen " +"muuttumista päivityksen aikana)." + +msgid "Notes for translators:" +msgstr "Huomautukset kääntäjille:" + +msgid "Add comment" +msgstr "Lisää kommentti" + +msgid "Add Comment" +msgstr "Lisää kommentti" + +msgid "Translation suggestions:" +msgstr "Käännösehdotukset:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Vastaavuuksia ei löydy" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Vastaavuuksia ei löydy" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Tämä merkkijono löytyi Poeditin käännösmuistista." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Uusi: %i, vanhentunut: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Tuodaan käännöksiä: %d" + +msgid "Poedit Update" +msgstr "Poedit-päivitys" + +msgid "Preparing migration..." +msgstr "Valmistellaan muunnosta..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Muunnoksen paluuarvo: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poeditin on muunnettava käännösmuisti uuteen muotoon." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Tämä on tehtävä ennen kuin Poeditin voi käynnistyä. Aikaa voi kulua useita " +"minuutteja, jos tallennettuja käännöksiä on paljon, mutta useimmiten aikaa " +"kuluu paljon vähemmän." + +msgid "Proceed" +msgstr "Jatka" + +msgid "Translation memory migration failed." +msgstr "Käännösmuistin muunnos epäonnistui." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Käännösmuistia ei voitu muuntaa.Virhe oli:\n" +"\n" +"%s\n" +"Lähetä sähköpostia osoitteeseen help@poedit.net, jotta voimme korjata " +"ongelman." + +msgid "Cannot create temporary directory." +msgstr "Tilapäiskansiota ei voida luoda." + +msgid "Welcome to Poedit" +msgstr "Tervetuloa Poeditiin" + +msgid "Edit a translation" +msgstr "Muokkaa käännöstä" + +msgid "Open an existing PO file and edit the translation." +msgstr "Avaa olemassa oleva PO-tiedosto ja muokkaa käännöstä." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Luo uusi käännös olemassa olevasta PO-tiedostosta tai POT-mallipohjasta." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Tee käännöstä yhteistyönä Crowdinissa" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Lataa tiedosto Crowdin-projektista, käännä ja synkronoi muutoksesi takaisin." + +msgid "What is Crowdin?" +msgstr "Mikä on Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Käännöksiä ei ole. Sepä erikoista." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Käännettäviä viestejä ei lisätä manuaalisesti Gettext-järjestelmään, vaan ne " +"poimitaan automaattisesti\n" +"lähdekoodista. Näin ne pysyvät ajan tasalla ja tarkkoina.\n" +"Kääntäjät käyttävät yleensä kehittäjän heitä varten luomia PO-" +"mallipohjatiedostoja (POT)." + +msgid "(Learn more about GNU gettext)" +msgstr "(Lisätietoja GNU gettextistä)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Yksinkertaisin tapa tämän katalogin täyttämiseen on sen päivittäminen POT-" +"tiedostosta:" + +msgid "Update from POT" +msgstr "Päivitä POT-tiedostosta" + +msgid "Take translatable strings from an existing POT template." +msgstr "Poimi käännettävät merkkijonot olemassa olevasta POT-mallipohjasta." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Voit myös poimia käännettävät merkkijonot suoraan lähdekoodista:" + +msgid "Extract from sources" +msgstr "Poimi lähdekoodista" + +msgid "Configure source code extraction in Properties." +msgstr "Konfiguroi lähdekoodista poimiminen asetuksissa." + +msgid "Sync" +msgstr "Synkronoi" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synkronoi Crowdin-käännökseen" diff --git a/locales/fr.mo b/locales/fr.mo new file mode 100644 index 0000000000000000000000000000000000000000..93451897224fea5de460e16269e59e315994974f GIT binary patch literal 48628 zcmc(o37lO;o$rtAH2c0O9)WZcNO!`f*sMusA&@44bXZlq>3h5TLifGRU6OQEWDyix z5K-JvU|b-Ah|8#e%M6X;_*}+a8J7`pTn8PLamV-l{r^?xoZIOHo%i17-A}52r|Q(H zQ_H{pTh*z2fA8(yl<+%fnEo#xQ}l1BuN?A z7u*}11kV6p16~Y%3)~%iUT>1@04@c00|!8rb5Tei2Dc|Z4(@F4IcQ2EXU)gMEk@-;x!?6Zt*20V=P*MJ9u9{}~9&x4|;Z-9_i@;y-R*_F!e z1wK3A(cqrM`$63w1ofVg5T5`w?pFuA72KEj1K{D{zlQj4LG|a(bb`u1FyN5^PXa{` zXMyUEK`;d`2lc*NLDl0x_n9Gne!xq?C8S>tYWyAoPX&JhYW!xO=;a&(D&8OBXMyVXi$T@n zYVb_(RiMiGI>=BbzXMg@o|C*D$AZeg6jZy;40r*k`i+39Z!5%K8Sssu+H*T7dioHk zcHR%F{C@^D-VcMKv+sbz;7%v|{HO=K4s4VDE^rQb&?)}DMWFg`4Jf)A16BT&pxXT^ zP;_+@sCxbbsC*v)c~$ZdsQLR0I#2oc0@aRZf=7b$L5YeB1HKg0Jbov5Aoy8O{rLlM z6}atb-mXDV{dFNY3%oesHK5A73sgB@1l6BUg37<`Lg!OEflA*S+y_iS_2Y4%>c1r5 zh2YM_>!9*af@Pii|IGmp1y2CC0nY>f0$vDi0?+UF=eAkwgo{gZ& zzX}xpy#d?~d^>m;cpC_bCR1QH_*d|mVD}OqzkX2taxSQTc`>MdtbuCJRiMW2wVJ_bVQej2RsJck@!MT{jnTWzLf#Xpz=?K_^Uwm=R3gHgC7Gm zZl|yC=U)KoeQQH}16U(|Iml2Z{|W8@9y{RU*$2W3lG8!eAs&Q2lugsQTX(@Si}{=Nq8P{{^UWe*^9Y?zYnD;t){nKLS)g9|>*; zE&=u286kcSxC`;~Ks`Sc?q3$tCj(vsc5(kkP<-tca1QtZQ1AIRsPX$gxDosvsCGA2 zh4BUTp34JX530PI!Ck@I1KtCQZ#)1h{}(~!`wqA#_!y{p`y?nnap2kB-sgdP5I+r6 zd8vGI{~7N85qu8uu5-K}=YcBk zxDY=X+?)84kbXX>el3M~9o(7t22ky}3RL+wfoktn{TCtqkD%VW)0!lC9k?$j`g<3+7kDQq`nez67yJ<@{`q_GC~&`X zoqsF@A?;)_cmjA6xF7fhP;~bwsCxetd=UHt_!jUJ=Xw4$=X*cA4*Ut}n?P7ka^nTq zEa1O^LtyWPv=w{6%k+sV`*i zg13RZBI$k+wi|c_NS5Srun#=*V&*n@EqEh%%!^$fJp_ucCMAFF1duGrdqJv@?6B7L z$F-pP;U-XY@>cM7;3n`$@OB#UOz;b!#^YxJp9Iy9&nSEU9{}!6d>*LuQ^6y^HQ@f> zM({xJMo{_Q2a0Y!3BDTqJh&}*ZpG>LLU23cHSk$r6HLJyK|TK=P<-e!;5OhFLDAd4 zf|~E&0uKWp1=YXX5BvL%33w)`_Lf1>V+&MySA(L5SBLwzfT&c--Jts6m!RhR&LiH= z!vj7a)cuv<;oukuDJ8E5)&8G=n&(e}s{f9oUeAL;wQm+Ey6y+{{xt!I!5xUN2X_Q7 z2Q?1Yf;)k408amB&UV4e+1gQRRhxjC@ ze!Cn@!Mi}U;|t*S;EzDn^JgLbkKi|-K^rdh`u%jw+xc5i&+Q2Dz8pLh)O>v>csBT9 z@CI=EnveUNz%JsOK;`=gxEuH{pxXbffIk40?fY|dz@12+2ks6Y52_xE z16~B~OuPY#USAsU4WQb0C#ZhD2h@A+2UVZX1bhTkxxWhd6sUZ=O?W*I1a&_JHLmkP z(f`7L7lL~dZ-SziR|LEhR5@P&cLl!%s@{(U{1d2l?R}Zk_aOmK30MMC?!N-m``#1q zQ=rQI7I+l+C@4DKz2W)ifX^nrJjAPDH}UI1wc~@}67Zh_?$Gq|R)Bkuejcdt839$_ zI;e5EHsCu!&Bu?1``-!iUx)kqv^@V&pz`&Dhk(PN+ItnK`n?(y-QESN9ruFAfZqj= z1ovqBxb}gXw~GV50u((z6ypB{?o0gWbv`~z!Iuy}AJlul4lVsA0L54S462-M zX}q5A0X5#|f_s6L5MK|b#IFUHf_H$T&&R=2z(0ZNk3N`-%3T7g-77$~(n&f&g1$VgGaW?oW;-`bhgI@{hJHEolWe#`*>1TsGf$PBSz?Xv> zhgX2A=S`sAcNeIBe;7Ozd=lIR-1i#4pMu8`KMB-4y$sa+xCJ~B{2X{VxZSl$@_cX( z$P`P~f*Qw1K(+5N@M!Rt0S|qpzjqa=@-GK9z8?m61gAjJ|NjD2-yebpgMR>1a9=v% zIpFc&Gr{vfU7^w04Jg9u%2X_L03rbG?1yp@^xz6cxKTz*IB;c{2 z@|_84zFYu`j>@3=u??zzH-d+OcZ1u2Uj~nUMv{CL{50|HUhU641ggKk0qVKm2HfK{ zo_-{_GwI7gwPQ7?`VNQmI@nEo66^zS12vBS2CDr#zt;KW;h@Sn0Tdru1Zuo407VZk z1NHvbfOEk+z&YSoK(*tKpz=NIb)Ih?xRm%ZP~-JFQ1k7b;4<)Mpz-G$9G8L`r;EU6 zgD(s5cYtcor$P1K=fLg3$3V6B=K=o${+0NiuXnoG^G2t?0|PDwm45=%e7ri~Eui}M zAHkL2*F*e>H~91Ypy;j+o&>%dJO=zBD0Uht3L4&dB3 z`g03Fy>|fI8yo{q0ACL71AaW*|3biDfU0-bn|yo@2X`di2dY07h4j+{UJUL=`Z`eK z{0dOx_fGJg;C&%}{>@&mCOC`qjiAcC4ZH%p6TAqV`({tS22}lC3l4y{gQA;Xfok6$ zz#~8zS^ERCz_Y-Uz!Sh%gQA0nK#lVrZ}t9}52`<36!0aW>iZT@^XS8%#{W~G=F=mf z=;9Xve+%lpe*snh!`|l49SJIaJh%sVGPo-^0IJ>>g1dv|fX#6KD)0c(Zvc-3?*R4Q zuY#icAA#=xcYV9J`+eXp#6JkCe?A%TD*=BD9!UBhz-NJb-{R#j05$%n2fPSWztzCw zz-vIg|9(*I{V{kj_&BKNcBT@FKND2^dEj>78KB00CHPG6g`oJrM(_~uc2LiK5}XZw z8&p0KhweWM)ObA~RDU%<_20`w{030Z-xAV42CBav2Gy@W0M#Eq1C{SdQ2ny!tzOR~ zK;?g4h_3|qBEA;f4{U|>>qGiGLiz_ljq_(fNI3a9sQO-Un~%>eU`qV`pvLt}pvwDR zi2nvuKW%fn*JnS_<|SAmeF3O(x;fnc0I2*^pz8ZgP~|-is(-ip2XE)z;Df{u1=U|a z1P@X^Q2o2pyS#rFfEv#M@Mv%YxDEI|a5eaT@MQ2A@Al_T1y!FBQ1870{3>`e_#?3T z9@pCk-s}Bx6L|15;2+=$?tkqLbTcr$)9u15!5ZKCTtY&ZD0x9{e8?ea01l* zBkpoN;%xAE;*WqAgL~fX@_Pd070FM*bHUfY-~Adt0bfLX{2u2MUjS9#gFgVT1)l;J zf*-lp?c4tb-$4A-4|+LY1q)U=>!0o`lfct>k zeAM~N{-Ek{DA)s@4(<)E19t(h1NGdSK+)yfKs~<+oCkgqJQ4gkI0x+hnBz)N^Kt{I z`n?Gh-Q5eS{+|l?ZBYIF1Sq;X`{ORZuLiq`-vJ&0ehKUYe*-Q6d++n{zZg7>_}9Q4 z!T$!;4^M&W$Aj%G5cmS{0B{|+6Zkq%&%Zg~t>OM1;EPHBGZ@wXAwpZ`TTn{aH% z^DM5P%XK5fA0)2dUc`3`X^Ovz>uU-7D#GuVT<<`*iV%N43D-MQFRGoKPP_^p1pcpZ zZ#_6j+V{a(O6U5%aPM&NxNv7yRDL{qGX=+X?&%cqZYkg!_sA z2jN#-Yb;uX`1?8+eK==+p{3`yQSGZQ% zsl=}%yqfUOgs%{OM%aaL7eTbXhHw(sBZTb;M-t+18P_}V-cOP6GD17tm{0nTxfbtw zlI#7$Gj9lZ9qFeMK2OkZ%pn;Ck0H-%2q)^A@C?d-C-Kj6Jpt}Y*q$&#T(o&B*ZOIm z$KPe7y)vXLZ5`LcgxOsGfv_uOevtTEbTj-OB>o1jSAeeqzXR?>zMDYUYx3`eey(o@ ze+#}A+!NIA`2@|=mny>VPY%f`;r@*Q|Bdub1o4LDq&*SRmAy{*jV}28H{o^R-VX!5 z5c~+COc)}3fUtp}-`>=7U&1zouX<9l0sJ9h7U7HJ`wRiLn*HX6XO-}wkh)XAy$kn# zLfStNzk={;t`8>kg?#J4*Av7`zD@WKf_~dm5B36BxpLw@nH%fW9DPU8B{U@xejiunui7ZCLOPw?G@!w3!Hza(5i&~H6qfb{bS zw{SfQ4if&A>j}cu1pS(Xd8D5MUJ2@VxkL8%deT21?!6y8KU{wZ{3KxyDz*f?jVG=r zoXqvf;3)+C{*&--yYfF50PiJF@%K^U&n4k0@EXE$u1_QENVtn|I6=Sn5q2k>ph)4j zAJ4py`00d8xqdVFig5p@#PvIup#6Jy68|07{~FR$@Hd2&gl^K`M9}X_!nUM63H|`o z?{31&xn2lPDk1z%AZ^cZeF@hWa{Y18ei}G_T>*9d0>VMM;CBc4t_4ek1IY6t;y>m3 z?S#(|^!qVsUn3kycnjg1q}>2MLijJj5b+xc=W_j4!Uws&9sDw=-%GiE6nr+Q-@gUi z9o&a^e$10i#_DoM(l-(I=eh^{F1QQf0m7e%zYf%Iitr=izakt;h`%YWzfa`%A?*;l3^(<-UF&1HTA%hjv;2#K2h1~B1+r;e$9?QjQ@N@zhlKcFi9Z(7K0?~fTn~W%0$vQ>12)6`+rW!RyM&z7W*!?cm4#GWj~!cXIvTU|+a@4e{}C zy)opwfcPq|7lZ#um?SJ9+(+8IpngliOa0Px_16;rR=9U7>7{V}0j}o~z8CVY0Jo!l zi@1Lt*T)fF#`TGW=M&yX(C;$B&j`y1UnT7*LXGSATSNR?MBYPqe@MI+yqom3;F6Fw z3@#+?jRgH(5B@P+*THv?_73nY!hEiOu6ya6@p`#BT&qOY3wwtDIJ9Emk$c zMYYn5my_xGQZpT{j*V5y>2RYyp0-9SX{%AHHOES=YQ2_@SH|m&$=>(?&!+1ujmqEr zOrue6*u%Q8_g0(Db|qb3ZH;dBvf+BWRVO6G*&YsnrZOy6G zTj^N6RHjKo^+uyI)EZL*JbQCmezj!_4>Z$Njmj_?YD4r`_rkUHb}K--s$MBqi7l$v zFC8y6F6DmzSe=#f?*973WYWF3GFE93TU@7xrCK>XtFnRYS+r)+C052#YM*p3tdfN~=YVbf8pgm&Q8N#$#HY^hUiskuI7{`|CA55L4Dp()5sWdSz@P={~En z-bzwe$gS~(d8MV?@PE=}E+^SMj&Ftu?Ld5elD(kBCcC+(! zgwU7Hs?N(EQH=C8%}QFX442wt%$`zhq+J?OX^qNd z?P`P8o(Fx_*EiD>(t1O0tu*E)C#4#B8^+|MwbhYR7B@;GM(&Fl$8>3ZtXyd{)6_@M-WmfaiE8dav`bJ4Ta_W|!gJdccFrzf#v39FIj(`~|jg7&oMk_;? z(mY7RrVXv{yk8%mpi|O;mDc0w`q4@)MYvUKBgvu?e4&16g&DJ`1Yu2-TBCi*qDqU| z0_|xk87nN&H>wR{t}MzGcKiAH^0Ma0saC&Em}OOxqZ=1{t}%8aNq zn`yIET02(hO%^qHbE9Btj~L`8*G*C=Cr!8Tb?pW{T5j z1{(U6;HPWQ0@hb(kVKW_8L3hX+8Z}c_NM(dKCMysP<_I*0@_`#F>=+~&{(@nC&khk zR7R68ocg=HE4Ubg$dZ1M*_c4mcBnz$!v!ki6ZJ-knU&2kp7bo04V9rbc^HP9T9%#non=KxNejj30O){m_f}`v+R@_^3;JmZyYA1gJW`93a0&Wo9?qNen$`udQxjCRnuFdKBA)f4o$DA=>dXnNkL zNPTc}BEP4Z;R3~&jX$8oiYZkZziAUK6k3>4VoUyDGkdWHrpS7deoIkVk^hC1f}Y@N zPJexD4C!JNg_c+<%3mkR{ziR$xmruafkjo2OyC>EyiK~xS*=~zG$-f4N~>>}_pN#% z)}aOjW{LJQTpbbXa#>6DAkOMcTmvx!oQs*Jit7>s)Xa zdY}R!qQ%jWLQghB9iZGFb~XfNJVvy+PZCyTbM> zrExK1THBng4WSHKZ#3arnyRp^RvM~BYg>)6qmur1H&sP|kmIsT``dS(XNd8=a|Q3muC7FiH=J`Pb?U4tj+P zB|R_tGMzbGN^xE|g5(VML`v~e_e$~JqgT9D^0IL$y@z7JrAdKIgz(UM6|%l2y9{n& z^k|bMl2B;IysWZR9m=pVMloqb7M`vx4PDxsm8E$aM0&B6k6!WKjx5D{nlTK#M7fDR zlWXDiy~&d94cK-3MKIA%D6fM9E5v@xR@0vp6VH`Ok408#v5s3ET+s^1_^M@&RArGO znJGc+f5~{MI@Xsgf%P=}Z@RS2fUZVdJ#@|W;V95DK|Y!QEr;)Xa#e-flfBr%wA)*`x2K>Zbrol z*qtD|+=!a#j=33vE)-c&Yql`f0aW`yS2b*K1Q5)w`IF9@c<`~n4Ff{fMI>(x=8GDa01rmg5F z?FnATe31U$OqSAxbgXEY>1Ik+NJ0uLwOvC=M-8(vbFYVp3nLe4l4rGfjlfg6D$g~j zVvg~OO!?^82pKxc2)wW`SA+M-t0fU;=5V=QX^K@hs;ecuurcZvp?wo4lDKhV6G{lK1)I9 z9vsl9Dr-6(auu5RcjX!!uyXXGEf*EvhqYPVNLGJ)t<0k^RP#gGRc5(cOkHtK1$j19 zi4RB$1?C2!=wT9qf+af46N~NfoaW!MXC|V9U}<$jx*|9h$h0BXoE6a&KHa#8-BZ+= zN+J$}iy~PnVLNK>n7t znj32|Q9RPZC~T&SV%($yRE1j=nw2gY_(ZaNak6|ER$_u=Uer;H0ZI5%wPB4peJ1@$ zEJseGwvmZRwAeFU#qPt%#B&n_Q>QKzT(K!{RrjE;R-0Wlbod_3sMe%ugZ6q&0_a)n zCau8Mhgzsrz3CtinOms%zAmxHio}{IK;>d?N+}4h7(vBD(Nt`$oRSUA31%@fmwM>o zAvEJ^ExL3k@XA4S^EOvJaBwhSho=*?Jba~_Sm z@{v}pFD6Z)DV62&m44v*6ZUOe20k?%smUES#JoZVvvG|1&OTn4a+nW+JhtOBT1dT4d-lut1j1;M`)oguv8BG(U zyf#bHO&luG{!UgvkTtiBY~HD7J#Bz7C|suQv5R)1=kacgQX=}R!c%^;;8kgc8^&nW zxi*eok|;ggF8D&Tx5+k{Rqk92kWLgWsC15Ikq_G}6h;KvTpFUsDmCod5e$G8$RCve zFU0>OGNLOd@Tf@y;(~8h#;ce%O83z`vUg}=;>06+N9Xn>1JQ87sxkeU8S7G;S)d8& zOu$8MZ!%E2w34o$3%=gjwD;@I?rb}<2#ge%Sc zg3{vDd$`5aooP!gG#_WLSX{isD|bGCpIlOQ|$+!@*#T9n?{5I%z6bU z>~37}^RYZd;Ob7@aA6;Ah!*3G&^|Iz0oR)GJ~zfap+L>aSvWp|<+M~QVM>T{14Voc zqRM=B_PXh;ATHMNTr|OKNlgXGA{eWntD7b_{YlG4L+UW#xa4IWY^=p5z335#on?wV zPW&ejhr64dXz6{(GB^kD4a$hna|oF>ecph+%JVQZT+ynIn1jZwNy~+p)Y!(Cpr`if z5P+3ojU!S_va(hoXu6mXmN3w`w;G}rRs1p*&#J9SQJGZ<)kuqFnOjuGan@0B^%J=& z3n~{^<^^?Y6ngPdkW#}M2#yx30OM_vzQg=YR$?&NpR6xplf*!E*U2gLlnBNWSC z?0zk4MS89%6p9mJSyfDAPaDPXc+jo=`4BNzs|;mNHR_rES~Qg<@Es-Xg)ORq~hm+1|(8{!!RmhYMqRW^;Pj+ACa#ywK>+%=dP3wYk z-5IA8kP@{m)zG@~_nBB6M_{dk=XDKgO2A+`Z1Q>05nVDJE%vW`M2LpqRSoa#O;+LG z)i59qGz`W_ef`t^TAghErmI_%2>MklMKqIOPSiEpQn9juGrPPwQ8#IljcpZ`0X4W6 zKQIr7oP#0aI#`eznd;;=lR4|_MCbZ~M4;@ERdQ@OZ}a_aj}Z`+WVv?X)cwTrkdLt zWRX^!)U({RN~H_|$p)?=v`nDn97(NqUaKrlJnEJbTy9lEDuC!@JPKJ&Y?7Om27}`H zY(AUn5azZ~lydo^cu`JdiA7nFB^C@a`c{@Xq8F6k5UD7o5UQgMQcx^Mb|;H*p~ZCn z8Wox-iML#8?NX>m<7fVht8~vDsFe_<8q$|ud1X%u)+#Y z1w*}x=jj4wWz^ab(trHU{W--Y)VPao~XEYqR-B?%EW`@-$ zY(*?I-%>tmjOb#91z&h}cQV5{w- z$db?zMrG8C@ic=GZ#Oz4UXUz&zuDFz946zitl7x0oRKE0rHm}EIj&^Qz!LC)2UPb( z8^V%MAnl&9BkZp}V!mdZU68~JS(aeYXub;!Pgq<+Po{tEE~W*$i2VBOcAZt~WVKw- z*b(dvf}^c$;E2l8R@>rH9v{rPS)ORzpX~<42c2Q$c?u*#qV})A^ypP+(AP7IiRiGw zb!bYGv3|M)oj>Ona)?A7E%Ic4sTXXt?6NR=HAmUJAVpm+W=4~hEO<4_ZmgRWtztDK zxk~HsUFu!gEfpNIdCRpdZTq(v18m<>XFw9TtNM9U8nU#j>+Gt#+#S zVZCN7BW2iKmzrvr?WmX+JneK?z6Am=QruEuJ}D}XyTY}W)hy*D`s3C~Hp566Wq*a1 z>omy=jomz>2ElBb;?vU;(_wRXLo$;njT^$M0m@^ClnKija}Jx;JPfNJx9gzkjx*@u zjHndVsF~XMh20IV7ZmGkYBv(Zi;H(U=8I+NRQmJMd64B#7GET8*{o46%V6!ZRQ<)k zEC|$OkS@cTF@L$a7>b&5G`pLa``Tdw&8Ul`E@hTKW373FJ#OpFrh{h=MWbf9IC?VO ztT;fZTgG66`h{BBzzjrLCJG@t z(JE_LVG`0uc!aDUg6$$D7sslZsmSzoQj66fd!y0T+KT3c)g=vMc*|uBX{$!?y z+q+UqJ9h@ys+;UBtJRFQa#(iM+u4{ljDe*!Be-Cp3j#l=;E0hZ&U|l7D%o?f^Tco1 zf>$3ABQR6LD_$r`W4e|8_a>pdn$9Ozh$(z3nB91n7C4zvob^^tCe6|?4kMr1TOQ;8 z8}G=<_#ac%^jdo#v70hFhRqK)XKe+-wDm1lHAQJ=w7_~?6`IS)xit1|VA=dcet3VG z?J6V5-vJ}Rql4##J&P`Z(4$Q=j?)mTWnzS7J_f^io%kor3+js;KyM(g*6CbkLap92 zv%*&PI051lP{pL2*nd|kT8=5v38I3(x1h~lB}ulq*N9r@n!sd~fB9}awWfbq#&1x%AF0;PWg1u)Jx7CfzB85`)`-Qob*+WL+tnG@h=g4EK$&oQe z7)#oyj*PY>{p`)wy0B(%`!BWPD^Aj4;KBg+rmO4NoAQ;%rp9H;&>Y*GBsQ(5kX`J% zvKMH*HSlP}hE}Y^L@N#Lm~{>s4d%$_deepFOM;)z_>1_JEfqCg0t`{U8Irc8Gqu%} zI2Z`GU=Y*EEX=XTNX=9&f-^dFbl4yRGg5_{ra~e`0^c-d6870}pHYiG#7ObA`ugc5 zTSuC^RXnaxtZh2AyCTSNFZOK5E0OzpkdHNj%yth7glunP>csbt($&#}Y`RgWKBjSx ztLfHvGigEekZ-Ot;YHz5difSmgmG{nQRSd|88xo2to1=0)|xW?%cJ~Li?ymOIVCBi zMvRr(D0+4)GcbC)W@*RZ1o@0@=s9y|FnAbUzWI3!zA)=dD*``C7q{Y)5$Q`~y8OR! zyEGhXUe~OC-HKYn@EDuc=QJx?;Y6Mq$x~5VbD(v&8Fk0_Wf*u_C#dcXd;#bal47=a zfxtpcj7V0nSo;yNfs zv?{9kJ6bcX{6J6?uH9`Ng~waTV0~o76hFEku9bui*I4-iLZOR!0K+dCl*#VwO$6a_ z{M%*_#AypBlFsXk+fgyr@M;v6h3|x#laR@{lag3hrjZ*lg*jCzcNv2!j8gCkBeBiB z%#vjbV&;<~riXp0qFEX@cjH74J_c4~w5S%g?=y?#zRpY_^*Jk^i1p@NEvexSg>E!p zRC!zu4OP92ayo|QE8-5tl4}bBABNDZ#w%-@?CnZ?qWym7~QF}ax=;wVA64=4I1 z3P~OJZEGG|g3YdDe#V7>Oav81IoCqq8a6p4=`%K<(a<(sTNVh?lcDI8K*l9-D~C2P zXzS~V8&7;A4zJbJz-*~-@ zM&O{D={_ryb6Em5dI=Z0<(g+RIoDT3L~`eqY|E`xSBuoJ->~6J{c~Pr3=*f>^&nM~ z^CWg@RnT}&C4mp{WKE*3NFFBs!CU}d&?rryzuUULU(=Tt_)3CrQwVH&#^&Z*LuQ)b zSwRR2`+Ux~c`*m6N-+LucBZ!KOTJ!vxhXkxhj|*q{cObCG*qKay>ZWvJ?DFrR6@Qn zJIZc8gQaJDDIVR4D#_Vmygxjftx9#cvCOzJO(Lp=@-b>2XoFEtWQ2&3;GRRDT6R|c zt*ntjc*Ev&;8sb|h2-oSzY7LbwtW}}eplD5X50ko71TGcr%l*0VsDK)Nhq$bz!9;M z*s3Jc$y_MC$%PdTHNLQ3A5ThStz?MJDv5VN+_2ALvVZUtgrxeK-G>MPChgqBtdyE7 z>CKamIWhQ8Po7gtPf3rSdt%~jRc4)4r*HoJbj>--lcpA0l6LJjdO^?8$EFL8?K}SH zo(0E|Z`ug=rR(_qd|ma@^rUsAA+ApIXm7QC3VHqG)E@al``AIj_t~RaY9Gw`;-%+w z4J;p6lDF>Y-UVI#Feqkq51&?1U$L(FEKgQzCq_fyWD{q3KJiHQ!t^X*3%yL;zVrk> z1%x!THty?@ed$&PtLyw8->u3XiavH4*taqo0B!`f(StG%&gpwqka%xkhaG9M1Kr&P{wW&3= zN#@zam|g07N_K2v&QEO`uk-N>#47$&ZX37Gjs@UpalO{&1!&FWX-i;@rX5cS;L0k6 z;9fg6b*GpvOmiL8Dl;CcOa6W}B+G|N>KV0LZ}Xh`{C@;ySZ*^}heoS793Q;v!P{mv zAH40s2U6)#Oe)l(&;=}hji^t86UIIa4TlI&3a{8=G3tiR3-Yan40R}J6$3FmwaE_` zP_H6`x~HyCb0+G=OWj*#lQZE1#l~grO3wtJDUf9;+h!{bJ8^*4@S%HqVxm#Cq=gf> zjme6Qq-7f4pi7o5rB7YQ9uOv}jv=tV(I@nndkqC`Ul_n6Ul~(fisut-DOs!2ynE`l za2^5Iq5@TfX~#GDc5cCDsS8=d(W`+v^%tYZKq`sG2&xpfDEGqH28M-Q5%99h%xyW-4{Ozw-t~))@<eN#k! z>eMZEVHLxpFQ1VNw{elx66YCP%QAo!3Tv3UExn}PjYd$eOthu&QBc&V2db!hTg%|5 zAV3n+dMF%^Fw>2N!TO{1t_=V2YIzPf*aa7S|aH?4Y8dG@|4}*!gD}@QN$jpyNSVqCk%ElhbfPKp5*TTX}cqM&6|077`eJvq4vg9&U5g4$|jF?^N zu|1k}mM%8Su?&1vG<7Ew21lj`8{%wPmMy=D3ecr8SWR+4eHs?T;s2A$49LYdgxK^+ z%|&cFU818NxP#vZx-zTC*(^;i%2Pk}flPEEqe`=JoEbH3lpassW(j4=gqU;EH8liQ zc$e-A7biyhPG#&s^6S?KvO&=GN!o_ zSeWXG5RJYj=8n(G6zO_uaxR&nUMpZ-qlA=#t5YL3jkT)G%rI$YRx@}$mqwXy3nH*m z)SWCd@YnbYii9W;HK{Q})<}AMVUEv(K31R6J3&vf5|L^Wvl@Zy>q*WYz;}hsNq%h) zRqw3em0=m7nXa9BAFCcFYAZE;%iCsOqLvcgQ|Xdi5Q%v!d2Np!*`)Ydf}w&_%cI?G*E zYG8*UgtenK4a{+#Q7japHK7tyDeroO2))66nr4+$I&ehU)QN1Ix~#2hV>D?A{inX6 zI!>Qz&o3LUP+vBtLvoVFlPe}e-^E&Z^)A`j%Op9nZ38qn#`n z)^bLJQ&nmvLG{rP71Nd{NMlHoOfsy4^T;#GNW%sFBcqt#rVD)D*d@}1&>l)&P`QSo+(LuxrMb+ImD@<+bO^Y)wr*GAbVYb6Ea4(7W9=z>TS%jIo z;yl;(#1p^vuuo~nM26BO^n0V`_#9|8IZgB zGUNMHu`fASj2~Z<^=>&HuAyzGSas-##SEp?`qAnPnT*ZGrX5w^PK;KH`HJZ|J75`y zoD-Ft=~x3hc#OnPu|`mf88I-F&25j2d8t`jD~4_;)-=$Xn0l@=CRwWHcP?MET3lb=lUJLppxv5!j`*}x0%|+s6vd(a}htu1@pp7xCU9yW= zAil6MN{#$2uvyx!ov)N-V%C~FA#IpFoFYNglE4D_>=`4mTWxJRu#=iB%^F;B`$(0Jy(B@iD z)?i3>BOM0N=JrGko!^S?3bt7BC7LR4zcxZYFG!`{hEp)*tneJ$} z*4t(#ggVkee&PtH@)=em$(H{Whq%!hVE9IB22b$W>$Q5Rh$oU zloW25(4Y&Gb8=1B*rgjsq8{F%vq^ZVYHeyD8mZY%TfAKq9+|qvGKA?P&couo=~Aag zwKkUxY9l*|eSjrmibYmjh;BJUu2WL93{tfsCy^#!c2(I?=9+;SYi{#ckDkhxb!Gt; z#GWO|sAG2ts&|Et7XS7u)6 zvZTlM(%LC2;%+FV7~0k_)Fg@-W5Xmy))4OCq#t7vjRRtgGpR#c3iMdyv6&hxMRG;Q zgHjZ<**;UVrRG8tSl4S!*>a`bH&L6`&LrlT7V{b!(`5G+^MIY+Sj2I(WX<%nupMw4 z7ChCtAIB8(sI4%3n>l*6l%b>clH2Gia?WXNyu5-7IH=~<;1s_sXMaS^$V_ndib0I{ zLlN*bEJICjQ#s-UwJ8rR(%&5N!a&e46AX47iv$FAk54Nn{@fv(_h{}I%AS%NV76?r zhRz1i@P!GfV_HeB3z=ffDFITA~LaZ>X8#&vf z{$TP+vq}12FhMrE=jXvlD>E|jc_yD0ywxRWZ&u*+@yW-<^-A{sb(BBM;TWdwF)!kz zXvQOBrsb6y9Yv5)$ClP8B+8=BC?mk=W;m=KC)cl-UslL86UD_Qt@pRBvb&2r7Mh!wflc zzkc!6g^Cv5Y7-~-@%H1Xab-Vxj8%7p%pgHsp zeO8>^lR6C3P0LhWoW7OaLN3PhxR_~dh|SL5(YZUTtL__}+LWEU0|zQ$nUyp#ZKSco zBvYc9QjplpN!J!7yrfqZXr|KCX*^-2N&dF_(50qSM&UKxLpj=NO*C1CAIg_^=Tm~6 zpI!;ev-6Lg&%g{f4iBrQDfMRp@@WoT)urt=W|Oi!!3XIT?x26L7%4*pO<6K>m@^Qi zy_(%>6_kI!%QWA0b-4*KZaJz4&r)lidB!T@BM7M>u`fP%s`|6O3L^f3+|YrrFkH0G znU(BZhTGI&zS#n!n=R~gp!?*#Gas%WovZqm@N~=jww$forFNN?XdJxKR215m(UC{wbF>r3|dkP3rm`4l`;2()EGZ;tA6Q^?C?RM3nD7G zyyi^wRyOqdP6ZwALqqYWG7pN?HDw%{VDVPuA+;pS=ne`*R+iHFsFt%OezXo2hKNpF zk-deI@_v!gndxF)QPn17SCbY;qoTueXuO5PaC}gs?}J_qQq-1rmUOJCp@nX?#1?Fy znQm!_@)e1w32Z5+`2>pE@)j!iKdhhn+IA4I=^)n{?UsUgoclUM5|%&veqbW$B_(V>+fxE! za8R@owgck-;b8mI$uJ-5U(Lx+CejD6yv~?7w$3{AJYUslmC)g((FDDo)`pEDzAWR5 z(o`?3>>3~RSLzKc3UNrd^{|^zo39(@v%Qyol_xHGAD+|p0FJ`VbGmeWJFg!FPY1@i* zH11v2tAUvJnbYwsrWOQ;YD%f|5Ng4QFhXNBj!!SOAkR1l$*b`+87m*Z1}YbFvK={V zsXvUI|1S~R+%Es%vD4W?k8Q zp)Xl!TZ00q{`stlogHr$=1e{ivZhe!E4Chb}lRi zP<$hYIb{!KW@jOdr>5?NWze;o-QH5|LW!=+iX64=OPWo`4OGLJY&-Yuzhi*^=B#w0 zn~@2-pth8pk1js*s4y8rEc7aO2D}}c-x=(bXWGL9L$D#1J|vkK`oPBCm<760SbaCm zr>IWB#rcR1de7b1c|~*(6l`Uq8`;Jli=$QOPp!mT$1`WKQ76rtUl6;jl0XJwXPJYX z0L(%ug&J{2*_;=on#K}+LrG@**L~n24Ic>;4F%#UGDSW?TfsgCGazi*6debZjq@Z` z;-jbpW?3MROJUucnrOmkzX=PPk#Wc#U_3j{8g4gWP2Ke>Ike&_0lq7O?rM*^oj~%t_)E( z+sJ9kBK&~=DTIw%zO6E+Ma&}UFdCL9?z0EWb@rO`I&l^ZT<57X%QRQ%%xM(p*-RUX zg3{^GsF68628~O!tNU)i812|oatmm}h4GiJ%04OvmNS4gaD|N}MPqvFHwUHgGL&}Y zOyMybIUJKXGlSO0ObC`*t^i8m?a&C7u*!8q9Y)FjEHqisGLK)-mQ2i{ipsppj9EL^ zN~;=SbwdsfPPdXHRt!Cgaa&hA2eV4E*j3Z$QgTV7jUi@BZ!v1T!9}YWcXUZfkR~fK zpAPA)Z{bfZ`0tHoN^6_sG$~WqIQ8Ids%0U;hO{7PbJ~)@$na))JBVP$Ct^RDYh{|T zzXi8}*5>$@!?wmk7QO1mXT?03WmxSGK`Km=@rlkJSI$QK?rH{5n-+aNs=KN}VX*QQ2 zgnWcF?V0}=L(pSxma{|>W_#``(3FX^$vIr%w64WINX9TtUy=jPy?Xhr=r&05BZ?oe(qwE$g zmhr8)8?$`Sz*efb)pu*w@G&3!zC^d*={94B$k0aBxM^y&$plxs85y}?GBsTBJklSu z^RP8in*pLfWcqUJ$>NBpfO-+$JGPK(jKOJY=TDX)n_M@T3atW#b9R@*j(T{L^D}K zQBnq(;X%wvMPRE3r+%umd<7@lDYQz2rY*Nc6(ZhM8(nI~lxflItKp((<*ey!S8u2X zTbpbU}8`T ztRb`id;^1W0qNYekeiQ5FOdQgl4h-<#=HZ(64s5O`u-}nMoNuGO}KS>8@cG zQ|{O#u({PM$DB5^GL$x%@oZyr^Cq9Ou`W+j3g$oNT}LJ#ehrO=H1i^2hapbtZA6Jy z4t-Z##%$3&W#0RwTEScQnu(I<;!Sr@lF5XSZjh?5ArhJwKZ-E#Q4& z-6QBobIfIABnh()i$%7R#(l9PCk4Kd| z83D7_R)q3TvkSTe{60g^6vO4zYXJlskC7SS9D9bpqM6#aGR+5`_(-IK5aVHmAPh@ve1N+Hcl#lM!P$xs_ zHfNY=rem6+*MK7Qf`VA!P(7Wg7q(-?)B*?Ss6~mX&r~kdLfToThER(<#$Yy^Q+LvK zBZRQ`UdjP{N8a!-{e$8cH*cBWPi|qio1%(>I-ocdwFy4Mkl2?f z@GZ0`EGKKLnkkW!J0(Inj5ji!S(Y2tb~GQN9_7FtpuAQz zz&P7hmwejrGGEu{%)K)`k9JYe+14f6+tFj+%yNI}=Jzww%sybXv-`rkW>6mI*w@=b z)gC$=8q$7?e$E4C5~1UGN8#2*!S$6GYJt;}EokoFjv7JQuT5CKqQU2{+TbD)BVuPB z`RRTglVdH*>3q^Sq0Y@Y5Yr@X9}5G`5QwX(27c0?FQIzHOcwFsnSG_sIK!FrZH$(- zjX<)2mw#1~2X5g{1`**}b<}FY*al-FvaL89!c^Phrdb*i3u4z3-T;Q!XJ_06LynAa z#M{KLAOQ2oaL)&)tMCz@I)`ozLSD4S31oa8Yv%&?Nr2GRwi-n)_Ni(28Z&(JQHH}l zeU;4qfgMn-uBd!vRAeUwa(0VvC<(X!?qZ={`{3J-2JABhA*T33Ieq3{gTR)G&SNt! z=z}QUi;LO5mkvkkOos$Y_`<4WCPzaoc&0K|im)>_Wm$?QnplsH3bbQY!r6g=G|e~W z?k}z5Ydb+{{j`oPw;Ds~^*avTPlanzuunZXghr|l}}4-7IY zy4&aQUl!E#fj@&EY|ess;+?sHZpRC**71U2r<934jR7;-4i;qkvZOi71g_3Msx|o9CB< zPx4m6Gqd)kZ)8i$(tM*t>L4F?9Xfk6suH(zRWfiYJ<4WybPEKS5ru|)NIP9}bpcj6 z^XJR_N6{6wYImGdh^W(XNbv*iHIPPrNTK|*5TRyQ+H^}g>`29p^f%`8FAj=l7=~AB zpN@4K|CNq*h{X@Q!yNIIl};mLT9(|B&QuQcnz$!!dSQL`4L|Mm$}9T*YE&Pv09oc-twb*tt+9Mws-4b7AzqC+6>hRcL+0T@1Fc ztO+^WSsEv!!GyGQXpRrWK=yfVWZv#1QJyu?ODW%HehQ-u9+m&@6H0U@_LVHH)J$v34u)LB)={0sw93Cb6u*l)7S|knAY+)0 zlNDCjx#O~WS`P;H5|^s5m%NC0y8jOA(K8Iix**<*02YRmU8ibO#vi)A! zsuY~dKS6-_%hJrFM$W?`s?5X2+mTF#qNI!X&Y4nh?N|I8P}70(p~`F_>wc8cY-K%P z!I*Y%p>c!UYT*xDW*R*u3)k2XSnG-b9+3wqQR7kM$HlgOad zFi$(IG4E$Ke@Z}OI2fOT-!iw&YRjA;oM4IYt0xOtoad|3Mt+PXy(;;hf0(U4&RUwE zaKgrP>fn9_rU}$Qx2>&@U}4QoCVF9Py<0moF&VLgp2Pwt%md9?hknE*N1!BO^-aDa ToVb<5`mWbUZ|t<<5tsiP#47j< literal 0 HcmV?d00001 diff --git a/locales/fr.po b/locales/fr.po new file mode 100644 index 0000000..07444ba --- /dev/null +++ b/locales/fr.po @@ -0,0 +1,1988 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-10-13 03:51-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: French\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: fr\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Masquer ce message de notification" + +msgid "Don't Show Again" +msgstr "Ne plus afficher" + +msgid "Don't show again" +msgstr "Ne plus afficher" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i ligne du fichier « %s » n’a pas été chargée correctement." +msgstr[1] "%i lignes du fichier « %s » n’ont pas été chargées correctement." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "La ligne %d du fichier '%s'  est corrompue (données %s non valides)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "En-tête mal formée : « %s »" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Catalogue corrompu : forme singulière msgstr utilisée conjointement avec " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Catalogue corrompu : forme plurielle msgstr utilisée sans msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Il y a eu des erreurs lors du chargement du catalogue. Il se pourrait que " +"des données soient manquantes ou corrompues." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Échec du chargement du fichier %s : il est probablement corrompu." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Le fichier « %s » est en lecture seule et ne peut être enregistré.\n" +"Veuillez l'enregistrer sous un nom différent." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Impossible d'enregistrer le fichier %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Il y a eu un problème lors du formatage du fichier (mais il a été enregistré " +"correctement)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Le catalogue n'a pas pu être enregistré avec le jeu de caractères '%s' tel " +"qu'indiqué dans les paramètres du catalogue.\n" +"\n" +" Le jeu UTF-8 a été utilisé en remplacement et la configuration a été " +"modifiée en conséquence." + +msgid "Error saving catalog" +msgstr "Erreur d'enregistrement du catalogue" + +msgid "PO Translation Files" +msgstr "Fichiers de traduction PO" + +msgid "POT Translation Templates" +msgstr "Modèles de traduction POT" + +msgid "All Translation Files" +msgstr "Tous les fichiers de traduction" + +msgid "Merging differences..." +msgstr "Intégration des changements..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "« %s » n'est pas un fichier POT valide." + +msgid "(Use default language)" +msgstr "(Utiliser la langue par défaut)" + +msgid "Select your preferred language" +msgstr "Sélectionnez votre langue de préférence" + +msgid "Language selection" +msgstr "Sélection de langue" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Vous devez redémarrer Poedit pour que ce changement prenne effet." + +msgid "Downloading translations is disabled in this project." +msgstr "Le téléchargement des traductions est désactivé dans ce projet." + +msgid "Not authorized, please sign in again." +msgstr "Non autorisé, veuillez vous connecter à nouveau." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin est une plateforme de gestion de localisation en ligne et un outil " +"de traduction collaborative. Poedit peut synchroniser les fichiers PO pris " +"en charge sur Crowdin." + +msgid "Sign In" +msgstr "Se connecter" + +msgid "Sign in" +msgstr "Se connecter" + +msgid "Sign Out" +msgstr "Se déconnecter" + +msgid "Sign out" +msgstr "Se déconnecter" + +msgid "Waiting for authentication…" +msgstr "En attente d'authentification..." + +msgid "Updating user information…" +msgstr "Mise à jour des informations de l'utilisateur..." + +msgid "Signed in as:" +msgstr "Connecté en tant que :" + +msgid "Learn More About Crowdin" +msgstr "En savoir plus sur Crowdin" + +msgid "Learn more about Crowdin" +msgstr "En savoir plus sur Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Connectez-vous sur Crowdin" + +msgid "Open Crowdin translation" +msgstr "Ouvrir la traduction Crowdin" + +msgid "Project:" +msgstr "Projet :" + +msgid "Language:" +msgstr "Langue :" + +msgid "File:" +msgstr "Fichier :" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Aucun projet de traduction listé dans votre compte Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Ce projet n'a aucun fichier qui puisse être traduit avec Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Ce fichier ne peut être modifié qu'à partir de l'interface web de Crowdin." + +msgid "Downloading latest translations…" +msgstr "Téléchargement des dernières traductions..." + +msgid "Syncing with Crowdin" +msgstr "Synchronisation avec Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Échec de la synchronisation avec Crowdin." + +msgid "Crowdin error" +msgstr "Erreur Crowdin" + +msgid "Uploading translations…" +msgstr "Téléchargement des traductions..." + +msgid "&Copy" +msgstr "&Copier" + +msgid "Learn more" +msgstr "En savoir plus" + +msgid "Learn More" +msgstr "En savoir plus" + +#, c-format +msgid "Failed command: %s" +msgstr "Échec de la commande : %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Échec de la fusion des catalogues gettext." + +msgid "Scanning files..." +msgstr "Analyse des fichiers..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analyse des fichiers %s..." + +msgid "Failed to load extracted catalog." +msgstr "Échec du chargement du catalogue extrait." + +msgid "&Help" +msgstr "&Aide" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Les fichiers MO ne peuvent pas être directement modifiés dans Poedit." + +msgid "Error opening file" +msgstr "Erreur à l'ouverture du fichier" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Veuillez ouvrir et éditer le fichier PO correspondant. Lorsque vous " +"l'enregistrerez, le fichier MO sera également mis à jour." + +msgid "don't delete temporary files (for debugging)" +msgstr "ne pas supprimer les fichiers temporaires (à des fins de débogage)" + +msgid "handle a poedit:// URI" +msgstr "gère une poedit: // URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Échec de la communication avec le processus Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Une exception non gérée s'est produite : %s" + +msgid "Unhandled exception occurred." +msgstr "Une exception non gérée s'est produite." + +msgid "Open catalog" +msgstr "Ouvrir un catalogue" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Le fichier « %s » n'existe pas." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "À propos de %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Services" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Masquer %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Masquer le reste" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Tout afficher" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Quitter %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit est un logiciel de traduction simple à utiliser." + +msgid "Catalogs Manager" +msgstr "Gestionnaire de catalogues" + +msgid "Check for Updates..." +msgstr "Recherche des mises à jour..." + +msgid "&Edit" +msgstr "&Édition" + +msgid "Undo" +msgstr "Annuler" + +msgid "Redo" +msgstr "Refaire" + +msgid "Paste and Match Style" +msgstr "Coller en conservant la mise en forme" + +msgid "Delete" +msgstr "Supprimer" + +msgid "Spelling and Grammar" +msgstr "Orthographe et Grammaire" + +msgid "Show Spelling and Grammar" +msgstr "Afficher l'orthographe et la grammaire" + +msgid "Check Document Now" +msgstr "Vérifier le document maintenant" + +msgid "Check Spelling While Typing" +msgstr "Vérifier l'orthographe lors de la frappe" + +msgid "Check Grammar With Spelling" +msgstr "Vérifier la grammaire et l'orthographe" + +msgid "Correct Spelling Automatically" +msgstr "Corriger l’orthographe automatiquement" + +msgid "Substitutions" +msgstr "Substitutions" + +msgid "Show Substitutions" +msgstr "Afficher les substitutions" + +msgid "Smart Copy/Paste" +msgstr "Copier/coller intelligent " + +msgid "Smart Quotes" +msgstr "Guillemets intelligents" + +msgid "Smart Dashes" +msgstr "Tirets intelligents" + +msgid "Smart Links" +msgstr "Liens intelligents" + +msgid "Text Replacement" +msgstr "Texte de remplacement" + +msgid "Transformations" +msgstr "Transformations" + +msgid "Make Upper Case" +msgstr "Mettre en majuscules" + +msgid "Make Lower Case" +msgstr "Mettre en minuscules" + +msgid "Capitalize" +msgstr "Mettre en majuscule" + +msgid "Speech" +msgstr "Dicter" + +msgid "Start Speaking" +msgstr "Commencer à dicter" + +msgid "Stop Speaking" +msgstr "Arrêter de dicter" + +msgid "&View" +msgstr "&Affichage" + +msgid "Enter Full Screen" +msgstr "Passer en mode plein écran" + +msgid "Window" +msgstr "Fenêtre" + +msgid "Minimize" +msgstr "Réduire" + +msgid "Zoom" +msgstr "Agrandir" + +msgid "Bring All to Front" +msgstr "Tout passer au premier plan" + +msgid "PO Translation" +msgstr "Traduction PO" + +msgid "The file cannot be opened." +msgstr "Le fichier ne peut pas être ouvert." + +msgid "Invalid file" +msgstr "Fichier non valide" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Le fichier est peut-être corrompu ou dans un format non reconnu par Poedit." + +msgid "&Undo" +msgstr "Ann&uler" + +msgid "&Redo" +msgstr "&Rétablir" + +msgid "Cu&t" +msgstr "Couper" + +msgid "Cut" +msgstr "Couper" + +msgid "Copy" +msgstr "Copier" + +msgid "&Paste" +msgstr "&Coller" + +msgid "Paste" +msgstr "Coller" + +msgid "&Delete" +msgstr "&Supprimer" + +msgid "Select &All" +msgstr "Tout sélectionner" + +msgid "Select All" +msgstr "Tout sélectionner" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maj+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Entrée" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Haut" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Bas" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maj" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" +"Il est impossible de déposer plus d’un fichier à la fois dans la fenêtre de " +"Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Le fichier « %s » n'est pas un catalogue de messages." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fichier" + +msgid "&Go" +msgstr "&Aller à" + +msgid "Source text:" +msgstr "Texte source :" + +msgid "Singular:" +msgstr "Singulier :" + +msgid "Plural:" +msgstr "Pluriel :" + +msgid "Translation:" +msgstr "Traduction :" + +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 "" +"Les fichiers POT ne sont que des modèles et ne contiennent pas de " +"traductions. \n" +"Pour faire une traduction, créez un nouveau fichier PO à partir du modèle." + +msgid "Create New Translation" +msgstr "Créer une nouvelle traduction" + +msgid "Create new translation" +msgstr "Créer une nouvelle traduction" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"La vérification orthographique est désactivée, car le dictionnaire pour le " +"%s n'est pas installé." + +msgid "Install" +msgstr "Installer" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "" +"Le catalogue a été modifié. Voulez-vous enregistrer les modifications ?" + +msgid "Save changes" +msgstr "Enregistrer les modifications" + +msgid "Your changes will be lost if you don't save them." +msgstr "Vos modifications seront perdues si vous ne les enregistrez pas." + +msgid "Save" +msgstr "Enregistrer" + +msgid "Don't save" +msgstr "Ne pas enregistrer" + +msgid "Don't Save" +msgstr "Ne pas enregistrer" + +msgid "Save as..." +msgstr "Enregistrer sous..." + +msgid "Compile to..." +msgstr "Compilation..." + +msgid "Compiled Translation Files" +msgstr "Fichiers de traduction compilés" + +msgid "Export as..." +msgstr "Exporter en tant que..." + +msgid "HTML Files" +msgstr "Fichiers HTML" + +msgid "Open catalog template" +msgstr "Ouvrir un modèle de catalogue" + +msgid "Updating catalog" +msgstr "Mise à jour du catalogue" + +msgid "Source code not available." +msgstr "Code source non disponible." + +msgid "Updating failed" +msgstr "Échec de la mise à jour" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Les traductions n'ont pas pu être mises à jour à partir du code source, car " +"aucun code n'a été trouvé à l'emplacement précisé dans les propriétés du " +"catalogue." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Certaines entrées du catalogue sont probablement incorrectes." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"La mise à jour du catalogue a échoué. Cliquez sur « Détails >> » pour en " +"savoir plus." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problème trouvé dans la traduction" +msgstr[1] "%d problèmes trouvés dans la traduction" + +msgid "Validation results" +msgstr "Résultats de la validation" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Les entrées comportant une erreur ont été marquées en rouge dans la liste. " +"Sélectionnez-les pour afficher les détails de l'erreur." + +msgid "The file was saved safely." +msgstr "Le fichier a été enregistré avec succès." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Le fichier a été enregistré avec succès et compilé au format MO, mais il ne " +"fonctionnera probablement pas correctement." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Le fichier a été enregistré avec succès, mais il ne peut ni être compilé au " +"format MO ni être utilisé." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Le fichier a été compilé au format MO, mais il ne fonctionnera probablement " +"pas correctement." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Le fichier ne peut pas être compilé au format MO et être utilisé." + +msgid "No problems with the translation found." +msgstr "Aucun problème trouvé dans la traduction." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"La traduction est prête à être utilisée, mais %d entrée n'est pas encore " +"traduite." +msgstr[1] "" +"La traduction est prête à être utilisée, mais %d entrées ne sont pas encore " +"traduites." + +msgid "The translation is ready for use." +msgstr "La traduction est prête à être utilisée." + +msgid "Context:" +msgstr "Contexte :" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit a automatiquement corrigé le contenu non valide du fichier « %s »." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Le fichier contenait des éléments en double, ce qui n'est pas permis dans " +"les fichiers PO et empêcherait son utilisation. Poedit a réglé ce problème, " +"mais vous devriez réviser les traductions de tous les éléments marqués comme " +"approximatifs et les corriger si nécessaire." + +msgid "Language of the translation isn't set." +msgstr "La langue de traduction n’est pas définie." + +msgid "Set Language" +msgstr "Définir la langue" + +msgid "Set language" +msgstr "Définir la langue" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Les suggestions ne sont pas disponibles si la langue de traduction n'est pas " +"définie correctement. Les autres fonctionnalités, comme les formes " +"plurielles, peuvent également être affectées." + +msgid "Language of the translation is the same as source language." +msgstr "La langue de traduction est identique à la langue source." + +msgid "Fix Language" +msgstr "Corriger la langue" + +msgid "Fix language" +msgstr "Corriger la langue" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Ce catalogue possède des entrées au pluriel, mais aucune en-tête Pluriel " +"n'est configurée." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Les entrées dans ce catalogue ont un nombre de formes plurielles différent " +"de celui indiqué dans l'en-tête Plural-Forms" + +msgid "Required header Plural-Forms is missing." +msgstr "L'en-tête requis Plural-Forms est absent." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Erreur de syntaxe dans l'en-tête Pluriel (\"%s\")." + +msgid "Fix the Header" +msgstr "Corriger l'en-tête" + +msgid "Fix the header" +msgstr "Corriger l’en-tête" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Les formes plurielles utilisées par le catalogue sont inhabituelles pour %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revoir" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Erreur au chargement du fichier catalogue « %s »." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduit : %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Restant : %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d erreur" +msgstr[1] "%d erreurs" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrée" +msgstr[1] "%d entrées" + +msgid " (unsaved)" +msgstr " (non enregistré)" + +msgid " (modified)" +msgstr " (modifié)" + +msgid "Go" +msgstr "Aller" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Échec de la mise à jour de la mémoire de traduction : %s" + +msgid "Purge deleted translations" +msgstr "Nettoyer les traductions supprimées" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Voulez-vous supprimer toutes les traductions qui ne sont plus utilisées ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Si vous validez l'épuration, toutes les traductions marquées comme " +"supprimées seront définitivement effacées. Il faudra les traduire à nouveau " +"si elles sont réintroduites par la suite." + +msgid "Keep" +msgstr "Conserver" + +msgid "Purge" +msgstr "Nettoyer" + +msgid "Fill missing translations from TM" +msgstr "Remplir les traductions manquantes avec la MT" + +msgid "Only fill in exact matches" +msgstr "Remplir uniquement les correspondances exactes" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Par défaut, des résultats incorrects sont aussi intégrés et marqués comme " +"approximatives. Cochez cette option pour inclure seulement les " +"correspondances exactes." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ne pas marquer les correspondances exactes comme approximatives" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Activer uniquement si vous êtes certain de la qualité de votre Mémoire de " +"Traduction. Par défaut, tous les résultats sont marqués comme approximatifs " +"et sont à revoir." + +msgid "Fill" +msgstr "Remplir" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrée a été complétée par la mémoire de traduction." +msgstr[1] "%d entrées ont été complétées par la mémoire de traduction." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Les traductions ont été marquées comme approximatives car elles risquent " +"d'être incorrectes. Vous devriez vérifier leur pertinence." + +msgid "No entries could be filled from the translation memory." +msgstr "" +"Aucune entrée n'a pu être complétée à partir de la mémoire de traduction." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"La MT ne contient aucune chaîne identique au contenu de ce fichier. C'est " +"effectif uniquement pour des traductions semi-automatiques après que Poedit " +"ait appris suffisamment de fichiers traduits manuellement." + +msgid "Translating" +msgstr "Traduction en cours" + +msgid "Filling missing translations from TM..." +msgstr "Remplissage des traductions manquantes avec la MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u chaîne traduite" +msgstr[1] "%u chaînes traduites" + +msgid "Copy from source text" +msgstr "Copier depuis le texte original" + +msgid "Copy from Source Text" +msgstr "Copier à partir du texte original" + +msgid "Clear translation" +msgstr "Effacer la traduction" + +msgid "Clear Translation" +msgstr "Effacer la traduction" + +msgid "Edit comment" +msgstr "Modifier le commentaire" + +msgid "Edit Comment" +msgstr "Modifier le commentaire" + +msgid "References:" +msgstr "Références :" + +msgid "Everything" +msgstr "Tout" + +#, c-format +msgid "Form %i" +msgstr "Forme %i" + +msgid "Singular" +msgstr "Singulier" + +msgid "Zero" +msgstr "Zéro" + +msgid "One" +msgstr "Un" + +msgid "Two" +msgstr "Deux" + +msgid "Plural" +msgstr "Pluriel" + +msgid "Other" +msgstr "Autre" + +msgid "&Bookmarks" +msgstr "&Marque-pages" + +#, c-format +msgid "Set bookmark %i" +msgstr "Définir le marque page %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Aller au marque page %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Définir le marque page %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Aller au marque page %i" + +msgid "Hide Sidebar" +msgstr "Masquer le panneau latéral" + +msgid "Show Sidebar" +msgstr "Afficher le panneau latéral" + +msgid "Hide Status Bar" +msgstr "Masquer la barre d’état" + +msgid "Show Status Bar" +msgstr "Afficher la barre d’état" + +msgid "Source text" +msgstr "Texte original" + +msgid "Translation" +msgstr "Traduction" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Texte original — %s" + +msgid "unknown language" +msgstr "langue inconnue" + +#, c-format +msgid "Translation — %s" +msgstr "Traduction — %s" + +msgid "Error:" +msgstr "Erreur :" + +msgid "Source file" +msgstr "Fichier original" + +msgid "Source file occurrence:" +msgstr "Présence du fichier original :" + +msgid "Open in Editor" +msgstr "Ouvrir dans l’Éditeur" + +msgid "Open in editor" +msgstr "Ouvrir dans l'éditeur" + +msgid "No references for the selected item." +msgstr "Aucune référence pour l’élément sélectionné." + +#, c-format +msgid "Error opening file %s!" +msgstr "Erreur à l’ouverture du fichier %s !" + +msgid "Find" +msgstr "Trouver" + +msgid "Replace" +msgstr "Remplacer" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Options" + +msgid "Ignore case" +msgstr "Ignorer la casse" + +msgid "Wrap around" +msgstr "Boucler" + +msgid "Whole words only" +msgstr "Mots entiers uniquement" + +msgid "Find in source texts" +msgstr "Trouver dans les textes originaux" + +msgid "Find in translations" +msgstr "Trouver dans les traductions" + +msgid "Find in comments" +msgstr "Rechercher dans les commentaires" + +msgid "Close" +msgstr "Fermer" + +msgid "Replace All" +msgstr "Remplacer tout" + +msgid "Replace all" +msgstr "Remplacer tout" + +msgid "< &Previous" +msgstr "< &Précédent" + +msgid "&Next >" +msgstr "&Suivant >" + +msgid "String to find" +msgstr "Chaîne à rechercher" + +msgid "Replacement string" +msgstr "Chaîne de remplacement" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Impossible d’exécuter le programme : %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Code ou nom de la langue (p.ex. fr_FR)" + +msgid "Translation Language" +msgstr "Langue de traduction" + +msgid "Language of the translation:" +msgstr "Langue de la traduction :" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gestionnaire des catalogues" + +msgid "Catalog" +msgstr "Catalogue" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Non traduit" + +msgid "Fuzzy" +msgstr "Approximative" + +msgid "Bad Tokens" +msgstr "Marqueurs incorrects" + +msgid "Last modified" +msgstr "Dernière modification" + +msgid "Select directory" +msgstr "Choisir un répertoire" + +msgid "Directories:" +msgstr "Répertoires :" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Voulez-vous effacer ce projet ?" + +msgid "Confirmation" +msgstr "Confirmation" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Voulez-vous vraiment faire une mise à jour\n" +"de tous les catalogues de ce projet ?" + +msgid "Information about the translator" +msgstr "Informations sur le traducteur" + +msgid "Name:" +msgstr "Nom :" + +msgid "Your Name" +msgstr "Votre nom" + +msgid "Email:" +msgstr "E-mail :" + +msgid "your_email@example.com" +msgstr "votre.e-maill@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Votre nom et votre adresse e-mail sont uniquement utilisés pour définir l'en-" +"tête Last-Translator des fichiers de GNU gettext." + +msgid "Editing" +msgstr "Modification" + +msgid "Automatically compile MO file when saving" +msgstr "Compiler automatiquement le fichier MO lors de l'enregistrement" + +msgid "Show summary after catalog update" +msgstr "Afficher le résumé après la mise à jour du catalogue" + +msgid "Check spelling" +msgstr "Vérifier l’orthographe" + +msgid "Always change focus to text input field" +msgstr "Toujours activer la zone de saisie du texte" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ne laisse jamais la main à la liste des chaînes. Si activé, il faut utiliser " +"les touches Ctrl + Haut/Bas de navigation, mais vous pouvez aussi taper le " +"texte directement sans avoir à utiliser la touche de tabulation pour activer " +"la zone de traduction." + +msgid "Appearance" +msgstr "Apparence" + +msgid "Use custom list font:" +msgstr "Utiliser une police personnalisée :" + +msgid "Use custom text fields font:" +msgstr "Utiliser une police personnalisée pour les champs texte :" + +msgid "Change UI language" +msgstr "Changer la langue de l’interface" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(nécessite Windows 8 ou plus récent)" + +msgid "General" +msgstr "Général" + +msgid "Use translation memory" +msgstr "Utiliser la mémoire de traduction" + +msgid "Learn From Files..." +msgstr "Apprendre à partir des fichiers..." + +msgid "Learn from files..." +msgstr "Apprendre à partir de fichiers..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Réinitialiser " + +msgid "Consult TM when updating from sources" +msgstr "Consulter la MT lorsque vous mettez à jour depuis les sources" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Si activé, Poedit essaiera de remplir les nouvelles entrées en utilisant vos " +"précédentes\n" +"traductions stockées dans la mémoire de tradhttps://crowdin.com/translate/" +"poedit/3/en-fr#uction. Si la TM est\n" +"presque vide, cela sera peut effectif. Plus vous traduisez\n" +"plus votre MT grossit, et meilleur c'est." + +msgid "Stored translations:" +msgstr "Traductions stockées :" + +msgid "Database size on disk:" +msgstr "Taille de la base de données sur le disque :" + +msgid "Select translation files to import" +msgstr "Sélectionner les fichiers de traduction à importer" + +msgid "Translation Memory" +msgstr "Mémoire de traduction" + +msgid "Importing translations..." +msgstr "Importation des traductions…" + +msgid "Finalizing..." +msgstr "Finalisation..." + +msgid "Reset translation memory" +msgstr "Réinitialiser la mémoire de traduction" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Voulez-vous vraiment réinitialiser la mémoire de traduction ?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"La réinitialisation de la mémoire de traduction supprimera définitivement " +"toutes les traductions qui y sont stockées. Cette opération est irréversible." + +msgid "Cancel" +msgstr "Annuler" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Les extracteurs de code source sont utilisés pour rechercher et extraire les " +"chaînes traduisibles des fichiers du code source afin de les traduire." + +msgid "New" +msgstr "Nouveau" + +msgid "Edit" +msgstr "Modifier" + +msgid "Delete extractor" +msgstr "Supprimer l’extracteur" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Êtes-vous sûr de vouloir supprimer l’extracteur « %s » ?" + +msgid "Extractors" +msgstr "Extracteurs" + +msgid "Accounts" +msgstr "Comptes" + +msgid "Automatically check for updates" +msgstr "Rechercher automatiquement les mises à jour" + +msgid "Include beta versions" +msgstr "Inclure les versions bêta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Les versions bêta contiennent les dernières nouveautés et améliorations, " +"mais elles peuvent être un peu moins stables." + +msgid "Updates" +msgstr "Mises à jour" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ces paramètres modifient la mise en forme interne des fichiers PO. Ajustez-" +"les si vous avez des exigences spécifiques, par exemple en raison du " +"contrôle de version." + +msgid "Line endings:" +msgstr "Fins de ligne :" + +msgid "Unix (recommended)" +msgstr "Unix (recommandé)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Passer à la ligne à :" + +msgid "Preserve formatting of existing files" +msgstr "Préserver le formatage des fichiers existants" + +msgid "Advanced" +msgstr "Avancés" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Préférences de %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Glissez-déposez les dossiers ici\n" +"\n" +"ou utilisez le bouton +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Glissez-déposez les dossiers ici\n" +"\n" +"ou utilisez le bouton +" + +msgid "Add Folders..." +msgstr "Ajouter des dossiers..." + +msgid "Add folders..." +msgstr "Ajouter des dossiers..." + +msgid "Add Files..." +msgstr "Ajouter des fichiers..." + +msgid "Add files..." +msgstr "Ajouter des fichiers..." + +msgid "Add Wildcard..." +msgstr "Ajout du caractère générique..." + +msgid "Add wildcard..." +msgstr "Ajout du caractère générique..." + +msgid "Paths" +msgstr "Chemins" + +msgid "Excluded paths" +msgstr "Chemins exclus" + +msgid "Additional keywords" +msgstr "Mots clés supplémentaires" + +msgid "Name of the project the translation is for" +msgstr "Nom du projet de traduction" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p. ex. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recommandé)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Veuillez d’abord enregistrer le fichier. Cette section ne peut pas être " +"modifiée avant." + +msgid "Comment:" +msgstr "Commentaire :" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Effacer" + +msgid "Clear the comment" +msgstr "Effacer le commentaire" + +msgid "Create new translations project" +msgstr "Créer un nouveau projet de traduction" + +msgid "Edit the project" +msgstr "Modifier le projet" + +msgid "Delete the project" +msgstr "Supprimer le projet" + +msgid "Update all" +msgstr "Tout mettre à jour" + +msgid "Update all catalogs in the project" +msgstr "Mettre à jour tous les catalogues du projet" + +msgid "Edit project" +msgstr "Modifier le projet" + +msgid "Project name:" +msgstr "Nom du projet :" + +msgid "Browse" +msgstr "Parcourir" + +msgid "Add directory to the list" +msgstr "Ajouter un répertoire à la liste" + +msgid "&New..." +msgstr "&Nouveau…" + +msgid "New from &POT/PO file..." +msgstr "Nouveau à partir d’un fichier &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Nouveau à partir d’un fichier &POT/PO..." + +msgid "&Open..." +msgstr "&Ouvrir..." + +msgid "Open Recent" +msgstr "Récemment ouverts" + +msgid "Open from Crowdin..." +msgstr "Ouvrir à partir de Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Ouvrir à partir de Crowdin..." + +msgid "&Close" +msgstr "&Fermer" + +msgid "&Save" +msgstr "&Enregistrer" + +msgid "Save &as..." +msgstr "Enregistrer sous..." + +msgid "Save &As..." +msgstr "Enregistrer sous..." + +msgid "Compile to MO..." +msgstr "Compiler le MO..." + +msgid "E&xport as HTML..." +msgstr "Exporter en HTML…" + +msgid "Check for updates..." +msgstr "Recherche de mises à jour..." + +msgid "&Preferences..." +msgstr "&Préférences..." + +msgid "Catalogs &manager" +msgstr "Gestion des &catalogues" + +msgid "Catalogs &Manager" +msgstr "Gestionnaire des &catalogues" + +msgid "E&xit" +msgstr "&Quitter" + +msgid "Quit" +msgstr "Quitter" + +msgid "Copy from singular" +msgstr "Copier du singulier" + +msgid "Copy From Singular" +msgstr "Copier du singulier" + +msgid "Translation is &fuzzy" +msgstr "Traduction &approximative" + +msgid "Translation Is &Fuzzy" +msgstr "La traduction est &approximative" + +msgid "Edit &comment" +msgstr "Modifier le &commentaire" + +msgid "Edit &Comment" +msgstr "Modifier le &commentaire" + +msgid "Suggestions" +msgstr "Suggestions" + +msgid "&Show references" +msgstr "&Voir les références" + +msgid "&Show References" +msgstr "&Voir les références" + +msgid "&Find..." +msgstr "&Rechercher..." + +msgid "Replace..." +msgstr "Remplacer..." + +msgid "Find next" +msgstr "Rechercher le suivant" + +msgid "Find previous" +msgstr "Rechercher le précédent" + +msgid "Find and Replace..." +msgstr "Rechercher et remplacer..." + +msgid "Find Next" +msgstr "Rechercher le suivant" + +msgid "Find Previous" +msgstr "Chercher le précédent" + +msgid "&Preferences" +msgstr "&Préférences" + +msgid "Display entry &IDs" +msgstr "Afficher les &IDs des entrées" + +msgid "Display Entry &IDs" +msgstr "Afficher les &IDs des entrées" + +msgid "Sort by &file order" +msgstr "Trier par &fichier" + +msgid "Sort by &File Order" +msgstr "Trier par &fichier" + +msgid "Sort by &source" +msgstr "Trier par &source" + +msgid "Sort by &Source" +msgstr "Trier par &source" + +msgid "Sort by &translation" +msgstr "Trier par &traduction" + +msgid "Sort by &Translation" +msgstr "Trier par &traduction" + +msgid "&Group by context" +msgstr "&Grouper par contexte" + +msgid "&Group By Context" +msgstr "&Grouper par contexte" + +msgid "Entries with errors first" +msgstr "Entrées avec erreurs en premier" + +msgid "Entries with Errors First" +msgstr "Entrées avec erreurs en premier" + +msgid "&Untranslated entries first" +msgstr "Entrées &non traduites en premier" + +msgid "&Untranslated Entries First" +msgstr "Entrées &non traduites en premier" + +msgid "Show sidebar" +msgstr "Afficher le panneau latéral" + +msgid "Show status bar" +msgstr "Afficher la barre d’état" + +msgid "C&atalog" +msgstr "C&atalogue" + +msgid "&Update from sources" +msgstr "Mise à jo&ur depuis les sources" + +msgid "&Update from Sources" +msgstr "Mettre à jo&ur depuis les sources" + +msgid "Update from &POT file..." +msgstr "Mettre à jour depuis un fichier &POT..." + +msgid "Update from &POT File..." +msgstr "Mettre à jour depuis un fichier &POT..." + +msgid "Sync with Crowdin" +msgstr "Synchroniser avec Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Remplir les traductions manquantes avec la M&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Remplir les traductions manquantes avec la M&T..." + +msgid "&Purge deleted translations" +msgstr "&Purger les traductions supprimées" + +msgid "&Purge Deleted Translations" +msgstr "&Purger les traductions supprimées" + +msgid "&Validate translations" +msgstr "&Valider les traductions" + +msgid "&Validate Translations" +msgstr "&Valider les traductions" + +msgid "&Properties..." +msgstr "&Propriétés..." + +msgid "&Done and next" +msgstr "&Appliquer et continuer" + +msgid "&Done and Next" +msgstr "&Appliquer et continuer" + +msgid "&Previous translation" +msgstr "Traduction &précédente" + +msgid "&Previous Translation" +msgstr "Traduction &précédente" + +msgid "&Next translation" +msgstr "Traduction suiva&nte" + +msgid "&Next Translation" +msgstr "Traduction suiva&nte" + +msgid "P&revious unfinished" +msgstr "Incomplet p&récédent" + +msgid "P&revious Unfinished" +msgstr "Incomplet p&récédent" + +msgid "Ne&xt unfinished" +msgstr "Incomplet suivan&t" + +msgid "Ne&xt Unfinished" +msgstr "Incomplet suivan&t" + +msgid "Previous plural form" +msgstr "Forme plurielle précédente" + +msgid "Previous Plural Form" +msgstr "Forme plurielle précédente" + +msgid "Next plural form" +msgstr "Forme plurielle suivante" + +msgid "Next Plural Form" +msgstr "Forme plurielle suivante" + +msgid "&Online help" +msgstr "&Aide en ligne" + +msgid "&Online Help" +msgstr "&Aide en ligne" + +msgid "&GNU gettext manual" +msgstr "Manuel de &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manuel de &GNU gettext" + +msgid "&About Poedit" +msgstr "&À propos de Poedit" + +msgid "&About" +msgstr "&À propos" + +msgid "Extractor setup" +msgstr "Installation de l’extracteur" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" +"Liste des extensions séparées par des points-virgules (ex. *.cpp;*.h) :" + +msgid "Invocation:" +msgstr "Appel :" + +msgid "Command to extract translations:" +msgstr "Commande pour extraire des traductions :" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Cette commande est utilisée pour lancer l’extracteur.\n" +"%o sera remplacé par le nom du fichier de sortie,\n" +"%K par la liste des mots-clés,\n" +"%F par la liste des fichiers d'entrée,\n" +"%C par le jeu de caractères (voir ci-dessous)." + +msgid "An item in keywords list:" +msgstr "Un élément de la liste des mots clés :" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Inséré dans la ligne de commande pour chaque\n" +"mot clé. %k : le mot clé." + +msgid "An item in input files list:" +msgstr "Un élément de la liste des fichiers d'entrée :" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Inséré dans la ligne de commande pour chaque\n" +"fichier d'entrée. %f : nom du fichier." + +msgid "Source code charset:" +msgstr "Jeu de caractères du code source :" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Inséré dans la ligne de commande lorsque le code de jeu de\n" +"caractères de la source est fourni. %c : étends à la valeur du jeu de " +"caractères." + +msgid "Catalog properties" +msgstr "Propriétés du catalogue" + +msgid "Project name and version:" +msgstr "Nom et version du projet :" + +msgid "Plural Forms:" +msgstr "Formes plurielles :" + +msgid "Use default rules for this language" +msgstr "Utiliser les règles par défaut de cette langue" + +msgid "Use custom expression" +msgstr "Utiliser une expression personnalisée" + +msgid "Learn about plural forms" +msgstr "En savoir plus sur les formes plurielles" + +msgid "Charset:" +msgstr "Jeu de caractères :" + +msgid "Team:" +msgstr "Équipe de traduction :" + +msgid "Team's email address:" +msgstr "Adresse électronique de l’équipe :" + +msgid "Translation properties" +msgstr "Propriétés de traduction" + +msgid "Sources paths" +msgstr "Chemins des sources" + +msgid "Extract text from source files in the following directories:" +msgstr "Extraire le texte des répertoires suivants :" + +msgid "Base path:" +msgstr "Chemin de base :" + +msgid "Sources keywords" +msgstr "Mots clés sources" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Utiliser ces mots clés (noms de fonctions) pour reconnaître les chaînes\n" +"traduisibles dans les fichiers sources :" + +msgid "Learn about gettext keywords" +msgstr "En savoir plus sur les mots clés gettext" + +msgid "Update summary" +msgstr "Mettre à jour le résumé" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ces chaînes ont été trouvées dans les sources mais n’existent pas dans le " +"catalogue.\n" +"Poedit les ajoute maintenant au catalogue." + +msgid "New strings" +msgstr "Nouvelles chaînes" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ces chaînes ne sont plus dans les sources.\n" +"Poedit les retire maintenant du catalogue." + +msgid "Obsolete strings" +msgstr "Chaînes obsolètes" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nouvelle, 0 obsolète)" + +msgid "Open" +msgstr "Ouvrir" + +msgid "Save catalog" +msgstr "Enregistrer le catalogue" + +msgid "Validate" +msgstr "Valider" + +msgid "Check for errors in the translation" +msgstr "Vérifier les erreurs dans la traduction" + +msgid "Update" +msgstr "Mettre à jour" + +msgid "Update catalog - synchronize it with sources" +msgstr "Mettre à jour le catalogue - Synchroniser avec les sources" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Activé si la chaîne sélectionnée est traduite approximativement" + +msgid "Show or hide the sidebar" +msgstr "Afficher ou masquer le panneau latéral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texte source précédent :" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"L'ancien texte source (avant son changement durant une mise à jour) auquel " +"correspond la traduction approximative." + +msgid "Notes for translators:" +msgstr "Notes pour les traducteurs :" + +msgid "Add comment" +msgstr "Ajouter un commentaire" + +msgid "Add Comment" +msgstr "Ajouter un commentaire" + +msgid "Translation suggestions:" +msgstr "Suggestions de traduction :" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Aucune correspondance trouvée" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Aucune correspondance trouvée" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Cette chaîne a été trouvée dans la mémoire de traduction de Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nouvelle : %i, obsolète : %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Import de traductions : %d" + +msgid "Poedit Update" +msgstr "Mise à jour de Poedit" + +msgid "Preparing migration..." +msgstr "Préparation de la migration..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "État de sortie de migration : %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit doit convertir votre mémoire de traduction dans un nouveau format." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ceci doit être fait avant le démarrage de Poedit. Cela peut prendre quelques " +"minutes si vous avez beaucoup de traductions stockées, mais ce devrait " +"normalement être plus rapide." + +msgid "Proceed" +msgstr "Poursuivre" + +msgid "Translation memory migration failed." +msgstr "Échec de la migration de la mémoire de traduction." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Impossible de migrer votre mémoire de traduction. L'erreur est :\n" +"\n" +"%s\n" +"Veuillez envoyer un courriel à help@poedit.net pour que nous puissions " +"régler le problème." + +msgid "Cannot create temporary directory." +msgstr "Impossible de créer le répertoire temporaire." + +msgid "Welcome to Poedit" +msgstr "Bienvenue dans Poedit" + +msgid "Edit a translation" +msgstr "Modifier une traduction" + +msgid "Open an existing PO file and edit the translation." +msgstr "Ouvrir un fichier PO existant et modifier la traduction." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Créer une nouvelle traduction partir d'un fichier PO ou d'un modèle POT " +"existant." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Collaborer à une traduction avec Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Télécharger un fichier d'un projet Crowdin, traduire et synchroniser vos " +"modifications." + +msgid "What is Crowdin?" +msgstr "Qu’est-ce que Crowdin ?" + +msgid "There are no translations. That’s unusual." +msgstr "Il n’y a aucune traduction. Ce n’est pas courant." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Les entrées traduisibles ne sont pas ajoutées manuellement au système " +"Gettext, mais sont extraites automatiquement\n" +"à partir du code source. De cette façon, elles restent à jour et exactes.\n" +"Les traducteurs utilisent généralement des fichiers de modèle PO (POTS) " +"préparés par le développeur." + +msgid "(Learn more about GNU gettext)" +msgstr "(En savoir plus sur GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"La façon la plus simple de remplir ce catalogue est de le mettre à jour " +"depuis un fichier POT :" + +msgid "Update from POT" +msgstr "Mettre à jour depuis un POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Utiliser les chaînes traduisibles d'un modèle POT existant." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Vous pouvez également extraire les chaînes traduisibles directement à partir " +"du code source :" + +msgid "Extract from sources" +msgstr "Extraire depuis les sources" + +msgid "Configure source code extraction in Properties." +msgstr "Configurer l’extraction depuis le code source dans les Propriétés." + +msgid "Sync" +msgstr "Synchroniser" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchroniser la traduction avec Crowdin" diff --git a/locales/gl.mo b/locales/gl.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d256fd6f0badf973aa4f3d45bbd99c1f85d9dfa GIT binary patch literal 46756 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 literal 0 HcmV?d00001 diff --git a/locales/gl.po b/locales/gl.po new file mode 100644 index 0000000..620e30e --- /dev/null +++ b/locales/gl.po @@ -0,0 +1,1968 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Galician\n" +"Language: gl_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: gl\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ocultar esta mensaxe de notificación" + +msgid "Don't Show Again" +msgstr "Non mostrar novamente" + +msgid "Don't show again" +msgstr "Non volver mostrar" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "Non se cargou de maneira correcta %i liña do ficheiro «%s»." +msgstr[1] "Non se cargaron de maneira correcta %i liñas do ficheiro «%s»." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "A liña %d do ficheiro «%s» está danada (datos %s non válidos)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Cabeceira mal formada: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"O ficheiro do catálogo está corrompido: emprégase a foma singular de msgstr " +"xunto con msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"O ficheiro do catálogo está corrompido: emprégase a forma plural de msgstr " +"sen existir msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Producíronse erros ao cargar o catálogo. Pode que se perderan ou corromperan " +"algúns dos datos." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Non foi posíbel cargar o ficheiro %s, probábelmente estea corrompido." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"O ficheiro '%s' é de só lectura e non é posíbel gardalo.\n" +"Gárdeo cun nome diferente." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Non foi posíbel gardar o ficheiro %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Produciuse un problema ao formatar o ficheiro (pero gardouse correctamente)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Non se puido gardar o catálogo no conxunto de caracteres «%s» como se\n" +"especificou nas preferencias deste.\n" +"\n" +"Consecuentemente, gardouse en UTF-8 e modificouse a preferencia." + +msgid "Error saving catalog" +msgstr "Produciuse un erro ao gardar o catálogo" + +msgid "PO Translation Files" +msgstr "Ficheiros de tradución PO" + +msgid "POT Translation Templates" +msgstr "Modelos de tradución POT" + +msgid "All Translation Files" +msgstr "Todos os ficheiros de tradución" + +msgid "Merging differences..." +msgstr "Fusionando as diferencias..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' non é un ficheiro POT correcto." + +msgid "(Use default language)" +msgstr "(Usar idioma predeterminado)" + +msgid "Select your preferred language" +msgstr "Seleccione o seu idioma preferido" + +msgid "Language selection" +msgstr "Selección de idioma" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Debe reiniciar Poedit para que este cambio teña efecto." + +msgid "Downloading translations is disabled in this project." +msgstr "A descarga de traducións está deshabilitada neste proxecto." + +msgid "Not authorized, please sign in again." +msgstr "Acción non autorizada; accede de novo." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin é unha plataforma de xestión de localización e tradución " +"colaborativas en liña. Poedit pode sincronizar ficheiros PO xestionados con " +"Crowdin." + +msgid "Sign In" +msgstr "Acceder" + +msgid "Sign in" +msgstr "Acceder" + +msgid "Sign Out" +msgstr "Saír" + +msgid "Sign out" +msgstr "Saír" + +msgid "Waiting for authentication…" +msgstr "Agardando a autenticación…" + +msgid "Updating user information…" +msgstr "Actualizando a información do usuario…" + +msgid "Signed in as:" +msgstr "Sesión iniciada como:" + +msgid "Learn More About Crowdin" +msgstr "Máis información sobre Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Máis información sobre Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Acceder a Crowdin" + +msgid "Open Crowdin translation" +msgstr "Abrir tradución de Crowdin" + +msgid "Project:" +msgstr "Proxecto:" + +msgid "Language:" +msgstr "Idioma:" + +msgid "File:" +msgstr "Ficheiro:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ningún proxecto de tradución listado na súa conta de Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Este proxecto non ten ficheiros para traducir en Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Este ficheiro só se pode editar desde a interface web de Crowdin." + +msgid "Downloading latest translations…" +msgstr "Descargando as traducións máis recentes…" + +msgid "Syncing with Crowdin" +msgstr "Sincronizando con Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Erro ao sincronizar con Crowdin." + +msgid "Crowdin error" +msgstr "Erro de Crowdin" + +msgid "Uploading translations…" +msgstr "Cargando as traducións…" + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Aprender máis" + +msgid "Learn More" +msgstr "Saber máis" + +#, c-format +msgid "Failed command: %s" +msgstr "Produciuse un erro ao executar a orde: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Produciuse un erro ao fusionar os catálogos gettext." + +msgid "Scanning files..." +msgstr "Examinando os ficheiros..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Procesando os ficheiros %s…" + +msgid "Failed to load extracted catalog." +msgstr "Produciuse un erro ao cargar o catálogo extraído." + +msgid "&Help" +msgstr "&Axuda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Os ficheiros MO non se poden editar directamente en Poedit." + +msgid "Error opening file" +msgstr "Erro ao abrir o ficheiro" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Por favor, abra e edite no seu lugar o ficheiro PO correspondente. Cando o " +"garde, o ficheiro MO actualizarase tamén." + +msgid "don't delete temporary files (for debugging)" +msgstr "non eliminar os ficheiros temporais (para depuración)" + +msgid "handle a poedit:// URI" +msgstr "manexar un URI de poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Erro de comunicación co proceso do Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Produciuse unha excepción non controlada: %s" + +msgid "Unhandled exception occurred." +msgstr "Produciuse unha excepción non controlada." + +msgid "Open catalog" +msgstr "Abrir catálogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "O ficheiro «%s» non existe." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Sobre %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versión %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servizos" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Agochar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Agochar outros" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mostrar todo" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Saír do %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit é un editor de traducións fácil de usar." + +msgid "Catalogs Manager" +msgstr "Xestor de catálogos" + +msgid "Check for Updates..." +msgstr "Buscar actualizacións..." + +msgid "&Edit" +msgstr "&Editar" + +msgid "Undo" +msgstr "Desfacer" + +msgid "Redo" +msgstr "Refacer" + +msgid "Paste and Match Style" +msgstr "Pegar e coincidir estilo" + +msgid "Delete" +msgstr "Eliminar" + +msgid "Spelling and Grammar" +msgstr "Ortografía e gramática" + +msgid "Show Spelling and Grammar" +msgstr "Mostrar ortografía e gramática" + +msgid "Check Document Now" +msgstr "Comprobar documento agora" + +msgid "Check Spelling While Typing" +msgstr "Revisar ortografía mentres se escribe" + +msgid "Check Grammar With Spelling" +msgstr "Revisar gramática e ortografía" + +msgid "Correct Spelling Automatically" +msgstr "Corrixir ortografía automaticamente" + +msgid "Substitutions" +msgstr "Substitucións" + +msgid "Show Substitutions" +msgstr "Mostrar substitucións" + +msgid "Smart Copy/Paste" +msgstr "Copiar/pegar intelixente" + +msgid "Smart Quotes" +msgstr "Comiñas intelixentes" + +msgid "Smart Dashes" +msgstr "Trazos intelixentes" + +msgid "Smart Links" +msgstr "Ligazóns intelixentes" + +msgid "Text Replacement" +msgstr "Substitución de texto" + +msgid "Transformations" +msgstr "Transformacións" + +msgid "Make Upper Case" +msgstr "Converter a maiúsculas" + +msgid "Make Lower Case" +msgstr "Converter a minúsculas" + +msgid "Capitalize" +msgstr "Maiúsculas" + +msgid "Speech" +msgstr "Fala" + +msgid "Start Speaking" +msgstr "Comezar a falar" + +msgid "Stop Speaking" +msgstr "Deixar de falar" + +msgid "&View" +msgstr "&Ver" + +msgid "Enter Full Screen" +msgstr "Modo de pantalla completa" + +msgid "Window" +msgstr "Xanela" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Traer todo á fronte" + +msgid "PO Translation" +msgstr "Tradución PO" + +msgid "The file cannot be opened." +msgstr "Non se pode abrir o ficheiro." + +msgid "Invalid file" +msgstr "Ficheiro non válido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Pode ser que o ficheiro estea danado ou nun formato que Poedit non recoñece." + +msgid "&Undo" +msgstr "&Desfacer" + +msgid "&Redo" +msgstr "&Refacer" + +msgid "Cu&t" +msgstr "Cor&tar" + +msgid "Cut" +msgstr "Cortar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "&Pegar" + +msgid "Paste" +msgstr "Pegar" + +msgid "&Delete" +msgstr "&Eliminar" + +msgid "Select &All" +msgstr "Seleccionar &todo" + +msgid "Select All" +msgstr "Seleccionar todo" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maiús+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Intro" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Arriba" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Abaixo" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maiús" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Non pode arrastrar máis dun ficheiro a unha xanela de Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "O ficheiro «%s» non é un catálogo de mensaxes." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Ficheiro" + +msgid "&Go" +msgstr "&Ir a" + +msgid "Source text:" +msgstr "Texto orixe:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Tradución:" + +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 "" +"Os ficheiros POT son unicamente modelos e non conteñen traducións.\n" +"Para traducir, cree un novo ficheiro PO con base no modelo." + +msgid "Create New Translation" +msgstr "Crear unha nova tradución" + +msgid "Create new translation" +msgstr "Crear unha nova tradución" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Desactivouse a revisión ortográfica porque non está instalado o dicionario " +"para o %s." + +msgid "Install" +msgstr "Instalar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Modificouse o catálogo. Desexa gardar as modificacións?" + +msgid "Save changes" +msgstr "Gardar os cambios" + +msgid "Your changes will be lost if you don't save them." +msgstr "Os cambios perderanse a menos que vostede os garde." + +msgid "Save" +msgstr "Gardar" + +msgid "Don't save" +msgstr "Non gardar" + +msgid "Don't Save" +msgstr "Non gardar" + +msgid "Save as..." +msgstr "Gardar como..." + +msgid "Compile to..." +msgstr "Compilar para..." + +msgid "Compiled Translation Files" +msgstr "Ficheiros de tradución compilados" + +msgid "Export as..." +msgstr "Exportar como..." + +msgid "HTML Files" +msgstr "Ficheiros HTML" + +msgid "Open catalog template" +msgstr "Abrir o modelo de catálogo" + +msgid "Updating catalog" +msgstr "Actualizando o catálogo" + +msgid "Source code not available." +msgstr "Código fonte non dispoñible." + +msgid "Updating failed" +msgstr "Erro na actualización" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Non se puideron actualizar as traducións a partir do código fonte porque non " +"se atopou tal código na localización especificada nas propiedades do " +"catálogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Probabelmente as entradas do catálogo sexan incorrectas." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Produciuse un erro ao actualizar o catálogo. Prema en «Detalles>>» para ver " +"os detalles." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "atopouse %d problema coa tradución" +msgstr[1] "atopáronse %d problemas coa tradución." + +msgid "Validation results" +msgstr "Resultados da validación" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"As entradas con erros márcanse en vermello na lista. Os detalles do erro " +"mostraranse cando seleccione unha destas entradas." + +msgid "The file was saved safely." +msgstr "O ficheiro gardouse satisfactoriamente." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"O ficheiro gardouse satisfactoriamente e compilouse no formato MO, mais é " +"posible que non funcione correctamente." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"O ficheiro gardouse de forma segura, pero non foi posíbel compilalo ao " +"formato MO para utilizalo." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"O ficheiro foi compilado ao formato MO, mais é posíbel que non funcione " +"correctamente." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "O ficheiro non pode ser compilado ao formato MO para o seu uso." + +msgid "No problems with the translation found." +msgstr "Non se atoparon problemas coa tradución." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"A tradución está pronta para o seu uso, mais aínda hai %d cadea sen traducir." +msgstr[1] "" +"A tradución está pronta para o seu uso, mais aínda hai %d cadeas sen " +"traducir." + +msgid "The translation is ready for use." +msgstr "A tradución está lista para utilizar." + +msgid "Context:" +msgstr "Contexto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit corrixiu automaticamente o contido non válido do ficheiro \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"O ficheiro contiña elementos duplicados, non permitidos nos ficheiros PO, o " +"cal impediría o seu uso. Poedit solucionou o problema, mais debe revisar as " +"traducións marcadas como dubidosas e corrixilas no caso de ser preciso." + +msgid "Language of the translation isn't set." +msgstr "O idioma da tradución está sen definir." + +msgid "Set Language" +msgstr "Definir idioma" + +msgid "Set language" +msgstr "Definir o idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"As suxestións non están dispoñibles se o idioma de tradución non está " +"definido correctamente. Outras funcionalidades, tales como as formas " +"plurais, tamén poden verse afectadas." + +msgid "Language of the translation is the same as source language." +msgstr "O idioma da tradución é o mesmo que o de orixe." + +msgid "Fix Language" +msgstr "Solucionar idioma" + +msgid "Fix language" +msgstr "Solucionar idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Este catálogo ten entradas con formas plurais, pero non ten configurada a " +"cabeceira de formas do plural." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"As entradas deste catálogo teñen un número de formas plurais diferente ao " +"que indica a cabeceira de formas do plural" + +msgid "Required header Plural-Forms is missing." +msgstr "Falta a cabeceira requirida de formas do plural." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Erro de sintaxe na cabeceira Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Corrixir a cabeceira" + +msgid "Fix the header" +msgstr "Arranxar a cabeceira" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "A expresión de formas plurais usada no catálogo non é habitual no %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Avaliar" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Produciuse un erro ao cargar o ficheiro de catálogo de mensaxes '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traducidas: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Pendente: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d erro" +msgstr[1] "%d erros" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entradas" + +msgid " (unsaved)" +msgstr " (sen gardar)" + +msgid " (modified)" +msgstr " (modificado)" + +msgid "Go" +msgstr "Ir" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Erro ao actualizar a memoria de tradución: %s" + +msgid "Purge deleted translations" +msgstr "Purgar as traducións eliminadas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Desexa eliminar todas as traducións que xa non se empregan?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Se continua coa purga, todas as traducións marcadas para eliminar " +"retiraranse permanentemente do ficheiro. Terá que traducilas outra vez se se " +"volven engadir no futuro." + +msgid "Keep" +msgstr "Manter" + +msgid "Purge" +msgstr "Purgar" + +msgid "Fill missing translations from TM" +msgstr "Cubrir as traducións pendentes a partir da MT" + +msgid "Only fill in exact matches" +msgstr "Só aquelas correspondencias exactas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"De modo predefinido, os resultados imprecisos cóbrense tamén e son marcados " +"como dubidosos. Marca esta opción para incluír só coincidencias exactas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Non marcar as coincidencias exactas como dubidosas" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Activar unicamente cando se confíe na calidade da MT. De modo predefinido, " +"todas as coincidencias se marcan como dubidosas para a súa revisión." + +msgid "Fill" +msgstr "Cubrir" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrada cuberta a partir da memoria de tradución." +msgstr[1] "%d entradas cubertas a partir da memoria de tradución." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"As traducións marcáronse como dubidosas porque poderían ser inexactas. " +"Cómpre revisalas para asegurar a súa exactitude." + +msgid "No entries could be filled from the translation memory." +msgstr "Non se cubriron entradas coa memoria de tradución." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"A MT non contén ningunha cadea similar ao contido deste ficheiro. Só será " +"efectiva para traducións semiautomáticas logo de que Poedit aprenda o " +"suficiente de ficheiros traducidos manualmente polo usuario." + +msgid "Translating" +msgstr "Traducindo" + +msgid "Filling missing translations from TM..." +msgstr "Completar as traducións pendentes desde a MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Traduciuse %u cadea" +msgstr[1] "Traducíronse %u cadeas" + +msgid "Copy from source text" +msgstr "Copiar o texto orixe" + +msgid "Copy from Source Text" +msgstr "Copiar o texto orixe" + +msgid "Clear translation" +msgstr "Borrar a tradución" + +msgid "Clear Translation" +msgstr "Borrar a tradución" + +msgid "Edit comment" +msgstr "Editar o comentario" + +msgid "Edit Comment" +msgstr "Editar o comentario" + +msgid "References:" +msgstr "Referencias:" + +msgid "Everything" +msgstr "Todo" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Cero" + +msgid "One" +msgstr "Un" + +msgid "Two" +msgstr "Dous" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Outro" + +msgid "&Bookmarks" +msgstr "&Marcadores" + +#, c-format +msgid "Set bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ir ao marcador %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ir ao marcador %i" + +msgid "Hide Sidebar" +msgstr "Agochar barra lateral" + +msgid "Show Sidebar" +msgstr "Mostrar barra lateral" + +msgid "Hide Status Bar" +msgstr "Agochar a barra de estado" + +msgid "Show Status Bar" +msgstr "Mostrar a barra de estado" + +msgid "Source text" +msgstr "Texto orixe" + +msgid "Translation" +msgstr "Tradución" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Texto fonte — %s" + +msgid "unknown language" +msgstr "idioma descoñecido" + +#, c-format +msgid "Translation — %s" +msgstr "Tradución — %s" + +msgid "Error:" +msgstr "Erro:" + +msgid "Source file" +msgstr "Ficheiro fonte" + +msgid "Source file occurrence:" +msgstr "Aparición en ficheiro de código fonte:" + +msgid "Open in Editor" +msgstr "Abrir no editor" + +msgid "Open in editor" +msgstr "Abrir no editor" + +msgid "No references for the selected item." +msgstr "Non hai referencias para o elemento seleccionado." + +#, c-format +msgid "Error opening file %s!" +msgstr "Produciuse un erro ao abrir o ficheiro %s!" + +msgid "Find" +msgstr "Buscar" + +msgid "Replace" +msgstr "Substituír" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcións" + +msgid "Ignore case" +msgstr "Ignorar maiúsculas e minúsculas" + +msgid "Wrap around" +msgstr "Busca circular" + +msgid "Whole words only" +msgstr "Só palabras completas" + +msgid "Find in source texts" +msgstr "Atopar nos textos fonte" + +msgid "Find in translations" +msgstr "Buscar nas traducións" + +msgid "Find in comments" +msgstr "Buscar nos comentarios" + +msgid "Close" +msgstr "Pechar" + +msgid "Replace All" +msgstr "Substituír todo" + +msgid "Replace all" +msgstr "Substituír todo" + +msgid "< &Previous" +msgstr "< &Anterior" + +msgid "&Next >" +msgstr "&Seguinte >" + +msgid "String to find" +msgstr "Texto que atopar" + +msgid "Replacement string" +msgstr "Texto de substitución" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Non foi posíbel executar o programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Código ou nome do idioma (ex.: GL)" + +msgid "Translation Language" +msgstr "Idioma da tradución" + +msgid "Language of the translation:" +msgstr "Idioma da tradución:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Xestor de catálogos" + +msgid "Catalog" +msgstr "Catálogo" + +msgid "Total" +msgstr "Total " + +msgid "Untrans" +msgstr "Sen traducir" + +msgid "Fuzzy" +msgstr "Dubidosas" + +msgid "Bad Tokens" +msgstr "Con erros" + +msgid "Last modified" +msgstr "Última modificación" + +msgid "Select directory" +msgstr "Seleccione un directorio" + +msgid "Directories:" +msgstr "Directorios:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Desexa eliminar o proxecto?" + +msgid "Confirmation" +msgstr "Confirmación" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Desexa facer unha actualización masiva\n" +"de todos os catálogos do proxecto?" + +msgid "Information about the translator" +msgstr "Información acerca do/a tradutor/a" + +msgid "Name:" +msgstr "Nome:" + +msgid "Your Name" +msgstr "O seu nome" + +msgid "Email:" +msgstr "Correo electrónico:" + +msgid "your_email@example.com" +msgstr "o_seu_correo@exemplo.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Estes datos (nome e correo electrónico) empréganse unicamente para " +"establecer o valor da cabeceira «Last-Translator» dos ficheiros de GNU " +"gettext." + +msgid "Editing" +msgstr "Edición" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar automaticamente o ficheiro MO ao gardar" + +msgid "Show summary after catalog update" +msgstr "Mostrar resumo despois da actualización do catálogo" + +msgid "Check spelling" +msgstr "Revisar a ortografía" + +msgid "Always change focus to text input field" +msgstr "Cambiar o foco sempre ao campo da entrada de texto" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nunca deixar que a lista de mensaxes teña o foco. Se está activado, debe " +"usar Ctrl-frechas para navegar co teclado pero tamén poderá introducir texto " +"inmediatamente, sen ter que premer Tabulación para cambiar o foco." + +msgid "Appearance" +msgstr "Aparencia" + +msgid "Use custom list font:" +msgstr "Fonte personalizada nas listaxes:" + +msgid "Use custom text fields font:" +msgstr "Tipo de letra personalizado nos campos de texto:" + +msgid "Change UI language" +msgstr "Cambiar o idioma da interface" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(cómpre Windows 8 ou posterior)" + +msgid "General" +msgstr "Xeral" + +msgid "Use translation memory" +msgstr "Utilizar a memoria de tradución" + +msgid "Learn From Files..." +msgstr "Aprender dos ficheiros..." + +msgid "Learn from files..." +msgstr "Aprender dos ficheiros..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Restablecer" + +msgid "Consult TM when updating from sources" +msgstr "Consultar a MT ao actualizar desde as fontes" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"De se activar, Poedit tentará encher as cadeas novas utilizando as\n" +"traducións almacenadas na memoria de tradución. Se a MT está\n" +"maioritariamente baleira, o proceso non será moi efectivo. Cantas máis\n" +"traducións edite e maior sexa a MT, mellor será o resultado." + +msgid "Stored translations:" +msgstr "Traducións almacenadas:" + +msgid "Database size on disk:" +msgstr "Tamaño da base de datos no disco:" + +msgid "Select translation files to import" +msgstr "Seleccione os ficheiros de tradución para importar" + +msgid "Translation Memory" +msgstr "Memoria de tradución" + +msgid "Importing translations..." +msgstr "Importando as traducións..." + +msgid "Finalizing..." +msgstr "Rematando..." + +msgid "Reset translation memory" +msgstr "Restablecer memoria de tradución" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Ten a certeza de querer restablecer a memoria de tradución?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Ao restablecer a memoria de tradución, borraranse todas as traducións " +"almacenadas. Esta operación non se pode desfacer." + +msgid "Cancel" +msgstr "Cancelar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Os extractores de código fonte utilízanse para atopar as mensaxes " +"traducibles nos ficheiros de código fonte, extraelas e así permitir a súa " +"tradución." + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Editar" + +msgid "Delete extractor" +msgstr "Eliminar extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Ten a certeza de querer eliminar o extractor \"%s\"?" + +msgid "Extractors" +msgstr "Extractores" + +msgid "Accounts" +msgstr "Contas" + +msgid "Automatically check for updates" +msgstr "Mirar de actualizacións automaticamente" + +msgid "Include beta versions" +msgstr "Incluír versións beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"As versións beta conteñen as funcionalidades e melloras máis recentes, mais " +"poden resultar menos estables." + +msgid "Updates" +msgstr "Actualizacións" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Estes valores afectan ao formato interno dos ficheiros PO. Axústaos se tes " +"requisitos específicos; por exemplo, debido ao control de versión." + +msgid "Line endings:" +msgstr "Finais de liña:" + +msgid "Unix (recommended)" +msgstr "Unix (recomendado)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Axustar a:" + +msgid "Preserve formatting of existing files" +msgstr "Conservar o formato dos ficheiros existentes" + +msgid "Advanced" +msgstr "Avanzado" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferencias do %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastre e solte cartafoles aquí\n" +"\n" +"ou utilice o botón +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arrastre e solte cartafoles aquí\n" +"\n" +"ou utilice o botón +" + +msgid "Add Folders..." +msgstr "Engadir cartafoles..." + +msgid "Add folders..." +msgstr "Engadir cartafoles..." + +msgid "Add Files..." +msgstr "Engadir ficheiros..." + +msgid "Add files..." +msgstr "Engadir ficheiros..." + +msgid "Add Wildcard..." +msgstr "Engadir comodín..." + +msgid "Add wildcard..." +msgstr "Engadir comodín..." + +msgid "Paths" +msgstr "Rutas" + +msgid "Excluded paths" +msgstr "Camiños excluídos" + +msgid "Additional keywords" +msgstr "Palabras chave adicionais" + +msgid "Name of the project the translation is for" +msgstr "O nome do proxecto ao que pertence esta tradución" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p. ex., nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomendado)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Por favor, garde o ficheiro primeiro. Esta sección non pode ser editar ata " +"que o faga." + +msgid "Comment:" +msgstr "Comentario:" + +msgid "OK" +msgstr "Aceptar" + +msgid "C&lear" +msgstr "&Borrar" + +msgid "Clear the comment" +msgstr "Borrar o comentario" + +msgid "Create new translations project" +msgstr "Crear novo proxecto de tradución" + +msgid "Edit the project" +msgstr "Editar o proxecto" + +msgid "Delete the project" +msgstr "Eliminar o proxecto" + +msgid "Update all" +msgstr "Actualizar todo" + +msgid "Update all catalogs in the project" +msgstr "Actualizar todos os catálogos do proxecto" + +msgid "Edit project" +msgstr "Editar o proxecto" + +msgid "Project name:" +msgstr "Nome do proxecto:" + +msgid "Browse" +msgstr "Explorar" + +msgid "Add directory to the list" +msgstr "Engadir directorio á lista" + +msgid "&New..." +msgstr "&Novo..." + +msgid "New from &POT/PO file..." +msgstr "Nova a partir dun ficheiro &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Nova a partir dun ficheiro &POT/PO..." + +msgid "&Open..." +msgstr "&Abrir..." + +msgid "Open Recent" +msgstr "Abrir recentes" + +msgid "Open from Crowdin..." +msgstr "Abrir desde Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Abrir desde Crowdin..." + +msgid "&Close" +msgstr "&Pechar" + +msgid "&Save" +msgstr "&Gardar" + +msgid "Save &as..." +msgstr "Gard&ar como..." + +msgid "Save &As..." +msgstr "Gard&ar como..." + +msgid "Compile to MO..." +msgstr "Compilar a MO..." + +msgid "E&xport as HTML..." +msgstr "E&xportar como HTML..." + +msgid "Check for updates..." +msgstr "Comprobar se hai actualizacións..." + +msgid "&Preferences..." +msgstr "&Preferencias..." + +msgid "Catalogs &manager" +msgstr "&Xestor de proxectos" + +msgid "Catalogs &Manager" +msgstr "Xestor de &catálogos" + +msgid "E&xit" +msgstr "&Saír" + +msgid "Quit" +msgstr "Saír" + +msgid "Copy from singular" +msgstr "Copiar do singular" + +msgid "Copy From Singular" +msgstr "Copiar do singular" + +msgid "Translation is &fuzzy" +msgstr "A tradución é &dubidosa" + +msgid "Translation Is &Fuzzy" +msgstr "A tradución é &dubidosa" + +msgid "Edit &comment" +msgstr "Editar o &comentario" + +msgid "Edit &Comment" +msgstr "Editar &comentario" + +msgid "Suggestions" +msgstr "Suxestións" + +msgid "&Show references" +msgstr "Mo&strar as referencias" + +msgid "&Show References" +msgstr "Mo&strar as referencias" + +msgid "&Find..." +msgstr "&Buscar..." + +msgid "Replace..." +msgstr "Substituír..." + +msgid "Find next" +msgstr "Buscar seguinte" + +msgid "Find previous" +msgstr "Buscar anterior" + +msgid "Find and Replace..." +msgstr "Atopar e substituír..." + +msgid "Find Next" +msgstr "Buscar seguinte" + +msgid "Find Previous" +msgstr "Buscar anterior" + +msgid "&Preferences" +msgstr "&Preferencias" + +msgid "Display entry &IDs" +msgstr "Mostrar &ID das entradas" + +msgid "Display Entry &IDs" +msgstr "Mostrar &ID das entradas" + +msgid "Sort by &file order" +msgstr "Ordenar por &ficheiro" + +msgid "Sort by &File Order" +msgstr "Ordenar por &ficheiro" + +msgid "Sort by &source" +msgstr "Ordenar pola &orixe" + +msgid "Sort by &Source" +msgstr "Ordenar pola &orixe" + +msgid "Sort by &translation" +msgstr "Ordenar por &tradución" + +msgid "Sort by &Translation" +msgstr "Ordenar por &tradución" + +msgid "&Group by context" +msgstr "A&grupar por contexto" + +msgid "&Group By Context" +msgstr "A&grupar por contexto" + +msgid "Entries with errors first" +msgstr "Primeiro as entradas con erros" + +msgid "Entries with Errors First" +msgstr "Primeiro as entradas con erros" + +msgid "&Untranslated entries first" +msgstr "Entradas &sen traducir primeiro" + +msgid "&Untranslated Entries First" +msgstr "Entradas &sen traducir primeiro" + +msgid "Show sidebar" +msgstr "Mostrar barra lateral" + +msgid "Show status bar" +msgstr "Mostrar a barra de estado" + +msgid "C&atalog" +msgstr "C&atálogo" + +msgid "&Update from sources" +msgstr "Act&ualizar desde as fontes" + +msgid "&Update from Sources" +msgstr "Act&ualizar desde as fontes" + +msgid "Update from &POT file..." +msgstr "Actualizar desde un ficheiro &POT..." + +msgid "Update from &POT File..." +msgstr "Actualizar desde un ficheiro &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizar con Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Cubrir as traducións pendentes a partir da MT..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Cubrir as traducións pendentes a partir da MT..." + +msgid "&Purge deleted translations" +msgstr "&Purgar as traducións eliminadas" + +msgid "&Purge Deleted Translations" +msgstr "&Purgar as traducións eliminadas" + +msgid "&Validate translations" +msgstr "&Validar as traducións" + +msgid "&Validate Translations" +msgstr "&Validar as traducións" + +msgid "&Properties..." +msgstr "&Propiedades..." + +msgid "&Done and next" +msgstr "&Feito e continuar coa seguinte" + +msgid "&Done and Next" +msgstr "&Feito e seguinte" + +msgid "&Previous translation" +msgstr "Tradución &anterior" + +msgid "&Previous Translation" +msgstr "Tradución &anterior" + +msgid "&Next translation" +msgstr "Tradución &seguinte" + +msgid "&Next Translation" +msgstr "Tradución &seguinte" + +msgid "P&revious unfinished" +msgstr "&Anterior sen rematar" + +msgid "P&revious Unfinished" +msgstr "&Anterior sen rematar" + +msgid "Ne&xt unfinished" +msgstr "Seguin&te sen rematar" + +msgid "Ne&xt Unfinished" +msgstr "Seguin&te sen rematar" + +msgid "Previous plural form" +msgstr "Forma plural anterior" + +msgid "Previous Plural Form" +msgstr "Forma plural anterior" + +msgid "Next plural form" +msgstr "Forma plural seguinte" + +msgid "Next Plural Form" +msgstr "Forma plural seguinte" + +msgid "&Online help" +msgstr "Axuda &en Internet" + +msgid "&Online Help" +msgstr "Axuda &en Internet" + +msgid "&GNU gettext manual" +msgstr "Manual de &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual de &GNU gettext" + +msgid "&About Poedit" +msgstr "&Sobre Poedit" + +msgid "&About" +msgstr "&Sobre" + +msgid "Extractor setup" +msgstr "Configuración do extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista de extensións separadas con punto e coma (p.ex. *.cpp; *.h):" + +msgid "Invocation:" +msgstr "Invocación:" + +msgid "Command to extract translations:" +msgstr "Comando para extraer as traducións:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Este comando emprégase para abrir o extractor.\n" +"%o expande o nome do ficheiro de saída, %K mostra\n" +"as palabras chave, %F fai unha listaxe dos ficheiros de entrada e\n" +"%C define o conxunto de caracteres (véxase máis abaixo)." + +msgid "An item in keywords list:" +msgstr "Un elemento da lista de palabras clave:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Isto engadirase á liña de ordes unha vez por\n" +"cada palabra clave. %k substituirase pola\n" +"palabra clave." + +msgid "An item in input files list:" +msgstr "Un elemento da lista de ficheiros de entrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Isto engadirase á liña de ordes unha vez\n" +"por cada ficheiro de entrada. %f substituirase\n" +"polo nome de ficheiro." + +msgid "Source code charset:" +msgstr "Xogo de caracteres do código fonte:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Isto engadirase á liña de ordes só se\n" +"se proporciona o xogo de caracteres do\n" +"código fonte. %c substituirase polo valor\n" +"do xogo de caracteres." + +msgid "Catalog properties" +msgstr "Propiedades do catálogo" + +msgid "Project name and version:" +msgstr "Nome e versión do proxecto:" + +msgid "Plural Forms:" +msgstr "Formas do plural:" + +msgid "Use default rules for this language" +msgstr "Utilizar as regras predefinidas para este idioma" + +msgid "Use custom expression" +msgstr "Utilizar expresión personalizada" + +msgid "Learn about plural forms" +msgstr "Aprenda sobre as formas do plural" + +msgid "Charset:" +msgstr "Xogo de caracteres:" + +msgid "Team:" +msgstr "Equipo:" + +msgid "Team's email address:" +msgstr "Enderezo de correo-e do equipo:" + +msgid "Translation properties" +msgstr "Propiedades da tradución" + +msgid "Sources paths" +msgstr "Rutas do código fonte" + +msgid "Extract text from source files in the following directories:" +msgstr "" +"Extraer textos dos ficheiros de código fonte que están nos seguintes " +"directorios:" + +msgid "Base path:" +msgstr "Ruta base:" + +msgid "Sources keywords" +msgstr "Palabras clave das orixes" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Usa estas palabras clave (nomes de funcións) para recoñecer cadeas\n" +"intraducibles nos ficheiros de código fonte:" + +msgid "Learn about gettext keywords" +msgstr "Saber máis sobre as palabras clave de gettext" + +msgid "Update summary" +msgstr "Resumo da actualización" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Atopáronse estas cadeas nas fontes pero non no catálogo.\n" +"Poedit engadiráas agora ao catálogo." + +msgid "New strings" +msgstr "Novas cadeas" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Estas cadeas xa non están nas fontes.\n" +"Poedit eliminaráas do catálogo agora." + +msgid "Obsolete strings" +msgstr "Cadeas obsoletas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 novas, 0 obsoletas)" + +msgid "Open" +msgstr "Abrir" + +msgid "Save catalog" +msgstr "Gardar o catálogo" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Buscar erros na tradución" + +msgid "Update" +msgstr "Actualizar" + +msgid "Update catalog - synchronize it with sources" +msgstr "Actualizar catálogo - sincronizalo coas súas fontes" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Activado se a cadea seleccionada ten unha tradución dubidosa" + +msgid "Show or hide the sidebar" +msgstr "Mostrar ou agochar a barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texto fonte anterior:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"O texto fonte antigo (antes de mudar por unha actualización) ao que " +"corresponde a tradución dubidosa." + +msgid "Notes for translators:" +msgstr "Notas para os tradutores:" + +msgid "Add comment" +msgstr "Engadir comentario" + +msgid "Add Comment" +msgstr "Engadir comentario" + +msgid "Translation suggestions:" +msgstr "Suxestións de tradución:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Non se atoparon coincidencias" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Non se atoparon coincidencias" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Esta cadea atopouse na memoria de tradución de Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novas: %i, obsoletas: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importando traducións: %d" + +msgid "Poedit Update" +msgstr "Actualización de Poedit" + +msgid "Preparing migration..." +msgstr "Preparando a migración..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estado de saída de migración: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit necesita converter a súa memoria de tradución a un formato novo." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Debe realizar isto antes de iniciar Poedit. Pode levar un tempo, caso de que " +"haxa moitas traducións almacenadas, mais polo xeral é un proceso rápido." + +msgid "Proceed" +msgstr "Continuar" + +msgid "Translation memory migration failed." +msgstr "Erro na migración da memoria de tradución." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Non se puideron migrar os datos da súa memoria de tradución. O erro foi: \n" +"\n" +"%s\n" +"Envíe unha mensaxe a help@poedit.net e axudáremolo a corrixilo." + +msgid "Cannot create temporary directory." +msgstr "Non foi posíbel crear o directorio temporal." + +msgid "Welcome to Poedit" +msgstr "Benvido/a a Poedit" + +msgid "Edit a translation" +msgstr "Editar unha tradución" + +msgid "Open an existing PO file and edit the translation." +msgstr "Abrir un ficheiro PO existente e editar a tradución." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Tomar un ficheiro PO ou POT existente e crear unha traducción a partir deste." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Colabora na tradución con Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "Descargue un ficheiro desde Crowdin, traduza e sincronice os cambios." + +msgid "What is Crowdin?" +msgstr "Que é Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Non hai traducións. Isto non é o habitual." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"As entradas traducibles non se engaden manualmente no sistema Gettext, senón " +"que se extraen\n" +"automaticamente do código. Así, mantéñense actualizadas e precisas.\n" +"Quen traduce normalmente emprega patróns ou modelos de ficheiros PO (POT) " +"proporcionados polo desenvolvedor." + +msgid "(Learn more about GNU gettext)" +msgstr "(Saber máis sobre o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"O xeito máis simple de encher este catálogo é actualizalo desde un POT:" + +msgid "Update from POT" +msgstr "Actualizar desde POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Tomar as cadeas traducibles desde un patrón POT existente." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Tamén pode extraer as cadeas traducibles directamente do código fonte:" + +msgid "Extract from sources" +msgstr "Extraer desde as fontes" + +msgid "Configure source code extraction in Properties." +msgstr "Configure a extracción de código fonte en Propiedades." + +msgid "Sync" +msgstr "Sincronizar" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar a tradución con Crowdin" diff --git a/locales/he.mo b/locales/he.mo new file mode 100644 index 0000000000000000000000000000000000000000..7cd978296e74e411b02191da2374881f5f2ac02f GIT binary patch literal 50679 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 Y`F(4~ZpVv^+F{vt*Vu5fgI~G+KMdG<@c;k- literal 0 HcmV?d00001 diff --git a/locales/he.po b/locales/he.po new file mode 100644 index 0000000..622a758 --- /dev/null +++ b/locales/he.po @@ -0,0 +1,1934 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Hebrew\n" +"Language: he_IL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: he\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "הסתר התראה זו" + +msgid "Don't Show Again" +msgstr "אל תציג שוב" + +msgid "Don't show again" +msgstr "אל תציג שוב" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "שורה %i בקובץ '%s' לא נטענה כראוי." +msgstr[1] "%i שורות בקובץ '%s' לא נטענו כראוי." +msgstr[2] "%i שורות בקובץ '%s' לא נטענו כראוי." +msgstr[3] "%i שורות בקובץ '%s' לא נטענו כראוי." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "שורה %d בקובץ '%s' הינה פגומה (נתוני %s לא חוקיים)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "כותרת שגויה: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "קובץ קטלוג פגום: לשון יחיד של msgstr בשימוש עם msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "קובץ קטלוג פגום: לשון רבים של msgstr בשימוש בלי mdgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"אירעו שגיאות בעת טעינת הקטלוג. כתוצאה מכך, ייתכן שחלק מהמידע חסר או פגום." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "לא ניתן לטעון קובץ %s, הוא ככל הנראה פגום." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"הקובץ '%s' הינו לקריאה בלבד ולא ניתן לשמור אותו.\n" +"יש לשמור אותו בשם אחר." + +#, c-format +msgid "Couldn't save file %s." +msgstr "לא ניתן לשמור את הקובץ %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "הייתה בעיה בעת עיצוב הקובץ בצורה נקייה (אך הוא נשמר כראוי)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"לא ניתן לשמור את הקטלוג בקידוד '%s' כמו שצוין בהגדרות הקטלוג.\n" +"\n" +"במקום זאת הוא נשמר בקידוד UTF-8 וההגדרות שונו בהתאם." + +msgid "Error saving catalog" +msgstr "שגיאה בשמירת הקטלוג" + +msgid "PO Translation Files" +msgstr "קבצי תרגום PO" + +msgid "POT Translation Templates" +msgstr "תבניות תרגום POT" + +msgid "All Translation Files" +msgstr "כל קבצי התרגום" + +msgid "Merging differences..." +msgstr "ממזג בין ההבדלים..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' אינו קובץ POT חוקי." + +msgid "(Use default language)" +msgstr "(שימוש בשפת ברירת המחדל)" + +msgid "Select your preferred language" +msgstr "בחר בשפה המועדפת עליך" + +msgid "Language selection" +msgstr "בחירת שפה" + +msgid "You must restart Poedit for this change to take effect." +msgstr "יש להפעיל מחדש את Poedit כדי שהשינויים ייכנסו לתוקף." + +msgid "Downloading translations is disabled in this project." +msgstr "הורדת תרגומים מושבתת עבור פרויקט זה." + +msgid "Not authorized, please sign in again." +msgstr "לא מורשה, אנא התחבר שנית." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin היא מערכת ניהול לוקליזציה מקוונת וכלי תרגום שיתופי. Poedit יכולה " +"לסנכרן קבצי PO בצורה חלקה המנוהלים ב-Crowdin." + +msgid "Sign In" +msgstr "התחבר" + +msgid "Sign in" +msgstr "התחבר" + +msgid "Sign Out" +msgstr "התנתק" + +msgid "Sign out" +msgstr "התנתק" + +msgid "Waiting for authentication…" +msgstr "מחכה לאימות..." + +msgid "Updating user information…" +msgstr "מעדכן נתוני משתמש..." + +msgid "Signed in as:" +msgstr "מחובר בשם:" + +msgid "Learn More About Crowdin" +msgstr "למד עוד אודות Crowdin" + +msgid "Learn more about Crowdin" +msgstr "למד עוד אודות Crowdin" + +msgid "Sign in to Crowdin" +msgstr "התחבר אל Crowdin" + +msgid "Open Crowdin translation" +msgstr "פתח תרגום Crowdin" + +msgid "Project:" +msgstr "פרוייקט:" + +msgid "Language:" +msgstr "שפה:" + +msgid "File:" +msgstr "קובץ:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "אין פרוייקטי תרגום הרשומים בחשבון Crowdin שלך." + +msgid "This project has no files that can be translated in Poedit." +msgstr "לפרויקט זה אין קבצים הניתנים לתרגום ב-Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "קובץ זה ניתן לעריכה רק בממשק האינטרנט של Crowdin." + +msgid "Downloading latest translations…" +msgstr "מוריד תרגומים עדכניים…" + +msgid "Syncing with Crowdin" +msgstr "מסנכרן עם Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "הסנכרון עם Crowdin נכשל." + +msgid "Crowdin error" +msgstr "שגיאת Crowdin" + +msgid "Uploading translations…" +msgstr "מעלה תרגומים…" + +msgid "&Copy" +msgstr "ה&עתק" + +msgid "Learn more" +msgstr "מידע נוסף" + +msgid "Learn More" +msgstr "למד עוד" + +#, c-format +msgid "Failed command: %s" +msgstr "הפקודה נכשלה: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "מיזוג קטלוגים של gettext נכשל." + +msgid "Scanning files..." +msgstr "סורק קבצים..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "מנתח קבצי %s..." + +msgid "Failed to load extracted catalog." +msgstr "טעינת הקטלוג שחולץ נכשלה." + +msgid "&Help" +msgstr "×¢&זרה" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "לא ניתן לערוך קבצי MO ישירות ב-Poedit." + +msgid "Error opening file" +msgstr "שגיאה בפתיחת הקובץ" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"אנא פתח וערוך את קובץ ה-PO המקביל במקום. כשתשמור אותו, קובץ ה-MO יתעדכן " +"בהתאם." + +msgid "don't delete temporary files (for debugging)" +msgstr "אל תמחק קבצים זמניים (לצורך ניפוי שגיאות)" + +msgid "handle a poedit:// URI" +msgstr "טפל ב-poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "התקשורת עם תהליך Poedit נכשל." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "אירעה חריגה: %s" + +msgid "Unhandled exception occurred." +msgstr "אירעה חריגה." + +msgid "Open catalog" +msgstr "פתיחת קטלוג" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "הקובץ '%s' לא קיים." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "אודות %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "גרסה %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "שירותים" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "הסתר את %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "הסתר אחרים" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "הצג הכל" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "סיים את %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit הינו עורך תרגומים פשוט לתפעול." + +msgid "Catalogs Manager" +msgstr "מנהל הקטלוגים" + +msgid "Check for Updates..." +msgstr "בדוק אחר עדכונים..." + +msgid "&Edit" +msgstr "&עריכה" + +msgid "Undo" +msgstr "בטל" + +msgid "Redo" +msgstr "חזור על הפעולה האחרונה" + +msgid "Paste and Match Style" +msgstr "הדבק והתאם לסגנון" + +msgid "Delete" +msgstr "מחק" + +msgid "Spelling and Grammar" +msgstr "איות ודקדוק" + +msgid "Show Spelling and Grammar" +msgstr "הצג איות ודקדוק" + +msgid "Check Document Now" +msgstr "בדוק את המסמך כעת" + +msgid "Check Spelling While Typing" +msgstr "בדוק איות במהלך ההקלדה" + +msgid "Check Grammar With Spelling" +msgstr "בדוק דקדוק ביחד עם איות" + +msgid "Correct Spelling Automatically" +msgstr "תקן איות באופן אוטומטי" + +msgid "Substitutions" +msgstr "החלפות" + +msgid "Show Substitutions" +msgstr "הצג החלפות" + +msgid "Smart Copy/Paste" +msgstr "העתקה והדבקה חכמות" + +msgid "Smart Quotes" +msgstr "מרכאות חכמות" + +msgid "Smart Dashes" +msgstr "מיקוף חכם" + +msgid "Smart Links" +msgstr "קישורים חכמים" + +msgid "Text Replacement" +msgstr "מלל חלופי" + +msgid "Transformations" +msgstr "המרות" + +msgid "Make Upper Case" +msgstr "הפוך לאותיות גדולות" + +msgid "Make Lower Case" +msgstr "הפוך לאותיות קטנות" + +msgid "Capitalize" +msgstr "הפוך לאותיות רישיות" + +msgid "Speech" +msgstr "דיבור" + +msgid "Start Speaking" +msgstr "הקרא" + +msgid "Stop Speaking" +msgstr "הפסק הקראה" + +msgid "&View" +msgstr "ת&צוגה" + +msgid "Enter Full Screen" +msgstr "עבור למסך מלא" + +msgid "Window" +msgstr "חלון" + +msgid "Minimize" +msgstr "מזער" + +msgid "Zoom" +msgstr "הגדל/הקטן" + +msgid "Bring All to Front" +msgstr "הבא הכל קדימה" + +msgid "PO Translation" +msgstr "תרגום PO" + +msgid "The file cannot be opened." +msgstr "לא ניתן לפתוח את הקובץ." + +msgid "Invalid file" +msgstr "קובץ שגוי" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "יתכן שהקובץ פגום או מכיל פורמט שלא מזוהה ×¢\"י Poedit." + +msgid "&Undo" +msgstr "&בטל" + +msgid "&Redo" +msgstr "בצע &שוב" + +msgid "Cu&t" +msgstr "ג&זור" + +msgid "Cut" +msgstr "גזור" + +msgid "Copy" +msgstr "העתק" + +msgid "&Paste" +msgstr "ה&דבק" + +msgid "Paste" +msgstr "הדבק" + +msgid "&Delete" +msgstr "&מחק" + +msgid "Select &All" +msgstr "בחר ה&כל" + +msgid "Select All" +msgstr "בחר הכל" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "לא ניתן לשחרר יותר מקובץ אחד בחלון של Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "הקובץ '%s' אינו קטלוג הודעות." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&קובץ" + +msgid "&Go" +msgstr "×¢&בור אל" + +msgid "Source text:" +msgstr "טקסט המקור:" + +msgid "Singular:" +msgstr "לשון יחיד:" + +msgid "Plural:" +msgstr "לשון רבים:" + +msgid "Translation:" +msgstr "תרגום:" + +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 הינם תבניות בלבד ולא מכילים תרגומים.\n" +"על מנת ליצור תרגום, צור קובץ PO חדש המבוסס על התבנית." + +msgid "Create New Translation" +msgstr "צור תרגום חדש" + +msgid "Create new translation" +msgstr "צור תרגום חדש" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "בדיקת איות מושבתת, מכיוון שהמילון לשפה %s אינו מותקן." + +msgid "Install" +msgstr "התקן" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "הקטלוג שונה. האם ברצונך לשמור את השינויים?" + +msgid "Save changes" +msgstr "שמור שינויים" + +msgid "Your changes will be lost if you don't save them." +msgstr "השינויים שביצעת יאבדו אם לא תשמור אותם." + +msgid "Save" +msgstr "שמור" + +msgid "Don't save" +msgstr "אל תשמור" + +msgid "Don't Save" +msgstr "אל תשמור" + +msgid "Save as..." +msgstr "שמור בשם..." + +msgid "Compile to..." +msgstr "בצע הידור ל..." + +msgid "Compiled Translation Files" +msgstr "קבצי תרגום מהודרים" + +msgid "Export as..." +msgstr "ייצא בשם..." + +msgid "HTML Files" +msgstr "קבצי HTML" + +msgid "Open catalog template" +msgstr "פתח תבנית קטלוג" + +msgid "Updating catalog" +msgstr "מעדכן קטלוג" + +msgid "Source code not available." +msgstr "קוד המקור אינו זמין." + +msgid "Updating failed" +msgstr "העדכון נכשל" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"לא ניתן לעדכן תרגומים מקוד המקור, מכיוון שלא נמצא קוד במיקום שצויין במאפייני " +"הקטלוג." + +msgid "Entries in the catalog are probably incorrect." +msgstr "קיימות רשומות בקטלוג שככל הנראה אינן נכונות." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "עדכון הקטלוג נכשל. לחץ על 'עוד >>' לקבלת פרטים נוספים." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "נמצאו %d בעיות עם התרגום." +msgstr[1] "נמצאו %d בעיות עם התרגום." +msgstr[2] "נמצאו %d בעיות עם התרגום." +msgstr[3] "נמצאו %d בעיות עם התרגום." + +msgid "Validation results" +msgstr "תוצאות האימות" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"רשומות עם שגיאות סומנו באדום ברשימה. פרטי השגיאה יופיעו כשתבחר ברשומה כזאת." + +msgid "The file was saved safely." +msgstr "הקובץ נשמר בבטחה." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "הקובץ נשמר בבטחה והודר לפורמט ה-MO, אך יתכן שהוא לא יעבוד כראוי." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "הקובץ נשמר בבטחה, אך לא ניתן להדר אותו לפורמט ה-MO לצורך שימוש." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "הקובץ הודר לפורמט ה-MO, אך יתכן שהוא לא יעבוד כראוי." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "לא ניתן להדר קובץ זה לפורמט ה-MO לצורך שימוש." + +msgid "No problems with the translation found." +msgstr "לא נמצאו בעיות בתרגום." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "התרגום מוכן לשימוש, אבל %d רשומות לא תורגמו עדיין." +msgstr[1] "התרגום מוכן לשימוש, אבל %d רשומות לא תורגמו עדיין." +msgstr[2] "התרגום מוכן לשימוש, אבל %d רשומות לא תורגמו עדיין." +msgstr[3] "התרגום מוכן לשימוש, אבל %d רשומות לא תורגמו עדיין." + +msgid "The translation is ready for use." +msgstr "התרגום מוכן לשימוש." + +msgid "Context:" +msgstr "הקשר:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit תיקן באופן אוטומטי תוכן שגוי בקובץ \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"הקובץ הכיל פריטים כפולים, כששימוש בהם לא מורשה בקבצי PO וימנע שימוש בקובץ. " +"Poedit תיקן את הבעיה, אבל מומלץ לסקור את התרגומים של כל הפריטים שמסומנים " +"כמעורפלים ולתקן אותם במידת הצורך." + +msgid "Language of the translation isn't set." +msgstr "שפת התרגום אינה מוגדרת." + +msgid "Set Language" +msgstr "הגדר שפה" + +msgid "Set language" +msgstr "הגדר שפה" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"הצעות אינן זמינות אם שפת התרגום לא מוגדרת כראוי. יתכן שמאפיינים אחרים, כמו " +"לשון רבים, יושפעו גם כן." + +msgid "Language of the translation is the same as source language." +msgstr "שפת התרגום זהה לשפת המקור." + +msgid "Fix Language" +msgstr "תקן שפה" + +msgid "Fix language" +msgstr "תקן שפה" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"לקטלוג זה יש רשומות עם צורות רבים, אך אינם מוגדרים עם כותרת Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"לרשומות בקטלוג זה ישנן צורות רבים שונות ממה שכתוב בכותרת Plural-Forms של " +"הקטלוג" + +msgid "Required header Plural-Forms is missing." +msgstr "הכותרת ההכרחית Plural-Forms חסרה." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "שגיאת תחביר בכותרת ה-Plural-Forms‏ (\"%s\")." + +msgid "Fix the Header" +msgstr "תקן את הכותרת" + +msgid "Fix the header" +msgstr "תקן את הכותרת" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "שימוש בביטויי לשון רבים שבקטלוג אינו שגרתי עבור השפה %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "סקור" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "שגיאה בטעינת קובץ קטלוג ההודעות '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "תורגמו: %d מתוך %d (%d%%)" + +#, c-format +msgid "Remaining: %d" +msgstr "נותרו: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "שגיאה %d" +msgstr[1] "%d שגיאות" +msgstr[2] "%d שגיאות" +msgstr[3] "%d שגיאות" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "רשומה %d" +msgstr[1] "%d רשומות" +msgstr[2] "%d רשומות" +msgstr[3] "%d רשומות" + +msgid " (unsaved)" +msgstr " (לא נשמר)" + +msgid " (modified)" +msgstr " (שונה)" + +msgid "Go" +msgstr "עבור אל" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "עדכון זיכרון התרגום נכשל: %s" + +msgid "Purge deleted translations" +msgstr "פנה תרגומים שנמחקו" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "האם ברצונך להסיר את כל התרגומים שאינם עוד בשימוש?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"אם תמשיך בתהליך הפינוי, כל התרגומים שסומנו כמחוקים יוסרו לצמיתות. יהיה עליך " +"לתרגם אותם מחדש אם הם יתווספו שוב בעתיד." + +msgid "Keep" +msgstr "השאר" + +msgid "Purge" +msgstr "פנה" + +msgid "Fill missing translations from TM" +msgstr "השלם תרגומים חסרים מזיכרון התרגום" + +msgid "Only fill in exact matches" +msgstr "השלם רק התאמות מדויקות" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"כברירת מחדל, תוצאות לא מדויקות ממולאות גם כן ומסומנות בסטטוס מעורפל. בחר " +"אפשרות זו כדי לכלול רק התאמות מדויקות." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "אל תסמן התאמות מדויקות בסטטוס מעורפל" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"בחר רק אם אתה בוטח באיכות של ה-TM שלך. כברירת מחדל, כל ההתאמות מה-TM מסומנות " +"בסטטוס מעורפל ויש לעבור עליהם." + +msgid "Fill" +msgstr "השלם" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d רשומות הושלמו מזיכרון התרגום." +msgstr[1] "%d רשומות הושלמו מזיכרון התרגום." +msgstr[2] "%d רשומות הושלמו מזיכרון התרגום." +msgstr[3] "%d רשומות הושלמו מזיכרון התרגום." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"התרגומים סומנו כמעורפלים, מכיוון שיתכן שאינם מדויקים. כדאי לסקור אותם ולתקנם " +"במידת הצורך." + +msgid "No entries could be filled from the translation memory." +msgstr "לא ניתן היה להשלים שום רשומות מזיכרון התרגום." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"זיכרון התרגום לא מכיל מחרוזות הדומות לתוכן של קובץ זה. הוא יעיל לתרגומים חצי " +"אוטומטיים רק לאחר ש-Poedit ילמד מספיק מקבצים שתתרגם באופן ידני." + +msgid "Translating" +msgstr "מתרגם" + +msgid "Filling missing translations from TM..." +msgstr "משלים תרגומים חסרים מזיכרון התרגום..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u מחרוזות תורגמו" +msgstr[1] "%u מחרוזות תורגמו" +msgstr[2] "%u מחרוזות תורגמו" +msgstr[3] "%u מחרוזות תורגמו" + +msgid "Copy from source text" +msgstr "העתק מטקסט המקור" + +msgid "Copy from Source Text" +msgstr "העתק מטקסט המקור" + +msgid "Clear translation" +msgstr "מחק את התרגום" + +msgid "Clear Translation" +msgstr "מחק את התרגום" + +msgid "Edit comment" +msgstr "ערוך הערה" + +msgid "Edit Comment" +msgstr "ערוך הערה" + +msgid "References:" +msgstr "הפניות:" + +msgid "Everything" +msgstr "הכל" + +#, c-format +msgid "Form %i" +msgstr "צורה %i" + +msgid "Singular" +msgstr "יחיד" + +msgid "Zero" +msgstr "אפס" + +msgid "One" +msgstr "אחד" + +msgid "Two" +msgstr "שתיים" + +msgid "Plural" +msgstr "רבים" + +msgid "Other" +msgstr "אחר" + +msgid "&Bookmarks" +msgstr "&סימניות" + +#, c-format +msgid "Set bookmark %i" +msgstr "הגדר סימניה %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "עבור לסימניה %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "הגדר סימניה %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "עבור לסימניה %i" + +msgid "Hide Sidebar" +msgstr "הסתר את סרגל הצד" + +msgid "Show Sidebar" +msgstr "הצג את סרגל הצד" + +msgid "Hide Status Bar" +msgstr "הסתר את שורת המצב" + +msgid "Show Status Bar" +msgstr "הצג את שורת המצב" + +msgid "Source text" +msgstr "טקסט המקור" + +msgid "Translation" +msgstr "תרגום" + +msgid "ID" +msgstr "מזהה" + +#, c-format +msgid "Source text — %s" +msgstr "טקסט המקור — %s" + +msgid "unknown language" +msgstr "שפה לא ידועה" + +#, c-format +msgid "Translation — %s" +msgstr "תרגום — %s" + +msgid "Error:" +msgstr "שגיאה:" + +msgid "Source file" +msgstr "קובץ מקור" + +msgid "Source file occurrence:" +msgstr "מופע בקובץ המקור:" + +msgid "Open in Editor" +msgstr "פתח בעורך" + +msgid "Open in editor" +msgstr "פתח בעורך" + +msgid "No references for the selected item." +msgstr "אין הפניות עבור הפריט הנבחר." + +#, c-format +msgid "Error opening file %s!" +msgstr "שגיאה בפתיחת הקובץ %s!" + +msgid "Find" +msgstr "חפש" + +msgid "Replace" +msgstr "החלף" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "אפשרויות" + +msgid "Ignore case" +msgstr "התעלם מרישיות" + +msgid "Wrap around" +msgstr "חזור להתחלה בסיום" + +msgid "Whole words only" +msgstr "מילים שלמות בלבד" + +msgid "Find in source texts" +msgstr "חפש בטקסט המקור" + +msgid "Find in translations" +msgstr "חפש בתרגומים" + +msgid "Find in comments" +msgstr "חפש בהערות" + +msgid "Close" +msgstr "סגור" + +msgid "Replace All" +msgstr "החלף הכל" + +msgid "Replace all" +msgstr "החלף הכל" + +msgid "< &Previous" +msgstr "< ה&קודם" + +msgid "&Next >" +msgstr "ה&בא >" + +msgid "String to find" +msgstr "מחרוזת לחיפוש" + +msgid "Replacement string" +msgstr "מחרוזת להחלפה" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "לא ניתן להריץ את היישום: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "השם או הקוד של השפה (לדוגמה: he_IL או he)" + +msgid "Translation Language" +msgstr "שפת התרגום" + +msgid "Language of the translation:" +msgstr "שפת התרגום:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - מנהל הקטלוגים" + +msgid "Catalog" +msgstr "קטלוג" + +msgid "Total" +msgstr "סה\"כ" + +msgid "Untrans" +msgstr "לא מתורגמים" + +msgid "Fuzzy" +msgstr "מעורפל" + +msgid "Bad Tokens" +msgstr "שגיאות" + +msgid "Last modified" +msgstr "שונה לאחרונה" + +msgid "Select directory" +msgstr "בחר תיקייה" + +msgid "Directories:" +msgstr "תיקיות:" + +msgid "" +msgstr "<ללא שם>" + +msgid "Do you want to delete the project?" +msgstr "האם ברצונך למחוק את הפרוייקט?" + +msgid "Confirmation" +msgstr "אימות" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "האם אתה בטוח שברצונך לבצע עדכון קבוצתי של כל הקטלוגים בפרוייקט?" + +msgid "Information about the translator" +msgstr "מידע על המתרגם" + +msgid "Name:" +msgstr "שם:" + +msgid "Your Name" +msgstr "השם שלך" + +msgid "Email:" +msgstr "אימייל:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"יעשה שימוש בשימך ובכתובת הדוא\"ל שלך רק על מנת להגדיר את הכותרת של המתרגם " +"האחרון בקבצי GNU gettext." + +msgid "Editing" +msgstr "עריכה" + +msgid "Automatically compile MO file when saving" +msgstr "בצע הידור קובץ MO באופן אוטומטי בעת שמירה" + +msgid "Show summary after catalog update" +msgstr "הצג תקציר לאחר עדכון קטלוג" + +msgid "Check spelling" +msgstr "בדוק איות" + +msgid "Always change focus to text input field" +msgstr "שנה תמיד את המיקוד לשדה הקלט של הטקסט" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"אל תאפשר לרשימת המחרוזות לקבל מיקוד. אם מופעל, עליך להשתמש במקשי החיצים " +"בצירוף מקש ה-Ctrl לניווט, אבל גם ניתן לכתוב טקסט מיידית, ללא צורך בלחיצה על " +"Tab לשינוי המיקוד." + +msgid "Appearance" +msgstr "תצוגה" + +msgid "Use custom list font:" +msgstr "השתמש בגופן מותאם אישית לרשימה:" + +msgid "Use custom text fields font:" +msgstr "השתמש בגופן מותאם אישית לשדות טקסט:" + +msgid "Change UI language" +msgstr "החלף את שפת הממשק" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(דורש Windows 8 ומעלה)" + +msgid "General" +msgstr "כללי" + +msgid "Use translation memory" +msgstr "השתמש בזיכרון תרגום" + +msgid "Learn From Files..." +msgstr "למד מקבצים..." + +msgid "Learn from files..." +msgstr "למד מקבצים..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "איפוס" + +msgid "Consult TM when updating from sources" +msgstr "התייעץ עם זיכרון התרגום בעת עדכון ממקורות" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"אם מאופשר, Poedit תנסה להשלים רשומות חדשות תוך שימוש בתרגומים קודמים " +"המאוחסנים בזיכרון התרגום (TM). אם ה-TM כמעט ריק, ההשלמה לא תהיה יעילה. ככל " +"שתערוך יותר תרגומים וככל שה-TM יגדל, כך ההשלמה תהיה טובה יותר." + +msgid "Stored translations:" +msgstr "תרגומים מאוחסנים:" + +msgid "Database size on disk:" +msgstr "גודל מסד הנתונים בכונן:" + +msgid "Select translation files to import" +msgstr "בחר קבצי תרגום לייבוא" + +msgid "Translation Memory" +msgstr "זיכרון תרגום" + +msgid "Importing translations..." +msgstr "מייבא תרגומים..." + +msgid "Finalizing..." +msgstr "מתבצעת סגירה..." + +msgid "Reset translation memory" +msgstr "אפס את זיכרון התרגום" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "האם אתה בטוח שברצונך לאפס את זיכרון התרגום?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"איפוס זיכרון התרגום ימחק את כל התרגומים המאוחסנים בו. לא ניתן לבטל פעולה זו." + +msgid "Cancel" +msgstr "ביטול" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"מחלצי קוד המקור משמשים לאיתור מחרוזות הניתנים לתרגום בקבצי קוד המקור ולחלצם " +"כדי שיוכלו להיות מתורגמים." + +msgid "New" +msgstr "חדש" + +msgid "Edit" +msgstr "עריכה" + +msgid "Delete extractor" +msgstr "מחק מחלץ" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "האם אתה בטוח שברצונך למחוק את המחלץ \"%s\"?" + +msgid "Extractors" +msgstr "מחלצים" + +msgid "Accounts" +msgstr "חשבונות" + +msgid "Automatically check for updates" +msgstr "בדוק באופן אוטומטי אחר עדכונים" + +msgid "Include beta versions" +msgstr "הכלל גרסאות בטא" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"גרסאות בטא מכילות את התכונות והעדכונים החדשים ביותר, אך עשויות להיות פחות " +"יציבות." + +msgid "Updates" +msgstr "עדכונים" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"הגדרות אלו משפיעים על הפורמט הפנימי של קבצי PO. התאם אותן אם יש לך דרישות " +"מסוימות, למשל בגלל שליטה על גרסה." + +msgid "Line endings:" +msgstr "סיומות שורה:" + +msgid "Unix (recommended)" +msgstr "Unix (מומלץ)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "גלוש שורה ב:" + +msgid "Preserve formatting of existing files" +msgstr "שמור על פורמט של קבצים קיימים" + +msgid "Advanced" +msgstr "מתקדם" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "העדפות %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"גרור ושחרר תיקיות לכאן\n" +"\n" +"או השתמש בכפתור הפלוס (+)" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"גרור ושחרר תיקיות לכאן\n" +"\n" +"או השתמש בכפתור הפלוס (+)" + +msgid "Add Folders..." +msgstr "הוסף תיקיות..." + +msgid "Add folders..." +msgstr "הוסף תיקיות..." + +msgid "Add Files..." +msgstr "הוסף קבצים..." + +msgid "Add files..." +msgstr "הוסף קבצים..." + +msgid "Add Wildcard..." +msgstr "הוסף Wildcard..." + +msgid "Add wildcard..." +msgstr "הוסף Wildcard..." + +msgid "Paths" +msgstr "נתיבים" + +msgid "Excluded paths" +msgstr "נתיבים לא כלולים" + +msgid "Additional keywords" +msgstr "מילות מפתח נוספות" + +msgid "Name of the project the translation is for" +msgstr "שם הפרוייקט עבורו מיועד התרגום" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "לדוגמה ‪nplurals=2; plural=(n > 1);‬" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (מומלץ)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "אנא שמור את הקובץ תחילה. לא ניתן לערוך סעיף זה עד אז." + +msgid "Comment:" +msgstr "הערה:" + +msgid "OK" +msgstr "אישור" + +msgid "C&lear" +msgstr "&נקה" + +msgid "Clear the comment" +msgstr "מחק את ההערה" + +msgid "Create new translations project" +msgstr "צור פרוייקט תרגומים חדש" + +msgid "Edit the project" +msgstr "ערוך את הפרוייקט" + +msgid "Delete the project" +msgstr "מחק את הפרוייקט" + +msgid "Update all" +msgstr "עדכן הכל" + +msgid "Update all catalogs in the project" +msgstr "עדכן את כל הקטלוגים בפרוייקט" + +msgid "Edit project" +msgstr "ערוך פרוייקט" + +msgid "Project name:" +msgstr "שם הפרוייקט:" + +msgid "Browse" +msgstr "עיון" + +msgid "Add directory to the list" +msgstr "הוסף תיקיה לרשימה" + +msgid "&New..." +msgstr "&חדש..." + +msgid "New from &POT/PO file..." +msgstr "חדש מקובץ &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "חדש מקובץ &POT/PO..." + +msgid "&Open..." +msgstr "&פתח..." + +msgid "Open Recent" +msgstr "פתח אחרונים" + +msgid "Open from Crowdin..." +msgstr "פתח מ-Crowdin..." + +msgid "Open From Crowdin..." +msgstr "פתח מ-Crowdin..." + +msgid "&Close" +msgstr "&סגירה" + +msgid "&Save" +msgstr "ש&מירה" + +msgid "Save &as..." +msgstr "שמירה &בשם..." + +msgid "Save &As..." +msgstr "שמירה &בשם..." + +msgid "Compile to MO..." +msgstr "בצע הידור ל-MO..." + +msgid "E&xport as HTML..." +msgstr "ייצא כ-&HTML..." + +msgid "Check for updates..." +msgstr "בדוק אחר עדכונים..." + +msgid "&Preferences..." +msgstr "&העדפות..." + +msgid "Catalogs &manager" +msgstr "מ&נהל הקטלוגים" + +msgid "Catalogs &Manager" +msgstr "מ&נהל הקטלוגים" + +msgid "E&xit" +msgstr "י&ציאה" + +msgid "Quit" +msgstr "יציאה" + +msgid "Copy from singular" +msgstr "העתק מ'לשון יחיד'" + +msgid "Copy From Singular" +msgstr "העתק מ'לשון יחיד'" + +msgid "Translation is &fuzzy" +msgstr "התרגום מעו&רפל" + +msgid "Translation Is &Fuzzy" +msgstr "התרגום מעו&רפל" + +msgid "Edit &comment" +msgstr "ערוך &הערה" + +msgid "Edit &Comment" +msgstr "ערוך &הערה" + +msgid "Suggestions" +msgstr "הצעות" + +msgid "&Show references" +msgstr "הצג ה&פניות" + +msgid "&Show References" +msgstr "הצג ה&פניות" + +msgid "&Find..." +msgstr "&חיפוש..." + +msgid "Replace..." +msgstr "החלפה..." + +msgid "Find next" +msgstr "חפש את הבא" + +msgid "Find previous" +msgstr "חפש את הקודם" + +msgid "Find and Replace..." +msgstr "חפש והחלף..." + +msgid "Find Next" +msgstr "חפש את הבא" + +msgid "Find Previous" +msgstr "חפש את הקודם" + +msgid "&Preferences" +msgstr "ה&עדפות" + +msgid "Display entry &IDs" +msgstr "הצג מ&זהים של רשומות" + +msgid "Display Entry &IDs" +msgstr "הצג מ&זהים של רשומות" + +msgid "Sort by &file order" +msgstr "מיין לפי ה&סדר שבקובץ" + +msgid "Sort by &File Order" +msgstr "מיין לפי ה&סדר שבקובץ" + +msgid "Sort by &source" +msgstr "מיין לפי המ&קור" + +msgid "Sort by &Source" +msgstr "מיין לפי המ&קור" + +msgid "Sort by &translation" +msgstr "מיין לפי ה&תרגום" + +msgid "Sort by &Translation" +msgstr "מיין לפי ה&תרגום" + +msgid "&Group by context" +msgstr "קב&×¥ לפי תוכן" + +msgid "&Group By Context" +msgstr "קב&×¥ לפי תוכן" + +msgid "Entries with errors first" +msgstr "רשומות עם שגיאות תחילה" + +msgid "Entries with Errors First" +msgstr "רשומות עם שגיאות תחילה" + +msgid "&Untranslated entries first" +msgstr "רשומות ש&אינן מתורגמות תחילה" + +msgid "&Untranslated Entries First" +msgstr "רשומות ש&אינן מתורגמות תחילה" + +msgid "Show sidebar" +msgstr "הצג את סרגל הצד" + +msgid "Show status bar" +msgstr "הצג את שורת המצב" + +msgid "C&atalog" +msgstr "×§&טלוג" + +msgid "&Update from sources" +msgstr "עדכן מ&מקורות" + +msgid "&Update from Sources" +msgstr "עדכן מ&מקורות" + +msgid "Update from &POT file..." +msgstr "עדכן מקובץ &POT..." + +msgid "Update from &POT File..." +msgstr "עדכן מקובץ &POT..." + +msgid "Sync with Crowdin" +msgstr "סנכרן עם Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "השלם תרגומים חסרים מ-&TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "השלם תרגומים חסרים מ-&TM..." + +msgid "&Purge deleted translations" +msgstr "פנה תרגומים ש&נמחקו" + +msgid "&Purge Deleted Translations" +msgstr "פנה תרגומים ש&נמחקו" + +msgid "&Validate translations" +msgstr "&אמת את התרגומים" + +msgid "&Validate Translations" +msgstr "&אמת את התרגומים" + +msgid "&Properties..." +msgstr "מא&פיינים..." + +msgid "&Done and next" +msgstr "ב&צע והמשך" + +msgid "&Done and Next" +msgstr "ב&צע והמשך" + +msgid "&Previous translation" +msgstr "התרגום ה&קודם" + +msgid "&Previous Translation" +msgstr "התרגום ה&קודם" + +msgid "&Next translation" +msgstr "התרגום ה&בא" + +msgid "&Next Translation" +msgstr "התרגום ה&בא" + +msgid "P&revious unfinished" +msgstr "הקו&דם שלא הושלם" + +msgid "P&revious Unfinished" +msgstr "הקו&דם שלא הושלם" + +msgid "Ne&xt unfinished" +msgstr "&הבא שלא הושלם" + +msgid "Ne&xt Unfinished" +msgstr "&הבא שלא הושלם" + +msgid "Previous plural form" +msgstr "לשון רבים הקודם" + +msgid "Previous Plural Form" +msgstr "לשון רבים הקודם" + +msgid "Next plural form" +msgstr "לשון רבים הבא" + +msgid "Next Plural Form" +msgstr "לשון רבים הבא" + +msgid "&Online help" +msgstr "עזרה מ&קוונת" + +msgid "&Online Help" +msgstr "עזרה מ&קוונת" + +msgid "&GNU gettext manual" +msgstr "הדרכה ל-&GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "הדרכה ל-&GNU gettext" + +msgid "&About Poedit" +msgstr "&אודות Poedit" + +msgid "&About" +msgstr "&אודות" + +msgid "Extractor setup" +msgstr "הגדרת מחלץ" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "רשימה של הרחבות המופרדות בנקודה פסיק (לדוגמה: ‎*.cpp;*.h):" + +msgid "Invocation:" +msgstr "קריאה:" + +msgid "Command to extract translations:" +msgstr "פקודה לחילוץ תרגומים:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"זו הפקודה המשמשת לפתיחת המחלץ.\n" +"%o יוחלף בשם של קובץ הפלט, %K ברשימת מילות המפתח, %F ברשימת קבצי הקלט,\n" +"%C בדגל הקידוד (ראה למטה)." + +msgid "An item in keywords list:" +msgstr "פריט ברשימת מילות המפתח:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"משתנה זה יתווסף לשורת הפקודה פעם אחת\n" +"עבור כל מילת מפתח. %k יוחלף במילת המפתח." + +msgid "An item in input files list:" +msgstr "פריט ברשימת קובצי הקלט:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"משתנה זה יתווסף לשורת הפקודה פעם אחת\n" +"עבור כל קובץ קלט. %f יוחלף בשם הקובץ." + +msgid "Source code charset:" +msgstr "קידוד קוד המקור:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"משתנה זה יתווסף לשורת הפקודה\n" +"רק אם הקידוד של קוד המקור סופק. %c יוחלף בערך הקידוד." + +msgid "Catalog properties" +msgstr "מאפייני הקטלוג" + +msgid "Project name and version:" +msgstr "שם הפרוייקט וגרסה:" + +msgid "Plural Forms:" +msgstr "לשון רבים:" + +msgid "Use default rules for this language" +msgstr "השתמש בכללי ברירת המחדל לשפה זו" + +msgid "Use custom expression" +msgstr "השתמש בביטוי מותאם אישית" + +msgid "Learn about plural forms" +msgstr "למד על לשון רבים" + +msgid "Charset:" +msgstr "קידוד:" + +msgid "Team:" +msgstr "קבוצה:" + +msgid "Team's email address:" +msgstr "כתובת הדוא\"ל של הקבוצה:" + +msgid "Translation properties" +msgstr "מאפייני התרגום" + +msgid "Sources paths" +msgstr "נתיבי המקורות" + +msgid "Extract text from source files in the following directories:" +msgstr "חלץ טקסט מקבצי המקור בתיקיות הבאות:" + +msgid "Base path:" +msgstr "נתיב הבסיס:" + +msgid "Sources keywords" +msgstr "מילות מפתח המקורות" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"השתמש במילות מפתח אלה (שמות פונקציות) על מנת לזהות מחרוזות הניתנות לתרגום\n" +"בקבצי המקור:" + +msgid "Learn about gettext keywords" +msgstr "למד על מילות מפתח של gettext" + +msgid "Update summary" +msgstr "עדכן תקציר" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"מחרוזות אלו נמצאו במקורות אבל לא בקטלוג.\n" +"Poedit תוסיף אותן לקטלוג כעת." + +msgid "New strings" +msgstr "מחרוזות חדשות" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"מחרוזות אלו אינן נמצאות עוד במקורות.\n" +"Poedit תסיר אותן כעת מהקטלוג." + +msgid "Obsolete strings" +msgstr "מחרוזות מיושנות" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 חדשות, 0 מיושנות)" + +msgid "Open" +msgstr "פתיחה" + +msgid "Save catalog" +msgstr "שמירת הקטלוג" + +msgid "Validate" +msgstr "אימות" + +msgid "Check for errors in the translation" +msgstr "בדיקת שגיאות בתרגום" + +msgid "Update" +msgstr "עדכון" + +msgid "Update catalog - synchronize it with sources" +msgstr "עדכן קטלוג - סנכרן אותו עם המקורות" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "מסומן אם התרגום של המחרוזת שנבחרה מעורפל" + +msgid "Show or hide the sidebar" +msgstr "הצג או הסתר את סרגל הצד" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "טקסט מקור הקודם:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "טקסט המקור הקודם (לפני ששונה במהלך עדכון) שהתרגום המעורפל תואם אליו." + +msgid "Notes for translators:" +msgstr "הערות למתרגמים:" + +msgid "Add comment" +msgstr "הוסף הערה" + +msgid "Add Comment" +msgstr "הוסף הערה" + +msgid "Translation suggestions:" +msgstr "הצעות תרגום:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "לא נמצאו התאמות" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "לא נמצאו התאמות" + +msgid "This string was found in Poedit’s translation memory." +msgstr "מחרוזת זו אותרה בזיכרון התרגום של Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(חדש: %i, מיושן: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "מייבא תרגומים: %d" + +msgid "Poedit Update" +msgstr "עדכון Poedit" + +msgid "Preparing migration..." +msgstr "מכין המרה..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "סטטוס סיום תהליך ההמרה: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit צריכה להמיר את זיכרון התרגום שלך לפורמט חדש." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"זה חייב להתבצע לפני ש-Poedit יכולה להפתח. זה עשוי לקחת כמה דקות אם יש לך " +"הרבה תרגומים מאוחסנים, אבל אמור להיות בדרך כלל הרבה יותר מהר." + +msgid "Proceed" +msgstr "המשך" + +msgid "Translation memory migration failed." +msgstr "המרת זיכרון התרגום נכשלה." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"לא היה ניתן להמיר את נתוני זיכרון התרגום. השגיאה היא:\n" +"\n" +"%s\n" +"אנא שלח דוא\"ל ל-help@poedit.net ואנחנו נטפל בזה." + +msgid "Cannot create temporary directory." +msgstr "לא ניתן ליצור תיקייה זמנית." + +msgid "Welcome to Poedit" +msgstr "ברוך הבא ל-Poedit" + +msgid "Edit a translation" +msgstr "ערוך תרגום" + +msgid "Open an existing PO file and edit the translation." +msgstr "פתח קובץ PO קיים וערוך את התרגום." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "השתמש בקובץ PO קיים או תבנית POT וצור ממנו תרגום חדש." + +msgid "Collaborate on a translation with Crowdin" +msgstr "שתף פעולה עם Crowdin על תרגום" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "הורד קובץ מפרויקט Crowdin, תרגם וסנכרן את השינויים בחזרה." + +msgid "What is Crowdin?" +msgstr "מה זה Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "אין תרגומים. זה מצב חריג." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"רשומות הניתנות לתרגום אינן מתווספות באופן ידני למערכת ה-Gettext, אבל מחולצות " +"באופן אוטומטי מקוד המקור.\n" +"בצורה הזו, הן נשארות מעודכנות ומדויקות.\n" +"מתרגמים משתמשים בדרך כלל בקבצי תבנית PO (ובקיצור POTs) המוכנים עבור ×¢\"י " +"המפתח." + +msgid "(Learn more about GNU gettext)" +msgstr "(מידע נוסף אודות GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "הדרך הפשוטה ביותר להשלמת קטלוג זה היא לעדכן אותו מ-POT:" + +msgid "Update from POT" +msgstr "עדכן מ-POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "השתמש במחרוזות הניתנות לתרגום מתבנית POT קיימת." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "ניתן גם לחלץ את המחרוזות הניתנות לתרגום ישירות מקוד המקור:" + +msgid "Extract from sources" +msgstr "חלץ ממקורות" + +msgid "Configure source code extraction in Properties." +msgstr "הגדר את חילוץ קוד המקור במאפיינים." + +msgid "Sync" +msgstr "סינכרון" + +msgid "Synchronize the translation with Crowdin" +msgstr "סנכרן את התרגום עם Crowdin" diff --git a/locales/hr.mo b/locales/hr.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d78b88928416786ebdd2d7e1d014c2ccb6400f4 GIT binary patch literal 33896 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 TjpmZVfAmB{ENOdqx*h!&dCa9q literal 0 HcmV?d00001 diff --git a/locales/hr.po b/locales/hr.po new file mode 100644 index 0000000..5541089 --- /dev/null +++ b/locales/hr.po @@ -0,0 +1,1932 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:03-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Croatian\n" +"Language: hr_HR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: hr\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Sakrij ovu poruku" + +msgid "Don't Show Again" +msgstr "Ovo viÅ¡e ne pokazuj" + +msgid "Don't show again" +msgstr "Nemoj ponovo prikazati" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "%i redaka datoteke '%s' nije pravilno učitano." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Redak %d datoteke '%s' je neispravan (neprihvatljivi %s podaci)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Neispravno zaglavlje: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Neispravna katalog datoteka: Oblik jednine \"msgstr\" upotrijebljen je bez " +"\"msgid_plural\"" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Neispravna katalog datoteka: Oblik množine \"msgstr\" upotrijebljen je bez " +"\"msgid_plural\"" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Tijekom učitavanja kataloga doÅ¡lo je do greÅ¡ki. Neki podaci mogli bi " +"nedostajati ili biti oÅ¡tećeni." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nije moguće učitati datoteku %s. Vjerojatno je oÅ¡tećena." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Datoteka '%s' je samo za čitanje i nije ju moguće spremiti.\n" +"Spremite je pod drugim nazivom." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nije moguće spremiti datoteku %s" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Prilikom oblikovanja datoteke doÅ¡lo je do problema ali je uredno spremljena." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog nije mogao biti spremljen na '%s' kodnoj stranici kako je određeno u " +"postavkama.\n" +"\n" +"Spremljen je kao UTF-8 i sukladno tome promijenjene su i postavke." + +msgid "Error saving catalog" +msgstr "GreÅ¡ka pri spremanju kataloga" + +msgid "PO Translation Files" +msgstr "PO prevoditeljske datoteke" + +msgid "POT Translation Templates" +msgstr "POT predloÅ¡ci prijevoda" + +msgid "All Translation Files" +msgstr "Svi prevedene datoteke" + +msgid "Merging differences..." +msgstr "Spajanje razlika" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nije valjana POT datoteka." + +msgid "(Use default language)" +msgstr "Koristi zadani jezik" + +msgid "Select your preferred language" +msgstr "odaberite željeni jezik" + +msgid "Language selection" +msgstr "Odabir jezika" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Ponovo pokrenite Poedit kako bi promjena imala učinak" + +msgid "Downloading translations is disabled in this project." +msgstr "Preuzimanje prijevoda nije omogućeno u ovom projektu." + +msgid "Not authorized, please sign in again." +msgstr "Nije autorizirano, prijavite se ponovo." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin je online platforma za upravljanje procesom lokaliziranja i alat za " +"timsko prevođenje. Poedit može bez problema sinkronizirati PO datoteke " +"procesirane u Crowdin." + +msgid "Sign In" +msgstr "Prijava" + +msgid "Sign in" +msgstr "Prijava" + +msgid "Sign Out" +msgstr "Odjava" + +msgid "Sign out" +msgstr "Odjava" + +msgid "Waiting for authentication…" +msgstr "Čekanje na autenitifikaciju…" + +msgid "Updating user information…" +msgstr "Ažuriranje informacija o korisniku…" + +msgid "Signed in as:" +msgstr "Ulogiran Kao:" + +msgid "Learn More About Crowdin" +msgstr "Saznajte ViÅ¡e O Crowdin-u" + +msgid "Learn more about Crowdin" +msgstr "Saznajte ViÅ¡e O Crowdin-u" + +msgid "Sign in to Crowdin" +msgstr "Ulogirajte se u Crowdin" + +msgid "Open Crowdin translation" +msgstr "" + +msgid "Project:" +msgstr "" + +msgid "Language:" +msgstr "Jezik:" + +msgid "File:" +msgstr "" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "" + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "&Kopiraj" + +msgid "Learn more" +msgstr "Nauči viÅ¡e" + +msgid "Learn More" +msgstr "Saznajte viÅ¡e" + +#, c-format +msgid "Failed command: %s" +msgstr "Neuspjela naredba: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Spajanje gettext kataloga nije uspjelo." + +msgid "Scanning files..." +msgstr "Pregledavanje datoteka..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Raščlanjivanje %s datoteka..." + +msgid "Failed to load extracted catalog." +msgstr "Neuspjelo učitavanje izdvojenog kataloga" + +msgid "&Help" +msgstr "&Pomoć" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO datoteke ne mogu se izravno uređivati u Poeditu" + +msgid "Error opening file" +msgstr "GreÅ¡ka pri otvaranju datoteke" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Otvorite i uređujte pripadajuću PO datoteku. MO datoteka će se automatski " +"ažurirati pri spremanju." + +msgid "don't delete temporary files (for debugging)" +msgstr "Nemoj brisati privremene datoteke za ispravljanje greÅ¡aka." + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Dogodila se neočekivana iznimka %s" + +msgid "Unhandled exception occurred." +msgstr "Dogodila se neočekivana iznimka" + +msgid "Open catalog" +msgstr "Otvori katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Datoteka '%s' ne postoji." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "O %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Inačica %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit je uređivač prijevoda jednostavan za upotrebu" + +msgid "Catalogs Manager" +msgstr "Upravitelj kataloga" + +msgid "Check for Updates..." +msgstr "Provjeri ima li ažuriranja..." + +msgid "&Edit" +msgstr "&Uredi" + +msgid "Undo" +msgstr "PoniÅ¡ti" + +msgid "Redo" +msgstr "Vrati" + +msgid "Paste and Match Style" +msgstr "Zalijepi poÅ¡tujući stil" + +msgid "Delete" +msgstr "IzbriÅ¡i" + +msgid "Spelling and Grammar" +msgstr "Pravopis i gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Prikaži pravopis i gramatiku" + +msgid "Check Document Now" +msgstr "Provjeri dokument" + +msgid "Check Spelling While Typing" +msgstr "Provjeravaj pravopis pri tipkanju" + +msgid "Check Grammar With Spelling" +msgstr "Uz pravopis provjeravaj i gramatiku" + +msgid "Correct Spelling Automatically" +msgstr "Automatski ispravljaj pravopis" + +msgid "Substitutions" +msgstr "Zamjene" + +msgid "Show Substitutions" +msgstr "Prikaži zamjene" + +msgid "Smart Copy/Paste" +msgstr "Pametno kopiranje/lijepljenje" + +msgid "Smart Quotes" +msgstr "Pametni navodnici" + +msgid "Smart Dashes" +msgstr "Pametne crtice" + +msgid "Smart Links" +msgstr "Pametne poveznice" + +msgid "Text Replacement" +msgstr "Zamjenski tekst" + +msgid "Transformations" +msgstr "Preinake" + +msgid "Make Upper Case" +msgstr "Preinači u velika slova" + +msgid "Make Lower Case" +msgstr "Preinači u mala slova" + +msgid "Capitalize" +msgstr "Postavi veliko početno slovo" + +msgid "Speech" +msgstr "Govor" + +msgid "Start Speaking" +msgstr "Započni govoriti" + +msgid "Stop Speaking" +msgstr "prestani govoriti" + +msgid "&View" +msgstr "&Prikaz" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "Prozor" + +msgid "Minimize" +msgstr "Minimiziraj" + +msgid "Zoom" +msgstr "Uvećaj" + +msgid "Bring All to Front" +msgstr "Dovedi sve na početak" + +msgid "PO Translation" +msgstr "PO prijevod" + +msgid "The file cannot be opened." +msgstr "Datoteka se ne može otvoriti" + +msgid "Invalid file" +msgstr "Neispravna datoteka" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Datoteka je oÅ¡tećena ili u obliku koji Poedit ne prepoznaje" + +msgid "&Undo" +msgstr "&PoniÅ¡ti" + +msgid "&Redo" +msgstr "&Vrati" + +msgid "Cu&t" +msgstr "Izr&eži" + +msgid "Cut" +msgstr "Izreži" + +msgid "Copy" +msgstr "Kopiraj" + +msgid "&Paste" +msgstr "&Zalijepi" + +msgid "Paste" +msgstr "Zalijepi" + +msgid "&Delete" +msgstr "&IzbriÅ¡i" + +msgid "Select &All" +msgstr "Odaberi &sve" + +msgid "Select All" +msgstr "odaberi sve" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "" + +msgid "You can't drop more than one file on Poedit window." +msgstr "U prozor programa Poedit možete ispustiti samo jednu datoteku." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Datoteka '%s' nije katalog poruka." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Datoteka" + +msgid "&Go" +msgstr "&Idi" + +msgid "Source text:" +msgstr "Izvorni tekst:" + +msgid "Singular:" +msgstr "Jednina:" + +msgid "Plural:" +msgstr "Množina:" + +msgid "Translation:" +msgstr "Prijevod" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "Izradi novi prijevod" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog je izmijenjen. Želite li spremiti izmjene?" + +msgid "Save changes" +msgstr "Spremi promjene" + +msgid "Your changes will be lost if you don't save them." +msgstr "Ako ne spremite promjene, bit će izgubljene." + +msgid "Save" +msgstr "Spremi" + +msgid "Don't save" +msgstr "Nemoj spremiti" + +msgid "Don't Save" +msgstr "Nemoj spremiti" + +msgid "Save as..." +msgstr "Spremi kao..." + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "Izvezi kao ..." + +msgid "HTML Files" +msgstr "HTML datoteke" + +msgid "Open catalog template" +msgstr "otvori predložak kataloga" + +msgid "Updating catalog" +msgstr "Ažuriranje kataloga..." + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Unosiu katalogu vjerojatno su netočni." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Ažuriranje kataloga nije uspjelo. Za detalje kliknite na 'Detalji'" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "S prijevodom je pronađen %d problem." +msgstr[1] "S prijevodom su pronađena %d problema." +msgstr[2] "S prijevodom je pronađeno %d problema." + +msgid "Validation results" +msgstr "Ishod provjere valjanosti" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Unosi s greÅ¡kama označeni su crvenom bojom. Detalji greÅ¡ke bit će prikazani " +"kad označite takav unos." + +msgid "The file was saved safely." +msgstr "Datoteka je sigurno spremljena" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Datoteka je sigurno spremljena i kompajlirana u MO oblik ali vjerojatno neće " +"ispravno raditi." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Datoteka je sigurno spremljena ali ne može biti kompajlirana u MO oblik niti " +"koriÅ¡tena." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "Nisu nađeni problemi u prijevodu" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Prijevod je spreman za upotrebu ali %d unos joÅ¡ nije preveden." +msgstr[1] "Prijevod je spreman za upotrebu ali %d unosa joÅ¡ nisu prevedena." +msgstr[2] "Prijevodje spreman za upotrebu ali %d unosa joÅ¡ nije prevedeno." + +msgid "The translation is ready for use." +msgstr "Prijevod je spreman za upotrebu." + +msgid "Context:" +msgstr "Kontekst" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "Nije određen jezik za prijevod" + +msgid "Set Language" +msgstr "" + +msgid "Set language" +msgstr "Postavi jezik" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Ovaj katalog ima unose oblika množine ali nema konfigurirano zaglavlje za " +"oblik množine." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Unosi u ovom katalogu imaju drugačiji broj oblika množine od broja određenog " +"u zaglavlju." + +msgid "Required header Plural-Forms is missing." +msgstr "Nedostaje obavezno zaglavlje oblika množine." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "GreÅ¡ka sintakse u zaglavlju oblika množine %s" + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "Ispravi zaglavlje" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Izraz oblika množine koriÅ¡tenu katalogu nije uobičajen za %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Razmotri" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "GreÅ¡ka pri otvaranju datoteke s katalogom poruka '%s'" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid " (unsaved)" +msgstr " (nespremljeno)" + +msgid " (modified)" +msgstr "Izmijenjen" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Neuspjelo ažuriranje prevoditeljske memorije %s" + +msgid "Purge deleted translations" +msgstr "Pročisti izbrisane prijevode" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Želite li ukloniti sve prijevode koji se viÅ¡e ne koriste?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ako nastavite s čišćenjem, svi prijevodi označeni kao izbrisani bit će " +"trajno uklonjeni. Morat ćete ih ponovno prevoditi ako se budu dodali u " +"budućnosti." + +msgid "Keep" +msgstr "Zadrži" + +msgid "Purge" +msgstr "Očisti" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d unos je dodan iz prevoditeljske memorije" +msgstr[1] "%d unosa su dodana iz prevoditeljske memorije" +msgstr[2] "%d unosa je dodano iz prevoditeljske memorije" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Prijevodi su označeni kao nejasni jer bi mogli biti netočni. Trebali biste " +"ih razmotriti." + +msgid "No entries could be filled from the translation memory." +msgstr "Nijedan unos nije mogao biti dodan iz prevoditeljske memorije" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Prevoditeljska memorija ne sadrži stringove slične onima u sadržaju ove " +"datoteke. Učinkovita je samo za poluautomatsko prevođenje nakon Å¡to Poedit " +"nauči dovoljno iz ručno prevedenih datoteka." + +msgid "Translating" +msgstr "Prevodim" + +msgid "Filling missing translations from TM..." +msgstr "Dodavanje nedostajućih prijevoda iz prevoditeljske memorije..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Preveden je %u string" +msgstr[1] "Prevedena su %u sringa" +msgstr[2] "Prevedeno je %u stringova" + +msgid "Copy from source text" +msgstr "Kopiraj iz izvornog teksta" + +msgid "Copy from Source Text" +msgstr "Kopiraj iz izvornog teksta" + +msgid "Clear translation" +msgstr "Očisti prijevod" + +msgid "Clear Translation" +msgstr "Očisti prijevod" + +msgid "Edit comment" +msgstr "Uredi komentar" + +msgid "Edit Comment" +msgstr "Uredi komentar" + +msgid "References:" +msgstr "Reference" + +msgid "Everything" +msgstr "Sve" + +#, c-format +msgid "Form %i" +msgstr "Oblik %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "Nula" + +msgid "One" +msgstr "Jedan" + +msgid "Two" +msgstr "Dva" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "Drugo" + +msgid "&Bookmarks" +msgstr "&Oznake" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "Izvorni tekst" + +msgid "Translation" +msgstr "Prijevod" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "Nepoznati jezik" + +#, c-format +msgid "Translation — %s" +msgstr "Prijevod %s" + +msgid "Error:" +msgstr "GreÅ¡ka" + +msgid "Source file" +msgstr "Izvorna datoteka" + +msgid "Source file occurrence:" +msgstr "Podudaranje s izvornom datotekom" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "GreÅ¡ka pri otvaranju datoteke %s!" + +msgid "Find" +msgstr "Pronađi" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "Samo cijele riječi" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "Pronađi u prijevodima" + +msgid "Find in comments" +msgstr "Pronađi u komentarima" + +msgid "Close" +msgstr "&Zatvori" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "< &Prethodno" + +msgid "&Next >" +msgstr "&Sljedeće" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nije moguće pokrenuti program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kodna stranica ili ime jezika (npr. hr-hr)" + +msgid "Translation Language" +msgstr "Jezik za prevođenje" + +msgid "Language of the translation:" +msgstr "Jezik prijevoda" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit upravitelj kataloga" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Ukupno" + +msgid "Untrans" +msgstr "Neprevedeno" + +msgid "Fuzzy" +msgstr "Nejasno" + +msgid "Bad Tokens" +msgstr "LoÅ¡e oznake" + +msgid "Last modified" +msgstr "Posljednja izmjena" + +msgid "Select directory" +msgstr "odaberi mapu" + +msgid "Directories:" +msgstr "Mape:" + +msgid "" +msgstr "Neimenovano" + +msgid "Do you want to delete the project?" +msgstr "Želite li izbrisati projekt?" + +msgid "Confirmation" +msgstr "Potvrda" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Želite li zaista ažurirati\n" +"sve kataloge u projektu?" + +msgid "Information about the translator" +msgstr "Informacije o Prevoditelju" + +msgid "Name:" +msgstr "Ime:" + +msgid "Your Name" +msgstr "VaÅ¡e ime" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "vas_email@primjer.hr" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"VaÅ¡e ime i email se koriste samo za postavljanje posljednjeg prevoditelja u " +"naslovu GNU gettext datoteke." + +msgid "Editing" +msgstr "Uređivanje" + +msgid "Automatically compile MO file when saving" +msgstr "Automatski sastaviti MO datoteku pri spremanju" + +msgid "Show summary after catalog update" +msgstr "Prikaži sažetak nakon ažuriranja kataloga" + +msgid "Check spelling" +msgstr "Provjeri pravopis" + +msgid "Always change focus to text input field" +msgstr "uvijek prebaci fokus na polje za uređivanje" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nikad ne dopusti popisu stringova da preuzme fokus. Ako je omogućeno morat " +"ćete koristiti CTRL + strelice za kretanje tipkovnicom ali ćete moći odmah " +"upisivati tekst bez pritiskanja na Tab da prebacite fokus u polje za " +"uređivanje" + +msgid "Appearance" +msgstr "Izgled" + +msgid "Use custom list font:" +msgstr "Koristi prilagođeni font za popis:" + +msgid "Use custom text fields font:" +msgstr "Koristi prilagođeni font za tekstualna polja:" + +msgid "Change UI language" +msgstr "Promijeni jezik sučelja" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "Zahtijeva Windows 8 ili noviji" + +msgid "General" +msgstr "Općenito" + +msgid "Use translation memory" +msgstr "Koristi prevoditeljsku memoriju" + +msgid "Learn From Files..." +msgstr "Uči iz datoteka..." + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "Konzultiraj prevoditeljsku memoriju pri ažuriranju iz izvora" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Ako je omogućena Poedit će pokuÅ¡ati ispuniti unose koristeći\n" +"prijevode pohranjene u prevoditeljskoj memoriji. Ako je prevoditeljska " +"memorija\n" +"prazna neće baÅ¡ biti učinkovita. Å to viÅ¡e prijevoda\n" +"uređujete memorija se popunjava i postaje sve bolja." + +msgid "Stored translations:" +msgstr "Pohranjeni prijevodi" + +msgid "Database size on disk:" +msgstr "Veličina baze podataka na disku" + +msgid "Select translation files to import" +msgstr "Odaberi datoteke prijevoda za uvoz" + +msgid "Translation Memory" +msgstr "Prevoditeljska memorija" + +msgid "Importing translations..." +msgstr "Uvoz prijevoda..." + +msgid "Finalizing..." +msgstr "ZavrÅ¡avam..." + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Odustani" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "PM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Izdvajači izvornog koda koriste se za pronalaženje prevodivih stringova u " +"datotekama izvornog koda kako bi se mogli prevesti." + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Uredi" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "Izdvajači" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "Automatska provjera ažuriranja" + +msgid "Include beta versions" +msgstr "Uključujući i beta inačice" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta inačice sadrže najnovije mogućnosti i poboljÅ¡anja ali mogu biti malčice " +"nestabilne." + +msgid "Updates" +msgstr "Ažuriranja" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (preporučeno)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Putanje" + +msgid "Excluded paths" +msgstr "Isključene putanje" + +msgid "Additional keywords" +msgstr "Dodatne ključne riječi" + +msgid "Name of the project the translation is for" +msgstr "Ime projekta za koji je prijevod" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "npr. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (preporučeno)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Prvo spremite datoteku. Ovaj dio se ne može uređivati prije spremanja." + +msgid "Comment:" +msgstr "Komentar" + +msgid "OK" +msgstr "U redu" + +msgid "C&lear" +msgstr "O&čisti" + +msgid "Clear the comment" +msgstr "Očisti napomenu" + +msgid "Create new translations project" +msgstr "Izradi novi projekt prevođenja" + +msgid "Edit the project" +msgstr "Uredi projekt" + +msgid "Delete the project" +msgstr "IzbriÅ¡i projekt" + +msgid "Update all" +msgstr "Ažuriraj sve" + +msgid "Update all catalogs in the project" +msgstr "Ažuriraj sve kataloge u projektu" + +msgid "Edit project" +msgstr "Uredi projekt" + +msgid "Project name:" +msgstr "Naziv projekta:" + +msgid "Browse" +msgstr "Pregledaj" + +msgid "Add directory to the list" +msgstr "Dodaj mapu na popis" + +msgid "&New..." +msgstr "&Novo..." + +msgid "New from &POT/PO file..." +msgstr "Novo iz &POT/PO datoteke..." + +msgid "New From &POT/PO File..." +msgstr "Novo iz &POT/PO datoteke..." + +msgid "&Open..." +msgstr "&Otvori..." + +msgid "Open Recent" +msgstr "Otvori nedavno" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&Zatvori" + +msgid "&Save" +msgstr "&Spremi" + +msgid "Save &as..." +msgstr "Spremi &kao..." + +msgid "Save &As..." +msgstr "Spremi &kao..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "I&zvezi kao HTML..." + +msgid "Check for updates..." +msgstr "Provjeri ima li ažuriranja..." + +msgid "&Preferences..." +msgstr "&Postavke..." + +msgid "Catalogs &manager" +msgstr "upravitelj &kataloga" + +msgid "Catalogs &Manager" +msgstr "Upravitelj &kataloga" + +msgid "E&xit" +msgstr "&Izlaz" + +msgid "Quit" +msgstr "Izađi" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Prijevod je &nejasan" + +msgid "Translation Is &Fuzzy" +msgstr "Prijevod je &nejasan" + +msgid "Edit &comment" +msgstr "Uredi &komentar" + +msgid "Edit &Comment" +msgstr "Uredi &komentar" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&Prikaži reference" + +msgid "&Show References" +msgstr "&Prikaži reference" + +msgid "&Find..." +msgstr "&pronađi..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "Pronađi sljedeće" + +msgid "Find previous" +msgstr "Pronađi prethodno" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "pronađi sljedeće" + +msgid "Find Previous" +msgstr "Pronađi prethodno" + +msgid "&Preferences" +msgstr "&Postavke" + +msgid "Display entry &IDs" +msgstr "Prikaži unos i ID-ove" + +msgid "Display Entry &IDs" +msgstr "Prikaži unos i ID-ove" + +msgid "Sort by &file order" +msgstr "Razvrstaj po redoslijedu &datoteka" + +msgid "Sort by &File Order" +msgstr "Razvrstaj po redoslijedu &datoteka" + +msgid "Sort by &source" +msgstr "Razvrstaj po redoslijedu &izvora" + +msgid "Sort by &Source" +msgstr "Razvrstaj po redoslijedu &izvora" + +msgid "Sort by &translation" +msgstr "Razvrstaj po redoslijedu &prijevoda" + +msgid "Sort by &Translation" +msgstr "Razvrstaj po redoslijedu &prijevoda" + +msgid "&Group by context" +msgstr "&Grupiraj po kontekstu" + +msgid "&Group By Context" +msgstr "&Grupiraj po kontekstu" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&Prvo neprevedeni unosi" + +msgid "&Untranslated Entries First" +msgstr "&Prvo neprevedeni unosi" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Ažuriraj iz izvora" + +msgid "&Update from Sources" +msgstr "&Ažurirajj iz izvora" + +msgid "Update from &POT file..." +msgstr "Ažuriraj iz &POT datoteke..." + +msgid "Update from &POT File..." +msgstr "Ažuriraj iz &POT datoteke..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&Pročisti izbrisane prijevode" + +msgid "&Purge Deleted Translations" +msgstr "&Pročisti izbrisane prijevode" + +msgid "&Validate translations" +msgstr "&Provjeri valjanost prijevoda" + +msgid "&Validate Translations" +msgstr "&Provjeri valjanost prijevoda" + +msgid "&Properties..." +msgstr "&Svojstva..." + +msgid "&Done and next" +msgstr "&ZavrÅ¡i i idi na sljedeće" + +msgid "&Done and Next" +msgstr "&ZavrÅ¡i i idi na sljedeće" + +msgid "&Previous translation" +msgstr "&Prethodni prijevod" + +msgid "&Previous Translation" +msgstr "&Prethodni prijevod" + +msgid "&Next translation" +msgstr "&Sljedeći prijevod" + +msgid "&Next Translation" +msgstr "&Sljedeći prijevod" + +msgid "P&revious unfinished" +msgstr "P&rethodno nezavrÅ¡eno" + +msgid "P&revious Unfinished" +msgstr "P&rethodno nezavrÅ¡eno" + +msgid "Ne&xt unfinished" +msgstr "S&ljedeće nezavrÅ¡eno" + +msgid "Ne&xt Unfinished" +msgstr "S&ljedeće nezavrÅ¡eno" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Pomoć s mreže" + +msgid "&Online Help" +msgstr "&Pomoć s mreže" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext priručnik" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext priručnik" + +msgid "&About Poedit" +msgstr "&o Poeditu" + +msgid "&About" +msgstr "&O programu..." + +msgid "Extractor setup" +msgstr "Postavke izdvajača" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Popis nastavaka razdvojen točkazarezom (npr. \"*.cpp;*.h\"):" + +msgid "Invocation:" +msgstr "Pozivanje:" + +msgid "Command to extract translations:" +msgstr "Naredba za izdvajanje prijevoda" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ova se naredba koristi za pokretanje izdvajača.\n" +"%o se proÅ¡iruje na ime izlazne datoteke, %K na popis\n" +"ključnih riječi, %F na popis ulaznih datoteka,\n" +"%C na zastavicu kodne stranice (pogledajte ispod)." + +msgid "An item in keywords list:" +msgstr "Stavka u popisu ključnih riječi:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ovo će se dodati na naredbeni redak jednom\n" +"za svaku ključnu riječ. %k dodajej se na ključnu riječ." + +msgid "An item in input files list:" +msgstr "Stavka u popisu ulaznih datoteka." + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ovo će se dodati naredbenom retku jednom\n" +"za svaku ulaznu datoteku. %f se dodaje na ime datoteke." + +msgid "Source code charset:" +msgstr "Kodna stranica izvornog koda" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ovo će se dodati naredbenom retku\n" +"samo ako je priložen izvorni kod. %c se dodaje na vrijednost kodne stranice." + +msgid "Catalog properties" +msgstr "Svojstva kataloga" + +msgid "Project name and version:" +msgstr "Ime i inačica projekta" + +msgid "Plural Forms:" +msgstr "Oblici množine" + +msgid "Use default rules for this language" +msgstr "za ovaj jezik koristi zadana pravila" + +msgid "Use custom expression" +msgstr "Koristi prilagođene izraze" + +msgid "Learn about plural forms" +msgstr "Nauči viÅ¡e o oblicima množine" + +msgid "Charset:" +msgstr "Kodna stranica:" + +msgid "Team:" +msgstr "Tim:" + +msgid "Team's email address:" +msgstr "Adresa e-poÅ¡te tima:" + +msgid "Translation properties" +msgstr "Svojstva prijevoda" + +msgid "Sources paths" +msgstr "Putanje do izvora" + +msgid "Extract text from source files in the following directories:" +msgstr "Izdvoji tekst iz izvornih datoteka u sljedećim mapama:" + +msgid "Base path:" +msgstr "Osnovna putanja" + +msgid "Sources keywords" +msgstr "Ključne riječi izvora" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Koristi ove ključne riječi (nazive funkcija) za prepoznavanje prevodivih " +"stringova\n" +"u izvornim datotekama." + +msgid "Learn about gettext keywords" +msgstr "nauči viÅ¡e o gettext ključnim riječima" + +msgid "Update summary" +msgstr "Ažuriranje sažetka" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ovi stringovi pronađeni su u izvornim datotekama ali ne i u katalogu.\n" +"Poedit će ih dodati u katalog." + +msgid "New strings" +msgstr "Novi stringovi" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ovi stringovi viÅ¡e se ne nalaze u izvornim datotekama.\n" +"Poedit će ih izbrisati iz kataloga." + +msgid "Obsolete strings" +msgstr "Zastarjeli stringovi" + +msgid "(0 new, 0 obsolete)" +msgstr "(novih: 0, zastarjelih: 0)" + +msgid "Open" +msgstr "Otvori" + +msgid "Save catalog" +msgstr "Spremi katalog" + +msgid "Validate" +msgstr "Provjeri valjanost" + +msgid "Check for errors in the translation" +msgstr "Provjeri greÅ¡ke u prijevodu" + +msgid "Update" +msgstr "Ažuriraj" + +msgid "Update catalog - synchronize it with sources" +msgstr "Ažuriraj katalog, uskladi ga s izvorima" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "promijenjeno ako odabrani string ima nejasan prijevod" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Napomene prevoditeljima" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "Prijedlozi za prijevod:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "Uvoz prijevoda: %d" + +msgid "Poedit Update" +msgstr "Poedit ažuriranje" + +msgid "Preparing migration..." +msgstr "Priprema prijenosa..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Izlazni status prijenosa: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit treba pretvoriti prevoditeljsku memoriju u drugi oblik" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"ovo se mora napraviti prije nego se Poedit pokrene. Može trajati nekoliko " +"minuta ako imate mnogo pohranjenih prijevoda ali bi uobičajeno trebalo biti " +"puno brže." + +msgid "Proceed" +msgstr "Nastavi" + +msgid "Translation memory migration failed." +msgstr "Neuspjeli prijenos prevoditeljske memorije" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Podaci vaÅ¡e prevoditeljske memorije nisu mogli biti preneseni. GreÅ¡ka je:\n" +"\n" +"%s\n" +"Molimo potražite pomoć na help@poedit.net i popravit ćemo stanje." + +msgid "Cannot create temporary directory." +msgstr "Nije moguće izraditi privremenu mapu." + +msgid "Welcome to Poedit" +msgstr "DobrodoÅ¡li u Poedit!" + +msgid "Edit a translation" +msgstr "Uredi prijevod" + +msgid "Open an existing PO file and edit the translation." +msgstr "otvori postojeću PO datoteku i uredi prijevod" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"otvori postojeću PO datoteku ili POT predložak i od njih izradi novi prijevod" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "Nema prijevoda, to je neobično" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Prevodivi unosi nisu ručno uneseni u Gettext sustav, ali se automatski " +"izdvajaju\n" +"iz izvornog koda. na ovaj način ostaju ažurni i točni.\n" +"Prevoditelji uobičajeno koriste PO predloÅ¡ke (POT datoteke) koje pripremaju " +"developeri tema." + +msgid "(Learn more about GNU gettext)" +msgstr "(nauči viÅ¡e o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Najjednostavniji način za ispunjavanje ovog kataloga je ažuriranje iz POT " +"datoteke" + +msgid "Update from POT" +msgstr "Ažuriraj iz POT datoteke" + +msgid "Take translatable strings from an existing POT template." +msgstr "Preuzmi prevodive stringove iz postojeće POT datoteke" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Također možete izdvojiti prevodive stringove izravno iz izvornog koda" + +msgid "Extract from sources" +msgstr "Izdvoji iz izvora" + +msgid "Configure source code extraction in Properties." +msgstr "Konfiguriraj izdvajanje iz izvornog koda u svojstvima" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/hu.mo b/locales/hu.mo new file mode 100644 index 0000000000000000000000000000000000000000..95ab342cde82d071aa8fed54e7556b131a20efb0 GIT binary patch literal 47991 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 literal 0 HcmV?d00001 diff --git a/locales/hu.po b/locales/hu.po new file mode 100644 index 0000000..e5d58ff --- /dev/null +++ b/locales/hu.po @@ -0,0 +1,1964 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Hungarian\n" +"Language: hu_HU\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: hu\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ezen értesítő üzenet elrejtése" + +msgid "Don't Show Again" +msgstr "Ne jelenjen meg újra" + +msgid "Don't show again" +msgstr "Ne mutassa újra" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i sor a(z) „%s” fájlból nem lett megfelelően betöltve." +msgstr[1] "%i sor a(z) „%s” fájlból nem lett megfelelően betöltve." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Sérült a(z) %d. sor a(z) '%s' fájlban (érvénytelen %s adat)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Hibás fejléc: „%s”" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Sérült katalógus fájl: egyes számú msgstr van használva msgid_plural " +"megadással" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Sérült katalógus fájl: többes számú msgstr van használva msgid_plural nélkül" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Hibák történtek a katalógus betöltése közben. Eredményeként néhány adat " +"hiányozhat vagy megsérülhetett." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "A(z) %s fájl betöltése nem sikerült, valószínűleg sérült." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"A(z) „%s” fájl csak olvasható és nem lehet menteni.\n" +"Kérem mentse el a fájlt más néven." + +#, c-format +msgid "Couldn't save file %s." +msgstr "A(z) %s fájl mentése nem sikerült." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Probléma történt a fájl szépre formázása közben (de rendben mentve lett)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"A katalógust nem lehet a tulajdonságainál megadott „%s”\n" +"karakterkódolással menteni. Ehelyett a mentés UTF-8\n" +"kódolással történt, és a beállítása is e szerint lett módosítva." + +msgid "Error saving catalog" +msgstr "Hiba a katalógus mentésekor" + +msgid "PO Translation Files" +msgstr "PO fordítási fájlok" + +msgid "POT Translation Templates" +msgstr "POT fordítási sablonok" + +msgid "All Translation Files" +msgstr "Minden fordítási fájl" + +msgid "Merging differences..." +msgstr "Eltérések összefésülése…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "A(z) „%s” nem érvényes POT fájl." + +msgid "(Use default language)" +msgstr "(Alapértelmezett nyelv használata)" + +msgid "Select your preferred language" +msgstr "Válassza ki a kívánt nyelvet" + +msgid "Language selection" +msgstr "Nyelvválasztás" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Újra kell indítania a Poeditet a módosítás életbe léptetéséhez." + +msgid "Downloading translations is disabled in this project." +msgstr "A fordítások letöltése ebben a projektben le van tiltva." + +msgid "Not authorized, please sign in again." +msgstr "Nem engedélyezett, kérjük jelentkezzen be újra." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"A Crowdin egy online honosításkezelő platform és együttműködésen alapuló " +"fordítási eszköz. A Poedit gond nélkül képes szinkronizálni a Crowdin-on " +"kezelt PO fájlokat." + +msgid "Sign In" +msgstr "Bejelentkezés" + +msgid "Sign in" +msgstr "Bejelentkezés" + +msgid "Sign Out" +msgstr "Kijelentkezés" + +msgid "Sign out" +msgstr "Kijelentkezés" + +msgid "Waiting for authentication…" +msgstr "Várakozás a hitelesítésre…" + +msgid "Updating user information…" +msgstr "Felhasználói adatok frissítése…" + +msgid "Signed in as:" +msgstr "Bejelentkezve mint:" + +msgid "Learn More About Crowdin" +msgstr "Tudjon meg többet a Crowdinról" + +msgid "Learn more about Crowdin" +msgstr "Tudjon meg többet a Crowdinról" + +msgid "Sign in to Crowdin" +msgstr "Bejelentkezés a Crowdinra" + +msgid "Open Crowdin translation" +msgstr "Crowdin fordítás megnyitása" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Nyelv:" + +msgid "File:" +msgstr "Fájl:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Nem szerepel fordítási projekt az Ön Crowdin fiókjában." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Ebben a fordítási projektben nincs olyan fájl, amit a Poedit-tel fordítani " +"lehetne." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Ez a fájl csak a Crowdin webes felületén szerkeszthető." + +msgid "Downloading latest translations…" +msgstr "A legújabb fordítások letöltése…" + +msgid "Syncing with Crowdin" +msgstr "Szinkronizálás a Crowdin-nel" + +msgid "Syncing with Crowdin failed." +msgstr "Nem sikerült szinkronizálni a Crowdin-nel." + +msgid "Crowdin error" +msgstr "Crowdin hiba" + +msgid "Uploading translations…" +msgstr "Fordítások feltöltése…" + +msgid "&Copy" +msgstr "&Másolás" + +msgid "Learn more" +msgstr "Tudjon meg többet" + +msgid "Learn More" +msgstr "Tudjon meg többet" + +#, c-format +msgid "Failed command: %s" +msgstr "Sikertelen parancs: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "A gettext katalógusok egyesítése meghiúsult." + +msgid "Scanning files..." +msgstr "Fájlok átvizsgálása…" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s fájlok elemzése…" + +msgid "Failed to load extracted catalog." +msgstr "A kinyert katalógus betöltése meghiúsult." + +msgid "&Help" +msgstr "&Súgó" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO fájlok nem szerkeszthetők közvetlenül a Poeditben." + +msgid "Error opening file" +msgstr "Hiba a fájl megnyitása során" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Kérjük, nyissa meg és szerkessze helyette a megfelelő PO fájlt. Amikor " +"menti, a MO fájl is frissülni fog." + +msgid "don't delete temporary files (for debugging)" +msgstr "ne törölje az ideiglenes fájlokat (hibakereséshez)" + +msgid "handle a poedit:// URI" +msgstr "kezel egy poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Nem sikerült kommunikálni a Poedit folyamattal." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Nem kezelt kivétel történt: %s" + +msgid "Unhandled exception occurred." +msgstr "Nem kezelt kivétel történt" + +msgid "Open catalog" +msgstr "Katalógus megnyitása" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Nem található a(z) „%s” fájl." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s névjegye" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "%s verzió" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Szolgáltatások" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s elrejtése" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Többi elrejtése" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mindet mutat" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Kilépés a %s-ből" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "A Poedit egy könnyen használható fordítás szerkesztő." + +msgid "Catalogs Manager" +msgstr "&Katalóguskezelő" + +msgid "Check for Updates..." +msgstr "Frissítések keresése…" + +msgid "&Edit" +msgstr "Sz&erkesztés" + +msgid "Undo" +msgstr "Visszavonás" + +msgid "Redo" +msgstr "Mégis" + +msgid "Paste and Match Style" +msgstr "Beillesztés és stílus egyeztetés" + +msgid "Delete" +msgstr "Törlés" + +msgid "Spelling and Grammar" +msgstr "Helyesírás és nyelvhelyesség" + +msgid "Show Spelling and Grammar" +msgstr "Helyesírás és nyelvhelyesség megjelenítése" + +msgid "Check Document Now" +msgstr "Dokumentum ellenőrzése" + +msgid "Check Spelling While Typing" +msgstr "Helyesírás-ellenőrzés beíráskor" + +msgid "Check Grammar With Spelling" +msgstr "Nyelvhelyesség és helyesírás ellenőrzése" + +msgid "Correct Spelling Automatically" +msgstr "Automatikus helyesírás-javítás" + +msgid "Substitutions" +msgstr "Cserejavaslatok" + +msgid "Show Substitutions" +msgstr "Cserejavaslatok megjelenítése" + +msgid "Smart Copy/Paste" +msgstr "Intelligens másolás/beillesztés" + +msgid "Smart Quotes" +msgstr "Intelligens idézőjelek" + +msgid "Smart Dashes" +msgstr "Intelligens kötőjelek" + +msgid "Smart Links" +msgstr "Intelligens hivatkozások" + +msgid "Text Replacement" +msgstr "Szöveg csere" + +msgid "Transformations" +msgstr "Átalakítások" + +msgid "Make Upper Case" +msgstr "Nagybetűvel" + +msgid "Make Lower Case" +msgstr "Kisbetűvel" + +msgid "Capitalize" +msgstr "Nagy kezdőbetű" + +msgid "Speech" +msgstr "Beszéd" + +msgid "Start Speaking" +msgstr "Beszéd kezdése" + +msgid "Stop Speaking" +msgstr "Beszéd leállítása" + +msgid "&View" +msgstr "&Nézet" + +msgid "Enter Full Screen" +msgstr "Váltás teljes képernyőre" + +msgid "Window" +msgstr "Ablak" + +msgid "Minimize" +msgstr "Minimalizálás" + +msgid "Zoom" +msgstr "Nagyítás" + +msgid "Bring All to Front" +msgstr "Összes előrehozása" + +msgid "PO Translation" +msgstr "PO fordítás" + +msgid "The file cannot be opened." +msgstr "A fájlt nem lehet megnyitni." + +msgid "Invalid file" +msgstr "Érvénytelen fájl" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"A fájl lehet hogy sérült vagy olyan formátumú melyet a Poedit nem ismer fel." + +msgid "&Undo" +msgstr "&Visszavonás" + +msgid "&Redo" +msgstr "&Mégis" + +msgid "Cu&t" +msgstr "&Kivágás" + +msgid "Cut" +msgstr "Kivágás" + +msgid "Copy" +msgstr "Másolás" + +msgid "&Paste" +msgstr "&Beillesztés" + +msgid "Paste" +msgstr "Beillesztés" + +msgid "&Delete" +msgstr "&Törlés" + +msgid "Select &All" +msgstr "Min&den kijelölése" + +msgid "Select All" +msgstr "Minden kijelölése" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "↑" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "↓" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "A Poedit ablakára egyszerre több fájlt nem lehet ráhúzni." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "A(z) „%s” fájl nem üzenetkatalógus." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fájl" + +msgid "&Go" +msgstr "&Ugrás" + +msgid "Source text:" +msgstr "Forrásszöveg:" + +msgid "Singular:" +msgstr "Egyes szám:" + +msgid "Plural:" +msgstr "Többes szám:" + +msgid "Translation:" +msgstr "Fordítás:" + +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 "" +"A POT fájl csak egy sablon és nem tartalmaz fordításokat.\n" +"Fordítás készítéséhez hozzon létre egy új PO fájlt a sablon alapján." + +msgid "Create New Translation" +msgstr "Új fordítás létrehozása" + +msgid "Create new translation" +msgstr "Új fordítási projekt létrehozása" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Helyesírás-ellenőrzés le van tiltva, mert a(z) %s szótár nincs telepítve." + +msgid "Install" +msgstr "Telepítés" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "A katalógus módosult. Szeretné menteni a változásokat?" + +msgid "Save changes" +msgstr "Változások mentése" + +msgid "Your changes will be lost if you don't save them." +msgstr "A változtatások elvesznek, ha nem menti őket." + +msgid "Save" +msgstr "Mentés" + +msgid "Don't save" +msgstr "Ne mentse el" + +msgid "Don't Save" +msgstr "Ne mentse el" + +msgid "Save as..." +msgstr "Mentés másként…" + +msgid "Compile to..." +msgstr "Fordítás..." + +msgid "Compiled Translation Files" +msgstr "Lefordított fordítási fájlok" + +msgid "Export as..." +msgstr "Exportálás mint…" + +msgid "HTML Files" +msgstr "HTML fájlok" + +msgid "Open catalog template" +msgstr "Katalógus sablon megnyitása" + +msgid "Updating catalog" +msgstr "Katalógus frissítése" + +msgid "Source code not available." +msgstr "Nem áll rendelkezésre forráskód." + +msgid "Updating failed" +msgstr "Sikertelen frissítés" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"A fordításokat nem lehet frissíteni a forráskódból, mert a katalógus " +"tulajdonságaiban megadott helyen nem található kód." + +msgid "Entries in the catalog are probably incorrect." +msgstr "A katalógusban lévő bejegyzések valószínűleg hibásak." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"A katalógus frissítése meghiúsult. Részletekért kattintson a 'Részletek >>' " +"gombra." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d probléma van a fordítással." +msgstr[1] "%d probléma van a fordítással." + +msgid "Validation results" +msgstr "Érvényesítés eredménye" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"A hibás bejegyzések pirossal meg lettek jelölve a listában. A hiba részletei " +"megjelennek, ha egy ilyen bejegyzést választ ki." + +msgid "The file was saved safely." +msgstr "A fájl biztonságosan el lett mentve" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"A fájl biztonságosan el lett mentve, de lehetséges, hogy nem fog megfelelően " +"működni." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"A fájl mentése sikerült, de nem lehet MO formátumúra fordítani és használni." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"A fájl át lett fordítva MO formátumra, de lehetséges, hogy nem fog " +"megfelelően működni." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "A fájlt nem lehet MO formátumra fordítani és használni." + +msgid "No problems with the translation found." +msgstr "A fordítással nincsenek problémák." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "A fordítás használatra kész, de %d bejegyzés még nincs lefordítva." +msgstr[1] "A fordítás használatra kész, de %d bejegyzés még nincs lefordítva." + +msgid "The translation is ready for use." +msgstr "A fordítás használatra kész." + +msgid "Context:" +msgstr "Kontextus:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"A Poedit a(z) “%s” fájlban automatikusan kijavította a nem megfelelő " +"tartalmat." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"A fájl PO fájlokban nem engedélyezett és a fájl használatát megakadályozó " +"ismétlődő elemeket tartalmaz. A Poedit kijavította ezt a problémát, de " +"minden bizonytalannak jelölt fordítási bejegyzés felülvizsgálata és estleges " +"javítása szükséges." + +msgid "Language of the translation isn't set." +msgstr "A fordítás nyelve nincs beállítva." + +msgid "Set Language" +msgstr "Nyelv kiválasztása" + +msgid "Set language" +msgstr "Válassza ki a nyelvet" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"A javaslatok nem érthetők el, ha a fordítás nyelve nincs pontosan beállítva. " +"Ez más funkciókra, mint pl.: a többes számú alakokra is hatással lehet." + +msgid "Language of the translation is the same as source language." +msgstr "A fordítás nyelve megegyezik a forrásnyelvvel." + +msgid "Fix Language" +msgstr "Beállítás kijavítása" + +msgid "Fix language" +msgstr "Beállítás kijavítása" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Ebben a katalógusban többes számú bejegyzések vannak, de nincs Plural-Forms " +"fejléc beállítva." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"A katalógusban lévő egyes bejegyzéseknek eltérő darabszámú többes számuk " +"van, mint amit a katalógus Plural-Forms fejléce mond" + +msgid "Required header Plural-Forms is missing." +msgstr "A szükséges Plural-Forms fejléc hiányzik." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Szintaktikai hiba a Plural-Forms fejlécben („%s”)." + +msgid "Fix the Header" +msgstr "A fejléc javítása" + +msgid "Fix the header" +msgstr "Fejléc javítása" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"A katalógus által használt többes szám kifejezés a %s nyelvhez nem " +"használatos." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Felülvizsgálat" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Hiba a(z) „%s” üzenetkatalógus fájl betöltése közben." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Lefordítva: %d/%d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Maradt: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d hiba" +msgstr[1] "%d hiba" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d bejegyzés" +msgstr[1] "%d bejegyzés" + +msgid " (unsaved)" +msgstr " (nincs mentve)" + +msgid " (modified)" +msgstr " (módosítva)" + +msgid "Go" +msgstr "Ugrás" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Nem sikerült frissíteni a fordítási memóriát: %s" + +msgid "Purge deleted translations" +msgstr "Törölt fordítások tisztítása" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Tényleg törölni szeretné a már nem használt fordításokat?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ha folytatja a tisztítást, akkor a töröltként megjelölt fordítások végleg " +"eltávolításra kerülnek. Újra kell fordítania őket, ha ezek a jövőben újra " +"hozzá lesznek adva." + +msgid "Keep" +msgstr "Megtartás" + +msgid "Purge" +msgstr "Tisztítás" + +msgid "Fill missing translations from TM" +msgstr "Hiányzó fordítás kitöltése FM-ből" + +msgid "Only fill in exact matches" +msgstr "Csak pontos egyezés esetén" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Alapesetben a pontatlan eredmények is - bizonytalanként jelölve - " +"belekerülnek a fordításba. Bejelölve ezt az opciót, csak pontos egyezés " +"esetén lesz kitöltve." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ne jelöld bizonytalanként a pontosan egyezőket" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Csak akkor engedélyezze, ha megbízik a FM-jében. Alapértelmezés szerint az " +"FM-ből származó összes találat bizonytalanként lesz megjelölve és a " +"felülvizsgálatuk szükséges." + +msgid "Fill" +msgstr "Kitöltés" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d bejegyzés a fordítási memóriából lett lefordítva." +msgstr[1] "%d bejegyzés a fordítási memóriából lett lefordítva." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"A fordítások bizonytalannak lettek jelölve, mert lehet, hogy pontatlanok. Át " +"kellene nézni ezeket, a pontosításuk véget." + +msgid "No entries could be filled from the translation memory." +msgstr "Nem található megfelelő bejegyzés a fordítási memóriában." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"A FM nem tartalmaz a fájl tartalmat hasonló karakterláncokat. A félautomata " +"fordítás csak azután lesz hatékony miután Poedit eleget tanult a Ön által " +"manuálisan lefordított fájlokból." + +msgid "Translating" +msgstr "Fordítás" + +msgid "Filling missing translations from TM..." +msgstr "Hiányzó fordítás lefordítása FM-ből..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u szöveg lefordítva" +msgstr[1] "%u szöveg lefordítva" + +msgid "Copy from source text" +msgstr "Másolás a forrásszövegből" + +msgid "Copy from Source Text" +msgstr "Másolás a forrásszövegből" + +msgid "Clear translation" +msgstr "Fordítás törlése" + +msgid "Clear Translation" +msgstr "Fordítás törlése" + +msgid "Edit comment" +msgstr "Megjegyzés szerkesztése" + +msgid "Edit Comment" +msgstr "Megjegyzés szerkesztése" + +msgid "References:" +msgstr "Hivatkozások:" + +msgid "Everything" +msgstr "Minden" + +#, c-format +msgid "Form %i" +msgstr "%i. alak" + +msgid "Singular" +msgstr "Egyes szám" + +msgid "Zero" +msgstr "Nulla" + +msgid "One" +msgstr "Egy" + +msgid "Two" +msgstr "Kettő" + +msgid "Plural" +msgstr "Többes szám" + +msgid "Other" +msgstr "Egyéb" + +msgid "&Bookmarks" +msgstr "&Könyvjelzők" + +#, c-format +msgid "Set bookmark %i" +msgstr "%i könyvjelző beállítása" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ugrás a(z) %i könyvjelzőre" + +#, c-format +msgid "Set Bookmark %i" +msgstr "%i könyvjelző beállítása" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ugrás a(z) %i könyvjelzőre" + +msgid "Hide Sidebar" +msgstr "Oldalsáv elrejtése" + +msgid "Show Sidebar" +msgstr "Oldalsáv megjelenítése" + +msgid "Hide Status Bar" +msgstr "Állapotsor elrejtése" + +msgid "Show Status Bar" +msgstr "Állapotsor megjelenítése" + +msgid "Source text" +msgstr "Forrásszöveg" + +msgid "Translation" +msgstr "Fordítás" + +msgid "ID" +msgstr "Azonosító" + +#, c-format +msgid "Source text — %s" +msgstr "Forrásszöveg — %s" + +msgid "unknown language" +msgstr "ismeretlen nyelv" + +#, c-format +msgid "Translation — %s" +msgstr "Fordítás — %s" + +msgid "Error:" +msgstr "Hiba:" + +msgid "Source file" +msgstr "Forrásfájl" + +msgid "Source file occurrence:" +msgstr "Forrásfájli előfordulás:" + +msgid "Open in Editor" +msgstr "Megnyitás a szerkesztőben" + +msgid "Open in editor" +msgstr "Megnyitás a szerkesztőben" + +msgid "No references for the selected item." +msgstr "A kiválasztott elemhez nincs referencia." + +#, c-format +msgid "Error opening file %s!" +msgstr "Hiba a(z) %s fájl megnyitásakor!" + +msgid "Find" +msgstr "Keresés…" + +msgid "Replace" +msgstr "Csere" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Beállítások" + +msgid "Ignore case" +msgstr "Kis- és nagybetűk egyezőek" + +msgid "Wrap around" +msgstr "Körkörös keresés" + +msgid "Whole words only" +msgstr "Csak teljes szóra" + +msgid "Find in source texts" +msgstr "Keresés a forrásszövegben" + +msgid "Find in translations" +msgstr "Keresés a fordításban" + +msgid "Find in comments" +msgstr "Keresés a megjegyzésekben" + +msgid "Close" +msgstr "Bezárás" + +msgid "Replace All" +msgstr "Összes cseréje" + +msgid "Replace all" +msgstr "Összes cseréje" + +msgid "< &Previous" +msgstr "< Előző" + +msgid "&Next >" +msgstr "Következő >" + +msgid "String to find" +msgstr "Keresendő karakterlánc" + +msgid "Replacement string" +msgstr "Behelyettesítendő karakterlánc" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "A programot nem lehet futtatni: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Nyelv kódja vagy neve (pl. hu_HU)" + +msgid "Translation Language" +msgstr "Fordítás nyelve" + +msgid "Language of the translation:" +msgstr "A fordítás nyelve:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit – Katalóguskezelő" + +msgid "Catalog" +msgstr "Katalógus" + +msgid "Total" +msgstr "Összes" + +msgid "Untrans" +msgstr "Lefordítatlan" + +msgid "Fuzzy" +msgstr "Bizonytalan" + +msgid "Bad Tokens" +msgstr "Hibás részlet" + +msgid "Last modified" +msgstr "Utoljára módosítva" + +msgid "Select directory" +msgstr "Válassza ki a könyvtárat" + +msgid "Directories:" +msgstr "Könyvtárak:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Tényleg törölni szeretné a projektet?" + +msgid "Confirmation" +msgstr "Megerősítés" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Tényleg szeretné frissíteni a projektben\n" +"található összes katalógust?" + +msgid "Information about the translator" +msgstr "Információk a fordítóról" + +msgid "Name:" +msgstr "Név:" + +msgid "Your Name" +msgstr "Az Ön neve" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "az_Ön_emailcíme@példa.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Az Ön neve és e-mail címe csak a GNU gettext fájlok\n" +"Last-Translator fejlécének beállítására szolgál." + +msgid "Editing" +msgstr "Szerkesztés" + +msgid "Automatically compile MO file when saving" +msgstr "MO fájl automatikus létrehozása mentéskor" + +msgid "Show summary after catalog update" +msgstr "Összefoglaló megjelenítése a katalógus frissítése után" + +msgid "Check spelling" +msgstr "Helyesírás-ellenőrzés" + +msgid "Always change focus to text input field" +msgstr "Mindig a beviteli mező legyen az aktív" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Soha ne legyen aktív a szöveglista. Ha be van kapcsolva, akkor a mozgáshoz a " +"Ctrl+nyilakat kell használni, de a szöveg azonnal gépelhető anélkül, hogy " +"előtte Tabot kellene nyomni a fókusz váltásához." + +msgid "Appearance" +msgstr "Megjelenés" + +msgid "Use custom list font:" +msgstr "Egyéni lista betűtípus használata:" + +msgid "Use custom text fields font:" +msgstr "Egyéni szövegmező betűtípus használata:" + +msgid "Change UI language" +msgstr "Felület nyelvének változtatása" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8-as vagy újabb szükséges)" + +msgid "General" +msgstr "Általános" + +msgid "Use translation memory" +msgstr "Fordítási memória használata" + +msgid "Learn From Files..." +msgstr "Importálás fájlból…" + +msgid "Learn from files..." +msgstr "Beolvasás fájlból..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Törlés" + +msgid "Consult TM when updating from sources" +msgstr "A forrásból való frissítés során kiegészítés a FM-ból" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Engedélyezése esetén Poedit megpróbálja kitölteni az új bejegyzéseket a\n" +"korábbi, a fordítási memóriában tárolt fordításokat felhasználva. Ha a FM\n" +"majdnem üres, akkor ez nem lesz túl hatékony. A fordítások számának " +"növelésével,\n" +"a FM is növekszik és így egyre nagyobb segítség lesz az Ön számára." + +msgid "Stored translations:" +msgstr "Tárolt fordítások:" + +msgid "Database size on disk:" +msgstr "Adatbázis méret a lemezen:" + +msgid "Select translation files to import" +msgstr "Importálandó fordítás fájlok kiválasztása" + +msgid "Translation Memory" +msgstr "Fordítási memória" + +msgid "Importing translations..." +msgstr "Fordítások importálása..." + +msgid "Finalizing..." +msgstr "Véglegesítés..." + +msgid "Reset translation memory" +msgstr "Fordítási memória törlése" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Biztos benne, hogy törölni akarja a fordítási memóriát?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"A fordítási memória törlésével visszavonhatatlanul töröl minden benne tárolt " +"fordítást. Ez a művelet nem vonható vissza." + +msgid "Cancel" +msgstr "Mégse" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "FM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"A forráskód kivonatoló szolgál a lefordítható karakterláncok forráskód " +"fájlokban való megkeresésére és kivonatolására annak érdekében, hogy le " +"lehessen őket fordítani." + +msgid "New" +msgstr "Új" + +msgid "Edit" +msgstr "Szerkesztés" + +msgid "Delete extractor" +msgstr "Kivonatoló törlése" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Biztosan törölni szeretné a \"%s\" kivonatolót?" + +msgid "Extractors" +msgstr "Kivonatolók" + +msgid "Accounts" +msgstr "Fiókok" + +msgid "Automatically check for updates" +msgstr "Frissítések automatikus keresése" + +msgid "Include beta versions" +msgstr "Beleértve a béta verziókat is." + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Béta verziók a legújabb funkciókat és fejlesztéseket tartalmazzák, de " +"előfordulhat, hogy egy kicsit kevésbé stabilak." + +msgid "Updates" +msgstr "Frissítések" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ezek a beállítások befolyásolják a PO fájlokat belső formázását. Csak " +"speciális követelmények - pl. verzió kezelés - esetén változtassa meg őket." + +msgid "Line endings:" +msgstr "Sorvégek:" + +msgid "Unix (recommended)" +msgstr "Unix (javasolt)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Szöveg szélesség:" + +msgid "Preserve formatting of existing files" +msgstr "A meglévő fájlok formázásának megőrzése" + +msgid "Advanced" +msgstr "Speciális" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s beállításai" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Húzza ide a mappákat\n" +"\n" +"vagy használja a + gombot" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Húzza ide a mappákat\n" +"\n" +"vagy használja a + gombot" + +msgid "Add Folders..." +msgstr "Mappák hozzáadása..." + +msgid "Add folders..." +msgstr "Mappák hozzáadása..." + +msgid "Add Files..." +msgstr "Fájlok hozzáadása..." + +msgid "Add files..." +msgstr "Fájlok hozzáadása..." + +msgid "Add Wildcard..." +msgstr "Joker karakter hozzáadása..." + +msgid "Add wildcard..." +msgstr "Helyettesítő karakter hozzáadása..." + +msgid "Paths" +msgstr "Útvonalak" + +msgid "Excluded paths" +msgstr "Kizárt elérési utak" + +msgid "Additional keywords" +msgstr "Kiegészítő kulcsszavak" + +msgid "Name of the project the translation is for" +msgstr "A projekt megnevezése, és aminek a fordítása:" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "pl. nplurals=2; plural=(n != 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (javasolt)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Kérjük először mentse el fájlt. Ez a szakasz mindaddig nem lesz szerkeszthető" + +msgid "Comment:" +msgstr "Megjegyzés:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "Tör&lés" + +msgid "Clear the comment" +msgstr "Megjegyzés törlése" + +msgid "Create new translations project" +msgstr "Új fordítási projekt létrehozása" + +msgid "Edit the project" +msgstr "A projekt szerkesztése" + +msgid "Delete the project" +msgstr "Projekt törlése" + +msgid "Update all" +msgstr "Összes frissítése" + +msgid "Update all catalogs in the project" +msgstr "A projekt összes katalógusának frissítése" + +msgid "Edit project" +msgstr "Projekt szerkesztése" + +msgid "Project name:" +msgstr "Projekt neve:" + +msgid "Browse" +msgstr "Tallózás" + +msgid "Add directory to the list" +msgstr "Könyvtár hozzáadása a listához" + +msgid "&New..." +msgstr "&Új katalógus…" + +msgid "New from &POT/PO file..." +msgstr "Új katalógus &POT/PO fájl alapján…" + +msgid "New From &POT/PO File..." +msgstr "Új &POT/PO fájl alapján…" + +msgid "&Open..." +msgstr "&Megnyitás…" + +msgid "Open Recent" +msgstr "Legutóbbi megnyitása" + +msgid "Open from Crowdin..." +msgstr "Megnyitás a Crowdin-ról..." + +msgid "Open From Crowdin..." +msgstr "Megnyitás a Crowdin-ról..." + +msgid "&Close" +msgstr "Be&zárás" + +msgid "&Save" +msgstr "Menté&s" + +msgid "Save &as..." +msgstr "Mentés máské&nt…" + +msgid "Save &As..." +msgstr "Mentés máské&nt…" + +msgid "Compile to MO..." +msgstr "Fordítás MO-ra..." + +msgid "E&xport as HTML..." +msgstr "E&xportálás HTML-ként..." + +msgid "Check for updates..." +msgstr "Frissítések keresése…" + +msgid "&Preferences..." +msgstr "&Beállítások…" + +msgid "Catalogs &manager" +msgstr "&Katalóguskezelő" + +msgid "Catalogs &Manager" +msgstr "&Katalóguskezelő" + +msgid "E&xit" +msgstr "K&ilépés" + +msgid "Quit" +msgstr "Kilépés" + +msgid "Copy from singular" +msgstr "Másolás az egyes számból" + +msgid "Copy From Singular" +msgstr "Másolás az egyes számból" + +msgid "Translation is &fuzzy" +msgstr "A fordítás &bizonytalan" + +msgid "Translation Is &Fuzzy" +msgstr "A fordítás &bizonytalan" + +msgid "Edit &comment" +msgstr "&Megjegyzés szerkesztése" + +msgid "Edit &Comment" +msgstr "&Megjegyzés szerkesztése" + +msgid "Suggestions" +msgstr "Javaslatok" + +msgid "&Show references" +msgstr "&Hivatkozások megjelenítése" + +msgid "&Show References" +msgstr "&Hivatkozások megjelenítése" + +msgid "&Find..." +msgstr "&Keresés…" + +msgid "Replace..." +msgstr "Csere..." + +msgid "Find next" +msgstr "Következő keresése" + +msgid "Find previous" +msgstr "Előző keresése" + +msgid "Find and Replace..." +msgstr "Keresés és csere..." + +msgid "Find Next" +msgstr "Következő keresése" + +msgid "Find Previous" +msgstr "Előző keresése" + +msgid "&Preferences" +msgstr "&Beállítások" + +msgid "Display entry &IDs" +msgstr "Bejegyzés &azonosítók megjelenítése" + +msgid "Display Entry &IDs" +msgstr "Bejegyzés &azonosítók megjelenítése" + +msgid "Sort by &file order" +msgstr "Rendezés &fájlsorrend szerint" + +msgid "Sort by &File Order" +msgstr "Rendezés &fájlsorrend szerint" + +msgid "Sort by &source" +msgstr "Rendezés f&orrás szerint" + +msgid "Sort by &Source" +msgstr "Rendezés f&orrás szerint" + +msgid "Sort by &translation" +msgstr "Rendezés for&dítás szerint" + +msgid "Sort by &Translation" +msgstr "Rendezés for&dítás szerint" + +msgid "&Group by context" +msgstr "Szövegkörnyezeti &csoportosítás" + +msgid "&Group By Context" +msgstr "Szövegkörnyezeti &csoportosítás" + +msgid "Entries with errors first" +msgstr "Hibás bejegyzések elöl" + +msgid "Entries with Errors First" +msgstr "Hibás bejegyzések elöl" + +msgid "&Untranslated entries first" +msgstr "&Lefordítatlan bejegyzések előre" + +msgid "&Untranslated Entries First" +msgstr "&Lefordítatlan bejegyzések előre" + +msgid "Show sidebar" +msgstr "Oldalsáv megjelenítése" + +msgid "Show status bar" +msgstr "Állapotsor megjelenítése" + +msgid "C&atalog" +msgstr "&Katalógus" + +msgid "&Update from sources" +msgstr "Frissítés a &forrásokból" + +msgid "&Update from Sources" +msgstr "Frissítés a &forrásokból" + +msgid "Update from &POT file..." +msgstr "Frissítés &POT fájlból…" + +msgid "Update from &POT File..." +msgstr "Frissítés &POT fájlból…" + +msgid "Sync with Crowdin" +msgstr "Szinkronizáció a Crowdin-nel" + +msgid "Fill missing translations from &TM..." +msgstr "Hiányzó fordítás kitöltése &FM-ből..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Hiányzó fordítás kitöltése &FM-ből..." + +msgid "&Purge deleted translations" +msgstr "Törölt &fordítások tisztítása" + +msgid "&Purge Deleted Translations" +msgstr "Törölt &fordítások végleges törlés" + +msgid "&Validate translations" +msgstr "Fordítások ér&vényesítése" + +msgid "&Validate Translations" +msgstr "Fordítások ér&vényesítése" + +msgid "&Properties..." +msgstr "&Tulajdonságok…" + +msgid "&Done and next" +msgstr "K&ész és következő" + +msgid "&Done and Next" +msgstr "K&ész és következő" + +msgid "&Previous translation" +msgstr "&Előző fordítás" + +msgid "&Previous Translation" +msgstr "&Előző fordítás" + +msgid "&Next translation" +msgstr "&Következő fordítás" + +msgid "&Next Translation" +msgstr "&Következő fordítás" + +msgid "P&revious unfinished" +msgstr "El&őző befejezetlen" + +msgid "P&revious Unfinished" +msgstr "El&őző befejezetlen" + +msgid "Ne&xt unfinished" +msgstr "K&övetkező befejezetlen" + +msgid "Ne&xt Unfinished" +msgstr "K&övetkező befejezetlen" + +msgid "Previous plural form" +msgstr "Előző többes számú alak" + +msgid "Previous Plural Form" +msgstr "Előző többes számú alak" + +msgid "Next plural form" +msgstr "Következő többes számú alak" + +msgid "Next Plural Form" +msgstr "Következő többes számú alak" + +msgid "&Online help" +msgstr "&Online súgó" + +msgid "&Online Help" +msgstr "&Online súgó" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext kézikönyv" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext kézikönyv" + +msgid "&About Poedit" +msgstr "Poedit &névjegye" + +msgid "&About" +msgstr "&Névjegy" + +msgid "Extractor setup" +msgstr "Kivonatoló beállítása" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Kiterjesztések listája pontosvesszővel elválasztva (pl. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Végrehajtás:" + +msgid "Command to extract translations:" +msgstr "Fordítás kivonatoló parancs:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ezzel a paranccsal lesz indítva a kivonatoló.\n" +"%o jelenti a kimeneti fájl nevét, %K a kulcsszavak\n" +"listáját, %F a bemeneti fájlokat,\n" +" %C pedig a karakterkódolást (lásd lejjebb)." + +msgid "An item in keywords list:" +msgstr "Egy elem a kulcsszavak listájában:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ez minden kulcsszónál egyszer a parancssor\n" +"végéhez lesz fűzve. %k jelenti a kulcsszót." + +msgid "An item in input files list:" +msgstr "Egy elem a bemeneti fájlok listájában:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ez minden bemeneti fájlnál egyszer a parancssor\n" +"végéhez lesz fűzve. %f jelenti a fájl nevét." + +msgid "Source code charset:" +msgstr "Forráskód karakterkódolás:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ez csak akkor lesz a parancssorhoz fűzve, ha forráskód\n" +"karakterkódolás meg lett adva. %c jelenti a karakterkódolás értékét." + +msgid "Catalog properties" +msgstr "Katalógus tulajdonságok" + +msgid "Project name and version:" +msgstr "Projekt neve és verziószáma:" + +msgid "Plural Forms:" +msgstr "Többes számú alakok:" + +msgid "Use default rules for this language" +msgstr "Alapértelmezett szabályok használata ehhez a nyelvhez" + +msgid "Use custom expression" +msgstr "Egyéni kifejezés használata" + +msgid "Learn about plural forms" +msgstr "Tudjon meg többet a többes számú alakokról" + +msgid "Charset:" +msgstr "Karakterkódolás:" + +msgid "Team:" +msgstr "Csapat:" + +msgid "Team's email address:" +msgstr "Csapat e-mail címe:" + +msgid "Translation properties" +msgstr "Fordítás tulajdonságai" + +msgid "Sources paths" +msgstr "Források útvonalai" + +msgid "Extract text from source files in the following directories:" +msgstr "Szövegek kinyerése a következő könyvtárakban lévő forrásfájlokból:" + +msgid "Base path:" +msgstr "Alap útvonal:" + +msgid "Sources keywords" +msgstr "Források kulcsszavai" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Használja ezeket a kulcsszavakat (függvény neveket) a forrásfájlokban lévő\n" +"lefordítható szövegek felismeréséhez:" + +msgid "Learn about gettext keywords" +msgstr "Tudjon meg többet a gettext kulcsszavakról" + +msgid "Update summary" +msgstr "Frissítési összefoglaló" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ezek a katalógusból hiányzó szövegek voltak megtalálhatóak a forrásokban.\n" +"A Poedit most hozzáadja őket a katalógushoz." + +msgid "New strings" +msgstr "Új szövegek" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ezek a szövegek már nem találhatóak meg a forrásokban.\n" +"A Poedit most törli őket a katalógusból." + +msgid "Obsolete strings" +msgstr "Elavult szövegek" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 új, 0 elavult)" + +msgid "Open" +msgstr "Megnyitás" + +msgid "Save catalog" +msgstr "Katalógus mentése" + +msgid "Validate" +msgstr "Érvényesítés" + +msgid "Check for errors in the translation" +msgstr "Hibák keresése a fordításban" + +msgid "Update" +msgstr "Frissítés" + +msgid "Update catalog - synchronize it with sources" +msgstr "Katalógus frissítése - szinkronizálás a forrásokhoz" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Bekapcsolva, ha a kijelölt szöveg fordítása még bizonytalan" + +msgid "Show or hide the sidebar" +msgstr "Oldalsáv megjelenítése/elrejtése" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Előző forrásszöveg:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"A régi forrásszöveg (a frissítést megelőző állapotú), ami bizonytalan " +"fordításnak tekinthető." + +msgid "Notes for translators:" +msgstr "Megjegyzések a fordítóknak:" + +msgid "Add comment" +msgstr "Hozzászólás" + +msgid "Add Comment" +msgstr "Hozzászólás" + +msgid "Translation suggestions:" +msgstr "Fordítási javaslatok:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nincs találat" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nincs találat" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Erre a karakterláncra a Poedit fordítási memóriájában találtunk rá." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Új: %i, elavult: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importálandó fordítások: %d" + +msgid "Poedit Update" +msgstr "Poedit frissítés" + +msgid "Preparing migration..." +msgstr "Áttelepítés előkészítése..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Áttelepítés kimeneti állapota: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "A Poeditnek fordítási memóriát egy új formátumba kell átalakítania" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"A Poedit indítása előtt ezt el kell végezni. Ez eltarthat néhány percig, ha " +"sok tárolt fordítás, de rendes körülmények sokkal gyorsabb." + +msgid "Proceed" +msgstr "Tovább" + +msgid "Translation memory migration failed." +msgstr "Fordítási memória áttelepítése sikertelen." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"A Ön fordítási memóriájának adatai nem lettek áttelepítve. A hiba a " +"következő:\n" +"\n" +"%s\n" +"Kérjük, írjon help@poedit.net e-mail címre, és mi ki fogjuk javítani." + +msgid "Cannot create temporary directory." +msgstr "Az ideiglenes fájlok könyvtárát nem lehet létrehozni." + +msgid "Welcome to Poedit" +msgstr "Üdvözöljük a Poeditnél" + +msgid "Edit a translation" +msgstr "Fordítás szerkesztése" + +msgid "Open an existing PO file and edit the translation." +msgstr "Egy létező PO fájl megnyitása, és a fordítás szerkesztése" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Egy már meglévő PO fájl vagy POT sablon kiválasztása és új fordítás " +"készítése belőle." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Együttműködés a Crowdin-nel egy fordításban" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Töltsön le egy fájlt egy Crowdin projektből, fordítsa le, majd " +"szinkronizálja Crowdin-en lévőkkel." + +msgid "What is Crowdin?" +msgstr "Mi az a Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Nem léteznek fordítások. Ez szokatlan." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"A Gettext rendszerben a fordítható bejegyzések nem adhatók hozzá kézzel, a " +"kinyerésük a forráskódból\n" +"automatikusan történik. Ily módon mindig naprakész és pontos lesz.\n" +"A fordítók jellemzően a fejlesztők által számukra készített PO sablon " +"fájlokat (POT) használják." + +msgid "(Learn more about GNU gettext)" +msgstr "(Tudjon meg többet a GNU gettextről)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"A legegyszerűbb módja a katalógus kitöltésének, ha frissíti egy POT fájlból:" + +msgid "Update from POT" +msgstr "Frissítés &POT fájlból…" + +msgid "Take translatable strings from an existing POT template." +msgstr "Lefordítható karakterláncok egy már létező POT sablonból" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Közvetlenül a forráskódból is kinyerhet lefordítható karaktersorozatokat:" + +msgid "Extract from sources" +msgstr "Kinyerés forrás fájlból" + +msgid "Configure source code extraction in Properties." +msgstr "Forráskód extrakció konfigurálása a Tulajdonságok panelen" + +msgid "Sync" +msgstr "Szinkronizáció" + +msgid "Synchronize the translation with Crowdin" +msgstr "Fordítások szinkronizálása a Crowdin-nel" diff --git a/locales/hy.mo b/locales/hy.mo new file mode 100644 index 0000000000000000000000000000000000000000..b05f770899be8af318adde001e4235af56db8b51 GIT binary patch literal 57703 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\n" +"Language-Team: Armenian\n" +"Language: hy_AM\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: hy-AM\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Թաքցնել ծանուցումը" + +msgid "Don't Show Again" +msgstr "Այլևս չցուցադրել" + +msgid "Don't show again" +msgstr "Այլևս չցուցադրել" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i Õ¿Õ¸Õ²Õ¨ '%s' ֆայլում Õ³Õ«Õ·Õ¿ Õ¹Õ¥Õ¶ Õ¢Õ¥Õ¼Õ¶Õ¾Õ¥Õ¬:" +msgstr[1] "%i տողերը '%s' ֆայլում Õ³Õ«Õ·Õ¿ Õ¹Õ¥Õ¶ Õ¢Õ¥Õ¼Õ¶Õ¾Õ¥Õ¬:" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d Õ¿Õ¸Õ²Õ« '%s' ֆայլը Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® Õ§ (անվավեր %s Õ¿Õ¾ÕµÕ¡Õ¬):" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Այլակերպված '%s' գլխագիր" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Գրացուցակի Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® ֆայլ. Õ¥Õ¦Õ¡Õ¯Õ« ձև msgstr-Õ¨ օգտագործում Õ§ msgid_plural-Õ« Õ°Õ¥Õ¿" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Գրացուցակի Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® ֆայլ. Õ¥Õ¦Õ¡Õ¯Õ« ձև msgstr-Õ¨ օգտագործում Õ§ առանց msgid_plural-Õ«" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "Սխալ՝ գրացուցակը Õ¢Õ¥Õ¼Õ¶Õ¥Õ¬Õ«Õ½: Որոշ տվյալներ բացակայում Õ¥Õ¶ Õ¯Õ¡Õ´ Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® Õ¥Õ¶:" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Հնարավոր Õ¹Õ§ Õ¢Õ¥Õ¼Õ¶Õ¥Õ¬ %s ֆայլը: Հնարավոր Õ§ Õ¡ÕµÕ¶ Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® Õ§:" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' ֆայլը Õ´Õ«Õ¡ÕµÕ¶ կարդալու համար Õ§ և Õ¹Õ« կարող ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¾Õ¥Õ¬:\n" +"Պահպանեք Õ¡ÕµÕ¶ Õ¡ÕµÕ¬ անունով:" + +#, c-format +msgid "Couldn't save file %s." +msgstr "Հնարավոր Õ¹Õ§ ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¥Õ¬ %s ֆայլը:" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Ֆայլը նորմալ ձևաչափելու խնդիր (բայց Õ¡ÕµÕ¶ հաջողությամբ ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¾Õ¥Õ¬ Õ§):" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Գրացուցակը Õ¹Õ« կարող ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¾Õ¥Õ¬ '%s' կոդավորմամբ, Õ«Õ¶Õ¹ÕºÕ¥Õ½ Õ¶Õ·Õ¾Õ¡Õ® Õ§ " +"կարգավորումներում:\n" +"\n" +"Ô±ÕµÕ¶ ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¾Õ¥Õ¬ Õ§ UTF-8-Õ¸Õ¾ և կարգավորումները փոփոխվել Õ¥Õ¶ համապատասխանաբար:" + +msgid "Error saving catalog" +msgstr "Սխալ՝ գրացուցակը ÕºÕ¡Õ°ÕºÕ¡Õ¶Õ¥Õ¬Õ«Õ½" + +msgid "PO Translation Files" +msgstr "PO թարգմանության ֆայլեր" + +msgid "POT Translation Templates" +msgstr "POT թարգմանության ֆայլեր" + +msgid "All Translation Files" +msgstr "Թարգմանության բոլոր ֆայլերը" + +msgid "Merging differences..." +msgstr "Տարբերությունները ձուլվում Õ¥Õ¶..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s'-Õ¨ վավեր POT ֆայլ Õ¹Õ§:" + +msgid "(Use default language)" +msgstr "(Օգտ. Õ°Õ«Õ´Õ¶Õ¡Õ¯Õ¡Õ¶ լեզուն)" + +msgid "Select your preferred language" +msgstr "Ընտրեք Ձեր նախընտրած լեզուն" + +msgid "Language selection" +msgstr "Ô¼Õ¥Õ¦Õ¾Õ« ընտրություն" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Կիրառֆելու համար պետք Õ§ վերագործարկեք Poedit-Õ¨" + +msgid "Downloading translations is disabled in this project." +msgstr "Թարգմանությունների ներբեռնումը Õ¡Õ¶Õ»Õ¡Õ¿Õ¡Õ® Õ§ Õ¡ÕµÕ½ Õ¶Õ¡Õ­Õ¡Õ£Õ®Õ« համար:" + +msgid "Not authorized, please sign in again." +msgstr "Իսկորոշում Õ¹Õ¯Õ¡, կրկին մուտք գործեք:" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin-Õ¨ առցանց թարգմանությունների հարթակ Õ§ և թարգմանությունները " +"համատեղելու գործիք: Poedit-Õ¨ կարող Õ§ հեշտության համաժամեցնել PO ֆայլերը " +"Crowdin-ում:" + +msgid "Sign In" +msgstr "Մուտք գործել" + +msgid "Sign in" +msgstr "Մուտք գործել" + +msgid "Sign Out" +msgstr "Դուրս գրվել" + +msgid "Sign out" +msgstr "Դուրս գրվել" + +msgid "Waiting for authentication…" +msgstr "Սպասում Õ§ իսկորոշման..." + +msgid "Updating user information…" +msgstr "Թարմացնում Õ§ օգտվողի տեղեկությունը..." + +msgid "Signed in as:" +msgstr "Մուտք եք գործել որպես՝" + +msgid "Learn More About Crowdin" +msgstr "Մանրամասներ Crowdin-Õ« Õ´Õ¡Õ½Õ«Õ¶" + +msgid "Learn more about Crowdin" +msgstr "Մանրամասներ Crowdin-Õ« Õ´Õ¡Õ½Õ«Õ¶" + +msgid "Sign in to Crowdin" +msgstr "Մուտք գործել Crowdin" + +msgid "Open Crowdin translation" +msgstr "Բացել Crowdin թարգմանությունը" + +msgid "Project:" +msgstr "Նախագիծ." + +msgid "Language:" +msgstr "Լեզուն." + +msgid "File:" +msgstr "Ֆայլ." + +msgid "No translation projects listed in your Crowdin account." +msgstr "Չկան թարգմանության նախագծեր Crowdin-Õ« Ձեր հաշվում:" + +msgid "This project has no files that can be translated in Poedit." +msgstr "Ô±ÕµÕ½ Õ¶Õ¡Õ­Õ¡Õ£Õ«Õ®Õ¨ չունի ֆայլեր, որոնք կարող Õ¥Õ¶ թարգմանվել Poedit-Õ¸Õ¾:" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Ô±ÕµÕ½ ֆայլը կարող Õ§ խմբագրվել Õ´Õ«Õ¡ÕµÕ¶ Crowdin-ում:" + +msgid "Downloading latest translations…" +msgstr "Ներբեռնում Õ§ վերջին թարգմանությունները..." + +msgid "Syncing with Crowdin" +msgstr "Համաժամեցում Crowdin-Õ« Õ°Õ¥Õ¿" + +msgid "Syncing with Crowdin failed." +msgstr "Համաժամեցումը Crowdin-Õ« Õ°Õ¥Õ¿ ձախողվեց:" + +msgid "Crowdin error" +msgstr "Crowdin-Õ« Õ½Õ­Õ¡Õ¬" + +msgid "Uploading translations…" +msgstr "Թարգմանությունների վերբեռնում.." + +msgid "&Copy" +msgstr "&Պատճենել" + +msgid "Learn more" +msgstr "Մանրամասներ" + +msgid "Learn More" +msgstr "Մանրամասներ" + +#, c-format +msgid "Failed command: %s" +msgstr "Ձախողված հրաման. %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Հնարավոր Õ¹Õ¥Õ²Õ¡Õ¾ ձուլել gettext գրացուցակները:" + +msgid "Scanning files..." +msgstr "Ֆայլերի ստուգում..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Վերլուծում Õ§ %s ֆայլերը..." + +msgid "Failed to load extracted catalog." +msgstr "Ձախողվեց դուրս բերված գրացուցակի բեռնումը:" + +msgid "&Help" +msgstr "&Օգնություն" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO ֆայլերը Õ¹Õ¥Õ¶ կարող ուղղակիորեն խմբագրվել Poedit-ում:" + +msgid "Error opening file" +msgstr "Ֆայլը բացելու Õ½Õ­Õ¡Õ¬" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Փոխարենը խնդրում ենք բացել և խմբագրել Õ°Õ¡Õ´Õ¡ÕºÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶ PO ֆայլը: Երբ պահպանեք " +"այն՝ MO ֆայլը կթարմացվի:" + +msgid "don't delete temporary files (for debugging)" +msgstr "Õ¹Õ»Õ¶Õ»Õ¥Õ¬ ժամանակավոր ֆայլերը (վրիպազերծելու համար)" + +msgid "handle a poedit:// URI" +msgstr "handle a poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Հնարավոր Õ¹Õ§ հաղորդակցել Poedit-Õ« ընթացքը:" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ô±Õ¶Õ°Õ¡ÕµÕ¿ բացառություն. %s" + +msgid "Unhandled exception occurred." +msgstr "Ô±Õ¶Õ°Õ¡ÕµÕ¿ բացառություն:" + +msgid "Open catalog" +msgstr "Բացել գրացուցակ" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' ֆայլը գոյություն չունի:" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s ծրագրի Õ´Õ¡Õ½Õ«Õ¶" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Տարբերակ՝ %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Ծառայություններ" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Թաքցնել %s-Õ¨" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Թաքցնել ուրիշները" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Ցուցադրել բոլորը" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Փակել %s-Õ¨" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit-Õ¨ թարգմանությունների դյուրին խմբագիր Õ§:" + +msgid "Catalogs Manager" +msgstr "Գրացուցակների կառավար" + +msgid "Check for Updates..." +msgstr "Ստուգել թարմացումները..." + +msgid "&Edit" +msgstr "&Խմբագրել" + +msgid "Undo" +msgstr "Հետարկել" + +msgid "Redo" +msgstr "Վերարկել" + +msgid "Paste and Match Style" +msgstr "Տեղադրել և Õ¨Õ½Õ¿ Õ¸Õ³Õ«" + +msgid "Delete" +msgstr "Ջնջել" + +msgid "Spelling and Grammar" +msgstr "Ուղղագրություն և քերականություն" + +msgid "Show Spelling and Grammar" +msgstr "Ցուցադրել ուղղագրությունը և քերականությունը" + +msgid "Check Document Now" +msgstr "Ստուգել փաստաթուղթը" + +msgid "Check Spelling While Typing" +msgstr "Ստուգել ուղղագրոթյունը մուտքագրելիս" + +msgid "Check Grammar With Spelling" +msgstr "Ստուգել քերականությունը մուտքագրելիս" + +msgid "Correct Spelling Automatically" +msgstr "Ինքնաբար ուղղել" + +msgid "Substitutions" +msgstr "Փոխարինումներ" + +msgid "Show Substitutions" +msgstr "Ցուցադրել փոխարինումները" + +msgid "Smart Copy/Paste" +msgstr "Խելացի պատճենում/տեղադրում" + +msgid "Smart Quotes" +msgstr "Խելացի ծելաաչակերտներ" + +msgid "Smart Dashes" +msgstr "Խելացի գծեր" + +msgid "Smart Links" +msgstr "Խելացի հղումներ" + +msgid "Text Replacement" +msgstr "Տեքստի փոխարինում" + +msgid "Transformations" +msgstr "Փոխակերպում" + +msgid "Make Upper Case" +msgstr "Դարձնել Õ´Õ¥Õ®Õ¡Õ¿Õ¡Õ¼" + +msgid "Make Lower Case" +msgstr "Դարձնել փոքրատառ" + +msgid "Capitalize" +msgstr "Գլխատառացել" + +msgid "Speech" +msgstr "Խոսք" + +msgid "Start Speaking" +msgstr "Սկսել արտասանել" + +msgid "Stop Speaking" +msgstr "Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ արտասանումը" + +msgid "&View" +msgstr "&Տեսք" + +msgid "Enter Full Screen" +msgstr "Լրաէկրան" + +msgid "Window" +msgstr "Պատուհան" + +msgid "Minimize" +msgstr "Նվազեցնել" + +msgid "Zoom" +msgstr "Չափորոշել" + +msgid "Bring All to Front" +msgstr "Պահել բոլորը առջևում" + +msgid "PO Translation" +msgstr "PO թարգմանություն" + +msgid "The file cannot be opened." +msgstr "Ֆայլը հնարավոր Õ¹Õ§ բացել:" + +msgid "Invalid file" +msgstr "Սխալ ֆայլ" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Ֆայլը կարող Õ§ Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® Õ¬Õ«Õ¶Õ¥Õ¬ Õ¯Õ¡Õ´ Õ¸Õ¹ Poedit-Õ« ձևաչափով:" + +msgid "&Undo" +msgstr "&Հետարկել" + +msgid "&Redo" +msgstr "&Կրկնակել" + +msgid "Cu&t" +msgstr "Կտրե&Õ¬" + +msgid "Cut" +msgstr "Կտրել" + +msgid "Copy" +msgstr "Պատճենել" + +msgid "&Paste" +msgstr "&Տեղադրել" + +msgid "Paste" +msgstr "Տեղադրել" + +msgid "&Delete" +msgstr "&Ջնջել" + +msgid "Select &All" +msgstr "Նշել &բոլորը" + +msgid "Select All" +msgstr "Նշել բոլորը" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Չեք կարող գցել Õ´Õ¥Õ¯ ֆայլից Õ¡Õ¾Õ¥Õ¬Õ«Õ¶ Poedit-Õ« պատուհանում:" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' ֆայլը հաղորդագրության գրացուցակ Õ¹Õ§:" + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Ֆայլ" + +msgid "&Go" +msgstr "&Անցնել" + +msgid "Source text:" +msgstr "Սկզբնական տեքստ." + +msgid "Singular:" +msgstr "ÔµÕ¦Õ¡Õ¯Õ«." + +msgid "Plural:" +msgstr "Հոգնակի." + +msgid "Translation:" +msgstr "Թարգմանություն." + +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 ֆայլերը Õ´Õ«Õ¡ÕµÕ¶ նմուշներ Õ¥Õ¶ և Õ¹Õ¥Õ¶ պարունակում որևէ թարգմանություն:\n" +"Թարգմանություն ստեղծելու համար ստեղծեք նոր PO ֆայլ:" + +msgid "Create New Translation" +msgstr "Ստեղծել նոր թարգմանություն" + +msgid "Create new translation" +msgstr "Ստեղծել նոր թարգմանություն" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Ուղղագրության ստուգումը անջատված է, քանի որ բառարանը %s-ի համար տեղադրված չէ:" + +msgid "Install" +msgstr "Տեղադրել" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Գրացուցակը փոփոխվել է: Պահպանե՞լ փոփոխությունները:" + +msgid "Save changes" +msgstr "Պահպանել փոփոխությունները" + +msgid "Your changes will be lost if you don't save them." +msgstr "Եթե չպահպանեք փոփոխությունները, ապա կկորցնեք դրանք:" + +msgid "Save" +msgstr "Պահպանել" + +msgid "Don't save" +msgstr "Չպահպանել" + +msgid "Don't Save" +msgstr "Չպահպանել" + +msgid "Save as..." +msgstr "Պահպանել որպես..." + +msgid "Compile to..." +msgstr "Կազմարկել առ՝" + +msgid "Compiled Translation Files" +msgstr "Թարգմանության կազմարկված ֆայլեր" + +msgid "Export as..." +msgstr "Արտահանել որպես..." + +msgid "HTML Files" +msgstr "HTML ֆայլեր" + +msgid "Open catalog template" +msgstr "Բացել գրացուցակի նմուշը" + +msgid "Updating catalog" +msgstr "Գրացուցակի թարմացում" + +msgid "Source code not available." +msgstr "Սկզբնական կոդը հասանելի չէ" + +msgid "Updating failed" +msgstr "Թարմացումը ձախողվեց" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Թարգմանությունները չեն կարող թարմացվել սկզբնական կոդից, քանի որ այն չի " +"գտնվել գրացուցակի հատկություններում:" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Հնարավոր է գրացուցակի գրառումները սխալ են:" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Գրացուցակի թարմացումը ձախողվեց: Մանրամասնելու համար սեղմեք 'Մանրամասներ>>':" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d խնդիր է հայտնաբերվել թարգմանությունում:" +msgstr[1] "%d խնդիրներ են հայտնաբերվել թարգմանությունում:" + +msgid "Validation results" +msgstr "Վավերացման արդյունքներ" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Սխալներով գրառումները ցանկում նշված են կարմիր գույնով: Սխալի մանրամասները " +"կցուցադրվեն, երբ ընտրեք գրառումը:" + +msgid "The file was saved safely." +msgstr "Ֆայլը անվտանգ պահպանվել է:" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Ֆայլը անվտանգ պահպանվել է և կազմարկվել է MO ձևաչափի, բայց հնարավոր է նորմալ " +"չաշխատի:" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Ֆայլը անվտանգ պահպանվել է, բայց չի կարող կազմարկվել MO ձևաչափի և օգտագործվել:" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "Ֆայլը կազմարկվել է MO ձևաչափի, բայց հնարավոր է նորմալ չաշխատի:" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Ֆայլը հնարավոր չէ կազմարկել MO ձևաչափի և օգտագործել:" + +msgid "No problems with the translation found." +msgstr "Թարգմանության հետ կապված խնդիրներ չկան:" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Թարգմանությունը պատրաստ է օգտագործելու համար, բայց %d գրառում դեռ թարգմանված " +"չէ:" +msgstr[1] "" +"Թարգմանությունը պատրաստ է օգտագործելու համար, բայց %d գրառումներ դեռ " +"թարգմանված չեն:" + +msgid "The translation is ready for use." +msgstr "Թարգմանությունը պատրաստ է:" + +msgid "Context:" +msgstr "Համատեքստ." + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit-ը ինքնաբար ուղղել է սխալ բովանդակությունը “%s” ֆայլում:" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Ֆայլը պարունակում է կրկնօրինակված միավորներ, որոնք թույլատրված չեն PO " +"ֆայլերում և կարող են խափանել ֆայլի օգտագործումը: Poedit-ը ուղղում է խնդիրը, " +"բայց դուք պետք է վերանայեք թարգմանությունները, որոնք նշված են որպես անորոշ և " +"անհրաժեշտության դեպքում ուղղեք դրանք:" + +msgid "Language of the translation isn't set." +msgstr "Թարգմանության լեզուն նշված չէ:" + +msgid "Set Language" +msgstr "Նշել լեզուն" + +msgid "Set language" +msgstr "Նշել լեզուն" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Առաջարկությունները հասանելի չեն, եթե թարգմանվող լեզուն նորմալ նշված չէ: Այլ " +"յուրահատկություններ, ինչպես օրինակ՝ հոգնակի ձևերը, կարող են ազդվել:" + +msgid "Language of the translation is the same as source language." +msgstr "Թարգմանության լեզուն նույնն է, ինչ սկզբնականը:" + +msgid "Fix Language" +msgstr "Ուղղել լեզուն" + +msgid "Fix language" +msgstr "Ուղղել լեզուն" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Այս գրացուցակը ունի գրառումներ հոգնակի ձևով, բայց հոգնակի ձևերը կազմաձևված " +"չեն:" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Այս գրացուցակի գրառումները ունեն այլ հոգնակի ձևեր, ինչ գրացուցակի հոգնակի " +"ձևերի գլխագիրն է" + +msgid "Required header Plural-Forms is missing." +msgstr "Պահանջվող հոգնակի ձևի գլխագիրը բացակայում է" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Շարահյուսական սխալ հոգնակի ձևերի գլխագրում (\"%s\"):" + +msgid "Fix the Header" +msgstr "Ուղղել գլխագիրը" + +msgid "Fix the header" +msgstr "Ուղղել գլխագիրը" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Գրացուցակի կողմից օգտագործվող հոգնակի ձևերի արտահայտությունը անսովոր է %s-ի " +"համար:" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Վերանայել" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Սխալ՝ '%s' գրացուցակը բեռնելիս:" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Թարգմանված է՝ %d-ը %d-ից (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Մնում է՝ %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d սխալ" +msgstr[1] "%d սխալ" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d գրառում" +msgstr[1] "%d գրառում" + +msgid " (unsaved)" +msgstr "(չպահպանված)" + +msgid " (modified)" +msgstr "(փոփոխված)" + +msgid "Go" +msgstr "Անցնել" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Հնարավոր չեղավ թարմացնել թարգմանության հիշողությունը. %s" + +msgid "Purge deleted translations" +msgstr "Մաքրել ջնջված թարգմանությունները" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Հեռացնե՞լ բոլոր թարգմանությունները, որոնք այլևս չեն օգտագործվում:" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Եթե շարունակեք մաքրել, ապա նշված բոլոր թարգմանությունները կջնջվեն անվերադարձ:" + +msgid "Keep" +msgstr "Պահել" + +msgid "Purge" +msgstr "Մաքրել" + +msgid "Fill missing translations from TM" +msgstr "Լցնել թարգմանությունները ԹՀ-ից" + +msgid "Only fill in exact matches" +msgstr "Լցնել միայն ճիշտ համընկնումներով" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Հիմնականում ոչ ճշգրիտ արդյունքները լցվում են և նշվում որպես անորոշ: Նշեք այս " +"ընտրանքը, եթե ցանկանում եք առավել ճշգրիտ թարգմանություն ստանալ:" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Չնշել ճիշտ համընկնումները որպես անորոշ" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Միացրեք, եթե միայն վստահում եք Ձեր ԹՀ-ի թարգմանության որակին: Ըստ ծրագրայինի " +"բոլոր համապատասխանությունները ԹՀ-ից կնշվեն որպես անորոշ և վերանայելու կարիք " +"կլինի:" + +msgid "Fill" +msgstr "Լցնել" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d գրառում լցվել է թարգմանության հիշողությունից:" +msgstr[1] "%d գրառումներ լցվել են թարգմանության հիշողությունից:" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Թարգմանությունները նշվել են որպես անորոշ, քանի որ հնարավոր է դրանք ճիշտ " +"չլինեն: Վերանայեք դրանք:" + +msgid "No entries could be filled from the translation memory." +msgstr "Որևէ գրառում չի կարող լցվել թարգմանության հիշողությունից:" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"ԹՀ-ը չի պարունակում այս բովանդակությանը համապատասխանող որևէ տող: Սա օգտակար " +"է ինքնաբար թարգմանելու համար, եթե միայն Poedit-ը սովորում է մեծ քանակությամբ " +"թարգմանություններ, որոնք դուք ձեռքով եք կատարել:" + +msgid "Translating" +msgstr "Թարգմանություն" + +msgid "Filling missing translations from TM..." +msgstr "Բացակայող թարգմանությունների լցոնում ԹՀ-ից... " + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Թարգմանված է %u տող" +msgstr[1] "Թարգմանված է %u տող" + +msgid "Copy from source text" +msgstr "Պատճենել սկզբնական տեքստից" + +msgid "Copy from Source Text" +msgstr "Պատճենել սկզբնական տեքստից" + +msgid "Clear translation" +msgstr "Մաքրել թարգմանությունը" + +msgid "Clear Translation" +msgstr "Մաքրել թարգմանությունը" + +msgid "Edit comment" +msgstr "Խմբագրել մեկնաբանությունը" + +msgid "Edit Comment" +msgstr "Խմբագրել մեկնաբանությունը" + +msgid "References:" +msgstr "Հղումներ:" + +msgid "Everything" +msgstr "Ամենը" + +#, c-format +msgid "Form %i" +msgstr "%i-ից" + +msgid "Singular" +msgstr "Եզակի" + +msgid "Zero" +msgstr "Զրո" + +msgid "One" +msgstr "Մեկ" + +msgid "Two" +msgstr "Երկու" + +msgid "Plural" +msgstr "Հոգնակի" + +msgid "Other" +msgstr "Այլ" + +msgid "&Bookmarks" +msgstr "&Էջանիշեր" + +#, c-format +msgid "Set bookmark %i" +msgstr "Նշել էջանիշ %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Անցնել %i էջանիշին" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Նշել էջանիշ %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Անցնել %i էջանիշին" + +msgid "Hide Sidebar" +msgstr "Թաքցնել կողագոտին" + +msgid "Show Sidebar" +msgstr "Ցուցադրել կողագոտին" + +msgid "Hide Status Bar" +msgstr "Թաքցնել Վիճակի գոտին" + +msgid "Show Status Bar" +msgstr "Ցուցադրել Վիճակի գոտին" + +msgid "Source text" +msgstr "Սկզբնական տեքստ" + +msgid "Translation" +msgstr "Թարգմանություն" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Սկզբնական տեքստ՝ %s" + +msgid "unknown language" +msgstr "անհայտ լեզու" + +#, c-format +msgid "Translation — %s" +msgstr "Թարգմանություն՝ %s" + +msgid "Error:" +msgstr "Սխալ." + +msgid "Source file" +msgstr "Սկզբնական ֆայլը" + +msgid "Source file occurrence:" +msgstr "Սկզբնական ֆայլ." + +msgid "Open in Editor" +msgstr "Բացել Խմբագրիչով" + +msgid "Open in editor" +msgstr "Բացել Խմբագրիչով" + +msgid "No references for the selected item." +msgstr "Հղում չկա ընտրվածի համար:" + +#, c-format +msgid "Error opening file %s!" +msgstr "Սխալ՝ %s ֆայլը բացելիս:" + +msgid "Find" +msgstr "Գտնել" + +msgid "Replace" +msgstr "Փոխարինել" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Ընտրանքներ" + +msgid "Ignore case" +msgstr "Անտեսել գրանցատեղին" + +msgid "Wrap around" +msgstr "Ծալել շուրջը" + +msgid "Whole words only" +msgstr "Միայն ամբողջ բառը" + +msgid "Find in source texts" +msgstr "Գտնել սկզբնական տեքստում" + +msgid "Find in translations" +msgstr "Գտնել թարգմանություններում" + +msgid "Find in comments" +msgstr "Գտնել մեկնաբանություններում" + +msgid "Close" +msgstr "Փակել" + +msgid "Replace All" +msgstr "Փոխարինել բոլորը" + +msgid "Replace all" +msgstr "Փոխարինել բոլորը" + +msgid "< &Previous" +msgstr "« &Նախորդ" + +msgid "&Next >" +msgstr "&Հաջորդ »" + +msgid "String to find" +msgstr "Ինչ փնտրել" + +msgid "Replacement string" +msgstr "Ինչով փոխարինել" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Հնարավոր չէ կատարել %s ծրագիրը" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Լեզվի կոդը կամ անունը (օրինակ՝ hy_am)" + +msgid "Translation Language" +msgstr "Թարգմանության լեզուն" + +msgid "Language of the translation:" +msgstr "Թարգմանության լեզուն." + +msgid "Poedit - Catalogs manager" +msgstr "Poedit-ի Գրացուցակների կառավար" + +msgid "Catalog" +msgstr "Գրացուցակ" + +msgid "Total" +msgstr "Ընդամենը" + +msgid "Untrans" +msgstr "Չթարգմանված" + +msgid "Fuzzy" +msgstr "Անորոշ" + +msgid "Bad Tokens" +msgstr "Վատ նշաններ" + +msgid "Last modified" +msgstr "Վերջին փոփոխումը" + +msgid "Select directory" +msgstr "Ընտրել գրացուցակը" + +msgid "Directories:" +msgstr "Գրացուցակներ." + +msgid "" +msgstr "<անանուն>" + +msgid "Do you want to delete the project?" +msgstr "Ջնջե՞լ նախագիծը" + +msgid "Confirmation" +msgstr "Հաստատում" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Ցանկանու՞մ եք կատարել մասսայական թարմացում\n" +"նախագծի բոլոր գրացուցակներում:" + +msgid "Information about the translator" +msgstr "Տեղեկություններ թարգմանողի մասին" + +msgid "Name:" +msgstr "Անուն." + +msgid "Your Name" +msgstr "Ձեր անունը" + +msgid "Email:" +msgstr "Էլ. փոստ." + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ձեր անունը և էլ. փոստը օգտագործվելու են միայն GNU gettext ֆայլերի " +"գլխագրերում՝ ցուցադրելու վերջին թարգմանողին:" + +msgid "Editing" +msgstr "Խմբագրում" + +msgid "Automatically compile MO file when saving" +msgstr "Պահպանելիս ինքնաբար կազմարկել MO ֆայլ" + +msgid "Show summary after catalog update" +msgstr "Ցուցադրել ամփոփում՝ գրացուցակը թարմացնելիս" + +msgid "Check spelling" +msgstr "Ստուգել ուղղագրությունը" + +msgid "Always change focus to text input field" +msgstr "Դաշտը միշտ ակտիվ դարձնել՝ տեքստ մուտքագրելու համար" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Երբեք ակտիվ չի դարձնի տողերով ցանկերը: Եթե միացված է, ապա պետք է օգտագործեք " +"ստեղնաշարի Ctrl+սլաքները, կարող եք նաև մուտքագրել անմիջապես՝ առանց Tab-ի " +"միջոցով առաջնահերթությունը փոխելու:" + +msgid "Appearance" +msgstr "Տեսք" + +msgid "Use custom list font:" +msgstr "Ցանկի տառատեսակը." + +msgid "Use custom text fields font:" +msgstr "Տեքստի տառատեսակը." + +msgid "Change UI language" +msgstr "Փոխել ծրագրի լեզուն" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(պահանջում է Windows 8 կամ ավելի նորը)" + +msgid "General" +msgstr "Գլխավոր" + +msgid "Use translation memory" +msgstr "Օգտ. թարգմանության հիշողությունը" + +msgid "Learn From Files..." +msgstr "Սովորել ֆայլերից..." + +msgid "Learn from files..." +msgstr "Սովորել ֆայլերից..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Վերակայել" + +msgid "Consult TM when updating from sources" +msgstr "Դիմել ԹՀ-ին՝ սկզբնականից թարմացնելիս" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Եթե միացված է, ապա Poedit-ը կփորձի լցնել նոր գրառումները թարգմանության\n" +"հիշողությունում առկա Ձեր նախորդ թարգմանություններով: Եթե ԹՀ-ը\n" +"դատարկ է, ապա սա օգտակար չի լինի: Ինչքան շատ թարգմանություններ եք\n" +"խմբագրում, այնքան աճում է ԹՀ-ը:" + +msgid "Stored translations:" +msgstr "Պահված թարգմանություններ՝" + +msgid "Database size on disk:" +msgstr "Շտեմարանի չափը՝" + +msgid "Select translation files to import" +msgstr "Ընտրեք ներմուծվող ֆայլերը" + +msgid "Translation Memory" +msgstr "Թարգմանության հիշողություն (ԹՀ)" + +msgid "Importing translations..." +msgstr "Թարգմանությունների ներմուծում..." + +msgid "Finalizing..." +msgstr "Ամփոփում..." + +msgid "Reset translation memory" +msgstr "Վերակայել թարգմանության հիշողությունը" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Վերակայե՞լ թարգմանության հիշողությունը" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Թարգմանության հիշողության վերակայումը անվերադարձ կջնջի բոլոր " +"թարգմանությունները:" + +msgid "Cancel" +msgstr "Չեղարկել" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "ԹՀ" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Սկզբնական կոդի արտահանիչները օգտագործվում են գտնելու թարգմանվող տողեր " +"սկզբնական կոդի ֆայլերում և դուրս բերելու դրանք, որպեսզի հնարավոր լինի " +"թարգմանել:" + +msgid "New" +msgstr "Նոր" + +msgid "Edit" +msgstr "Խմբագրել" + +msgid "Delete extractor" +msgstr "Ջնջել արտահանիչը" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Ջնջե՞լ “%s” արտահանիչը:" + +msgid "Extractors" +msgstr "Արտահանիչներ" + +msgid "Accounts" +msgstr "Հաշիվներ" + +msgid "Automatically check for updates" +msgstr "Ինքնաբար ստուգել թարմացումները" + +msgid "Include beta versions" +msgstr "Ներառյալ բետա տարբերակը" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Բետա տարբերակը պարունակում է ամենավերջին յուրահատկությունները և " +"լավարկումները, բայց կարող է կայուն չաշխատել:" + +msgid "Updates" +msgstr "Թարմացումներ" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Այս կարգավորումները վերաբերում են PO ֆայլերի ներքին ձևաչափմանը: Հարմարեցրեք " +"դրանք, եթե ունեք որոշակի պահանջներ, ինչպես օրինակ՝ տարբերակի կառավարում:" + +msgid "Line endings:" +msgstr "Տողի ավարտ." + +msgid "Unix (recommended)" +msgstr "Unix (խորհուրդ է տրվում)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Տողադարձը՝" + +msgid "Preserve formatting of existing files" +msgstr "Պահել առկա ֆայլերի ձևաչափումը" + +msgid "Advanced" +msgstr "Ընդլայնված" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s-ի կարգավորումները" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Վերցրեք և գցեք թղթապանակները այստեղ\n" +"\n" +"կամ օգտագործեք + կոճակը" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Վերցրեք և գցեք թղթապանակները այստեղ\n" +"\n" +"կամ օգտագործեք + կոճակը" + +msgid "Add Folders..." +msgstr "Հավելել թղթապանակներ..." + +msgid "Add folders..." +msgstr "Հավելել թղթապանակներ..." + +msgid "Add Files..." +msgstr "Հավելել ֆայլեր..." + +msgid "Add files..." +msgstr "Հավելել ֆայլեր..." + +msgid "Add Wildcard..." +msgstr "Հավելել դերանշան..." + +msgid "Add wildcard..." +msgstr "Հավելել դերանշան..." + +msgid "Paths" +msgstr "Ուղիներ" + +msgid "Excluded paths" +msgstr "Բացառված ուղիներ" + +msgid "Additional keywords" +msgstr "Լրացուցիչ հիմնաբառեր" + +msgid "Name of the project the translation is for" +msgstr "Թարգմանության նախագծի անունը" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "օրինակ՝ nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (խորհուրդ է տրվում)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Խնդրում ենք նախ պահպանել ֆայլը:" + +msgid "Comment:" +msgstr "Մեկնաբանություն." + +msgid "OK" +msgstr "Լավ" + +msgid "C&lear" +msgstr "Մ&աքրել" + +msgid "Clear the comment" +msgstr "Մաքրել մեկնաբանությունը" + +msgid "Create new translations project" +msgstr "Ստեղծել թարգմանության նոր նախագիծ" + +msgid "Edit the project" +msgstr "Խմբագրել նախագիծը" + +msgid "Delete the project" +msgstr "Ջնջել նախագիծը" + +msgid "Update all" +msgstr "Թարմացնել բոլորը" + +msgid "Update all catalogs in the project" +msgstr "Թարմացնել բոլոր գրացուցակները նախագծում" + +msgid "Edit project" +msgstr "Խմբագրել նախագիծը" + +msgid "Project name:" +msgstr "Նախագծի անունը." + +msgid "Browse" +msgstr "Ընտրել" + +msgid "Add directory to the list" +msgstr "Գրացուցակը հավելել ցանկում" + +msgid "&New..." +msgstr "&Նոր..." + +msgid "New from &POT/PO file..." +msgstr "Նոր &POT/PO ֆայլից..." + +msgid "New From &POT/PO File..." +msgstr "Նոր &POT/PO ֆայլից..." + +msgid "&Open..." +msgstr "&Բացել..." + +msgid "Open Recent" +msgstr "Բացել վերջինը" + +msgid "Open from Crowdin..." +msgstr "Բացել Crowdin-ից..." + +msgid "Open From Crowdin..." +msgstr "Բացել Crowdin-ից..." + +msgid "&Close" +msgstr "&Փակել" + +msgid "&Save" +msgstr "&Պահպանել" + +msgid "Save &as..." +msgstr "Պահպանել &որպես..." + +msgid "Save &As..." +msgstr "Պահպանել &որպես..." + +msgid "Compile to MO..." +msgstr "Կազմարկել MO-ի..." + +msgid "E&xport as HTML..." +msgstr "Ա&րտահանել որպես HTML..." + +msgid "Check for updates..." +msgstr "Ստուգել թարմացումները..." + +msgid "&Preferences..." +msgstr "&Կարգավորումներ" + +msgid "Catalogs &manager" +msgstr "Գրացուցակների &կառավար" + +msgid "Catalogs &Manager" +msgstr "Գրացուցակների &կառավար" + +msgid "E&xit" +msgstr "Փ&ակել" + +msgid "Quit" +msgstr "Փակել" + +msgid "Copy from singular" +msgstr "Պատճենել հոգնակիից" + +msgid "Copy From Singular" +msgstr "Պատճենել եզակիից" + +msgid "Translation is &fuzzy" +msgstr "Թարգմանությունը &անորոշ է" + +msgid "Translation Is &Fuzzy" +msgstr "Թարգմանությունը &անորոշ է" + +msgid "Edit &comment" +msgstr "Խմբագրել &մեկնաբանությունը" + +msgid "Edit &Comment" +msgstr "Խմբագրել &մեկնաբանությունը" + +msgid "Suggestions" +msgstr "Առաջարկություններ" + +msgid "&Show references" +msgstr "&Ցուցադրել հղումները" + +msgid "&Show References" +msgstr "&Ցուցադրել հղումները" + +msgid "&Find..." +msgstr "&Գտնել..." + +msgid "Replace..." +msgstr "Փոխարինել..." + +msgid "Find next" +msgstr "Գտնել հաջորդը" + +msgid "Find previous" +msgstr "Գտնել նախորդը" + +msgid "Find and Replace..." +msgstr "Գտնել և փոխարինել..." + +msgid "Find Next" +msgstr "Գտնել հաջորդը" + +msgid "Find Previous" +msgstr "Գտնել նախորդը" + +msgid "&Preferences" +msgstr "&Կարգավորումներ" + +msgid "Display entry &IDs" +msgstr "Ցուցադրել գրառումների &ID-ները" + +msgid "Display Entry &IDs" +msgstr "Ցուցադրել գրառումների &ID-ները" + +msgid "Sort by &file order" +msgstr "Խմբավորել ըստ &ֆայլի կարգի" + +msgid "Sort by &File Order" +msgstr "Խմբավորել ըստ &ֆայլի կարգի" + +msgid "Sort by &source" +msgstr "Խմբավորել ըստ &սկզբնականի" + +msgid "Sort by &Source" +msgstr "Խմբավորել ըստ &սկզբնականի" + +msgid "Sort by &translation" +msgstr "Խմբավորել ըստ &թարգմանության" + +msgid "Sort by &Translation" +msgstr "Խմբավորել ըստ &թարգմանության" + +msgid "&Group by context" +msgstr "&Խմբավորել ըստ համատեքստի" + +msgid "&Group By Context" +msgstr "&Խմբավորել ըստ համատեքստի" + +msgid "Entries with errors first" +msgstr "Նախ սխալներով գրառումները" + +msgid "Entries with Errors First" +msgstr "Նախ սխալներով գրառումները" + +msgid "&Untranslated entries first" +msgstr "&Նախ չթարգմանվածները" + +msgid "&Untranslated Entries First" +msgstr "&Նախ չթարգմանվածները" + +msgid "Show sidebar" +msgstr "Ցուցադրել կողագոտին" + +msgid "Show status bar" +msgstr "Ցուցադրել վիճակի գոտին" + +msgid "C&atalog" +msgstr "Գ&րացուցակ" + +msgid "&Update from sources" +msgstr "&Թարմացնել սկզբնականից" + +msgid "&Update from Sources" +msgstr "&Թարմացնել սկզբնականից" + +msgid "Update from &POT file..." +msgstr "Թարմացնել &POT ֆայլից..." + +msgid "Update from &POT File..." +msgstr "Թարմացնել &POT ֆայլից..." + +msgid "Sync with Crowdin" +msgstr "Սինք Crowdin-ի հետ" + +msgid "Fill missing translations from &TM..." +msgstr "Լցնել բացակայող թարգմանությունները &ԹՀ-ից..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Լցնել բացակայող թարգմանությունները &ԹՀ-ից..." + +msgid "&Purge deleted translations" +msgstr "&Մաքրել ջնջված թարգմանությունները" + +msgid "&Purge Deleted Translations" +msgstr "&Մաքրել ջնջված թարգմանությունները" + +msgid "&Validate translations" +msgstr "&Վավերացնել թարգմանությունները" + +msgid "&Validate Translations" +msgstr "&Վավերացնել թարգմանությունները" + +msgid "&Properties..." +msgstr "&Հատկություններ" + +msgid "&Done and next" +msgstr "&Պատրաստ է և հաջորդը" + +msgid "&Done and Next" +msgstr "&Պատրաստ է և հաջորդը" + +msgid "&Previous translation" +msgstr "&Նախորդ թարգմանությունը" + +msgid "&Previous Translation" +msgstr "&Նախորդ թարգմանությունը" + +msgid "&Next translation" +msgstr "&Հաջորդ թարգմանությունը" + +msgid "&Next Translation" +msgstr "&Հաջորդ թարգմանությունը" + +msgid "P&revious unfinished" +msgstr "Ն&ախորդ անավարտը" + +msgid "P&revious Unfinished" +msgstr "Ն&ախորդ անավարտը" + +msgid "Ne&xt unfinished" +msgstr "Հաջ&որդ անավարտը" + +msgid "Ne&xt Unfinished" +msgstr "Հաջ&որդ անավարտը" + +msgid "Previous plural form" +msgstr "Նախորդ հոգնակին" + +msgid "Previous Plural Form" +msgstr "Նախորդ հոգնակին" + +msgid "Next plural form" +msgstr "Հաջորդ հոգնակին" + +msgid "Next Plural Form" +msgstr "Հաջորդ հոգնակին" + +msgid "&Online help" +msgstr "&Առցանց օգնություն" + +msgid "&Online Help" +msgstr "&Առցանց օգնություն" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext-ի ձեռնարկ" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext-ի ձեռնարկ" + +msgid "&About Poedit" +msgstr "Poedit-ի &մասին" + +msgid "&About" +msgstr "&Ծրագրի մասին" + +msgid "Extractor setup" +msgstr "Արտահանիչի կարգավորում" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Ընդլայնումների ցուցակը՝ առանձնացված կետ-ստորակետով (օր.՝ *.cpp;*.h)." + +msgid "Invocation:" +msgstr "Կանչ." + +msgid "Command to extract translations:" +msgstr "Թարգմանությունները դուրս հանելու հրաման." + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Այս հրամանը օգտագործվում է բացելու համար արտահանիչը:\n" +"%o-ը կավելացվի արտածվող ֆայլի անվանը, %K-ը՝\n" +"հիմնաբառի ցանկին, %F-ը՝ ներածվող ֆայլերի ցանկին,\n" +"%C-ը՝ կոդավորման դրոշակին (տես ստորև):" + +msgid "An item in keywords list:" +msgstr "Միավոր՝ հիմնաբառերի ցանկում." + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Սա կկցվի հրամանի տողին մեկ անգամ՝\n" +"յուրաքանչյուր ստեղնաշարի համար: %k-ը կավելացվի ստեղնաշարին:" + +msgid "An item in input files list:" +msgstr "Միավորը ներածված ֆայլերի ցանկում է." + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Սա կկցվի հրամանի տողին մեկ անգամ՝\n" +"յուրաքանչյուր ստեղնաշարի համար: %f-ը կավելացվի ֆայլի անվանը:" + +msgid "Source code charset:" +msgstr "Սկզբնական կոդի գրանշանը՝" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Սա կկցվի հրամանի տողին,\n" +"եթե միայն սկզբնական կոդավորում է տրված: %c-ը կավելացվի կոդավորման արժեքին:" + +msgid "Catalog properties" +msgstr "Գրացուցակի հատկությունները" + +msgid "Project name and version:" +msgstr "Նախագծի անունը և տարբեակը." + +msgid "Plural Forms:" +msgstr "Հոգնակի ձևեր." + +msgid "Use default rules for this language" +msgstr "Օգտ. այս լեզվի ծրագրային կանոնները" + +msgid "Use custom expression" +msgstr "Օգտ. հարմարեցված արտահայտություն" + +msgid "Learn about plural forms" +msgstr "Մանրամասներ հոգնակի ձևերի մասին" + +msgid "Charset:" +msgstr "Կոդավորում." + +msgid "Team:" +msgstr "Թիմ." + +msgid "Team's email address:" +msgstr "Թիմի էլ. փոստը." + +msgid "Translation properties" +msgstr "Թարգմանության հատկություններ" + +msgid "Sources paths" +msgstr "Սկզբնական ուղիներ" + +msgid "Extract text from source files in the following directories:" +msgstr "Հանել տեքստը սկզբնական ֆայլից հետևյալ տեղում՝" + +msgid "Base path:" +msgstr "Հիմնական ուղին." + +msgid "Sources keywords" +msgstr "Սկզբնականի հիմնաբառեր" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Օգտ. այս հիմնաբառերը (գործառույթի անունները)՝ ճանաչելու համար թարգմանվող " +"տողերը\n" +"սկզբնական ֆայլում." + +msgid "Learn about gettext keywords" +msgstr "Մանրամասներ gettext հիմնաբառի մասին" + +msgid "Update summary" +msgstr "Թարմացումների ամփոփում" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Այս տողերը գտնվել են սկզբնականում, բայց ոչ գրացուցակում:\n" +"nPoedit-ը դրանք կավելացնի գրացուցակում:" + +msgid "New strings" +msgstr "Նոր տող" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Այս տողերը այլևս սկզբնականում չկան:\n" +"Poedit-ը դրանք կհեռացնի գրացուցակից:" + +msgid "Obsolete strings" +msgstr "Հնացած տողեր" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 նոր, 0 հնացած)" + +msgid "Open" +msgstr "Բացել" + +msgid "Save catalog" +msgstr "Պահպանել գրացուցակը" + +msgid "Validate" +msgstr "Վավերացնել" + +msgid "Check for errors in the translation" +msgstr "Ստուգել թարգմանության սխալները" + +msgid "Update" +msgstr "Թարմացնել" + +msgid "Update catalog - synchronize it with sources" +msgstr "Թարմացնել գրացուցակը՝ համաժամեցնել այն սկզբնականի հետ" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Փոխանջատել, եթե ընտրված տողը ունի անորոշ թարգմանություն" + +msgid "Show or hide the sidebar" +msgstr "Ցուցադրել կամ թաքցնել կողագոտին" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Նախորդ սկզբնական տեքստը." + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Հին սկզբնական տեքստը (մինչև այն փոխվել է թարմացնելու ընթացքում), որը " +"համապատասխանում է անորոշ թարգմանության:" + +msgid "Notes for translators:" +msgstr "Նշում թարգմանողի համար." + +msgid "Add comment" +msgstr "Հավելել մեկնաբանություն" + +msgid "Add Comment" +msgstr "Հավելել մեկնաբանություն" + +msgid "Translation suggestions:" +msgstr "Թարգմանության առաջարկություններ." + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Չկան համապատասխանություններ" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Չկան համապատասխանություններ" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Այս տողը գտնվել է Poedit-ի թարգմանության հիշողությունում:" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Նոր՝ %i, հնացած՝ %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Թարգմանությունների ներմուծում. %d" + +msgid "Poedit Update" +msgstr "Poedit-ի թարմացում" + +msgid "Preparing migration..." +msgstr "Տեղափոխման նախապատրաստում..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Տեղափոխման ելքի վիճակ. %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit-ը պետք է փոխարկի Ձեր թարգմանության հիշողությունը նոր ձևաչափի:" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "Դա պետք է անել մինչև Poedit-ը բացելը: Կարող է տևել մի քանի րոպե:" + +msgid "Proceed" +msgstr "Ընթացք" + +msgid "Translation memory migration failed." +msgstr "Թարգմանության հիշողության տեղափոխումը ձախողվեց:" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Ձեր թարգմանության հիշողության տվյալը չի կարող տեղափոխվել: Սխալը՝ \n" +"\n" +"%s\n" +"Խնդրում ենք գրել մեզ help@poedit.net հասցեով:" + +msgid "Cannot create temporary directory." +msgstr "Հնարավոր չեղավ ստեղծել ժամանակավոր գրացուցակ:" + +msgid "Welcome to Poedit" +msgstr "Բարի գալուստ Poedit" + +msgid "Edit a translation" +msgstr "Խմբագրել թարգմանություն" + +msgid "Open an existing PO file and edit the translation." +msgstr "Բացել առկա PO ֆայլը և խմբագրել թարգմանությունը:" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Վերցնել առկա PO ֆայլ կամ POT նմուշ և ստեղծել նոր թարգմանություն:" + +msgid "Collaborate on a translation with Crowdin" +msgstr "Համագործակցել թարգմանության հարցում Crowdin-ի հետ" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "Ներբեռնել ֆայլ Crowdin-ի նախագծից, թարգմանել և համաժամեցնել:" + +msgid "What is Crowdin?" +msgstr "Ի՞նչ է Crowdin-ը" + +msgid "There are no translations. That’s unusual." +msgstr "Թարգմանություններ չկան: Դա նորմալ չէ:" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Թարգմանվող գրառումները չեն ավելացվել ձեռքով Gettext համակարգում, բայց " +"ինքնաբար դուրս են բերվել\n" +"սկզբնական կոդից: Այս ճանապարհով դրանք մնում են թարմ և ճիշտ:\n" +"Թարգմանողները սովորաբար օգտագործում են PO նմուշի ֆայլերը (POT-երը):" + +msgid "(Learn more about GNU gettext)" +msgstr "(Մանրամասներ GNU gettext-ի մասին)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Այս գրացուցակը լցնելու ամենապարզ ճանապարհը այն POT-ից թարմացնելն է." + +msgid "Update from POT" +msgstr "Թարմացնել POT-ից" + +msgid "Take translatable strings from an existing POT template." +msgstr "Վերցնել թարգմանվող տողերը առկա POT նմուշից:" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Կարող եք նաև հանել թարգմանվող տողերը անմիջականորեն սկզբնական կոդից." + +msgid "Extract from sources" +msgstr "Հանել սկզբնական կոդից" + +msgid "Configure source code extraction in Properties." +msgstr "Կազմաձևել սկզբնական կոդի դուրս բերումը Հատկություններում:" + +msgid "Sync" +msgstr "Սինք" + +msgid "Synchronize the translation with Crowdin" +msgstr "Համաժամեցնել թարգմանությունը Crowdin-ին" diff --git a/locales/id.mo b/locales/id.mo new file mode 100644 index 0000000000000000000000000000000000000000..a087d2766133cea19cd9682dd6926c6383a6b8f8 GIT binary patch literal 44953 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\n" +"Language-Team: Indonesian\n" +"Language: id_ID\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: id\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Sembunyikan pesan pemberitahuan ini" + +msgid "Don't Show Again" +msgstr "Jangan Tampilkan lagi" + +msgid "Don't show again" +msgstr "Jangan tampilkan lagi" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i baris dari berkas '%s' tak dimuat dengan benar." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Baris %d dari berkas '%s' rusak (data %s tak valid)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Header cacat: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Berkas katalog rusak: msgstr bentuk tunggal dipakai bersama dengan " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Berkas katalog rusak: bentuk msgstr jamak digunakan tanpa msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Terdapat kesalahan ketika memuat katalog. Beberapa data hilang atau rusak " +"sebagai hasilnya." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Tak bisa memuat berkas %s, mungkin cacat." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Berkas '%s' tidak bisa disimpan dan hanya bisa dibaca.\n" +"Silakan simpan dengan nama lain." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Tak bisa menyimpan berkas %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Ada masalah pemformatan berkas secara rapi (tapi berkas telah disimpan " +"secara baik)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog tak bisa disimpan dalam set karakter '%s' sebagaimana dinyatakan\n" +"dalam pengaturan katalog.\n" +"\n" +"Sebagai gantinya itu disimpan dalam UTF-8 dan pengaturan disesuaikan." + +msgid "Error saving catalog" +msgstr "Gagal menyimpan katalog" + +msgid "PO Translation Files" +msgstr "Berkas Terjemahan PO" + +msgid "POT Translation Templates" +msgstr "Templat Terjemahan POT" + +msgid "All Translation Files" +msgstr "Semua Berkas Terjemahan" + +msgid "Merging differences..." +msgstr "Menyatukan perbedaan..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' bukan berkas POT yang valid." + +msgid "(Use default language)" +msgstr "(Pakai bahasa bawaan)" + +msgid "Select your preferred language" +msgstr "Pilih bahasa yang disukai" + +msgid "Language selection" +msgstr "Pilihan bahasa" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Jalankan ulang Poedit agar efek perubahan terlihat." + +msgid "Downloading translations is disabled in this project." +msgstr "Mengunduh terjemahan dinonaktifkan dalam proyek ini." + +msgid "Not authorized, please sign in again." +msgstr "Tidak berwenang, silakan masuk lagi." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin adalah sebuah platform manajemen lokalisasi daring dan alat " +"penerjemahan kolaboratif. Poedit dapat menyelaraskan berkas PO yang dikelola " +"pada Crowdin secara mulus." + +msgid "Sign In" +msgstr "Masuk" + +msgid "Sign in" +msgstr "Masuk" + +msgid "Sign Out" +msgstr "Keluar" + +msgid "Sign out" +msgstr "Keluar" + +msgid "Waiting for authentication…" +msgstr "Menunggu otentikasi…" + +msgid "Updating user information…" +msgstr "Memutakhirkan informasi pengguna…" + +msgid "Signed in as:" +msgstr "Masuk sebagai:" + +msgid "Learn More About Crowdin" +msgstr "Pelajari Lebih Lanjut Tentang Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Pelajari lebih lanjut tentang Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Masuk ke Crowdin" + +msgid "Open Crowdin translation" +msgstr "Buka terjemahan Crowdin" + +msgid "Project:" +msgstr "Proyek:" + +msgid "Language:" +msgstr "Bahasa:" + +msgid "File:" +msgstr "Berkas:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Tidak ada proyek terjemahan yang tercantum dalam akun Crowdin Anda." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Proyek ini tidak memiliki berkas yang dapat diterjemahkan dalam Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Berkas ini hanya dapat disunting dalam antar muka web Crowdin." + +msgid "Downloading latest translations…" +msgstr "Unduh terjemahan terbaru…" + +msgid "Syncing with Crowdin" +msgstr "Menyelaraskan dengan Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Penyelarasan dengan Crowdin gagal." + +msgid "Crowdin error" +msgstr "Kesalahan Crowdin" + +msgid "Uploading translations…" +msgstr "Mengunggah terjemahan…" + +msgid "&Copy" +msgstr "&Salin" + +msgid "Learn more" +msgstr "Belajar lagi" + +msgid "Learn More" +msgstr "Pelajari Lebih Lanjut" + +#, c-format +msgid "Failed command: %s" +msgstr "Perintah gagal: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gagal menggabung katalog-katalog gettext." + +msgid "Scanning files..." +msgstr "Memindai berkas..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Mengurai berkas %s..." + +msgid "Failed to load extracted catalog." +msgstr "Gagal memuat katalog terekstrak." + +msgid "&Help" +msgstr "&Bantuan" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Berkas MO tak dapat langsung disunting di Poedit." + +msgid "Error opening file" +msgstr "Kesalahan saat membuka berkas" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Silakan membuka dan menyunting berkas PO yang sesuai. Ketika Anda menyimpan, " +"berkas MO juga akan diperbarui." + +msgid "don't delete temporary files (for debugging)" +msgstr "jangan hapus berkas sementara (untuk pengawakutuan)" + +msgid "handle a poedit:// URI" +msgstr "menangani URI poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Gagal berkomunikasi dengan proses Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Eksepsi tidak tertangani terjadi: %s" + +msgid "Unhandled exception occurred." +msgstr "Eksepsi tidak tertangani terjadi." + +msgid "Open catalog" +msgstr "Buka katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Berkas '%s' tidak ada." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Tentang %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versi %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Layanan" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Sembunyikan %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Sembunyikan Yang Lain" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Tampilkan Semua" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Keluar %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit adalah penyunting terjemahan yang mudah dipakai." + +msgid "Catalogs Manager" +msgstr "Manajer Katalog" + +msgid "Check for Updates..." +msgstr "Periksa Pemutakhiran..." + +msgid "&Edit" +msgstr "&Sunting" + +msgid "Undo" +msgstr "Batal" + +msgid "Redo" +msgstr "Jadi Lagi" + +msgid "Paste and Match Style" +msgstr "Tempel dan Cocokkan Gaya" + +msgid "Delete" +msgstr "Hapus" + +msgid "Spelling and Grammar" +msgstr "Ejaan dan Tata Bahasa" + +msgid "Show Spelling and Grammar" +msgstr "Tampilkan Ejaan dan Tata Bahasa" + +msgid "Check Document Now" +msgstr "Periksa Dokumen Sekarang" + +msgid "Check Spelling While Typing" +msgstr "Periksa Ejaan Saat Mengetik" + +msgid "Check Grammar With Spelling" +msgstr "Periksa Tata Bahasa Dengan Ejaan" + +msgid "Correct Spelling Automatically" +msgstr "Perbaiki Ejaan Secara Otomatis" + +msgid "Substitutions" +msgstr "Substitusi" + +msgid "Show Substitutions" +msgstr "Tampilkan Substitusi" + +msgid "Smart Copy/Paste" +msgstr "Salin/Tempel Cerdas" + +msgid "Smart Quotes" +msgstr "Tanda Kutip Cerdas" + +msgid "Smart Dashes" +msgstr "Garis Hubung Cerdas" + +msgid "Smart Links" +msgstr "Taut Cerdas" + +msgid "Text Replacement" +msgstr "Teks Pengganti" + +msgid "Transformations" +msgstr "Transformasi" + +msgid "Make Upper Case" +msgstr "Jadikan Huruf Besar" + +msgid "Make Lower Case" +msgstr "Jadikan Huruf Kecil" + +msgid "Capitalize" +msgstr "Kapitalkan" + +msgid "Speech" +msgstr "Pidato" + +msgid "Start Speaking" +msgstr "Mulai Bicara" + +msgid "Stop Speaking" +msgstr "Berhenti Bicara" + +msgid "&View" +msgstr "&Lihat" + +msgid "Enter Full Screen" +msgstr "Masuk Layar Penuh" + +msgid "Window" +msgstr "Jendela" + +msgid "Minimize" +msgstr "Minimalkan" + +msgid "Zoom" +msgstr "Zum" + +msgid "Bring All to Front" +msgstr "Bawa Semua ke Depan" + +msgid "PO Translation" +msgstr "Terjemahan PO" + +msgid "The file cannot be opened." +msgstr "Berkas tidak dapat dibuka." + +msgid "Invalid file" +msgstr "Berkas tak valid" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Berkas mungkin rusak atau dalam format yang tak dikenal oleh Poedit." + +msgid "&Undo" +msgstr "&Batalkan" + +msgid "&Redo" +msgstr "Jadi &Lagi" + +msgid "Cu&t" +msgstr "Po&tong" + +msgid "Cut" +msgstr "Memotong" + +msgid "Copy" +msgstr "Salin" + +msgid "&Paste" +msgstr "Tem&pel" + +msgid "Paste" +msgstr "Tempel" + +msgid "&Delete" +msgstr "&Hapus" + +msgid "Select &All" +msgstr "Pilih Semu&a" + +msgid "Select All" +msgstr "Pilih Semua" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Naik" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Turun" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" +"Poedit tidak bisa digunakan untuk membuka lebih dari 1 berkas dalam 1 window." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Berkas '%s' bukan suatu katalog pesan." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Berkas" + +msgid "&Go" +msgstr "&Lompat" + +msgid "Source text:" +msgstr "Teks sumber:" + +msgid "Singular:" +msgstr "Tunggal:" + +msgid "Plural:" +msgstr "Jamak:" + +msgid "Translation:" +msgstr "Terjemahan:" + +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 "" +"Berkas POT hanya templat dan tidak memuat terjemahan apapun.\n" +"Untuk membuat suatu terjemahan, buatlah sebuah berkas PO baru berbasis " +"templat itu." + +msgid "Create New Translation" +msgstr "Buat Terjemahan Baru" + +msgid "Create new translation" +msgstr "Buat terjemahan baru" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Pemeriksaan ejaan dinonaktifkan, karena kamus untuk %s tidak diinstal." + +msgid "Install" +msgstr "Instal" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog berubah. Apakah ingin menyimpan perubahan?" + +msgid "Save changes" +msgstr "Simpan perubahan" + +msgid "Your changes will be lost if you don't save them." +msgstr "Perubahan yang Anda buat akan hilang bila tidak Anda simpan." + +msgid "Save" +msgstr "Simpan" + +msgid "Don't save" +msgstr "Jangan disimpan" + +msgid "Don't Save" +msgstr "Jangan Simpan" + +msgid "Save as..." +msgstr "Simpan sebagai..." + +msgid "Compile to..." +msgstr "Kompail ke..." + +msgid "Compiled Translation Files" +msgstr "Berkas Terjemahan Dikompilasi" + +msgid "Export as..." +msgstr "Ekspor sebagai …" + +msgid "HTML Files" +msgstr "Berkas HTML" + +msgid "Open catalog template" +msgstr "Buka templat katalog" + +msgid "Updating catalog" +msgstr "Memperbarui katalog" + +msgid "Source code not available." +msgstr "Kode sumber tidak tersedia." + +msgid "Updating failed" +msgstr "Gagal Memperbarui" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Terjemahan tidak diperbarui dari kode sumber, karena kode tidak ditemukan di " +"lokasi yang ditentukan dalam katalog properti." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Entri di katalog mungkin salah." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Proses memperbarui katalog gagal. Klik 'Rincian>>' untuk detilnya." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d masalah pada terjemahan ditemukan." + +msgid "Validation results" +msgstr "Hasil validasi" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Entri dengan kesalahan ditandai dengan warna merah dalam daftar. Rincian " +"kesalahan akan ditampilkan ketika Anda memilih entri tersebut." + +msgid "The file was saved safely." +msgstr "Berkas disimpan dengan aman." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"File disimpan dengan aman dan dikompail ke format MO, tapi itu mungkin tidak " +"akan bekerja dengan benar." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Berkas disimpan secara aman, tapi tak bisa dikompail ke dalam format MO dan " +"dipakai." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Berkas telah dikompail ke format MO, tapi mungkin tak akan bekerja dengan " +"benar." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Berkas tak dapat dikompail ke dalam format MO dan digunakan." + +msgid "No problems with the translation found." +msgstr "Tidak ditemukan masalah dengan terjemahan." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Terjemahan siap untuk digunakan, tetapi %d entri belum diterjemahkan." + +msgid "The translation is ready for use." +msgstr "Terjemahan siap digunakan." + +msgid "Context:" +msgstr "Konteks:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit secara otomatis memperbaiki isi yang tak valid dalam berkas \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Berkas memuat butir-butir duplikat, yang tak diizinkan dalam berkas PO dan " +"akan mencegah berkas dipakai. Poedit memperbaiki masalah ini, tapi Anda " +"mesti meninjau sebarang terjemahan yang ditandai sebagai ragu dan " +"memperbaiki mereka bila perlu." + +msgid "Language of the translation isn't set." +msgstr "Bahasa terjemahan belum dipilih." + +msgid "Set Language" +msgstr "Atur bahasa" + +msgid "Set language" +msgstr "Atur bahasa" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Saran tidak tersedia jika bahasa terjemahan tidak diatur dengan benar. Fitur " +"lainnya, seperti bentuk jamak, mungkin akan terpengaruh juga." + +msgid "Language of the translation is the same as source language." +msgstr "Bahasa terjemahan sama dengan bahasa sumber." + +msgid "Fix Language" +msgstr "Perbaiki Bahasa" + +msgid "Fix language" +msgstr "Perbaiki bahasa" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Katalog ini memiliki entri dengan bentuk jamak, tapi Plural-Forms tak " +"tertata di header." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Entri pada katalog ini memiliki cacah bentuk jamak yang berbeda dengan isi " +"header Plural-Forms" + +msgid "Required header Plural-Forms is missing." +msgstr "Kurang tajuk Plural-Forms yang diperlukan." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Kesalahan sintaks di header Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Perbaiki Header" + +msgid "Fix the header" +msgstr "Perbaiki header" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Ekspresi bentuk jamak yang dipakai oleh katalog tak umum bagi %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Tinjau" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Gagal memuat berkas katalog pesan '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Diterjemahkan: %d dari %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Sisa: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d kesalahan" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entri" + +msgid " (unsaved)" +msgstr " (belum disimpan)" + +msgid " (modified)" +msgstr " (telah diubah)" + +msgid "Go" +msgstr "Lanjut" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Gagal memperbarui ingatan terjemahan: %s" + +msgid "Purge deleted translations" +msgstr "Buang terjemahan yang dihapus" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Apakah Anda ingin menghapus semua terjemahan yang tak dipakai lagi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Bila Anda meneruskan pembersihan, semua terjemahan yang ditandai sebagai " +"terhapus akan dibuang secara permanen. Anda mesti menerjemahkan ulang bila " +"mereka ditambahkan kembali di masa mendatang." + +msgid "Keep" +msgstr "Pertahankan" + +msgid "Purge" +msgstr "Buang" + +msgid "Fill missing translations from TM" +msgstr "Isi terjemahan yang hilang dari TM" + +msgid "Only fill in exact matches" +msgstr "Hanya mengisi yang sama persis" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Secara default, hasil-hasil yang tak akurat diisi dan ditandai sebagai ragu. " +"Contreng pilihan ini untuk hanya menyertakan kecocokan yang akurat." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Jangan tandai yang cocok persis sebagai ragu" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Hanya fungsikan jika Anda mempercayai kualitas TM Anda. Secara default, " +"semua kecocokan dari TM ditandai sebagai ragu dan harus ditinjau." + +msgid "Fill" +msgstr "Isi" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entri diisi dari memori terjemahan." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Terjemahan ditandai sebagai ragu, karena mereka mungkin tidak akurat. Anda " +"harus meninjau mereka untuk kebenarannya." + +msgid "No entries could be filled from the translation memory." +msgstr "Tidak ada entri yang dapat diisi dari memori terjemahan." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM tidak mengandung string apapun yang mirip dengan isi dari berkas ini. Ini " +"hanya efektif untuk penerjemahan semi otomatis setelah Poedit belajar cukup " +"dari berkas yang Anda terjemahkan secara manual." + +msgid "Translating" +msgstr "Menerjemahkan" + +msgid "Filling missing translations from TM..." +msgstr "Mengisi terjemahan yang kurang dari TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u kalimat diterjemahkan" + +msgid "Copy from source text" +msgstr "Salin dari teks sumber" + +msgid "Copy from Source Text" +msgstr "Salin dari Teks Sumber" + +msgid "Clear translation" +msgstr "Bersihkan terjemahan" + +msgid "Clear Translation" +msgstr "Bersihkan Terjemahan" + +msgid "Edit comment" +msgstr "Sunting komentar" + +msgid "Edit Comment" +msgstr "Sunting Komentar" + +msgid "References:" +msgstr "Referensi:" + +msgid "Everything" +msgstr "Segalanya" + +#, c-format +msgid "Form %i" +msgstr "Formulir %i" + +msgid "Singular" +msgstr "Tunggal" + +msgid "Zero" +msgstr "Nol" + +msgid "One" +msgstr "Satu" + +msgid "Two" +msgstr "Dua" + +msgid "Plural" +msgstr "Jamak" + +msgid "Other" +msgstr "Lainnya" + +msgid "&Bookmarks" +msgstr "Penanda &Buku" + +#, c-format +msgid "Set bookmark %i" +msgstr "Atur tanda buku %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ke penanda %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Atur Tanda Buku %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ke Tanda Buku %i" + +msgid "Hide Sidebar" +msgstr "Sembunyikan Bilah Sisi" + +msgid "Show Sidebar" +msgstr "Tampilkan Bilah Sisi" + +msgid "Hide Status Bar" +msgstr "Sembunyikan Bilah Status" + +msgid "Show Status Bar" +msgstr "Tampilkan Bilah Status" + +msgid "Source text" +msgstr "Teks sumber" + +msgid "Translation" +msgstr "Terjemahan" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Teks sumber — %s" + +msgid "unknown language" +msgstr "bahasa tak dikenal" + +#, c-format +msgid "Translation — %s" +msgstr "Terjemahan — %s" + +msgid "Error:" +msgstr "Galat:" + +msgid "Source file" +msgstr "Berkas sumber" + +msgid "Source file occurrence:" +msgstr "Kemunculan berkas sumber:" + +msgid "Open in Editor" +msgstr "Buka Dalam Penyunting" + +msgid "Open in editor" +msgstr "Buka dalam penyunting" + +msgid "No references for the selected item." +msgstr "Tidak ada acuan untuk butir yang dipilih." + +#, c-format +msgid "Error opening file %s!" +msgstr "Gagal membuka berkas %s!" + +msgid "Find" +msgstr "Cari" + +msgid "Replace" +msgstr "Ganti" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opsi" + +msgid "Ignore case" +msgstr "Abaikan besar kecil huruf" + +msgid "Wrap around" +msgstr "Ulang dari awal" + +msgid "Whole words only" +msgstr "Hanya kata lengkap" + +msgid "Find in source texts" +msgstr "Cari dalam teks sumber" + +msgid "Find in translations" +msgstr "Cari dalam terjemahan" + +msgid "Find in comments" +msgstr "Cari dalam komentar" + +msgid "Close" +msgstr "Tutup" + +msgid "Replace All" +msgstr "Ganti Semua" + +msgid "Replace all" +msgstr "Ganti semua" + +msgid "< &Previous" +msgstr "< Se&belumnya" + +msgid "&Next >" +msgstr "Berikut&nya >" + +msgid "String to find" +msgstr "Kalimat yang dicari" + +msgid "Replacement string" +msgstr "Kalimat pengganti" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Tak bisa menjalankan program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kode atau Nama Bahasa (mis. en_GB)" + +msgid "Translation Language" +msgstr "Bahasa Terjemahan" + +msgid "Language of the translation:" +msgstr "Bahasa terjemahan:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Manajer katalog" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Belum" + +msgid "Fuzzy" +msgstr "Ragu" + +msgid "Bad Tokens" +msgstr "Token Rusak" + +msgid "Last modified" +msgstr "Terakhir berubah" + +msgid "Select directory" +msgstr "Pilih direktori" + +msgid "Directories:" +msgstr "Direktori:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Apakah Anda ingin menghapus projek?" + +msgid "Confirmation" +msgstr "Konfirmasi" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Apakah Anda ingin melakukan pembaruan masal\n" +"atas semua katalog di projek ini?" + +msgid "Information about the translator" +msgstr "Informasi tentang penerjemah" + +msgid "Name:" +msgstr "Nama:" + +msgid "Your Name" +msgstr "Nama Anda" + +msgid "Email:" +msgstr "Surel:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Nama dan alamat surel Anda hanya digunakan untuk menetapkan header Last-" +"Translator dari berkas gettext GNU." + +msgid "Editing" +msgstr "Penyuntingan" + +msgid "Automatically compile MO file when saving" +msgstr "Otomatis mengkompilasi berkas MO saat menyimpan" + +msgid "Show summary after catalog update" +msgstr "Perlihatkan rangkuman sesudah katalog diperbarui" + +msgid "Check spelling" +msgstr "Periksa ejaan" + +msgid "Always change focus to text input field" +msgstr "Selalu ubah fokus ke ruas masukan teks" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Jangan pernah memfokuskan ke daftar kalimat. Jika diaktifkan gunakan Ctrl-" +"panah keyboard untuk navigasi tapi juga dapat dituliskan secara langsung, " +"tanpa menekan Tab untuk merubah fokus." + +msgid "Appearance" +msgstr "Penampilan" + +msgid "Use custom list font:" +msgstr "Gunakan fonta daftar ubahan:" + +msgid "Use custom text fields font:" +msgstr "Gunakan fonta ruas teks ubahan:" + +msgid "Change UI language" +msgstr "Ubah bahasa UI" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(memerlukan Windows 8 atau yang lebih baru)" + +msgid "General" +msgstr "Umum" + +msgid "Use translation memory" +msgstr "Pakai ingatan terjemahan" + +msgid "Learn From Files..." +msgstr "Belajar Dari Berkas..." + +msgid "Learn from files..." +msgstr "Belajar dari berkas..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Reset" + +msgid "Consult TM when updating from sources" +msgstr "Periksa di TM ketika memperbarui dari sumber" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Jika difungsikan, Poedit akan mencoba untuk mengisi entri baru menggunakan\n" +"terjemahan terdahulu Anda yang tersimpan dalam memori terjemahan.\n" +"Jika TM nyaris kosong, itu akan tidak efektif. Lebih banyak\n" +"terjemahan yang Anda sunting dan semakin besar TM tumbuh, itu akan semakin " +"baik." + +msgid "Stored translations:" +msgstr "Terjemahan tersimpan:" + +msgid "Database size on disk:" +msgstr "Ukuran basis data pada disk:" + +msgid "Select translation files to import" +msgstr "Pilih berkas terjemahan yang akan diimpor" + +msgid "Translation Memory" +msgstr "Ingatan Terjemahan" + +msgid "Importing translations..." +msgstr "Mengimpor terjemahan..." + +msgid "Finalizing..." +msgstr "Finalisasi..." + +msgid "Reset translation memory" +msgstr "Reset memori terjemahan" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Apakah Anda yakin Anda ingin me-reset memori terjemahan?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Me-reset memori terjemahan akan menghapus seterusnya semua terjemahan yang " +"disimpan darinya. Anda tidak dapat membatalkan operasian ini." + +msgid "Cancel" +msgstr "Batal" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Pengekstrak kode sumber digunakan untuk menemukan kalimat yang dapat " +"diterjemahkan dalam berkas kode sumber dan mengekstrak mereka sehingga dapat " +"diterjemahkan." + +msgid "New" +msgstr "Baru" + +msgid "Edit" +msgstr "Sunting" + +msgid "Delete extractor" +msgstr "Hapus ekstraktor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Anda yakin Anda ingin menghapus ekstraktor \"%s\"?" + +msgid "Extractors" +msgstr "Pengekstrak" + +msgid "Accounts" +msgstr "Akun" + +msgid "Automatically check for updates" +msgstr "Secara otomatis memeriksa pembaruan" + +msgid "Include beta versions" +msgstr "Termasuk versi beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Versi beta berisi fitur terbaru dan perbaikan, tetapi mungkin sedikit kurang " +"stabil." + +msgid "Updates" +msgstr "Pembaruan" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Pengaturan ini mempengaruhi pemformatan internal berkas PO. Sesuaikan mereka " +"jika Anda memiliki persyaratan tertentu misalnya karena kontrol versi." + +msgid "Line endings:" +msgstr "Akhiran baris:" + +msgid "Unix (recommended)" +msgstr "Unix (disarankan)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Tekuk pada:" + +msgid "Preserve formatting of existing files" +msgstr "Pertahankan format berkas yang sudah ada" + +msgid "Advanced" +msgstr "Tingkat lanjut" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferensi %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Seret dan Jatuhkan Folder Di Sini\n" +"\n" +"atau gunakan tombol +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Folder Seret dan jatuhkan folder di sini\n" +"\n" +"atau gunakan tombol +" + +msgid "Add Folders..." +msgstr "Tambah Folder..." + +msgid "Add folders..." +msgstr "Tambah folder..." + +msgid "Add Files..." +msgstr "Tambah Berkas..." + +msgid "Add files..." +msgstr "Tambah berkas..." + +msgid "Add Wildcard..." +msgstr "Tambah Wildcard..." + +msgid "Add wildcard..." +msgstr "Tambah wildcard..." + +msgid "Paths" +msgstr "Path" + +msgid "Excluded paths" +msgstr "Path yang dikecualikan" + +msgid "Additional keywords" +msgstr "Kata kunci tambahan" + +msgid "Name of the project the translation is for" +msgstr "Terjemahan ini untuk projek bernama tersebut" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "mis. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (disarankan)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Harap simpan dulu. Seksi ini tak bisa disunting sebelum itu." + +msgid "Comment:" +msgstr "Komentar:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Bersihkan" + +msgid "Clear the comment" +msgstr "Hapus komentar" + +msgid "Create new translations project" +msgstr "Buat projek terjemahan baru" + +msgid "Edit the project" +msgstr "Menyunting projek" + +msgid "Delete the project" +msgstr "Hapus projek" + +msgid "Update all" +msgstr "Perbarui semua" + +msgid "Update all catalogs in the project" +msgstr "Perbarui semua katalog dalam projek" + +msgid "Edit project" +msgstr "Sunting projek" + +msgid "Project name:" +msgstr "Nama projek:" + +msgid "Browse" +msgstr "Ramban" + +msgid "Add directory to the list" +msgstr "Tambahkan direktori ke daftar" + +msgid "&New..." +msgstr "&Baru..." + +msgid "New from &POT/PO file..." +msgstr "Baru dari berkas &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Baru Dari Berkas &POT/PO..." + +msgid "&Open..." +msgstr "&Buka..." + +msgid "Open Recent" +msgstr "Buka Yang Baru-baru Ini" + +msgid "Open from Crowdin..." +msgstr "Buka dari Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Buka Dari Crowdin..." + +msgid "&Close" +msgstr "&Tutup" + +msgid "&Save" +msgstr "&Simpan" + +msgid "Save &as..." +msgstr "Simpan seb&agai..." + +msgid "Save &As..." +msgstr "Simp&an Sebagai..." + +msgid "Compile to MO..." +msgstr "Kompilasi ke MO..." + +msgid "E&xport as HTML..." +msgstr "Ekspor sebagai HTML…" + +msgid "Check for updates..." +msgstr "Periksa pemutakhiran..." + +msgid "&Preferences..." +msgstr "&Preferensi..." + +msgid "Catalogs &manager" +msgstr "&Manajer katalog" + +msgid "Catalogs &Manager" +msgstr "&Manajer Katalog" + +msgid "E&xit" +msgstr "&Keluar" + +msgid "Quit" +msgstr "Keluar" + +msgid "Copy from singular" +msgstr "Salin dari bentuk tunggal" + +msgid "Copy From Singular" +msgstr "Salin Dari Bentuk Tunggal" + +msgid "Translation is &fuzzy" +msgstr "Terjemahan &ragu" + +msgid "Translation Is &Fuzzy" +msgstr "Terjemahan &Ragu" + +msgid "Edit &comment" +msgstr "Sunting &komentar" + +msgid "Edit &Comment" +msgstr "Sunting &Komentar" + +msgid "Suggestions" +msgstr "Saran" + +msgid "&Show references" +msgstr "Perlihatkan referen&si" + +msgid "&Show References" +msgstr "Perlihatkan Referen&si" + +msgid "&Find..." +msgstr "&Cari..." + +msgid "Replace..." +msgstr "Ganti..." + +msgid "Find next" +msgstr "Cari berikutnya" + +msgid "Find previous" +msgstr "Cari sebelumnya" + +msgid "Find and Replace..." +msgstr "Cari dan Ganti..." + +msgid "Find Next" +msgstr "Cari Berikutnya" + +msgid "Find Previous" +msgstr "Cari Sebelumnya" + +msgid "&Preferences" +msgstr "&Preferensi" + +msgid "Display entry &IDs" +msgstr "Menampilkan &ID entri" + +msgid "Display Entry &IDs" +msgstr "Tampilkan &ID Entri" + +msgid "Sort by &file order" +msgstr "Urutkan berdasar urutan &berkas" + +msgid "Sort by &File Order" +msgstr "Urutkan Berdasar Urutan &Berkas" + +msgid "Sort by &source" +msgstr "Urutkan berdasar &sumber" + +msgid "Sort by &Source" +msgstr "Urutkan Berdasar &Sumber" + +msgid "Sort by &translation" +msgstr "Urutkan berdasar &terjemahan" + +msgid "Sort by &Translation" +msgstr "Urutkan Berdasar &Terjemahan" + +msgid "&Group by context" +msgstr "&Kelompokkan menurut konteks" + +msgid "&Group By Context" +msgstr "&Kelompokkan Menurut Konteks" + +msgid "Entries with errors first" +msgstr "Entri dengan kesalahan di awal" + +msgid "Entries with Errors First" +msgstr "Entri dengan Kesalahan Dulu" + +msgid "&Untranslated entries first" +msgstr "Entri bel&um diterjemahkan di awal" + +msgid "&Untranslated Entries First" +msgstr "Entri Bel&um Diterjemahkan Di Awal" + +msgid "Show sidebar" +msgstr "Tampilkan bilah sisi" + +msgid "Show status bar" +msgstr "Tampilkan bilah status" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "Perbar&ui dari sumber" + +msgid "&Update from Sources" +msgstr "Perbar&ui dari Sumber" + +msgid "Update from &POT file..." +msgstr "Perbarui dari berkas &POT..." + +msgid "Update from &POT File..." +msgstr "Perbarui dari Berkas &POT..." + +msgid "Sync with Crowdin" +msgstr "Selaraskan dengan Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Isi terjemahan yang kosong dari &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Isi Terjemahan Yang Kosong Dari &TM..." + +msgid "&Purge deleted translations" +msgstr "Buang terjemahan yang diha&pus" + +msgid "&Purge Deleted Translations" +msgstr "Buang Terjemahan Yang Diha&pus" + +msgid "&Validate translations" +msgstr "&Validasikan terjemahan" + +msgid "&Validate Translations" +msgstr "&Validasikan Terjemahan" + +msgid "&Properties..." +msgstr "&Properti..." + +msgid "&Done and next" +msgstr "&Beres dan berikutnya" + +msgid "&Done and Next" +msgstr "&Beres dan Berikutnya" + +msgid "&Previous translation" +msgstr "Terjemahan se&belumnya" + +msgid "&Previous Translation" +msgstr "Terjemahan Se&belumnya" + +msgid "&Next translation" +msgstr "Terjemahan sela&njutnya" + +msgid "&Next Translation" +msgstr "Terjemahan Sela&njutnya" + +msgid "P&revious unfinished" +msgstr "Belum dite&rjemahkan sebelumnya" + +msgid "P&revious Unfinished" +msgstr "Belum Dite&rjemahkan Sebelumnya" + +msgid "Ne&xt unfinished" +msgstr "Belum diterjemahkan berikutn&ya" + +msgid "Ne&xt Unfinished" +msgstr "Belum Diterjemahkan Berikutn&ya" + +msgid "Previous plural form" +msgstr "Bentuk jamak sebelumnya" + +msgid "Previous Plural Form" +msgstr "Bentuk Jamak Sebelumnya" + +msgid "Next plural form" +msgstr "Bentuk jamak berikutnya" + +msgid "Next Plural Form" +msgstr "Bentuk Jamak Selanjutnya" + +msgid "&Online help" +msgstr "Bantuan &daring" + +msgid "&Online Help" +msgstr "Bantuan &Daring" + +msgid "&GNU gettext manual" +msgstr "Manual gettext &GNU" + +msgid "&GNU gettext Manual" +msgstr "Manual gettext &GNU" + +msgid "&About Poedit" +msgstr "Tent&ang Poedit" + +msgid "&About" +msgstr "Ihw&al" + +msgid "Extractor setup" +msgstr "Penyiapan ekstraktor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Daftar ekstensi dipisah dengan titik koma (mis. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Invokasi:" + +msgid "Command to extract translations:" +msgstr "Perintah untuk mengekstrak terjemahan:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ini adalah perintah yang dipakai untuk meluncurkan pengekstrak.\n" +"%o diubah ke nama berkas keluaran, %K ke daftar\n" +"kata kunci, %F ke daftar berkas masukan,\n" +"%C ke flag set karakter (lihat di bawah)." + +msgid "An item in keywords list:" +msgstr "Satu item di daftar kata kunci:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ini akan dilampirkan ke baris perintah sekali\n" +"untuk tiap kata kunci. %k diubah ke kata kunci." + +msgid "An item in input files list:" +msgstr "Satu item di daftar berkas masukan:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ini akan dilampirkan ke baris perintah sekali\n" +"untuk tiap berkas masukan. %f diubah ke nama berkas" + +msgid "Source code charset:" +msgstr "Set karakter kode sumber:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ini akan dilampirkan ke baris perintah\n" +"hanya jika sumber kode set karakter telah diberikan. %c diubah ke nilai set " +"karakter." + +msgid "Catalog properties" +msgstr "Properti katalog" + +msgid "Project name and version:" +msgstr "Nama dan versi projek:" + +msgid "Plural Forms:" +msgstr "Bentuk jamak:" + +msgid "Use default rules for this language" +msgstr "Pakai aturan baku untuk bahasa ini" + +msgid "Use custom expression" +msgstr "Gunakan ekspresi pilihan sendiri" + +msgid "Learn about plural forms" +msgstr "Belajar tentang bentuk jamak" + +msgid "Charset:" +msgstr "Set karakter:" + +msgid "Team:" +msgstr "Tim:" + +msgid "Team's email address:" +msgstr "Alamat surel Tim:" + +msgid "Translation properties" +msgstr "Properti terjemahan" + +msgid "Sources paths" +msgstr "Path sumber" + +msgid "Extract text from source files in the following directories:" +msgstr "Ekstrak teks dari berkas sumber di direktori berikut:" + +msgid "Base path:" +msgstr "Path dasar:" + +msgid "Sources keywords" +msgstr "Kata-kata kunci sumber" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Gunakan kata-kata kunci ini (nama-nama fungsi) untuk mengenali\n" +"kalimat yang dapat diterjemahkan di berkas sumber:" + +msgid "Learn about gettext keywords" +msgstr "Belajar tentang kata kunci gettext" + +msgid "Update summary" +msgstr "Perbarui rangkuman" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Kalimat ini ditemukan dalam sumber tapi tidak di katalog.\n" +"Sekarang Poedit akan menambahkan ke katalog." + +msgid "New strings" +msgstr "Kalimat baru" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Kalimat ini sudah tidak ada di sumber.\n" +"Sekarang Poedit akan menghapus dari katalog." + +msgid "Obsolete strings" +msgstr "Kalimat usang" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 baru, 0 usang)" + +msgid "Open" +msgstr "Buka" + +msgid "Save catalog" +msgstr "Simpan katalog" + +msgid "Validate" +msgstr "Validasikan" + +msgid "Check for errors in the translation" +msgstr "Periksa kesalahan dalam terjemahan" + +msgid "Update" +msgstr "Perbarui" + +msgid "Update catalog - synchronize it with sources" +msgstr "Perbarui katalog - mensinkronkan dengan sumber" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Dijungkitkan jika kalimat yang dipilih memiliki terjemahan ragu" + +msgid "Show or hide the sidebar" +msgstr "Tampilkan atau sembunyikan bilah sisi" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Teks sumber sebelumnya:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Teks sumber lama (sebelum berubah selama pemutakhiran) yang berkaitan dengan " +"terjemahan ragu." + +msgid "Notes for translators:" +msgstr "Catatan bagi para penerjemah:" + +msgid "Add comment" +msgstr "Tambah komentar" + +msgid "Add Comment" +msgstr "Tambah Komentar" + +msgid "Translation suggestions:" +msgstr "Saran terjemahan:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Tak ditemukan yang cocok" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Tak Ditemukan Yang Cocok" + +msgid "This string was found in Poedit’s translation memory." +msgstr "String ini ditemukan dalam memori terjemahan Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Baru: %i, usang: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Mengimpor terjemahan: %d" + +msgid "Poedit Update" +msgstr "Pemutakhiran Poedit" + +msgid "Preparing migration..." +msgstr "Mempersiapkan migrasi..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Status keluar migrasi: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit perlu mengkonversi ingatan terjemahan Anda ke format baru." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ini mesti dilakukan sebelum Poedit bisa dimulai. Mungkin perlu beberapa " +"menit bila Anda punya banyak terjemahan yang tersimpan, tapi biasanya jauh " +"lebih cepat." + +msgid "Proceed" +msgstr "Lanjutkan" + +msgid "Translation memory migration failed." +msgstr "Migrasi ingatan terjemahan gagal." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Data memori terjemahan tidak dapat dimigrasi. Kesalahannya:\n" +"\n" +"%s\n" +"Harap kirim surat ke help@poedit.net dan kami akan memperbaikinya." + +msgid "Cannot create temporary directory." +msgstr "Tak bisa membuat direktori sementara." + +msgid "Welcome to Poedit" +msgstr "Selamat Datang di Poedit" + +msgid "Edit a translation" +msgstr "Sunting suatu terjemahan" + +msgid "Open an existing PO file and edit the translation." +msgstr "Buka berkas PO yang ada dan sunting terjemahan tersebut." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Ambil berkas PO atau templat POT yang ada dan buat terjemahan baru darinya." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Kolaborasi penerjemahan dengan Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Unduh suatu berkas dari proyek Crowdin, terjemahkan, dan selaraskan balik " +"perubahan Anda." + +msgid "What is Crowdin?" +msgstr "Apa itu Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Tidak ada terjemahan. Itu tidak biasa." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Entri-entri yang dapat diterjemahkan tidak ditambahkan secara manual dalam " +"sistem Gettext, tapi\n" +"diekstrak secara otomatis dari kode sumber. Dengan cara ini, mereka tetap " +"mutakhir dan akurat.\n" +"Penerjemah biasanya memakai berkas templat PO (POT) yang disiapkan untuk " +"mereka oleh pengembang." + +msgid "(Learn more about GNU gettext)" +msgstr "(Belajar lebih banyak tentang gettext GNU)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Cara termudah untuk memenuhi katalog ini adalah dengan memutakhirkannya dari " +"suatu POT:" + +msgid "Update from POT" +msgstr "Perbarui dari POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "" +"Ambil kalimat-kalimat yang dapat diterjemahkan dari templat POT yang ada." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Anda juga dapat mengekstrak string yang dapat diterjemahkan secara langsung " +"dari kode sumber:" + +msgid "Extract from sources" +msgstr "Ekstrak dari sumber" + +msgid "Configure source code extraction in Properties." +msgstr "Atur konfigurasi ekstraksi kode sumber dalam Properti." + +msgid "Sync" +msgstr "Selaraskan" + +msgid "Synchronize the translation with Crowdin" +msgstr "Selaraskan terjemahan dengan Crowdin" diff --git a/locales/is.mo b/locales/is.mo new file mode 100644 index 0000000000000000000000000000000000000000..4c46a7dfce140afa107a71c04205ccc620bc2566 GIT binary patch literal 44692 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\n" +"Language-Team: Icelandic\n" +"Language: is_IS\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: is\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Fela þessi skilaboð" + +msgid "Don't Show Again" +msgstr "Ekki birta þetta aftur" + +msgid "Don't show again" +msgstr "Ekki birta aftur" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i lína úr skránni '%s' var ekki lesin rétt inn." +msgstr[1] "%i línur úr skránni '%s' voru ekki lesnar rétt inn." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Lína %d í skránni '%s' er skemmd (ekki gild %s gögn)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Rangt formaður haus: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Skemmd þýðingaskrá: eintöluform msgstr notað með msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Skemmd þýðingaskrá: fleirtöluform msgstr notað án msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Það komu upp villur við að hlaða inn þýðingaskránni. Einhver gögn gæti " +"vantað eða hafa skemmst við þetta." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Gat ekki lesið skrána %s, hún er líklega skemmd." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Aðeins er hægt að lesa skrá %s en ekki hægt að vista.\n" +"Vistaðu hana undir öðru heiti." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Gat ekki vistað skrána %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Það kom upp vandamál við að forma skrána rétt (en hún var samt vistuð rétt)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Ekki tókst að vista þýðingaskrá með '%s' stafatöflu eins og tiltekið er í " +"kjörstillingum.\n" +"\n" +"Skráin var þess vegna vistuð í UTF-8 og stillingum breytt í samræmi við það." + +msgid "Error saving catalog" +msgstr "Villa við vistun á þýðingaskrá" + +msgid "PO Translation Files" +msgstr "PO þýðingaskrár" + +msgid "POT Translation Templates" +msgstr "POT þýðingasniðmát" + +msgid "All Translation Files" +msgstr "Allar þýðingaskrár" + +msgid "Merging differences..." +msgstr "Samþætti mismun..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' er ógild POT skrá." + +msgid "(Use default language)" +msgstr "(Nota sjálfgefið tungumál)" + +msgid "Select your preferred language" +msgstr "Veldu aðaltungumálið þitt" + +msgid "Language selection" +msgstr "Velja tungumál" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Þú þarft að endurræsa Poedit til að þessi breyting taki gildi." + +msgid "Downloading translations is disabled in this project." +msgstr "Ekki er hægt að sækja þýðingar í þessu verki." + +msgid "Not authorized, please sign in again." +msgstr "Ekki leyfilegt, skráðu þig aftur inn." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." + +msgid "Sign In" +msgstr "Skrá inn" + +msgid "Sign in" +msgstr "Skrá inn" + +msgid "Sign Out" +msgstr "Skrá út" + +msgid "Sign out" +msgstr "Skrá út" + +msgid "Waiting for authentication…" +msgstr "Bíð eftir auðkenningu…" + +msgid "Updating user information…" +msgstr "Uppfæri upplýsingar um notanda…" + +msgid "Signed in as:" +msgstr "Skráður inn sem:" + +msgid "Learn More About Crowdin" +msgstr "Læra meira um Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Læra meira um Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Skrá inn í Crowdin" + +msgid "Open Crowdin translation" +msgstr "Opna Crowdin þýðingu" + +msgid "Project:" +msgstr "Verkefni:" + +msgid "Language:" +msgstr "Tungumál:" + +msgid "File:" +msgstr "File:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Engin þýðingarverkefni eru skráð á þínu Crowdin svæði." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Þetta verkefni er ekki með neinar skrár sem hægt er að þýða í Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Þessari skrá er aðeins hægt að breyta á vefsvæði Crowdin." + +msgid "Downloading latest translations…" +msgstr "Næ í nýjustu þýðingar…" + +msgid "Syncing with Crowdin" +msgstr "Samstilli við Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Samstilling við Crowdin mistókst." + +msgid "Crowdin error" +msgstr "Crowdin villa" + +msgid "Uploading translations…" +msgstr "Sendi inn þýðingar…" + +msgid "&Copy" +msgstr "&Afrita" + +msgid "Learn more" +msgstr "Vita meira" + +msgid "Learn More" +msgstr "Vita meira" + +#, c-format +msgid "Failed command: %s" +msgstr "Mislukkuð skipun: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Mistókst að sameina gettext þýðingaskrár." + +msgid "Scanning files..." +msgstr "Les skrár..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Þátta %s skrár..." + +msgid "Failed to load extracted catalog." +msgstr "Mistókst að hlaða inn lesinni þýðingaskrá." + +msgid "&Help" +msgstr "&Hjálp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Ekki er hægt að vinna beint með MO-skrár í Poedit." + +msgid "Error opening file" +msgstr "Villa við að opna skrá" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." + +msgid "don't delete temporary files (for debugging)" +msgstr "ekki eyða bráðabirgðaskrám (fyrir aflúsun)" + +msgid "handle a poedit:// URI" +msgstr "handle a poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ómeðhöndlað frávik kom upp: %s" + +msgid "Unhandled exception occurred." +msgstr "Ómeðhöndlað frávik kom upp." + +msgid "Open catalog" +msgstr "Opna þýðingaskrá" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Skráin '%s' fannst ekki." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Um %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Útgáfa %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit er auðveldur þýðingaritill." + +msgid "Catalogs Manager" +msgstr "Þýðingaskráastjórn" + +msgid "Check for Updates..." +msgstr "Athuga með uppfærslur..." + +msgid "&Edit" +msgstr "Br&eyta" + +msgid "Undo" +msgstr "Afturkalla" + +msgid "Redo" +msgstr "Endurtaka" + +msgid "Paste and Match Style" +msgstr "Líma og samsvara stíl" + +msgid "Delete" +msgstr "Eyða" + +msgid "Spelling and Grammar" +msgstr "Stafsetning og málfræði" + +msgid "Show Spelling and Grammar" +msgstr "Birta stafsetningu og málfræði" + +msgid "Check Document Now" +msgstr "Athuga skjal núna" + +msgid "Check Spelling While Typing" +msgstr "Yfirfara stafsetningu á meðan skrifað er" + +msgid "Check Grammar With Spelling" +msgstr "Yfirfara málfræði ásamt stafsetningu" + +msgid "Correct Spelling Automatically" +msgstr "Leiðrétta stafsetningu sjálfvirkt" + +msgid "Substitutions" +msgstr "Útskiptingar" + +msgid "Show Substitutions" +msgstr "Birta útskiptingar" + +msgid "Smart Copy/Paste" +msgstr "Snjöll afritun/líming" + +msgid "Smart Quotes" +msgstr "Snjallar gæsalappir" + +msgid "Smart Dashes" +msgstr "Snjöll strik" + +msgid "Smart Links" +msgstr "Snjallir tenglar" + +msgid "Text Replacement" +msgstr "Útskipting texta" + +msgid "Transformations" +msgstr "Umbreytingar" + +msgid "Make Upper Case" +msgstr "Gera allt að hástöfum" + +msgid "Make Lower Case" +msgstr "Gera allt að lágstöfum" + +msgid "Capitalize" +msgstr "Byrja öll orð á hástaf" + +msgid "Speech" +msgstr "Tala" + +msgid "Start Speaking" +msgstr "Hefja lestur" + +msgid "Stop Speaking" +msgstr "Stöðva lestur" + +msgid "&View" +msgstr "S&koða" + +msgid "Enter Full Screen" +msgstr "Fylla skjáinn" + +msgid "Window" +msgstr "Gluggi" + +msgid "Minimize" +msgstr "Lágmarka" + +msgid "Zoom" +msgstr "Aðdráttur" + +msgid "Bring All to Front" +msgstr "Færa allt fremst" + +msgid "PO Translation" +msgstr "PO þýðing" + +msgid "The file cannot be opened." +msgstr "Ekki hægt að opna þessa skrá." + +msgid "Invalid file" +msgstr "Ógild skrá" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Skráin gæti verið skemmd eða á sniði sem Poedit þekkir ekki." + +msgid "&Undo" +msgstr "&Afturkalla" + +msgid "&Redo" +msgstr "Endu&rtaka" + +msgid "Cu&t" +msgstr "&Klippa" + +msgid "Cut" +msgstr "Klippa" + +msgid "Copy" +msgstr "Afrita" + +msgid "&Paste" +msgstr "&Líma" + +msgid "Paste" +msgstr "Líma" + +msgid "&Delete" +msgstr "&Eyða" + +msgid "Select &All" +msgstr "Velja &allt" + +msgid "Select All" +msgstr "Velja allt" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Upp" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Niður" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Þú getur ekki sleppt fleiri en einni skrá í Poedit glugga." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Skráin '%s' er ekki þýðingaskrá." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Skrá" + +msgid "&Go" +msgstr "&Fara" + +msgid "Source text:" +msgstr "Frumtexti:" + +msgid "Singular:" +msgstr "Eintala:" + +msgid "Plural:" +msgstr "Fleirtala:" + +msgid "Translation:" +msgstr "Þýðing:" + +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 skrár eru aðeins þýðingasniðmát og innihalda engar þýðingar.\n" +"Til að þýða verður að búa til nýja PO skrá byggða á sniðmátinu." + +msgid "Create New Translation" +msgstr "Búa til nýja þýðingu" + +msgid "Create new translation" +msgstr "Búa til nýja þýðingu" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Stafsetningaryfirferð er óvirk, því ekki er búið að setja upp orðasafn fyrir " +"tungumálið %s." + +msgid "Install" +msgstr "Setja upp" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Þýðingaskrá hefur verið breytt. Viltu vista breytingar?" + +msgid "Save changes" +msgstr "Vista breytingar" + +msgid "Your changes will be lost if you don't save them." +msgstr "Breytingar tapast ef þú vistar þær ekki." + +msgid "Save" +msgstr "Vista" + +msgid "Don't save" +msgstr "Ekki vista" + +msgid "Don't Save" +msgstr "Ekki vista" + +msgid "Save as..." +msgstr "Vista sem..." + +msgid "Compile to..." +msgstr "Vistþýða í..." + +msgid "Compiled Translation Files" +msgstr "Vistþýddar þýðingaskrár" + +msgid "Export as..." +msgstr "Flytja út sem..." + +msgid "HTML Files" +msgstr "HTML skrár" + +msgid "Open catalog template" +msgstr "Opna þýðingaskráarsniðmát" + +msgid "Updating catalog" +msgstr "Uppfæri þýðingaskrá" + +msgid "Source code not available." +msgstr "Upprunakóði ekki tiltækur." + +msgid "Updating failed" +msgstr "Uppfærsla mistókst" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Færslur í þýðingaskránni eru líklega rangar." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Uppfærsla á þýðingaskrá mistókst. Ýttu á 'Meira>>' fyrir frekari upplýsingar." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d galli fannst á þýðingunni." +msgstr[1] "%d gallar fundust á þýðingunni." + +msgid "Validation results" +msgstr "Niðurstöður prófunar" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Færslur með villum eru auðkenndar með rauðum lit í listanum. Nánari " +"upplýsingar um villurnar birtast þegar slík færsla er valin." + +msgid "The file was saved safely." +msgstr "Skráin var sannlega vistuð." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Skráin var sannlega vistuð og vistþýdd yfir á MO-form , en mun líklega ekki " +"virka rétt." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Skráin var sannlega vistuð, en ekki er hægt að vistþýða hana yfir á MO-form " +"til notkunar" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Skráin var sannlega vistþýdd yfir á MO-form , en mun líklega ekki virka rétt." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Ekki er hægt að vistþýða skrána yfir á MO-form til notkunar." + +msgid "No problems with the translation found." +msgstr "Engin vandamál fundust í þýðingunni." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Þýðingin er tilbúin til notkunar, en %d færsla er samt óþýdd." +msgstr[1] "Þýðingin er tilbúin til notkunar, en %d færslur er samt óþýddar." + +msgid "The translation is ready for use." +msgstr "Þýðingaminnið er tilbúið til notkunar." + +msgid "Context:" +msgstr "Samhengi:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "Tungumál þýðingar er ekki stillt." + +msgid "Set Language" +msgstr "Settu inn tungumál" + +msgid "Set language" +msgstr "Veldu tungumál" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." + +msgid "Language of the translation is the same as source language." +msgstr "Tungumál þýðingar er það sama og upprunatungumálið." + +msgid "Fix Language" +msgstr "Laga tungumál" + +msgid "Fix language" +msgstr "Laga tungumál" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Þessi þýðingaskrá er með færslum sem hafa fleirtöluform, en hún er ekki með " +"skilgreiningu á Plural-Forms ú haus." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Færslur í þessari þýðingaskrá eru með annan fleirtölufjölda en þann sem " +"titekinn er í Plural-Forms línu skráarhaussins" + +msgid "Required header Plural-Forms is missing." +msgstr "Höfuðstrenginn Plural-Forms vantar." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Formvilla í Plural-Forms hauslínu (\"%s\")." + +msgid "Fix the Header" +msgstr "Laga skráarhausinn" + +msgid "Fix the header" +msgstr "Laga hausinn" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Fleirtöluformssniðið sem notað er í þýðingaskránni er óvenjulegt í %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Yfirfara" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Villa við hleðslu á þýðingaskrá '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Þýtt: %d af %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Eftir: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d villa" +msgstr[1] "%d villur" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d færsla" +msgstr[1] "%d færslur" + +msgid " (unsaved)" +msgstr " (óvistað)" + +msgid " (modified)" +msgstr " (breytt)" + +msgid "Go" +msgstr "Fara" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Mistókst að uppfæra þýðingaminni: %s" + +msgid "Purge deleted translations" +msgstr "Henda eyddum þýðingum" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Viltu fjarlægja allar þýðingar sem ekki eru lengur notaðar?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ef þú heldur áfram að henda, verður öllum þýðingum sem merktar eru til að " +"eyða endanlega eytt. Þú munt þurfa að þýða þær alveg aftur ef þeim verður " +"bætt inn aftur síðar." + +msgid "Keep" +msgstr "Halda" + +msgid "Purge" +msgstr "Henda" + +msgid "Fill missing translations from TM" +msgstr "Fylla inn þýðingar sem vantar úr ÞM" + +msgid "Only fill in exact matches" +msgstr "Einungis fylla inn nákvæmar samsvaranir" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ekki merkja nákvæmar samsvaranir sem óskýrar" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." + +msgid "Fill" +msgstr "Fylla inn" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d færsla var fyllt með samsvörun úr þýðingaminni." +msgstr[1] "%d færslur voru fylltar með samsvörunum úr þýðingaminni." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." + +msgid "No entries could be filled from the translation memory." +msgstr "No entries could be filled from the translation memory." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." + +msgid "Translating" +msgstr "Þýðing" + +msgid "Filling missing translations from TM..." +msgstr "Fylla inn þýðingar sem vantar úr ÞM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Þýddi %u streng" +msgstr[1] "Þýddi %u strengi" + +msgid "Copy from source text" +msgstr "Afrita úr upprunatexta" + +msgid "Copy from Source Text" +msgstr "Afrita úr upprunatexta" + +msgid "Clear translation" +msgstr "Hreinsa þýðingu" + +msgid "Clear Translation" +msgstr "Hreinsa þýðingu" + +msgid "Edit comment" +msgstr "Breyta athugasemd" + +msgid "Edit Comment" +msgstr "Breyta athugasemd" + +msgid "References:" +msgstr "Tilvísanir:" + +msgid "Everything" +msgstr "Allt" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Eintala" + +msgid "Zero" +msgstr "Núll" + +msgid "One" +msgstr "Einn" + +msgid "Two" +msgstr "Tveir" + +msgid "Plural" +msgstr "Fleirtala" + +msgid "Other" +msgstr "Annað" + +msgid "&Bookmarks" +msgstr "&Bókamerki" + +#, c-format +msgid "Set bookmark %i" +msgstr "Setja bókamerkið %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Fara á bókamerkið %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Setja bókamerkið %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Fara á bókamerkið %i" + +msgid "Hide Sidebar" +msgstr "Fela hliðarspjald" + +msgid "Show Sidebar" +msgstr "Birta hliðarspjald" + +msgid "Hide Status Bar" +msgstr "Fela stöðustiku" + +msgid "Show Status Bar" +msgstr "Birta stöðustiku" + +msgid "Source text" +msgstr "Frumtexti" + +msgid "Translation" +msgstr "Þýðing" + +msgid "ID" +msgstr "Auðkenni (ID)" + +#, c-format +msgid "Source text — %s" +msgstr "Frumtexti — %s" + +msgid "unknown language" +msgstr "óþekkt tungumál" + +#, c-format +msgid "Translation — %s" +msgstr "Þýðing — %s" + +msgid "Error:" +msgstr "Villa:" + +msgid "Source file" +msgstr "Upprunaskrá" + +msgid "Source file occurrence:" +msgstr "Tilvik í upprunaskrá:" + +msgid "Open in Editor" +msgstr "Opna í ritli" + +msgid "Open in editor" +msgstr "Opna í ritli" + +msgid "No references for the selected item." +msgstr "Engar tilvísanir í valið atriði." + +#, c-format +msgid "Error opening file %s!" +msgstr "Villa við opnun á skránni %s!" + +msgid "Find" +msgstr "Finna" + +msgid "Replace" +msgstr "Skipta út" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Valkostir" + +msgid "Ignore case" +msgstr "Hunsa há/lágstafi" + +msgid "Wrap around" +msgstr "Umbrjóta texta" + +msgid "Whole words only" +msgstr "Aðeins stök orð" + +msgid "Find in source texts" +msgstr "Find in source texts" + +msgid "Find in translations" +msgstr "Finna í þýðingum" + +msgid "Find in comments" +msgstr "Finna í athugasemdum" + +msgid "Close" +msgstr "Loka" + +msgid "Replace All" +msgstr "Skipta út öllu" + +msgid "Replace all" +msgstr "Skipta út öllu" + +msgid "< &Previous" +msgstr "< &Fyrra" + +msgid "&Next >" +msgstr "&Næsta >" + +msgid "String to find" +msgstr "Finna streng" + +msgid "Replacement string" +msgstr "Útskiptistrengur" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ekki tókst að ræsa forrit: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kóði eða heiti tungumáls (t.d. is_IS)" + +msgid "Translation Language" +msgstr "Tungumál þýðingar" + +msgid "Language of the translation:" +msgstr "Tungumál þýðingar:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Þýðingaskráastjórn" + +msgid "Catalog" +msgstr "Þýðingaskrá" + +msgid "Total" +msgstr "Alls" + +msgid "Untrans" +msgstr "Óþýtt" + +msgid "Fuzzy" +msgstr "Óskýrt" + +msgid "Bad Tokens" +msgstr "Óleyfilegar merkingar" + +msgid "Last modified" +msgstr "Síðast breytt" + +msgid "Select directory" +msgstr "Veldu möppu" + +msgid "Directories:" +msgstr "Möppur:" + +msgid "" +msgstr "<ónefnt>" + +msgid "Do you want to delete the project?" +msgstr "Viltu eyða verkefninu?" + +msgid "Confirmation" +msgstr "Staðfesting" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Viltu virkilega framkvæma fjöldauppfærslu á\n" +"öllum þýðingaskrám í þessu verki?" + +msgid "Information about the translator" +msgstr "Upplýsingar um þýðandann" + +msgid "Name:" +msgstr "Nafn:" + +msgid "Your Name" +msgstr "Nafnið þitt" + +msgid "Email:" +msgstr "Netfang:" + +msgid "your_email@example.com" +msgstr "tolvupostfang@midlari.is" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Nafn þitt og netfang hér að neðan eru einungis til að fylla út " +"höfuðstrenginn Last-Translator í skráarhaus GNU-gettext-skráa." + +msgid "Editing" +msgstr "Vinnsla" + +msgid "Automatically compile MO file when saving" +msgstr "Vistþýða sjálfkrafa MO-skrár við vistun" + +msgid "Show summary after catalog update" +msgstr "Birta samantekt eftir uppfærslu þýðingaskráa" + +msgid "Check spelling" +msgstr "Athuga stafsetningu" + +msgid "Always change focus to text input field" +msgstr "Ávallt setja virkni á innsláttarreit" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Aldrei að leyfa lista yfir strengi að yfirtaka virkni. Ef þetta er virkjað, " +"verður þú að nota CTRL-örvar til að flakka með lyklaborði, en þú getur líka " +"slegið inn texta samstundis án þess að þurfa að þrýsta á TAB til að breyta " +"hvar virknin er." + +msgid "Appearance" +msgstr "Útlit" + +msgid "Use custom list font:" +msgstr "Nota sérsniðið letur í listum:" + +msgid "Use custom text fields font:" +msgstr "Nota sérsniðið letur í textareitum:" + +msgid "Change UI language" +msgstr "Veldu tungumál fyrir notendaviðmót" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(krefst Windows 8 eða nýrra)" + +msgid "General" +msgstr "Almennt" + +msgid "Use translation memory" +msgstr "Nota þýðingaminni" + +msgid "Learn From Files..." +msgstr "Læra út frá skrám..." + +msgid "Learn from files..." +msgstr "Læra út frá skrám..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Endurstilla" + +msgid "Consult TM when updating from sources" +msgstr "Fletta upp í þýðingaminni við uppfærslu úr frumskrám" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." + +msgid "Stored translations:" +msgstr "Geymdar þýðingar:" + +msgid "Database size on disk:" +msgstr "Stærð gagnagrunns á diski:" + +msgid "Select translation files to import" +msgstr "Veldu þær þýðingaskrár sem á að flytja inn" + +msgid "Translation Memory" +msgstr "Þýðingaminni" + +msgid "Importing translations..." +msgstr "Flyt inn þýðingar..." + +msgid "Finalizing..." +msgstr "Geng frá..." + +msgid "Reset translation memory" +msgstr "Núllstilla þýðingaminni" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Ertu viss um að þú viljir núllstilla þýðingaminnið?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Núllstilling þýðingaminnis mun endanlega eyða öllum geymdum þýðingum úr því. " +"Ekki er hægt að afturkalla þessa aðgerð." + +msgid "Cancel" +msgstr "Hætta við" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Þýð.minni" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Frumkóðaþáttarar (source code extractors) eru notaðir til að finna þýðanlega " +"strengi inni í frumkóðaskrám og setja í nýjar skrár svo hægt sé að þýða " +"strengina." + +msgid "New" +msgstr "Nýtt" + +msgid "Edit" +msgstr "Breyta" + +msgid "Delete extractor" +msgstr "Eyða þáttara" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Ertu viss um að þú viljir eyða “%s” þáttaranum?" + +msgid "Extractors" +msgstr "Þáttarar" + +msgid "Accounts" +msgstr "Aðgangar" + +msgid "Automatically check for updates" +msgstr "Athuga sjálfvirkt með uppfærslur" + +msgid "Include beta versions" +msgstr "Beta-útgáfur meðtaldar" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-útgáfur innihalda nýjustu eiginleika og bætingu á þeim sem fyrir voru, " +"en gætu verið óstöðugri." + +msgid "Updates" +msgstr "Uppfærslur" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Þessar stillingar hafa áhrif á innra snið PO-skráa. Breyttu þeim ef þú hefur " +"sértækar þarfir eins og t.d. vegna útgáfustýringar." + +msgid "Line endings:" +msgstr "Línuendingar:" + +msgid "Unix (recommended)" +msgstr "Unix (mælt er með þessu)" + +msgid "Windows" +msgstr "Gluggar" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Umbrjóta við:" + +msgid "Preserve formatting of existing files" +msgstr "Vernda snið fyrirliggjandi skráa" + +msgid "Advanced" +msgstr "Ítarlegt" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Dragðu og slepptu möppum hér\n" +"\n" +"eða notaðu + hnappinn" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Dragðu og slepptu möppum hér\n" +"\n" +"eða notaðu + hnappinn" + +msgid "Add Folders..." +msgstr "Bæta við möppum..." + +msgid "Add folders..." +msgstr "Bæta við möppum..." + +msgid "Add Files..." +msgstr "Bæta við skrám..." + +msgid "Add files..." +msgstr "Bæta við skrám..." + +msgid "Add Wildcard..." +msgstr "Bæta við algildistákni..." + +msgid "Add wildcard..." +msgstr "Bæta við algildistákni..." + +msgid "Paths" +msgstr "Slóðir" + +msgid "Excluded paths" +msgstr "Slóðir sem á að sleppa" + +msgid "Additional keywords" +msgstr "Aukaleg stikkorð:" + +msgid "Name of the project the translation is for" +msgstr "Heiti þýðingaverkefnis sem þýðingin er ætluð" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "t.d. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (mælt er með þessu)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Endilega vistaðu skrána fyrst. Ekki er hægt að sýsla með þennan hluta fyrr " +"en það hefur verið gert." + +msgid "Comment:" +msgstr "Athugasemd:" + +msgid "OK" +msgstr "Í lagi" + +msgid "C&lear" +msgstr "&Hreinsa" + +msgid "Clear the comment" +msgstr "Hreinsa athugasemd" + +msgid "Create new translations project" +msgstr "Búa til nýtt þýðingarverkefni" + +msgid "Edit the project" +msgstr "Breyta þýðingarverkefni" + +msgid "Delete the project" +msgstr "Eyða þýðingaverkefninu" + +msgid "Update all" +msgstr "Uppfæra allt" + +msgid "Update all catalogs in the project" +msgstr "Uppfæra allar þýðingaskrár í verkefninu" + +msgid "Edit project" +msgstr "Breyta þýðingaverkefni" + +msgid "Project name:" +msgstr "Heiti verkefnis:" + +msgid "Browse" +msgstr "Velja" + +msgid "Add directory to the list" +msgstr "Bæta möppu við á lista" + +msgid "&New..." +msgstr "&Nýtt..." + +msgid "New from &POT/PO file..." +msgstr "Nýtt úr &POT/PO skrá..." + +msgid "New From &POT/PO File..." +msgstr "Nýtt úr &POT/PO skrá..." + +msgid "&Open..." +msgstr "&Opna..." + +msgid "Open Recent" +msgstr "Opna nýlegt" + +msgid "Open from Crowdin..." +msgstr "Opna frá Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Opna frá Crowdin..." + +msgid "&Close" +msgstr "&Loka" + +msgid "&Save" +msgstr "Vi&sta" + +msgid "Save &as..." +msgstr "Vist&a sem..." + +msgid "Save &As..." +msgstr "Vist&a sem..." + +msgid "Compile to MO..." +msgstr "Vistþýða sem MO..." + +msgid "E&xport as HTML..." +msgstr "&Flytja út sem HTML..." + +msgid "Check for updates..." +msgstr "Athuga með uppfærslur..." + +msgid "&Preferences..." +msgstr "S&tillingar..." + +msgid "Catalogs &manager" +msgstr "Þýðingas&kráastjórn" + +msgid "Catalogs &Manager" +msgstr "Þýðingas&kráastjórn" + +msgid "E&xit" +msgstr "&Hætta" + +msgid "Quit" +msgstr "Hætta" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Þýðin&gin er óljós" + +msgid "Translation Is &Fuzzy" +msgstr "Þýðin&gin er óljós" + +msgid "Edit &comment" +msgstr "Breyta &athugasemd" + +msgid "Edit &Comment" +msgstr "Breyta &athugasemd" + +msgid "Suggestions" +msgstr "Tillögur" + +msgid "&Show references" +msgstr "&Sýna tilvísanir" + +msgid "&Show References" +msgstr "&Sýna tilvísanir" + +msgid "&Find..." +msgstr "&Leita..." + +msgid "Replace..." +msgstr "Skipta út..." + +msgid "Find next" +msgstr "Finna næsta" + +msgid "Find previous" +msgstr "Finna fyrra" + +msgid "Find and Replace..." +msgstr "Finna og skipta út..." + +msgid "Find Next" +msgstr "Finna næsta" + +msgid "Find Previous" +msgstr "Finna fyrra" + +msgid "&Preferences" +msgstr "S&tillingar" + +msgid "Display entry &IDs" +msgstr "Birta &auðkenni færslu" + +msgid "Display Entry &IDs" +msgstr "Birta &auðkenni færslu" + +msgid "Sort by &file order" +msgstr "Raða eftir s&kráaröð" + +msgid "Sort by &File Order" +msgstr "Raða eftir s&kráaröð" + +msgid "Sort by &source" +msgstr "Raða eftir &frumtexta" + +msgid "Sort by &Source" +msgstr "Raða eftir &frumtexta" + +msgid "Sort by &translation" +msgstr "&Raða eftir þýðingu" + +msgid "Sort by &Translation" +msgstr "&Raða eftir þýðingu" + +msgid "&Group by context" +msgstr "&Hópa eftir samhengi" + +msgid "&Group By Context" +msgstr "&Hópa eftir samhengi" + +msgid "Entries with errors first" +msgstr "Færslur með villum fyrst" + +msgid "Entries with Errors First" +msgstr "Færslur með villum fyrst" + +msgid "&Untranslated entries first" +msgstr "Óþýddar &færslur fyrst" + +msgid "&Untranslated Entries First" +msgstr "Óþýddar &færslur fyrst" + +msgid "Show sidebar" +msgstr "Birta hliðarspjald" + +msgid "Show status bar" +msgstr "Birta stöðustiku" + +msgid "C&atalog" +msgstr "Þýðing&askrá" + +msgid "&Update from sources" +msgstr "&Uppfæra frá frumkóða" + +msgid "&Update from Sources" +msgstr "&Uppfæra frá uppruna" + +msgid "Update from &POT file..." +msgstr "Uppfæra frá &POT skrá..." + +msgid "Update from &POT File..." +msgstr "Uppfæra frá &POT skrá..." + +msgid "Sync with Crowdin" +msgstr "Samstilla við Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "F&ylla inn þýðingar sem vantar úr ÞM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "F&ylla inn þýðingar sem vantar úr ÞM..." + +msgid "&Purge deleted translations" +msgstr "&Henda eyddum þýðingum" + +msgid "&Purge Deleted Translations" +msgstr "&Henda eyddum þýðingum" + +msgid "&Validate translations" +msgstr "&Sannreyna þýðingar" + +msgid "&Validate Translations" +msgstr "&Sannreyna þýðingar" + +msgid "&Properties..." +msgstr "&Eiginleikar..." + +msgid "&Done and next" +msgstr "&Lokið og næsta" + +msgid "&Done and Next" +msgstr "&Lokið og næsta" + +msgid "&Previous translation" +msgstr "&Fyrri þýðing" + +msgid "&Previous Translation" +msgstr "&Fyrri þýðing" + +msgid "&Next translation" +msgstr "&Næsta þýðing" + +msgid "&Next Translation" +msgstr "&Næsta þýðing" + +msgid "P&revious unfinished" +msgstr "&Fyrri ókláruð" + +msgid "P&revious Unfinished" +msgstr "&Fyrri ókláruð" + +msgid "Ne&xt unfinished" +msgstr "&Næsta óklárað" + +msgid "Ne&xt Unfinished" +msgstr "&Næsta óklárað" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Hjálp á netinu" + +msgid "&Online Help" +msgstr "&Hjálp á netinu" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext handbók" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext handbók" + +msgid "&About Poedit" +msgstr "&Um Poedit" + +msgid "&About" +msgstr "&Um forritið" + +msgid "Extractor setup" +msgstr "Uppsetning þáttara" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Listi yfir skráaendingar aðskilið með semikommu (dæmi. *.cpp, *.h):" + +msgid "Invocation:" +msgstr "Ræsing:" + +msgid "Command to extract translations:" +msgstr "Skipun til að ná í þýðingar:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Þetta er skipunin sem notuð er til að ræsa þáttarann.\n" +"%o stendur fyrir úttaksheiti skráar, %K fyrir lista\n" +"af stikkorðum, %F fyrir lista af inntaksskrám,\n" +"%C fyrir flagg stafatöflu (sjá hér að neðan)." + +msgid "An item in keywords list:" +msgstr "Atriði í lista yfir stikkorð:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Þetta mun verða viðhengt á skipanalínu, einu sinni\n" +"fyrir hvert stikkorð. %k kemur í stað stikkorðsins." + +msgid "An item in input files list:" +msgstr "Atriði í lista yfir inntaksskrár:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Þetta mun verða viðhengt á skipanalínu, einu sinni\n" +"fyrir hverja inntaksskrá. %f kemur í stað skráarheitisins." + +msgid "Source code charset:" +msgstr "Stafatafla frumkóða:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Þetta mun verða viðhengt á skipanalínu, einungis\n" +"ef upprunaleg stafatafla hefur verið gefið upp. %c kemur í stað gildis " +"stafatöflunnar." + +msgid "Catalog properties" +msgstr "Eiginleikar þýðingaskrár" + +msgid "Project name and version:" +msgstr "Nafn þýðingaverkefnis og útgáfunúmer:" + +msgid "Plural Forms:" +msgstr "Fleirtöluform:" + +msgid "Use default rules for this language" +msgstr "Nota sjálfgefnar reglur fyrir þetta tungumál" + +msgid "Use custom expression" +msgstr "Nota sérsniðna segð" + +msgid "Learn about plural forms" +msgstr "Vita meira um fleirtöluform" + +msgid "Charset:" +msgstr "Stafatafla:" + +msgid "Team:" +msgstr "Teymi:" + +msgid "Team's email address:" +msgstr "Netfang þýðingateymis:" + +msgid "Translation properties" +msgstr "Eiginleikar þýðingar" + +msgid "Sources paths" +msgstr "Slóðir upprunaskráa" + +msgid "Extract text from source files in the following directories:" +msgstr "Ná í texta úr upprunaskrám í eftirfarandi möppum:" + +msgid "Base path:" +msgstr "Grunnslóð:" + +msgid "Sources keywords" +msgstr "Stikkorð upprunaskráa" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Nota þessi stikkorð (aðgerðaheiti) til að auðkenna þýðanlega strengi\n" +"í upprunaskrám:" + +msgid "Learn about gettext keywords" +msgstr "Vita meira um gettext stikkorð" + +msgid "Update summary" +msgstr "Samantekt uppfærslu" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Þessir strengir fundust í kóða, en fundust ekki í þýðingaskrá.\n" +"Poedit mun nú bæta við þessum strengjum." + +msgid "New strings" +msgstr "Nýir strengir" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Þessir strengir eru ekki lengur í upprunaskrám.\n" +"Poedit mun nú fjarlægja þessa strengi úr þýðingaskránni." + +msgid "Obsolete strings" +msgstr "Úreltir strengir" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nýjar, 0 úreltar)" + +msgid "Open" +msgstr "Opna" + +msgid "Save catalog" +msgstr "Vista þýðingaskrá" + +msgid "Validate" +msgstr "Sannreyna" + +msgid "Check for errors in the translation" +msgstr "Athuga með villur í þýðingum" + +msgid "Update" +msgstr "Uppfæra" + +msgid "Update catalog - synchronize it with sources" +msgstr "Uppfæra þýðingaskrár - samræma við upprunaskrár" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Víxlað ef valin strengur inniheldur óljósa þýðingu" + +msgid "Show or hide the sidebar" +msgstr "Birta eða fela hliðarspjald" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Fyrri frumtexti:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Eldri upprunatexti (áður en hann breyttist við uppfærslu) sem óskýra " +"þýðingin á við." + +msgid "Notes for translators:" +msgstr "Minnispunktar fyrir þýðendur:" + +msgid "Add comment" +msgstr "Bæta við athugasemd" + +msgid "Add Comment" +msgstr "Bæta við athugasemd" + +msgid "Translation suggestions:" +msgstr "Þýðingatillögur:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Engar samsvaranir fundust" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Engar samsvaranir fundust" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Þessi strengur fannst í þýðingaminni Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nýtt: %i, úrelt: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Flyt inn þýðingar: %d" + +msgid "Poedit Update" +msgstr "Poedit uppfærsla" + +msgid "Preparing migration..." +msgstr "Undirbý yfirfærslu..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Staða þegar yfirfærslu var hætt: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit verður að umbreyta þýðingaminninu þínu yfir á nýtt snið." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Þetta verður að gera áður en Poedit getur ræst. Þetta getur tekið nokkrar " +"mínútur ef þú geymir margar þýðingaskrár, en er yfirleitt fljótlegra." + +msgid "Proceed" +msgstr "Halda áfram" + +msgid "Translation memory migration failed." +msgstr "Yfirfærsla þýðingaminnis mistókst." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Ekki var hægt að yfirfæra þýðingaminnið þitt. Villan var:\n" +"\n" +"%s\n" +"Endilega sendu tölvupóst á help@poedit.net og við reynum að redda þessu." + +msgid "Cannot create temporary directory." +msgstr "Ekki tókst að búa til bráðabirgðamöppu." + +msgid "Welcome to Poedit" +msgstr "Velkomin í Poedit" + +msgid "Edit a translation" +msgstr "Breyta þýðingu" + +msgid "Open an existing PO file and edit the translation." +msgstr "Opna PO-skrá sem er til staðar og sýsla með þýðingar." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Taka PO-skrá eða POT-sniðmát sem er til staðar og búa til nýjar þýðingar út " +"frá því." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Collaborate on a translation with Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Download a file from Crowdin project, translate and sync your changes back." + +msgid "What is Crowdin?" +msgstr "Hvað er Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Það eru engar þýðingar. Mjög óvenjulegt." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Þýðanlegum færslum er ekki bætt handvirkt inn í Gettext kerfinu, heldur er " +"náð í þær sjálfvirkt\n" +"úr grunnkóða. Þannig eykst nákvæmni og þær eru alltaf uppfærðar.\n" +"Þýðendur nota venjulega PO-sniðmát (POT) sem forritarar hafa útbúið fyrir þá." + +msgid "(Learn more about GNU gettext)" +msgstr "(Læra meira um GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Einfaldasta leiðin til að fylla þessa þýðingaskrá er að uppfæra hana frá a " +"POT skrá:" + +msgid "Update from POT" +msgstr "Uppfæra frá POT skrá" + +msgid "Take translatable strings from an existing POT template." +msgstr "Taka þýðanlega strengi úr POT sniðmáti sem til er fyrir." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Þú getur líka náð í þýðanlega strengi beint úr grunnkóðanum:" + +msgid "Extract from sources" +msgstr "Ná í úr frumkóða" + +msgid "Configure source code extraction in Properties." +msgstr "Stilla útdrátt upprunakóða í kjörstillingum." + +msgid "Sync" +msgstr "Samstilla" + +msgid "Synchronize the translation with Crowdin" +msgstr "Samræma þýðinguna með Crowdin" diff --git a/locales/it.mo b/locales/it.mo new file mode 100644 index 0000000000000000000000000000000000000000..9c16eab2f62033ffb72ac58afcf4b737cb9ef26e GIT binary patch literal 47256 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 literal 0 HcmV?d00001 diff --git a/locales/it.po b/locales/it.po new file mode 100644 index 0000000..54a2dbc --- /dev/null +++ b/locales/it.po @@ -0,0 +1,1988 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Italian\n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: it\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Nascondi questo messaggio di notifica" + +msgid "Don't Show Again" +msgstr "Non visualizzare più" + +msgid "Don't show again" +msgstr "Non mostrare nuovamente" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "La riga %i del file '%s' non è stata caricata correttamente." +msgstr[1] "%i linee del file '%s' non sono state caricate correttamente." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "La riga %d del file '%s' è danneggiata (dati %s non validi)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Intestazione non valida: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"File di catalogo con errori: forma singolare di msgstr usata con msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"File di catalogo con errori: forma plurale di msgstr usata senza msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Si sono verificati errori durante il caricamento del catalogo. Come " +"risultato alcuni dati potrebbero essere mancanti o danneggiati." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Impossibile caricare il file %s, probabilmente il file è danneggiato." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Il file '%s' è in sola lettura e non può essere salvato.\n" +"Salvalo con un nome differente." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Impossibile salvare il file %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Si è verificato un problema nella formattazione del file (ma è stato salvato " +"correttamente)" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Impossibile salvare il catalogo nel set di caratteri '%s' come specificato " +"nelle impostazioni del catalogo.\n" +"\n" +". È stato salvato in UTF-8 e le impostazioni sono state modificate di " +"conseguenza." + +msgid "Error saving catalog" +msgstr "Errore durante il salvataggio del catalogo" + +msgid "PO Translation Files" +msgstr "Files traduzione PO" + +msgid "POT Translation Templates" +msgstr "Modelli di traduzione POT" + +msgid "All Translation Files" +msgstr "Tutti i file di traduzione" + +msgid "Merging differences..." +msgstr "Unione delle differenze..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' non è un file POT valido." + +msgid "(Use default language)" +msgstr "(Utilizza la lingua predefinita)" + +msgid "Select your preferred language" +msgstr "Seleziona la lingua preferita" + +msgid "Language selection" +msgstr "Selezione della lingua" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Riavvia Poedit affinché questo cambiamento abbia effetto." + +msgid "Downloading translations is disabled in this project." +msgstr "In questo progetto il download della traduzione è diabilitato." + +msgid "Not authorized, please sign in again." +msgstr "Non autorizzato. È necessario autenticarsi per procedere, grazie." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin è un sistema online di gestione traduzioni di tipo collaborativo. " +"Poedit può sincronizzare i file PO gestiti da Crowdin." + +msgid "Sign In" +msgstr "Autenticati" + +msgid "Sign in" +msgstr "Accedi" + +msgid "Sign Out" +msgstr "Disconnetti" + +msgid "Sign out" +msgstr "Disconnetti" + +msgid "Waiting for authentication…" +msgstr "Autenticazione in corso..." + +msgid "Updating user information…" +msgstr "È in corso l'aggiornamento delle informazioni dell'utente..." + +msgid "Signed in as:" +msgstr "Accedi come:" + +msgid "Learn More About Crowdin" +msgstr "Altre info su Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Altre info su Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Accedi ad un progetto con Crowdin" + +msgid "Open Crowdin translation" +msgstr "Apri traduzione su Crowdin" + +msgid "Project:" +msgstr "Progetto:" + +msgid "Language:" +msgstr "Lingua:" + +msgid "File:" +msgstr "File:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Non c'è nessun progetto di traduzione nel tuo account Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Questo progetto non ha file che possono essere tradotti con Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Questo file può essere modificato solamente tramite l'interfaccia web di " +"Crowdin." + +msgid "Downloading latest translations…" +msgstr "È in corso il download dell'ultima versione della traduzione..." + +msgid "Syncing with Crowdin" +msgstr "Sincronizzazione con Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Sincronizzazione con Crowdin fallita." + +msgid "Crowdin error" +msgstr "Errore di Crowdin" + +msgid "Uploading translations…" +msgstr "Aggiornamento delle traduzioni in corso..." + +msgid "&Copy" +msgstr "&Copia" + +msgid "Learn more" +msgstr "Per saperne di più" + +msgid "Learn More" +msgstr "Ulteriori informazioni" + +#, c-format +msgid "Failed command: %s" +msgstr "Comando non riuscito: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Impossibile unire i cataloghi gettext." + +msgid "Scanning files..." +msgstr "Analisi dei file in corso..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analisi dei file %s in corso..." + +msgid "Failed to load extracted catalog." +msgstr "Impossibile caricare il catalogo estratto." + +msgid "&Help" +msgstr "&Aiuto" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "I file MO non possono essere modificati direttamente con Poedit." + +msgid "Error opening file" +msgstr "Errore durante l'apertura del file" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Apri e modifica il file PO corrispondente. Durante il salvataggio sarà " +"aggiornato anche il file MO." + +msgid "don't delete temporary files (for debugging)" +msgstr "non eliminare i file temporanei (per il debug)" + +msgid "handle a poedit:// URI" +msgstr "gestire un poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Errore di comunicazione con il processo di Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Si è verificata un'eccezione non gestita: %s" + +msgid "Unhandled exception occurred." +msgstr "Si è verificata un'eccezione non gestita." + +msgid "Open catalog" +msgstr "Apri catalogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Il file '%s' non esiste." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Informazioni su %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versione %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servizi" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Nascondi %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Nascondi altri" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Visualizza tutto" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Esci da %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit è un editor per traduzioni semplice da utilizzare." + +msgid "Catalogs Manager" +msgstr "Gestore dei cataloghi" + +msgid "Check for Updates..." +msgstr "Controlla aggiornamenti..." + +msgid "&Edit" +msgstr "&Modifica" + +msgid "Undo" +msgstr "Annulla" + +msgid "Redo" +msgstr "Ripeti azione" + +msgid "Paste and Match Style" +msgstr "Incolla e verifica corrispondenze stile" + +msgid "Delete" +msgstr "Elimina" + +msgid "Spelling and Grammar" +msgstr "Ortografia e grammatica" + +msgid "Show Spelling and Grammar" +msgstr "Visualizza ortografia e grammatica" + +msgid "Check Document Now" +msgstr "Verifica ora il documento" + +msgid "Check Spelling While Typing" +msgstr "Controllo ortografico durante la digitazione" + +msgid "Check Grammar With Spelling" +msgstr "Verifica grammatica ed ortografia" + +msgid "Correct Spelling Automatically" +msgstr "Correggi automaticamente l'ortografia" + +msgid "Substitutions" +msgstr "Sostituzioni" + +msgid "Show Substitutions" +msgstr "Mostra le sostituzioni" + +msgid "Smart Copy/Paste" +msgstr "Copia/incolla rapido" + +msgid "Smart Quotes" +msgstr "Virgolette veloci" + +msgid "Smart Dashes" +msgstr "Trattini veloci" + +msgid "Smart Links" +msgstr "Collegamenti rapidi" + +msgid "Text Replacement" +msgstr "Sostituzione testo" + +msgid "Transformations" +msgstr "Trasformazioni" + +msgid "Make Upper Case" +msgstr "Trasforma in maiuscolo" + +msgid "Make Lower Case" +msgstr "Trasforma in minuscolo" + +msgid "Capitalize" +msgstr "Rendi maiuscolo" + +msgid "Speech" +msgstr "Discorso" + +msgid "Start Speaking" +msgstr "Avvia parlato" + +msgid "Stop Speaking" +msgstr "Ferma parlato" + +msgid "&View" +msgstr "&Visualizza" + +msgid "Enter Full Screen" +msgstr "Modalità a schermo intero" + +msgid "Window" +msgstr "Finestra" + +msgid "Minimize" +msgstr "Riduci a icona" + +msgid "Zoom" +msgstr "Ingrandisci" + +msgid "Bring All to Front" +msgstr "Mostra tutto in primo piano" + +msgid "PO Translation" +msgstr "Traduzione PO" + +msgid "The file cannot be opened." +msgstr "Il file non può essere aperto." + +msgid "Invalid file" +msgstr "File non valido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Il file potrebbe essere danneggiato o in un formato non riconosciuto da " +"Poedit." + +msgid "&Undo" +msgstr "&Annulla" + +msgid "&Redo" +msgstr "&Ripeti" + +msgid "Cu&t" +msgstr "&Taglia" + +msgid "Cut" +msgstr "Taglia" + +msgid "Copy" +msgstr "Copia" + +msgid "&Paste" +msgstr "&Incolla" + +msgid "Paste" +msgstr "Incolla" + +msgid "&Delete" +msgstr "&Elimina" + +msgid "Select &All" +msgstr "Seleziona &tutto" + +msgid "Select All" +msgstr "Seleziona tutto" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maiusc+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Invio" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Su" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Giù" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maiusc" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Non è possibile trascinare più di un file nella finestra di Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Il file '%s' non è un catalogo di messaggi." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&File" + +msgid "&Go" +msgstr "&Vai" + +msgid "Source text:" +msgstr "Testo sorgente:" + +msgid "Singular:" +msgstr "Singolare:" + +msgid "Plural:" +msgstr "Plurale:" + +msgid "Translation:" +msgstr "Traduzione:" + +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 "" +"I file POT sono solo modelli e non contengono traduzioni.\n" +"Per fare una traduzione, crea un nuovo file PO utilizzando un modello." + +msgid "Create New Translation" +msgstr "Crea una nuova traduzione" + +msgid "Create new translation" +msgstr "Crea una nuova traduzione" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Il controllo ortografico è disabilitato: il dizionario %s deve essere " +"installato per consentirne il funzionamento." + +msgid "Install" +msgstr "Installa" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalogo modificato. Vuoi salvare le modifiche?" + +msgid "Save changes" +msgstr "Salva le modifiche" + +msgid "Your changes will be lost if you don't save them." +msgstr "Le modifiche saranno perse se non le salvi." + +msgid "Save" +msgstr "Salva" + +msgid "Don't save" +msgstr "Non salvare" + +msgid "Don't Save" +msgstr "Non salvare" + +msgid "Save as..." +msgstr "Salva come..." + +msgid "Compile to..." +msgstr "Compila in..." + +msgid "Compiled Translation Files" +msgstr "File di traduzione compilati" + +msgid "Export as..." +msgstr "Esporta come..." + +msgid "HTML Files" +msgstr "FIles HTML" + +msgid "Open catalog template" +msgstr "Apri modello di catalogo" + +msgid "Updating catalog" +msgstr "Aggiornamento del catalogo in corso" + +msgid "Source code not available." +msgstr "Codice sorgente non disponibile." + +msgid "Updating failed" +msgstr "Aggiornamento non riuscito" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Le traduzioni non possono essere aggiornate dal codice sorgente poichè non è " +"stato trovato nessun codice sorgente nel percorso specifcato nelle proprietà " +"catalogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Le voci nel catalogo sono probabilmente non corrette." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Aggiornamento del catalogo non riuscito. Fai clic su 'Dettagli >>' per i " +"dettagli." + +#, 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[1] "Sono stati trovati %d problemi nella traduzione." + +msgid "Validation results" +msgstr "Risultati della convalida" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Le voci con errori sono state marcate in rosso nell'elenco. I dettagli " +"dell'errore saranno visualizzati quando selezionerai una determinata voce." + +msgid "The file was saved safely." +msgstr "Il file è stato correttamente salvato." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Il file è stato salvato e compilato nel formato MO, ma potrebbe non " +"funzionare correttamente." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Il file è stato salvato, ma non può essere compilato nel formato MO e " +"utilizzato." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Il file è stato compilato nel formato MO, ma probabilmente non funzionerà " +"correttamente." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Il file non può essere compilato nel formato MO e usato." + +msgid "No problems with the translation found." +msgstr "Nessun problema trovato nella traduzione." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"La traduzione è pronta per l'uso, ma l'elemento %d non è ancora stato " +"tradotto." +msgstr[1] "" +"La traduzione è pronta per l'uso, ma gli elementi %d non sono stati ancora " +"tradotti." + +msgid "The translation is ready for use." +msgstr "La traduzione è pronta per l'uso." + +msgid "Context:" +msgstr "Contesto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit correggerà automaticamente il contenuto non valido nel file \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Il file contiene elementi duplicati, che non sono permessi nei file PO e " +"devono essere rimossi per prevenirne l'uso. Poedit correggerà questo " +"problema, ma dovrai rivedere le traduzioni di ogni elemento segnato come " +"\"Da verificare\" e correggerle se necessario." + +msgid "Language of the translation isn't set." +msgstr "La lingua della traduzione non è impostata" + +msgid "Set Language" +msgstr "Imposta lingua" + +msgid "Set language" +msgstr "Imposta lingua" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"I suggerimenti non sono disponibili se la lingua di traduzione non è " +"impostata correttamente. Anche altre caratteristiche, come i plurali, " +"possono presentare dei problemi." + +msgid "Language of the translation is the same as source language." +msgstr "" +"La lingua della traduzione è la stessa della lingua sorgente. Cosa stai " +"cercando di fare?" + +msgid "Fix Language" +msgstr "Correggi la lingua" + +msgid "Fix language" +msgstr "Correggi la lingua" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Questo catalogo ha alcuni elementi con forme plurali, ma non ha una " +"intestazione configurata per le forme plurali." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Gli elementi in questo catalogo hanno un numero di forme plurali diverso da " +"quello che dice l'intestazione delle forme plurali" + +msgid "Required header Plural-Forms is missing." +msgstr "Manca l'intestazione richiesta per i plurali." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Errore di sintassi nell'intestazione delle forme plurali (\"%s\")." + +msgid "Fix the Header" +msgstr "Correggi l'intestazione" + +msgid "Fix the header" +msgstr "Correggi l'intestazione" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"I plurali contenuti nel catalogo sono inusuali in %s: controlla se sono " +"corretti." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revisiona" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Errore durante il caricamento del file di messaggi di catalogo '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Tradotti: %d di %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Rimanenti: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d errore" +msgstr[1] "%d errori" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d voce" +msgstr[1] "%d voci" + +msgid " (unsaved)" +msgstr " (non salvato)" + +msgid " (modified)" +msgstr " (modificato)" + +msgid "Go" +msgstr "Vai" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Impossibile aggiornare la memoria di traduzione: %s" + +msgid "Purge deleted translations" +msgstr "Rimuovi le traduzioni eliminate" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Vuoi rimuovere dalla memoria di traduzione tutte le traduzioni non più " +"utilizzate?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Se si continua nella pulizia, tutte le traduzioni segnate come eliminate " +"verranno rimosse definitivamente. Se esse verranno nuovamente aggiunte in " +"futuro sarà necessario tradurle nuovamente." + +msgid "Keep" +msgstr "Mantieni" + +msgid "Purge" +msgstr "Rimuovi" + +msgid "Fill missing translations from TM" +msgstr "Riempi le traduzioni mancanti prendendole dalla MT" + +msgid "Only fill in exact matches" +msgstr "Riempi solo quelle con corrispondenza esatta" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"In modo predefinito,le traduzioni non accurate sono riempite e segnate come " +"da verificare. Spunta questa opzione per includere solo le traduizioni con " +"corrispondenza esatta." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Non segnare le corrispondenze esatte come 'Da verificare'" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Abilitala solo se ti fidi della qualità della MT. In modo predefinito tutte " +"le corrispondenze dalla MT sono segnate come 'Da verificare' e devono essere " +"controllate." + +msgid "Fill" +msgstr "Riempi" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d elemento completato dalla memoria di traduzione." +msgstr[1] "%d elementi completati dalla memoria di traduzione." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"La traduzione era stata segnata come non verificata, perché non accurata. " +"Puoi modificarla per correggerla." + +msgid "No entries could be filled from the translation memory." +msgstr "Nessun elemento può essere compilato dalla memoria traduzione." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"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 " +"abbastanza dai file che hai tradotto manualmente." + +msgid "Translating" +msgstr "Traduzione in corso" + +msgid "Filling missing translations from TM..." +msgstr "Completa traduzioni mancanti dalla MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Tradotta %u stringa" +msgstr[1] "Tradotte %u stringhe" + +msgid "Copy from source text" +msgstr "Copia dal testo sorgente" + +msgid "Copy from Source Text" +msgstr "Copia dal testo sorgente" + +msgid "Clear translation" +msgstr "Cancella la traduzione" + +msgid "Clear Translation" +msgstr "Cancella traduzione" + +msgid "Edit comment" +msgstr "Modifica il commento" + +msgid "Edit Comment" +msgstr "Modifica commento" + +msgid "References:" +msgstr "Riferimenti:" + +msgid "Everything" +msgstr "Qualsiasi" + +#, c-format +msgid "Form %i" +msgstr "Modulo %i" + +msgid "Singular" +msgstr "Singolare" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Uno" + +msgid "Two" +msgstr "Due" + +msgid "Plural" +msgstr "Plurale" + +msgid "Other" +msgstr "Altro" + +msgid "&Bookmarks" +msgstr "Segnali&bri" + +#, c-format +msgid "Set bookmark %i" +msgstr "Imposta segnalibro %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Vai al segnalibro %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Imposta segnalibro %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Vai al segnalibro %i" + +msgid "Hide Sidebar" +msgstr "Nascondi barra laterale" + +msgid "Show Sidebar" +msgstr "Mostra barra laterale" + +msgid "Hide Status Bar" +msgstr "Nascondi barra di stato" + +msgid "Show Status Bar" +msgstr "Visualizza barra di stato" + +msgid "Source text" +msgstr "Testo sorgente" + +msgid "Translation" +msgstr "Traduzione" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Testo sorgente — %s" + +msgid "unknown language" +msgstr "lingua sconosciuta" + +#, c-format +msgid "Translation — %s" +msgstr "Traduzione — %s" + +msgid "Error:" +msgstr "Errore:" + +msgid "Source file" +msgstr "File sorgente" + +msgid "Source file occurrence:" +msgstr "Occorrenze nel file sorgente:" + +msgid "Open in Editor" +msgstr "Apri nell'editor" + +msgid "Open in editor" +msgstr "Apri nell'editor" + +msgid "No references for the selected item." +msgstr "Non ci sono riferimenti per l'elemento selezionato." + +#, c-format +msgid "Error opening file %s!" +msgstr "Errore durante l'apertura del file %s!" + +msgid "Find" +msgstr "Trova" + +msgid "Replace" +msgstr "Sostituisci" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opzioni" + +msgid "Ignore case" +msgstr "Non distinguere maiuscole e minuscole" + +msgid "Wrap around" +msgstr "Torna su se raggiungi la fine" + +msgid "Whole words only" +msgstr "Solo parole intere" + +msgid "Find in source texts" +msgstr "Trova nel testo sorgente" + +msgid "Find in translations" +msgstr "Trova nella traduzione" + +msgid "Find in comments" +msgstr "Trova nei commenti" + +msgid "Close" +msgstr "Chiudi" + +msgid "Replace All" +msgstr "Sostituisci tutto" + +msgid "Replace all" +msgstr "Sostituisci tutto" + +msgid "< &Previous" +msgstr "< &Indietro" + +msgid "&Next >" +msgstr "Ava&nti >" + +msgid "String to find" +msgstr "Stringa da trovare" + +msgid "Replacement string" +msgstr "Stringa di sostituzione" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Impossibile eseguire il programma: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Codice o nome della lingua (es. it_IT)" + +msgid "Translation Language" +msgstr "Lingua della traduzione" + +msgid "Language of the translation:" +msgstr "Lingua della traduzione:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gestore cataloghi" + +msgid "Catalog" +msgstr "Catalogo" + +msgid "Total" +msgstr "Totale" + +msgid "Untrans" +msgstr "Non tradotte" + +msgid "Fuzzy" +msgstr "Non verificata" + +msgid "Bad Tokens" +msgstr "Token errati" + +msgid "Last modified" +msgstr "Ultima modifica" + +msgid "Select directory" +msgstr "Seleziona la cartella" + +msgid "Directories:" +msgstr "Cartelle:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vuoi eliminare il progetto?" + +msgid "Confirmation" +msgstr "Conferma" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Eseguire un aggiornamento di massa\n" +"di tutti i cataloghi del progetto?" + +msgid "Information about the translator" +msgstr "Informazioni sul traduttore" + +msgid "Name:" +msgstr "Nome:" + +msgid "Your Name" +msgstr "Il tuo nome" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "la_tua_email@esempio.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Il tuo nome e indirizzo email sono usati solo per impostare l'intestazione " +"dell'ultimo traduttore dei file GNU gettext." + +msgid "Editing" +msgstr "Modifica" + +msgid "Automatically compile MO file when saving" +msgstr "Compila automaticamente il file MO durante il salvataggio" + +msgid "Show summary after catalog update" +msgstr "Visualizza riepilogo dopo l'aggiornamento del catalogo" + +msgid "Check spelling" +msgstr "Controllo ortografico" + +msgid "Always change focus to text input field" +msgstr "Posiziona sempre il cursore nel campo di immissione del testo" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Non permettere mai che nella lista delle stringhe si posizioni " +"automaticamente il cursore. Se abilitato, è necessario usare Ctrl-frecce " +"direzionali per la navigazione con la tastiera, ma è anche possibile " +"scrivere il testo immediatamente, senza dover premere Tab per posizionare il " +"cursore." + +msgid "Appearance" +msgstr "Aspetto" + +msgid "Use custom list font:" +msgstr "Usa il carattere per gli elenchi personalizzati:" + +msgid "Use custom text fields font:" +msgstr "Usa un carattere personalizzato per i campi di testo:" + +msgid "Change UI language" +msgstr "Cambia la lingua dell'interfaccia" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(richiede Windows 8 o successivo)" + +msgid "General" +msgstr "Generale" + +msgid "Use translation memory" +msgstr "Usa la memoria di traduzione" + +msgid "Learn From Files..." +msgstr "Impara dai file..." + +msgid "Learn from files..." +msgstr "Impara dai file..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Resetta" + +msgid "Consult TM when updating from sources" +msgstr "" +"Prova a consultare la memoria di traduzione quando aggiorni i sorgenti. Può " +"accadere che delle frasi modificate facciano \"capire\" al computer il senso " +"delle frasi" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Se abilitato, Poedit proverà a completare le nuove stringhe usando\n" +"le precedenti traduzione memorizzate nella memoria di traduzione. Se la\n" +"MT è quasi vuota, non funzionerà molto bene. Più traduzioni farai\n" +"più crescerà la MT, e meglio funzionerà." + +msgid "Stored translations:" +msgstr "Traduzioni memorizzate:" + +msgid "Database size on disk:" +msgstr "Dimensione database sul disco:" + +msgid "Select translation files to import" +msgstr "Seleziona i file di traduzione da importare" + +msgid "Translation Memory" +msgstr "Memoria di traduzione (TM)" + +msgid "Importing translations..." +msgstr "Importazione traduzioni..." + +msgid "Finalizing..." +msgstr "Finalizzazione..." + +msgid "Reset translation memory" +msgstr "Azzera la memoria di traduzione" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Sei sicuro di voler azzerare la memoria di traduzione?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"L'azzeramento della memoria eliminerà in modo irrimediabile tutte le " +"traduzioni. Non puoi annullare questa operazione dopo averla eseguita." + +msgid "Cancel" +msgstr "Annulla" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Gli estrattori di codice sorgente vengono utilizzati per trovare stringhe " +"traducibili nei file di codice sorgente ed estrarli in modo che essi possano " +"essere tradotti." + +msgid "New" +msgstr "Nuovo" + +msgid "Edit" +msgstr "Modifica" + +msgid "Delete extractor" +msgstr "Elimina estrattore" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Sei sicuro di voler eliminare l'estrattore \"%s\"?" + +msgid "Extractors" +msgstr "Estrattori" + +msgid "Accounts" +msgstr "Account" + +msgid "Automatically check for updates" +msgstr "Controlla automaticamente gli aggiornamenti" + +msgid "Include beta versions" +msgstr "Includi versioni beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Le versioni beta contengono le ultime novità e miglioramenti, ma possono " +"essere un po' meno stabili." + +msgid "Updates" +msgstr "Aggiornamenti" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Queste impostazioni influenzano la formattazione interna dei file PO. " +"Modificale se hai requisiti specifici, ad esempio a causa del controllo " +"versione." + +msgid "Line endings:" +msgstr "Terminazioni di riga:" + +msgid "Unix (recommended)" +msgstr "Unix (consigliato)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "A capo automatico a:" + +msgid "Preserve formatting of existing files" +msgstr "Preserva la formattazione dei file esistenti" + +msgid "Advanced" +msgstr "Avanzate" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Preferenze" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Trascina qui le cartelle\n" +"\n" +"o usa il pulsante +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Trascina qui le cartelle\n" +"\n" +"o usa il pulsante +" + +msgid "Add Folders..." +msgstr "Aggiungi cartelle..." + +msgid "Add folders..." +msgstr "Aggiungi cartelle..." + +msgid "Add Files..." +msgstr "Aggiungi file..." + +msgid "Add files..." +msgstr "Aggiungi file..." + +msgid "Add Wildcard..." +msgstr "Aggiungi caratteri jolly..." + +msgid "Add wildcard..." +msgstr "Aggiungi caratteri jolly..." + +msgid "Paths" +msgstr "Percorsi" + +msgid "Excluded paths" +msgstr "Percorsi esclusi" + +msgid "Additional keywords" +msgstr "Parole chiave aggiuntive" + +msgid "Name of the project the translation is for" +msgstr "Nome del progetto per la traduzione" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "esempio. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (consigliato)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Salva prima il file. Questa sezione non può essere modificata fino ad allora." + +msgid "Comment:" +msgstr "Commento:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "Cance&lla" + +msgid "Clear the comment" +msgstr "Cancella il commento" + +msgid "Create new translations project" +msgstr "Crea nuovo progetto di traduzione" + +msgid "Edit the project" +msgstr "Modifica il progetto" + +msgid "Delete the project" +msgstr "Elimina il progetto" + +msgid "Update all" +msgstr "Aggiorna tutto" + +msgid "Update all catalogs in the project" +msgstr "Aggiorna tutti i cataloghi del progetto" + +msgid "Edit project" +msgstr "Modifica progetto" + +msgid "Project name:" +msgstr "Nome del progetto:" + +msgid "Browse" +msgstr "Sfoglia" + +msgid "Add directory to the list" +msgstr "Aggiungi cartella all'elenco" + +msgid "&New..." +msgstr "&Nuovo..." + +msgid "New from &POT/PO file..." +msgstr "Nuovo da file &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Nuovo da file &POT/PO..." + +msgid "&Open..." +msgstr "&Apri..." + +msgid "Open Recent" +msgstr "Apri recente" + +msgid "Open from Crowdin..." +msgstr "Apri da Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Apri da Crowdin..." + +msgid "&Close" +msgstr "&Chiudi" + +msgid "&Save" +msgstr "&Salva" + +msgid "Save &as..." +msgstr "S&alva come..." + +msgid "Save &As..." +msgstr "S&alva come..." + +msgid "Compile to MO..." +msgstr "Compila in MO..." + +msgid "E&xport as HTML..." +msgstr "E&sporta come HTML..." + +msgid "Check for updates..." +msgstr "Verifica aggiornamenti..." + +msgid "&Preferences..." +msgstr "&Preferenze..." + +msgid "Catalogs &manager" +msgstr "&Gestore dei cataloghi" + +msgid "Catalogs &Manager" +msgstr "&Gestore cataloghi" + +msgid "E&xit" +msgstr "E&sci" + +msgid "Quit" +msgstr "Esci" + +msgid "Copy from singular" +msgstr "Copia dal singolare" + +msgid "Copy From Singular" +msgstr "Copia dal singolare" + +msgid "Translation is &fuzzy" +msgstr "Traduzione non &verificata" + +msgid "Translation Is &Fuzzy" +msgstr "La traduzione non è &verificata" + +msgid "Edit &comment" +msgstr "Modifica il &commento" + +msgid "Edit &Comment" +msgstr "Modifica &commento" + +msgid "Suggestions" +msgstr "Suggerimenti" + +msgid "&Show references" +msgstr "&Visualizza i riferimenti" + +msgid "&Show References" +msgstr "Mo&stra riferimenti" + +msgid "&Find..." +msgstr "&Trova..." + +msgid "Replace..." +msgstr "Sostituisci..." + +msgid "Find next" +msgstr "Trova successivo" + +msgid "Find previous" +msgstr "Trova precedente" + +msgid "Find and Replace..." +msgstr "Trova e sostituisci..." + +msgid "Find Next" +msgstr "Trova successivo" + +msgid "Find Previous" +msgstr "Trova precedente" + +msgid "&Preferences" +msgstr "&Preferenze" + +msgid "Display entry &IDs" +msgstr "Visualizza &ID elemento" + +msgid "Display Entry &IDs" +msgstr "Visualizza ID elemento" + +msgid "Sort by &file order" +msgstr "Ordina per ordine &file" + +msgid "Sort by &File Order" +msgstr "Ordina per ordine &file" + +msgid "Sort by &source" +msgstr "Ordina per &sorgente" + +msgid "Sort by &Source" +msgstr "Ordina per &sorgente" + +msgid "Sort by &translation" +msgstr "Ordina per &traduzione" + +msgid "Sort by &Translation" +msgstr "Ordina per &traduzione" + +msgid "&Group by context" +msgstr "&Raggruppa per contesto" + +msgid "&Group By Context" +msgstr "&Raggruppa per contesto" + +msgid "Entries with errors first" +msgstr "Prima le voci con errori" + +msgid "Entries with Errors First" +msgstr "Prima le voci con errori" + +msgid "&Untranslated entries first" +msgstr "&Prima le voci non tradotte" + +msgid "&Untranslated Entries First" +msgstr "&Prima voci non tradotte" + +msgid "Show sidebar" +msgstr "Visualizza barra laterale" + +msgid "Show status bar" +msgstr "Visualizza barra di stato" + +msgid "C&atalog" +msgstr "C&atalogo" + +msgid "&Update from sources" +msgstr "&Aggiorna dai sorgenti" + +msgid "&Update from Sources" +msgstr "&Aggiorna dai sorgenti" + +msgid "Update from &POT file..." +msgstr "Aggiorna da file &POT..." + +msgid "Update from &POT File..." +msgstr "Aggiorna da file &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizza con Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Riempi traduzioni mancanti prendendole dalla M&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Riempi traduzioni mancanti prendendole dalla M&T..." + +msgid "&Purge deleted translations" +msgstr "&Rimuovi traduzioni eliminate" + +msgid "&Purge Deleted Translations" +msgstr "&Rimuovi traduzioni eliminate" + +msgid "&Validate translations" +msgstr "&Verifica traduzioni" + +msgid "&Validate Translations" +msgstr "Verifica traduzioni" + +msgid "&Properties..." +msgstr "&Proprietà..." + +msgid "&Done and next" +msgstr "&Applica e prosegui" + +msgid "&Done and Next" +msgstr "&Applica e prosegui" + +msgid "&Previous translation" +msgstr "Traduzione &precedente" + +msgid "&Previous Translation" +msgstr "Traduzione &precedente" + +msgid "&Next translation" +msgstr "Traduzione &successiva" + +msgid "&Next Translation" +msgstr "Traduzione &successiva" + +msgid "P&revious unfinished" +msgstr "Incompiuto p&recedente" + +msgid "P&revious Unfinished" +msgstr "Incompiuto p&recedente" + +msgid "Ne&xt unfinished" +msgstr "Incompiuto &successivo" + +msgid "Ne&xt Unfinished" +msgstr "Incompiuto &successivo" + +msgid "Previous plural form" +msgstr "Forma plurale precedente" + +msgid "Previous Plural Form" +msgstr "Forma plurale precedente" + +msgid "Next plural form" +msgstr "Forma plurale successiva" + +msgid "Next Plural Form" +msgstr "Forma plurale successiva" + +msgid "&Online help" +msgstr "&Guida in linea" + +msgid "&Online Help" +msgstr "&Guida in linea" + +msgid "&GNU gettext manual" +msgstr "Documentazione &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Documentazione &GNU gettext" + +msgid "&About Poedit" +msgstr "Inform&azioni su Poedit" + +msgid "&About" +msgstr "Inform&azioni" + +msgid "Extractor setup" +msgstr "Installazione di estrattore" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Elenco di estensioni separate da punto e virgola (ad es. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Invocazione:" + +msgid "Command to extract translations:" +msgstr "Comando per estrarre le traduzioni:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Questo è il comando usato per avviare l'estrattore.\n" +"%o rappresenta il nome del file in uscita, %K l'elenco\n" +"delle parole chiave, %F l'elenco dei file di input,\n" +"%C l'opzione dell'insieme di caratteri (vedi sotto)." + +msgid "An item in keywords list:" +msgstr "Oggetto nell'elenco delle parole chiave:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Sarà accodato alla riga di comando una volta\n" +"per ogni parola chiave. %k rappresenta la parola chiave." + +msgid "An item in input files list:" +msgstr "Oggetto nell'elenco dei file di input:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Verrà aggiunto alla riga di comando un volta\n" +"per ogni file di input. %f rappresenta il nome del file." + +msgid "Source code charset:" +msgstr "Insieme di caratteri del codice sorgente:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Verrà aggiunto alla riga di comando solo se è specificato\n" +"il set di caratteri del sorgente. %c rappresenta il valore del set di di " +"caratteri." + +msgid "Catalog properties" +msgstr "Proprietà del catalogo" + +msgid "Project name and version:" +msgstr "Nome e versione del progetto:" + +msgid "Plural Forms:" +msgstr "Forme plurali:" + +msgid "Use default rules for this language" +msgstr "Usa regole predefinite per questa lingua" + +msgid "Use custom expression" +msgstr "Usa espressione personale" + +msgid "Learn about plural forms" +msgstr "Informazioni sulle forme plurali" + +msgid "Charset:" +msgstr "Set di caratteri:" + +msgid "Team:" +msgstr "Traduttori:" + +msgid "Team's email address:" +msgstr "Indirizzo email dei traduttori:" + +msgid "Translation properties" +msgstr "Proprietà traduzione" + +msgid "Sources paths" +msgstr "Percorsi sorgente" + +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:" + +msgid "Sources keywords" +msgstr "Chiavi ricerca sorgente" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Utilizza queste parole chiave (nomi delle funzioni) per riconoscere le " +"stringhe\n" +"traducibili nei file sorgenti:" + +msgid "Learn about gettext keywords" +msgstr "Info sulle parole chiave gettext" + +msgid "Update summary" +msgstr "Aggiorna riepilogo" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Queste stringhe sono state trovate nei sorgenti ma non nel catalogo.\n" +"Poedit ora le aggiungerà al catalogo." + +msgid "New strings" +msgstr "Nuove stringhe" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Queste stringhe non ci sono più nei sorgenti.\n" +"Poedit ora le rimuoverà dal catalogo." + +msgid "Obsolete strings" +msgstr "Stringhe obsolete" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nuove, 0 obsolete)" + +msgid "Open" +msgstr "Apri" + +msgid "Save catalog" +msgstr "Salva catalogo" + +msgid "Validate" +msgstr "Verifica" + +msgid "Check for errors in the translation" +msgstr "Controlla gli errori nella traduzione" + +msgid "Update" +msgstr "Aggiorna" + +msgid "Update catalog - synchronize it with sources" +msgstr "Aggiorna catalogo - sincronizzalo con i sorgenti" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "" +"Attiva/disattiva se la stringa selezionata ha una traduzione non pronta" + +msgid "Show or hide the sidebar" +msgstr "Visualizza/nascondi la barra laterale" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Testo sorgente precedente:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Il vecchio testo sorgente (prima di modificarlo durante un aggiornamento) " +"che corrisponde alla traduzione non verificata." + +msgid "Notes for translators:" +msgstr "Note per i traduttori:" + +msgid "Add comment" +msgstr "Aggiungi commento" + +msgid "Add Comment" +msgstr "Aggiungi commento" + +msgid "Translation suggestions:" +msgstr "Suggerimenti di traduzione:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nessuna corrispondenza trovata" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nessuna corrispondenza trovata" + +msgid "This string was found in Poedit’s translation memory." +msgstr "La stringa è stata trovata nella memoria di traduzione." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(nuovi: %i obsoleti: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importazione traduzioni: %d" + +msgid "Poedit Update" +msgstr "Aggiornamento di Poedit" + +msgid "Preparing migration..." +msgstr "Preparazione migrazione..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Stato uscita migrazione: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit deve convertire la tua memoria traduzione in un nuovo formato." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Deve essere fatto prima di avviare Poedit. Può richiedere alcuni minuti se " +"hai un sacco di traduzioni memorizzate, ma normalmente dovrebbe più veloce." + +msgid "Proceed" +msgstr "Procedi" + +msgid "Translation memory migration failed." +msgstr "Migrazione memoria traduzione fallita." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"I dati della memoria traduzione non possono essere migrati. L'errore è:\n" +"\n" +"%s\n" +"Invialo a help@poedit.net e noi lo correggeremo." + +msgid "Cannot create temporary directory." +msgstr "Impossibile creare la cartella temporanea." + +msgid "Welcome to Poedit" +msgstr "Benvenuto in Poedit" + +msgid "Edit a translation" +msgstr "Modifica una traduzione" + +msgid "Open an existing PO file and edit the translation." +msgstr "Apri un file PO esistente e modifica la traduzione." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Apri un file PO o un modello POT e crea una nuova traduzione a partire da " +"esso." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Collabora a una traduzione con Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Scarica un file da un progetto Crowdin, traducilo e sincronizzalo con le tue " +"modifiche. Gli altri traduttori vedranno sul loro programma le tue modifiche " +"in un attimo, facendo click su sincronizza e senza rischiare di lavorare " +"sulle stesse parti di altri." + +msgid "What is Crowdin?" +msgstr "Che cos'è Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Non ci sono traduzioni, Questo è strano." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Gli elementi di traduzione non sono stati aggiunti manualmente nel sistema " +"Gettext, ma sono stati\n" +"automaticamente estratti dal codice sorgente. In questo modo, rimangono " +"aggiornati e accurati.\n" +"I traduttori tipicamente usano i file modello (POT) preparati per questo " +"dagli sviluppatori." + +msgid "(Learn more about GNU gettext)" +msgstr "(Altre informazioni su GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"La via più semplice per compilare questo catalogo è aggiornarlo da un file " +"POT." + +msgid "Update from POT" +msgstr "Aggiorna da file POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Estrai stringhe da tradurre da un modello POT esistente." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Puoi anche estrarre stringhe da tradurre direttamente dal codice sorgente:" + +msgid "Extract from sources" +msgstr "Estrai dai sorgenti" + +msgid "Configure source code extraction in Properties." +msgstr "Configura estrazione codice sorgente in Proprietà." + +msgid "Sync" +msgstr "Sincronizza" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizza la traduzione con Crowdin" diff --git a/locales/ja.mo b/locales/ja.mo new file mode 100644 index 0000000000000000000000000000000000000000..7e16fbbe00c10123d84f5b9dd4929189e48e8b72 GIT binary patch literal 50147 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 literal 0 HcmV?d00001 diff --git a/locales/ja.po b/locales/ja.po new file mode 100644 index 0000000..b31624b --- /dev/null +++ b/locales/ja.po @@ -0,0 +1,1939 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:04-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ja\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "この通知メッセージを表示しない" + +msgid "Don't Show Again" +msgstr "今後表示しない" + +msgid "Don't show again" +msgstr "今後表示しない" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "ファイル ‘%2$s' の%1$i行目が正しく読み込めませんでした。" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d行目 (ファイル '%s') が破損しています。無効な%sデータです。" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "書式が不正なヘッダ: ‘%s’" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"カタログファイルが破損しています。msgid_plural が指定されていますが msgstr は" +"複数形表記ではありません。" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"カタログファイルが破損しています。複数形表記の msgstr が使われていますが " +"msgid_plural の指定がありません。" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"カタログを読み出す際にエラーが発生しました。このため一部のデータが失われたり" +"破損したりしている可能性があります。" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "ファイル %s を読み込めません。おそらくデータが破損しています。" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"ファイル ‘%s’ は読み出し専用のため保存できません。\n" +"別のファイル名で保存してください。" + +#, c-format +msgid "Couldn't save file %s." +msgstr "ファイル %s を保存できません。" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "ファイルを整形する際に問題が発生しましたが、保存は完了しています。" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"カタログは設定の中で指定された ‘%s’ キャラクタセットで保存すること\n" +"ができませんでした。\n" +"代わりに UTF-8 で保存し、設定も変更されました。" + +msgid "Error saving catalog" +msgstr "カタログ保存エラー" + +msgid "PO Translation Files" +msgstr "PO 翻訳ファイル" + +msgid "POT Translation Templates" +msgstr "POT 翻訳テンプレート" + +msgid "All Translation Files" +msgstr "すべての翻訳ファイル" + +msgid "Merging differences..." +msgstr "差分を統合しています…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "‘%s’ は有効な POT ファイルではありません。" + +msgid "(Use default language)" +msgstr "(デフォルト言語を使用)" + +msgid "Select your preferred language" +msgstr "お好みの言語を選択してください" + +msgid "Language selection" +msgstr "言語選択" + +msgid "You must restart Poedit for this change to take effect." +msgstr "変更を有効にするには Poedit を再起動してください。" + +msgid "Downloading translations is disabled in this project." +msgstr "このプロジェクトでは、翻訳のダウンロードが無効になっています。" + +msgid "Not authorized, please sign in again." +msgstr "未認証です。もう一度ログインしてください。" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin は、オンラインのローカリゼーション管理プラットフォームであり、共同翻" +"訳ツールです。Poedit は Crowdin で管理されている PO ファイルをシームレスに同" +"期することができます。" + +msgid "Sign In" +msgstr "ログイン" + +msgid "Sign in" +msgstr "ログイン" + +msgid "Sign Out" +msgstr "ログアウト" + +msgid "Sign out" +msgstr "ログアウト" + +msgid "Waiting for authentication…" +msgstr "認証を待機中…" + +msgid "Updating user information…" +msgstr "ユーザー情報を更新しています…" + +msgid "Signed in as:" +msgstr "ログイン中:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin について" + +msgid "Learn more about Crowdin" +msgstr "Crowdin について" + +msgid "Sign in to Crowdin" +msgstr "Crowdin にログイン" + +msgid "Open Crowdin translation" +msgstr "Crowdin 翻訳を開く" + +msgid "Project:" +msgstr "プロジェクト:" + +msgid "Language:" +msgstr "言語:" + +msgid "File:" +msgstr "ファイル:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "あなたの Crowdin アカウントには翻訳プロジェクトが何もありません。" + +msgid "This project has no files that can be translated in Poedit." +msgstr "このプロジェクトには Poedit で翻訳できるファイルがありません。" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "このファイルは Crowdin の Web インターフェイスでのみ編集できます。" + +msgid "Downloading latest translations…" +msgstr "最新の翻訳をダウンロード中…" + +msgid "Syncing with Crowdin" +msgstr "Crowdin と同期中" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin との同期に失敗しました。" + +msgid "Crowdin error" +msgstr "Crowdin エラー" + +msgid "Uploading translations…" +msgstr "翻訳をアップロード中…" + +msgid "&Copy" +msgstr "コピー (&C)" + +msgid "Learn more" +msgstr "さらに詳しく" + +msgid "Learn More" +msgstr "さらに詳しく" + +#, c-format +msgid "Failed command: %s" +msgstr "失敗したコマンド: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "gettext カタログの統合に失敗しました。" + +msgid "Scanning files..." +msgstr "ファイルをスキャン中..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s ファイルを解析中…" + +msgid "Failed to load extracted catalog." +msgstr "抽出したカタログの読み込みに失敗しました。" + +msgid "&Help" +msgstr "ヘルプ (&H)" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO ファイルは Poedit で直接編集できません。" + +msgid "Error opening file" +msgstr "ファイルを開く際にエラーが発生しました" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"代わりに、対応する PO ファイルを開いてください。そちらを保存する際に MO ファ" +"イルも更新されます。" + +msgid "don't delete temporary files (for debugging)" +msgstr "一時ファイルを削除しない (デバッグ向け)" + +msgid "handle a poedit:// URI" +msgstr "poedit:// URI を処理" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit プロセスとの通信に失敗しました。" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "未処理例外が発生しました: %s" + +msgid "Unhandled exception occurred." +msgstr "未処理例外が発生しました。" + +msgid "Open catalog" +msgstr "カタログを開く" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "ファイル ‘%s’ が見つかりません。" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s について" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "バージョン %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "サービス" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s を非表示" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "他を非表示" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "すべて表示" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s を終了" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poeditは使いやすい翻訳エディタです。" + +msgid "Catalogs Manager" +msgstr "カタログマネージャ" + +msgid "Check for Updates..." +msgstr "更新を確認..." + +msgid "&Edit" +msgstr "編集 (&E)" + +msgid "Undo" +msgstr "元に戻す" + +msgid "Redo" +msgstr "再実行" + +msgid "Paste and Match Style" +msgstr "同じスタイルでペースト" + +msgid "Delete" +msgstr "削除" + +msgid "Spelling and Grammar" +msgstr "綴りと文法" + +msgid "Show Spelling and Grammar" +msgstr "綴りと文法を表示" + +msgid "Check Document Now" +msgstr "ドキュメンテーションを今すぐ確認" + +msgid "Check Spelling While Typing" +msgstr "入力中にスペルチェック" + +msgid "Check Grammar With Spelling" +msgstr "文法と綴りを確認" + +msgid "Correct Spelling Automatically" +msgstr "綴りを自動修正" + +msgid "Substitutions" +msgstr "代替案" + +msgid "Show Substitutions" +msgstr "代替案を表示" + +msgid "Smart Copy/Paste" +msgstr "スマートコピー & ペースト" + +msgid "Smart Quotes" +msgstr "スマート引用" + +msgid "Smart Dashes" +msgstr "スマートダッシュ" + +msgid "Smart Links" +msgstr "スマートリンク" + +msgid "Text Replacement" +msgstr "テキスト置き換え" + +msgid "Transformations" +msgstr "変換" + +msgid "Make Upper Case" +msgstr "大文字に変換" + +msgid "Make Lower Case" +msgstr "小文字に変換" + +msgid "Capitalize" +msgstr "キャピタライズ" + +msgid "Speech" +msgstr "スピーチ" + +msgid "Start Speaking" +msgstr "読み上げを開始" + +msgid "Stop Speaking" +msgstr "読み上げを停止" + +msgid "&View" +msgstr "表示 (&V)" + +msgid "Enter Full Screen" +msgstr "全画面表示" + +msgid "Window" +msgstr "ウィンドウ" + +msgid "Minimize" +msgstr "最小化" + +msgid "Zoom" +msgstr "ズーム" + +msgid "Bring All to Front" +msgstr "すべてを手前に移動" + +msgid "PO Translation" +msgstr "PO 翻訳" + +msgid "The file cannot be opened." +msgstr "ファイルを開けません。" + +msgid "Invalid file" +msgstr "不正なファイル" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "ファイルが破損しているか、Poedit が認識できない形式のようです。" + +msgid "&Undo" +msgstr "取り消し (&U)" + +msgid "&Redo" +msgstr "やり直し (&R)" + +msgid "Cu&t" +msgstr "切り抜き (&t)" + +msgid "Cut" +msgstr "切り抜き" + +msgid "Copy" +msgstr "コピー" + +msgid "&Paste" +msgstr "ペースト (&P)" + +msgid "Paste" +msgstr "ペースト" + +msgid "&Delete" +msgstr "削除 (&D)" + +msgid "Select &All" +msgstr "すべてを選択 (&A)" + +msgid "Select All" +msgstr "すべてを選択" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "上へ" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "下へ" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit へドロップできるのは1回につき1ファイルのみです。" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "ファイル ‘%s’ はメッセージカタログではありません。" + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "ファイル (&F)" + +msgid "&Go" +msgstr "移動 (&G)" + +msgid "Source text:" +msgstr "ソーステキスト:" + +msgid "Singular:" +msgstr "単数形:" + +msgid "Plural:" +msgstr "複数形:" + +msgid "Translation:" +msgstr "翻訳:" + +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 ファイルはテンプレートのみで、それ自体に翻訳は含まれていません。 \n" +"翻訳を行うには、このテンプレートをベースにして新しい PO ファイルを作成しま" +"す。" + +msgid "Create New Translation" +msgstr "新しい翻訳を作成" + +msgid "Create new translation" +msgstr "翻訳プロジェクトを新規作成する" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"%sの辞書がインストールされていないためスペルチェックは無効化されています。" + +msgid "Install" +msgstr "インストール" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "カタログの変更を保存しますか ?" + +msgid "Save changes" +msgstr "変更を保存" + +msgid "Your changes will be lost if you don't save them." +msgstr "保存しないと追加した変更は失われます。" + +msgid "Save" +msgstr "保存" + +msgid "Don't save" +msgstr "保存しない" + +msgid "Don't Save" +msgstr "保存しない" + +msgid "Save as..." +msgstr "名前を付けて保存..." + +msgid "Compile to..." +msgstr "形式を指定してコンパイル…" + +msgid "Compiled Translation Files" +msgstr "翻訳ファイルをコンパイルしました" + +msgid "Export as..." +msgstr "書式を指定してエクスポート…" + +msgid "HTML Files" +msgstr "HTML ファイル" + +msgid "Open catalog template" +msgstr "カタログの雛形を開く" + +msgid "Updating catalog" +msgstr "カタログを更新中" + +msgid "Source code not available." +msgstr "ソースコードが存在しません。" + +msgid "Updating failed" +msgstr "更新に失敗しました" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"カタログの属性で指定された位置にコードが見つからなかったため、翻訳をソース" +"コードから更新できませんでした。" + +msgid "Entries in the catalog are probably incorrect." +msgstr "カタログ中の項目が正しくない可能性があります。" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"カタログの更新に失敗しました。詳細を見るには ‘詳細 >>’ をクリックしてくださ" +"い。" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "翻訳に%d件の問題が見つかりました。" + +msgid "Validation results" +msgstr "検査の結果" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"エラーがある項目はリスト中で赤くマークされています。エラーの詳細は、その項目" +"を選択すると表示されます。" + +msgid "The file was saved safely." +msgstr "ファイルを安全に保存しました。" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"ファイルを安全に保存し MO 形式にコンパイルしましたが、恐らく正常に動作しない" +"でしょう。" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"ファイルは安全に保存されましたが MO 形式にコンパイルできなかったため使用でき" +"ません。" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"ファイルを MO 形式にコンパイルしましたが、恐らく正常に動作しないでしょう。" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "ファイルを MO 形式にコンパイルして使用することができません。" + +msgid "No problems with the translation found." +msgstr "翻訳に問題は見つかりませんでした。" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "この翻訳を利用できますが、%d件の項目がまだ翻訳されていません。" + +msgid "The translation is ready for use." +msgstr "この翻訳は使用できます。" + +msgid "Context:" +msgstr "コンテキスト:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit は、ファイル「%s」内の無効なコンテンツを自動的に修正しました。" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"ファイルに重複する項目が含まれています。重複項目は PO ファイルでは許可されて" +"おらず、ファイルの利用を妨げます。Poedit はこの問題を修正しましたが、未確定と" +"してマークされている項目を確認し必要に応じて修正する必要があります。" + +msgid "Language of the translation isn't set." +msgstr "翻訳の言語が設定されていません。" + +msgid "Set Language" +msgstr "言語を設定" + +msgid "Set language" +msgstr "言語を設定" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"翻訳言語が正しく設定されていない場合、提案は利用できません。また、複数形など" +"の他の機能にも影響する可能性があります。" + +msgid "Language of the translation is the same as source language." +msgstr "翻訳言語がソース言語と同一です。" + +msgid "Fix Language" +msgstr "言語を修正" + +msgid "Fix language" +msgstr "言語を修正" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"このカタログには複数形を含む項目がありますが、Plural-Forms ヘッダが設定されて" +"いません。" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"カタログの中の項目がカタログの Plural-Forms ヘッダで示された数と異なる複数形" +"を持っています" + +msgid "Required header Plural-Forms is missing." +msgstr "必要なヘッダ Plural-Forms がありません。" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Plural-Forms ヘッダに文法エラーがあります (\"%s\") 。" + +msgid "Fix the Header" +msgstr "ヘッダーを修正" + +msgid "Fix the header" +msgstr "ヘッダーを修正" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"このカタログで使われている複数形表現は、%sの一般的なものではありません。" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "レビュー" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "メッセージカタログ ‘%s’ の読み込みエラーです。" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "翻訳済み: %d/%d件中 (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "未翻訳: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d件のエラー" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d項目" + +msgid " (unsaved)" +msgstr " (未保存)" + +msgid " (modified)" +msgstr " (変更済)" + +msgid "Go" +msgstr "Go" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "翻訳メモリを更新できませんでした: %s" + +msgid "Purge deleted translations" +msgstr "削除された翻訳を一掃する" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "もう使われていない翻訳をすべて削除しますか ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"一掃を実行すると、削除済みとしてマークされた翻訳はすべて完全に削除されます。" +"将来再び追加された場合は翻訳し直す必要があります。" + +msgid "Keep" +msgstr "保持する" + +msgid "Purge" +msgstr "翻訳の一掃" + +msgid "Fill missing translations from TM" +msgstr "翻訳メモリを使って未翻訳項目を埋める" + +msgid "Only fill in exact matches" +msgstr "完全な一致のみ採用する" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"デフォルトでは正確ではない一致結果も使われ、未翻訳としてマークされます。正確" +"な一致のみを含めたい場合、このオプションにチェックを入れてください。" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "完全な一致を未確定としてマークしない" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"翻訳メモリの品質を信頼できる場合のみ有効化してください。デフォルトでは翻訳メ" +"モリからの一致は未確定にマークされ、レビューが必要となります。" + +msgid "Fill" +msgstr "埋める" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "翻訳メモリを使って%d件の項目を埋めました。" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"翻訳は正確でない可能性があるため、未確定にマークされています。間違っていない" +"かどうかレビューしてください。" + +msgid "No entries could be filled from the translation memory." +msgstr "翻訳メモリを使って埋められる項目はありませんでした。" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"このファイルに含まれるコンテンツに似た文字列が翻訳メモリには含まれていませ" +"ん。" + +msgid "Translating" +msgstr "翻訳中" + +msgid "Filling missing translations from TM..." +msgstr "翻訳メモリを使って未翻訳項目を埋めています…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u件の文字列を翻訳済み" + +msgid "Copy from source text" +msgstr "ソーステキストからコピー" + +msgid "Copy from Source Text" +msgstr "ソーステキストからコピー" + +msgid "Clear translation" +msgstr "翻訳をクリア" + +msgid "Clear Translation" +msgstr "翻訳をクリア" + +msgid "Edit comment" +msgstr "コメントを編集" + +msgid "Edit Comment" +msgstr "コメントを編集" + +msgid "References:" +msgstr "参照位置:" + +msgid "Everything" +msgstr "すべて" + +#, c-format +msgid "Form %i" +msgstr "形式 %i" + +msgid "Singular" +msgstr "単数形" + +msgid "Zero" +msgstr "0" + +msgid "One" +msgstr "1" + +msgid "Two" +msgstr "2" + +msgid "Plural" +msgstr "複数形" + +msgid "Other" +msgstr "その他" + +msgid "&Bookmarks" +msgstr "ブックマーク (&B)" + +#, c-format +msgid "Set bookmark %i" +msgstr "ブックマーク %i を設定" + +#, c-format +msgid "Go to bookmark %i" +msgstr "ブックマーク %i へ移動" + +#, c-format +msgid "Set Bookmark %i" +msgstr "ブックマーク %i を設定" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "ブックマーク %i へ移動" + +msgid "Hide Sidebar" +msgstr "サイドバーを隠す" + +msgid "Show Sidebar" +msgstr "サイドバーを表示" + +msgid "Hide Status Bar" +msgstr "ステータスバーを非表示" + +msgid "Show Status Bar" +msgstr "ステータスバーを表示" + +msgid "Source text" +msgstr "ソーステキスト" + +msgid "Translation" +msgstr "対訳" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "ソース テキスト — %s" + +msgid "unknown language" +msgstr "不明な言語" + +#, c-format +msgid "Translation — %s" +msgstr "翻訳 — %s" + +msgid "Error:" +msgstr "エラー:" + +msgid "Source file" +msgstr "ソースファイル" + +msgid "Source file occurrence:" +msgstr "ソースファイルでの出現:" + +msgid "Open in Editor" +msgstr "エディターで開く" + +msgid "Open in editor" +msgstr "エディターで開く" + +msgid "No references for the selected item." +msgstr "選択項目の参照情報はありません。" + +#, c-format +msgid "Error opening file %s!" +msgstr "ファイル %s を開く際にエラーが発生しました。" + +msgid "Find" +msgstr "検索" + +msgid "Replace" +msgstr "置き換え" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "設定" + +msgid "Ignore case" +msgstr "大文字小文字を無視" + +msgid "Wrap around" +msgstr "回り込み" + +msgid "Whole words only" +msgstr "空白等で区切られた単語だけを探す" + +msgid "Find in source texts" +msgstr "ソース テキストを検索" + +msgid "Find in translations" +msgstr "翻訳された文字列を検索対象に含める" + +msgid "Find in comments" +msgstr "コメントを検索対象に含める" + +msgid "Close" +msgstr "閉じる" + +msgid "Replace All" +msgstr "すべて置換" + +msgid "Replace all" +msgstr "すべて置換" + +msgid "< &Previous" +msgstr "< 前へ (&P)" + +msgid "&Next >" +msgstr "次へ > (&N)" + +msgid "String to find" +msgstr "検索する文字列" + +msgid "Replacement string" +msgstr "置換文字列" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "プログラムを実行できません: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "言語コードまたは言語名 (例: en_GB)" + +msgid "Translation Language" +msgstr "翻訳言語" + +msgid "Language of the translation:" +msgstr "翻訳の言語:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - カタログマネージャ" + +msgid "Catalog" +msgstr "カタログ" + +msgid "Total" +msgstr "合計" + +msgid "Untrans" +msgstr "未翻訳" + +msgid "Fuzzy" +msgstr "未確定" + +msgid "Bad Tokens" +msgstr "不正な単語" + +msgid "Last modified" +msgstr "最終更新" + +msgid "Select directory" +msgstr "ディレクトリの選択" + +msgid "Directories:" +msgstr "ディレクトリ:" + +msgid "" +msgstr "<名称未設定>" + +msgid "Do you want to delete the project?" +msgstr "プロジェクトを削除してもよいですか ?" + +msgid "Confirmation" +msgstr "確認" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"このプロジェクトのすべてのカタログを\n" +"更新してもよいですか ?" + +msgid "Information about the translator" +msgstr "翻訳者に関する情報" + +msgid "Name:" +msgstr "名前:" + +msgid "Your Name" +msgstr "あなたの名前:" + +msgid "Email:" +msgstr "メール:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"お名前とメールアドレスは GNU gettext ファイルの Last-Translator ヘッダーを設" +"定するためにのみ使われます。" + +msgid "Editing" +msgstr "編集中" + +msgid "Automatically compile MO file when saving" +msgstr "保存する際に MO ファイルを自動コンパイル" + +msgid "Show summary after catalog update" +msgstr "カタログ更新後に要約を表示" + +msgid "Check spelling" +msgstr "スペルチェック" + +msgid "Always change focus to text input field" +msgstr "フォーカスは常にテキストフィールドに置く" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"チェックすると一覧にフォーカスが移動しなくなります。キーボードによる項目の移" +"動は Ctrl + 矢印キー のみとなります。" + +msgid "Appearance" +msgstr "外観" + +msgid "Use custom list font:" +msgstr "カスタムリストフォントを使う:" + +msgid "Use custom text fields font:" +msgstr "カスタムテキストフィールドフォントを使う:" + +msgid "Change UI language" +msgstr "Poedit の UI 言語を変更" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Window 8 以降が必要)" + +msgid "General" +msgstr "一般" + +msgid "Use translation memory" +msgstr "翻訳メモリを使う" + +msgid "Learn From Files..." +msgstr "ファイルから学習…" + +msgid "Learn from files..." +msgstr "ファイルから学習…" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "リセット" + +msgid "Consult TM when updating from sources" +msgstr "ソースからの更新の際に翻訳メモリを調べる" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"有効化すると、Poedit は翻訳メモリに保存されている以前の翻訳を使って\n" +"新しい項目を埋めるよう試みます。もし翻訳メモリが空に近い場合、あまり\n" +"効率的には動作しないでしょう。より多くの翻訳を編集すればするほど、\n" +"翻訳メモリが大きくなり結果も改善されます。" + +msgid "Stored translations:" +msgstr "保存された翻訳:" + +msgid "Database size on disk:" +msgstr "ディスク上のデータベースサイズ:" + +msgid "Select translation files to import" +msgstr "インポートする翻訳ファイルを選択" + +msgid "Translation Memory" +msgstr "翻訳メモリ" + +msgid "Importing translations..." +msgstr "翻訳をインポート中…" + +msgid "Finalizing..." +msgstr "完了処理中…" + +msgid "Reset translation memory" +msgstr "翻訳メモリをリセット" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "本当に翻訳メモリをリセットしてよいですか ?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"翻訳メモリをリセットすると、保存された翻訳がすべて削除されます。元に戻すこと" +"はできません。" + +msgid "Cancel" +msgstr "キャンセル" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "翻訳メモリ" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"ソースコード抽出ツールは、ソースコードファイル内にある翻訳可能な文字列を見つ" +"けて抽出するために使われます。" + +msgid "New" +msgstr "新規" + +msgid "Edit" +msgstr "編集" + +msgid "Delete extractor" +msgstr "抽出ツールを削除" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "本当に「%s」抽出ツールを削除してもよいですか ?" + +msgid "Extractors" +msgstr "抽出ツール" + +msgid "Accounts" +msgstr "アカウント" + +msgid "Automatically check for updates" +msgstr "自動的に更新を確認" + +msgid "Include beta versions" +msgstr "ベータ版を含める" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"ベータバージョンは最新の機能や改善を含みますが、安定性が低い可能性がありま" +"す。" + +msgid "Updates" +msgstr "更新" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"これらの設定は PO ファイルの内部フォーマットに影響します。例えばバージョンコ" +"ントロールのような特別な要件がある場合は調整してください。" + +msgid "Line endings:" +msgstr "改行:" + +msgid "Unix (recommended)" +msgstr "Unix (推奨)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "折り返し:" + +msgid "Preserve formatting of existing files" +msgstr "既存ファイルのフォーマットを保護する" + +msgid "Advanced" +msgstr "上級者モード" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s 環境設定" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"フォルダーをここにドラッグアンドドロップ\n" +"\n" +"または [+] ボタンを使ってください。" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"フォルダーをここにドラッグアンドドロップ\n" +"\n" +"または [+] ボタンを使ってください。" + +msgid "Add Folders..." +msgstr "フォルダーを追加…" + +msgid "Add folders..." +msgstr "フォルダーを追加…" + +msgid "Add Files..." +msgstr "ファイルを追加…" + +msgid "Add files..." +msgstr "ファイルを追加…" + +msgid "Add Wildcard..." +msgstr "ワイルドカードを追加…" + +msgid "Add wildcard..." +msgstr "ワイルドカードを追加…" + +msgid "Paths" +msgstr "パス" + +msgid "Excluded paths" +msgstr "除外するパス" + +msgid "Additional keywords" +msgstr "追加キーワード" + +msgid "Name of the project the translation is for" +msgstr "翻訳するプロジェクトの名称" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "例: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (推奨)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"まずファイルを保存してください。保存するまでこのセクションは編集できません。" + +msgid "Comment:" +msgstr "コメント:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "クリア(&L)" + +msgid "Clear the comment" +msgstr "コメントのクリア" + +msgid "Create new translations project" +msgstr "翻訳プロジェクトを作成する" + +msgid "Edit the project" +msgstr "このプロジェクトを編集" + +msgid "Delete the project" +msgstr "翻訳プロジェクトを削除する" + +msgid "Update all" +msgstr "全て更新する" + +msgid "Update all catalogs in the project" +msgstr "プロジェクトのすべてのカタログを更新する" + +msgid "Edit project" +msgstr "プロジェクトを編集" + +msgid "Project name:" +msgstr "プロジェクト名:" + +msgid "Browse" +msgstr "参照" + +msgid "Add directory to the list" +msgstr "ディレクトリをリストに追加" + +msgid "&New..." +msgstr "新規カタログ… (&N)" + +msgid "New from &POT/PO file..." +msgstr "&POT ファイルを元に更新します…" + +msgid "New From &POT/PO File..." +msgstr "POT ファイルを元に更新… (&P)" + +msgid "&Open..." +msgstr "開く… (&O)" + +msgid "Open Recent" +msgstr "最近のファイルを開く" + +msgid "Open from Crowdin..." +msgstr "Crowdin から開く…" + +msgid "Open From Crowdin..." +msgstr "Crowdin から開く…" + +msgid "&Close" +msgstr "閉じる (&C)" + +msgid "&Save" +msgstr "保存 (&S)" + +msgid "Save &as..." +msgstr "名前を付けて保存 (&A)…" + +msgid "Save &As..." +msgstr "名前を付けて保存 (&A)..." + +msgid "Compile to MO..." +msgstr "MO にコンパイル…" + +msgid "E&xport as HTML..." +msgstr "HTML としてエクスポート… (&E)" + +msgid "Check for updates..." +msgstr "更新を確認…" + +msgid "&Preferences..." +msgstr "設定… (&P)" + +msgid "Catalogs &manager" +msgstr "カタログマネージャ (&M)" + +msgid "Catalogs &Manager" +msgstr "カタログマネージャ (&M)" + +msgid "E&xit" +msgstr "終了 (&X)" + +msgid "Quit" +msgstr "終了" + +msgid "Copy from singular" +msgstr "単数形から複製" + +msgid "Copy From Singular" +msgstr "単数形から複製" + +msgid "Translation is &fuzzy" +msgstr "未確定翻訳 (&F)" + +msgid "Translation Is &Fuzzy" +msgstr "未確定翻訳 (&F)" + +msgid "Edit &comment" +msgstr "コメントを編集 (&C)" + +msgid "Edit &Comment" +msgstr "コメントを編集 (&C)" + +msgid "Suggestions" +msgstr "提案" + +msgid "&Show references" +msgstr "参照画面の表示 (&S)" + +msgid "&Show References" +msgstr "参照画面の表示 (&S)" + +msgid "&Find..." +msgstr "検索… (&F)" + +msgid "Replace..." +msgstr "置換…" + +msgid "Find next" +msgstr "次を検索" + +msgid "Find previous" +msgstr "前を検索" + +msgid "Find and Replace..." +msgstr "検索・置換" + +msgid "Find Next" +msgstr "次を検索" + +msgid "Find Previous" +msgstr "前を検索" + +msgid "&Preferences" +msgstr "設定 (&P)" + +msgid "Display entry &IDs" +msgstr "項目 ID を表示 (&I)" + +msgid "Display Entry &IDs" +msgstr "項目 ID を表示 (&I)" + +msgid "Sort by &file order" +msgstr "ファイル順でソート (&F)" + +msgid "Sort by &File Order" +msgstr "ファイル順でソート (&F)" + +msgid "Sort by &source" +msgstr "ソース順でソート (&S)" + +msgid "Sort by &Source" +msgstr "ソース順でソート (&S)" + +msgid "Sort by &translation" +msgstr "翻訳順でソート (&T)" + +msgid "Sort by &Translation" +msgstr "翻訳順でソート (&T)" + +msgid "&Group by context" +msgstr "コンテクストでグループ化 (&G)" + +msgid "&Group By Context" +msgstr "コンテクストでグループ化 (&G)" + +msgid "Entries with errors first" +msgstr "エラーのある項目を先頭に表示" + +msgid "Entries with Errors First" +msgstr "エラーのある項目を先頭に表示" + +msgid "&Untranslated entries first" +msgstr "未訳の項目を先頭に (&U)" + +msgid "&Untranslated Entries First" +msgstr "未訳の項目を先頭に (&U)" + +msgid "Show sidebar" +msgstr "サイドバーを表示" + +msgid "Show status bar" +msgstr "ステータスバーを表示" + +msgid "C&atalog" +msgstr "カタログ(&A)" + +msgid "&Update from sources" +msgstr "ソースから更新 (&U)" + +msgid "&Update from Sources" +msgstr "ソースから更新 (&U)" + +msgid "Update from &POT file..." +msgstr "POT ファイルから更新… (&P)" + +msgid "Update from &POT File..." +msgstr "POT ファイルから更新… (&P)" + +msgid "Sync with Crowdin" +msgstr "Crowdin と同期" + +msgid "Fill missing translations from &TM..." +msgstr "翻訳メモリを使って未翻訳項目を埋める… (&T)" + +msgid "Fill Missing Translations from &TM..." +msgstr "翻訳メモリを使って未翻訳項目を埋める… (&T)" + +msgid "&Purge deleted translations" +msgstr "削除された翻訳を一掃する (&P)" + +msgid "&Purge Deleted Translations" +msgstr "削除された翻訳を一掃する (&P)" + +msgid "&Validate translations" +msgstr "翻訳を検査 (&V)" + +msgid "&Validate Translations" +msgstr "翻訳を検査 (&V)" + +msgid "&Properties..." +msgstr "設定… (&P)" + +msgid "&Done and next" +msgstr "翻訳済みとし、次へ (&D)" + +msgid "&Done and Next" +msgstr "翻訳済みとし、次へ (&D)" + +msgid "&Previous translation" +msgstr "前の翻訳 (&P)" + +msgid "&Previous Translation" +msgstr "前の翻訳 (&P)" + +msgid "&Next translation" +msgstr "次の翻訳 (&N)" + +msgid "&Next Translation" +msgstr "次の翻訳 (&N)" + +msgid "P&revious unfinished" +msgstr "前の未訳または未確定 (&R)" + +msgid "P&revious Unfinished" +msgstr "前の未訳または未確定 (&R)" + +msgid "Ne&xt unfinished" +msgstr "次の未訳または未確定 (&X)" + +msgid "Ne&xt Unfinished" +msgstr "次の未訳または未確定 (&X)" + +msgid "Previous plural form" +msgstr "前の複数形" + +msgid "Previous Plural Form" +msgstr "前の複数形" + +msgid "Next plural form" +msgstr "次の複数形" + +msgid "Next Plural Form" +msgstr "次の複数形" + +msgid "&Online help" +msgstr "オンラインヘルプ (&O)" + +msgid "&Online Help" +msgstr "オンラインヘルプ (&O)" + +msgid "&GNU gettext manual" +msgstr "GNU gettext ドキュメント (&G)" + +msgid "&GNU gettext Manual" +msgstr "GNU gettext ドキュメント (&G)" + +msgid "&About Poedit" +msgstr "Poedit について (&A)" + +msgid "&About" +msgstr "このプログラムについて (&A)" + +msgid "Extractor setup" +msgstr "抽出ツール設定" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "セミコロン区切りの拡張子 (例. *.cpp;*h):" + +msgid "Invocation:" +msgstr "呼び出し:" + +msgid "Command to extract translations:" +msgstr "翻訳を抽出するコマンド:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"これは抽出ツールを立ち上げるためのコマンドです。\n" +"%o は出力ファイルの名前として展開され、%K は\n" +"キーワードのリスト、%F は入力ファイルのリスト、\n" +"%C は文字集合フラグ (以下を参照) です。" + +msgid "An item in keywords list:" +msgstr "キーワード一覧の各項目:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"各キーワードごとに一回コマンドラインへ追加されます。\n" +"%k にキーワード名が展開されます。" + +msgid "An item in input files list:" +msgstr "入力ファイル一覧の各項目:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"各入力ファイルごとに一回コマンドラインへ追加されます。\n" +"%f にファイル名が展開されます。" + +msgid "Source code charset:" +msgstr "ソースコードの文字符号化法:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"ソースコードの文字符号化法が指定された場合のみ\n" +"コマンドラインに追加されます。%c に符号化法の値が展開されます。" + +msgid "Catalog properties" +msgstr "カタログの設定" + +msgid "Project name and version:" +msgstr "プロジェクト名とバージョン:" + +msgid "Plural Forms:" +msgstr "複数形:" + +msgid "Use default rules for this language" +msgstr "この言語のデフォルトルールを使う" + +msgid "Use custom expression" +msgstr "カスタム表現を使用" + +msgid "Learn about plural forms" +msgstr "複数形とは" + +msgid "Charset:" +msgstr "文字符号化法:" + +msgid "Team:" +msgstr "翻訳チーム:" + +msgid "Team's email address:" +msgstr "翻訳チームのメールアドレス:" + +msgid "Translation properties" +msgstr "翻訳の設定" + +msgid "Sources paths" +msgstr "ソースの検索パス" + +msgid "Extract text from source files in the following directories:" +msgstr "以下のディレクトリのソースファイルからテキストを抽出:" + +msgid "Base path:" +msgstr "ベースのパス:" + +msgid "Sources keywords" +msgstr "ソース中のキーワード" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"ソースファイル中でこれらのキーワード (または関数名) を\n" +"翻訳対象文字列の認識に使います:" + +msgid "Learn about gettext keywords" +msgstr "gettext キーワードとは" + +msgid "Update summary" +msgstr "要約を更新" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"これらの文字列がソースファイル中に存在しますが、カタログには含まれていません" +"でした。\n" +"Poedit はカタログにこの文字列を追加します。" + +msgid "New strings" +msgstr "新規文字列" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"これらの文字列はソースファイルにはもう存在しません。 \n" +"Poedit はカタログからこの文字列を取り除きます。" + +msgid "Obsolete strings" +msgstr "もう使われていない文字列" + +msgid "(0 new, 0 obsolete)" +msgstr "(新規 0、使用しないように変更 0)" + +msgid "Open" +msgstr "開く" + +msgid "Save catalog" +msgstr "カタログの保存" + +msgid "Validate" +msgstr "検査" + +msgid "Check for errors in the translation" +msgstr "翻訳中のエラーをチェック" + +msgid "Update" +msgstr "更新する" + +msgid "Update catalog - synchronize it with sources" +msgstr "カタログの更新 - ソースと同期させる" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "選択した文字列に未確定翻訳がある場合は切り替えられます" + +msgid "Show or hide the sidebar" +msgstr "サイドバーを表示・非表示にする。" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "以前のソーステキスト:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "未確定翻訳が対応する、更新で変更される前の旧ソーステキスト。" + +msgid "Notes for translators:" +msgstr "翻訳者への注記:" + +msgid "Add comment" +msgstr "コメントを追加" + +msgid "Add Comment" +msgstr "コメントを追加" + +msgid "Translation suggestions:" +msgstr "翻訳の提案:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "一致するものが見つかりませんでした" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "一致するものが見つかりませんでした" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Poedit の翻訳メモリにこの文字列が見つかりました。" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(新規 %i、使用しないように変更 %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "翻訳をインポート中: %d" + +msgid "Poedit Update" +msgstr "Poedit の更新" + +msgid "Preparing migration..." +msgstr "移行準備中…" + +#, c-format +msgid "Migration exit status: %d" +msgstr "移行終了ステータス: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit は既存の翻訳メモリを新しい形式に変換する必要があります。" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"これは Poedit をスタートする前に行う必要があります。たくさんの翻訳が保存され" +"ている場合は数分かかる場合がありますが、通常はもっと早く完了するはずです。" + +msgid "Proceed" +msgstr "続行" + +msgid "Translation memory migration failed." +msgstr "翻訳メモリの移行に失敗しました。" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"翻訳メモリのデータを移行できませんでした。エラーは以下のとおりです。\n" +"\n" +"%s\n" +"help@poedit.net にメールしてください。お手伝いさせていただきます。" + +msgid "Cannot create temporary directory." +msgstr "一時ディレクトリを作成できません。" + +msgid "Welcome to Poedit" +msgstr "Poedit へようこそ" + +msgid "Edit a translation" +msgstr "翻訳を編集" + +msgid "Open an existing PO file and edit the translation." +msgstr "既存の PO ファイルを開いて翻訳を編集する。" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"既存の PO または POT テンプレートから新しい翻訳プロジェクトを作成する。" + +msgid "Collaborate on a translation with Crowdin" +msgstr "Crowdin で翻訳の共同作業をする" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Crowdin プロジェクトからファイルをダウンロードし、翻訳した後に変更内容を同期" +"します。" + +msgid "What is Crowdin?" +msgstr "Crowdin とは ?" + +msgid "There are no translations. That’s unusual." +msgstr "翻訳が存在しません。何かがおかしいようです。" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"翻訳可能な項目は手動で Gettext システムに追加されるのではなく、ソースコードか" +"ら自動的に抽出されます。\n" +"これにより、項目を常に最新版で正確に保つことができます。\n" +"翻訳者は通常、開発者が用意した PO テンプレートファイル (POT) を使用します。" + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU gettext の詳細)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"このカタログを埋める一番簡単な方法は POT ファイルから更新することです。" + +msgid "Update from POT" +msgstr "POT ファイルから更新" + +msgid "Take translatable strings from an existing POT template." +msgstr "既存の POT テンプレートから翻訳可能な文字列を使います。" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "翻訳可能な文字列をソースコードから直接抽出できます。" + +msgid "Extract from sources" +msgstr "ソースから抽出" + +msgid "Configure source code extraction in Properties." +msgstr "設定画面でソースコード抽出を設定できます。" + +msgid "Sync" +msgstr "同期" + +msgid "Synchronize the translation with Crowdin" +msgstr "Crowdin と翻訳を同期する" diff --git a/locales/ka.mo b/locales/ka.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ac430e2b9a46860285b77b2045164313d07c36f GIT binary patch literal 32934 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\n" +"Language-Team: Georgian\n" +"Language: ka_GE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ka\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "დამალე ეს შეტყობინება" + +msgid "Don't Show Again" +msgstr "აღარ მაჩვენო" + +msgid "Don't show again" +msgstr "ეს შეტყობინება მეტი აღარ მაჩვენო" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i სტრიქონი ფაილიდან '%s' სწორად ვერ იქნა ჩატვირთული." +msgstr[1] "%i სტრიქონი ფაილიდან '%s' სწორად ვერ იქნა ჩატვირთული." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "შეცვლილი ჰედერი: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"არასწორი catalog ფაილი: მხოლობითი ფორმა msgstr გამოყენებულია msgid_plural -" +"თან ერთად" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"არასწორი catalog ფაილი: გამოყენებულია msgstr მრავლობითის ფორმა, msgid_plural " +"-ის მითითების გარეშე" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"შეცდომა კატალოგის გამოძახებისას. შესაძლოა ინფორმაციის ნაწილი არასრული ან " +"დაზიანებული იყოს." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "ვერ გამოვიძახებ ფაილი %s, სავარაუდოდ იგი დაზიანებულია." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"ფაილი '%s' მხოლოდ კითხვადია და ვერ შეინახება.\n" +"გთხოვთ შეინახოთ იგი სხვა სახელით." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s ფაილის დამახსოვრება ვერ მოხერხდა." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"ფაილის უკეთ ფორმატირებისას პრობლემა შეიქმნა (თუმცა ფაილი გამართულად იქნა " +"შენახული)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "შეცდომა კატალოგის დამახსოვრებისას" + +msgid "PO Translation Files" +msgstr "PO თარგმნის ფაილები" + +msgid "POT Translation Templates" +msgstr "PO თარგმნის შაბლონები" + +msgid "All Translation Files" +msgstr "თარგმნის ყველა ფაილი" + +msgid "Merging differences..." +msgstr "მიმდინარეობს ცვლილებების შეთავსება..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' არ არის გამართული POT ფაილი." + +msgid "(Use default language)" +msgstr "(გამოიყენე სისტემის სტანდარტული ენა)" + +msgid "Select your preferred language" +msgstr "ამოირჩიეთ სასურველი ენა" + +msgid "Language selection" +msgstr "ენების ამორჩევა" + +msgid "You must restart Poedit for this change to take effect." +msgstr "ამ ცვლილების გასააქტიურებლად Poedit თავიდან უნდა გამოიძახოთ." + +msgid "Downloading translations is disabled in this project." +msgstr "თარგმანების ჩამოტვირთვა გამორთულია ამ პროექტში." + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "შესვლა" + +msgid "Sign in" +msgstr "შესვლა" + +msgid "Sign Out" +msgstr "გამოსვლა" + +msgid "Sign out" +msgstr "გამოსვლა" + +msgid "Waiting for authentication…" +msgstr "" + +msgid "Updating user information…" +msgstr "" + +msgid "Signed in as:" +msgstr "შესული ხართ, როგორც:" + +msgid "Learn More About Crowdin" +msgstr "შეიტყვეთ მეტი Crowdin-ზე" + +msgid "Learn more about Crowdin" +msgstr "შეიტყვეთ მეტი Crowdin-ზე" + +msgid "Sign in to Crowdin" +msgstr "შედით Crowdin-ზე" + +msgid "Open Crowdin translation" +msgstr "იხილეთ Crowdin-ის თარგმანი" + +msgid "Project:" +msgstr "პროექტი:" + +msgid "Language:" +msgstr "ენა:" + +msgid "File:" +msgstr "ფაილი:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "ამ პროექტს არ აქვს ფაილები, რომლების თარგმნა შეიძლება Poedit-ზე." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "ამ ფაილის რედაქტირება შეიძლება მხოლოდ Crowdin-ის ვებ-ინტერფეისზე." + +msgid "Downloading latest translations…" +msgstr "იტვირთება უახლესი თარგმანები…" + +msgid "Syncing with Crowdin" +msgstr "სინქრონდება Crowdin-თან" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin-თან სინქრონიზაცია ჩაიშალა." + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "" + +msgid "Learn more" +msgstr "დამატებითი ინფიმაცია" + +msgid "Learn More" +msgstr "" + +#, c-format +msgid "Failed command: %s" +msgstr "ვერ შესრულებული ბრძანება: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "gettext კატალოგთა გაერთიანება ვერ განხორციელდა." + +msgid "Scanning files..." +msgstr "მიმდინარეობს ფაილების სკანირება..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s ფაილთა ანალიზი..." + +msgid "Failed to load extracted catalog." +msgstr "ამოღებული კატალოგის ჩატვირთვა ვერ განხორციელდა." + +msgid "&Help" +msgstr "&დახმარება" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "შეცდომა ფაილის გახსნისას" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "დროებითი ფაილების შენარჩუნება (დიაგნოსტიკის მიზნი)" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "კატალოგის გახსნა" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "ფაილი ’%s’ არ არსებობს." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s-ის შესახებ" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "ვერისა %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit ადვილად გამოსაყენებელი თარგმანების რედაქტორია." + +msgid "Catalogs Manager" +msgstr "" + +msgid "Check for Updates..." +msgstr "განახლებების შემოწმება…" + +msgid "&Edit" +msgstr "&რედაქტირება" + +msgid "Undo" +msgstr "დაბრუნება" + +msgid "Redo" +msgstr "აღდგენა" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "წაშლა" + +msgid "Spelling and Grammar" +msgstr "მართლწერა და გრამატიკა" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "მართლწერის ავტომატური შემოწმება" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "" + +msgid "Transformations" +msgstr "" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "" + +msgid "Start Speaking" +msgstr "" + +msgid "Stop Speaking" +msgstr "" + +msgid "&View" +msgstr "&ხედი" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "" + +msgid "Minimize" +msgstr "" + +msgid "Zoom" +msgstr "დაახლოება" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "" + +msgid "The file cannot be opened." +msgstr "" + +msgid "Invalid file" +msgstr "" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "" + +msgid "&Redo" +msgstr "" + +msgid "Cu&t" +msgstr "" + +msgid "Cut" +msgstr "" + +msgid "Copy" +msgstr "" + +msgid "&Paste" +msgstr "" + +msgid "Paste" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Select &All" +msgstr "" + +msgid "Select All" +msgstr "ყველას მონიშვნა" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" +"ძალიან ვწუხვარ, მაგრამ Poedit-ის სარკმელში ერთზე მეტ ფაილს ვერ ჩააგდებთ. " +"მაპატიეთ." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "faili %s შეტყობინებათა კატალოგი არ არის." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&ფაილი" + +msgid "&Go" +msgstr "&გადასვლა" + +msgid "Source text:" +msgstr "წყაროს ტექსტი:" + +msgid "Singular:" +msgstr "მხოლობითში:" + +msgid "Plural:" +msgstr "მრავლობითში:" + +msgid "Translation:" +msgstr "თარგმანი:" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "დაყენება" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "კატალოგი შეიცვალა. გნებავთ ცვლილებების შენახვა?" + +msgid "Save changes" +msgstr "ცვლილებების დამახსოვრება" + +msgid "Your changes will be lost if you don't save them." +msgstr "ცვლილებები დაიკარგება, თუ არ დაიმახსოვრებთ." + +msgid "Save" +msgstr "შენახვა" + +msgid "Don't save" +msgstr "აი შეინახო" + +msgid "Don't Save" +msgstr "არ შეინახო" + +msgid "Save as..." +msgstr "დაიმახსოვრე როგორც..." + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "ექსპორტირება როგორც..." + +msgid "HTML Files" +msgstr "HTML ფაილები" + +msgid "Open catalog template" +msgstr "კატალოგის შაბლონის გახსნა" + +msgid "Updating catalog" +msgstr "კატალოგის განახლება" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "შენატანები კატალოგში ალბათ არასწორია." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"კატალოგის განახლება ვერ განხორციელდა. დააწკაპუნეთ „დაწვრილებით >>“-ზე " +"დამატებითი ინფორმაციისათვის." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "თარგმანთან დაკავშირებით წარმოიშვა %d შეფერხება." +msgstr[1] "თარგმანთან დაკავშირებით წარმოიშვა %d შეფერხება." + +msgid "Validation results" +msgstr "ვალიდაციის შედეგები" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"შეცდომებიან შენატანები სიაში წითლად არის მონიშნული. შეცდომის დეტალები " +"შენატანის არჩევისას გამოჩნდება." + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"ფაილი წარმატებით იქნა შენახული, თუმცა მისი MO ფორმატში კომპილაცია და " +"გამოყენება ვერ მოხერხდა." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "თარგმანში შეცდომები ვერ მოიძებნა." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "თარგმანი გამოსაყენებლად მზად არის." + +msgid "Context:" +msgstr "კონტექსტი:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "" + +msgid "Set language" +msgstr "" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"ამ კატალოგს მრავლობითი ფორმის შენატანები გააჩნია, თუმცა ჰედერში შესაბამისი " +"Plural-Forms მონაცემი არ არის განსაზღვრული." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"კატალოგის შენატანების მრავლობითის ფორმა Plural-Forms ჰედერში მითითებული " +"მონაცემისაგან განსხვავდება" + +msgid "Required header Plural-Forms is missing." +msgstr "" +"ფაილს აკლია აუცილებელი ჰედერი მრავლობითის ფორმებთან (Plural-Forms) " +"დაკავშირებით." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "სინტაქსური შეცდომა Plural-Forms ჰედერის ჩანაწერში (\"%s\")." + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "ჰედერის გამოსწორება" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "შეცდომა „%s“ კატალოგის ფაილის გამოძახებისას." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr " (შეიცვალა)" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "წაშლილი თარგმანებისგან გაწმენდა" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "გსურთ ყველა იმ თარგმანის წაშლა, რომლებიც აღარ გამოიყენება?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"თუ გაწმენდას გააგრძელებთ, სამუდამოდ წაიშლება ყველა ის თარგმანი, რომლებიც " +"აღარ გამოიყენება. მომავალში მათი ხელახლა თარგმნა მოგიწევთ, თუ კატალოგს კვლავ " +"დაემატება." + +msgid "Keep" +msgstr "შენარჩუნება" + +msgid "Purge" +msgstr "გაწმენდა" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "შევსება" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" + +msgid "Copy from source text" +msgstr "საწყისი ტექსტიდან კოპირება" + +msgid "Copy from Source Text" +msgstr "საწყისი ტექსტიდან კოპირება" + +msgid "Clear translation" +msgstr "თარგმანის გაწმენდა" + +msgid "Clear Translation" +msgstr "თარგმანის გაწმენდა" + +msgid "Edit comment" +msgstr "შენიშვნის დამუშავება" + +msgid "Edit Comment" +msgstr "შენიშვნის რედაქტირება" + +msgid "References:" +msgstr "დახმარებები:" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "%i-დან" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "ნული" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "" + +msgid "Plural" +msgstr "მრავლობითი" + +msgid "Other" +msgstr "სხვა" + +msgid "&Bookmarks" +msgstr "&სანიშნეები" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "გვერდითა ზოლის დამალვა" + +msgid "Show Sidebar" +msgstr "გვერდითა ზოლის ჩვენება" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "წყაროს ტექსტი:" + +msgid "Translation" +msgstr "თარგმანი" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "" + +#, c-format +msgid "Translation — %s" +msgstr "" + +msgid "Error:" +msgstr "შეცდომა:" + +msgid "Source file" +msgstr "საწყისი ფაილი" + +msgid "Source file occurrence:" +msgstr "წყაროს ფაილი:" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "შეცდომა %s ფაილის გამოძახებისას!" + +msgid "Find" +msgstr "" + +msgid "Replace" +msgstr "ჩანაცვლება" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "პარამეტრები" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "მხოლოდ მთლიანი სიტყვები" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "შენიშვნებში ძიება" + +msgid "Close" +msgstr "დაკეტვა" + +msgid "Replace All" +msgstr "ყველას ჩანაცვლება" + +msgid "Replace all" +msgstr "ყველას ჩანაცვლება" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "%s პროგრამის გაშვება ვერ ხერხდება" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - კატალოგების მენეჯერი" + +msgid "Catalog" +msgstr "კატალოგი" + +msgid "Total" +msgstr "სულ" + +msgid "Untrans" +msgstr "უთარგმნ" + +msgid "Fuzzy" +msgstr "გაუმართავი" + +msgid "Bad Tokens" +msgstr "არასწორი ჟეტონები" + +msgid "Last modified" +msgstr "ბოლო ცვლილება" + +msgid "Select directory" +msgstr "უჯრის ამორჩევა" + +msgid "Directories:" +msgstr "უჯრები:" + +msgid "" +msgstr "<უსახელო>" + +msgid "Do you want to delete the project?" +msgstr "გნებავთ პროექტის წაშლა?" + +msgid "Confirmation" +msgstr "დასტური" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"მართლა გნებავთ ამ პროექტში მყოფი\n" +"ყველა კატალოგის მასიური განახლება განახორციელოთ?" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "სახელი:" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "ელ-ფოსტა:" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "რედაქტირება" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "კატალოგის განახლების შემდეგ შედეგები აჩვენე" + +msgid "Check spelling" +msgstr "მართლწერის შემოწმება" + +msgid "Always change focus to text input field" +msgstr "ყოველთვის გააქტიურე ტექსტის ჩასაწერი ველი" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"არასოდეს გააქტიურდეს სათარგმნი ტექსტების სარკმელი. თუ ამ ფუნქციას ჩართავთ, " +"Ctrl+ისრების საშუალებით შეგეძლებათ ტექსტებს შორის ნავიგაცია, მაგრამ ტექსტის " +"შეყვანა პირდაპირ იქნება შესაძლებელი, შესაბამისად ტექსტის ჩასაწერად Tab " +"ღილაკზე ხელის დაჭერა აღარ მოგიწევთ" + +msgid "Appearance" +msgstr "" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "ინტერფეისის ენის შეცვლა" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "გადატვირთვა" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "თარგმანის მეხსიერება" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "გაუქმება" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "ახალი" + +msgid "Edit" +msgstr "დამუშავება" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "განახლებები" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (რეკომენდირებულია)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "ფაილების დამატება..." + +msgid "Add files..." +msgstr "ფაილების დამატება..." + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "მდებარეობები" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (რეკომენდირებულია)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "შენიშვნები:" + +msgid "OK" +msgstr "კარგი" + +msgid "C&lear" +msgstr "გა&წმენდა" + +msgid "Clear the comment" +msgstr "დოკუმენტის გაწმენდა" + +msgid "Create new translations project" +msgstr "შექმენი ახალი სათარგმი პროექტი" + +msgid "Edit the project" +msgstr "პროექტის დამუშავება" + +msgid "Delete the project" +msgstr "პროექტის წაშლა" + +msgid "Update all" +msgstr "ყველას განახლება" + +msgid "Update all catalogs in the project" +msgstr "განაახლე ყველა კატალოგი პროექტში" + +msgid "Edit project" +msgstr "პროექტის დამუშავება" + +msgid "Project name:" +msgstr "პროექტის სახელი:" + +msgid "Browse" +msgstr "მოძიება" + +msgid "Add directory to the list" +msgstr "უჯრის სიაში დამატება" + +msgid "&New..." +msgstr "" + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "გ&ახსნა..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "და&კეტვა" + +msgid "&Save" +msgstr "შ&ენახვა" + +msgid "Save &as..." +msgstr "დაიმახსოვრე &როგორც..." + +msgid "Save &As..." +msgstr "შეინახე &როგორც..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&პარამეტრები..." + +msgid "Catalogs &manager" +msgstr "კატალოგების &მენეჯერი" + +msgid "Catalogs &Manager" +msgstr "კატალოგთა &მმართველი" + +msgid "E&xit" +msgstr "გა&სვლა" + +msgid "Quit" +msgstr "გასვლა" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "თარგმანი გაუ&მართავია" + +msgid "Translation Is &Fuzzy" +msgstr "თარგმანი &გაუმართავია" + +msgid "Edit &comment" +msgstr "შე&ნიშვნის დამუშავება" + +msgid "Edit &Comment" +msgstr "შენიშვნის &რედაქტირება" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "აჩვენე დ&ახმარებები" + +msgid "&Show References" +msgstr "&მითითებების ჩვენება" + +msgid "&Find..." +msgstr "&იპოვე..." + +msgid "Replace..." +msgstr "ჩანაცვლება..." + +msgid "Find next" +msgstr "" + +msgid "Find previous" +msgstr "" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "" + +msgid "Find Previous" +msgstr "" + +msgid "&Preferences" +msgstr "&პარამეტრები" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "&ფაილის წყობით დალაგება" + +msgid "Sort by &File Order" +msgstr "&ფაილის წყობით დალაგება" + +msgid "Sort by &source" +msgstr "&წყაროთი დალაგება" + +msgid "Sort by &Source" +msgstr "&წყაროთი დალაგება" + +msgid "Sort by &translation" +msgstr "თ&არგმანის მიხედვით დალაგება" + +msgid "Sort by &Translation" +msgstr "თ&არგმანის მიხედვით დალაგება" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&ჯერ უთარგმნელი შენატანები" + +msgid "&Untranslated Entries First" +msgstr "&ჯერ უთარგმნელი შენატანები" + +msgid "Show sidebar" +msgstr "გვერდითა ზოლის ჩვენება" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "კ&ატალოგი" + +msgid "&Update from sources" +msgstr "განახლება &წყაროდან" + +msgid "&Update from Sources" +msgstr "წყაროებიდან &განახლება" + +msgid "Update from &POT file..." +msgstr "განაახლე &POT ფაილიდან..." + +msgid "Update from &POT File..." +msgstr "&POT ფაილიდან განახლება..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "წაშლილი თარგმანების &ამოშლა" + +msgid "&Purge Deleted Translations" +msgstr "&წაშლილ თარგმანთა გაწმენდა" + +msgid "&Validate translations" +msgstr "თარგმანის &ვალიდაცია" + +msgid "&Validate Translations" +msgstr "თარგმანის &ვალიდაცია" + +msgid "&Properties..." +msgstr "&პარამეტრები..." + +msgid "&Done and next" +msgstr "&დასრულება და შემდეგი" + +msgid "&Done and Next" +msgstr "&დასრულება და შემდეგი" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "წ&ინა დაუსრულებელი" + +msgid "P&revious Unfinished" +msgstr "წ&ინა დაუსრულებელი" + +msgid "Ne&xt unfinished" +msgstr "შემ&დეგი დაუსრულებელი" + +msgid "Ne&xt Unfinished" +msgstr "შემ&დეგი დაუსრულებელი" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&ონლაინ-სახელმძღვანელო" + +msgid "&Online Help" +msgstr "&ონლაინ-სახელმძღვანელო" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "Poedit-ის შ&ესახებ" + +msgid "&About" +msgstr "შ&ესახებ" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "გაფართოებების სია წერტილ-მძიმეებით გამოყოფილი (მაგ. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "ინვოკაცია:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "ელემენტი სიტყვათა სიაში:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"ეს ბრძანებათა სტრიქონს მიემაგრება ერთხელ\n" +"ყოველ სიტყვაზე. %k იშლება როგორც სიტყვა." + +msgid "An item in input files list:" +msgstr "ელემენტი შესაყვანი ფაილის სიაში:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"ეს მიემაგრება ბრძანებათა სტრიქონს ყოველ\n" +"შესაყვან ფაილზე. %f გაიშლება ფაილის სახელად." + +msgid "Source code charset:" +msgstr "პროგრ. წყაროს კოდირება:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"ეს მიემაგრება ბრძანებათა სტრიქონს მხოლოდ მაშინ\n" +"თუ წყაროს კოდირება (charset) მითითებული იყო. %c ჩანაცვლდება კოდირების " +"სახელით." + +msgid "Catalog properties" +msgstr "კატალოგის თვისებები" + +msgid "Project name and version:" +msgstr "პროექტის სახელი და ვერსია:" + +msgid "Plural Forms:" +msgstr "მრავლობითი ფორმები:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "დამატებითი ინფორმაცია მრავლობითის ფორმებთან დაკავშირებით" + +msgid "Charset:" +msgstr "კოდირება:" + +msgid "Team:" +msgstr "ჯგუფი:" + +msgid "Team's email address:" +msgstr "ჯგუფის ელფოსტა:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "წყაროს მდებარეობები" + +msgid "Extract text from source files in the following directories:" +msgstr "შემდეგი ფოლდერებში წყარო-ფაილებიდან ტექსტის ამოღება:" + +msgid "Base path:" +msgstr "ძირითადი მდებარეობა:" + +msgid "Sources keywords" +msgstr "წყაროს საკვანძო სიტყვები" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"წყაროს ფაილებში თარგმნადი სტრიქონების ამოსაცნობად ამ საკვანძო სიტყვების\n" +" (ფუნქციათა სახელების) გამოყენება:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "შეჯამების განახლება" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"ეს სიტყვები მოიძებნა წყაროებში, თუმცა კატალოგებში არა.\n" +"poEdir კატალოგში დაამატებს მათ." + +msgid "New strings" +msgstr "ახალი შეტყობინებები" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"ეს სტრიწონები წყაროებში აღარ მოიპოვება.\n" +"Poedit კატალოგიდან ამოშლის მათ." + +msgid "Obsolete strings" +msgstr "მოძველებული სტრიქონები" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 ახალი, 0 მოძველებული)" + +msgid "Open" +msgstr "გახსნა" + +msgid "Save catalog" +msgstr "კატალოგის დამახსოვრება" + +msgid "Validate" +msgstr "ვალიდაცია" + +msgid "Check for errors in the translation" +msgstr "თარგმანში შეცდომების შემოწმება" + +msgid "Update" +msgstr "განახლება" + +msgid "Update catalog - synchronize it with sources" +msgstr "კატალოგის განახლება - წყაროებთან სინქრონიზება" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "შეანაცვლე ამორჩეული თარგმანის ’გაუმართავი’ სტატუსი" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "შენიშვნები მთარგმნელთათვის:" + +msgid "Add comment" +msgstr "კომენტარის დამატება" + +msgid "Add Comment" +msgstr "კომენტარის დამატება" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "გაგრძელება" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "დროებითი ფოლდერი ვერ შეიქმნა." + +msgid "Welcome to Poedit" +msgstr "" + +msgid "Edit a translation" +msgstr "" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "სინქრონიზაცია" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/kab.mo b/locales/kab.mo new file mode 100644 index 0000000000000000000000000000000000000000..d15f03e3fce1be1af1e448749f35a067fcf01495 GIT binary patch literal 45263 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 literal 0 HcmV?d00001 diff --git a/locales/kab.po b/locales/kab.po new file mode 100644 index 0000000..ed2ddab --- /dev/null +++ b/locales/kab.po @@ -0,0 +1,1948 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Kabyle\n" +"Language: kab_KAB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: kab\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ffer izen-agi n tamawt" + +msgid "Don't Show Again" +msgstr "Ur beqqeḍ ara tikkelt-nniḍen" + +msgid "Don't show again" +msgstr "Ur beqqeḍ ara tikkelt-nniḍen" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i n ujerriḍ n ufaylu '%s' ur yettwaɛebba ara akken ilaq." +msgstr[1] "%i n ijerriḍen n ufaylu '%s' ur ttwaɛebban ara akken ilaq." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Ajerriḍ %d n ufaylu '%s'  yerreẓ (isefka n %s d urmeɣtuyen)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Tasenṭiḍt ur temsil ara akken ilaq :'%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Afaylu akaram yerreẓ : talɣa n wasuf msgstr tettwaseqdec lwaḥid aked " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Afaylu akaram yerreẓ : talɣa n wesget msgstr tettwaseqdec war msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Llan inezriyen deg weɛebbi n ukaram. Kra n isefka ad ilin xuṣen neɣ errẓen." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "D awezɣi aɛebbi n ufaylu %s, izmer ad yili yerreẓ." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Afaylu '%s' i tɣuri kan ur tezmireḍ ara ad t-teskelseḍ.\n" +"Ttxil-k skels-it s yisem-nniḍen." + +#, c-format +msgid "Couldn't save file %s." +msgstr "D awezɣi asekles n ufaylu %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Yella wugur deg wemsal n ufaylu (maca yettwasekles akken ilaq)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Akaram yugi ad yekles s tegrumma n isekkilen '%s',\n" +"am wakken i yettwamella di twila n ukaram. Yettwasekles s tegrumma n " +"isekkilen UTF-8\n" +"yerna tettwabeddel twila." + +msgid "Error saving catalog" +msgstr "Anezri deg wesekles n ukaram" + +msgid "PO Translation Files" +msgstr "Ifuyla n tsuqqilt PO" + +msgid "POT Translation Templates" +msgstr "Timudimin n tsuqqilt POT" + +msgid "All Translation Files" +msgstr "Ifuyla merra n tsuqqilt" + +msgid "Merging differences..." +msgstr "Aseddu n ibeddilen..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' mači d afaylu POT ameɣtu." + +msgid "(Use default language)" +msgstr "(Seqdec tutlayt n lexṣas)" + +msgid "Select your preferred language" +msgstr "Fren tutlayt-ik tamenyaft" + +msgid "Language selection" +msgstr "Tafrayt n tutlayt" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Ilaq ad talseḍ asekker n Poedit iwakken ad yeddu ubeddil-agi." + +msgid "Downloading translations is disabled in this project." +msgstr "Azdam n tsuqqilin yensa deg wesenfar-agi." + +msgid "Not authorized, please sign in again." +msgstr "Yegdel, ttxil-k qqen tikkelt-nniḍen." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin d agens n usefrek n tsuqqilin ɣef uzeṭṭa u d allal n usuqqel ideg " +"zemren ad kkin aṭas n medden. Poedit yezmer ad yesemtawi akken ilaq ifuyla " +"PO di Crowdin." + +msgid "Sign In" +msgstr "Kcem" + +msgid "Sign in" +msgstr "Kcem" + +msgid "Sign Out" +msgstr "Ffeɣ" + +msgid "Sign out" +msgstr "Ffeɣ" + +msgid "Waiting for authentication…" +msgstr "Araǧu n usesteb..." + +msgid "Updating user information…" +msgstr "Asnifel n telɣut n useqdac..." + +msgid "Signed in as:" +msgstr "Teqqneḍ s yisem:" + +msgid "Learn More About Crowdin" +msgstr "Issin ugar ɣef Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Issin ugar ɣef Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Qqen ɣer Crowdin" + +msgid "Open Crowdin translation" +msgstr "Ldi tasuqilt Crowdin" + +msgid "Project:" +msgstr "Asenfar :" + +msgid "Language:" +msgstr "Tutlayt:" + +msgid "File:" +msgstr "Afaylu :" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ulac isenfaren n tsuqqilt deg wemiḍan-inek n Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Asenfar-agi ur yesɛi ara ifuyla i tzemreḍ ad tsuqqleḍ s Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Afaylu-agi tzemreḍ ad t-tẓergeḍ ḥaca deg wegrudem n web n Crowdin." + +msgid "Downloading latest translations…" +msgstr "Azdam n tsuqqilin tingurra..." + +msgid "Syncing with Crowdin" +msgstr "Amtawi aked Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Amtawi aked Crowdin yerreẓ." + +msgid "Crowdin error" +msgstr "Anezri n Crowdin" + +msgid "Uploading translations…" +msgstr "Asali n tsuqqilin…" + +msgid "&Copy" +msgstr "&Nɣel" + +msgid "Learn more" +msgstr "Ẓer ugar" + +msgid "Learn More" +msgstr "Ẓer ugar" + +#, c-format +msgid "Failed command: %s" +msgstr "Anezḍay yerreẓ : %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Anezri deg wezday n ikaramen gettext." + +msgid "Scanning files..." +msgstr "Tasleḍt n ifuyla..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Tasleḍt n %s n ifuyla..." + +msgid "Failed to load extracted catalog." +msgstr "Anezri deg weɛebbi n ukaram yettwassefen." + +msgid "&Help" +msgstr "&Tallalt" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Ifuyla MO ur tezmireḍ ara ad ten-ẓergeḍ srid di Poedit." + +msgid "Error opening file" +msgstr "Anezri di tulya n ufaylu" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Ttxil-k ldi u ẓreg afaylu PO anmeɣray. Mi ara t-teskelseḍ, afaylu MO ad " +"yemucceḍ daɣen." + +msgid "don't delete temporary files (for debugging)" +msgstr "ur tekkes ara ifuyla ikudanen (i weseɣti)" + +msgid "handle a poedit:// URI" +msgstr "gère une poedit: // URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Anezri di teɣwalt aked Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Teḍra-d tsureft ur nsefrak ara : %s" + +msgid "Unhandled exception occurred." +msgstr "Teḍra-d tsureft ur nsefrak ara." + +msgid "Open catalog" +msgstr "Ldi akaram" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Afaylu '%s' ulac-it." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Ɣef %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Lqem %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Imeẓluyen" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ffer %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ffer ayen iqqimen" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Beqqeḍ kulec" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Ffeɣ si %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit d amaẓrag n tsuqqilin yeshel i weseqdec." + +msgid "Catalogs Manager" +msgstr "Asefrak n ikaramen" + +msgid "Check for Updates..." +msgstr "Nadi ileqman..." + +msgid "&Edit" +msgstr "&Ẓreg" + +msgid "Undo" +msgstr "Semmet" + +msgid "Redo" +msgstr "Tiririt" + +msgid "Paste and Match Style" +msgstr "Senteḍ s uɣanib" + +msgid "Delete" +msgstr "Kkes" + +msgid "Spelling and Grammar" +msgstr "Taɣdirawt aked tjerrumt" + +msgid "Show Spelling and Grammar" +msgstr "Beqqeḍ taɣdirawt aked tjerrumt" + +msgid "Check Document Now" +msgstr "Selken arrat tura" + +msgid "Check Spelling While Typing" +msgstr "Selken taɣdirawt di lawan n tira" + +msgid "Check Grammar With Spelling" +msgstr "Selken taɣdirawt aked tajerrumt" + +msgid "Correct Spelling Automatically" +msgstr "Aseɣti awurman n teɣdirawt" + +msgid "Substitutions" +msgstr "Isemselsiyen" + +msgid "Show Substitutions" +msgstr "Beqqeḍ isemselsiyen" + +msgid "Smart Copy/Paste" +msgstr "Anɣel/asenteḍ amegzu " + +msgid "Smart Quotes" +msgstr "Tiskarin timegza" + +msgid "Smart Dashes" +msgstr "Ijerriḍen imegza" + +msgid "Smart Links" +msgstr "Izdayen imegza" + +msgid "Text Replacement" +msgstr "Aḍris n usemselsi" + +msgid "Transformations" +msgstr "Ibeddilen" + +msgid "Make Upper Case" +msgstr "Selket s asekkil ameqran" + +msgid "Make Lower Case" +msgstr "Selket s asekkil amecṭuḥ" + +msgid "Capitalize" +msgstr "Selket s asekkil ameqran" + +msgid "Speech" +msgstr "Zzubeg" + +msgid "Start Speaking" +msgstr "Bdu tazabut" + +msgid "Stop Speaking" +msgstr "Ḥbes tazabut" + +msgid "&View" +msgstr "Ti&meẓriwt" + +msgid "Enter Full Screen" +msgstr "Ɛeddi ɣer ugdil aččuran" + +msgid "Window" +msgstr "Asfaylu" + +msgid "Minimize" +msgstr "Simẓi" + +msgid "Zoom" +msgstr "Simɣur" + +msgid "Bring All to Front" +msgstr "Sɛeddi kulec ɣer uɣawas amezwaru" + +msgid "PO Translation" +msgstr "Tasuqilt PO" + +msgid "The file cannot be opened." +msgstr "Afaylu yugi ad yeldi." + +msgid "Invalid file" +msgstr "Afaylu d urmeɣtu" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Afaylu izmer ad yili yerreẓ neɣ amasal-ines ur t-yesemmezdey ara Poedit." + +msgid "&Undo" +msgstr "Se&fsex" + +msgid "&Redo" +msgstr "Err-&d" + +msgid "Cu&t" +msgstr "G&zem" + +msgid "Cut" +msgstr "Gzem" + +msgid "Copy" +msgstr "Nɣel" + +msgid "&Paste" +msgstr "Sen&teḍ" + +msgid "Paste" +msgstr "Senteḍ" + +msgid "&Delete" +msgstr "&Kkes" + +msgid "Select &All" +msgstr "&Fren akk" + +msgid "Select All" +msgstr "Fren kulec" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maj+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Entrée" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Uksawen" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Uksar" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maj" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Ur tezmireḍ ar ad tserseḍ ugar n yiwen n ufaylu deg wesfaylu n Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Afaylu '%s' mači d akaram n yizen." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "Afa&ylu" + +msgid "&Go" +msgstr "&Bdu" + +msgid "Source text:" +msgstr "Aḍris aɣbalu :" + +msgid "Singular:" +msgstr "Asuf :" + +msgid "Plural:" +msgstr "Asget :" + +msgid "Translation:" +msgstr "Tasuqqilt :" + +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 "" +"Ifuyla POT d timudimin kan ur sɛin ara tisuqqilint. \n" +"Iwakken ad tgeḍ tasuqqilt, snulfu-d afaylu amaynut PO seg tmudimt." + +msgid "Create New Translation" +msgstr "Snulfu-d tasuqqilt tamaynut" + +msgid "Create new translation" +msgstr "Snulfu-d tasuqqilt tamaynut" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Aseɣtay n teɣdirawt yensa, acku amawal i %s ur yettusbedd ara." + +msgid "Install" +msgstr "Sbedd" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Akaram yettwabeddel. Tebɣiḍ ad teskelseḍ ibeddilen ?" + +msgid "Save changes" +msgstr "Sekles ibeddilen" + +msgid "Your changes will be lost if you don't save them." +msgstr "Ibeddilen-ik ad ruḥen ma yella ur ten-teskelseḍ ara." + +msgid "Save" +msgstr "Sekles" + +msgid "Don't save" +msgstr "Ur seklas ara" + +msgid "Don't Save" +msgstr "Ur seklas ara" + +msgid "Save as..." +msgstr "Sekles s yisem..." + +msgid "Compile to..." +msgstr "Asefsu..." + +msgid "Compiled Translation Files" +msgstr "Afaylu n tsuqqilt yefsa" + +msgid "Export as..." +msgstr "Sifeḍ s talɣa..." + +msgid "HTML Files" +msgstr "Ifuyla HTML" + +msgid "Open catalog template" +msgstr "Ldi tamudimt n ukaram" + +msgid "Updating catalog" +msgstr "Amucceḍ n ukaram" + +msgid "Source code not available." +msgstr "Tangalt taɣbalut ur tewjid ara." + +msgid "Updating failed" +msgstr "Taruẓi n umucceḍ" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Tisuqqilin ugint ad muccḍent seg tengalt taɣbalut, acku ur d-nufi ara " +"tangalt deg yideg i d-yettunefken deg iraten n ukaram." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Inekcumen deg ukaram zemren ad ilin d urmeɣtuyen." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Amucceḍ n ukaram yerreẓ. Ssed ɣef « Détails >> » iwakken ad teẓreḍ ugar." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d n wugur i d-nufa di tsuqqilt" +msgstr[1] "%d n wuguren i d-nufa di tsuqqilt" + +msgid "Validation results" +msgstr "Igmaḍ n useɣbel" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Inekcumen yesɛan tuccḍiwin ttucerḍen s uzeggaɣ di tebdart. Isalen ɣef ɣef " +"tuccḍa ad d-baben mi ara tferneḍ anekcum." + +msgid "The file was saved safely." +msgstr "Afaylu yettwasekles s tɣellist." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Afaylu yettwasekles s tɣellist u yefsa ɣer umasal MO, maca wissen ma ad iddu " +"akken ilaq." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Afaylu yettwasekles s tɣellist, maca yugi ad yefsu ɣer umasal MO yerna ur " +"yezmir ara ad yettwaseqdec." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "Afaylu yefsa ɣer umasal MO, maca wissen ma ad yeddu akken ilaq." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Afaylu ur yezmir ara ad yefsu ɣer umasal MO u ad yettwaseqdec." + +msgid "No problems with the translation found." +msgstr "Ur d-nufi ula d ugur di tsuqqilt." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Tasuqqilt tewjed i wseqdec, maca %d n unekcum ur yettwasuqqel ara." +msgstr[1] "" +"Tasuqqilt tewjed i wseqdec, maca, %d n inekcumen ur ttwasuqqelen ara." + +msgid "The translation is ready for use." +msgstr "Tasuqqilt tewjed i wseqdec." + +msgid "Context:" +msgstr "Tawennaḍt :" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit yeseɣti i yiman-is agbur urmeɣtu n ufaylu “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Afaylu yesɛa iferdisen usligen, ayen i yegedlen deg yifuyla PO u yettqerriɛ " +"asqedc n ufaylu. Poedit yefra ugur, maca ilaq ad tselkeneḍ tisuqqilin i " +"yettwacerḍen d timawaẓin u ad tent-teseɣtiḍ ma yelaq." + +msgid "Language of the translation isn't set." +msgstr "Ulac asbadu n tutlayt n tsuqqilt." + +msgid "Set Language" +msgstr "Sbadu tutlayt" + +msgid "Set language" +msgstr "Sbadu tutlayt" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Isumar ur ttawjaden ara ma yella ulac asbadu n tutlayt n tsuqqilt. Ayagi, " +"yezmer ad iḥaz timeẓliyin-nniḍen, am talɣiwin n wesget." + +msgid "Language of the translation is the same as source language." +msgstr "Tutlayt n tsuqqilt kifkif-itt aked tutlayt taɣbalut." + +msgid "Fix Language" +msgstr "Sbadu tutlayt" + +msgid "Fix language" +msgstr "Sbadu tutlayt" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Akaram-agi yesɛa inekcumen n wesget, maca ulac tawila n tsenṭiḍt Plural-" +"Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Inekcumen deg ukaram-agi sɛan amḍan n talɣiwin n wesget i yemgarraden ɣef " +"win i yettwamellan di tsenṭiḍt Plural-Forms" + +msgid "Required header Plural-Forms is missing." +msgstr "Tasenṭiḍt Plural-Forms i yelaqen txuṣ." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Tuccḍa n tseddast di tsenṭiḍt Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Seɣti tasenṭiḍt" + +msgid "Fix the header" +msgstr "Seɣti tasenṭiḍt" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Talɣiwin n wesget i yeseqdec ukaram-agi ulac-itent di tnumi n %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revoir" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Anezri deg weɛebbbi n ufaylu akaram '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Asuqqel n : %d seg %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Yeggra-d : %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d n tuccḍa" +msgstr[1] "%d n tuccḍiwin" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d n unekcum" +msgstr[1] "%d n inekcumen" + +msgid " (unsaved)" +msgstr " (ur_yettwaḥrez_ara)" + +msgid " (modified)" +msgstr " (yettwabeddel)" + +msgid "Go" +msgstr "Aller" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Anezri deg wemucceḍ n tkatut n tsuqqilin : %s" + +msgid "Purge deleted translations" +msgstr "Sfeḍ tisuqqilin yettwakksen" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Tebɣiḍ ad tekkseḍ tisuqqilin merra ur nettwaseqdac ara ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ma tkemmeleḍ asizdeg, tisuqqilin merra i yettwacerḍen amzun ttwakksent ad " +"ttwakksent i lebda. Asmi ara tebɣuḍ ad tent-ternuḍ ilaq ak ad tent-" +"tesuqqeleḍ tikkelt-nniḍen." + +msgid "Keep" +msgstr "Eǧǧ" + +msgid "Purge" +msgstr "Sfeḍ" + +msgid "Fill missing translations from TM" +msgstr "Aččar tisuqqilin ixuṣen s tkatut n tsuqqilin MT" + +msgid "Only fill in exact matches" +msgstr "Aččar ḥaca tinmeɣrayin tiseddiyin" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"S lexṣas, igmaḍ urmeɣtuyen ddan u ttwacerḍen d imewẓiyen. Fren taxṭirt-agi " +"ma yella tebɣiḍ ad tsedduḍ ḥaca tinmeɣrayin tiseddiyin." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ur cerreḍ ara tinmeɣrayin tiseddiyin d timewẓiyin" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Sermed ma yella tetḥeqqeḍ belli takatut n tsuqqilin inek tegerrez. S lexṣas, " +"igmaḍ merra ttwacerḍen d imewẓiyen u yelaq ad sen-talseḍ tamuɣli." + +msgid "Fill" +msgstr "Aččar" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d n unekcum yeččur-d seg tkatut n tsuqqilt." +msgstr[1] "%d n inekcumen ččuren-d seg tkatut n tsuqqilt." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Tisuqqilin ttwacerḍent d timewẓiyin acku zemrent ad ilint d tirmeɣtuyin. " +"Ilaq ad tent-tmuqleḍ." + +msgid "No entries could be filled from the translation memory." +msgstr "Ulac anekcum i yezemren ad d-yeččar seg tkatut n tsuqqilt." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Takatut n tsuqqilt MT ur tesɛi ara izraren yugdan ɣer ugbur n ufaylu-agi. " +"Ayagi yettili-d i tsuqqilin tizgen-aymaniyin mi ara yelmed Poedit seg " +"yifuyla yettwasuqqlen s ufus." + +msgid "Translating" +msgstr "Asuqel la yeteddu" + +msgid "Filling missing translations from TM..." +msgstr "Taččert n tsuqqilin ixuṣen seg tkatut n tsuqqilin MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u n uzrar yettwasuqqel" +msgstr[1] "%u n izraren ttwasuqqlen" + +msgid "Copy from source text" +msgstr "Nɣel seg weḍris aɣbalu" + +msgid "Copy from Source Text" +msgstr "Nɣel seg weḍris aɣbalu" + +msgid "Clear translation" +msgstr "Sfeḍ tasuqqilt" + +msgid "Clear Translation" +msgstr "Sfeḍ tasuqqilt" + +msgid "Edit comment" +msgstr "Ẓreg awennit" + +msgid "Edit Comment" +msgstr "Ẓreg awennit" + +msgid "References:" +msgstr "Tiwelhiwin :" + +msgid "Everything" +msgstr "Kulec" + +#, c-format +msgid "Form %i" +msgstr "Talɣa %i" + +msgid "Singular" +msgstr "Asuf" + +msgid "Zero" +msgstr "Ilem" + +msgid "One" +msgstr "Yiwen" + +msgid "Two" +msgstr "Sin" + +msgid "Plural" +msgstr "Asget" + +msgid "Other" +msgstr "Wayeḍ" + +msgid "&Bookmarks" +msgstr "Isɣalen" + +#, c-format +msgid "Set bookmark %i" +msgstr "Sbadu asɣal %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ruḥ ɣer wesɣal %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Sbadu asɣal %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ruḥ ɣer wesɣal %i" + +msgid "Hide Sidebar" +msgstr "Ffer agalis n yidis" + +msgid "Show Sidebar" +msgstr "Beqqeḍ agalis n yidis" + +msgid "Hide Status Bar" +msgstr "Ffer tafeggagt n waddad" + +msgid "Show Status Bar" +msgstr "Beqqeḍ tafeggagt n waddad" + +msgid "Source text" +msgstr "Aḍris aɣbalu" + +msgid "Translation" +msgstr "Tasuqqilt" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Aḍris aɣbalu — %s" + +msgid "unknown language" +msgstr "Tutlayt ur nettwassen ara" + +#, c-format +msgid "Translation — %s" +msgstr "Tasuqqilt — %s" + +msgid "Error:" +msgstr "Anezri :" + +msgid "Source file" +msgstr "Afaylu aɣbalu" + +msgid "Source file occurrence:" +msgstr "Tummant n ufaylu aɣbalu:" + +msgid "Open in Editor" +msgstr "Ldi deg wemaẓrag" + +msgid "Open in editor" +msgstr "Ldi deg wemaẓrag" + +msgid "No references for the selected item." +msgstr "Ulac tiwelhiwin i weferdis yettwafernen." + +#, c-format +msgid "Error opening file %s!" +msgstr "Anezri di tulya n ufaylu %s !" + +msgid "Find" +msgstr "Nadi" + +msgid "Replace" +msgstr "Semselsi" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Tixṭiṛiyin" + +msgid "Ignore case" +msgstr "Ignorer la casse" + +msgid "Wrap around" +msgstr "Qfel" + +msgid "Whole words only" +msgstr "Awalen ummiden kan" + +msgid "Find in source texts" +msgstr "Nadi deg yiḍrisen iɣbula" + +msgid "Find in translations" +msgstr "Nadi di tsuqilin" + +msgid "Find in comments" +msgstr "Nadi deg yiwenniten" + +msgid "Close" +msgstr "Mdel" + +msgid "Replace All" +msgstr "Semselsi kulec" + +msgid "Replace all" +msgstr "Semselsi kulec" + +msgid "< &Previous" +msgstr "< &Ɣer deffir" + +msgid "&Next >" +msgstr "Ɣer &zdat>" + +msgid "String to find" +msgstr "Izraren ara tnadiḍ" + +msgid "Replacement string" +msgstr "Izraren n usemselsi" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ulamek aselkem n wahil : %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Tangalt neɣ isem n tutlayt (amedya. kab_Kab)" + +msgid "Translation Language" +msgstr "Tutlayt n tsuqqilt" + +msgid "Language of the translation:" +msgstr "Tutlayt n tsuqqilt :" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Asefrak n ikaramen" + +msgid "Catalog" +msgstr "Akaram" + +msgid "Total" +msgstr "Uɣrid" + +msgid "Untrans" +msgstr "Ur yettwasuqqel ara" + +msgid "Fuzzy" +msgstr "Amewẓi" + +msgid "Bad Tokens" +msgstr "Marqueurs incorrects" + +msgid "Last modified" +msgstr "Abeddel angarru" + +msgid "Select directory" +msgstr "Fren akaram" + +msgid "Directories:" +msgstr "Ikaramen:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "tebɣiḍ ad tekkeseḍ asenfar-agi ?" + +msgid "Confirmation" +msgstr "Asergeg" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"D tidett tebɣiḍ ad tgeḍ amucceḍ\n" +"n ikaramen merra n usenfar-agi ?" + +msgid "Information about the translator" +msgstr "Isalen ɣef umsuqqel" + +msgid "Name:" +msgstr "Isem :" + +msgid "Your Name" +msgstr "Nekwa" + +msgid "Email:" +msgstr "E-mail :" + +msgid "your_email@example.com" +msgstr "tansa-k.e-maill@amedya.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Isem-ik aked tansa-inek e-mail ad ttwasqedcen kan i wesbadu n tsenṭiḍt Last-" +"Translator n yifuyla GNU gettext." + +msgid "Editing" +msgstr "Asiẓreg" + +msgid "Automatically compile MO file when saving" +msgstr "Asefsu awurman n ufaylu MO deg wesekles" + +msgid "Show summary after catalog update" +msgstr "Beqqeḍ agzul mbaɛd amucceḍ n ukaram" + +msgid "Check spelling" +msgstr "selken Taɣdirawt" + +msgid "Always change focus to text input field" +msgstr "Yalas sermad taɣzut n usekcem n uḍris" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ne jamais laisser la main à la liste des chaînes. Lorsqu'elle est activée, " +"il faut utiliser les touches Ctrl + Haut/Bas de navigation, mais vous pouvez " +"aussi taper le texte directement sans avoir à utiliser la touche de " +"tabulation pour activer la zone de traduction." + +msgid "Appearance" +msgstr "Timeẓri" + +msgid "Use custom list font:" +msgstr "Seqdec tasefsit yugnen :" + +msgid "Use custom text fields font:" +msgstr "Seqdec tasefsit yugnen i teɣzuyin n uḍris :" + +msgid "Change UI language" +msgstr "Beddel tutlayt n ugrudem" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(yeḥwaǧ Windows 8 neɣ amaynut)" + +msgid "General" +msgstr "Amatu" + +msgid "Use translation memory" +msgstr "Seqdec takatut n tsuqqilt" + +msgid "Learn From Files..." +msgstr "Lmed seg yifuyla..." + +msgid "Learn from files..." +msgstr "Lmed seg yifuyla..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Ales awennez" + +msgid "Consult TM when updating from sources" +msgstr "Ciweṛ takatut n tsuqqilt MT mi ara tmucceḍeḍ seg yiɣbula" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Ma yermed, Poedit ad yeɛreḍ ad yeččar inekcumen imaynuten s inekcumen " +"iqburen\n" +"i yettwaḥerzen di tkatut n tsuqqilin.Ma yella takatut n tsuqqilin ur\n" +"teččur ara mliḥ, ur k-tneffeɛ ara aṭas. Simal tesuqquleḍ\n" +"simal tettimɣur tkatut n tsuqqilin, simal tettwenniɛ teswiɛt." + +msgid "Stored translations:" +msgstr "Tisuqqilin yettwaḥerzen :" + +msgid "Database size on disk:" +msgstr "Tiddi n uzadur n isefka ɣef uḍebsi :" + +msgid "Select translation files to import" +msgstr "Fren ifuyla n tsuqqilt ar tketreḍ" + +msgid "Translation Memory" +msgstr "Takatut n tsuqqilt" + +msgid "Importing translations..." +msgstr "Akter n tsuqqilin…" + +msgid "Finalizing..." +msgstr "Akemmel..." + +msgid "Reset translation memory" +msgstr "Ales awennez n tkatut n tsuqqilt" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "D tidett tebɣiḍ ad talseḍ awennez n tkatut n tsuqqilit ?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Alus n uwennez n tkatut n tsuqqilt ad yesfeḍ i lebda tisuqqilin i " +"yettwaḥerzen degs. Tamhelt-agi ur tesɛi ara tuɣalin ɣer deffir ." + +msgid "Cancel" +msgstr "Semmet" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Imassafen n tengalt taɣbalut seqdacen-ten i wenadi di tengalt taɣbalut ɣef " +"izraren n tsuqqilt iwakken ad ttwassfen yerna ad ttwasuqqlen." + +msgid "New" +msgstr "Amaynut" + +msgid "Edit" +msgstr "Ẓreg" + +msgid "Delete extractor" +msgstr "Kkes amassaf" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "S tidett tebɣiḍ ad tekkseḍ amassaf “%s” ?" + +msgid "Extractors" +msgstr "Imassafen" + +msgid "Accounts" +msgstr "Imiḍanen" + +msgid "Automatically check for updates" +msgstr "Anadi awurman n umucceḍ" + +msgid "Include beta versions" +msgstr "Seddu ileqman bêta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Les versions bêta contiennent les dernières nouveautés et améliorations, " +"mais elles peuvent être un peu moins stables." + +msgid "Updates" +msgstr "Amucceḍ" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Iɣewaren-agi ad beddelen amsal adigan n ifuyla PO. Beddil-iten ma yella " +"tella sebbat tulmisin amedya asenqed n lqem." + +msgid "Line endings:" +msgstr "Tagarra n ujerriḍ :" + +msgid "Unix (recommended)" +msgstr "Unix (asemter)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Tuɣalin s ajerriḍ di :" + +msgid "Preserve formatting of existing files" +msgstr "Ḥrez amsal n ifuyla i yellan" + +msgid "Advanced" +msgstr "Anaẓi" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Imenyafen n %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Seḥlucceg-sers ikaramen dagi\n" +"\n" +"neɣ seqdec tanast +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Seḥlucceg-sers ikaramen dagi\n" +"\n" +"neɣ seqdec tanast +" + +msgid "Add Folders..." +msgstr "Rnu ikaramen..." + +msgid "Add folders..." +msgstr "Rnu ikaramen..." + +msgid "Add Files..." +msgstr "Rnu ifuyla..." + +msgid "Add files..." +msgstr "Rnu ifuyla..." + +msgid "Add Wildcard..." +msgstr "Rnu isekkilen n usemselsi..." + +msgid "Add wildcard..." +msgstr "Rnu isekkilen n usemselsi..." + +msgid "Paths" +msgstr "Iberdan" + +msgid "Excluded paths" +msgstr "Iberdan ur nettki ara" + +msgid "Additional keywords" +msgstr "Awalen yufraren imernanen" + +msgid "Name of the project the translation is for" +msgstr "Isem n usenfar n tsuqqilt" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "amedya. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recommandé)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Sekles qbel afaylu. Ur tezmireḍ ara ad tẓergeḍ tanegzumt-agi uqbel." + +msgid "Comment:" +msgstr "Awennit:" + +msgid "OK" +msgstr "Ih" + +msgid "C&lear" +msgstr "Sf&eḍ" + +msgid "Clear the comment" +msgstr "Sfeḍ awennit" + +msgid "Create new translations project" +msgstr "Snulfu-d asenfar amaynut n tsuqqilin" + +msgid "Edit the project" +msgstr "Ẓreg asenfar" + +msgid "Delete the project" +msgstr "Kkes asenfar" + +msgid "Update all" +msgstr "Mucceḍ kulec" + +msgid "Update all catalogs in the project" +msgstr "Mucceḍ ikaramen merra n usenfar" + +msgid "Edit project" +msgstr "Ẓreg asenfar" + +msgid "Project name:" +msgstr "Isem n usenfar :" + +msgid "Browse" +msgstr "Ḍum" + +msgid "Add directory to the list" +msgstr "Rnu akaram ɣer tebdart" + +msgid "&New..." +msgstr "Amaynut" + +msgid "New from &POT/PO file..." +msgstr "Amaynut seg ufaylu &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Amaynut seg ufaylu &POT/PO..." + +msgid "&Open..." +msgstr "&di..." + +msgid "Open Recent" +msgstr "Récemment ouverts" + +msgid "Open from Crowdin..." +msgstr "Ldi seg Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Ldi seg Crowdin..." + +msgid "&Close" +msgstr "&Mdel" + +msgid "&Save" +msgstr "&ekles" + +msgid "Save &as..." +msgstr "Sekles s yisem..." + +msgid "Save &As..." +msgstr "Sekl&es s yisem..." + +msgid "Compile to MO..." +msgstr "Sefsu ɣer MO..." + +msgid "E&xport as HTML..." +msgstr "Sifeḍ s &talɣa HTML…" + +msgid "Check for updates..." +msgstr "Nadi amucceḍ..." + +msgid "&Preferences..." +msgstr "Imen&yafen..." + +msgid "Catalogs &manager" +msgstr "Asefrak n ikaramen" + +msgid "Catalogs &Manager" +msgstr "Asefrak n ikaramen" + +msgid "E&xit" +msgstr "Ff&eɣ" + +msgid "Quit" +msgstr "Ffeɣ" + +msgid "Copy from singular" +msgstr "Nghel seg wasuf" + +msgid "Copy From Singular" +msgstr "Nghel seg wasuf" + +msgid "Translation is &fuzzy" +msgstr "Tisuqqilin timewẓiyin" + +msgid "Translation Is &Fuzzy" +msgstr "Tasuqqilt d tamewẓit" + +msgid "Edit &comment" +msgstr "Ẓreg awennit" + +msgid "Edit &Comment" +msgstr "&Ẓreg awennit" + +msgid "Suggestions" +msgstr "Isumar" + +msgid "&Show references" +msgstr "Ẓer tiwelhiwin" + +msgid "&Show References" +msgstr "Ẓer tiwelhiwin" + +msgid "&Find..." +msgstr "Nadi..." + +msgid "Replace..." +msgstr "Semselsi..." + +msgid "Find next" +msgstr "Nadi uḍfirt" + +msgid "Find previous" +msgstr "Nadi uzwir" + +msgid "Find and Replace..." +msgstr "Nadi semselsi..." + +msgid "Find Next" +msgstr "Nadi uḍfir" + +msgid "Find Previous" +msgstr "Nadi uzwir" + +msgid "&Preferences" +msgstr "Tiwelhiwin" + +msgid "Display entry &IDs" +msgstr "Beqqeḍ ID n inekcumen" + +msgid "Display Entry &IDs" +msgstr "Beqqeḍ ID n inekcumen" + +msgid "Sort by &file order" +msgstr "Fren s umizzwer n ufaylu" + +msgid "Sort by &File Order" +msgstr "Fren s umizzwer n ufaylu" + +msgid "Sort by &source" +msgstr "Smizzwer s uɣbalu" + +msgid "Sort by &Source" +msgstr "Smizzwer s uɣbalu" + +msgid "Sort by &translation" +msgstr "Smi&zzwer s tsuqilt" + +msgid "Sort by &Translation" +msgstr "Smi&zzwer s tsuqilt" + +msgid "&Group by context" +msgstr "Se&grew s twennaḍt" + +msgid "&Group By Context" +msgstr "Se&grew s twennaḍt" + +msgid "Entries with errors first" +msgstr "Zwir inekcumen yesɛan tuccḍiwin" + +msgid "Entries with Errors First" +msgstr "Zwir inekcumen yesɛan tuccḍiwin" + +msgid "&Untranslated entries first" +msgstr "Zwir inekcumen ur nettwasuqqel ara" + +msgid "&Untranslated Entries First" +msgstr "Zwir inekcumen ur nettwasuqqel ara" + +msgid "Show sidebar" +msgstr "Beqqeḍ agalis n yidis" + +msgid "Show status bar" +msgstr "Beqqeḍ tafeggagt n waddad" + +msgid "C&atalog" +msgstr "Akaram" + +msgid "&Update from sources" +msgstr "Mucceḍ seg yiɣbula" + +msgid "&Update from Sources" +msgstr "Mucceḍ seg yiɣbula" + +msgid "Update from &POT file..." +msgstr "Mucceḍ seg ufaylu POT..." + +msgid "Update from &POT File..." +msgstr "Mucceḍ seg ufaylu POT..." + +msgid "Sync with Crowdin" +msgstr "Semtawi aked Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Semmed tisuqqilin yexuṣṣen s tkatut n tsuqilt..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Semmed tisuqqilin yexuṣṣen s tkatut n tsuqilt..." + +msgid "&Purge deleted translations" +msgstr "Sfeḍ tisuqqilin yettwakksen" + +msgid "&Purge Deleted Translations" +msgstr "Sfeḍ tisuqqilin yettwakksen" + +msgid "&Validate translations" +msgstr "Sergeg tisuqqilin" + +msgid "&Validate Translations" +msgstr "Sergeg tisuqqilin" + +msgid "&Properties..." +msgstr "Iraten..." + +msgid "&Done and next" +msgstr "Snes u kemmel" + +msgid "&Done and Next" +msgstr "Snes u kemmel" + +msgid "&Previous translation" +msgstr "Tasuqqilt tuzwirt" + +msgid "&Previous Translation" +msgstr "Tasuqqilt tuzwirte" + +msgid "&Next translation" +msgstr "Tasuqqilt tuḍfirt" + +msgid "&Next Translation" +msgstr "Tasuqqilt tuḍfirt" + +msgid "P&revious unfinished" +msgstr "Uzwir ur nemmid" + +msgid "P&revious Unfinished" +msgstr "Uzwir ur nemmid" + +msgid "Ne&xt unfinished" +msgstr "Uḍfir ur nemmidt" + +msgid "Ne&xt Unfinished" +msgstr "Uḍfir ur nemmidt" + +msgid "Previous plural form" +msgstr "Talgha n usget tuzwirt" + +msgid "Previous Plural Form" +msgstr "Talgha n usget tuzwirt" + +msgid "Next plural form" +msgstr "Talgha n usget tudfirt" + +msgid "Next Plural Form" +msgstr "Talgha n usget tudfirt" + +msgid "&Online help" +msgstr "Tallalt ɣef uẓṭṭa" + +msgid "&Online Help" +msgstr "Tallalt ɣef uẓṭṭa" + +msgid "&GNU gettext manual" +msgstr "Adlisfus n &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Adlisfus n &GNU gettext" + +msgid "&About Poedit" +msgstr "Ɣef Poedit" + +msgid "&About" +msgstr "Ɣef" + +msgid "Extractor setup" +msgstr "Asebddi n umassaf" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Tabdart n imassafen berzen s tenqiḍt-ticcert (amedya. *.cpp;*.h) :" + +msgid "Invocation:" +msgstr "Tiɣri:" + +msgid "Command to extract translations:" +msgstr "Anzaḍ i tussfa n tsuqqilin :" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Attaya tnezḍayt i yesekkaren amassaf.\n" +"%o : smeɣred ɣer yisem n ufaylu n tuffɣa,\n" +"%K : beqqeḍ awalen yufraren,\n" +"%F : beqqeḍ ifuyla n unekcum,\n" +"%C : tagrumma n isekkilen (ẓer uksar-agi)." + +msgid "An item in keywords list:" +msgstr "Aferdis si tebdart n yismawen yufraren :" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Inséré dans la ligne de commande pour chaque\n" +"mot clé. %k : le mot clé." + +msgid "An item in input files list:" +msgstr "Aferdis si tebdart n yifuyla n unekcum :" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Inséré dans la ligne de commande pour chaque\n" +"fichier d'entrée. %f : nom du fichier." + +msgid "Source code charset:" +msgstr "Tagrumma n isekkilen n tengalt taɣbalut :" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Inséré dans la ligne de commande lorsque le code de jeu de\n" +"caractères de la source est fourni. %c : valeur du jeu de caractères." + +msgid "Catalog properties" +msgstr "Iraten n ukaram" + +msgid "Project name and version:" +msgstr "Isem aked lqem n usenfar :" + +msgid "Plural Forms:" +msgstr "Talɣiwin n wesget :" + +msgid "Use default rules for this language" +msgstr "Seqdec alugen n lexṣas n tutlayt-agi" + +msgid "Use custom expression" +msgstr "Seqdec tanfalit yugnen" + +msgid "Learn about plural forms" +msgstr "Ẓer ugar ɣef talɣiwin n wesget" + +msgid "Charset:" +msgstr "Tagrumma n isekkilen :" + +msgid "Team:" +msgstr "Tarbaɛt :" + +msgid "Team's email address:" +msgstr "Tansa e-mail n terbaɛt :" + +msgid "Translation properties" +msgstr "Iraten n tsuqqilt" + +msgid "Sources paths" +msgstr "Iberdan n iɣbula" + +msgid "Extract text from source files in the following directories:" +msgstr "Ssef aḍris seg yifuyla iɣbula deg yikaramen-agi :" + +msgid "Base path:" +msgstr "Abrid agejdan :" + +msgid "Sources keywords" +msgstr "Awalen yufraren n yiɣbula" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Seqdec awalen-agi yufraren (ismawen n twura) iwaken ad tɛeqleḍ izraren n " +"usuqqel\n" +"deg yifuyla iɣbula :" + +msgid "Learn about gettext keywords" +msgstr "Ẓer ugar ɣef wawalen yufraren n gettext" + +msgid "Update summary" +msgstr "Agzul n umucceḍ" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Izraen-agi nufa-ten-id deg yiɣbula maca ulac-iten deg ukaram.\n" +"Poedit ad ten-yernu ɣer ukaram tura." + +msgid "New strings" +msgstr "Izraren imaynuten" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Izraren-agi ulac-iten tura deg yiɣbula.\n" +"Poedit ad ten-yekkes seg ukaram." + +msgid "Obsolete strings" +msgstr "Chaînes obsolètes" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nouvelle, 0 obsolète)" + +msgid "Open" +msgstr "Ldi" + +msgid "Save catalog" +msgstr "Sekles akaram" + +msgid "Validate" +msgstr "Serggeg" + +msgid "Check for errors in the translation" +msgstr "Selken tuccḍiwin di tsuqqilin" + +msgid "Update" +msgstr "Mucceḍ" + +msgid "Update catalog - synchronize it with sources" +msgstr "Mucceḍ akaram - Semtawi aked yiɣbula" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Sermed ma yella azrar yettwafernen tettwasuqqel d amewẓi" + +msgid "Show or hide the sidebar" +msgstr "Beqqeḍ neɣ ffer agalis n yidis" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Aḍris aɣbalu uzwir :" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"L'ancien texte source (avant son changement durant une mise à jour) auquel " +"correspond la traduction approximative." + +msgid "Notes for translators:" +msgstr "Tamawt i yemsuqqlen :" + +msgid "Add comment" +msgstr "Rnu awennit" + +msgid "Add Comment" +msgstr "Rnu awennit" + +msgid "Translation suggestions:" +msgstr "Isumar n tsuqqilt :" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ur d-nufi ara inmeɣrayen" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ur d-nufi ara inmeɣrayen" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Azrar-agi nufat-id di tkatut n tsuqqilt n Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nouvelle : %i, obsolète : %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Akter n tsuqqilin : %d" + +msgid "Poedit Update" +msgstr "Amucceḍ n Poedit" + +msgid "Preparing migration..." +msgstr "Aheyyi n yinig..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Addad n yinig : %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit ilaq ad yeselket takatut n tsuqqilin ɣer umasal-nniḍen." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ayagi ilaq ad t-tgeḍ iwakken ad yekker Poedit. Ayagi izmer ad yeṭṭef kra n " +"ddqayeq ma yella tesɛiḍ aṭas n tsuqqalin yettwaḥerzen, maca, ti tegti, ayagi " +"ilaq ad yeddu s tɣawla." + +msgid "Proceed" +msgstr "Kemmel" + +msgid "Translation memory migration failed." +msgstr "Anezri deg yinig n tkatut n tsuqqilin." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"D awezɣi inig n tkatut n tsuqqilin. Tuccḍa d tagi : \n" +"\n" +" • %s\n" +"\n" +"Ttxil-k azen e-mail ɣer help@poedit.net iwakken ad nefru ugur-agi." + +msgid "Cannot create temporary directory." +msgstr "D awezɣi asnulfu n ukaram akudan." + +msgid "Welcome to Poedit" +msgstr "Ansuf ɣer Poedit" + +msgid "Edit a translation" +msgstr "Ẓreg tasuqqilt" + +msgid "Open an existing PO file and edit the translation." +msgstr "Ldi afaylu PO i yellan u ẓreg tasuqqilt." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Ṭṭef afaylu PO neɣ tamudimt POT tesuffɣeḍ-d segs tasuqqilt tamaynut." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Ttekki di tsuqqilt aked Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "Zdem afaylu seg usenfar n Crowdin, suqqel u semtawi ibeddilen-ik." + +msgid "What is Crowdin?" +msgstr "Acu-t Crowdin ?" + +msgid "There are no translations. That’s unusual." +msgstr "Ulac tisuqqilin. Ayagi iffeɣ i lɛada." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Les entrées traduisibles ne sont pas ajoutées manuellement au système " +"Gettext, mais sont extraites automatiquement\n" +"à partir du code source. De cette façon, elles restent à jour et exactes.\n" +"Les traducteurs utilisent généralement des fichiers de modèle PO (POTS) " +"préparés par le développeur." + +msgid "(Learn more about GNU gettext)" +msgstr "(Ẓer ugar ɣef GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Ma tebɣiḍ ad tačareḍ akaram-agi s shala mucceḍ-it seg ufaylu POT :" + +msgid "Update from POT" +msgstr "Mucceḍ seg POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Awi-d izraren n usuqqel n tmudimt POT i yellan yakan." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Tzemreḍ daɣen ad tessfeḍ izraren n usuqqel srid seg tengalt taɣbalut :" + +msgid "Extract from sources" +msgstr "Ssef seg seg yiɣbula" + +msgid "Configure source code extraction in Properties." +msgstr "Seɣwer tussfa n tengalt taɣbalut deg iraten." + +msgid "Sync" +msgstr "Semtawi" + +msgid "Synchronize the translation with Crowdin" +msgstr "Semtawi tisuqqilin aked Crowdin" diff --git a/locales/kk.mo b/locales/kk.mo new file mode 100644 index 0000000000000000000000000000000000000000..f7d45176a3e20ec019b0d39a3fdbabe1decd215c GIT binary patch literal 57787 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

    jD}KV-F_EqS*jIrb=Fbr*$HJB9rCK$ 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\n" +"Language-Team: Polish\n" +"Language: pl_PL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Nie wyświetlaj tej informacji" + +msgid "Don't Show Again" +msgstr "Nie pokazuj ponownie" + +msgid "Don't show again" +msgstr "Nie wyświetlaj ponownie" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i wiersz z pliku %s nie został wczytany poprawnie." +msgstr[1] "%i wiersze z pliku %s nie zostały wczytane poprawnie." +msgstr[2] "%i wierszy z pliku %s nie zostało wczytanych poprawnie." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Wiersz %d z pliku '%s' jest uszkodzony (nieprawidłowe dane %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Zdeformowany nagłówek: „%s”" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Uszkodzony plik pakietu: użyto liczby pojedynczej msgstr razem z msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Uszkodzony plik pakietu: użyto liczby mnogiej msgstr bez msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Wystąpiły błędy w czasie odczytu pakietu. W wyniku czego może brakować " +"części danych, bądź mogą być one uszkodzone." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nie można wczytać pliku „%s”. Prawdopodobnie jest uszkodzony." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Plik „%s” ma atrybut „tylko do odczytu” i nie może być zapisany.\n" +"Zapisz go pod inną nazwą." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nie można zapisać pliku %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Wystąpił problem z dokładnym formatowaniem pliku, ale został on zapisany " +"poprawnie." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Ten pakiet nie może zostać zapisany z zestawem znaków „%s”\n" +"wybranym w ustawieniach pakietu. Został zapisany w kodowaniu\n" +"UTF-8, a ustawienia zostały odpowiednio zmodyfikowane." + +msgid "Error saving catalog" +msgstr "Błąd zapisywania pakietu" + +msgid "PO Translation Files" +msgstr "Pliki tłumaczeń PO" + +msgid "POT Translation Templates" +msgstr "Pliki szablonów tłumaczeń POT" + +msgid "All Translation Files" +msgstr "Wszystkie pliki tłumaczeń" + +msgid "Merging differences..." +msgstr "Łączenie różnic…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "„%s” nie jest poprawnym plikiem .pot." + +msgid "(Use default language)" +msgstr "(Użyj domyślnego języka)" + +msgid "Select your preferred language" +msgstr "Wybierz preferowany język interfejsu" + +msgid "Language selection" +msgstr "Wybór języka" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Aby zmiany zostały zastosowane, należy ponownie uruchomić Poedit." + +msgid "Downloading translations is disabled in this project." +msgstr "Pobieranie tłumaczeń jest wyłączone w tym projekcie." + +msgid "Not authorized, please sign in again." +msgstr "Brak autoryzacji, zaloguj się ponownie." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin jest internetową platformą do zarządzania tłumaczeniami oraz " +"narzędziem do współpracy nad tłumaczeniami. Poedit obsługuje bezproblemową " +"synchronizację plików PO z Crowdin." + +msgid "Sign In" +msgstr "Zaloguj się" + +msgid "Sign in" +msgstr "Zaloguj się" + +msgid "Sign Out" +msgstr "Wyloguj się" + +msgid "Sign out" +msgstr "Wyloguj się" + +msgid "Waiting for authentication…" +msgstr "Oczekiwanie na uwierzytelnienie…" + +msgid "Updating user information…" +msgstr "Aktualizowanie informacji o użytkowniku…" + +msgid "Signed in as:" +msgstr "Zalogowany jako:" + +msgid "Learn More About Crowdin" +msgstr "Dowiedz się więcej o platformie Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Dowiedz się więcej o platformie Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Zaloguj się do Crowdin" + +msgid "Open Crowdin translation" +msgstr "Otwórz tłumaczenie z Crowdin" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Język:" + +msgid "File:" +msgstr "Plik:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" +"Twoje konto w systemie Crowdin nie uwzględnia żadnych projektów tłumaczeń." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Ten projekt nie zawiera plików, które mogą być przetłumaczone w programie " +"Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"The plik może być edytowany jedynie bezpośrednio na stronie internetowej " +"Cordwin." + +msgid "Downloading latest translations…" +msgstr "Pobieranie najnowszych tłumaczeń…" + +msgid "Syncing with Crowdin" +msgstr "Synchronizacja z Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synchronizacja z Crowdin nie powiodła się." + +msgid "Crowdin error" +msgstr "Błąd Crowdin" + +msgid "Uploading translations…" +msgstr "Przesyłanie tłumaczeń…" + +msgid "&Copy" +msgstr "&Kopiuj" + +msgid "Learn more" +msgstr "Dowiedz się więcej" + +msgid "Learn More" +msgstr "Dowiedz się więcej" + +#, c-format +msgid "Failed command: %s" +msgstr "Błąd polecenia: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Nie udało się połączyć pakietów gettext" + +msgid "Scanning files..." +msgstr "Skanowanie plików…" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Przetwarzanie %s plików…" + +msgid "Failed to load extracted catalog." +msgstr "Nie udało się wczytać wyodrębnionego pliku" + +msgid "&Help" +msgstr "P&omoc" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Plików MO nie można edytować bezpośrednio w programie Poedit." + +msgid "Error opening file" +msgstr "Błąd podczas otwierania pliku" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Zamiast tego, otwórz i edytuj odpowiadający mu plik PO. Podczas zapisywania " +"pliku PO, odpowiadający mu plik MO zostanie zaktualizowany." + +msgid "don't delete temporary files (for debugging)" +msgstr "Nie usuwaj plików tymczasowych (dla debugowania)" + +msgid "handle a poedit:// URI" +msgstr "włącz obsługę protokołu poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Komunikacja z procesem programu Poedit nie powiodła się." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Wystąpił nieobsługiwany wyjątek: %s" + +msgid "Unhandled exception occurred." +msgstr "Wystąpił nieobsługiwany wyjątek." + +msgid "Open catalog" +msgstr "Otwórz pakiet" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Plik „%s” nie istnieje!" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Informacje o %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Wersja %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Usługi" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ukryj %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ukryj pozostałe" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Pokaż wszystkie" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Zamknij %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit jest łatwym w użyciu edytorem tłumaczeń." + +msgid "Catalogs Manager" +msgstr "Menedżer pakietów" + +msgid "Check for Updates..." +msgstr "Sprawdź dostępność aktualizacji…" + +msgid "&Edit" +msgstr "&Edycja" + +msgid "Undo" +msgstr "Cofnij" + +msgid "Redo" +msgstr "Przywróć" + +msgid "Paste and Match Style" +msgstr "Wklej i dopasuj styl" + +msgid "Delete" +msgstr "Usuń" + +msgid "Spelling and Grammar" +msgstr "Sprawdzanie pisowni i gramatyki" + +msgid "Show Spelling and Grammar" +msgstr "Pokaż sprawdzanie pisowni i gramatyki" + +msgid "Check Document Now" +msgstr "Sprawdź dokument teraz" + +msgid "Check Spelling While Typing" +msgstr "Sprawdzaj pisownię w trakcie pisania" + +msgid "Check Grammar With Spelling" +msgstr "Sprawdź gramatykę i pisownię" + +msgid "Correct Spelling Automatically" +msgstr "Poprawiaj pisownię automatycznie" + +msgid "Substitutions" +msgstr "Zamienniki" + +msgid "Show Substitutions" +msgstr "Pokaż zamienniki" + +msgid "Smart Copy/Paste" +msgstr "Inteligentne kopiowanie/wklejanie" + +msgid "Smart Quotes" +msgstr "Inteligentne cytaty" + +msgid "Smart Dashes" +msgstr "Inteligentne kreski" + +msgid "Smart Links" +msgstr "Inteligentne odnośniki" + +msgid "Text Replacement" +msgstr "Zamiana tekstu" + +msgid "Transformations" +msgstr "Transformacje" + +msgid "Make Upper Case" +msgstr "Zamień na duże litery" + +msgid "Make Lower Case" +msgstr "Zamień na małe litery" + +msgid "Capitalize" +msgstr "Zamień na kapitaliki" + +msgid "Speech" +msgstr "Narracja" + +msgid "Start Speaking" +msgstr "Rozpocznij mówienie" + +msgid "Stop Speaking" +msgstr "Zatrzymaj mówienie" + +msgid "&View" +msgstr "&Widok" + +msgid "Enter Full Screen" +msgstr "Tryb pełnoekranowy" + +msgid "Window" +msgstr "Okno" + +msgid "Minimize" +msgstr "Minimalizuj" + +msgid "Zoom" +msgstr "Powiększenie" + +msgid "Bring All to Front" +msgstr "&Przenieś wszystko do przodu" + +msgid "PO Translation" +msgstr "Tłumaczenie PO" + +msgid "The file cannot be opened." +msgstr "Nie można otworzyć pliku." + +msgid "Invalid file" +msgstr "Nieprawidłowy plik" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Plik może być uszkodzony lub ma format nie rozpoznawany przez Poedit." + +msgid "&Undo" +msgstr "&Cofnij" + +msgid "&Redo" +msgstr "&Ponów" + +msgid "Cu&t" +msgstr "&Wytnij" + +msgid "Cut" +msgstr "Wytnij" + +msgid "Copy" +msgstr "Kopiuj" + +msgid "&Paste" +msgstr "&Wklej" + +msgid "Paste" +msgstr "Wklej" + +msgid "&Delete" +msgstr "&Usuń" + +msgid "Select &All" +msgstr "Zaznacz &wszystko" + +msgid "Select All" +msgstr "Zaznacz wszystko" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "strzałka w górę" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "strzałka w dół" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Na okno Poedit nie można upuścić więcej niż jeden plik." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Plik „%s” nie jest plkiem zawierającym frazy." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Plik" + +msgid "&Go" +msgstr "Nawi&gacja" + +msgid "Source text:" +msgstr "Tekst źródłowy" + +msgid "Singular:" +msgstr "Liczba pojedyncza:" + +msgid "Plural:" +msgstr "Liczba mnoga:" + +msgid "Translation:" +msgstr "Tłumaczenie" + +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 "" +"Pliki POT są jedynie szablonem tłumaczenia i same nie zwierają tłumaczeń.\n" +"Aby utworzyć nowe tłumaczenie utwórz nowy plik PO operaty na tym szablonie." + +msgid "Create New Translation" +msgstr "Utwórz nowe tłumaczenie" + +msgid "Create new translation" +msgstr "Utwórz nowe tłumaczenie" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Sprawdzanie pisowni jest wyłączone, ponieważ słownik %s nie jest " +"zainstalowany." + +msgid "Install" +msgstr "Zainstaluj" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Zmodyfikowano pakiet. Czy chcesz zapisać zmiany?" + +msgid "Save changes" +msgstr "Zapisz zmiany" + +msgid "Your changes will be lost if you don't save them." +msgstr "Jeśli zmiany nie zostaną zapisane, zostaną utracone." + +msgid "Save" +msgstr "Zapisz" + +msgid "Don't save" +msgstr "Nie zapisuj" + +msgid "Don't Save" +msgstr "Nie zapisuj" + +msgid "Save as..." +msgstr "Zapisz jako…" + +msgid "Compile to..." +msgstr "Skompiluj do..." + +msgid "Compiled Translation Files" +msgstr "Skompilowany plik tłumaczenia" + +msgid "Export as..." +msgstr "Eksportuj jako…" + +msgid "HTML Files" +msgstr "Pliki HTML" + +msgid "Open catalog template" +msgstr "Otwórz szablon pakietu" + +msgid "Updating catalog" +msgstr "Aktualizowanie pakietu…" + +msgid "Source code not available." +msgstr "Kod źródłowy jest niedostępny." + +msgid "Updating failed" +msgstr "Aktualizacja nie powiodła się" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Tłumaczenie nie może być zaktualizowane na podstawie kodu źródłowego gdyż " +"nie został on znaleziony w lokalizacji określonej we właściwościach katalogu." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Wpisy w pakiecie są prawdopodobnie niepoprawne." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Aktualizacja pakietu się nie powiodła. Naciśnij przycisk „Szczegóły »”, aby " +"zobaczyć szczegóły." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "W tłumaczeniu znaleziono %d problem." +msgstr[1] "W tłumaczeniu znaleziono %d problemy." +msgstr[2] "W tłumaczeniu znaleziono %d problemów." + +msgid "Validation results" +msgstr "Wyniki weryfikacji" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Elementy zawierające błędy zostały oznaczone kolorem czerwonym. Szczegółowy " +"opis błędu będzie widoczny po wybraniu elementu." + +msgid "The file was saved safely." +msgstr "Plik został zapisany bezpiecznie." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Plik został zapisany bezpiecznie i skompilowany do formatu .mo, ale " +"prawdopodobnie nie będzie działał poprawnie." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Plik został zapisany bezpiecznie, ale nie może zopstać skompilowany do " +"formatu .mo i używany." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Plik został skompilowany do formatu MO jednak prawdopodobnie nie będzie " +"działał poprawnie." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Ten plik nie może zostać skompilowany do formatu MO i użyty." + +msgid "No problems with the translation found." +msgstr "Nie znaleziono problemów." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Tłumaczenie jest gotowe do użycia, ale %d pozycja nie został jeszcze " +"przetłumaczony." +msgstr[1] "" +"Tłumaczenie jest gotowe do użycia, ale %d pozycje nie zostały jeszcze " +"przetłumaczone." +msgstr[2] "" +"Tłumaczenie jest gotowe do użycia, ale %d pozycji nie zostało jeszcze " +"przetłumaczonych." + +msgid "The translation is ready for use." +msgstr "Tłumaczenie jest gotowe do użycia." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit automatycznie naprawił nieprawidłowości w pliku „%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Plik zawierał powielone pozycje co nie jest dozwolone w plikach PO i mogłoby " +"uniemożliwić jego użycie. Poedit naprawił ten problem ale należy przejrzeć " +"tłumaczenia wszystkich pozycji oznaczonych jako niepewne i ewentualnie " +"poprawić je." + +msgid "Language of the translation isn't set." +msgstr "Nie określono języka tłumaczenia." + +msgid "Set Language" +msgstr "Wybierz język" + +msgid "Set language" +msgstr "Wybierz język" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Podpowiedzi nie są dostępne jeżeli język tłumaczenia nie jest poprawnie " +"ustawiony. Inne funkcje, takie jak liczba mnogą, mogą także nie działać " +"poprawnie." + +msgid "Language of the translation is the same as source language." +msgstr "Język tłumaczenia jest taki sam jak język źródłowy." + +msgid "Fix Language" +msgstr "Napraw język" + +msgid "Fix language" +msgstr "Napraw język" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Pakiet zawiera wpisy w formach liczby mnogiej, a nie został skonfigurowany " +"nagłówek Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Wpisy w tym pakiecie mają inne formy liczby mnogiej niż zdeklarowane w " +"nagłówku Plural-Forms." + +msgid "Required header Plural-Forms is missing." +msgstr "Brakuje nagłówka Plural-Forms." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Błąd składni w nagłówku Plural-Forms („%s”)." + +msgid "Fix the Header" +msgstr "Napraw nagłówek" + +msgid "Fix the header" +msgstr "Napraw nagłówek" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "W języku %s formy liczby mnogiej zawarte w pakiecie nie są używane." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Do sprawdzenia" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Błąd podczas wczytywania pliku pakietu „%s”" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Przetłumaczone: %d z %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Pozostało: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d błąd" +msgstr[1] "%d błędy" +msgstr[2] "%d błędów" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d wpis" +msgstr[1] "%d wpisy" +msgstr[2] "%d wpisów" + +msgid " (unsaved)" +msgstr " (niezapisany)" + +msgid " (modified)" +msgstr " (zmodyfikowano)" + +msgid "Go" +msgstr "Nawigacja" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Nie udało się zaktualizować pamięci tłumaczeniowej: %s" + +msgid "Purge deleted translations" +msgstr "Wyczyść usunięte tłumaczenia" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Czy chcesz usunąć wszystkie nieużywane tłumaczenia?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Kontynuując trwale usuniesz wszystkie tłumaczenia oznaczone jako usunięte. " +"Jeśli w przyszłości zostaną dodane, konieczne będzie ich ponowne tłumaczenie." + +msgid "Keep" +msgstr "Zachowaj" + +msgid "Purge" +msgstr "Wyczyść" + +msgid "Fill missing translations from TM" +msgstr "Uzupełnianie brakujących tłumaczeń z pamięci tłumaczeniowej" + +msgid "Only fill in exact matches" +msgstr "Uzupełniaj jedynie dokładne odpowiedniki" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Domyślnie, przybliżone wyniki są także uzupełniane i oznaczane jako " +"niepewnie. Zaznacz tą opcję aby uwzględniać tylko dokładne odpowiedniki." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Nie oznaczaj dokładnych odpowiedników jako niepewne" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Włącz tylko jeżeli w pełni ufasz jakości twojej pamięci tłumaczeniowej. " +"Domyślnie, wszystkie wpisy dopasowane z pamięci tłumaczeniowej są oznaczane " +"jako niepewne i powinny zostać przejrzane." + +msgid "Fill" +msgstr "Uzupełnij" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d pozycja została uzupełniona z pamięci tłumaczeniowej." +msgstr[1] "%d pozycje zostały uzupełnione z pamięci tłumaczeniowej." +msgstr[2] "%d pozycji zostało uzupełnionych z pamięci tłumaczeniowej." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Przetłumaczone frazy zostały oznaczone jako niepewne, ponieważ mogą być " +"niedokładne. Należy sprawdzić ich poprawność." + +msgid "No entries could be filled from the translation memory." +msgstr "Å»adnej frazy nie można uzupełnić z pamięci tłumaczeniowej." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Pamięć tłumaczeń nie zawiera żadnych wpisów pasujących do treści tego pliku. " +"Funkcja ta jest efektywna tylko dla tłumaczeń półautomatycznych po tym, jak " +"pamięć tłumaczeń Poedit nauczy się z plików ręcznie przetłumaczonych." + +msgid "Translating" +msgstr "Tłumaczenie" + +msgid "Filling missing translations from TM..." +msgstr "Uzupełnianie brakujących fraz z pamięci tłumaczeń…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Przetłumaczono %u tekst" +msgstr[1] "Przetłumaczono %u teksty" +msgstr[2] "Przetłumaczono %u tekstów" + +msgid "Copy from source text" +msgstr "Kopiuj z tekstu źródłowego" + +msgid "Copy from Source Text" +msgstr "Kopiuj z tekstu źródłowego" + +msgid "Clear translation" +msgstr "Wyczyść tłumaczenie" + +msgid "Clear Translation" +msgstr "Wyczyść tłumaczenie" + +msgid "Edit comment" +msgstr "Edytuj komentarz" + +msgid "Edit Comment" +msgstr "Edytuj komentarz" + +msgid "References:" +msgstr "Odwołania:" + +msgid "Everything" +msgstr "Wszystko" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Liczba pojedyncza" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Jeden" + +msgid "Two" +msgstr "Dwa" + +msgid "Plural" +msgstr "Liczba mnoga" + +msgid "Other" +msgstr "Inne" + +msgid "&Bookmarks" +msgstr "&Zakładki" + +#, c-format +msgid "Set bookmark %i" +msgstr "Wstaw zakładkę %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Przejdź do zakładki %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Wstaw zakładkę %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Przejdź do zakładki %i" + +msgid "Hide Sidebar" +msgstr "Ukryj pasek boczny" + +msgid "Show Sidebar" +msgstr "Pokaż pasek boczny" + +msgid "Hide Status Bar" +msgstr "Ukryj pasek stanu\t" + +msgid "Show Status Bar" +msgstr "Pokaż pasek stanu" + +msgid "Source text" +msgstr "Tekst źródłowy" + +msgid "Translation" +msgstr "Tłumaczenie" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Tekst źródłowy - %s" + +msgid "unknown language" +msgstr "Nieznany język" + +#, c-format +msgid "Translation — %s" +msgstr "Tłumaczenie – %s" + +msgid "Error:" +msgstr "Błąd:" + +msgid "Source file" +msgstr "Plik źródłowy" + +msgid "Source file occurrence:" +msgstr "Występowanie pliku źródłowego:" + +msgid "Open in Editor" +msgstr "Otwórz w edytorze" + +msgid "Open in editor" +msgstr "Otwórz w edytorze" + +msgid "No references for the selected item." +msgstr "Brak odniesień do wybranej pozycji." + +#, c-format +msgid "Error opening file %s!" +msgstr "Błąd podczas otwierania pliku %s!" + +msgid "Find" +msgstr "Znajdź" + +msgid "Replace" +msgstr "Zamień" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcje" + +msgid "Ignore case" +msgstr "Ignoruj wielkość liter" + +msgid "Wrap around" +msgstr "Zawijaj wyszukiwanie" + +msgid "Whole words only" +msgstr "Tylko całe wyrazy" + +msgid "Find in source texts" +msgstr "Znajdź z tekście źródłowym" + +msgid "Find in translations" +msgstr "Szukaj w tłumaczeniach" + +msgid "Find in comments" +msgstr "Szukaj w komentarzach" + +msgid "Close" +msgstr "Za&mknij" + +msgid "Replace All" +msgstr "Zamień wszystkie" + +msgid "Replace all" +msgstr "Zamień wszystkie" + +msgid "< &Previous" +msgstr "« &Poprzednie" + +msgid "&Next >" +msgstr "&Następne »" + +msgid "String to find" +msgstr "Tekst do wyszukania" + +msgid "Replacement string" +msgstr "Zamień na tekst" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nie można uruchomić programu: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kod języka lub nazwa, np. en-GB" + +msgid "Translation Language" +msgstr "Język tłumaczenia" + +msgid "Language of the translation:" +msgstr "Język tłumaczenia:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Menedżer pakietów" + +msgid "Catalog" +msgstr "Pakiet" + +msgid "Total" +msgstr "Razem" + +msgid "Untrans" +msgstr "Nieprzetłumaczone" + +msgid "Fuzzy" +msgstr "Niepewne" + +msgid "Bad Tokens" +msgstr "Złe tokeny" + +msgid "Last modified" +msgstr "Ostatnio zmodyfikowano" + +msgid "Select directory" +msgstr "Wybierz katalog" + +msgid "Directories:" +msgstr "Katalogi:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Czy chcesz usunąć projekt?" + +msgid "Confirmation" +msgstr "Potwierdzenie" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Czy chcesz zaktualizować wszystkie\n" +"pakiety w tym projekcie?" + +msgid "Information about the translator" +msgstr "Informacje o tłumaczu" + +msgid "Name:" +msgstr "Autor:" + +msgid "Your Name" +msgstr "Imię i nazwisko" + +msgid "Email:" +msgstr "Adres e-mail:" + +msgid "your_email@example.com" +msgstr "twoj_adres@poczta.pl" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Twoje imię i nazwisko oraz adres email użyte zostaną wyłącznie w celu " +"ustawienia nagłówka Last-Translator w plikach GNU gettext." + +msgid "Editing" +msgstr "Edytowanie" + +msgid "Automatically compile MO file when saving" +msgstr "Automatycznie kompiluj plik MO podczas zapisywania" + +msgid "Show summary after catalog update" +msgstr "Wyświetlaj podsumowanie po aktualizacji pakietu" + +msgid "Check spelling" +msgstr "Sprawdź pisownię" + +msgid "Always change focus to text input field" +msgstr "Uaktywniaj pole wprowadzania tekstu" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nie zaleca się włączania tej opcji. Jeśli zostanie włączona, do nawigacji po " +"polach trzeba będzie używać klawisza Ctrl i strzałek, ale za to będzie można " +"niezwłocznie przystąpić do wpisywania tłumaczonego tekstu." + +msgid "Appearance" +msgstr "Wygląd" + +msgid "Use custom list font:" +msgstr "Użyj listy niestandardowych czcionek:" + +msgid "Use custom text fields font:" +msgstr "Użyj niestandardowej czcionki pola tekstowego:" + +msgid "Change UI language" +msgstr "Zmień język interfejsu" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(wymaga Windows 8 lub nowszej)" + +msgid "General" +msgstr "Ustawienia główne" + +msgid "Use translation memory" +msgstr "Używaj pamięć tłumaczeniową" + +msgid "Learn From Files..." +msgstr "Dowiedz się z plików…" + +msgid "Learn from files..." +msgstr "Rozszerz na podstawie plików..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Wyczyść" + +msgid "Consult TM when updating from sources" +msgstr "Uwzględniaj pamięć tłumaczeń podczas aktualizacji ze źródeł" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Jeśli funkcja zostanie włączona, Poedit będzie próbował wypełnić nowe\n" +"frazy, używając poprzednich tłumaczeń zapisanych w pamięci. Jeśli\n" +"w pamięci tłumaczeniowej znajduje się niewiele przetłumaczonych fraz,\n" +"funkcja ta nie będzie bardzo efektywna. Im więcej wykonanych\n" +"tłumaczeń, tym więcej zasobów będzie w pamięci tłumaczeniowej i funkcja ta\n" +"będzie coraz bardziej efektywna." + +msgid "Stored translations:" +msgstr "Zapisane tłumaczenia:" + +msgid "Database size on disk:" +msgstr "Rozmiar bazy danych na dysku:" + +msgid "Select translation files to import" +msgstr "Wybierz pliki tłumaczeń do zaimportowania" + +msgid "Translation Memory" +msgstr "Pamięć tłumaczeniowa" + +msgid "Importing translations..." +msgstr "Importowanie tłumaczeń…" + +msgid "Finalizing..." +msgstr "Finalizowanie…" + +msgid "Reset translation memory" +msgstr "Wyczyść pamięć tłumaczeniową" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Czy na pewno chcesz wyczyścić pamięć tłumaczeniową?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Wyczyszczenie pamięci tłumaczeniowej bezpowrotnie usunie wszystkie " +"zapamiętane tłumaczenia. Tej operacji nie można wycofać." + +msgid "Cancel" +msgstr "Anuluj" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Wyodrębnianie z kodu źródłowego pozwala odnaleźć teksty, które mogą zostać " +"przetłumaczone w plikach źródłowych programu i wyodrębnia je, gotowe do " +"tłumaczenia." + +msgid "New" +msgstr "Nowy" + +msgid "Edit" +msgstr "Edytuj" + +msgid "Delete extractor" +msgstr "Usuń wyodrębnienie" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Czy na pewno chcesz usunąć wyodrębnienie “%s”?" + +msgid "Extractors" +msgstr "Wyodrębnianie" + +msgid "Accounts" +msgstr "Konta" + +msgid "Automatically check for updates" +msgstr "Automatycznie sprawdzaj uaktualnienia" + +msgid "Include beta versions" +msgstr "Sprawdzaj także wersję beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Wersje beta zawierają zawierają nową funkcjonalność i usprawnienia, mogą być " +"jednak mniej stabilne." + +msgid "Updates" +msgstr "Aktualizacje" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Te ustawienia mają wpływ na wewnętrzne formatowanie plików PO. Zmień je, " +"jeżeli masz specyficzne wymagania np.: ze względu na system kontroli wersji." + +msgid "Line endings:" +msgstr "Format zakończeń wierszy:" + +msgid "Unix (recommended)" +msgstr "Unix (zalecane) " + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Szerokość:" + +msgid "Preserve formatting of existing files" +msgstr "Zachowaj formatowanie istniejących plików" + +msgid "Advanced" +msgstr "Zaawansowane" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Ustawienia" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Przeciągnij i upuść katalogi tutaj\n" +"\n" +"lub użyj przycisk +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Przeciągnij i upuść katalogi tutaj\n" +"\n" +"lub użyj przycisk +" + +msgid "Add Folders..." +msgstr "Dodaj katalogi..." + +msgid "Add folders..." +msgstr "Dodaj katalogi..." + +msgid "Add Files..." +msgstr "Dodaj pliki…" + +msgid "Add files..." +msgstr "Dodaj pliki…" + +msgid "Add Wildcard..." +msgstr "Dodaj wiele plików…" + +msgid "Add wildcard..." +msgstr "Dodaj wiele plików…" + +msgid "Paths" +msgstr "Ścieżki" + +msgid "Excluded paths" +msgstr "Ścieżki wykluczone" + +msgid "Additional keywords" +msgstr "Dodatkowe słowa kluczowe" + +msgid "Name of the project the translation is for" +msgstr "Nazwa projektu tłumaczenia jest dla" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "np. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (zalecane)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Zapisz najpierw plik. Przed zapisaniem pliku nie można edytować tej sekcji." + +msgid "Comment:" +msgstr "Komentarz" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Wyczyść" + +msgid "Clear the comment" +msgstr "Wyczyść komentarz" + +msgid "Create new translations project" +msgstr "Utwórz nowy projekt tłumaczeń" + +msgid "Edit the project" +msgstr "Edytuj projekt" + +msgid "Delete the project" +msgstr "Usuń projekt" + +msgid "Update all" +msgstr "Aktualizuj wszystkie" + +msgid "Update all catalogs in the project" +msgstr "Aktualizuj wszystkie pakiety w projekcie" + +msgid "Edit project" +msgstr "Edytuj projekt" + +msgid "Project name:" +msgstr "Nazwa projektu:" + +msgid "Browse" +msgstr "Przeglądaj" + +msgid "Add directory to the list" +msgstr "Dodaj katalog do listy" + +msgid "&New..." +msgstr "&Nowe…" + +msgid "New from &POT/PO file..." +msgstr "Nowe z &pliku .pot/.po…" + +msgid "New From &POT/PO File..." +msgstr "Nowe z &pliku .pot/.po…" + +msgid "&Open..." +msgstr "&Otwórz…" + +msgid "Open Recent" +msgstr "Ostatnio otwierane" + +msgid "Open from Crowdin..." +msgstr "Otwórz z Crowdin…" + +msgid "Open From Crowdin..." +msgstr "Otwórz z Crowdin…" + +msgid "&Close" +msgstr "Za&mknij" + +msgid "&Save" +msgstr "&Zapisz" + +msgid "Save &as..." +msgstr "Zapisz &jako…" + +msgid "Save &As..." +msgstr "Zapisz &jako…" + +msgid "Compile to MO..." +msgstr "Skompiluj do MO..." + +msgid "E&xport as HTML..." +msgstr "Eksportuj jako HTML…" + +msgid "Check for updates..." +msgstr "Sprawdź dostępność aktualizacji…" + +msgid "&Preferences..." +msgstr "&Ustawienia…" + +msgid "Catalogs &manager" +msgstr "&Menedżer pakietów" + +msgid "Catalogs &Manager" +msgstr "&Menedżer pakietów" + +msgid "E&xit" +msgstr "&Zakończ" + +msgid "Quit" +msgstr "Opuść" + +msgid "Copy from singular" +msgstr "Kopiować z pojedynczej" + +msgid "Copy From Singular" +msgstr "Kopiować z pojedynczej" + +msgid "Translation is &fuzzy" +msgstr "Oznacz jako &niepewne" + +msgid "Translation Is &Fuzzy" +msgstr "Oznacz jako &niepewne" + +msgid "Edit &comment" +msgstr "Edytuj &komentarz" + +msgid "Edit &Comment" +msgstr "Edytuj &komentarz" + +msgid "Suggestions" +msgstr "Podpowiedzi" + +msgid "&Show references" +msgstr "&Wyświetl odwołania" + +msgid "&Show References" +msgstr "&Wyświetl odwołania" + +msgid "&Find..." +msgstr "&Znajdź…" + +msgid "Replace..." +msgstr "Zamień…" + +msgid "Find next" +msgstr "Znajdź następne" + +msgid "Find previous" +msgstr "Znajdź poprzednie" + +msgid "Find and Replace..." +msgstr "Znajdź i zamień…" + +msgid "Find Next" +msgstr "Znajdź następne" + +msgid "Find Previous" +msgstr "Znajdź poprzednie" + +msgid "&Preferences" +msgstr "&Ustawienia" + +msgid "Display entry &IDs" +msgstr "Wyświetlaj &numery wierszy" + +msgid "Display Entry &IDs" +msgstr "Wyświetlaj &numery wierszy" + +msgid "Sort by &file order" +msgstr "Sortuj wg &nazw plików" + +msgid "Sort by &File Order" +msgstr "Sortuj wg &nazw plików" + +msgid "Sort by &source" +msgstr "Sortuj wg ź&ródła" + +msgid "Sort by &Source" +msgstr "Sortuj wg ź&ródła" + +msgid "Sort by &translation" +msgstr "Sortuj wg &tłumaczenia" + +msgid "Sort by &Translation" +msgstr "Sortuj wg &tłumaczenia" + +msgid "&Group by context" +msgstr "&Grupuj wg kontekstu" + +msgid "&Group By Context" +msgstr "&Grupuj wg kontekstu" + +msgid "Entries with errors first" +msgstr "Błędne na górze" + +msgid "Entries with Errors First" +msgstr "Błędne na górze" + +msgid "&Untranslated entries first" +msgstr "&Nieprzetłumaczone na górze" + +msgid "&Untranslated Entries First" +msgstr "&Nieprzetłumaczone na górze" + +msgid "Show sidebar" +msgstr "Pokaż pasek boczny" + +msgid "Show status bar" +msgstr "Pokaż pasek stanu" + +msgid "C&atalog" +msgstr "&Projekt" + +msgid "&Update from sources" +msgstr "&Aktualizuj ze źródeł" + +msgid "&Update from Sources" +msgstr "&Aktualizuj ze źródeł" + +msgid "Update from &POT file..." +msgstr "Akt&ualizuj z pliku .pot…" + +msgid "Update from &POT File..." +msgstr "Akt&ualizuj z pliku .pot…" + +msgid "Sync with Crowdin" +msgstr "Synchronizuj z Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Uzupełnij brakujące tłumaczenia z pamięci &tłumaczeniowej..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Uzupełnij brakujące tłumaczenia z pamięci &tłumaczeniowej..." + +msgid "&Purge deleted translations" +msgstr "&Wyczyść usunięte tłumaczenia" + +msgid "&Purge Deleted Translations" +msgstr "&Wyczyść usunięte tłumaczenia" + +msgid "&Validate translations" +msgstr "&Weryfikuj tłumaczenia" + +msgid "&Validate Translations" +msgstr "&Weryfikuj tłumaczenie" + +msgid "&Properties..." +msgstr "&Właściwości…" + +msgid "&Done and next" +msgstr "&Zakończ i przejdź do następnego" + +msgid "&Done and Next" +msgstr "&Wykonaj i następna" + +msgid "&Previous translation" +msgstr "&Poprzednie tłumaczenie" + +msgid "&Previous Translation" +msgstr "&Poprzednie tłumaczenie" + +msgid "&Next translation" +msgstr "&Następne tłumaczenie" + +msgid "&Next Translation" +msgstr "&Następne tłumaczenie" + +msgid "P&revious unfinished" +msgstr "Pop&rzednie nieukończone" + +msgid "P&revious Unfinished" +msgstr "Pop&rzednie nieukończone" + +msgid "Ne&xt unfinished" +msgstr "&Następne niedokończone" + +msgid "Ne&xt Unfinished" +msgstr "&Następne niedokończone" + +msgid "Previous plural form" +msgstr "Poprzednia forma zdania" + +msgid "Previous Plural Form" +msgstr "Poprzednie forma zdania" + +msgid "Next plural form" +msgstr "Następna forma zdania" + +msgid "Next Plural Form" +msgstr "Następna forma zdania" + +msgid "&Online help" +msgstr "Pomoc &online" + +msgid "&Online Help" +msgstr "Pomoc &online" + +msgid "&GNU gettext manual" +msgstr "Dokumentacja &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Dokumentacja &GNU gettext" + +msgid "&About Poedit" +msgstr "&Poedit - informacje" + +msgid "&About" +msgstr "&Poedit - informacje" + +msgid "Extractor setup" +msgstr "Ustawienia wyodrębniania" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista rozszerzeń rozdzielonych średnikami, np. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Wywołanie:" + +msgid "Command to extract translations:" +msgstr "Polecenie do wyodrębnienia tłumaczenia:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"To jest polecenie które uruchomi program do wyodrębniania.\n" +"%o zastępuje nazwę pliku wyjściowego,\n" +"%K - listę słów kluczowych, %F listę plików wejściowych\n" +"%C - flagę kodowania źródła (zobacz niżej)." + +msgid "An item in keywords list:" +msgstr "Element na liście słów kluczowych:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Zostanie to dołączone do wiersza poleceń dla każdego słowa kluczowego.\n" +"%k zostanie zastąpione słowem kluczowym." + +msgid "An item in input files list:" +msgstr "Element na liście plików wejściowych:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Zostanie to dołączone do wiersza poleceń dla każdego pliku wejściowego.\n" +"%f zostanie zastąpione nazwą pliku." + +msgid "Source code charset:" +msgstr "Kodowanie źródła:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Zostanie to dołączone do wiersza poleceń tylko, jeśli zostało podane " +"kodowanie\n" +"znaków źródła. %c zostanie zastąpione typem kodowania." + +msgid "Catalog properties" +msgstr "Właściwości pakietu" + +msgid "Project name and version:" +msgstr "Nazwa pakietu i wersja:" + +msgid "Plural Forms:" +msgstr "Formy liczby mnogiej:" + +msgid "Use default rules for this language" +msgstr "Użyj domyślnych reguł dla tego języka" + +msgid "Use custom expression" +msgstr "Użyj własnych wyrażeń" + +msgid "Learn about plural forms" +msgstr "Informacje o formach liczby mnogiej" + +msgid "Charset:" +msgstr "Kodowanie:" + +msgid "Team:" +msgstr "Zespół:" + +msgid "Team's email address:" +msgstr "Adres e-mail zespołu:" + +msgid "Translation properties" +msgstr "Właściwości tłumaczenia" + +msgid "Sources paths" +msgstr "Ścieżki źródeł" + +msgid "Extract text from source files in the following directories:" +msgstr "Wyodrębniaj tekst z plików źródłowych do następujących katalogów:" + +msgid "Base path:" +msgstr "Ścieżka podstawowa:" + +msgid "Sources keywords" +msgstr "Źródła słów kluczowych" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Do rozpoznania tekstów do tłumaczenia w plikach źródłowych użyj\n" +"poniższe słowa kluczowe (nazwy funkcji):" + +msgid "Learn about gettext keywords" +msgstr "Informacje o słowach kluczowych gettextu" + +msgid "Update summary" +msgstr "Podsumowanie aktualizacji" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Te teksty znajdują się w źródłach ale nie ma ich w pakiecie.\n" +"Zostaną teraz dodane do pakietu." + +msgid "New strings" +msgstr "Nowe teksty" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Tych tekstów nie ma już w źródłach.\n" +"Zostaną teraz usunięte z pakietu." + +msgid "Obsolete strings" +msgstr "Nieaktualne teksty" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nowych, 0 nieaktualnych)" + +msgid "Open" +msgstr "Otwórz" + +msgid "Save catalog" +msgstr "Zapisz pakiet" + +msgid "Validate" +msgstr "Weryfikuj" + +msgid "Check for errors in the translation" +msgstr "Sprawdza czy w tłumaczeniu występują błędy" + +msgid "Update" +msgstr "Aktualizuj" + +msgid "Update catalog - synchronize it with sources" +msgstr "Aktualizuj pakiet – zsynchronizuj go ze źródłami" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Zaznacz/odznacz jako niepewne" + +msgid "Show or hide the sidebar" +msgstr "Wyświetla lub ukrywa pasek boczny" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Poprzedni tekst źródłowy:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Poprzedni tekst źródłowy (zanim został zmieniony podczas aktualizacji) " +"któremu odpowiada to niepewne tłumaczenie." + +msgid "Notes for translators:" +msgstr "Informacje dla tłumaczy" + +msgid "Add comment" +msgstr "Dodaj komentarz" + +msgid "Add Comment" +msgstr "Dodaj komentarz" + +msgid "Translation suggestions:" +msgstr "Podpowiedzi do tłumaczenia:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nie znaleziono odpowiedników" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nie znaleziono odpowiedników" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ten tekst został znaleziony w pamięci tłumaczeniowej programu Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nowe: %i, nieaktualne: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importowanie tłumaczeń: %d" + +msgid "Poedit Update" +msgstr "Aktualizacja Poedit" + +msgid "Preparing migration..." +msgstr "Przygotowywanie migracji…" + +#, c-format +msgid "Migration exit status: %d" +msgstr "Status zakończenia migracji: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit musi dokonać konwersji pamięci tłumaczeniowej do nowego formatu." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Tę czynność należy wykonać przed uruchomieniem Poedita. Jeśli masz " +"zapisanych dużo tłumaczeń, może zająć to kilka minut, ale zazwyczaj trwa " +"krócej." + +msgid "Proceed" +msgstr "Przetwórz" + +msgid "Translation memory migration failed." +msgstr "Migracja pamięci tłumaczeniowej nie powiodło się." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Nie można dokonać migracji danych pamięci tłumaczeniowej. Wystąpił błąd:\n" +"\n" +"%s\n" +"Powiadom nas, wysyłając e-mail na adres help@poedit.net, a my spróbujemy to " +"naprawić." + +msgid "Cannot create temporary directory." +msgstr "Nie można utworzyć katalogu tymczasowego!" + +msgid "Welcome to Poedit" +msgstr "Witamy w Poedit" + +msgid "Edit a translation" +msgstr "Edytuj tłumaczenie" + +msgid "Open an existing PO file and edit the translation." +msgstr "Otwórz istniejący plik .po i edytuj tłumaczenie." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Użyj istniejącego pliku .po lub szablonu .pot i utwórz z niego nowe " +"tłumaczenie." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Współpracuj nad tłumaczeniami z Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Pobiera plik z wybranego projektu Crowdin, pozwala przetłumaczyć i " +"zsynchronizować zmiany." + +msgid "What is Crowdin?" +msgstr "Czym jest Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Nie ma tłumaczeń. To się rzadko zdarza." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"W systemie Gettext elementy do tłumaczenia nie są dodawane ręcznie, ale są " +"automatycznie\n" +"wyodrębniane z kodu źródłowego. Dzięki temu są zawsze aktualne i dokładne.\n" +"Tłumacze zazwyczaj używają szablonów plików PO (POT) przygotowanych dla nich " +"przez autora." + +msgid "(Learn more about GNU gettext)" +msgstr "(Dowiedz się więcej o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Najprostszym sposobem wypełnienia tego pakietu jest zaktualizowanie go z " +"pliku .pot:" + +msgid "Update from POT" +msgstr "Aktualizuj z pliku .pot…" + +msgid "Take translatable strings from an existing POT template." +msgstr "Użyj tekstów z istniejącego szablonu POT." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Możesz także wyodrębnić elementy do tłumaczenia bezpośrednio z kodu " +"źródłowego:" + +msgid "Extract from sources" +msgstr "Wyodrębnij ze źródeł" + +msgid "Configure source code extraction in Properties." +msgstr "Konfiguruj kod źródłowy wyodrębniania we właściwościach." + +msgid "Sync" +msgstr "Synchronizuj" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchronizuje tłumaczenie z platformą Crowdwin" diff --git a/locales/poedit.pot b/locales/poedit.pot new file mode 100644 index 0000000..2c2828c --- /dev/null +++ b/locales/poedit.pot @@ -0,0 +1,1841 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Poedit package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Poedit 1.8.8\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +msgid "Hide this notification message" +msgstr "" + +msgid "Don't Show Again" +msgstr "" + +msgid "Don't show again" +msgstr "" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" + +#, c-format +msgid "Couldn't save file %s." +msgstr "" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "" + +msgid "PO Translation Files" +msgstr "" + +msgid "POT Translation Templates" +msgstr "" + +msgid "All Translation Files" +msgstr "" + +msgid "Merging differences..." +msgstr "" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "" + +msgid "(Use default language)" +msgstr "" + +msgid "Select your preferred language" +msgstr "" + +msgid "Language selection" +msgstr "" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" + +msgid "Downloading translations is disabled in this project." +msgstr "" + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid "Sign Out" +msgstr "" + +msgid "Sign out" +msgstr "" + +msgid "Waiting for authentication…" +msgstr "" + +msgid "Updating user information…" +msgstr "" + +msgid "Signed in as:" +msgstr "" + +msgid "Learn More About Crowdin" +msgstr "" + +msgid "Learn more about Crowdin" +msgstr "" + +msgid "Sign in to Crowdin" +msgstr "" + +msgid "Open Crowdin translation" +msgstr "" + +msgid "Project:" +msgstr "" + +msgid "Language:" +msgstr "" + +msgid "File:" +msgstr "" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "" + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "" + +msgid "Learn more" +msgstr "" + +msgid "Learn More" +msgstr "" + +#, c-format +msgid "Failed command: %s" +msgstr "" + +msgid "Failed to merge gettext catalogs." +msgstr "" + +msgid "Scanning files..." +msgstr "" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "" + +msgid "Failed to load extracted catalog." +msgstr "" + +msgid "&Help" +msgstr "" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "" + +msgid "Catalogs Manager" +msgstr "" + +msgid "Check for Updates..." +msgstr "" + +msgid "&Edit" +msgstr "" + +msgid "Undo" +msgstr "" + +msgid "Redo" +msgstr "" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Spelling and Grammar" +msgstr "" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "" + +msgid "Transformations" +msgstr "" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "" + +msgid "Start Speaking" +msgstr "" + +msgid "Stop Speaking" +msgstr "" + +msgid "&View" +msgstr "" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "" + +msgid "Minimize" +msgstr "" + +msgid "Zoom" +msgstr "" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "" + +msgid "The file cannot be opened." +msgstr "" + +msgid "Invalid file" +msgstr "" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "" + +msgid "&Redo" +msgstr "" + +msgid "Cu&t" +msgstr "" + +msgid "Cut" +msgstr "" + +msgid "Copy" +msgstr "" + +msgid "&Paste" +msgstr "" + +msgid "Paste" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Select &All" +msgstr "" + +msgid "Select All" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "" + +msgid "Poedit" +msgstr "" + +msgid "&File" +msgstr "" + +msgid "&Go" +msgstr "" + +msgid "Source text:" +msgstr "" + +msgid "Singular:" +msgstr "" + +msgid "Plural:" +msgstr "" + +msgid "Translation:" +msgstr "" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "" + +msgid "Save changes" +msgstr "" + +msgid "Your changes will be lost if you don't save them." +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Don't save" +msgstr "" + +msgid "Don't Save" +msgstr "" + +msgid "Save as..." +msgstr "" + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "" + +msgid "HTML Files" +msgstr "" + +msgid "Open catalog template" +msgstr "" + +msgid "Updating catalog" +msgstr "" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" + +msgid "Validation results" +msgstr "" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "" + +msgid "Context:" +msgstr "" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "" + +msgid "Set language" +msgstr "" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "" + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr "" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Purge" +msgstr "" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" + +msgid "Copy from source text" +msgstr "" + +msgid "Copy from Source Text" +msgstr "" + +msgid "Clear translation" +msgstr "" + +msgid "Clear Translation" +msgstr "" + +msgid "Edit comment" +msgstr "" + +msgid "Edit Comment" +msgstr "" + +msgid "References:" +msgstr "" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "&Bookmarks" +msgstr "" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "" + +msgid "Translation" +msgstr "" + +msgid "ID" +msgstr "" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "" + +#, c-format +msgid "Translation — %s" +msgstr "" + +msgid "Error:" +msgstr "" + +msgid "Source file" +msgstr "" + +msgid "Source file occurrence:" +msgstr "" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "" + +msgid "Find" +msgstr "" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "" + +msgid "Catalog" +msgstr "" + +msgid "Total" +msgstr "" + +msgid "Untrans" +msgstr "" + +msgid "Fuzzy" +msgstr "" + +msgid "Bad Tokens" +msgstr "" + +msgid "Last modified" +msgstr "" + +msgid "Select directory" +msgstr "" + +msgid "Directories:" +msgstr "" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "" + +msgid "Confirmation" +msgstr "" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" + +msgid "Appearance" +msgstr "" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "" + +msgid "Windows" +msgstr "" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "C&lear" +msgstr "" + +msgid "Clear the comment" +msgstr "" + +msgid "Create new translations project" +msgstr "" + +msgid "Edit the project" +msgstr "" + +msgid "Delete the project" +msgstr "" + +msgid "Update all" +msgstr "" + +msgid "Update all catalogs in the project" +msgstr "" + +msgid "Edit project" +msgstr "" + +msgid "Project name:" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Add directory to the list" +msgstr "" + +msgid "&New..." +msgstr "" + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "" + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "" + +msgid "&Save" +msgstr "" + +msgid "Save &as..." +msgstr "" + +msgid "Save &As..." +msgstr "" + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "" + +msgid "Catalogs &manager" +msgstr "" + +msgid "Catalogs &Manager" +msgstr "" + +msgid "E&xit" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "" + +msgid "Translation Is &Fuzzy" +msgstr "" + +msgid "Edit &comment" +msgstr "" + +msgid "Edit &Comment" +msgstr "" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "" + +msgid "&Show References" +msgstr "" + +msgid "&Find..." +msgstr "" + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "" + +msgid "Find previous" +msgstr "" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "" + +msgid "Find Previous" +msgstr "" + +msgid "&Preferences" +msgstr "" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "" + +msgid "Sort by &File Order" +msgstr "" + +msgid "Sort by &source" +msgstr "" + +msgid "Sort by &Source" +msgstr "" + +msgid "Sort by &translation" +msgstr "" + +msgid "Sort by &Translation" +msgstr "" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "" + +msgid "&Untranslated Entries First" +msgstr "" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "" + +msgid "&Update from sources" +msgstr "" + +msgid "&Update from Sources" +msgstr "" + +msgid "Update from &POT file..." +msgstr "" + +msgid "Update from &POT File..." +msgstr "" + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "" + +msgid "&Purge Deleted Translations" +msgstr "" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "" + +msgid "&Done and next" +msgstr "" + +msgid "&Done and Next" +msgstr "" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "" + +msgid "P&revious Unfinished" +msgstr "" + +msgid "Ne&xt unfinished" +msgstr "" + +msgid "Ne&xt Unfinished" +msgstr "" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "" + +msgid "&Online Help" +msgstr "" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "" + +msgid "&About" +msgstr "" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" + +msgid "Invocation:" +msgstr "" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" + +msgid "An item in input files list:" +msgstr "" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" + +msgid "Source code charset:" +msgstr "" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" + +msgid "Catalog properties" +msgstr "" + +msgid "Project name and version:" +msgstr "" + +msgid "Plural Forms:" +msgstr "" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "" + +msgid "Team:" +msgstr "" + +msgid "Team's email address:" +msgstr "" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "" + +msgid "Extract text from source files in the following directories:" +msgstr "" + +msgid "Base path:" +msgstr "" + +msgid "Sources keywords" +msgstr "" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" + +msgid "New strings" +msgstr "" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" + +msgid "Obsolete strings" +msgstr "" + +msgid "(0 new, 0 obsolete)" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save catalog" +msgstr "" + +msgid "Validate" +msgstr "" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Update catalog - synchronize it with sources" +msgstr "" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "" + +msgid "Welcome to Poedit" +msgstr "" + +msgid "Edit a translation" +msgstr "" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/pt_BR.mo b/locales/pt_BR.mo new file mode 100644 index 0000000000000000000000000000000000000000..030a14c00deb9d038fd7d8c845ff6046fa95f4c2 GIT binary patch literal 46767 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 bxx%V5S_=xWJNuGG*2+)kGK;zw2A}*tjH3hi literal 0 HcmV?d00001 diff --git a/locales/pt_BR.po b/locales/pt_BR.po new file mode 100644 index 0000000..e5b24a0 --- /dev/null +++ b/locales/pt_BR.po @@ -0,0 +1,1965 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Portuguese, Brazilian\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ocultar esta notificação" + +msgid "Don't Show Again" +msgstr "Não exibir novamente" + +msgid "Don't show again" +msgstr "Não exibir novamente" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "A linha %i do arquivo '%s' não foi carregada corretamente." +msgstr[1] "As linhas %i do arquivo '%s' não foram carregadas corretamente." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Linha %d do arquivo '%s' está corrompida (dados %s inválidos)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Cabeçalho malformado: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Problemas no arquivo de catálogo: a forma singular de msgst foi usada com a " +"marca msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Problemas no arquivo de catálogo: a forma plural de msgst foi usada sem a " +"marca msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Erros ao carregar o catálogo. Alguns dados podem estar ausentes ou inválidos." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Erro carregando o arquivo '%s, provavelmente ele está corrompido." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"O arquivo '%s' é somente leitura e não pode ser salvo.\n" +"Salve-o com outro nome." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Não foi possível salvar arquivo %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Houve um problema ao formatar o arquivo (mas ele foi salvo corretamente)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"O catálogo não pôde ser salvo na tabela de caracteres '%s' como especificado " +"nas configurações do catálogo.\n" +"\n" +"Ele foi salvo em UTF-8 e a configuração foi devidamente alterada." + +msgid "Error saving catalog" +msgstr "Erro ao salvar catálogo" + +msgid "PO Translation Files" +msgstr "Arquivos de Tradução PO" + +msgid "POT Translation Templates" +msgstr "Modelos de Tradução POT" + +msgid "All Translation Files" +msgstr "Todos os Arquivos de Tradução" + +msgid "Merging differences..." +msgstr "Mesclando diferenças..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' não é um arquivo POT válido." + +msgid "(Use default language)" +msgstr "(Usar idioma padrão)" + +msgid "Select your preferred language" +msgstr "Selecione o idioma preferido" + +msgid "Language selection" +msgstr "Selecionar idioma" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Você deve reiniciar o Poedit para validar as alterações." + +msgid "Downloading translations is disabled in this project." +msgstr "A transferência de traduções está desativada neste projeto." + +msgid "Not authorized, please sign in again." +msgstr "Não autorizado. Inicie a sessão novamente." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"O Crowdin é uma plataforma de gerenciamento de localizações online e " +"ferramenta de tradução colaborativa. O Poedit pode sincronizar uniformemente " +"arquivos PO gerenciados no Crowdin." + +msgid "Sign In" +msgstr "Iniciar Sessão" + +msgid "Sign in" +msgstr "Ingressar" + +msgid "Sign Out" +msgstr "Encerrar Sessão" + +msgid "Sign out" +msgstr "Encerrar sessão" + +msgid "Waiting for authentication…" +msgstr "Aguardando autenticação…" + +msgid "Updating user information…" +msgstr "Atualizando informações do usuário…" + +msgid "Signed in as:" +msgstr "Sessão iniciada como:" + +msgid "Learn More About Crowdin" +msgstr "Saiba mais sobre o Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Saiba mais sobre o Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Ingressar ao Crowdin" + +msgid "Open Crowdin translation" +msgstr "Abrir tradução do Crowdin" + +msgid "Project:" +msgstr "Projeto:" + +msgid "Language:" +msgstr "Idioma:" + +msgid "File:" +msgstr "Arquivo:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Não existem projetos de tradução associados à sua conta Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Este projeto não tem arquivos que possam ser traduzidos no Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Este arquivo pode ser editado apenas na interface web do Crowdin." + +msgid "Downloading latest translations…" +msgstr "Transferindo as traduções mais recentes…" + +msgid "Syncing with Crowdin" +msgstr "Sincronizando com o Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "A sincronização com o Crowdin falhou." + +msgid "Crowdin error" +msgstr "Erro do Crowdin" + +msgid "Uploading translations…" +msgstr "Enviando traduções…" + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Saiba mais" + +msgid "Learn More" +msgstr "Saiba Mais" + +#, c-format +msgid "Failed command: %s" +msgstr "O comando falhou: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Falha ao mesclar catálogos do gettext." + +msgid "Scanning files..." +msgstr "Verificando arquivos..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analisando arquivos %s..." + +msgid "Failed to load extracted catalog." +msgstr "Falha ao carregar o catálogo extraído." + +msgid "&Help" +msgstr "A&juda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Arquivos MO não podem ser editados diretamente no Poedit." + +msgid "Error opening file" +msgstr "Erro ao abrir arquivo" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Abra e edite o arquivo PO correspondente em vez disso. Quando você salvá-lo, " +"o arquivo MO será atualizado também." + +msgid "don't delete temporary files (for debugging)" +msgstr "não apagar arquivos temporários (para depuração)" + +msgid "handle a poedit:// URI" +msgstr "lidar com uma URI do poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Falha de comunicação com o processo do Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ocorreu uma exceção não manipulada: %s" + +msgid "Unhandled exception occurred." +msgstr "Ocorreu uma exceção não manipulada." + +msgid "Open catalog" +msgstr "Abrir catálogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "O arquivo '%s' não existe." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Sobre o %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versão %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Serviços" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ocultar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ocultar Outros" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mostrar Tudo" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Encerrar o %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "O Poedit é um editor de traduções fácil de usar." + +msgid "Catalogs Manager" +msgstr "Gerenciador de Catálogos" + +msgid "Check for Updates..." +msgstr "Verificar Atualizações..." + +msgid "&Edit" +msgstr "&Editar" + +msgid "Undo" +msgstr "Desfazer" + +msgid "Redo" +msgstr "Refazer" + +msgid "Paste and Match Style" +msgstr "Colar e Combinar Estilo" + +msgid "Delete" +msgstr "Excluir" + +msgid "Spelling and Grammar" +msgstr "Ortografia e Gramática" + +msgid "Show Spelling and Grammar" +msgstr "Mostrar Ortografia e Gramática" + +msgid "Check Document Now" +msgstr "Verificar Documento Agora" + +msgid "Check Spelling While Typing" +msgstr "Verificar Ortografia ao Digitar" + +msgid "Check Grammar With Spelling" +msgstr "Verificar Gramática e Ortografia" + +msgid "Correct Spelling Automatically" +msgstr "Corrigir Ortografia Automaticamente" + +msgid "Substitutions" +msgstr "Substituições" + +msgid "Show Substitutions" +msgstr "Mostrar Substituições" + +msgid "Smart Copy/Paste" +msgstr "Copiar/Colar Inteligente" + +msgid "Smart Quotes" +msgstr "Aspas Inteligentes" + +msgid "Smart Dashes" +msgstr "Hífens Inteligentes" + +msgid "Smart Links" +msgstr "Links Inteligentes" + +msgid "Text Replacement" +msgstr "Substituição de Texto" + +msgid "Transformations" +msgstr "Transformações" + +msgid "Make Upper Case" +msgstr "Converter em Maiúsculas" + +msgid "Make Lower Case" +msgstr "Converter em minúsculas" + +msgid "Capitalize" +msgstr "Letras Iniciais em Maiúsculas" + +msgid "Speech" +msgstr "Fala" + +msgid "Start Speaking" +msgstr "Começar a Falar" + +msgid "Stop Speaking" +msgstr "Parar de Falar" + +msgid "&View" +msgstr "E&xibir" + +msgid "Enter Full Screen" +msgstr "Entrar em tela cheia" + +msgid "Window" +msgstr "Janela" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Ampliar/Reduzir" + +msgid "Bring All to Front" +msgstr "Trazer Tudo pra Frente" + +msgid "PO Translation" +msgstr "Tradução PO" + +msgid "The file cannot be opened." +msgstr "O arquivo não pôde ser aberto." + +msgid "Invalid file" +msgstr "Arquivo inválido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"O arquivo pode estar corrompido ou em um formato não reconhecido pelo Poedit." + +msgid "&Undo" +msgstr "&Desfazer" + +msgid "&Redo" +msgstr "&Refazer" + +msgid "Cu&t" +msgstr "Recor&tar" + +msgid "Cut" +msgstr "Recortar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "Co&lar" + +msgid "Paste" +msgstr "Colar" + +msgid "&Delete" +msgstr "Apa&gar" + +msgid "Select &All" +msgstr "Selecionar &Tudo" + +msgid "Select All" +msgstr "Selecionar Tudo" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Para Cima" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Para Baixo" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Você não pode soltar mais do que um arquivo na janela do Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "O arquivo '%s' não é um catálogo de mensagens." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Arquivo" + +msgid "&Go" +msgstr "&Ir" + +msgid "Source text:" +msgstr "Texto de origem:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Tradução:" + +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 "" +"Arquivos POT são apenas modelos e não contêm quaisquer traduções.\n" +"Para fazer uma tradução, crie um novo arquivo PO com base no modelo." + +msgid "Create New Translation" +msgstr "Criar Nova Tradução" + +msgid "Create new translation" +msgstr "Criar nova tradução" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"A verificação ortográfica está desativada, porque o dicionário para %s não " +"está instalado." + +msgid "Install" +msgstr "Instalar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catálogo modificado. Você deseja salvar as alterações?" + +msgid "Save changes" +msgstr "Salvar alterações" + +msgid "Your changes will be lost if you don't save them." +msgstr "Suas alterações serão perdidas se você não salvá-las." + +msgid "Save" +msgstr "Salvar" + +msgid "Don't save" +msgstr "Não salvar" + +msgid "Don't Save" +msgstr "Não Salvar" + +msgid "Save as..." +msgstr "Salvar como..." + +msgid "Compile to..." +msgstr "Compilar para..." + +msgid "Compiled Translation Files" +msgstr "Arquivos de tradução compilados" + +msgid "Export as..." +msgstr "Exportar como..." + +msgid "HTML Files" +msgstr "Arquivos HTML" + +msgid "Open catalog template" +msgstr "Abrir modelo de catálogo" + +msgid "Updating catalog" +msgstr "Atualizando catálogo" + +msgid "Source code not available." +msgstr "Código-fonte não disponível." + +msgid "Updating failed" +msgstr "Falha na atualização" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"As traduções não puderam ser atualizadas do código-fonte, pois o código não " +"foi encontrado no local especificado nas propriedades do catálogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "As entradas no catálogo provavelmente estão incorretas." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"A atualização do catálogo falhou. Clique em 'Detalhes >>' para mais " +"informações." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problema encontrado na tradução." +msgstr[1] "%d problemas encontrados na tradução." + +msgid "Validation results" +msgstr "Resultados da validação" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"As entradas com erros foram marcadas em vermelho na lista. Detalhes do erro " +"serão exibidos quando você selecionar uma entrada." + +msgid "The file was saved safely." +msgstr "O arquivo foi salvo com segurança." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"O arquivo foi salvo com segurança e compilado no formato MO, mas " +"provavelmente não funcionará corretamente." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"O arquivo foi salvo com segurança, mas não pode ser compilado no formato MO " +"e usado." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"O arquivo foi compilado no formato MO, mas ele provavelmente não vai " +"funcionar corretamente." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "O arquivo não pode ser compilado para o formato MO e usado." + +msgid "No problems with the translation found." +msgstr "Não foram encontrados problemas na tradução." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"A tradução está pronta para ser usada, mas %d entrada ainda não foi " +"traduzida." +msgstr[1] "" +"A tradução está pronta para ser usada, mas %d entradas ainda não foram " +"traduzidas." + +msgid "The translation is ready for use." +msgstr "A tradução pronta para ser usada." + +msgid "Context:" +msgstr "Contexto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "PoEdit corrigiu automaticamente o conteúdo inválido no arquivo \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"O arquivo continha itens duplicados, o que não é permitido em arquivos PO e " +"isso impediria o arquivo de ser usado. O PoEdit corrigiu o problema, mas " +"você deve revisar as traduções de todos os itens marcados como difusos e " +"corrigi-los se necessário." + +msgid "Language of the translation isn't set." +msgstr "O idioma da tradução não está definido." + +msgid "Set Language" +msgstr "Definir Idioma" + +msgid "Set language" +msgstr "Definir idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"As sugestões não estarão disponíveis se o idioma da tradução não estiver " +"definido corretamente. Outros recursos, como formas de plural, também podem " +"ser afetados." + +msgid "Language of the translation is the same as source language." +msgstr "O idioma da tradução é o mesmo do idioma de origem." + +msgid "Fix Language" +msgstr "Corrigir Idioma" + +msgid "Fix language" +msgstr "Corrigir idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Este catálogo tem entradas com formas no plural, mas não tem o cabeçalho das " +"Formas-Plural configurado." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"As entradas neste catálogo tem contagens de formas de plural diferentes das " +"formas de plural que o cabeçalho do catálogo diz" + +msgid "Required header Plural-Forms is missing." +msgstr "O cabeçalho exigido Formas-Plural está ausente." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Erro de sintaxe no cabeçalho Formas-Plural (\"%s\")." + +msgid "Fix the Header" +msgstr "Corrigir o cabeçalho" + +msgid "Fix the header" +msgstr "Corrigir cabeçalho" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "A expressão usada de formas de plural pelo catálogo é incomum para %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Revisar" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Erro ao carregar o arquivo do catálogo de mensagens '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduzido: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Restante: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d erro" +msgstr[1] "%d erros" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entradas" + +msgid " (unsaved)" +msgstr " (não salvo)" + +msgid " (modified)" +msgstr " (modificado)" + +msgid "Go" +msgstr "Ir" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Falha ao atualizar a memória de traduções: %s" + +msgid "Purge deleted translations" +msgstr "Remover traduções excluídas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Você deseja remover todas as traduções que não são mais usadas?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Se você continuar com a remoção, todas as traduções marcadas como apagadas " +"serão removidas permanentemente. Você terá que traduzi-las novamente se elas " +"forem readicionadas no futuro." + +msgid "Keep" +msgstr "Manter" + +msgid "Purge" +msgstr "Remover" + +msgid "Fill missing translations from TM" +msgstr "Preencher traduções ausentes da MT" + +msgid "Only fill in exact matches" +msgstr "Preencher apenas as ocorrências exatas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Por padrão, resultados imprecisos são preenchidos também e marcados como " +"incerto. Marque esta opção para incluir apenas correspondências exatas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Não marcar correspondências exatas como incertas" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Apenas ative se você confia na qualidade da sua MT. Por padrão, todas as " +"correspondências da MT são marcadas como incertas e devem ser revisadas." + +msgid "Fill" +msgstr "Preencher" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrada foi preenchida pela memória de tradução." +msgstr[1] "%d entradas foram preenchidas pela memória de tradução." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"As traduções foram marcadas como incertas, porque elas podem estar " +"imprecisas. Você deve revisá-las para correção." + +msgid "No entries could be filled from the translation memory." +msgstr "Nenhuma entrada pôde ser preenchida pela memória de tradução." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"A MT não contém nenhuma sentença similar ao conteúdo deste arquivo. Ela é " +"efetiva apenas para traduções semi-automáticas após o Poedit aprender o " +"bastante dos arquivos traduzidos manualmente." + +msgid "Translating" +msgstr "Traduzindo" + +msgid "Filling missing translations from TM..." +msgstr "Preenchendo as traduções que faltam da MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u string traduzida" +msgstr[1] "%u strings traduzidas" + +msgid "Copy from source text" +msgstr "Copiar do texto de origem" + +msgid "Copy from Source Text" +msgstr "Copiar do texto de origem" + +msgid "Clear translation" +msgstr "Limpar tradução" + +msgid "Clear Translation" +msgstr "Limpar Tradução" + +msgid "Edit comment" +msgstr "Editar comentário" + +msgid "Edit Comment" +msgstr "Editar Comentário" + +msgid "References:" +msgstr "Referências:" + +msgid "Everything" +msgstr "Tudo" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Um" + +msgid "Two" +msgstr "Dois" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Outro" + +msgid "&Bookmarks" +msgstr "&Marcadores" + +#, c-format +msgid "Set bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ir para marcador %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ir para marcador %i" + +msgid "Hide Sidebar" +msgstr "Ocultar barra lateral" + +msgid "Show Sidebar" +msgstr "Exibir barra lateral" + +msgid "Hide Status Bar" +msgstr "Ocultar Barra de Status" + +msgid "Show Status Bar" +msgstr "Mostrar Barra de Status" + +msgid "Source text" +msgstr "Texto fonte" + +msgid "Translation" +msgstr "Tradução" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Texto de origem — %s" + +msgid "unknown language" +msgstr "idioma desconhecido" + +#, c-format +msgid "Translation — %s" +msgstr "Tradução — %s" + +msgid "Error:" +msgstr "Erro:" + +msgid "Source file" +msgstr "Arquivo de origem" + +msgid "Source file occurrence:" +msgstr "Ocorrência do arquivo de origem:" + +msgid "Open in Editor" +msgstr "Abrir no editor" + +msgid "Open in editor" +msgstr "Abrir no editor" + +msgid "No references for the selected item." +msgstr "Não existem referências para o item selecionado." + +#, c-format +msgid "Error opening file %s!" +msgstr "Erro ao abrir o arquivo %s!" + +msgid "Find" +msgstr "Localizar" + +msgid "Replace" +msgstr "Substituir" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opções" + +msgid "Ignore case" +msgstr "Ignorar maiúsculas e minúsculas" + +msgid "Wrap around" +msgstr "Pesquisa circular" + +msgid "Whole words only" +msgstr "Somente palavras inteiras" + +msgid "Find in source texts" +msgstr "Localizar nos textos fonte" + +msgid "Find in translations" +msgstr "Localizar nas traduções" + +msgid "Find in comments" +msgstr "Localizar nos comentários" + +msgid "Close" +msgstr "Fechar" + +msgid "Replace All" +msgstr "Substituir Tudo" + +msgid "Replace all" +msgstr "Substituir tudo" + +msgid "< &Previous" +msgstr "< An&terior" + +msgid "&Next >" +msgstr "Segui&nte >" + +msgid "String to find" +msgstr "String para localizar" + +msgid "Replacement string" +msgstr "String de substituição" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Não foi possível executar programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Código ou Nome do Idioma (ex.: pt_BR)" + +msgid "Translation Language" +msgstr "Idioma da Tradução" + +msgid "Language of the translation:" +msgstr "Idioma da tradução:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gerenciador de catálogos" + +msgid "Catalog" +msgstr "Catálogo" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Não Traduzido" + +msgid "Fuzzy" +msgstr "Incerta" + +msgid "Bad Tokens" +msgstr "Símbolos inválidos" + +msgid "Last modified" +msgstr "Última modificação" + +msgid "Select directory" +msgstr "Selecionar diretório" + +msgid "Directories:" +msgstr "Diretórios:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Você deseja realmente excluir o projeto?" + +msgid "Confirmation" +msgstr "Confirmação" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Você deseja realmente realizar uma atualização em\n" +"massa de todos os catálogos desse projeto?" + +msgid "Information about the translator" +msgstr "Informações sobre o tradutor" + +msgid "Name:" +msgstr "Nome:" + +msgid "Your Name" +msgstr "Seu nome" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "seu_email@exemplo.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Seu nome e endereço de e-mail são usados apenas para definir o cabeçalho do " +"último tradutor de arquivos do GNU gettext." + +msgid "Editing" +msgstr "Editando" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar automaticamente o arquivo MO ao salvar" + +msgid "Show summary after catalog update" +msgstr "Mostrar sumário após a atualização do catálogo" + +msgid "Check spelling" +msgstr "Verificar ortografia" + +msgid "Always change focus to text input field" +msgstr "Sempre mudar o foco para o campo de entrada de texto" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nunca deixe a lista de strings tirar o foco. Se ativado, você deve usar Ctrl-" +"setas de navegação do teclado, mas você também pode digitar o texto " +"imediatamente, sem ter que pressionar Tab para mudar o foco." + +msgid "Appearance" +msgstr "Aparência" + +msgid "Use custom list font:" +msgstr "Fonte personalizada da lista:" + +msgid "Use custom text fields font:" +msgstr "Fonte personalizada dos campos de texto:" + +msgid "Change UI language" +msgstr "Selecionar idioma da interface" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(requer Windows 8 ou mais recente)" + +msgid "General" +msgstr "Geral" + +msgid "Use translation memory" +msgstr "Usar memória de traduções" + +msgid "Learn From Files..." +msgstr "Aprender dos Arquivos..." + +msgid "Learn from files..." +msgstr "Aprender dos arquivos..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Redefinir" + +msgid "Consult TM when updating from sources" +msgstr "Consultar a MT ao atualizar das fontes" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Se ativado, o Poedit tentará preencher as novas entradas usando suas " +"traduções\n" +"anteriores armazenadas na memória de traduções. Se\n" +"a MT estiver quase vazia, ela não será muito efetiva. Quanto\n" +"mais traduções você editar e mais a MT crescer, melhor será." + +msgid "Stored translations:" +msgstr "Traduções armazenadas:" + +msgid "Database size on disk:" +msgstr "Tamanho do banco de dados:" + +msgid "Select translation files to import" +msgstr "Selecione os arquivos de tradução para importar" + +msgid "Translation Memory" +msgstr "Memória de Traduções" + +msgid "Importing translations..." +msgstr "Importando traduções..." + +msgid "Finalizing..." +msgstr "Finalizando..." + +msgid "Reset translation memory" +msgstr "Redefinir memória de tradução" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Você tem certeza de que deseja redefinir a memória de tradução?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Ao redefinir a memória de tradução, todas as traduções armazenadas serão " +"removidas. Esta operação não pode ser desfeita." + +msgid "Cancel" +msgstr "Cancelar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Extractores de código fonte são usados para encontrar strings de tradução " +"nos arquivos fonte e extraí-los para que eles possam ser traduzidos." + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Editar" + +msgid "Delete extractor" +msgstr "Excluir extrator" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Você tem certeza que deseja apagar o extrator \"%s\"?" + +msgid "Extractors" +msgstr "Extratores" + +msgid "Accounts" +msgstr "Contas" + +msgid "Automatically check for updates" +msgstr "Verificar atualizações automaticamente" + +msgid "Include beta versions" +msgstr "Incluir versões beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Versões beta contém as últimas novidades e melhorias, mas podem ser menos " +"estáveis." + +msgid "Updates" +msgstr "Atualizações" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Essas configurações afetam a formatação interna de arquivos PO. Ajuste-os se " +"você tiver requisitos específicos, por exemplo, devido ao controle de versão." + +msgid "Line endings:" +msgstr "Terminações de linha:" + +msgid "Unix (recommended)" +msgstr "Unix (recomendado)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Envolva-se em:" + +msgid "Preserve formatting of existing files" +msgstr "Preservar a formatação de arquivos existentes" + +msgid "Advanced" +msgstr "Avançado" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferências do %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arraste e solte pastas aqui \n" +"\n" +"ou use o botão +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arraste e solte pastas aqui \n" +"\n" +"ou use o botão +" + +msgid "Add Folders..." +msgstr "Adicionar Pastas..." + +msgid "Add folders..." +msgstr "Adicionar pastas..." + +msgid "Add Files..." +msgstr "Adicionar Arquivos..." + +msgid "Add files..." +msgstr "Adicionar arquivos..." + +msgid "Add Wildcard..." +msgstr "Adicionar Caractere Especial..." + +msgid "Add wildcard..." +msgstr "Adicionar caractere especial..." + +msgid "Paths" +msgstr "Caminhos" + +msgid "Excluded paths" +msgstr "Caminhos excluídos" + +msgid "Additional keywords" +msgstr "Palavras-chave adicionais" + +msgid "Name of the project the translation is for" +msgstr "Nome do projeto que destina-se a tradução" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "ex.: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomendado)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Salve o arquivo primeiro. Esta seção não pode ser editada até então." + +msgid "Comment:" +msgstr "Comentários:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Limpar" + +msgid "Clear the comment" +msgstr "Limpar o comentário" + +msgid "Create new translations project" +msgstr "Criar novo projeto de tradução" + +msgid "Edit the project" +msgstr "Editar o projeto" + +msgid "Delete the project" +msgstr "Excluir o projeto" + +msgid "Update all" +msgstr "Atualizar tudo" + +msgid "Update all catalogs in the project" +msgstr "Atualizar todos os catálogos no projeto" + +msgid "Edit project" +msgstr "Editar projeto" + +msgid "Project name:" +msgstr "Nome do projeto:" + +msgid "Browse" +msgstr "Procurar" + +msgid "Add directory to the list" +msgstr "Adicionar diretório à lista" + +msgid "&New..." +msgstr "&Novo..." + +msgid "New from &POT/PO file..." +msgstr "Novo do arquivo &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Novo do Arquivo &POT/PO..." + +msgid "&Open..." +msgstr "A&brir..." + +msgid "Open Recent" +msgstr "Abrir Recentes" + +msgid "Open from Crowdin..." +msgstr "Abrir do Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Abrir do Crowdin..." + +msgid "&Close" +msgstr "Fe&char" + +msgid "&Save" +msgstr "&Salvar" + +msgid "Save &as..." +msgstr "Salvar &como..." + +msgid "Save &As..." +msgstr "Salvar &Como..." + +msgid "Compile to MO..." +msgstr "Compilar para MO..." + +msgid "E&xport as HTML..." +msgstr "E&xportar como HTML..." + +msgid "Check for updates..." +msgstr "Verificar atualizações..." + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Catalogs &manager" +msgstr "&Gerenciador de catálogos" + +msgid "Catalogs &Manager" +msgstr "&Gerenciador de Catálogos" + +msgid "E&xit" +msgstr "Sa&ir" + +msgid "Quit" +msgstr "Encerrar" + +msgid "Copy from singular" +msgstr "Copiar do singular" + +msgid "Copy From Singular" +msgstr "Copiar do Singular" + +msgid "Translation is &fuzzy" +msgstr "A tradução está &imprecisa" + +msgid "Translation Is &Fuzzy" +msgstr "A Tradução Está &Imprecisa" + +msgid "Edit &comment" +msgstr "Editar &comentário" + +msgid "Edit &Comment" +msgstr "Editar &Comentário" + +msgid "Suggestions" +msgstr "Sugestões" + +msgid "&Show references" +msgstr "Mo&strar referências" + +msgid "&Show References" +msgstr "&Mostrar Referências" + +msgid "&Find..." +msgstr "&Localizar..." + +msgid "Replace..." +msgstr "Substituir..." + +msgid "Find next" +msgstr "Localizar próximo" + +msgid "Find previous" +msgstr "Localizar anterior" + +msgid "Find and Replace..." +msgstr "Localizar e Substituir..." + +msgid "Find Next" +msgstr "Localizar Próximo" + +msgid "Find Previous" +msgstr "Localizar Anterior" + +msgid "&Preferences" +msgstr "&Preferências" + +msgid "Display entry &IDs" +msgstr "Exibir &IDs de entrada" + +msgid "Display Entry &IDs" +msgstr "Exibir &IDs de Entrada" + +msgid "Sort by &file order" +msgstr "Classificar por ordem de ar&quivos" + +msgid "Sort by &File Order" +msgstr "Classificar por Ordem de Ar&quivos" + +msgid "Sort by &source" +msgstr "Classificar por &fonte" + +msgid "Sort by &Source" +msgstr "Classificar por &Fonte" + +msgid "Sort by &translation" +msgstr "Classificar por &tradução" + +msgid "Sort by &Translation" +msgstr "Classificar por &Tradução" + +msgid "&Group by context" +msgstr "&Grupo pelo contexto" + +msgid "&Group By Context" +msgstr "&Grupo Pelo Contexto" + +msgid "Entries with errors first" +msgstr "Entradas com erros primeiro" + +msgid "Entries with Errors First" +msgstr "Entradas com erros primeiro" + +msgid "&Untranslated entries first" +msgstr "&Entradas não traduzidas primeiro" + +msgid "&Untranslated Entries First" +msgstr "&Entradas Não Traduzidas Primeiro" + +msgid "Show sidebar" +msgstr "Exibir barra lateral" + +msgid "Show status bar" +msgstr "Mostrar barra de status" + +msgid "C&atalog" +msgstr "C&atálogo" + +msgid "&Update from sources" +msgstr "&Atualizar do código fonte" + +msgid "&Update from Sources" +msgstr "&Atualizar do Código Fonte" + +msgid "Update from &POT file..." +msgstr "Atualizar do arquivo &POT..." + +msgid "Update from &POT File..." +msgstr "Atualizar do Arquivo &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizar com o Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Preencher traduções ausentes da M&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Preencher traduções ausentes da M&T..." + +msgid "&Purge deleted translations" +msgstr "&Remover traduções excluídas" + +msgid "&Purge Deleted Translations" +msgstr "&Remover Traduções Excluídas" + +msgid "&Validate translations" +msgstr "&Validar traduções" + +msgid "&Validate Translations" +msgstr "&Validar Traduções" + +msgid "&Properties..." +msgstr "&Propriedades..." + +msgid "&Done and next" +msgstr "&Finalizar e avançar" + +msgid "&Done and Next" +msgstr "&Finalizar e Avançar" + +msgid "&Previous translation" +msgstr "&Tradução anterior" + +msgid "&Previous Translation" +msgstr "&Tradução Anterior" + +msgid "&Next translation" +msgstr "Tradução &seguinte" + +msgid "&Next Translation" +msgstr "Tradução &Seguinte" + +msgid "P&revious unfinished" +msgstr "Incompleto ante&rior" + +msgid "P&revious Unfinished" +msgstr "Incompleto Ante&rior" + +msgid "Ne&xt unfinished" +msgstr "Incompleto se&guinte" + +msgid "Ne&xt Unfinished" +msgstr "Incompleto Se&guinte" + +msgid "Previous plural form" +msgstr "Forma plural anterior" + +msgid "Previous Plural Form" +msgstr "Forma Plural Anterior" + +msgid "Next plural form" +msgstr "Forma plural seguinte" + +msgid "Next Plural Form" +msgstr "Forma Plural Seguinte" + +msgid "&Online help" +msgstr "Ajuda &online" + +msgid "&Online Help" +msgstr "Ajuda &Online" + +msgid "&GNU gettext manual" +msgstr "Manual &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual &GNU gettext" + +msgid "&About Poedit" +msgstr "&Sobre o Poedit" + +msgid "&About" +msgstr "&Sobre" + +msgid "Extractor setup" +msgstr "Instalador do extrator" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista de extensões separadas por ponto e vírgula (ex.: *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Comandos:" + +msgid "Command to extract translations:" +msgstr "Comando para extrair as traduções:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Esse é o comando usado para carregar o extrator.\n" +"%o expande o nome do arquivo de saída, %K para a lista\n" +"de palavras-chave, %F para a lista de arquivos de entrada,\n" +"%C para o sinalizador de conjunto de caracteres (veja abaixo)." + +msgid "An item in keywords list:" +msgstr "Um item na lista de palavras-chave:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Isto será anexado para linha de comando uma vez\n" +"para cada palavra-chave. %k expande para a palavra-chave." + +msgid "An item in input files list:" +msgstr "Um item na lista de arquivos de entrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Isto será anexado para linha de comando uma vez\n" +"para cada arquivo de entrada. %f expande para o nome do arquivo." + +msgid "Source code charset:" +msgstr "Conjunto de caracteres do código de origem:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Isto será anexado à linha de comando apenas se o\n" +"conjunto de caracteres do código fonte foi informado. %c expande para o " +"valor do conjunto de caracteres." + +msgid "Catalog properties" +msgstr "Propriedades do catálogo" + +msgid "Project name and version:" +msgstr "Nome e versão do projeto:" + +msgid "Plural Forms:" +msgstr "Formas de Plural:" + +msgid "Use default rules for this language" +msgstr "Usar regras padrão para este idioma" + +msgid "Use custom expression" +msgstr "Usar expressão personalizada..." + +msgid "Learn about plural forms" +msgstr "Saiba mais sobre formas de plural" + +msgid "Charset:" +msgstr "Conjunto de caracteres:" + +msgid "Team:" +msgstr "Equipe:" + +msgid "Team's email address:" +msgstr "Endereço de email da equipe:" + +msgid "Translation properties" +msgstr "Propriedades da tradução" + +msgid "Sources paths" +msgstr "Caminhos dos originais" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrair texto dos arquivos fonte nos seguintes diretórios:" + +msgid "Base path:" +msgstr "Caminho base:" + +msgid "Sources keywords" +msgstr "Palavras-chave do código fonte" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Use estas palavras-chave (nomes de funções) para reconhecer strings\n" +"traduzíveis nos arquivos fonte:" + +msgid "Learn about gettext keywords" +msgstr "Saiba mais sobre palavras-chave gettext" + +msgid "Update summary" +msgstr "Atualizar sumário" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Estas strings foram encontradas nas fontes mas não estavam no catálogo.\n" +"O Poedit vai adicioná-las agora para o catálogo." + +msgid "New strings" +msgstr "Novas strings" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Estas strings não estão mais nas fontes.\n" +"O Poedit vai removê-las do catálogo agora." + +msgid "Obsolete strings" +msgstr "Strings obsoletas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nova, 0 obsoleta)" + +msgid "Open" +msgstr "Abrir" + +msgid "Save catalog" +msgstr "Salvar catálogo" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Verificar erros na tradução" + +msgid "Update" +msgstr "Atualizar" + +msgid "Update catalog - synchronize it with sources" +msgstr "Atualizar catálogo - sincronizá-lo com as fontes" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Alternar se a string selecionada tiver uma tradução incerta" + +msgid "Show or hide the sidebar" +msgstr "Mostrar ou ocultar a barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texto de origem anterior:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Texto de origem antigo (antes da alteração durante uma atualização) a qual a " +"tradução aproximada se refere." + +msgid "Notes for translators:" +msgstr "Notas para tradutores:" + +msgid "Add comment" +msgstr "Adicionar comentário" + +msgid "Add Comment" +msgstr "Adicionar Comentário" + +msgid "Translation suggestions:" +msgstr "Sugestões de tradução: " + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nenhuma correspondência encontrada" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nenhuma correspondência encontrada" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Esta sequência foi encontrada na memória de traduções do Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novo: %i, obsoleto: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importando traduções: %d" + +msgid "Poedit Update" +msgstr "Atualização do Poedit" + +msgid "Preparing migration..." +msgstr "Preparando migração..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Status da saída da migração: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"O Poedit precisa converter sua memória de traduções para um novo formato." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Isso deve ser feito antes de iniciar o Poedit. Pode demorar alguns minutos " +"se você possui muitas traduções armazenadas, mas geralmente deve ser mais " +"rápido." + +msgid "Proceed" +msgstr "Prosseguir" + +msgid "Translation memory migration failed." +msgstr "A migração da memória de traduções falhou." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Os dados da memória de tradução não puderam ser migrados. O erro foi:\n" +"\n" +"%s\n" +"Envie um e-mail para help@poedit.net que iremos corrigi-lo." + +msgid "Cannot create temporary directory." +msgstr "Não foi possível criar o diretório temporário." + +msgid "Welcome to Poedit" +msgstr "Bem-vindo ao Poedit" + +msgid "Edit a translation" +msgstr "Editar uma tradução" + +msgid "Open an existing PO file and edit the translation." +msgstr "Abrir um arquivo PO existente e editar a tradução." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Importe um arquivo PO existente ou modelo POT e crie uma nova tradução dele." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Colabore em uma tradução com Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Baixe um arquivo de um projeto do Crowdin, traduza e sincronize as " +"alterações de volta." + +msgid "What is Crowdin?" +msgstr "O que é Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Não existem traduções. Isso não é comum." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Entradas traduzíveis não são adicionadas manualmente no sistema Gettext, mas " +"são automaticamente\n" +"extraídas do código fonte. Desta maneira, elas ficam atualizadas e " +"precisas.\n" +"Os tradutores geralmente usam arquivos de modelo PO (POT) fornecidos pelo " +"desenvolvedor." + +msgid "(Learn more about GNU gettext)" +msgstr "(Aprenda mais sobre o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"A maneira mais fácil de preencher este catálogo é atualizá-lo de um arquivo " +"POT:" + +msgid "Update from POT" +msgstr "Atualizar do POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Importe strings traduzíveis de um modelo POT existente." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Você também pode extrair strings traduzíveis diretamente do código fonte:" + +msgid "Extract from sources" +msgstr "Extrair dos originais" + +msgid "Configure source code extraction in Properties." +msgstr "Configurar a extração do código de origem nas propriedades." + +msgid "Sync" +msgstr "Sincronização" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar tradução com o Crowdin" diff --git a/locales/pt_PT.mo b/locales/pt_PT.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d2ba8d1254551e45166314e3f5117a777478712 GIT binary patch literal 46527 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 literal 0 HcmV?d00001 diff --git a/locales/pt_PT.po b/locales/pt_PT.po new file mode 100644 index 0000000..6b729a1 --- /dev/null +++ b/locales/pt_PT.po @@ -0,0 +1,1967 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:04-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Portuguese\n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: pt-PT\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ocultar esta notificação" + +msgid "Don't Show Again" +msgstr "Não voltar a mostrar" + +msgid "Don't show again" +msgstr "Não voltar a mostrar" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i linha do ficheiro '%s' não foi carregada corretamente." +msgstr[1] "%i linhas do ficheiro '%s' não foram carregadas corretamente." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "A linha %d do ficheiro '%s' está corrompida (dados %s inválidos)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Cabeçalho danificado: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Ficheiro danificado: usada a forma singular msgstr em conjunto com " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Ficheiro danificado: usadas formas plurais msgstr sem msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Ocorreram erros ao carregar o catálogo. Como resultado, alguns dados podem " +"estar em falta ou danificados." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Erro ao carregar %s, provavelmente está danificado." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"O ficheiro %s é apenas de leitura e não pode ser guardado.\n" +"Por favor, guarde-o com um nome diferente." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Não foi possível guardar o ficheiro %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Ocorreu um erro ao formatar o ficheiro (no entanto, foi guardado com " +"sucesso)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"O catálogo não pode ser guardado no formato '%s', conforme especificado nas " +"definições.\n" +"\n" +"Foi guardado no formato UTF-8 e as definições alteradas em concordância." + +msgid "Error saving catalog" +msgstr "Erro ao guardar o catálogo" + +msgid "PO Translation Files" +msgstr "Ficheiros de tradução PO" + +msgid "POT Translation Templates" +msgstr "Modelos de tradução POT" + +msgid "All Translation Files" +msgstr "Todos os ficheiros de tradução" + +msgid "Merging differences..." +msgstr "A incorporar diferenças..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' não é um ficheiro POT válido." + +msgid "(Use default language)" +msgstr "(Utilizar idioma do sistema)" + +msgid "Select your preferred language" +msgstr "Escolha o seu idioma preferido" + +msgid "Language selection" +msgstr "Seleção de idioma" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Tem que reiniciar o Poedit para aplicar a alteração." + +msgid "Downloading translations is disabled in this project." +msgstr "Este projeto desativou a descarga de traduções." + +msgid "Not authorized, please sign in again." +msgstr "Não autorizado. Inicie novamente a sessão." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"O serviço Crowdin é uma plataforma de gestão de traduções e uma ferramenta " +"de colaboração. O Poedit pode sincronizar os ficheiros PO existentes nos " +"projetos Crowdin." + +msgid "Sign In" +msgstr "Iniciar sessão" + +msgid "Sign in" +msgstr "Iniciar sessão" + +msgid "Sign Out" +msgstr "Terminar sessão" + +msgid "Sign out" +msgstr "Terminar sessão" + +msgid "Waiting for authentication…" +msgstr "A aguardar autenticação…" + +msgid "Updating user information…" +msgstr "A atualizar informações do utilizador…" + +msgid "Signed in as:" +msgstr "Sessão iniciada como:" + +msgid "Learn More About Crowdin" +msgstr "Saber mais sobre o Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Saber mais sobre o Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Iniciar sessão no Crowdin" + +msgid "Open Crowdin translation" +msgstr "Abrir tradução Crowdin" + +msgid "Project:" +msgstr "Projeto:" + +msgid "Language:" +msgstr "Idioma:" + +msgid "File:" +msgstr "Ficheiro:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Não existem projetos de tradução associados à sua conta Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Este projeto não tem ficheiros que possam ser traduzidos com o Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Este ficheiro só pode ser editado na interface web do Crowdin." + +msgid "Downloading latest translations…" +msgstr "A descarregar traduções mais recentes..." + +msgid "Syncing with Crowdin" +msgstr "Sincronizar com o Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Falha ao sincronizar com o Crowdin." + +msgid "Crowdin error" +msgstr "Erro do Crowdin" + +msgid "Uploading translations…" +msgstr "A enviar traduções…" + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Saber mais" + +msgid "Learn More" +msgstr "Saber mais" + +#, c-format +msgid "Failed command: %s" +msgstr "Falha do comando: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Erro ao unir os catálogos gettex." + +msgid "Scanning files..." +msgstr "A pesquisar ficheiros..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "A analisar ficheiros %s..." + +msgid "Failed to load extracted catalog." +msgstr "Erro ao carregar o catálogo extraído." + +msgid "&Help" +msgstr "Aj&uda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Os ficheiros MO não podem ser editados com o Poedit." + +msgid "Error opening file" +msgstr "Erro ao abrir ficheiro" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Por favor abra e edite o ficheiro PO correspondente. Quando guardar o " +"ficheiro PO, o ficheiro MO também será atualizado." + +msgid "don't delete temporary files (for debugging)" +msgstr "não eliminar ficheiros temporários (depuração)" + +msgid "handle a poedit:// URI" +msgstr "gerir um URI poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Falha ao comunicar com o processo do Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ocorreu uma exceção não tratada: %s" + +msgid "Unhandled exception occurred." +msgstr "Ocorreu uma exceção." + +msgid "Open catalog" +msgstr "Abrir catálogo" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "O ficheiro %s não existe." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Acerca do %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versão %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Serviços" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ocultar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ocultar outros" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Mostrar tudo" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Sair do %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "O Poedit é um editor de traduções fácil de usar." + +msgid "Catalogs Manager" +msgstr "Gestor de catálogos" + +msgid "Check for Updates..." +msgstr "Procurar atualizações..." + +msgid "&Edit" +msgstr "&Editar" + +msgid "Undo" +msgstr "Desfazer" + +msgid "Redo" +msgstr "Refazer" + +msgid "Paste and Match Style" +msgstr "Colar com a formatação do documento" + +msgid "Delete" +msgstr "Eliminar" + +msgid "Spelling and Grammar" +msgstr "Ortografia e gramática" + +msgid "Show Spelling and Grammar" +msgstr "Mostrar ortografia e gramática" + +msgid "Check Document Now" +msgstr "Analisar documento agora" + +msgid "Check Spelling While Typing" +msgstr "Verificar ortografia ao escrever" + +msgid "Check Grammar With Spelling" +msgstr "Verificar gramática com ortografia" + +msgid "Correct Spelling Automatically" +msgstr "Corrigir ortografia automaticamente" + +msgid "Substitutions" +msgstr "Substituições" + +msgid "Show Substitutions" +msgstr "Mostrar substituições" + +msgid "Smart Copy/Paste" +msgstr "Colar/Colar inteligente" + +msgid "Smart Quotes" +msgstr "Aspas inteligentes" + +msgid "Smart Dashes" +msgstr "Travessões inteligentes" + +msgid "Smart Links" +msgstr "Ligações inteligentes" + +msgid "Text Replacement" +msgstr "Substituição de texto" + +msgid "Transformations" +msgstr "Transformações" + +msgid "Make Upper Case" +msgstr "Converter em maiúsculas" + +msgid "Make Lower Case" +msgstr "Converter em minúsculas" + +msgid "Capitalize" +msgstr "Capitalizar" + +msgid "Speech" +msgstr "Fala" + +msgid "Start Speaking" +msgstr "Iniciar fala" + +msgid "Stop Speaking" +msgstr "Parar fala" + +msgid "&View" +msgstr "&Ver" + +msgid "Enter Full Screen" +msgstr "Entrar no modo de ecrã completo" + +msgid "Window" +msgstr "Janela" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Ampliação" + +msgid "Bring All to Front" +msgstr "Trazer para primeiro plano" + +msgid "PO Translation" +msgstr "Tradução PO" + +msgid "The file cannot be opened." +msgstr "O ficheiro não foi aberto." + +msgid "Invalid file" +msgstr "Ficheiro inválido" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"O ficheiro pode estar danificado ou num formato não reconhecido pelo Poedit." + +msgid "&Undo" +msgstr "&Desfazer" + +msgid "&Redo" +msgstr "&Refazer" + +msgid "Cu&t" +msgstr "Cor&tar" + +msgid "Cut" +msgstr "Cortar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "Co&lar" + +msgid "Paste" +msgstr "Colar" + +msgid "&Delete" +msgstr "&Eliminar" + +msgid "Select &All" +msgstr "Selecion&ar tudo" + +msgid "Select All" +msgstr "Selecionar tudo" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Não pode largar mais do que um ficheiro na janela do Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "O ficheiro %s não é um catálogo." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Ficheiro" + +msgid "&Go" +msgstr "&Ir" + +msgid "Source text:" +msgstr "Texto fonte:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plurais:" + +msgid "Translation:" +msgstr "Tradução:" + +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 "" +"Os ficheiros POT são apenas modelos e não possuem quaisquer traduções.\n" +"Para efetuar uma tradução, crie um novo ficheiro PO baseado no modelo." + +msgid "Create New Translation" +msgstr "Criar nova tradução" + +msgid "Create new translation" +msgstr "Criar nova tradução" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"A verificação ortográfica está inativa porque o dicionário para o idioma %s " +"não está instalado." + +msgid "Install" +msgstr "Instalar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "O catálogo foi modificado. Guardar alterações?" + +msgid "Save changes" +msgstr "Guardar alterações" + +msgid "Your changes will be lost if you don't save them." +msgstr "Se não guardar as alterações, estas serão perdidas." + +msgid "Save" +msgstr "Guardar" + +msgid "Don't save" +msgstr "Não guardar" + +msgid "Don't Save" +msgstr "Não guardar" + +msgid "Save as..." +msgstr "Guardar como..." + +msgid "Compile to..." +msgstr "Compilar para..." + +msgid "Compiled Translation Files" +msgstr "Ficheiros de tradução compilados" + +msgid "Export as..." +msgstr "Exportar como..." + +msgid "HTML Files" +msgstr "Ficheiros HTML" + +msgid "Open catalog template" +msgstr "Abrir modelo de catálogo" + +msgid "Updating catalog" +msgstr "A atualizar catálogo..." + +msgid "Source code not available." +msgstr "O código fonte não está disponível." + +msgid "Updating failed" +msgstr "Falha ao atualizar" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"As traduções não foram atualizadas a partir do código fonte porque o código " +"não foi encontrado na localização definida nas propriedades do catálogo." + +msgid "Entries in the catalog are probably incorrect." +msgstr "É possível que as entradas do catálogo estejam incorretas." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Ocorreu um erro ao atualizar o catálogo. Clique em 'Detalhes >>' para saber " +"mais." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Foi encontrado %d erro na tradução." +msgstr[1] "Foram encontrados %d erros na tradução." + +msgid "Validation results" +msgstr "Resultados da validação" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"As entradas com erros estão marcadas a vermelho. Os detalhes do erro serão " +"mostrados ao selecionar a entrada correspondente." + +msgid "The file was saved safely." +msgstr "O ficheiro foi guardado com sucesso." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"O ficheiro foi guardado com sucesso e o ficheiro MO foi compilado. No " +"entanto, é possível que não funcione corretamente." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "O ficheiro foi guardado mas o ficheiro MO não foi criado." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"O ficheiro foi compilado para o formato MO mas é provável que não funcione " +"corretamente." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "O ficheiro não pode ser compilado para o formato MO." + +msgid "No problems with the translation found." +msgstr "Não foram encontrados erros na tradução." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"A tradução pode ser utilizada mas %d entrada ainda não está traduzida." +msgstr[1] "" +"A tradução pode ser utilizada mas %d entradas ainda não estão traduzidas." + +msgid "The translation is ready for use." +msgstr "A tradução está pronta a utilizar." + +msgid "Context:" +msgstr "Contexto:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"O Poedit corrigiu automaticamente o conteúdo inválido do ficheiro \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"O ficheiro continha itens duplicados, o que não é permitido em ficheiros PO, " +"e que impedia a sua utilização. O Poedit corrigiu os erros, mas você deve " +"rever as traduções dos diversos itens marcados como imprecisos e, se " +"necessário, corrigi-los." + +msgid "Language of the translation isn't set." +msgstr "O idioma da tradução não está definido." + +msgid "Set Language" +msgstr "Definir idioma" + +msgid "Set language" +msgstr "Definir idioma" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"As sugestões de tradução não estarão disponíveis se o idioma do projeto não " +"estiver definido corretamente. Outras funcionalidades, como as formas " +"plurais, também poderão ser afetadas." + +msgid "Language of the translation is the same as source language." +msgstr "O idioma da tradução coincide com o idioma do texto fonte." + +msgid "Fix Language" +msgstr "Corrigir idioma" + +msgid "Fix language" +msgstr "Corrigir idioma" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Este catálogo tem entradas com fomas plurais mas não tem o cabeçalho Plural-" +"Forms definido." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"As entradas deste catálogo possuem formas plurais que diferem daquelas que " +"estão definidas no cabeçalho Plural-Forms." + +msgid "Required header Plural-Forms is missing." +msgstr "O cabeçalho Plural-Forms não existe." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Erro de sintaxe no cabeçalho Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Corrigir cabeçalho" + +msgid "Fix the header" +msgstr "Corrigir cabeçalho" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"A expressão de formas plurais utilizadas neste catálogo não são as que devem " +"ser utilizadas pelo idioma %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Rever" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Erro ao carregar o ficheiro %s." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduzido: %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Faltam: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d erro" +msgstr[1] "%d erros" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entradas" + +msgid " (unsaved)" +msgstr " (não guardado)" + +msgid " (modified)" +msgstr " (modificado)" + +msgid "Go" +msgstr "Ir" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Falha ao atualizar a memória de traduções: %s" + +msgid "Purge deleted translations" +msgstr "Remover traduções eliminadas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Pretende remover todas as traduções que já não são utilizadas?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Se continuar, todas as traduções marcadas como eliminadas serão removidas " +"permanentemente. Se as entradas forem respostas, terá que as traduzir " +"novamente." + +msgid "Keep" +msgstr "Manter" + +msgid "Purge" +msgstr "Remover" + +msgid "Fill missing translations from TM" +msgstr "Preencher traduções a partir da MT" + +msgid "Only fill in exact matches" +msgstr "Preencher apenas as ocorrências exatas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Por definição, os resultados imprecisos também serão preenchidos e " +"assinalados como tal. Assinale esta opção para apenas preencher ocorrências " +"exatas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Não assinalar ocorrências exatas como imprecisas" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Apenas deve ativar esta opção se confiar na qualidade da sua memória de " +"traduções. Por definição, as ocorrências encontradas na memória serão " +"marcadas como imprecisas e devem ser revistas." + +msgid "Fill" +msgstr "Preencher" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d item preenchido com a memória de traduções." +msgstr[1] "%d itens preenchidos com a memória de traduções." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"As traduções foram assinaladas como imprecisas. Deve rever as traduções e " +"efetuar as correções necessárias." + +msgid "No entries could be filled from the translation memory." +msgstr "" +"Não existem itens que possam ser preenchidos com a memória de traduções." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"A memória de traduções não contém quaisquer entradas similares às deste " +"ficheiro. Só será útil para traduções semi-automáticas e após o Poedit " +"aprender os dados dos ficheiros que traduziu manualmente." + +msgid "Translating" +msgstr "Traduzindo" + +msgid "Filling missing translations from TM..." +msgstr "Preencher traduções em falta com a MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u linha traduzidas" +msgstr[1] "%u linhas traduzidas" + +msgid "Copy from source text" +msgstr "Copiar entrada original" + +msgid "Copy from Source Text" +msgstr "Copiar entrada original" + +msgid "Clear translation" +msgstr "Apagar tradução" + +msgid "Clear Translation" +msgstr "Apagar tradução" + +msgid "Edit comment" +msgstr "Editar comentário" + +msgid "Edit Comment" +msgstr "Editar comentário" + +msgid "References:" +msgstr "Referências:" + +msgid "Everything" +msgstr "Tudo" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Uma" + +msgid "Two" +msgstr "Duas" + +msgid "Plural" +msgstr "Plurais" + +msgid "Other" +msgstr "Outra" + +msgid "&Bookmarks" +msgstr "&Marcadores" + +#, c-format +msgid "Set bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Ir para o marcador %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Definir marcador %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Ir para o marcador %i" + +msgid "Hide Sidebar" +msgstr "Ocultar barra lateral" + +msgid "Show Sidebar" +msgstr "Mostrar barra lateral" + +msgid "Hide Status Bar" +msgstr "Ocultar barra de estado" + +msgid "Show Status Bar" +msgstr "Mostrar barra de estado" + +msgid "Source text" +msgstr "Texto fonte" + +msgid "Translation" +msgstr "Tradução" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Texto fonte - %s" + +msgid "unknown language" +msgstr "idioma desconhecido" + +#, c-format +msgid "Translation — %s" +msgstr "Tradução — %s" + +msgid "Error:" +msgstr "Erro:" + +msgid "Source file" +msgstr "Ficheiro fonte" + +msgid "Source file occurrence:" +msgstr "Ocorrência no ficheiro fonte:" + +msgid "Open in Editor" +msgstr "Abrir no editor" + +msgid "Open in editor" +msgstr "Abrir no editor" + +msgid "No references for the selected item." +msgstr "Não existem referências para o item selecionado." + +#, c-format +msgid "Error opening file %s!" +msgstr "Erro ao abrir o ficheiro %s!" + +msgid "Find" +msgstr "Localizar" + +msgid "Replace" +msgstr "Substituir" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opções" + +msgid "Ignore case" +msgstr "Ignorar maiúsculas/minúsculas" + +msgid "Wrap around" +msgstr "Moldar texto" + +msgid "Whole words only" +msgstr "Só palavras inteiras" + +msgid "Find in source texts" +msgstr "Localizar nos textos fonte" + +msgid "Find in translations" +msgstr "Localizar na tradução" + +msgid "Find in comments" +msgstr "Localizar nos comentários" + +msgid "Close" +msgstr "Fechar" + +msgid "Replace All" +msgstr "Substituir tudo" + +msgid "Replace all" +msgstr "Substituir tudo" + +msgid "< &Previous" +msgstr "< An&terior" + +msgid "&Next >" +msgstr "Segui&nte >" + +msgid "String to find" +msgstr "Texto a procurar" + +msgid "Replacement string" +msgstr "Texto de substituição" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Não foi possível executar o programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Código ou nome do idioma (ex: pt)" + +msgid "Translation Language" +msgstr "Idioma da tradução" + +msgid "Language of the translation:" +msgstr "Idioma da tradução:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gestor de catálogos" + +msgid "Catalog" +msgstr "Catálogo" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Por traduzir" + +msgid "Fuzzy" +msgstr "Imprecisas" + +msgid "Bad Tokens" +msgstr "Símbolos inválidos" + +msgid "Last modified" +msgstr "Última modificação" + +msgid "Select directory" +msgstr "Escolha o diretório" + +msgid "Directories:" +msgstr "Diretórios:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Pretende eliminar o projeto?" + +msgid "Confirmation" +msgstr "Confirmação" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Tem a certeza que quer mesmo atualizar\n" +"todos os catálogos deste projeto?" + +msgid "Information about the translator" +msgstr "Informações do tradutor" + +msgid "Name:" +msgstr "Nome:" + +msgid "Your Name" +msgstr "O seu nome" + +msgid "Email:" +msgstr "E-mail:" + +msgid "your_email@example.com" +msgstr "o_seu_email@exemplo.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"O seu nome e endereço eletrónico só serão utilizados para definir o " +"cabeçalho Last-Translator dos ficheiros GNU gettext." + +msgid "Editing" +msgstr "Edição" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar ficheiro MO ao guardar" + +msgid "Show summary after catalog update" +msgstr "Mostar resumo após atualizar o catálogo" + +msgid "Check spelling" +msgstr "Verificação ortográfica" + +msgid "Always change focus to text input field" +msgstr "Focar sempre o campo da entrada de texto" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nunca deixar que a lista de entradas obtenha o foco. Se ativa, tem que usar " +"Control+Teclas do cursor para mudar de linhas com o teclado mas também pode " +"escrever o texto imediatamente, sem ter que premir a tecla Tab para mudar de " +"campo." + +msgid "Appearance" +msgstr "Aspeto" + +msgid "Use custom list font:" +msgstr "Utilizar tipo de letra personalizada:" + +msgid "Use custom text fields font:" +msgstr "Utilizar tipo de letra personalizada para campos de texto:" + +msgid "Change UI language" +msgstr "Mudar idioma da aplicação" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(requer Windows 8 ou mais recente)" + +msgid "General" +msgstr "Geral" + +msgid "Use translation memory" +msgstr "Utilizar memória de traduções" + +msgid "Learn From Files..." +msgstr "Saber mais sobre ficheiros..." + +msgid "Learn from files..." +msgstr "Aprender dos ficheiros..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Repor" + +msgid "Consult TM when updating from sources" +msgstr "Consultar memória de traduções ao atualizar das fontes" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Se ativa, o Poedit tentará preencher as novas entradas utilizando as\n" +"traduções armazenadas na memória de traduções. Se a memória\n" +"estiver praticamente vazia, o processo não será eficiente. Quantas mais\n" +"traduções editar e quanto maior for a memória, melhor correrá o processo." + +msgid "Stored translations:" +msgstr "Traduções guardadas:" + +msgid "Database size on disk:" +msgstr "Tamanho da base de dados no disco:" + +msgid "Select translation files to import" +msgstr "Selecione os ficheiros de tradução a importar" + +msgid "Translation Memory" +msgstr "Memória de traduções" + +msgid "Importing translations..." +msgstr "Importação de traduções..." + +msgid "Finalizing..." +msgstr "Finalizando..." + +msgid "Reset translation memory" +msgstr "Reiniciar memória de traduções" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Tem a certeza que pretende reiniciar a memória de traduções?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Se reiniciar a memória de traduções, removerá todas as traduções guardadas. " +"Esta operação não pode ser desfeita." + +msgid "Cancel" +msgstr "Cancelar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Os extratores de código fonte são utilizados para localizar as linhas, nos " +"ficheiros fonte, que podem ser traduzidas e extraem as linhas para que " +"possam ser editadas." + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Editar" + +msgid "Delete extractor" +msgstr "Eliminar extrator" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Tem a certeza de que deseja eliminar o extrator \"%s\"?" + +msgid "Extractors" +msgstr "Extratores" + +msgid "Accounts" +msgstr "Contas" + +msgid "Automatically check for updates" +msgstr "Procurar atualizações automaticamente" + +msgid "Include beta versions" +msgstr "Incluir versões beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"As versões Beta possuem novas funcionalidades e melhorias mas podem ser " +"instáveis." + +msgid "Updates" +msgstr "Atualizações" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Estas definições afetam a formatação interna dos ficheiros PO. Deve ajustar " +"as definições caso necessite de requisitos especiais." + +msgid "Line endings:" +msgstr "Final de linha:" + +msgid "Unix (recommended)" +msgstr "Unix (recomendado)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Quebra em:" + +msgid "Preserve formatting of existing files" +msgstr "Manter formatação dos ficheiros existentes" + +msgid "Advanced" +msgstr "Avançado" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferências do %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Arraste e largue aqui os ficheiros\n" +"\n" +"\\ou utilize o botão +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Arraste e largue aqui as pastas\n" +"\n" +"\\ou utilize o botão +" + +msgid "Add Folders..." +msgstr "Adicionar pastas..." + +msgid "Add folders..." +msgstr "Adicionar pastas..." + +msgid "Add Files..." +msgstr "Adicionar ficheiros..." + +msgid "Add files..." +msgstr "Adicionar ficheiros..." + +msgid "Add Wildcard..." +msgstr "Adicionar \"wildcard\"..." + +msgid "Add wildcard..." +msgstr "Adicionar \"wildcard\"..." + +msgid "Paths" +msgstr "Caminhos" + +msgid "Excluded paths" +msgstr "Caminhos excluídos" + +msgid "Additional keywords" +msgstr "Palavras-chave adicionais" + +msgid "Name of the project the translation is for" +msgstr "Nome do projeto de tradução" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "ex.: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomendado)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Por favor guarde o ficheiro. Esta secção não pode ser editada até que o faça." + +msgid "Comment:" +msgstr "Comentário:" + +msgid "OK" +msgstr "Aceitar" + +msgid "C&lear" +msgstr "&Apagar" + +msgid "Clear the comment" +msgstr "Apagar comentário" + +msgid "Create new translations project" +msgstr "Criar novo projeto de traduções" + +msgid "Edit the project" +msgstr "Editar projeto" + +msgid "Delete the project" +msgstr "Eliminar projeto" + +msgid "Update all" +msgstr "Atualizar tudo" + +msgid "Update all catalogs in the project" +msgstr "Atualizar todos os catálogos do projeto" + +msgid "Edit project" +msgstr "Editar projeto" + +msgid "Project name:" +msgstr "Nome do projeto:" + +msgid "Browse" +msgstr "Explorar" + +msgid "Add directory to the list" +msgstr "Adicionar diretório à lista" + +msgid "&New..." +msgstr "&Novo..." + +msgid "New from &POT/PO file..." +msgstr "Novo de ficheiro &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Novo de ficheiro &POT/PO..." + +msgid "&Open..." +msgstr "&Abrir..." + +msgid "Open Recent" +msgstr "Abrir recentes" + +msgid "Open from Crowdin..." +msgstr "Abrir do Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Abrir do Crowdin..." + +msgid "&Close" +msgstr "Fe&char" + +msgid "&Save" +msgstr "&Guardar" + +msgid "Save &as..." +msgstr "Guar&dar como..." + +msgid "Save &As..." +msgstr "Guar&dar como..." + +msgid "Compile to MO..." +msgstr "Compilar para MO..." + +msgid "E&xport as HTML..." +msgstr "E&xportar como HTML" + +msgid "Check for updates..." +msgstr "Procurar atualizações..." + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Catalogs &manager" +msgstr "Gest&or de catálogos" + +msgid "Catalogs &Manager" +msgstr "Gest&or de catálogos" + +msgid "E&xit" +msgstr "&Sair" + +msgid "Quit" +msgstr "Sair" + +msgid "Copy from singular" +msgstr "Copiar da forma singular" + +msgid "Copy From Singular" +msgstr "Copiar da forma singular" + +msgid "Translation is &fuzzy" +msgstr "A &tradução é imprecisa" + +msgid "Translation Is &Fuzzy" +msgstr "A tradução é i&mprecisa" + +msgid "Edit &comment" +msgstr "Editar &comentário" + +msgid "Edit &Comment" +msgstr "Editar &comentário" + +msgid "Suggestions" +msgstr "Sugestões" + +msgid "&Show references" +msgstr "Mo&strar referências" + +msgid "&Show References" +msgstr "Mo&strar referências" + +msgid "&Find..." +msgstr "&Localizar..." + +msgid "Replace..." +msgstr "Substituir..." + +msgid "Find next" +msgstr "Localizar seguinte" + +msgid "Find previous" +msgstr "Localizar anterior" + +msgid "Find and Replace..." +msgstr "Localizar e substituir..." + +msgid "Find Next" +msgstr "Localizar seguinte" + +msgid "Find Previous" +msgstr "Localizar anterior" + +msgid "&Preferences" +msgstr "&Preferências" + +msgid "Display entry &IDs" +msgstr "Mostrar &ID das entradas" + +msgid "Display Entry &IDs" +msgstr "Mostrar &ID das entradas" + +msgid "Sort by &file order" +msgstr "Ordenar pela ordem do &ficheiro" + +msgid "Sort by &File Order" +msgstr "Ordenar pela ordem do &ficheiro" + +msgid "Sort by &source" +msgstr "&Ordenar por fonte" + +msgid "Sort by &Source" +msgstr "&Ordenar por fonte" + +msgid "Sort by &translation" +msgstr "Ordenar por &tradução" + +msgid "Sort by &Translation" +msgstr "Ordenar por &tradução" + +msgid "&Group by context" +msgstr "A&grupar por contexto" + +msgid "&Group By Context" +msgstr "A&grupar por contexto" + +msgid "Entries with errors first" +msgstr "Entradas com erros primeiro" + +msgid "Entries with Errors First" +msgstr "Entradas com erros primeiro" + +msgid "&Untranslated entries first" +msgstr "Não trad&uzidas primeiro" + +msgid "&Untranslated Entries First" +msgstr "Não trad&uzidas primeiro" + +msgid "Show sidebar" +msgstr "Mostrar barra lateral" + +msgid "Show status bar" +msgstr "Mostrar barra de estado" + +msgid "C&atalog" +msgstr "C&atálogo" + +msgid "&Update from sources" +msgstr "At&ualizar com base nas fontes" + +msgid "&Update from Sources" +msgstr "At&ualizar com base nas fontes" + +msgid "Update from &POT file..." +msgstr "Atualizar com base em ficheiro &POT..." + +msgid "Update from &POT File..." +msgstr "Atualizar com base em ficheiro &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizar com o Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Preencher traduções a partir da M&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Preencher traduções a partir da M&T..." + +msgid "&Purge deleted translations" +msgstr "&Remover traduções eliminadas" + +msgid "&Purge Deleted Translations" +msgstr "&Remover traduções eliminadas" + +msgid "&Validate translations" +msgstr "&Validar traduções" + +msgid "&Validate Translations" +msgstr "&Validar traduções" + +msgid "&Properties..." +msgstr "&Propriedades..." + +msgid "&Done and next" +msgstr "&Pronta e avançar" + +msgid "&Done and Next" +msgstr "&Pronta e avançar" + +msgid "&Previous translation" +msgstr "Tradução &anterior" + +msgid "&Previous Translation" +msgstr "Tradução &anterior" + +msgid "&Next translation" +msgstr "Tradução &seguinte" + +msgid "&Next Translation" +msgstr "Tradução &seguinte" + +msgid "P&revious unfinished" +msgstr "An&terior não terminada" + +msgid "P&revious Unfinished" +msgstr "An&terior não terminada" + +msgid "Ne&xt unfinished" +msgstr "Seguinte &não terminada" + +msgid "Ne&xt Unfinished" +msgstr "Seguinte &não terminada" + +msgid "Previous plural form" +msgstr "Forma plural anterior" + +msgid "Previous Plural Form" +msgstr "Forma plural anterior" + +msgid "Next plural form" +msgstr "Forma plural seguinte" + +msgid "Next Plural Form" +msgstr "Forma plural seguinte" + +msgid "&Online help" +msgstr "Ajuda na &web" + +msgid "&Online Help" +msgstr "Ajuda na &web" + +msgid "&GNU gettext manual" +msgstr "Manual &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual &GNU gettext" + +msgid "&About Poedit" +msgstr "&Sobre o Poedit" + +msgid "&About" +msgstr "&Sobre" + +msgid "Extractor setup" +msgstr "Configurar extrator" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista de extensões separadas por ponto e vírgula (ex. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Invocação:" + +msgid "Command to extract translations:" +msgstr "Comando para extrair traduções:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Este é o comando utilizado para iniciar o extrator.\n" +"%o será substituído pelo nome do ficheiro de destino,\n" +"%K pela lista de palavras chave, %F pela lista de ficheiros\n" +"de entrada e %C pelo tipo de codificação (veja abaixo)." + +msgid "An item in keywords list:" +msgstr "Um item na lista de palavras-chave:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Isto será anexado à linha de comandos uma vez para cada\n" +"palavra-chave. %k será substituído pela palavra-chave." + +msgid "An item in input files list:" +msgstr "Um item na lista de ficheiros de entrada:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Isto será anexado à linha de comandos uma vez para cada\n" +"ficheiro de entrada. %f será substituído pelo nome do ficheiro." + +msgid "Source code charset:" +msgstr "Codificação do código fonte:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Isto será anexado à linha de comandos se a codificação\n" +"do código fonte tiver sido fornecida. %c será substituído pela codificação." + +msgid "Catalog properties" +msgstr "Propriedades do catálogo" + +msgid "Project name and version:" +msgstr "Nome e versão do projeto:" + +msgid "Plural Forms:" +msgstr "Formas plurais:" + +msgid "Use default rules for this language" +msgstr "Utilizar regras pré-definidas para este idioma" + +msgid "Use custom expression" +msgstr "Utilizar expressão personalizada" + +msgid "Learn about plural forms" +msgstr "Saber mais sobre formas plurais" + +msgid "Charset:" +msgstr "Codificação:" + +msgid "Team:" +msgstr "Equipa:" + +msgid "Team's email address:" +msgstr "Endereço eletrónico da equipa:" + +msgid "Translation properties" +msgstr "Propriedades da tradução" + +msgid "Sources paths" +msgstr "Caminho das fontes" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrair texto dos ficheiros fonte nestes diretórios:" + +msgid "Base path:" +msgstr "Caminho base:" + +msgid "Sources keywords" +msgstr "Palavras-chave das fontes" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Utilizar estas palavras-chave (nomes de funções) para reconhecer as " +"entradas\n" +"passíveis de tradução nos ficheiros fonte:" + +msgid "Learn about gettext keywords" +msgstr "Saber mais sobre palavras-chaves gettext" + +msgid "Update summary" +msgstr "Resumo da atualização" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Estas entradas foram encontradas no código fonte mas não estão\n" +"no catálogo. Serão adicionadas ao catálogo." + +msgid "New strings" +msgstr "Novas entradas" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Estas entradas já não estão no código fonte\n" +"e serão removidas do catálogo." + +msgid "Obsolete strings" +msgstr "Linhas obsoletas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 novas, 0 obsoletas)" + +msgid "Open" +msgstr "Abrir" + +msgid "Save catalog" +msgstr "Guardar catálogo" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Procurar erros na tradução" + +msgid "Update" +msgstr "Atualizar" + +msgid "Update catalog - synchronize it with sources" +msgstr "Atualizar catálogo e sincronizar com o código fonte" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Ativada se a linha selecionada tiver uma tradução imprecisa" + +msgid "Show or hide the sidebar" +msgstr "Mostrar ou ocultar a barra lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Texto fonte anterior:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"O texto fonte antigo (antes da alteração durante a atualização) a que a " +"tradução imprecisa se refere." + +msgid "Notes for translators:" +msgstr "Notas para tradutores:" + +msgid "Add comment" +msgstr "Adicionar comentário" + +msgid "Add Comment" +msgstr "Adicionar comentário" + +msgid "Translation suggestions:" +msgstr "Sugestões de tradução:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nenhuma ocorrência" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nenhuma ocorrência" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Esta linha foi encontrada na memória de traduções do Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novas: %i, obsoletas: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importação de traduções: %d" + +msgid "Poedit Update" +msgstr "Atualização do Poedit" + +msgid "Preparing migration..." +msgstr "A preparar migração..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estado de migração: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"O Poedit precisa de converter a memória de traduções para um novo formato." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Isto deve ser feito antes de iniciar o Poedit. Pode levar alguns minutos, " +"caso existam muitas traduções guardadas, mas também pode ser mais rápido." + +msgid "Proceed" +msgstr "Continuar" + +msgid "Translation memory migration failed." +msgstr "Falha ao migrar a memória de traduções." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Os dados da memória de traduções não foram migrados. O erro foi:\n" +"\n" +"%s\n" +"Envie uma mensagem para help@poedit.net e descreva-nos o erro." + +msgid "Cannot create temporary directory." +msgstr "Não foi possível criar o diretório temporário." + +msgid "Welcome to Poedit" +msgstr "Bem-vindo ao Poedit" + +msgid "Edit a translation" +msgstr "Editar tradução" + +msgid "Open an existing PO file and edit the translation." +msgstr "Abrir um ficheiro PO e editar a tradução." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Criar uma nova tradução e obter as linhas a traduzir a partir de um ficheiro " +"PO ou POT." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Participar num projeto de tradução do Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Descarregue um ficheiro do Crowdin, traduza-o e sincronize as suas " +"alterações." + +msgid "What is Crowdin?" +msgstr "O que é o Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Não existem traduções. Isto é estranho." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"As entradas que podem ser traduzidas não são adicionadas manualmente mas " +"sim\n" +"extraidas do código fonte automaticamente. Desta forma, estão sempre " +"atualizadas.\n" +"Normalmente, os tradutores utilizam os ficheiros POT disponibilizados pelos " +"programadores." + +msgid "(Learn more about GNU gettext)" +msgstr "(Saber mais sobre o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"O método mais fácil para preencher este catálogo é utilizar um ficheiro POT:" + +msgid "Update from POT" +msgstr "Atualizar com base em ficheiro POT..." + +msgid "Take translatable strings from an existing POT template." +msgstr "Obter linhas a traduzir a partir de um modelo POT." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Também pode extrair as linhas a traduzir diretamente do código fonte:" + +msgid "Extract from sources" +msgstr "Extrair das fontes" + +msgid "Configure source code extraction in Properties." +msgstr "Configure a extração do código fonte nas propriedades." + +msgid "Sync" +msgstr "Sincronização" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar tradução com o Crowdin" diff --git a/locales/ro.mo b/locales/ro.mo new file mode 100644 index 0000000000000000000000000000000000000000..91ce39e5e92796c1d6bbe190030a7ed38529ad6a GIT binary patch literal 26047 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 E0VBLeSO5S3 literal 0 HcmV?d00001 diff --git a/locales/ro.po b/locales/ro.po new file mode 100644 index 0000000..91d13bb --- /dev/null +++ b/locales/ro.po @@ -0,0 +1,1908 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-26 19:02+0200\n" +"PO-Revision-Date: 2016-08-01 14:11-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Romanian\n" +"Language: ro_RO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n" +"%100<20)) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ro\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ascunde acest mesaj de informare" + +msgid "Don't Show Again" +msgstr "Nu mai afișa" + +msgid "Don't show again" +msgstr "Nu arăta din nou" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "%i linii de fişier '%s' nu au fost încărcate corect." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Linia %d din fişierul \"%s\" este corupt (nu este valabil %s de date)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Antet malformat: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Fișier catalog stricat: forma de singular msgtr a fost folosită împreună cu " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Fișier catalog deteriorat: forma de plural msgtr a fost folosită fără " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Au apărut unele erori la încărcarea catalogului. E posibil ca unele date să " +"lipseasca sau să fie deteriorate." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nu se poate încărca fișierul %s, probabil că este deteriorat." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Fișierul '%s' poate fi doar citit și nu poate fi salvat.\n" +"Salvați-l sub un alt nume." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nu se poate salva fișierul %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"A fost o problemă la formatarea fișierului (dar a fost salvat în regulă)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Catalogul nu a putut fi salvat în '%s' set de caractere specificat în " +"catalogul setari.\n" +"\n" +" El a fost salvat în UTF-8, şi setarea a fost modificat în consecință." + +msgid "Error saving catalog" +msgstr "Eroare la salvarea catalogului" + +msgid "PO Translation Files" +msgstr "Dosar de traducere PO" + +msgid "POT Translation Templates" +msgstr "Şabloane de traducere" + +msgid "All Translation Files" +msgstr "Toate fișierele pentru traducere" + +msgid "Merging differences..." +msgstr "Unesc diferențele..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nu este un fișier POT valid." + +msgid "(Use default language)" +msgstr "(Folosește limba implicită)" + +msgid "Select your preferred language" +msgstr "Selectați limba preferată" + +msgid "Language selection" +msgstr "Selectare limbă" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Trebuie să reporniți Poedit pentru ca această schimbare să aibă efect." + +msgid "Downloading translations is disabled in this project." +msgstr "Descărcare traduceri este dezactivată în acest proiect." + +msgid "Not authorized, please sign in again." +msgstr "Neautorizat, vă rugăm să faceÅ£i \"sign in\" din nou." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin este o platforma de management online şi instrument de traducere. " +"Poedit perfect se sincronizează cu fişiere PO la Crowdin." + +msgid "Sign In" +msgstr "Autentificare" + +msgid "Sign in" +msgstr "Autentificare" + +msgid "Sign Out" +msgstr "Deconectare" + +msgid "Sign out" +msgstr "Deconectare" + +msgid "Waiting for authentication…" +msgstr "Aşteptati pentru autentificare..." + +msgid "Updating user information…" +msgstr "Actualizarea informaÅ£iilor de utilizator..." + +msgid "Signed in as:" +msgstr "Autentificat ca:" + +msgid "Learn More About Crowdin" +msgstr "AflaÅ£i mai multe despre Crowdin" + +msgid "Learn more about Crowdin" +msgstr "AflaÅ£i mai multe despre Crowdin" + +msgid "Sign in to Crowdin" +msgstr "ConectaÅ£i-vă la Crowdin" + +msgid "Open Crowdin translation" +msgstr "Deschide traducere Crowdin" + +msgid "Project:" +msgstr "Proiect: :" + +msgid "Language:" +msgstr "Limba:" + +msgid "File:" +msgstr "Fişier:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Nu sunt proiecte de traducere în contul tau Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Acest proiect nu are dosare care pot fi traduse în Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Acest fișier poate fi editat doar în interfața web Crowdin." + +msgid "Downloading latest translations…" +msgstr "Descărcare ultimele traduceri..." + +msgid "Syncing with Crowdin" +msgstr "Sincronizarea cu Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Sincronizarea cu Crowdin nu a reușit." + +msgid "Crowdin error" +msgstr "Crowdin eroare" + +msgid "Uploading translations…" +msgstr "Încărcarea traduceri..." + +msgid "&Copy" +msgstr "& Copie" + +msgid "Learn more" +msgstr "Învățați mai mult" + +msgid "Learn More" +msgstr "Află mai multe" + +#, c-format +msgid "Failed command: %s" +msgstr "Comandă eșuată: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Unirea cataloagelor gettext a eșuat." + +msgid "Scanning files..." +msgstr "Se scanează fișierele..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Parsez %s fișiere..." + +msgid "Failed to load extracted catalog." +msgstr "Încărcarea catalogului extras a eșuat." + +msgid "&Help" +msgstr "&Ajutor" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO fişiere nu pot fi editate direct în Poedit." + +msgid "Error opening file" +msgstr "Eroare de deschidere fişier" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Vă rugăm să deschideÅ£i şi editaÅ£i fişierul PO corespunzător. Atunci când îl " +"salvaÅ£i, fişierul MO va fi actualizat, de asemenea." + +msgid "don't delete temporary files (for debugging)" +msgstr "nu șterge fișierele temporare (pentru depanare)" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Excepție netratată s-a produs: %s" + +msgid "Unhandled exception occurred." +msgstr "Sa produs o excepție netratată." + +msgid "Open catalog" +msgstr "Deschide catalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fișierul '%s' nu există." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Despre %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versiune %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Podit este un editor de traduceri ușor de folosit." + +msgid "Catalogs Manager" +msgstr "Manager de cataloage" + +msgid "Check for Updates..." +msgstr "Verific pentru actualizări..." + +msgid "&Edit" +msgstr "&Editare" + +msgid "Undo" +msgstr "Desface" + +msgid "Redo" +msgstr "Refacere" + +msgid "Paste and Match Style" +msgstr "Lipește și potrivește stilului existent" + +msgid "Delete" +msgstr "Șterge" + +msgid "Spelling and Grammar" +msgstr "Corectare ortografică și gramaticală" + +msgid "Show Spelling and Grammar" +msgstr "Arată corectare ortografică și gramaticală" + +msgid "Check Document Now" +msgstr "Verifică documentul acum" + +msgid "Check Spelling While Typing" +msgstr "Verificarea ortografiei în timpul tastării" + +msgid "Check Grammar With Spelling" +msgstr "Verifica gramatica cu ortografie" + +msgid "Correct Spelling Automatically" +msgstr "Corectează ortografia automat" + +msgid "Substitutions" +msgstr "Substituiri" + +msgid "Show Substitutions" +msgstr "Arată substituiri" + +msgid "Smart Copy/Paste" +msgstr "Copiere/lipire inteligentă" + +msgid "Smart Quotes" +msgstr "Ghilimele inteligente" + +msgid "Smart Dashes" +msgstr "Cratime inteligente" + +msgid "Smart Links" +msgstr "Smart link-uri" + +msgid "Text Replacement" +msgstr "Înlocuire text" + +msgid "Transformations" +msgstr "Transformări" + +msgid "Make Upper Case" +msgstr "Majuscule" + +msgid "Make Lower Case" +msgstr "Minuscule" + +msgid "Capitalize" +msgstr "Valorifica" + +msgid "Speech" +msgstr "Discurs" + +msgid "Start Speaking" +msgstr "Începeți să vorbiÅ£i" + +msgid "Stop Speaking" +msgstr "Oprire vorbire" + +msgid "&View" +msgstr "&Vizualizare" + +msgid "Enter Full Screen" +msgstr "Intrati in ecran complet" + +msgid "Window" +msgstr "Fereastră" + +msgid "Minimize" +msgstr "Minimizează" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Aduce tot in fata" + +msgid "PO Translation" +msgstr "Traducere PO" + +msgid "The file cannot be opened." +msgstr "Imposibil de deschis fișierul." + +msgid "Invalid file" +msgstr "Fişier nevalid" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Fişierul poate sa fie corupt sau într-un format nerecunoscut de Poedit." + +msgid "&Undo" +msgstr "&Inapoi" + +msgid "&Redo" +msgstr "& Refacere" + +msgid "Cu&t" +msgstr "&Decupează" + +msgid "Cut" +msgstr "Decupează" + +msgid "Copy" +msgstr "CopiaÅ£i" + +msgid "&Paste" +msgstr "& Lipește" + +msgid "Paste" +msgstr "Lipire / adaugare" + +msgid "&Delete" +msgstr "&Sterge" + +msgid "Select &All" +msgstr "Selectează &Tot" + +msgid "Select All" +msgstr "Selectează tot" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Sus" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Jos" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Nu puteți să depuneți mai mult de un fișier în fereastra Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fișierul '%s' nu este un catalog de mesaje." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fișier" + +msgid "&Go" +msgstr "& Du-te" + +msgid "Source text:" +msgstr "Text sursă:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Traducere:" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Spellchecking este dezactivat, pentru că dicÅ£ionarul pentru %s nu este " +"instalat." + +msgid "Install" +msgstr "InstalaÅ£i" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalog modificat. Doriți să salvați schimbările?" + +msgid "Save changes" +msgstr "Salvează modificările" + +msgid "Your changes will be lost if you don't save them." +msgstr "Schimbările vor fi pierdute dacă nu le salvați." + +msgid "Save" +msgstr "Salvează" + +msgid "Don't save" +msgstr "Nu salva" + +msgid "Don't Save" +msgstr "Nu salva" + +msgid "Save as..." +msgstr "Salvează ca..." + +msgid "Compile to..." +msgstr "Compila pentru..." + +msgid "Compiled Translation Files" +msgstr "Compilate traducere fişiere" + +msgid "Export as..." +msgstr "Exportă ca..." + +msgid "HTML Files" +msgstr "Fişierele HTML" + +msgid "Open catalog template" +msgstr "Deschide model catalog" + +msgid "Updating catalog" +msgstr "Actualizare catalog" + +msgid "Source code not available." +msgstr "Codul sursă nu este disponibil." + +msgid "Updating failed" +msgstr "Actualizarea nu a reușit" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Versiunea nu a putut fi actualizata la codul sursă, deoarece codul nu a fost " +"găsit în locaÅ£ia specificată în catalog pe proprietăţi." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Intrările din catalog sînt probabil incorecte." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"A eșuat actualizarea catalogului. Apăsați pe 'Detalii >>' pentru detalii." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problemă cu traducerea a fost găsită." +msgstr[1] "%d probleme cu traducerea au fost găsite." +msgstr[2] "%d de probleme cu traducerea au fost găsite." + +msgid "Validation results" +msgstr "Validarea rezultatelor" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Intrările cu erori au fost marcate cu roșu în listă. Detaliile erorii va fi " +"arătate când selectați o astfel de intrare." + +msgid "The file was saved safely." +msgstr "Fişierul a fost salvat în condiÅ£ii de siguranţă." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Fişierul a fost salvat în condiÅ£ii de siguranţă şi compilate în formatul MO, " +"dar, probabil, nu va funcÅ£iona corect." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Fișierul a fost salvat în siguranță, dar nu poate fi compilat in format MO " +"și folosit." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Fişierul a fost compilat în formatul MO, dar, probabil, nu va funcÅ£iona " +"corect." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Fişierul nu poate fi compilat în formatul MO şi utilizat." + +msgid "No problems with the translation found." +msgstr "Nu au fost găsite probleme cu traducerea." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "The translation is ready for use." +msgstr "Traducerea este gata de folosit." + +msgid "Context:" +msgstr "Context:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "Limba de traducere nu este setată." + +msgid "Set Language" +msgstr "Setare limbă" + +msgid "Set language" +msgstr "Setare limbă" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Sugestiile nu sunt disponibile în cazul în care limba de traducere nu este " +"setata corect. Alte caracteristici, cum ar fi forme de plural, pot fi " +"afectate." + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Acest catalog are intrări cu forme de plural, dar nu are cadrul formelor de " +"plural configurat." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Intrările în acest catalog au diferite forme de plural calculate din ceea ce " +"spune catalogul cadru formelor de plural" + +msgid "Required header Plural-Forms is missing." +msgstr "Lipsește antetul formelor de plural solicitat." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Eroare de sintaxă în cadrul formelor de plural (\"%s\")." + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "Repară antetul" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Eroare la încărcarea fișierului catalogului cu mesaje '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr " (modificat)" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "Curăță traducerile șterse" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Doriți să eliminați toate traducerile care nu mai sunt folosite?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Dacă veți continua cu curățarea, toate traducerile marcate ca șterse vor fi " +"definitiv eliminate. Va trebui să le traduceți din nou dacă vor fi adăugate " +"înapoi în viitor." + +msgid "Keep" +msgstr "Păstrează" + +msgid "Purge" +msgstr "Curăță" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Copy from source text" +msgstr "Copiază din textul sursă" + +msgid "Copy from Source Text" +msgstr "Copiază din textul sursă" + +msgid "Clear translation" +msgstr "Curăță traducerea" + +msgid "Clear Translation" +msgstr "Curăță traducerea" + +msgid "Edit comment" +msgstr "Editare comentariu" + +msgid "Edit Comment" +msgstr "Editare comentariu" + +msgid "References:" +msgstr "Referințe:" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "&Bookmarks" +msgstr "&Semne de carte" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "Text sursă" + +msgid "Translation" +msgstr "raducere" + +msgid "ID" +msgstr "" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "" + +#, c-format +msgid "Translation — %s" +msgstr "" + +msgid "Error:" +msgstr "Eroare:" + +msgid "Source file" +msgstr "Fișier sursă" + +msgid "Source file occurrence:" +msgstr "Apariția fișierului sursă:" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Eroare la deschiderea fișierului %s!" + +msgid "Find" +msgstr "" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "Doar cuvinte întregi" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "Găsește în comentarii" + +msgid "Close" +msgstr "Închide" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nu se poate executa programul: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Administrator de cataloage" + +msgid "Catalog" +msgstr "Catalog" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Netrad" + +msgid "Fuzzy" +msgstr "Aproximativ" + +msgid "Bad Tokens" +msgstr "Jetoane invalide" + +msgid "Last modified" +msgstr "Ultima modificare" + +msgid "Select directory" +msgstr "Selectează directorul" + +msgid "Directories:" +msgstr "Directoare:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Doriți să ștergeți proiectul?" + +msgid "Confirmation" +msgstr "Confirmare" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Sigur doriți să actualizați în ansamblu\n" +"toate cataloagele din acest proiect?" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "Arată rezumatul după actualizarea catalogului" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "Pune mereu focalizarea pe cîmpul de introducere a textului" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nu lasă niciodată lista de șiruri să preia focalizarea. Dacă este activată, " +"trebuie să folosiți Ctrl-săgeți pentru navigarea cu tastatura dar puteți de " +"asemenea să scrieți textul imediat, fără a trebui să apăsați Tab pentru a " +"schimba focalizarea." + +msgid "Appearance" +msgstr "" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "Schimbă limba Interfeței" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "Memorie de traducere" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Anulează" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Nou" + +msgid "Edit" +msgstr "Editare" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (recomandat)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Căi" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomandat)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "Comentariu:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "Curăță" + +msgid "Clear the comment" +msgstr "Curăță comentariul" + +msgid "Create new translations project" +msgstr "Creează un nou proiect de traduceri" + +msgid "Edit the project" +msgstr "Editează proiectul" + +msgid "Delete the project" +msgstr "Șterge proiect" + +msgid "Update all" +msgstr "Actualizează tot" + +msgid "Update all catalogs in the project" +msgstr "Actualizează toate cataloagele din proiect" + +msgid "Edit project" +msgstr "Editare proiect" + +msgid "Project name:" +msgstr "Nume proiect:" + +msgid "Browse" +msgstr "Răscolește" + +msgid "Add directory to the list" +msgstr "Adaugă directorul la listă" + +msgid "&New..." +msgstr "" + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&Deschide..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&Închide" + +msgid "&Save" +msgstr "&Salvează" + +msgid "Save &as..." +msgstr "Salvează &ca..." + +msgid "Save &As..." +msgstr "Salvează &ca..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&Preferințe..." + +msgid "Catalogs &manager" +msgstr "Administrator &cataloage" + +msgid "Catalogs &Manager" +msgstr "Administrator &cataloage" + +msgid "E&xit" +msgstr "Ieșire" + +msgid "Quit" +msgstr "Termină" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Traducerea este &aproximativă" + +msgid "Translation Is &Fuzzy" +msgstr "Traducerea este &aproximativă" + +msgid "Edit &comment" +msgstr "Editare &comentariu" + +msgid "Edit &Comment" +msgstr "Editare &comentariu" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&Arată referințe" + +msgid "&Show References" +msgstr "&Arată referințe" + +msgid "&Find..." +msgstr "&Găsește..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "" + +msgid "Find previous" +msgstr "" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "" + +msgid "Find Previous" +msgstr "" + +msgid "&Preferences" +msgstr "&Preferințe" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "Sortează după &ordine fișier" + +msgid "Sort by &File Order" +msgstr "Sortează după &ordine fișier" + +msgid "Sort by &source" +msgstr "Sortează după &sursă" + +msgid "Sort by &Source" +msgstr "Sortează după &sursă" + +msgid "Sort by &translation" +msgstr "Sortează după &traducere" + +msgid "Sort by &Translation" +msgstr "Sortează după &traducere" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&Întâi intrările netraduse" + +msgid "&Untranslated Entries First" +msgstr "&Întâi intrările netraduse" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "C&atalog" + +msgid "&Update from sources" +msgstr "&Actualizare din surse" + +msgid "&Update from Sources" +msgstr "&Actualizare din surse" + +msgid "Update from &POT file..." +msgstr "Actualizează din fișier &POT..." + +msgid "Update from &POT File..." +msgstr "Actualizează din fișier &POT..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&Curăță traducerile șterse" + +msgid "&Purge Deleted Translations" +msgstr "&Curăță traducerile șterse" + +msgid "&Validate translations" +msgstr "&Validează traducerile" + +msgid "&Validate Translations" +msgstr "&Validează traducerile" + +msgid "&Properties..." +msgstr "&Propietăți..." + +msgid "&Done and next" +msgstr "&Gata și următorul" + +msgid "&Done and Next" +msgstr "&Gata și următorul" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "Anteriorul neterminat" + +msgid "P&revious Unfinished" +msgstr "Anteriorul neterminat" + +msgid "Ne&xt unfinished" +msgstr "Următorul neterminat" + +msgid "Ne&xt Unfinished" +msgstr "Următorul neterminat" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Ajutor online" + +msgid "&Online Help" +msgstr "&Ajutor online" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "&Despre Poedit" + +msgid "&About" +msgstr "&Despre" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista de extensii separate cu punct și virgulă (ex. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Invocare:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Un element în lista de cuvinte-cheie:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Aceasta va fi atașată la linia de comandă pentru fiecare\n" +"cuvânt-cheie. %k se extinde la cuvântul-cheie." + +msgid "An item in input files list:" +msgstr "Un element în lista de fișiere de intrare:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Aceasta va fi atașată la linia de comandă pentru\n" +"fiecare fișier de intrare. %f se extinde la numele fișierului." + +msgid "Source code charset:" +msgstr "Set de caractere al codului sursă:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Aceasta va fi atașată la linia de comandă doar dacă setul de\n" +"caractere al sursei a fost dat. %c se extinde la valoarea setului de " +"caractere." + +msgid "Catalog properties" +msgstr "Propietăți catalog" + +msgid "Project name and version:" +msgstr "Nume și versiune proiect:" + +msgid "Plural Forms:" +msgstr "Forme plural:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "Învățați despre formele de plural" + +msgid "Charset:" +msgstr "Set de caractere:" + +msgid "Team:" +msgstr "Echipa:" + +msgid "Team's email address:" +msgstr "Adresa de E-mail a echipei:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "Căile surselor" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrage textul din fișierele sursă în următoarele directoare:" + +msgid "Base path:" +msgstr "Cale de bază:" + +msgid "Sources keywords" +msgstr "Surse cuvinte-cheie" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Folosește aceste cuvinte-cheie (nume de funcții) pentru a recunoaște " +"șirurile traductibile\n" +"în fișiere sursă:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "Actualizare rezumat" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Aceste șiruri au fost găsite în surse, dar nu erau în catalog.\n" +"Poedit le va adăuga acum la catalog." + +msgid "New strings" +msgstr "Șiruri noi" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Aceste șiruri nu mai sunt în surse.\n" +"Poedit le va elimina acum din catalog." + +msgid "Obsolete strings" +msgstr "Șiruri învechite" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 noi, 0 învechite)" + +msgid "Open" +msgstr "Deschide" + +msgid "Save catalog" +msgstr "Salvează catalog" + +msgid "Validate" +msgstr "Validează" + +msgid "Check for errors in the translation" +msgstr "Verificați după erori în traducere" + +msgid "Update" +msgstr "Actualizare" + +msgid "Update catalog - synchronize it with sources" +msgstr "Actualizare catalog - sincronizează-l cu sursele" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Comută starea traducerii șirului selectat între aproximativă și exactă" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Note pentru traducători:" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "Continuă" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "Nu se poate crea directorul temporar." + +msgid "Welcome to Poedit" +msgstr "" + +msgid "Edit a translation" +msgstr "" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/ru.mo b/locales/ru.mo new file mode 100644 index 0000000000000000000000000000000000000000..d2eb78d35f51a56ea44bcaf93b64041cf3cc0893 GIT binary patch literal 59691 zcmc(|37lL-x&Gg>6Io;xT;PCYNFXyLfC$4HvOs{4m<0qE=*)DIF*Du6^bAQ5F%Vf3 zz(h6?5(2ngL_^3(5+Eq<3fG={-4z$`x?I<*@^iT^|L^m@Rj1GC=`48l^KUqLPSvSX z%UkbOZ&mkvZ{MA6FYq~dheF{s;E!HWD13$cj~=GnLgA-l3Wb-0KLbaAFM|8&L2IGV z3G5H<3oZuF0hfc9fZqW30^iV9DC`1G2KNM~f~x1uA%8BoGwB|1SFj511->KTO`x8? zFW_o$H_{&f)sK$_d>Y)5^w+_Cz;6fq1*rG`2CDv@j&a-rRJr{Fwt#z(J~7}VQ0>eB z)&Dn#{5jy>q$}V7;JX6e4(>(zA@J4Urhs1u)&6e-{t<-4g}(*dd#pcCK)u%z@Jw)j z(r*h`1rH>BL%`Lb>iq=xTJQ-_^!PS-2>2`TmEfM^{JoK&%AEpgJ}(B_!MOp~fV-3a zE~s(;IN+~AmH#6s`s{S9k8>YzZ_){<=VQTx!Baq$y8skDIzW}{1J%E4K-GT-DEh4i zcLE2&Bf(9e`0#m9_5B?bzZ`rVyaXNro&dfDJQRE{I2wEuRJrE@{uF#G>ED6-f^R&& zP#6z(f>Xc`f|}RgfbRtV0IFXDulM|`0$vLqPX2Q6Rp7@#weuxV{PZ;t)+#&)s+~RP z+&1|^3ZL5=70Agow;9@M<;dt#w55tdy_!T&-tMGKNCCv zoEy?thV-qV`0fKBtXKF9cp&&d%Rw`h9LlzbW7Xa1!}ffttV1fTx2$0X2U|p6vA;3o1P!q|XOM_e((a zV<~tpcmt?TiEYUmx%`P~%wxil5ej z8s{cZ^?wS~e19GkpM49Q3+{HR%SR>Pjo<+J4}hbHO}h;-Ue#?YXYtXH4jgLqW|YZ`dJXOSoj*K`S@nQ{{}^uzkqsg*E3xo z?hUG)SA(M8DDV*QL~sZ2Lh!HP#o$N4H%;*Oc9`h%x)=B=@<)M^w+UbZUIeP0D?rtM z4JiG4E4UN*e(-ScJ`ffyd>U*4{|>$eY?$Zh_3NYH zvET+!^Z0X6^ZZ9p<@Q49h%a9k@K|tH(&ItVV+yEp(*kyaD!(|SZvaKld%^dBkAa%E zv(NMQ-vX+=IU&6WER((pWGV~41a|?Co9gq~4x$PQXM^g;^`M^L3aXtuz&*jW;2Gd% zuoe7!NVlHv^ecm+=e3~v|4_hBg6hxLK-K?qQ1$)}+!Ne$n)Ai0L5=?iP;@>D+zFfn z>b-M9dItD%(iehyzau=qEaWc^cr7@B=PN+zwR^x(;KxC=^G#6m_dW0m@DHHI-8VhV zFQ|5|3V0K!`tAVt0M`Wk7%08*IH>Z^f-3hd@D<>XK*{Zkp!CE+Z}joL0o-eJg9n~2VV*PDx`Or<^9|jRQn@A_2*bn{ha`cUT*}?1>Xej4?YO) z1#SdY?h7IR>mmQ=A^*>y+TCq-p>PYhKPdit0Ne-sFev`n1nv*M07`%U5j+|^-~!hl z<3U)vFcCZvd@pza_zWn%dmdE3e+oVg{t3JbeBwecKl@Eihg-m(kpB@7)l*n;5o;Fk zJ75Rcb}?fGSAwG3k3i-B9mHf6I^OK#_yDN+KmIMQ2QC1|kp3)q9{5}EQt&y zAWaln-p1MuTmn+0@GGz#Jogf08@vu&0Ump)+oR8b(yN7{zjq=?k-`T-x=`3u zK+)m7p!no{;2*$`fJcFA7{qJ9XF$!z&jP*(ijFVqbo##%+?VtiQ2D2WM}V`z1Hmi6 zgTNJ_%KaNCzIhT{27U?L5xk(}e0wpt6X`PeTCfTx;0jRhuLGrrJ`3&uJ`0N9YM|u( z8{pyK^PuRv^IUKL*nsDP8gC~ke(VQT-%?Qguq-^k2gIc+d=wNNegR6}cc16ud|kkk zKs}!Zz7FgLVWq-*K#l(=pyd2-p!&b-eDCM0K#gxCD88Nms{Ppk=YqSCUI^|AUIl6% zt^;=iSAu7Q?+1?qe*|jY59)F~F&!L7`eKl&FDwVI1b+pJz6;*&*b9pO10lT_6y2@@ z6YwEW<9G(#8GHd$KYteT{|p|^MC`M`$8kK&s`;J_s{KpA?}IDAW5CPGtYN@4;QxYW zRh*s^dcB>Cz&7%GLD6M3sQG#X6n}jxq`v{4O8O@OM_v}}5V$+}mw}q!cYve7n*u%x zs=n`nC-^bZ3Za5 z=n8l_*N1~g zl0FSozvl+LHsn7T@EP!Ep8q~PPZoRm(?PxeHtPP6F=(#ZNy5Tfp6} zc02|YUtIu-|E~l^=Z8Se(^H_v`2si@Jop;tpG(0rN#6}>9-jk6-`$q_IFAQa?~IUM z1gbxGfGYn1@D#8Hz7pK?-EJR7f(hvhKs{dwBI1Sh;H$voT3-*J42mxw0rv+#4Nd~T z362F1xz5wmK&5X7MW@e!Zv$U*z3Z=cfRfXX2mB^@66u%S;PsviK23T$xHGuljo$9T z;44TU4IT%c0&0A{;OoG5fv*N10ACJ11-61;4)`bV64FQB42piwf#S1$R=Pet3*3eDZ17Oe_dxYy%x#`u0mX+K!1KTtz=y!Gx4RzyF1Ro0AA=Wye+u}|9I z_r1sIf7-p??-D3JzX3b~{3zH44uSiFg;hT813>ZN8$ij+1n_8Z7I;3m1UwG>3Ml#B zakcByL%`ih9}j9gr-5p(6FeBa0emfZKX@|uNl^Uv7f|KK-{f}+a{p!i{je{(%^3@G}&3snBS zpvrv-JOcb#z`YP2(eF5L4{$O#7MvOI-JtZxAgK5M1AHC$Kj0?tfR8#~)lh^z z4LV){YW{8x_zz$3`7fi2*R z;Qruie&FLA2kQBS;A7yGpxQtFhhF}j;BllM1ZRTZ1P=qpJnw$_`QSaI9|lhZ&w0W1 z*iuk*yaUwup8&^#&w!GTzk;s3QI;U@!O@a1p5YZwGG#KLARv9P?l3 zIPe-!&;JTu0`B=^XaV+sFM=oh#OodNQ=iY*gFBKx5!?wp8=L}81zW*8LG|ym;LhN$ z!9&3p!2`epeuj+$_4xwV7r8cZ-Oshl4*bJM{r)Z2J3_%n;|t`8hMyySH`fu|{}0z2 zxx~}@yq4<(?)yUeY0Guq-!tSX>vrz1%il~{S0s#&q`ddkbOSIzlq-#?&SG*x%Al$L~Jdt`#x|J z=^u0bntRc-pDTX8%FUm-UK8Gp`ClRZX09i=K2PRm@Ib~fiuR(0rbKLiWdvNW{HIMW} zuGQS@GseOGy^Or;L%uRD=YB5Nk=*}@YY*ytg!El{7(P#vUdjD=;0@rnz}+bKUhre2 zf50_?`#ZqjgExb(0QEVEOZw(YCHVZWL*caWd_}4dh{5jVg?qA9E zSMK$>f_r_Q0e=Nf2VZYF{?G4$+qfPl|9tQVp}cg?Z@BasN8TU7-MK!<^%pMbuBSrT zmxsRmoxJ$@cDw=K#PuVt4^UpZ@+$CaT&HmV7qAV~N7ek5^jo;}`6c)u*Wp}!q<_J+ zgiD`=TvN%vkn0}q=YzAjYTWm7E#=au$~A`k8Q|5RK36%U|K3FYm%_7$!8e8bb>Nd+ zd(*K=;C;Mt6W6KSp9-GFrOz+99<)3E=OW;Pl*xWRLHYzT{svylHHG^#xOU}|zwkOP zeg2JWFRl}n$b1gqowt%cn`;60cY^N@&wolM=R=gc z4lHuLk}_{2{ZsDW&-Ga@eg2EQ|KvJ|>n^UZlXollZLa^}>L9&>>jLiI$Mp#JYrwC7 z`drEV^WdSNKHmwr7q}m7KIYlxOY3%5@;}0LAos1{cfpr)Jxee}d~d^8Ql~`FxZ6J^a@GEs^fx>Ir#Y1J`7p z>-Kq`>+=}+EZ7p#t=wPAHG=dxT%X}ypAin}zwhGi1+Ldq<^it#xPHTR4tYz#KXLsn zlwJi6khTwa95*w;FK~^D`Q-ha`!l^%;jobZ>X80B=^ur>_2k{b{Z#Oa;3eS4z-oAY zANXeS-p-}Z(Oidc?LdA%*FB-!k>K83@8H=d!7|rm?)ABZ`(JVCvp;w@_%^N`xh8P^ zJJ&(*gFZL#{Eb}8xj#3&(+xgB`VZi~Dil8dPI^z?JAm{-Ty3O3&-E1ddy#)D_!-js zaQ_DG-_5-~mx4!dUGK@le}mVA`&Up_pMAJK$@M5#_VZp6yYub=q1+kV@5uedpg!*h zH~6isB|gmk|0AzGJinH7Pq@D#l)H%ZbnYjDgItTb#&T^WZ!M_LWN?AsTFl{Q(%%Tr zR+C>0_aEneG}m*X?0Mi$^zTfbU&#IOT<_%mWUiCA{*6nY%ea2Vbr#oukasj!nfv&e zP5K)oKEU;G$XpA4l>9m1q>wik98cbDT>88R{ByXkfcKJjFL*xJG2H*Ro+YDtDxF<( zyGos-xgRK3iisfo| zvA?TQPI^i`mA=Jo@de&Z7MA)-+x<>oU!~7p){V8>Rjm$`l7(IU^M^Gyw=z)fw6?4e zO>M1ISJK^8E+v(@>P#s)a%A;L8&0{>pLAD>oeZg?($`n&=GoOS-}WL~MipAyN`VtJt0ozLruc@^^e zDg(XAnTwMNm9k!lIdc{>^pJCQsk^t(a(-!{)vkUdrzs82s!w#t$xMBrWm?$?>=lH> ze5-9*Z>en6O)pk8%p9RI2`|%Ey1c70P|Y_-DbLL{IlZsaTk7kF&HUAYzImm@iP@Qb zA9_!>XPrjq&MeRJY(}XQ>db`y`FDP0VKO5#k(QC2+1X{4o{fw+-@`bQNQl=bclA}F zYVMhYNzdknXT6=pegs0&GqW<#XUsA?lUa?K7Zkg@tZatvbT-Y7?IU-}?kX)T7*lsu zjYW&e<*Fc=K5dq9d|P4E*rZ%qI3^jJROVDG;<(X;QRkJ4eaLME#x9CwlMF-g7)EGM zMs|%!Ur~zu+0|0gS(;lM=tg>q<#_|ed8)0iblE^xAEUhx{;VvlCMPD9KDAov8(lah z(ahU47EYPdHSe^EeZ_gk?h~2EWOAjuv(#5j&PIk#IY!S%jNs(~T9TSMI+-)j-(M*= zyxOT(=Z073Z|l{8a=F-3>O8Gr;+c%B7RGmUpho(+>Fh)V)`Zsv`YSycn2ut1H>zrWsbc}dgEdTS7=8YErKcC7BvYpu z#gm2eOXURP)>WQYIJ1aes4OTUF=rNGtlnb({Px0`rGBIZ-jgVqDl9@9^#-$6s`iV4 zlewj0Kf|pW!*=!b_Ejz~iCL;+#F$A>ad9#S8A|4KArYl&HL3O&=X96a3TO7wa-w;I zK$H7Wv}CCdNk_52*j<@t-E2>Ky9fH1at79u^i=0n`;GTI&8kT-$?NL8#7i}=p-Mvo z-NnA)b@W%T5lDxd$i|u$Vu`Q{L7vCJ6~&GYI)k2Kz=$}5W}@L=8GcBE7qGCzfMlv< z&&ZWyFmS~ci`$Y3Hb4FI(LlzIw4Z5ok?Xj`G(Vk7AFNa-7r~U zg4nEEAZy#v2kp@UrJmkOUlGYlWsEnyNNG{2V}LSD%e=l~4_d0qquwqE+;v5XTcdPD z^qqS?ZOO!nadKo}IYB{!s;8&LsWsS{m{m<$u(l{Y_0{So2V0xZNsG8h&YqI$N{){e z`{4O@Zp6+Lkyde2a(-oD$U2L0KwOj!zR%2F=q(QR;xU+Kq`hC8tia{sy`4uVhj=Hy|iWyq~#U^Q5}m z*3x~LGBhVI77ArN3!0>SpA-<*hlC^|nKjiFi|HT_m+Iw#jW)s!ugoC@UeKzC>PNOx>q3ywrjp_vd$n0XGGNj_g+ z-#~AF2_HIr!T4W>3IQV91rH}6Kk=R|t(b8_V(Er#Yw+!uM4sCmJ0GSgdQ>b+Kgc`p zuAt+)t_X_>6DO03UKFt@M)5{R%1vDeYo-TqO{Kdnc-v@K)PAYhBW28JtBcDWI73E_ zDq2gTirVT=Lbn)ge_!{}g$V;KbQRxyB62-PMxu%ap@V3hDqo@szPdx?8dfbKL*f91 zZNL+QD}ejQdtFsVvDkdY#YxMQiPbbqE@I4bbp(NB>Y`Tatk7XhiW@xEBqMkn%}3QG z+Gkeno?d8BY8k5>x;Csx9}72#scJI>#ebL&g{1t;6($G2!i|#N7k`=09B$<}kDrI- z49~<$@m9}@@!9iB-Y0w6w*czl7;tM=AT=Spv{02SENfkcwlID)VTmjhhA}4XEM12) zY>shE`l1R?<`g>?w54@PPJ>C$j`H~>AIufWK9j^S@iOIR`pm9{=GzLBS{AXc<6jID zbi#R^HT68HA6u*GpM)izJC&Y_s?t)qM>(x%6{LFA3P-N8M3&8zA@x70r`XlqUYLaH z>GOY+$pcL2OzdZ=tQ=d21pObK4^1vryGp=9yJleo+2Rl(mY**RiS@LlZhzKmk?Vvj z?V50*7$>}QBx_@HZdxbf+*FhKC6?QL_+*Q#X*0HVpX3(Gmr=0;_9WOYUqm%~Vqu2h zi!j2zI9uox{95chK3-S1t>;BMs}IuydGOk*@Mqcexw*Bh65-40K*xOPrjo=Hf~a#A zDi9m>pjFTyafr^NT7SiYcnoC~6!V66vsviZ!$LNKqJn`~p2;-gkS>PXG_i}!Z|XF6 z6_Q16Ge&doI&Xd^g-mn(GlnTBzrX=3LAomo)pYcyOi_iG87uzDKrhW95Axrug~^Z* z!it9xH*>N=7FJlf17)0a+%TInk9vr?Sma_&>P1biF?gz1^|=R?EzwibQa%PYLV;Wz zK^JCZHAJ7hTQXs`9PX@?s!~;@MdE|PIF$`$P{p0C=DwQkad%TZgB*0W zjhK!TBpV^AK-!5&!P#~3&~no&Y**9W_D?dEfR*SztL`b`KFdL9nKf0js-j6xD3uxF zODZ*Ms@0>0wp>+gkJV<^6%_T>%bmQ6LbW)Q-K8scONkUSO4zfGQhY&HC@41=MK6;P z94zr+Ju^EVFKO{Dd#5)B2qt$eO3n*`1qv;yd(KKogwHlDV$YOxrBaZFAw*G_ti?#- ztWvqeqDo&{IE$5VC5aI@74e)oAtt9BY41cFQZ1a_g-)h zXpu4_vgBitN#rINro1l{La_<0iahwMUDXj~eE3$DQT>a}8?@#n1n{%eO;SRwcl6^{ zwI#E7$-+X}_C`oOmSon%0jihfrksM%#5`O)98IO>C@9${nLvt>T>7DxJMfIV$}yzd zOH>Y~8#CPTs4pwsd(k@Bl{G6dv=0=*L2|dHvn{!Zs;z*TC#V^FZNZ}+cRrFXqs3x# zXo{T*`N}_V|B3bOfEM`lbY5BEuny$9FhxsFS=Y2e#R$an&7YurItx?6Iu{bu;|k=; zgLSU(P@BjU`-ulRrA){G6)~mkkvkZI4wNs)Cl)KU7tSq}dJ9n~k_lS1pry}8#U!Ij zZS&e-n@i3*b9B83!R~Au;zzWevZ{Ise}w;FJ5kp2rZNYa+r%Swah>R8oQ%;*#CTPB%O7T^B>p5e zf|R{P)MNq)!B%Ne_c z5d1N$JjLK5ryjVm4-dqP@j)0Lh3J5L%|xI3dORb;&4u#`e1w(LWbK40Biaod@otzZ zjoDdqjjAAS*706kg4vduD$(xYP)^} zU|QJYh#XUxRxWW#T+9f|7--)6`@}8k_+@OKb@eY6msyu^jkH;ohDEhFP6-uvKe4M? zLDkKbML~Tv3cvU)$f;ougg}dRfcZ8{pIiPGrm9p5ngE<)Lcx*A*|ehem?V ziYrbzAVqpxEaP?6+cUG+gTcBSoi}2ZL;?kqTa%B8f#{<7Xpz2(5n&oaR5i5OR+vtF zSJQww&@`AL_5Dx#*ZO4go6PKAjG>>-Rz$TBmJ=1twp^@q;%r@B?X8$KN$0i;mjO4p zjW{qbh@Hbi#C@<}HB#5f*Gv|ySNxt%2BFgGMeJb=V~cD#fLOSy+(E{M*$IB4dc=5< z(Jo>|G^<*)a}mI_6(SgP7ov$4DJ?Q(shZHsX71EnWH%ZbC=XPTKNIDV)mSIh_||z? zOSWRpLbScdB6xkFK!|w96pACWV>GvGk!c#Y&td=sCiVIxBXP5ecC9_RNs^^v)m(Gi zgUs@ZvwB*(TqKaL-c3rC?&O9PZ5iK{pPcDG?q$e6#2{zf)QXiAz z#9dR4F)OK15hYl56Wp?UbeWa)&eP%y4TVVKRm*hEI5Rzx)gqdP`^;?&`z(&nG6V2B#IWpjvIL4n%rf?x+1J7|E*yB=cX^i% zGt9(c%dWDOj%yZsm|bw|VZDm^U31ySwgVT|OGS<2a@%s#Z7(rt*dO!qGwTa+FF7y= zE7(8arpU7J5$0=AFU3<0i+FpGPk2RI;rqh@ZNjl+oU7GrR9LP^3p3@6Oes4~W6!`c zh=2za`QjSFvTz{nnW-bzU+tuP&o;dwiw4=2VAJRrHyEBVv521xeeEer3r-RF{Tl}= z>{1tIDg@0sg0n$rv}t_=qUw1wZS$y}o>kXo^-Rih~y530h0 zzMq-R#D@)`LvxZ$^+OVT{<^+UKqUHTQ73z&Ua|4A+rk*toX_C}IqC{AGn?#Wp{sFr zW8dUxWxFBERlJCI-&z>@tHZmXlYD_s~^!$3?atWn+U2o3cih zR1W&ZHZ)UI3x%2e9E{1PB(9M{=pFH%t);}InvufHyvz*Do5$G)mE=i!A2x$B1PxJ@ zY~86$Yn-A!s@E3FSQ$>&CFUBYCo0B-NIL|pAAul>6pvI`Op4AEu5hnqCR=$0{o|{X zRKm!a&-n^%*Gb4TgB@N_lVEF`?Awi*$y^I~!!nC;8W)9K1Dwa4l?mG!qYfWgJ)BiP zVb@vaJ2vsfnNc~a(KEIA3#S|0FUa=U+-@w0R~Mh;#Ed145>aZiQ(me4^m{pDd%YYG#WTB#D@%`DeCbynQS@XJW z_C$s7f)$OCEgf<}l~PaanCY0hA5E-W=NHtiKume-<`!DTQkFiVh8MLq$UpKG4OMjx z^mh9OjMm|q5VghoV!j1FP#A}5!?sx4Eo>6gnb)_|-<<1NT&GUGU-R-H|% z#kmBGT(q}5$N!8r(mMWOu4?SH(}>fQF)(a#uu*eLFsAKqxvMEovqcN4$6cY(%$!?e zKL(b{C-%eXWouV0lDrKR2@xG4FPvF)3xpqSo^cdIxE8?(+k8xh>pJOAlo#9=HGo>6 ztoG^LX2PvbnUUcrdlZ2923)aNLF|`Qi?(Bm5J6nO}}f2SSGfGAJW;xN0sWRwU?6Qzqe@4bPdi z7(E?qRYYcGHzU0n&Xo=S9{9Pmsj~; zBi636?3ApK2GLy{z|pfu=>nr|#7LbO?4_Kk4ZUaK3?`37mmhxaMlXy!*Qy|nGJ;2O z%ZU8RF<@?%w!Lnp{(9wG}`FeUE#zny@+Z?f*WECuGoSKV4Jc>j*ncN9vxPh z%idb4FHkQ;+F^6~;5HAUrya{_ST2cw>PC{$IAfcLr_ARCY_c*P3*nK_rtvtvDfagl zS?kzzWv5Vw{6?5#h>dpvVS4M!M{98&`_JXJWMoHnLL>Q!;SEIo*q+v4yN=QbDaaB% z%1kT`XfH0uG2&Hm%}W?fL;ZoFs9dMpa+SwNg;|w(^UU#s1aYq<5L|QR8weQ^^8yRM z!YnP>UA>7RJWYJt76egj(M0ljeRDfH#+qKu!dc;aLe<5vNsqIVR9EVe8#4u&Ds_%9 z1(lhl5EI5?TX>l*%YK-duM{C3_DvN@X*}Fb5Iw{g*pbnuS~$Ls6f1n4E`daIc04ib z)zR8gBOD6fXu{}nj{+L%dMD0lH=eJUJ5)=lk;J=A1vkyClc=P#O16E=zoWQDjvSr7 zf?2BHv(pmmmtQf3Q{8@&B%7Otv$B~}?W=FOw-KZko6THq2nDC{-gJ?ftqtLgC(g6k z)%rplC#W97iE)WcR_?hS&ErV0t?Q7_xDk+=pv)}Sy%4m938yT5ss=P0I;Lye0>OGR z6?qF}T7s~07z2~Guu|~F6WCre{&!4?Lb$qxoT7B*UH zuQ%Q3^``54y}mpqyq|r*3o%{wSYt@4_jFxeQ|L!M!{ZY5v?e8XHpDEF2`mK{XkY5c zc=qwM(~dO3>h!aap&wy^r$tn%U34OLc5mvm)ftU%^zZ}`=F3HFu}H@$sDP|wb8WMJ zF1}KGHrLh?_7xYVW;G|JuHOBDxHyZ0?)La|@<3A~D)CT$|UGb$> zGaD!w!TbgmH+|#%G9E#LO43~_3m32jZ2S^#^vFHWYT*Lk6%or_ShORz)?IB|! z@M8)=O*b8G{b)!t0Z%K!P}tY!{FoOqNLRw*pJAtNtG>zCW{sPZ134_x7@nsy=1W5j z+T0tD{MdVbMoBf)4`xT(&DUU|jBmx`JJBTtTTJ(dchg;|To}t1H|9x1w@@)g$$<_S zwMIpV842Mz{He3fuYXt8*dVkpoDY0ek_{obx+d_KJ2-G{M@4TMT zYukuzW%?wexUhsqWR=8GB`uvSgwj^HxYSoETwJO26pG#bg$@p@6r2R{z&@MF{)MMt zBt>gZA7TU$+R+7DrIg)Cubz7B$svAv>Zo#ZS~70*$pu%dTGm;2+K)LVnLT4lp{k9R z!a#WeOMr4+(pVGqU1DQ6gOdqbp0~lqad)tFN@r`30KThc^^G8W$fiT+b_kv$zz8&4t9_FMVQQU-GHy?f9XsxX*0CqHjvbebJE{HH6OJBx?AWmsY}HsyaKJ{dQ*eeCO7#~x3)h8b>8F6aB_mv=2lPPx3;!QC02Z0o9=Mp^%IYO7+Q z?a7P*lvS~uX16DO1DDL0J!0yVsgvr%8`m~=!~`@HV%^GjtLU(F*D>r*c9l<#D}htZ zp4H1qNpcvbbrNUjwbpGJ)1^4+(@s4$K04*p<8?dAik&iUY;xt5{t9Krj^>?lymRd6lSjO%)la^19;2O8 z3--MmO(qY53TnkVYil>1%leZ@GSMdU!ekt^_T(7*icYC|OyKa|O8*FcKA^Ut_E_zS z+F++S(ICw+>xX+n~fCbq?0n)i&4GbFE8ij|?rVJziUzkoTAsTPu&RUiHxO zwwF{Bt%RC}mgQ@zZTP3v#PIC*3n0=BQ1Fr3rrKJgKt1ggiRsO?O@-RZMgj~b5PNNH zBeY-wAc98z6cpM_m5-D6L~Sj7-o|@joVoXgmTmjJ+UDWy*$*f%zt>nN7*#U#ZtJ0@ z$b#_39`#uhOFTNXWN2ya6JZR{Vlx?<=1t7{leNtamHvyXeEOl0)u$hij0HP1bP;lC z49&V(TU}dA$6;9b6cUKCd_}*uD$WWcwWmBMdkvg680K!n(5(ps4YQXi7d?sEoxHiJ zMZC@{n~<0m&r&lqww(0cOuXbv46u%_cC0oED6x6~e_UmI(WQ|rCDQ_DI8(^9(+et-=a1adBR z(w(?}bJmu>l!B{+=CDS1@x733DHS%5%iFNFpQKf>pqN<$f9Y?mvDsWp-zDCf@69k1 zlc9<5fv(BXctdR?Ke|D=Ea8<&H#3TFJ4&cA33O;2oyH_H;|z&h*jIPfrR^!Tiqe}R zpLxeu+N`Mh$X3I6pX!I@>E)W3K#aA_nCnJ5HhhHJQN{&mGkoI=vetX{0K?lbbUj_( zj83uMB}}!+fNT_0ScZkllXPeqz5U1ETrFNzi;OJNgV~N2FwIjrctI*fJb;YxpX`^* z^EMu98qCy&`XFzpjyi(8CoQI&>ii-?XGSe$W+qrN4^v<@Py}gfb_fL? zxkNmONtXj~ExGIM*`tzd2|F{yB>V%fh*#8xSlj12Ke=MWZ5LTd=hhdZ_BSWyRw{jb z=vGM!T}DASm?p^ng!ZLcQzN&z_JsZ3ijNw_e64tBnsJ`rEoWDWAl(9-1Se`U=u=%Ddrlq~dbGjlCNUV8vhk>(5gE9B-aN!-<@I)ZO(BhgAvH82m-PijR}l?b|~k_Tmk*lLX~71%?oB;z)xGs16- z&`+o!)s?a6Ui*du`dQ0S^Qw#`ZMhIEY@xP-{+TM~nVcNdH~nU^R+u7L+v@L9^@h*_ zv!Kd8q2brn?nYZDiiZPBU1u-oou$acQfBl9AMwzwW9+pA3T|d;MT54MaeBG?AWP#G z33@U1AYf=;d1t()^-E^b*3mzsuGBJ&AGqHXJ^c*~_Y_3LqM$#mv$m);#*ZsNs=)bS zRyAkzt+uvZbe7Y^Y^%eXJJx~LHbf<@9C--NM`|JdMw0l-MX+w}C{8`D(sMs{^bhw* z>oYmd?qdFa zDQk&%cb1djxfbUTDl$zYE{xtXniwe+VMV1C^i|HB#2MLCmZ_4AZwsO&w^!pxBwDr)|Mk$Vl|uC^MA&~4MPsV5@E+0ajEptWWV#MTOJ!GXgDXql91zT_6W z*z8Ib;%rm;>4zG%#M6%l$6!5exVQ5OD{fp*d>yegrB^q_b){<2`(e{XhsCEfjo1xi zMP)J&{@G&3eU36wx-dKPyeApgQ< zx8gsW!xSVLS@0Q(I}BQ!H&<&zw`MIJ93lq<>67b#zC^!11|eia8J-1nSuA6aRx+*9 z>T>BYZn&kaPsPK`JiQns+d@-0Lz-3(M>WLHa@EU_<;=Itrxu0svh!N#pHa{_N>htt zldE2><~`o1e*)SG9ruci01Qwxda{*zxP@-1(nvITxyYcTcT=35Wq^~SMn3Djv6%nFrJo>Hed9pMe}UyznJ40_t9yy z;Bpoe2Elqu%@&IVKE^qV1zZN_ZyN;*Po4Lj9oXI#L2ePm<39xT2?}Iln)W3 zU|t0q(G?2DRS$B8$~8Zk@L_fk zwLu)TE!U5v<*ls^z_{`yy%%~Vhu>5J{kD)H^=p@>S#+HG&DqTer7IAvWbJjWKQjxJ z2I~J)UT1oJ0*PFT?Od0za!q%-fIo_;Q6rCt9SfdNj$TbBkY#JtoT|%gcSBE)T|6s9gRc2G2Cq?kf>pj}O zIhoq=iXjbY1zwZ`g(1nSu6$+Y zd&)w=t!ha93-LReq?y#~+TKu)Tn1kCYNWksf{X-3B_@*tBAR)GNIb0^U#{ z3!BX~y}cBNhxMa{^h^evX+yS&Nw>+?1et^5y@Tj|n*j^jMb~I6Rl0y~rGQ23G;UWP z!7-Pjvk8#s1v?6%)iiS>E%-!&%b=-KIOPd^u-i>rgleplrZ|lSSlbdqst`at@5 zV~9XERvK3k3@a=ZDNJZIt-HAcYZ{Qg*zt+9bZFzSrthdr`CZ+HZs&%JC&Jdl&`IDEnKh^yN}6pRC<0=mG-c=dQ09X;*BU%Vi+#B*uoe5zG7pl~Lu?Xi zh{>>x4{6Bvg3OS(b<_^0G$}$LLwq&Mtm%Fpv*~2Ix(Lh|JU02=k;25)OsZH?P;pM_}dW5Je1sv@MQSSx-D11tFooxby0fD>t`p?gOuSEP2gMi!8CS>4T$QM zV>fgSZ8k01WS2W@BTytwB(X_lMBCIHjbUP0>Cv)zh7b?m*uyVo)`HW6wm~rkM@crv zoluX==7p?n1Wb|>JXCuW@4yf=VN?02ET5P=dRXkp$AQDGa;(Ha3V0iln`9XcH42!? zOkvP)!33Gur8A>J)Qc)E$^4nL4r}UPP_HY-MmJD~X*+tkmA$cH>uB}e%pI1-IMmwQ z+S$yM2Ifm>eISyvYoH+GU8p;g4J{{cV@{-G22GimSg!Zm;O{_U84jOOo3+MDq^iVd zjlLwSlxuUXSwW0v42QYWOSK}ptV#L&{92Lbeb%s~g6jTcjAVx(*>*p3uvJxRXLXQ*RaTmItsxH3HY5Y3Yq{q#4w_linEVw9UeFf#f~I`X{?xrRVIE8y z@$ao-yBNeW*@y9Rp@9&dL36n`BQ6p@8oPQV4}PrsQgkPtL!iUykNR5OPsyF2eyC1| zZcVtglVMaTt(xD^u4@=|UYf*YEBIDsDK+*DQkCK?1{YT9su_Va!YGiW&T{x85@^dd zBkL5VI?SzVRChs#84acR;3hjrC%4^J4!Ot(m>Ue9`QszcA4r^LrF;ttVYkTHCdnl=N z#?7lR&HlKPLcX$wjW%Ik8r84PScK~0HbZdu#CaU84S^i(+?j{LD6^ioZD5Ek4)KFM)}gw2@9$eFAhdG zj*bhMNJ){<=Kld+gGlhp@|=$F<$JmSWnz%K%`ptOg{LW>G#;3ep^x4;bDwRq9;mQF zj6uA=t#c_dM%x}7WU8;BHH0nnJMJRX)}&UzzTS~iYi;W9yQE9b;+~wd*)YasG*}Hu zUz{juPbrr)hAsXT+1Ig!!!I1*F39rgn*vg{5+EyKR+dR$Lv1ol7%AICK*i)2A2&> zaqh{F(z!oYUo<+|>;#Xf=7BHhXmSC2sbBnS9*wwP73aKbO)$Ona}2(H0Segc%|*N||h))B|C0&T5;ohEY+#oUi8Ns2c$(;SgUk?lu8|hMQ56 zI%B2xjmn&4f^tjcxB5sW?7pY2wI+s9n%&~AR&u%h3i;8YTfWmEN6w6~8Gz_0;R>a@ zq=+8>$pbUP>JE$TD0`#Qr_2QZTI7@Z{Ipv-U)kZByw<76B&LJ0<=DoAA2CPDrMS|Q zP&QYYG=_$a_}nRX`=*6BV0(()ODXMvFriW|raB}~YjXS})uajM`Aawp_|L0Fno#br zLanB{jNCq_@%wcwpNuc#Hk`x}U0IhD54Y%~Xnml}P!rdE>z=oU^%6Q{jF)yYN^9QZv8Difs^l(;2)8>(FV>a8;BDN>)GrNv53g0i38PNhCWzJbt z)l5|u(=)|xB-jv5wUO5Rzl_RZyp8=--6FWe&-9+W((uIwRS#*^ccSiy_|mW`3zJKJ zL=Ia&Fn;R_J*2wTv}lo`j75_?Nu$)~Q6}2mLVAU+TUEO|bq}dPu7tJ-8aaBE+N?d9 z^-e<JrSj478djvSaq5=86pQ{_O$*d1 zweom6RFs*oR%p3_y)^#q2pHjS(Hp5u?U1IslD?{e%$oP~bSO3Y1i8KnCz{>Nn9+g` z+8?;zIvJ=E6l17{Cn5Nlmrm5jDw;}z2o1@Gxr}@_tdvF^94)i3xjL=yHb>I95)3m* z7Hd`1x}mUhRWOB2nyE7n%<`)@Mhd1^=Gql|p4}irLw%b5bfd2EDeRYi<3mb4Q&e&G zhN`wPOgsNo_nD-E2Zz_CVs#Bk`!;}BD)&udvA?MZ(;(q3;!^U8eJhCDmBt3D6Wx;u0c|Eno0KSJ z?oec+5e#4^q^_jd>f^B#g92x^Yms`EvHJ`b<#sn!g|FzC?u5|U?E*Dny9%s6!YW3SR-PYrep$`KzP_rtr_97wKFxbR=RRq!&tTO@Q{w}!>3Ch zV+qs!{76B=@a-20?y(*XUt=Of4>CNwBC+W9twga{D~Uo%FsYD=gX(&T)eQGss7w|` zwy06-C{8zQBT0g8%ne~}9Tip)nGk}QvA|kN^U-AV{K)~^zzbl9>11UQ7MbgI%0EHhiPJ}2Ui;7hr_G510T zQ@8G$+T5G;XkjN=Ft(D`Vj}T7=qYPmqpKawhf~D3xix9Jo{c{d;)hYQl|c`wj7SCZ zwQ^gUt{fV^l;LE^TAY7$VSyzQ)fuFgxHmGse{6x$tRB;HOW+_^s<1)+Y&OJ8zeR{J zs|t}-o0j1l?M>G2XjKmdgleC%x9oJF4iar+!Jjr`FOXV=%)*j%#rzfg-%Q{R?I?bH zJVtcH`g!*mPe3{-92n!)l)r0!WM0-nmN5-Stf8s!MR;pm4clG=`O7_oaVHt6%}@xV zA;WBwT$k<4cP51SMO}O-52siQa%Aph4y3%&CBE^yIWF~BjsjoVANs+#nE6tWB^WWO zDKjuyNwH)cM%ryjT=oU)W-6fWU}xhrGVi9U)N@2!(+-0O zjuszSt5D@e>>U$n^~)@J%!1Kr_9gI{$uT`AWg<619kjE|L$^pp7`=S~5Lk=VZfrSn z+pw%eM+FHjHL4DOVH;1k`l=pAZmT^iSD@aTXgwiDbXY=sV9WkhaIV7A*_3OGFT6}9 z;>1{(6*3NnTq6?%aal62YG~>3XVJb4_gHQ2!&+98&e|AX95EVRNw5R!t&DBiKw6Bu zu{d_zzI!D~XzJu9A)MN#hpQ+U97dNHk0`N0%xr6eSfW0BpJ2OQmE6LlMzORLGyRXl zm}LrdS zZBAdvwxvdwz)X0FypAj}9G4prIDI8{&Ayi`SxZ;Cz9S;{yxDg6unM+|82^_M(KioQ ziVVh1wznX`Z*ae)Npg~Aj7holOe=M{#Ste4)(?jhR>pELSiF^DO1DW;3u7F}BbfgN zkFRLLH(^w6hq(yPxL$_aJ*G9d#Rt5i9YopU$NA3;BWhG;FC0{8x=xb($`)HYVkO$& zdQIk9NJZ+%n#`UrPI#}bqRE0h%=%WVg4N7XN^R-3OPf5b!&G0-orPsxYozX%3yBd? z6mN+NNQz6UQYxmQ@KYF^7MshuU&D-Q2^RbsP48A;&U+JEF8%*|zqAtRZ4DH(=(6_-oNdsgySP=aB{N zWXvk-=IbQtS8zjb*e)HSgInOgrexpUwgaGU`r%0(Igs0yI~EYa;Mn@R=u=<;ifwdx zS??YS{;c&l92aa-Iu1c1ty<#trk1l!Mih%1nHyWKv)=Gt)t|+mQy$jwdJ(4ZZZtsi zUm?kL%O@p7AjBO~@F7~lWHpq<3S>_#D_N-BhXLlBuDlrdOZM1VfSV?E${n%n9?)8* zPdbG~n9B-Gq{IJaiR6PggGGA_dyT9H7ccy3QBX&==hWc8ZLKS|;!s4z6^OQqWU>@j zPZxD^ZL=!R{6X1{rezx)GeQdD?VPI6$fUSURJ5;Q$~Bb?sp52bU?vwjYH=-+gkXtT z`)1k0`Ia7pO$eie!hQ@g-84z#9F3jii+Z*DH7RP-sf{4vqC+5L5B*7(V(if9B_cwq z`Wkfm!$B|_vy7frSk^;9-0F8}?CXV0=^C?(*>4ECyN=s4{83bO!B0!SF1YQo`I(Xk zq~?2gGoc4Bxm4s`$fxzAjH-SCH2Wn4ctd`GNrmpYP^zqQYzTq;YRo`o$eJQ=6cHVG)~fn03~=-|~X-fEA-p|GJezc@|CLWlqOEo4QS9 zirVVBQqm@sx8>7_VYaR|hL>{lgN9NHByiSUyn^~S+atO{RY^#Afu1QSnTa{qO##DL z!n8camTUEhW%oOM~} z)Rqi!tWFJ@`ICASnZ+f_4B=z5*$r`ftI+~$)L~!JMAc*&L4K-vo`||?lpDdk-feAI zFs1frgLtS9%Z;4*1-OZWdk9h9B@QkC>ChmQ#wf9|?ju6!asGzygbZEFUsc=k7J?+VhbNnTanI*mb;4LAa5Gc_c zxqQmy67O@+MC3KDOqY)7e0e0)xBJ}rN~5Co3sS+0Go56s2YrWF8|LPUNdt*J?QAa? z?4xZ=)cXYQ1fNhts;>wmvoqBX8#BS%ao-~+D6oL2NgluS$55@!u(NJ^TJ@MuewW{@ z9AvQC1Mgw$#KSC@GY2EB`sne<@eEs^5>Wlljn9oYEM15iVob|Zw%HOPZmEB<-HI>^ za(*l@?{Us>+F@uZ%qd=EkaAcss3IFJYU0SGC#G6NOWO7Qa0nq)q5wZ?CAI15q5nvT zHZP!;3pDjB=#}ns(<0-_^~)>w?@CdzacM&|QN5uS{o>Yx42Cc8P>R&r; zz=*G*VzZ$zBM+n|%vqq%E8#VrOV^hL?1(_l?wAiqd0WD#${4ni$i(HYJ&fMIjyOln z6g;1;OS3IItO;|t9<>FXe%`?iQ(Yj`7dIraxA0FU$jum6N(DCjMxg3}%ynURn^$*n zcy4xFG_xraT^lTvxL?y2Y*Yh{ofdixf{M;`jLj_iVnJ|GTrVpU#m=b5p==q&&vV#J zsnePe8JnydbV5UYKQzKu%A~<;+~H_ADl48y(eE@f|8g3bB_i2!@d(jaD9b%$ z=`k&sQ9EKRqmJ>2oT+q@!_RN(Fgx4;!Eh`xRbwH|We>{Tm8P{~Ubr;0l(OiI2+DG3 zpFm7xM-IQ=~G7cnxgZGtan1QnhG@2XJ;`3Uu>f*LECEBs-=N_U;ztFN@eGIG1zAW_K!cJI2dCup#gM;`zf}@mkQCU&YXME z0~VzN`lXSm7bQc;ll}co$mUa2zbr#eg=M1M~czLyv#+tJ%j%@00dHNeR%1pc-Ssz7v`mGFUOTux|vu*=S z(coCbpn=3vUP{wrdh7EP6C(vbyZ$x3x?<4~(-pUL8m7Rx#~exN8tFP)k3bBDERr$< zqIzTiqclEJUJHp4n5A1?{C)W@3JTjq%r@bHZA4BbmUZGM9 z=+3U*b7nvrLo;lOy)OxJ+vtvTs)y1E_wh&_8wPY`D!6hX2qh_ZRQJ;BA+P_MFU()EW(oMidLT*lUWF( zcQh$MA=2+`$Rr3|h8@*uxeuI{(oE3~zJ~otRBCOIG0AJ@Ret$BW!(ScDAI74BwxEO zVaihh3mNH*s*7{!d1DtF)j;Nje|29o$|LqR-T1J-(mK4i`B!iv;tO)G>)$vvaYcU8 zxs|-szb4VR;h<_V!AjST2o>|}ry?8INVLT(wtm5@H$5OJm6KHe@&o=+gUb)UXjz50 zndUY%3d>_5F&-*ZrV*<5R_H;yRnQFw%k%kls1NKAG*RYe<9;} zgn0-mxV{HM$HhDKA$rmXEQyU5TZz^Fqy)hYdo#uI*vtFI*6h(Mc zqeTjH>Q5AoQ2{v`Soq9uBl1v2UVpH*H5;HGT9#WP`xHohX3s%dq$&gfu`@DHHlOyd zwds9=(ds=-SCjgCw^@bPtPp>UD_3a4b`)w_M2GEcN`>)n=Gw8ICN?3bP_xxBd^!d#4(9E3_osZ0AH-;}% zlL>aS1(~dttaLc|tg_pXL|Lsi``%@qv6(5)* z*E>4~!FVvg^`3;x;Z#O9G*d*I8|QL63N=h13zmBkye<6AB!0qswZ>&EZR$Yw1G1lX zn*O$7utcWN%>$5-*3nUO%)VCz;kO5>B!-ud3 zXv$Z$*9PquOIM<9>LD%WBClh4!HQ{6>QMU41@EBAvwty#Rf#NXILo0!YIpH;Skuz` zc&DO@mG?s_aff8+1~NDB$5vR%I<2e@*Bd&;_2K$+tD0^|)dgl!i6*Uz#wPgIqHSM^ z>!?7AQ>r}oUCq$2i>R%b!@*o_tE+mGNjG3wqZ0kVFg7ibOxW{6m|Y>8Mz(IKF>}Z2 z>QUaUeF-z18X_@DWf-#Ddmd%~Ce6mt&Bwldmey6UsXTg%aW2&Eqn*aTWfInxUd~P} zt~4zv@AX#ucEKtbKuTZhG^6=iEqc{u4G`{>{}+B=+ZgLMs4oXJu&I5gII^io92cO4 zntfwWE~bv}i08r~meUKh`)vy2H(8aSJwK8ut0bnE$k-n@OaJ0`<5bcE?d@_{XJ~2N z4Zv~@T@7h-Zh@vD)NgDYrnoT!=Fqhsk8jp_|Y@l^-(>ku~mBwTu_L@%>=WnV7pc(h68%aF$P^ngw~r8Hg^MN)LTr^DJN(*wm-@+Y;Z zOBR~n|bDIAh%gV&gOJ9c+x(e ztX9&SYF-`8Zjj3Q+s~Ecds!c#B>CVsa=U`dVrYXyD{QYs%t80jCHCV=_c|x*n~Sm`H)z^wkJSI1 zdv2t08RPr-&P+is1W$yfwF7H0enrK!j<7%Si?=H!Yf~#h&}KsVr^JuV{3-G9hu;}^ zI2s~lV^UWiIh@rS{~mn!Tkz_q37K@MJOuTNt=RY#kjsnJ`QcB)cUF4%E9mx@;r~Be CC}s=* literal 0 HcmV?d00001 diff --git a/locales/ru.po b/locales/ru.po new file mode 100644 index 0000000..ab8747b --- /dev/null +++ b/locales/ru.po @@ -0,0 +1,1965 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:05-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ru\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Не показывать это уведомление" + +msgid "Don't Show Again" +msgstr "Больше не показывать" + +msgid "Don't show again" +msgstr "Больше не показывать" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i строка файла '%s' не была загружена корректно." +msgstr[1] "%i строк файла '%s' не была загружена корректно." +msgstr[2] "%i строк файла «%s» были загружены некорректно." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" +"Строка %d файла «%s» повреждена (недопустимая последовательность в %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Недопустимый формат заголовка: «%s»" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Ошибка в файле каталога: форма единственного числа msgstr использована " +"вместе с msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Ошибка в файле каталога: форма множественного числа msgstr использована без " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"При загрузке каталога возникли ошибки. В результате некоторые данные могут " +"быть повреждены или отсутствовать." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Не удалось загрузить файл %s. Возможно, он повреждён." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Файл «%s» доступен только для чтения, и его нельзя сохранить.\n" +"Сохраните файл под другим именем." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Не удалось сохранить файл %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Возникла проблема при форматировании файла (но он был успешно сохранён)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Каталог не удалось сохранить в кодировке «%s», как указано в его " +"настройках.\n" +"\n" +"Вместо этого он был сохранён в кодировке UTF-8 и настройки были " +"соответственно изменены." + +msgid "Error saving catalog" +msgstr "Не удалось сохранить каталог" + +msgid "PO Translation Files" +msgstr "Файлы перевода PO" + +msgid "POT Translation Templates" +msgstr "Шаблоны перевода POT" + +msgid "All Translation Files" +msgstr "Все файлы переводов" + +msgid "Merging differences..." +msgstr "Объединение различий..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "«%s» не является корректным POT-файлом." + +msgid "(Use default language)" +msgstr "(Использовать язык по умолчанию)" + +msgid "Select your preferred language" +msgstr "Выберите предпочитаемый язык" + +msgid "Language selection" +msgstr "Выбор языка" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Чтобы это изменение вступило в силу, необходимо перезапустить Poedit." + +msgid "Downloading translations is disabled in this project." +msgstr "Загрузка переводов отключена в этом проекте." + +msgid "Not authorized, please sign in again." +msgstr "Не авторизовано, пожалуйста войдите снова." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin — это онлайн-платформа локализации и совместного перевода. Poedit " +"может синхронизировать PO-файлы с Crowdin." + +msgid "Sign In" +msgstr "Войти в систему" + +msgid "Sign in" +msgstr "Войти" + +msgid "Sign Out" +msgstr "Выйти" + +msgid "Sign out" +msgstr "Выйти" + +msgid "Waiting for authentication…" +msgstr "Ожидание аутентификации…" + +msgid "Updating user information…" +msgstr "Обновление информации о пользователе…" + +msgid "Signed in as:" +msgstr "Вы вошли как:" + +msgid "Learn More About Crowdin" +msgstr "Подробнее о Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Подробнее о Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Войти в Crowdin" + +msgid "Open Crowdin translation" +msgstr "Открыть перевод Crowdin" + +msgid "Project:" +msgstr "Проект:" + +msgid "Language:" +msgstr "Язык:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "В вашей учетной записи Crowdin нет проектов перевода." + +msgid "This project has no files that can be translated in Poedit." +msgstr "В этом проекте нет файлов, которые можно перевести в Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Этот файл можно править только в веб-интерфейсе Crowdin." + +msgid "Downloading latest translations…" +msgstr "Загружаются последние переводы…" + +msgid "Syncing with Crowdin" +msgstr "Синхронизация с Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Синхронизация с Crowdin не удалась." + +msgid "Crowdin error" +msgstr "Ошибка Crowdin" + +msgid "Uploading translations…" +msgstr "Выгрузка переводов…" + +msgid "&Copy" +msgstr "&Копировать" + +msgid "Learn more" +msgstr "Подробнее" + +msgid "Learn More" +msgstr "Узнать больше" + +#, c-format +msgid "Failed command: %s" +msgstr "Сбой команды: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Не удалось объединить каталоги gettext." + +msgid "Scanning files..." +msgstr "Анализ файлов..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Анализ файлов %s..." + +msgid "Failed to load extracted catalog." +msgstr "Не удалось загрузить извлечённый каталог." + +msgid "&Help" +msgstr "&Справка" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Файлы MO нельзя редактировать непосредственно в Poedit." + +msgid "Error opening file" +msgstr "Ошибка при открытии файла" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Вместо этого откройте и измените соответствующий файл PO. Когда вы сохраните " +"его, файл MO тоже обновится." + +msgid "don't delete temporary files (for debugging)" +msgstr "не удалять временные файлы (для отладки)" + +msgid "handle a poedit:// URI" +msgstr "открывать адреса poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Не удалось подключиться к процессу Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Произошло непредвиденное исключение: %s" + +msgid "Unhandled exception occurred." +msgstr "Произошло непредвиденное исключение." + +msgid "Open catalog" +msgstr "Открыть каталог" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Файл «%s» не существует." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "О программе %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Версия %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Сервисы" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Скрыть %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Скрыть остальное" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Показать всё" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Выйти из %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit — это простой в использовании редактор переводов." + +msgid "Catalogs Manager" +msgstr "Диспетчер каталогов" + +msgid "Check for Updates..." +msgstr "Проверить наличие обновлений..." + +msgid "&Edit" +msgstr "&Правка" + +msgid "Undo" +msgstr "Отменить" + +msgid "Redo" +msgstr "Вернуть" + +msgid "Paste and Match Style" +msgstr "Стиль копирования и вставки" + +msgid "Delete" +msgstr "Удалить" + +msgid "Spelling and Grammar" +msgstr "Проверка правописания" + +msgid "Show Spelling and Grammar" +msgstr "Показывать ошибки правописания" + +msgid "Check Document Now" +msgstr "Проверить документ" + +msgid "Check Spelling While Typing" +msgstr "Проверять правописание во время ввода" + +msgid "Check Grammar With Spelling" +msgstr "Проверять также и грамматику" + +msgid "Correct Spelling Automatically" +msgstr "Автоматически исправлять ошибки правописания" + +msgid "Substitutions" +msgstr "Замены" + +msgid "Show Substitutions" +msgstr "Показывать варианты замены" + +msgid "Smart Copy/Paste" +msgstr "Интеллектуальное копирование и вставка" + +msgid "Smart Quotes" +msgstr "Интеллектуальные кавычки" + +msgid "Smart Dashes" +msgstr "Интеллектуальная расстановка переносов" + +msgid "Smart Links" +msgstr "Интеллектуальные ссылки" + +msgid "Text Replacement" +msgstr "Замена текста" + +msgid "Transformations" +msgstr "Преобразования" + +msgid "Make Upper Case" +msgstr "ПРОПИСНЫМИ" + +msgid "Make Lower Case" +msgstr "строчными" + +msgid "Capitalize" +msgstr "С Заглавной Буквы" + +msgid "Speech" +msgstr "Речь" + +msgid "Start Speaking" +msgstr "Начать озвучивание" + +msgid "Stop Speaking" +msgstr "Остановить озвучивание" + +msgid "&View" +msgstr "&Вид" + +msgid "Enter Full Screen" +msgstr "Перейти в полноэкранный режим" + +msgid "Window" +msgstr "Окно" + +msgid "Minimize" +msgstr "Свернуть" + +msgid "Zoom" +msgstr "Масштаб" + +msgid "Bring All to Front" +msgstr "Поместить все окна на передний план" + +msgid "PO Translation" +msgstr "Файл перевода PO" + +msgid "The file cannot be opened." +msgstr "Не удается открыть файл." + +msgid "Invalid file" +msgstr "Недопустимый файл" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Файл, возможно, повреждён или имеет формат, не поддерживаемый Poedit." + +msgid "&Undo" +msgstr "&Отменить" + +msgid "&Redo" +msgstr "&Повторить" + +msgid "Cu&t" +msgstr "Выреза&ть" + +msgid "Cut" +msgstr "Вырезать" + +msgid "Copy" +msgstr "Копировать" + +msgid "&Paste" +msgstr "&Вставить" + +msgid "Paste" +msgstr "Вставить" + +msgid "&Delete" +msgstr "&Удалить" + +msgid "Select &All" +msgstr "Выбрать &все" + +msgid "Select All" +msgstr "Выбрать все" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Стрелка вверх" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Стрелка вниз" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "В окно Poedit можно перетащить только один файл." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Файл «%s» не является каталогом сообщений." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "&Перейти" + +msgid "Source text:" +msgstr "Исходный текст:" + +msgid "Singular:" +msgstr "Единственное:" + +msgid "Plural:" +msgstr "Множественное:" + +msgid "Translation:" +msgstr "Перевод:" + +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 являются шаблонами и не содержат переводов.\n" +"Чтобы сделать перевод создайте файл PO из шаблона." + +msgid "Create New Translation" +msgstr "Создать новый перевод" + +msgid "Create new translation" +msgstr "Создать новый перевод" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Проверка правописания отключена, так как словарь для языка %s не установлен." + +msgid "Install" +msgstr "Установить" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталог изменён. Сохранить изменения?" + +msgid "Save changes" +msgstr "Сохранение изменений" + +msgid "Your changes will be lost if you don't save them." +msgstr "Ваши изменения будут потеряны, если не сохранить их." + +msgid "Save" +msgstr "Сохранить" + +msgid "Don't save" +msgstr "Не сохранять" + +msgid "Don't Save" +msgstr "Не сохранять" + +msgid "Save as..." +msgstr "Сохранить как..." + +msgid "Compile to..." +msgstr "Компилировать в..." + +msgid "Compiled Translation Files" +msgstr "Скомпилированные файлы перевода" + +msgid "Export as..." +msgstr "Экспортировать как..." + +msgid "HTML Files" +msgstr "Файлы HTML" + +msgid "Open catalog template" +msgstr "Открыть шаблон каталога" + +msgid "Updating catalog" +msgstr "Обновление каталога" + +msgid "Source code not available." +msgstr "Исходный код недоступен." + +msgid "Updating failed" +msgstr "Не удалось обновить" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Переводы не могут быть обновлены из исходного кода, т.к. исходный код не был " +"найден в папке, указанной в свойствах каталога." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Элементы каталога, возможно, неверны." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Не удалось обновить каталог. Нажмите кнопку «Подробности >>» для получения " +"дополнительных сведений." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "В переводе найдена %d проблема." +msgstr[1] "В переводе найдены %d проблемы." +msgstr[2] "В переводе найдено %d проблем." + +msgid "Validation results" +msgstr "Результаты проверки" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Записи с ошибками были выделены в списке красным цветом. Если выбрать такую " +"запись, будут показаны подробные сведения об ошибке." + +msgid "The file was saved safely." +msgstr "Файл был успешно сохранён." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файл был сохранён и скомпилирован в формат MO. Но он может работать " +"некорректно." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Файл был сохранён, но его не удалось скомпилировать в формат MO и " +"использовать." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Файл был скомпилирован в формат MO, но скорее всего не будет правильно " +"работать." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Не удаётся скомпилировать данный файл в формат MO для дальнейшего " +"использования." + +msgid "No problems with the translation found." +msgstr "Не найдено проблем с переводом." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Перевод готов к использованию, но %d запись ещё не переведена." +msgstr[1] "Перевод готов к использованию, но %d записи ещё не переведено." +msgstr[2] "Перевод готов к использованию, но %d записей ещё не переведено." + +msgid "The translation is ready for use." +msgstr "Перевод готов к использованию." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit автоматически исправил неверное содержимое в файле «%s»." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Этот файл содержал в себе повторяющиеся элементы, которые недопустимы в " +"файлах PO и могли бы помешать его использованию. Poedit исправил проблему, " +"но следует просмотреть все переводы, помеченные как неточные, и исправить их " +"при необходимости." + +msgid "Language of the translation isn't set." +msgstr "Язык перевода ещё не указан." + +msgid "Set Language" +msgstr "Выбор языка" + +msgid "Set language" +msgstr "Задать язык" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Предложения недоступны, пока не выбран язык перевода. Также не будут " +"поддерживаться формы множественного числа и другие функции." + +msgid "Language of the translation is the same as source language." +msgstr "Язык перевода совпадает с исходным языком." + +msgid "Fix Language" +msgstr "Исправить язык" + +msgid "Fix language" +msgstr "Исправить язык" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"В данном каталоге есть записи с формами множественного числа, но нет " +"заголовка Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Записи в этом каталоге имеют количество форм множественного числа, отличное " +"от указанного в заголовке Plural-Forms" + +msgid "Required header Plural-Forms is missing." +msgstr "Необходимый заголовок Plural-Forms отсутствует." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Ошибка синтаксиса в заголовке Plural-Forms («%s»)." + +msgid "Fix the Header" +msgstr "Исправить заголовок" + +msgid "Fix the header" +msgstr "Исправить заголовок" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Выражение формы множественного числа, используемое в каталоге, является " +"необычным для языка %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Проверить" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Ошибка загрузки файла каталога сообщений «%s»." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Переведено: %d из %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Осталось: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d ошибка" +msgstr[1] "%d ошибки" +msgstr[2] "%d ошибок" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d запись" +msgstr[1] "%d записи" +msgstr[2] "%d записей" + +msgid " (unsaved)" +msgstr " (не сохранён)" + +msgid " (modified)" +msgstr " (изменён)" + +msgid "Go" +msgstr "Перейти" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Не удалось обновить память переводов: %s" + +msgid "Purge deleted translations" +msgstr "Убрать удалённые переводы" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Действительно удалить все неиспользуемые переводы?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Если продолжить, то все переводы, помеченные как удалённые, будут " +"безвозвратно удалены. Если они будут повторно добавлены в будущем, их " +"придётся заново переводить." + +msgid "Keep" +msgstr "Оставить" + +msgid "Purge" +msgstr "Очистить" + +msgid "Fill missing translations from TM" +msgstr "Заполнение перевода из памяти переводов" + +msgid "Only fill in exact matches" +msgstr "Только при точном совпадении" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"По умолчанию не полностью совпадающие результаты также будут заполнены и " +"помечены как неточные. Отметьте этот вариант, чтобы заполнять только полные " +"совпадения." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Не помечать полные совпадения как неточные" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Включите это только если вы уверены в качестве вашей памяти переводов. По " +"умолчанию все совпадения из памяти переводов отмечаются как неточные и " +"подлежат проверке." + +msgid "Fill" +msgstr "Заполнить" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "Из памяти переводов была взята %d запись." +msgstr[1] "Из памяти переводов были взяты %d записи." +msgstr[2] "Из памяти переводов были взяты %d записей." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "Переводы были отмечены как неточные. Проверьте их правильность." + +msgid "No entries could be filled from the translation memory." +msgstr "Не удалось перевести строки, используя память переводов" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Память переводов не содержит строк, похожих на содержимое этого файла. Она " +"подходит только для полуавтоматического перевода после того, как Poedit " +"соберёт достаточно данных из файлов, которые вы перевели вручную." + +msgid "Translating" +msgstr "Выполняется перевод" + +msgid "Filling missing translations from TM..." +msgstr "Автоматический перевод на основе памяти переводов..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Переведена %u строка" +msgstr[1] "Переведено %u строки" +msgstr[2] "Переведено %u строк" + +msgid "Copy from source text" +msgstr "Копировать исходный текст" + +msgid "Copy from Source Text" +msgstr "Копировать исходный текст" + +msgid "Clear translation" +msgstr "Удалить перевод" + +msgid "Clear Translation" +msgstr "Удалить перевод" + +msgid "Edit comment" +msgstr "Править комментарий" + +msgid "Edit Comment" +msgstr "Править комментарий" + +msgid "References:" +msgstr "Ссылки:" + +msgid "Everything" +msgstr "Всё" + +#, c-format +msgid "Form %i" +msgstr "Форма %i" + +msgid "Singular" +msgstr "Единственное" + +msgid "Zero" +msgstr "Ноль" + +msgid "One" +msgstr "Один" + +msgid "Two" +msgstr "Два" + +msgid "Plural" +msgstr "Множественное" + +msgid "Other" +msgstr "Другое" + +msgid "&Bookmarks" +msgstr "Зак&ладки" + +#, c-format +msgid "Set bookmark %i" +msgstr "Добавить закладку %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Перейти к закладке %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Добавить закладку %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Перейти к закладке %i" + +msgid "Hide Sidebar" +msgstr "Скрыть боковую панель" + +msgid "Show Sidebar" +msgstr "Показать боковую панель" + +msgid "Hide Status Bar" +msgstr "Скрыть строку состояния" + +msgid "Show Status Bar" +msgstr "Показать строку состояния" + +msgid "Source text" +msgstr "Исходный текст" + +msgid "Translation" +msgstr "Перевод" + +msgid "ID" +msgstr "Код" + +#, c-format +msgid "Source text — %s" +msgstr "Исходный текст — %s" + +msgid "unknown language" +msgstr "неизвестный язык" + +#, c-format +msgid "Translation — %s" +msgstr "Перевод — %s" + +msgid "Error:" +msgstr "Ошибка:" + +msgid "Source file" +msgstr "Исходный файл" + +msgid "Source file occurrence:" +msgstr "Вхождение исходного файла:" + +msgid "Open in Editor" +msgstr "Открыть в редакторе" + +msgid "Open in editor" +msgstr "Открыть в редакторе" + +msgid "No references for the selected item." +msgstr "Нет упоминаний для выбранного элемента." + +#, c-format +msgid "Error opening file %s!" +msgstr "Не удалось открыть файл «%s»!" + +msgid "Find" +msgstr "Искать" + +msgid "Replace" +msgstr "Заменить" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Параметры" + +msgid "Ignore case" +msgstr "Не учитывать регистр" + +msgid "Wrap around" +msgstr "Искать по кругу" + +msgid "Whole words only" +msgstr "Только полные слова" + +msgid "Find in source texts" +msgstr "Искать в исходных текстах" + +msgid "Find in translations" +msgstr "Искать в переводах" + +msgid "Find in comments" +msgstr "Искать в комментариях" + +msgid "Close" +msgstr "Закрыть" + +msgid "Replace All" +msgstr "Заменить все" + +msgid "Replace all" +msgstr "Заменить все" + +msgid "< &Previous" +msgstr "< &Предыдущий" + +msgid "&Next >" +msgstr "&Следующий >" + +msgid "String to find" +msgstr "Искомая строка" + +msgid "Replacement string" +msgstr "Строка замены" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Не удаётся выполнить программу: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Код языка (например, ru_RU)" + +msgid "Translation Language" +msgstr "Язык перевода" + +msgid "Language of the translation:" +msgstr "Язык перевода:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit — диспетчер каталогов" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Всего" + +msgid "Untrans" +msgstr "Не переведено" + +msgid "Fuzzy" +msgstr "Неточно" + +msgid "Bad Tokens" +msgstr "Неверные записи" + +msgid "Last modified" +msgstr "Последнее изменение" + +msgid "Select directory" +msgstr "Выберите папку" + +msgid "Directories:" +msgstr "Папки:" + +msgid "" +msgstr "<без имени>" + +msgid "Do you want to delete the project?" +msgstr "Действительно удалить проект?" + +msgid "Confirmation" +msgstr "Подтверждение" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "Действительно обновить все каталоги в этом проекте?" + +msgid "Information about the translator" +msgstr "Информация о переводчике" + +msgid "Name:" +msgstr "Имя:" + +msgid "Your Name" +msgstr "Ваше имя" + +msgid "Email:" +msgstr "Электронная почта:" + +msgid "your_email@example.com" +msgstr "vash_email@domain.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ваше имя и почта будут использоваться только при указании последнего " +"переводчика в заголовках файлов GNU gettext." + +msgid "Editing" +msgstr "Редактирование" + +msgid "Automatically compile MO file when saving" +msgstr "Автоматически компилировать файл MO при сохранении" + +msgid "Show summary after catalog update" +msgstr "Показывать сводку после обновления каталога" + +msgid "Check spelling" +msgstr "Проверять правописание" + +msgid "Always change focus to text input field" +msgstr "Всегда переключаться на поле ввода текста" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Не фокусироваться на списке строк. Если включено, для перемещения с помощью " +"клавиатуры необходимо нажимать Ctrl+стрелки, но при этом можно вводить текст " +"немедленно, без переключения фокуса клавишей Tab." + +msgid "Appearance" +msgstr "Внешний вид" + +msgid "Use custom list font:" +msgstr "Использовать настраиваемый шрифт для списка:" + +msgid "Use custom text fields font:" +msgstr "Шрифт полей ввода:" + +msgid "Change UI language" +msgstr "Изменить язык интерфейса" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(требует Windows 8 или новее)" + +msgid "General" +msgstr "Общее" + +msgid "Use translation memory" +msgstr "Использовать память переводов" + +msgid "Learn From Files..." +msgstr "Собрать из файлов..." + +msgid "Learn from files..." +msgstr "Собрать из файлов..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Сброс" + +msgid "Consult TM when updating from sources" +msgstr "Использовать память переводов при обновлении из исходного кода" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Если включено, Poedit попытается автоматически перевести новые строки, " +"используя накопленную память переводов. Если память переводов содержит мало " +"данных, толку от этого будет мало. Чем больше вы переводите, тем больше " +"становится память переводов и тем больше она помогает." + +msgid "Stored translations:" +msgstr "Сохраненных переводов:" + +msgid "Database size on disk:" +msgstr "Размер базы данных на диске:" + +msgid "Select translation files to import" +msgstr "Выберите файлы переводов для импорта" + +msgid "Translation Memory" +msgstr "Память переводов" + +msgid "Importing translations..." +msgstr "Импорт переводов..." + +msgid "Finalizing..." +msgstr "Завершение..." + +msgid "Reset translation memory" +msgstr "Очистить память переводов" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Вы уверены, что хотите очистить память переводов?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Очистка памяти переводов необратимо удалит все переводы, хранящиеся в ней. " +"Вы не сможете отменить эту операцию." + +msgid "Cancel" +msgstr "Отмена" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "ПП" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Экстракторы используются для поиска переводимых строк в файлах исходного " +"кода и извлекают их так, чтобы их можно было перевести." + +msgid "New" +msgstr "Создать" + +msgid "Edit" +msgstr "Править" + +msgid "Delete extractor" +msgstr "Удалить экстрактор" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Вы уверены, что хотите удалить экстрактор «%s»?" + +msgid "Extractors" +msgstr "Экстракторы" + +msgid "Accounts" +msgstr "Учетные записи" + +msgid "Automatically check for updates" +msgstr "Автоматически проверять наличие обновлений" + +msgid "Include beta versions" +msgstr "Включая бета-версии" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Бета-версии содержат новейшие функции и улучшения, но могут быть менее " +"стабильными." + +msgid "Updates" +msgstr "Обновления" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Эти параметры влияют на внутреннее форматирование файлов PO. Скорректируйте " +"их, если у вас есть специальные требования, например, если вы пользуетесь " +"системой контроля версий." + +msgid "Line endings:" +msgstr "Окончания строк:" + +msgid "Unix (recommended)" +msgstr "Unix (рекомендуется)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Перенос:" + +msgid "Preserve formatting of existing files" +msgstr "Сохранять форматирование существующих файлов" + +msgid "Advanced" +msgstr "Дополнительно" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Параметры %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Перетащите папки сюда\n" +"\n" +"или нажмите кнопку +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Перетащите папки сюда\n" +"\n" +"или нажмите кнопку +" + +msgid "Add Folders..." +msgstr "Добавить папки..." + +msgid "Add folders..." +msgstr "Добавить папки..." + +msgid "Add Files..." +msgstr "Добавить файлы..." + +msgid "Add files..." +msgstr "Добавить файлы..." + +msgid "Add Wildcard..." +msgstr "Добавить по шаблону..." + +msgid "Add wildcard..." +msgstr "Добавить по шаблону..." + +msgid "Paths" +msgstr "Папки" + +msgid "Excluded paths" +msgstr "Исключенные пути" + +msgid "Additional keywords" +msgstr "Дополнительные ключевые слова" + +msgid "Name of the project the translation is for" +msgstr "Название проекта перевода для" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "например, nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (рекомендуется)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Сначала нужно сохранить файл. До этого данный раздел нельзя изменить." + +msgid "Comment:" +msgstr "Комментарий:" + +msgid "OK" +msgstr "ОК" + +msgid "C&lear" +msgstr "О&чистить" + +msgid "Clear the comment" +msgstr "Удалить комментарий" + +msgid "Create new translations project" +msgstr "Создать новый проект переводов" + +msgid "Edit the project" +msgstr "Править проект" + +msgid "Delete the project" +msgstr "Удалить проект" + +msgid "Update all" +msgstr "Обновить всё" + +msgid "Update all catalogs in the project" +msgstr "Обновить все каталоги в этом проекте" + +msgid "Edit project" +msgstr "Правка проекта" + +msgid "Project name:" +msgstr "Название проекта:" + +msgid "Browse" +msgstr "Обзор" + +msgid "Add directory to the list" +msgstr "Добавить папку в список" + +msgid "&New..." +msgstr "&Создать..." + +msgid "New from &POT/PO file..." +msgstr "С&оздать из POT-файла..." + +msgid "New From &POT/PO File..." +msgstr "С&оздать из POT-файла..." + +msgid "&Open..." +msgstr "&Открыть..." + +msgid "Open Recent" +msgstr "Открыть последние файлы" + +msgid "Open from Crowdin..." +msgstr "Открыть из Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Открыть из Crowdin..." + +msgid "&Close" +msgstr "&Закрыть" + +msgid "&Save" +msgstr "&Сохранить" + +msgid "Save &as..." +msgstr "Сохранить &как..." + +msgid "Save &As..." +msgstr "Сохранить &как..." + +msgid "Compile to MO..." +msgstr "Компилировать в формат MO..." + +msgid "E&xport as HTML..." +msgstr "Э&кспортировать как HTML..." + +msgid "Check for updates..." +msgstr "Проверить обновления..." + +msgid "&Preferences..." +msgstr "&Параметры..." + +msgid "Catalogs &manager" +msgstr "&Диспетчер каталогов" + +msgid "Catalogs &Manager" +msgstr "&Диспетчер каталогов" + +msgid "E&xit" +msgstr "В&ыход" + +msgid "Quit" +msgstr "Выход" + +msgid "Copy from singular" +msgstr "Копировать форму единственного числа" + +msgid "Copy From Singular" +msgstr "Копировать форму единственного числа" + +msgid "Translation is &fuzzy" +msgstr "Неточный п&еревод" + +msgid "Translation Is &Fuzzy" +msgstr "Неточный п&еревод" + +msgid "Edit &comment" +msgstr "Править &комментарий" + +msgid "Edit &Comment" +msgstr "Править &комментарий" + +msgid "Suggestions" +msgstr "Предложения" + +msgid "&Show references" +msgstr "&Показать ссылки" + +msgid "&Show References" +msgstr "&Показать ссылки" + +msgid "&Find..." +msgstr "&Найти..." + +msgid "Replace..." +msgstr "Заменить..." + +msgid "Find next" +msgstr "Далее" + +msgid "Find previous" +msgstr "Назад" + +msgid "Find and Replace..." +msgstr "Найти и заменить..." + +msgid "Find Next" +msgstr "Далее" + +msgid "Find Previous" +msgstr "Назад" + +msgid "&Preferences" +msgstr "&Параметры" + +msgid "Display entry &IDs" +msgstr "Показывать &номера строк" + +msgid "Display Entry &IDs" +msgstr "Показывать &номера строк" + +msgid "Sort by &file order" +msgstr "Сортировать как в &файле" + +msgid "Sort by &File Order" +msgstr "Сортировать как в &файле" + +msgid "Sort by &source" +msgstr "Сортировать по &исходному тексту" + +msgid "Sort by &Source" +msgstr "Сортировать по &исходному тексту" + +msgid "Sort by &translation" +msgstr "Сортировать по &переводу" + +msgid "Sort by &Translation" +msgstr "Сортировать по &переводу" + +msgid "&Group by context" +msgstr "&Группировать по контексту" + +msgid "&Group By Context" +msgstr "&Группировать по контексту" + +msgid "Entries with errors first" +msgstr "Сперва отображать записи с ошибками" + +msgid "Entries with Errors First" +msgstr "Показывать записи с ошибками в начале" + +msgid "&Untranslated entries first" +msgstr "Показывать &непереведённые записи в начале" + +msgid "&Untranslated Entries First" +msgstr "Показывать &непереведённые записи в начале" + +msgid "Show sidebar" +msgstr "Показать боковую панель" + +msgid "Show status bar" +msgstr "Показать строку состояния" + +msgid "C&atalog" +msgstr "&Каталог" + +msgid "&Update from sources" +msgstr "&Обновить из исходного кода" + +msgid "&Update from Sources" +msgstr "&Обновить из исходного кода" + +msgid "Update from &POT file..." +msgstr "Обновить из файла &POT..." + +msgid "Update from &POT File..." +msgstr "Обновить из файла &POT..." + +msgid "Sync with Crowdin" +msgstr "Синхронизировать с Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Заполнить непереведенное из памяти переводов..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Заполнить непереведенное из памяти переводов..." + +msgid "&Purge deleted translations" +msgstr "&Уничтожить удалённые переводы" + +msgid "&Purge Deleted Translations" +msgstr "&Уничтожить удалённые переводы" + +msgid "&Validate translations" +msgstr "&Проверить перевод" + +msgid "&Validate Translations" +msgstr "&Проверить перевод" + +msgid "&Properties..." +msgstr "&Свойства..." + +msgid "&Done and next" +msgstr "&Закончить и перейти к следующему" + +msgid "&Done and Next" +msgstr "&Закончить и перейти к следующему" + +msgid "&Previous translation" +msgstr "Предыдущий перевод" + +msgid "&Previous Translation" +msgstr "Предыдущий перевод" + +msgid "&Next translation" +msgstr "Следующий перевод" + +msgid "&Next Translation" +msgstr "Следующий перевод" + +msgid "P&revious unfinished" +msgstr "Пр&едыдущий незаконченный" + +msgid "P&revious Unfinished" +msgstr "Пр&едыдущий незаконченный" + +msgid "Ne&xt unfinished" +msgstr "С&ледующий незаконченный" + +msgid "Ne&xt Unfinished" +msgstr "С&ледующий незаконченный" + +msgid "Previous plural form" +msgstr "Предыдущая форма множественного числа" + +msgid "Previous Plural Form" +msgstr "Предыдущая форма множественного числа" + +msgid "Next plural form" +msgstr "Следующая форма множественного числа" + +msgid "Next Plural Form" +msgstr "Следующая форма множественного числа" + +msgid "&Online help" +msgstr "&Справка в интернете" + +msgid "&Online Help" +msgstr "&Справка в интернете" + +msgid "&GNU gettext manual" +msgstr "&Руководство по GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Руководство по GNU gettext" + +msgid "&About Poedit" +msgstr "&Сведения о программе Poedit" + +msgid "&About" +msgstr "&О программе" + +msgid "Extractor setup" +msgstr "Настройка экстрактора" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" +"Список расширений, разделённых точкой с запятой (например, *.cpp; *.h):" + +msgid "Invocation:" +msgstr "Вызов:" + +msgid "Command to extract translations:" +msgstr "Команда для извлечения перевода:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Эта команда запускает экстрактор.\n" +"%o означает название выходного файла, %K — список\n" +"ключевых слов, %F — список входных файлов,\n" +"%C — кодировку (см. ниже)." + +msgid "An item in keywords list:" +msgstr "Пункт в списке ключевых слов:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Это будет добавлено в командную строку для каждого ключевого слова. %k " +"означает ключевое слово." + +msgid "An item in input files list:" +msgstr "Пункт в списке входных файлов:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Это будет добавлено в командную строку для каждого входного файла. %f " +"означает название файла." + +msgid "Source code charset:" +msgstr "Кодировка исходного кода:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Это будет добавлено в командную строку, только если была указана кодировка " +"оригинала. %c означает кодировку." + +msgid "Catalog properties" +msgstr "Свойства каталога" + +msgid "Project name and version:" +msgstr "Название и версия проекта:" + +msgid "Plural Forms:" +msgstr "Формы множественного числа:" + +msgid "Use default rules for this language" +msgstr "Использование правила по умолчанию для этого языка" + +msgid "Use custom expression" +msgstr "Пользовательское выражение" + +msgid "Learn about plural forms" +msgstr "Узнать о формах множественного числа" + +msgid "Charset:" +msgstr "Кодировка:" + +msgid "Team:" +msgstr "Команда:" + +msgid "Team's email address:" +msgstr "Адрес эл. почты команды:" + +msgid "Translation properties" +msgstr "Свойства перевода" + +msgid "Sources paths" +msgstr "Папки с исходными файлами" + +msgid "Extract text from source files in the following directories:" +msgstr "Извлекать текст из исходных файлов в следующих папках:" + +msgid "Base path:" +msgstr "Базовый путь:" + +msgid "Sources keywords" +msgstr "Ключевые слова исходных файлов" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Искать переводимые строки в исходных файлах по этим ключевым словам (именам " +"функций):" + +msgid "Learn about gettext keywords" +msgstr "Подробнее о ключевых словах gettext" + +msgid "Update summary" +msgstr "Сводка об обновлении" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Эти строки были найдены в исходных файлах, но они отсутствуют в каталоге.\n" +"Poedit сейчас добавит их в каталог." + +msgid "New strings" +msgstr "Новые строки" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Этих строк больше нет в исходных файлах.\n" +"Poedit сейчас удалит их из каталога." + +msgid "Obsolete strings" +msgstr "Устаревшие строки" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 новых, 0 устаревших)" + +msgid "Open" +msgstr "Открыть" + +msgid "Save catalog" +msgstr "Сохранить каталог" + +msgid "Validate" +msgstr "Проверить" + +msgid "Check for errors in the translation" +msgstr "Проверить наличие ошибок в переводе" + +msgid "Update" +msgstr "Обновить" + +msgid "Update catalog - synchronize it with sources" +msgstr "Обновить каталог — синхронизировать его с исходными файлами" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Включено, если выбранная строка содержит неточный перевод" + +msgid "Show or hide the sidebar" +msgstr "Показать или скрыть боковую панель" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Предыдущая версия исходного текста:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Старый исходный текст (до обновления), которому соответствует неточный " +"перевод." + +msgid "Notes for translators:" +msgstr "Примечания для переводчиков:" + +msgid "Add comment" +msgstr "Добавить комментарий" + +msgid "Add Comment" +msgstr "Добавить комментарий" + +msgid "Translation suggestions:" +msgstr "Предлагаемые варианты перевода:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Совпадений не найдено" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Совпадений не найдено" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Эта строка была найдена в памяти переводов Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Новых: %i, устаревших: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Импорт переводов: %d" + +msgid "Poedit Update" +msgstr "Обновление Poedit" + +msgid "Preparing migration..." +msgstr "Подготовка к миграции..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Состояние завершения миграции: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Программе Poedit нужно преобразовать вашу память переводов в новый формат." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Это необходимо сделать перед запуском Poedit. Если у вас сохранено много " +"переводов, на это может потребоваться несколько минут, но обычно это " +"выполняется намного быстрее." + +msgid "Proceed" +msgstr "Продолжить" + +msgid "Translation memory migration failed." +msgstr "Не удалось мигрировать память переводов" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Данные памяти переводов не удалось мигрировать. Возникла ошибка:\n" +"\n" +"%s\n" +"Отправьте эту ошибку по адресу help@poedit.net, и мы займёмся её решением." + +msgid "Cannot create temporary directory." +msgstr "Не удаётся создать папку для временных файлов." + +msgid "Welcome to Poedit" +msgstr "Добро пожаловать в Poedit" + +msgid "Edit a translation" +msgstr "Правка перевода" + +msgid "Open an existing PO file and edit the translation." +msgstr "Открыть имеющийся файл PO и править перевод." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Создать перевод на основе имеющегося файла PO или шаблона POT." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Помочь переводу на Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Скачать файл из проекта Crowdin, перевести его и выгрузить изменения обратно." + +msgid "What is Crowdin?" +msgstr "Что такое Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Перевод отсутствует. Это странно." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Переводимые записи не добавляются вручную в систему Gettext, а автоматически " +"извлекаются из исходного кода. Таким образом обеспечивается их актуальность " +"и точность.\n" +"Переводчики обычно работают с PO-файлами (POT-шаблоны), которые подготовил " +"для них разработчик." + +msgid "(Learn more about GNU gettext)" +msgstr "(Подробнее о GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Самый простой способ заполнить этот каталог — обновить его из POT:" + +msgid "Update from POT" +msgstr "Обновить из POT-файла" + +msgid "Take translatable strings from an existing POT template." +msgstr "Извлечь переводимые строки из имеющегося шаблона POT." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Переводимые строки можно также извлечь непосредственно из исходного кода:" + +msgid "Extract from sources" +msgstr "Извлечь из исходного кода" + +msgid "Configure source code extraction in Properties." +msgstr "Настройте извлечение исходного кода в разделе «Свойства»." + +msgid "Sync" +msgstr "Синхронизация" + +msgid "Synchronize the translation with Crowdin" +msgstr "Синхронизировать перевод с Crowdin" diff --git a/locales/sk.mo b/locales/sk.mo new file mode 100644 index 0000000000000000000000000000000000000000..f007ca9ecc08a032b42dd48b910e21a7fbbcea44 GIT binary patch literal 47269 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\n" +"Language-Team: Slovak\n" +"Language: sk_SK\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: sk\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "SkryÅ¥ túto správu s upozornením" + +msgid "Don't Show Again" +msgstr "Nabudúce nezobrazovaÅ¥" + +msgid "Don't show again" +msgstr "Nabudúce nezobrazovaÅ¥" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i riadok súboru „%s\" nebol správne načítaný." +msgstr[1] "%i riadky zo súboru „%s“ neboli správne načítané." +msgstr[2] "%i riadkov zo súboru „%s“ nebolo správne načítaných." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Riadok %d v súbore '%s' je poÅ¡kodený (nesprávne %s dáta)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Chybný formát hlavičky „%s“" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Chybný súbor katalógu: tvar jednotného čísla msgstr je použitý aj v " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Chybný súbor katalógu: tvar množného čísla msgstr použitý bez msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Nastala chyba pri načítavaní katalógu. Niektoré údaje môžu chýbaÅ¥ alebo byÅ¥ " +"poÅ¡kodené." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nie je možné otvoriÅ¥ súbor %s. Pravdepodobne je poÅ¡kodený." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Súbor „%s“ je možné iba čítaÅ¥, takže nemôže byÅ¥ uložený.\n" +"Skúste ho uložiÅ¥ pod iným názvom." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nedá sa uložiÅ¥ súbor %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Vyskytol sa problém pri formátovaní súboru (napriek tomu bol správne " +"uložený)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalóg nemôže byÅ¥ uložený v znakovej sade „%s“\n" +"ako je uvedené v nastavení katalógu. Namiesto toho bol uložený\n" +"v UTF-8 a dané nastavenie bolo prísluÅ¡ne modifikované." + +msgid "Error saving catalog" +msgstr "Chyba pri ukladaní katalógu" + +msgid "PO Translation Files" +msgstr "PO súbory prekladu" + +msgid "POT Translation Templates" +msgstr "Å ablóny prekladania POT" + +msgid "All Translation Files" +msgstr "VÅ¡etky prekladané súbory" + +msgid "Merging differences..." +msgstr "Zlučovanie rozdielov..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "„%s\" nie je platný POT súbor." + +msgid "(Use default language)" +msgstr "(PoužiÅ¥ pôvodný jazyk)" + +msgid "Select your preferred language" +msgstr "Vyberte si váš preferovaný jazyk" + +msgid "Language selection" +msgstr "Výber jazyka" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Musíte reÅ¡tartovaÅ¥ program Poedit, aby sa prejavili zmeny." + +msgid "Downloading translations is disabled in this project." +msgstr "SÅ¥ahovanie prekladu nie je možné pre tento projekt." + +msgid "Not authorized, please sign in again." +msgstr "Chyba pri autorizácii, skúste sa znovu prihlásiÅ¥." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin je služba pre správu online prekladov a nástroj pre spoluprácu pri " +"nich. Program Poedit môže jednoducho synchronizovaÅ¥ .PO súbory spravované v " +"službe Crowdin." + +msgid "Sign In" +msgstr "PrihlásiÅ¥" + +msgid "Sign in" +msgstr "PrihlásiÅ¥ sa" + +msgid "Sign Out" +msgstr "OdhlásiÅ¥ sa" + +msgid "Sign out" +msgstr "OdhlásiÅ¥ sa" + +msgid "Waiting for authentication…" +msgstr "Prebieha overovanie vášho účtu…" + +msgid "Updating user information…" +msgstr "Aktualizujú sa informácie o používateľovi…" + +msgid "Signed in as:" +msgstr "Ste prihlásený ako:" + +msgid "Learn More About Crowdin" +msgstr "Viac informácií o službe Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Viac informácií o službe Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Prihlásenie do služby Crowdin" + +msgid "Open Crowdin translation" +msgstr "OtvoriÅ¥ Crowdin preklad" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Jazyk prekladu:" + +msgid "File:" +msgstr "Súbor:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Neboli nájdené žiadne prekladateľské projekty vo vaÅ¡om Crowdin účte." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Tento projekt neobsahuje žiadne súbory, ktoré môžu byÅ¥ preložené programom " +"Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Tento súbor môže byÅ¥ upravovaný iba vo webovom rozhraní služby Crowdin." + +msgid "Downloading latest translations…" +msgstr "SÅ¥ahovanie najnovších prekladov…" + +msgid "Syncing with Crowdin" +msgstr "Synchronizácia so službou Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synchronizácia so službou Crowdin zlyhala." + +msgid "Crowdin error" +msgstr "Chyba - Crowdin" + +msgid "Uploading translations…" +msgstr "Aktualizácia prekladov…" + +msgid "&Copy" +msgstr "&KopírovaÅ¥" + +msgid "Learn more" +msgstr "ZistiÅ¥ viac" + +msgid "Learn More" +msgstr "ZistiÅ¥ viac" + +#, c-format +msgid "Failed command: %s" +msgstr "Neplatný príkaz: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Nepodarilo sa zlúčiÅ¥ katalógy gettext." + +msgid "Scanning files..." +msgstr "Prehľadávanie súborov..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Spracúva sa %s súborov..." + +msgid "Failed to load extracted catalog." +msgstr "Nepodarilo sa načítaÅ¥ extrahovaný katalóg." + +msgid "&Help" +msgstr "&Pomoc" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO súbory nemôžu by upravované priamo v programe Poedit." + +msgid "Error opening file" +msgstr "Chyba pri otváraní súboru" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Otvorte a upravte namiesto toho zodpovedajúci PO súbor. Po jeho uložení bude " +"takisto aktualizovaný aj MO súbor." + +msgid "don't delete temporary files (for debugging)" +msgstr "nemazaÅ¥ dočasné súbory (pre ladiace účely)" + +msgid "handle a poedit:// URI" +msgstr "handle a poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Nie je možné komunikovaÅ¥ s presom programu Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "DoÅ¡lo k neočakávanej chybe: %s" + +msgid "Unhandled exception occurred." +msgstr "DoÅ¡lo k neočakávanej chybe." + +msgid "Open catalog" +msgstr "OtvoriÅ¥ katalóg" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Súbor „%s“ neexistuje." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "O programe %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Verzia %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Služby" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "SkryÅ¥ %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "SkryÅ¥ ostatné" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "ZobraziÅ¥ vÅ¡etko" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "UkončiÅ¥ %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Program Poedit je jednoducho použiteľný editor prekladov." + +msgid "Catalogs Manager" +msgstr "Správca katalógov" + +msgid "Check for Updates..." +msgstr "SkontrolovaÅ¥ aktualizácie programu..." + +msgid "&Edit" +msgstr "&UpraviÅ¥" + +msgid "Undo" +msgstr "Späť" + +msgid "Redo" +msgstr "Zmena" + +msgid "Paste and Match Style" +msgstr "PrilepiÅ¥ a prispôsobiÅ¥ Å¡týl" + +msgid "Delete" +msgstr "OdstrániÅ¥" + +msgid "Spelling and Grammar" +msgstr "Pravopis a gramatika" + +msgid "Show Spelling and Grammar" +msgstr "ZobraziÅ¥ pravopis a gramatiku" + +msgid "Check Document Now" +msgstr "SkontrolovaÅ¥ dokument teraz" + +msgid "Check Spelling While Typing" +msgstr "KontrolovaÅ¥ gramatiku počas písania" + +msgid "Check Grammar With Spelling" +msgstr "SkontrolovaÅ¥ gramatiku so slovníkom" + +msgid "Correct Spelling Automatically" +msgstr "Automaticky opravovaÅ¥ gramatiku" + +msgid "Substitutions" +msgstr "Zámeny" + +msgid "Show Substitutions" +msgstr "ZobraziÅ¥ návrhy" + +msgid "Smart Copy/Paste" +msgstr "Rýchle kopírovanie/prilepenie" + +msgid "Smart Quotes" +msgstr "Chytré úvodzovky" + +msgid "Smart Dashes" +msgstr "Chytré pomlčky" + +msgid "Smart Links" +msgstr "Chytré odkazy" + +msgid "Text Replacement" +msgstr "Zámena textu" + +msgid "Transformations" +msgstr "Zmeny" + +msgid "Make Upper Case" +msgstr "ZmeniÅ¥ na VEĽKÉ PÍSMO" + +msgid "Make Lower Case" +msgstr "ZmeniÅ¥ na malé písmo" + +msgid "Capitalize" +msgstr "Veľké písmená" + +msgid "Speech" +msgstr "Jazyk" + +msgid "Start Speaking" +msgstr "ZačaÅ¥ rozprávanie" + +msgid "Stop Speaking" +msgstr "ZastaviÅ¥ rozprávanie" + +msgid "&View" +msgstr "&ZobraziÅ¥" + +msgid "Enter Full Screen" +msgstr "Na celú obrazovku" + +msgid "Window" +msgstr "Okno" + +msgid "Minimize" +msgstr "MinimalizovaÅ¥" + +msgid "Zoom" +msgstr "Priblíženie" + +msgid "Bring All to Front" +msgstr "PreniesÅ¥ vÅ¡etko dopredu" + +msgid "PO Translation" +msgstr "PO preklad" + +msgid "The file cannot be opened." +msgstr "Súbor nemohol byÅ¥ otvorený." + +msgid "Invalid file" +msgstr "Neplatný súbor" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Súbor môže byÅ¥ poÅ¡kodený alebo formát nebol rozoznaný programom Poedit." + +msgid "&Undo" +msgstr "&ZruÅ¡iÅ¥" + +msgid "&Redo" +msgstr "&Znovu" + +msgid "Cu&t" +msgstr "V&ystrihnúť" + +msgid "Cut" +msgstr "Vystrihnúť" + +msgid "Copy" +msgstr "KopírovaÅ¥" + +msgid "&Paste" +msgstr "&VložiÅ¥" + +msgid "Paste" +msgstr "VložiÅ¥" + +msgid "&Delete" +msgstr "&ZmazaÅ¥" + +msgid "Select &All" +msgstr "VybraÅ¥ &VÅ¡etko" + +msgid "Select All" +msgstr "VybraÅ¥ vÅ¡etko" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Hore" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Dole" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Nemôžete spustiÅ¥ naraz viac ako jeden súbor v okne aplikácie Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Súbor „%s\" nie je katalógom prekladov." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Súbor" + +msgid "&Go" +msgstr "P&rejsÅ¥" + +msgid "Source text:" +msgstr "Zdrojový text:" + +msgid "Singular:" +msgstr "Jednotné číslo:" + +msgid "Plural:" +msgstr "Množné číslo:" + +msgid "Translation:" +msgstr "Preklad:" + +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 "" +"Súbory POT sú iba Å¡ablóny a samé neobsahujú žiadne preklady.\n" +"Ak chcete vytvoriÅ¥ nový preklad, vytvorte nový PO súbor na základe Å¡ablóny." + +msgid "Create New Translation" +msgstr "VytvoriÅ¥ nový preklad" + +msgid "Create new translation" +msgstr "VytvoriÅ¥ nový preklad" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Kontrola pravopisu je vypnutá, pretože slovník pre jazyk %s nie je " +"nainÅ¡talovaný." + +msgid "Install" +msgstr "InÅ¡talovaÅ¥" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalóg bol zmenený. Želáte si uložiÅ¥ zmeny?" + +msgid "Save changes" +msgstr "UložiÅ¥ zmeny" + +msgid "Your changes will be lost if you don't save them." +msgstr "VaÅ¡e zmeny budú stratené, ak ich neuložíte." + +msgid "Save" +msgstr "UložiÅ¥" + +msgid "Don't save" +msgstr "NeukladaÅ¥" + +msgid "Don't Save" +msgstr "NeukladaÅ¥" + +msgid "Save as..." +msgstr "UložiÅ¥ ako..." + +msgid "Compile to..." +msgstr "ZostaviÅ¥ do..." + +msgid "Compiled Translation Files" +msgstr "Spracované súbory prekladu" + +msgid "Export as..." +msgstr "ExportovaÅ¥ ako..." + +msgid "HTML Files" +msgstr "HTML súbory" + +msgid "Open catalog template" +msgstr "OtvoriÅ¥ katalóg návrhov" + +msgid "Updating catalog" +msgstr "Aktualizuje sa katalóg" + +msgid "Source code not available." +msgstr "Zdrojový kód nie je k dispozícii." + +msgid "Updating failed" +msgstr "Aktualizácia zlyhala" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Nepodarilo sa aktualizovaÅ¥ preklady zo zdrojového kódu, pretože sa nenaÅ¡iel " +"žiadny kód umiestnenia vo vlastnostiach katalógu." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Záznamy v katalógu sú pravdepodobne nesprávne." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Aktualizácia katalógu zlyhala. Kliknite na „Podrobnosti >>\" pre viac " +"detailov." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "NaÅ¡iel sa %d problém s prekladom." +msgstr[1] "NaÅ¡li sa %d problémy s prekladom." +msgstr[2] "NaÅ¡lo sa %d problémov s prekladom." + +msgid "Validation results" +msgstr "Výsledky overovania" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Záznamy s chybami boli v zozname vyznačené na červeno. Podrobnosti o chybe " +"budú zobrazené, ak vyberiete nejaký záznam." + +msgid "The file was saved safely." +msgstr "Súbor bol bezpečne uložený." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Súbor bol bezpečne uložený a skompilovaný do MO formátu, ale pravdepodobne " +"nebude pracovaÅ¥ správne." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Súbor bol bezpečne uložený, ale nemôže byÅ¥ skompilovaný do formátu MO a " +"následne použitý." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Súbor vo formáte MO bol vytvorený, ale pravdepodobne nefunguje správne." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Súbor MO nemôže byÅ¥ vytvorený a použitý." + +msgid "No problems with the translation found." +msgstr "NenaÅ¡li sa žiadne problémy s prekladom." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Preklad je pripravený na používanie, ale %d záznam eÅ¡te nie je preložený." +msgstr[1] "" +"Preklad je pripravený na používanie, ale %d záznamy eÅ¡te nie sú preložené." +msgstr[2] "" +"Preklad je pripravený na používanie, ale %d záznamov eÅ¡te nie je preložených." + +msgid "The translation is ready for use." +msgstr "Preklad je pripravený na používanie." + +msgid "Context:" +msgstr "Kontext:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Program Poedit automaticky opraví neplatný obsah v súbore \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Súbor obsahoval duplicitné položky, čo nie je v PO súboroch povolené a a " +"zabránilo by to ich použitiu. Poedit tento problém opravil, ale mali by ste " +"skontrolovaÅ¥ vÅ¡etky preklady označené ako nepresné a prípadne ich opraviÅ¥." + +msgid "Language of the translation isn't set." +msgstr "Jazyk prekladu nie je nastavený." + +msgid "Set Language" +msgstr "NastaviÅ¥ jazyk" + +msgid "Set language" +msgstr "VybraÅ¥ jazyk" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Návrhy nie sú dostupné ak jazyk prekladu nie je nastavený správne. Ostatné " +"funkcie, ako množné číslo, tým môžu byÅ¥ ovplyvnené." + +msgid "Language of the translation is the same as source language." +msgstr "Jazyk prekladu je taký istý ako zdrojový jazyk." + +msgid "Fix Language" +msgstr "ZmeniÅ¥ jazyk" + +msgid "Fix language" +msgstr "OpraviÅ¥ jazyk" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Tento katalóg obsahuje záznamy s formami množného čísla, ale nemá " +"nakonfigurovanú hlavičku Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Záznamy v tomto katalógu majú rozdielny počet foriem množného čísla ako je " +"udané v hlavičke Plural-Forms katalógu" + +msgid "Required header Plural-Forms is missing." +msgstr "Potrebná hlavička Plural-Forms sa nenaÅ¡la." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Chyba syntaxe v hlavičke Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "OpraviÅ¥ hlavičku" + +msgid "Fix the header" +msgstr "OpraviÅ¥ hlavičku" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Katalógom použité vyjadrenie množného čísla je nezvyčajné pre jazyk %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Náhľad" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Chyba pri spúšťaní katalógového súboru „%s“" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Preložené: %d z %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Zostáva: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d chyba" +msgstr[1] "%d chyby" +msgstr[2] "%d chýb" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d položka" +msgstr[1] "%d položky" +msgstr[2] "%d položiek" + +msgid " (unsaved)" +msgstr " (neuložené)" + +msgid " (modified)" +msgstr " (zmenené)" + +msgid "Go" +msgstr "PrejsÅ¥" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Nepodarilo sa aktualizovaÅ¥ pamäť prekladov: %s" + +msgid "Purge deleted translations" +msgstr "OdstrániÅ¥ zmazané preklady" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Chcete odstrániÅ¥ vÅ¡etky preklady, ktoré sa už viac nepoužívajú?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ak budete pokračovaÅ¥ s čistením, vÅ¡etky preklady označené ako zmazané budú " +"natrvalo odstránené. V prípade, že budú v budúcnosti znovu pridané, budete " +"ich musieÅ¥ preložiÅ¥ znovu." + +msgid "Keep" +msgstr "ZachovaÅ¥" + +msgid "Purge" +msgstr "VyčistiÅ¥" + +msgid "Fill missing translations from TM" +msgstr "DoplniÅ¥ chýbajúce preklady z PP" + +msgid "Only fill in exact matches" +msgstr "VyplniÅ¥ iba presné zhody" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Predvolene sú chybné výsledky doplnené a označené ako nepresné. Začiarknite " +"túto možnosÅ¥, aby boli doplnené iba presné zhody." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "NeoznačovaÅ¥ presné výsledky ako nepresné" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Povoľte iba ak dôverujete kvalite vaÅ¡ej PP. Predvolene sú vÅ¡etky zhody s PP " +"označené ako nepresné a môžu byÅ¥ skontrolované." + +msgid "Fill" +msgstr "DoplniÅ¥" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d záznam bol doplnený z pamäte prekladov." +msgstr[1] "%d záznamy boli doplnené z pamäte prekladov." +msgstr[2] "%d záznamov bolo doplnených z pamäte prekladov." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Preklady boli označené ako nepresné, pretože môžu byÅ¥ nesprávne. " +"Skontrolujte ich správnosÅ¥." + +msgid "No entries could be filled from the translation memory." +msgstr "Žiadne záznamy neboli vyplnené použitím pamäte prekladov." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Pamäť prekladov neobsahuje žiaden reÅ¥azec podobný obsahu tohto súboru. Tento " +"spôsob je účinný iba pre poloautomatické preklady po tom ako sa Poedit naučí " +"zo súborov, ktoré ste preložili manuálne." + +msgid "Translating" +msgstr "Prekladanie" + +msgid "Filling missing translations from TM..." +msgstr "Vyplňovanie chýbajúcich prekladov z pamäte prekladov..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Preložený %u reÅ¥azec" +msgstr[1] "Preložené %u reÅ¥azce" +msgstr[2] "Preložených %u reÅ¥azcov" + +msgid "Copy from source text" +msgstr "SkopírovaÅ¥ zo zdrojového textu" + +msgid "Copy from Source Text" +msgstr "SkopírovaÅ¥ zo zdrojového textu" + +msgid "Clear translation" +msgstr "ZmazaÅ¥ preklad" + +msgid "Clear Translation" +msgstr "ZmazaÅ¥ preklad" + +msgid "Edit comment" +msgstr "UpraviÅ¥ komentár" + +msgid "Edit Comment" +msgstr "UpraviÅ¥ komentár" + +msgid "References:" +msgstr "Odkazy:" + +msgid "Everything" +msgstr "VÅ¡etko" + +#, c-format +msgid "Form %i" +msgstr "Tvar %i" + +msgid "Singular" +msgstr "Jednotné číslo" + +msgid "Zero" +msgstr "Nula" + +msgid "One" +msgstr "Jeden" + +msgid "Two" +msgstr "Dva" + +msgid "Plural" +msgstr "Množné číslo" + +msgid "Other" +msgstr "Ostatné" + +msgid "&Bookmarks" +msgstr "&Záložky" + +#, c-format +msgid "Set bookmark %i" +msgstr "NastaviÅ¥ záložku: %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "PrejsÅ¥ na záložku: %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "NastaviÅ¥ záložku: %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "PrejsÅ¥ na záložku: %i" + +msgid "Hide Sidebar" +msgstr "SkryÅ¥ bočný panel" + +msgid "Show Sidebar" +msgstr "ZobraziÅ¥ bočný panel" + +msgid "Hide Status Bar" +msgstr "SkryÅ¥ stavový riadok" + +msgid "Show Status Bar" +msgstr "ZobraziÅ¥ stavový riadok" + +msgid "Source text" +msgstr "Zdrojový text" + +msgid "Translation" +msgstr "Preklad" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Zdrojový text – %s" + +msgid "unknown language" +msgstr "neznámy jazyk" + +#, c-format +msgid "Translation — %s" +msgstr "Preklad - %s" + +msgid "Error:" +msgstr "Chyba:" + +msgid "Source file" +msgstr "Zdrojový súbor" + +msgid "Source file occurrence:" +msgstr "Výskyt v zdrojovom súbore:" + +msgid "Open in Editor" +msgstr "OtvoriÅ¥ v editore" + +msgid "Open in editor" +msgstr "OtvoriÅ¥ v editore" + +msgid "No references for the selected item." +msgstr "Žiadne odporúčanie pre vybanú položku." + +#, c-format +msgid "Error opening file %s!" +msgstr "Chyba pri otváraní súboru „%s\"" + +msgid "Find" +msgstr "HľadaÅ¥" + +msgid "Replace" +msgstr "NahradiÅ¥" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Možnosti" + +msgid "Ignore case" +msgstr "IgnorovaÅ¥ veľkosÅ¥ písmen" + +msgid "Wrap around" +msgstr "VyhľadávaÅ¥ dookola" + +msgid "Whole words only" +msgstr "Iba celé slová" + +msgid "Find in source texts" +msgstr "HľadaÅ¥ v zdrojových textoch" + +msgid "Find in translations" +msgstr "HľadaÅ¥ v prekladoch" + +msgid "Find in comments" +msgstr "VyhľadaÅ¥ v komentároch" + +msgid "Close" +msgstr "ZatvoriÅ¥" + +msgid "Replace All" +msgstr "NahradiÅ¥ vÅ¡etko" + +msgid "Replace all" +msgstr "NahradiÅ¥ vÅ¡etko" + +msgid "< &Previous" +msgstr "< &Predchádzajúci" + +msgid "&Next >" +msgstr "&Nasledujúci >" + +msgid "String to find" +msgstr "Vyhľadávaný reÅ¥azec" + +msgid "Replacement string" +msgstr "Nahradené reÅ¥azcom" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nepodarilo sa spustiÅ¥ program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kód alebo názov jazyku (napr. en_GB)" + +msgid "Translation Language" +msgstr "Jazyk prekladu" + +msgid "Language of the translation:" +msgstr "Jazyk prekladu:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit – Správca katalógov" + +msgid "Catalog" +msgstr "Katalóg" + +msgid "Total" +msgstr "Celkovo" + +msgid "Untrans" +msgstr "Nepreložené" + +msgid "Fuzzy" +msgstr "Nepresné" + +msgid "Bad Tokens" +msgstr "Zlé symboly" + +msgid "Last modified" +msgstr "Posledná zmena" + +msgid "Select directory" +msgstr "Vyberte si priečinok" + +msgid "Directories:" +msgstr "Priečinky:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Chcete odstrániÅ¥ tento projekt?" + +msgid "Confirmation" +msgstr "Potvrdenie" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Naozaj chcete urobiÅ¥ hromadnú aktualizáciu\n" +"vÅ¡etkých katalógov v tomto projekte?" + +msgid "Information about the translator" +msgstr "Informácie o prekladateľovi" + +msgid "Name:" +msgstr "Meno:" + +msgid "Your Name" +msgstr "VaÅ¡e meno" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "vas_email@priklad.sk" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"VaÅ¡e meno a emailová adresa sú použité iba v hlavičke Last-Translator v GNU " +"gettext súboroch." + +msgid "Editing" +msgstr "Upravovanie" + +msgid "Automatically compile MO file when saving" +msgstr "Automaticky aktualizovaÅ¥ MO súbor pri uložení" + +msgid "Show summary after catalog update" +msgstr "ZobraziÅ¥ sumarizáciu po aktualizácii katalógu" + +msgid "Check spelling" +msgstr "Kontrola gramatiky" + +msgid "Always change focus to text input field" +msgstr "Vždy aktivovaÅ¥ políčko pre zadávanie textu" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"NepovoliÅ¥ aby bol zoznam reÅ¥azcov aktivovaný. Ak je to povolené, musíte pre " +"navigáciu použiÅ¥ Ctrl – šípky na klávesnici, inak môžete priamo začaÅ¥ písaÅ¥ " +"text bez nutnosti stlačiÅ¥ Tab pre aktiváciu poľa." + +msgid "Appearance" +msgstr "Vzhľad" + +msgid "Use custom list font:" +msgstr "PoužiÅ¥ vlastný zoznam písmen:" + +msgid "Use custom text fields font:" +msgstr "PoužiÅ¥ vlastný zoznam písmen polí:" + +msgid "Change UI language" +msgstr "Zmena jazyka rozhrania" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(požadovaný Windows 8 alebo novší)" + +msgid "General" +msgstr "VÅ¡eobecné" + +msgid "Use translation memory" +msgstr "PoužiÅ¥ pamäť prekladov (PP)" + +msgid "Learn From Files..." +msgstr "ZískaÅ¥ informácie zo súborov..." + +msgid "Learn from files..." +msgstr "NaučiÅ¥ zo súborov..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "ObnoviÅ¥" + +msgid "Consult TM when updating from sources" +msgstr "PreveriÅ¥ pamäť prekladov pri aktualizácii zo zdroja" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Po povolení sa bude Poedit pokúšaÅ¥ vyplniÅ¥ nové záznamy\n" +"použitím predchádzajúcich prekladov uložených v pamäti\n" +"prekladov (PP). Ak je PP skoro prázdna, táto voľba nebude\n" +"veľmi účinná. Upravením viacerých prekladov a zväčšením\n" +"PP bude táto funkcia efektívnejÅ¡ia." + +msgid "Stored translations:" +msgstr "Počet uložených prekladov:" + +msgid "Database size on disk:" +msgstr "VeľkosÅ¥ databázy na disku:" + +msgid "Select translation files to import" +msgstr "Vyberte súbor prekladu pre import" + +msgid "Translation Memory" +msgstr "Pamäť prekladov" + +msgid "Importing translations..." +msgstr "Import prekladov..." + +msgid "Finalizing..." +msgstr "Dokončovanie..." + +msgid "Reset translation memory" +msgstr "ObnoviÅ¥ pamäť prekladov" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Ste si istý že chcete obnoviÅ¥ pamäť prekladov?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Obnovením pamäte prekladov natrvalo vymažete vÅ¡etky uložené preklady. Túto " +"operáciu nie je možné vrátiÅ¥ späť." + +msgid "Cancel" +msgstr "ZruÅ¡iÅ¥" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Zdrojové kódy extraktorov sú použité na vyhľadávanie preložiteľných reÅ¥azcov " +"v zdrojovom kóde súborov a vybraté ak môžu byÅ¥ preložené." + +msgid "New" +msgstr "Nový" + +msgid "Edit" +msgstr "UpraviÅ¥" + +msgid "Delete extractor" +msgstr "OdstrániÅ¥ extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Ste si istý, že chcete vymazaÅ¥ extraktor „%s\"?" + +msgid "Extractors" +msgstr "Extraktory" + +msgid "Accounts" +msgstr "Účty" + +msgid "Automatically check for updates" +msgstr "Automaticky kontrolovaÅ¥ aktualizácie" + +msgid "Include beta versions" +msgstr "Zahrnúť beta verzie programu" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta verzie obsahujú najnovÅ¡ie funkcie a vylepÅ¡enia, ale môžu byÅ¥ menej " +"stabilné." + +msgid "Updates" +msgstr "Aktualizácie" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Tieto nastavenia majú vplyv na interné formátovanie PO súborov.Zmeňte ich, " +"iba ak máte Å¡peciálne požiadavky, napríklad kvôli kontrole verzií." + +msgid "Line endings:" +msgstr "Ukončenie riadkov:" + +msgid "Unix (recommended)" +msgstr "Unix (odporúčané)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "ZalomiÅ¥ po:" + +msgid "Preserve formatting of existing files" +msgstr "ZachovaÅ¥ existujúce formátovanie súborov" + +msgid "Advanced" +msgstr "Rozšírené" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Nastavenia programu %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Ťahajte a pustite priečinky tu\n" +"\n" +"alebo použite + tlačidlo" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Ťahajte a pustite priečinky tu\n" +"\n" +"alebo použite + tlačidlo" + +msgid "Add Folders..." +msgstr "PridaÅ¥ priečinky..." + +msgid "Add folders..." +msgstr "PridaÅ¥ priečinky..." + +msgid "Add Files..." +msgstr "PridaÅ¥ súbory..." + +msgid "Add files..." +msgstr "PridaÅ¥ súbory..." + +msgid "Add Wildcard..." +msgstr "PridaÅ¥ zástupný reÅ¥azec..." + +msgid "Add wildcard..." +msgstr "PridaÅ¥ zástupný reÅ¥azec..." + +msgid "Paths" +msgstr "Cesty" + +msgid "Excluded paths" +msgstr "Vylúčené cesty" + +msgid "Additional keywords" +msgstr "Doplnkové kľúčové slová" + +msgid "Name of the project the translation is for" +msgstr "Názov projektu prekladu je pre" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "napr. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (odporúčané)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Najprv uložte súbor. Táto sekcia nemôže byÅ¥ bez uloženia upravovaná." + +msgid "Comment:" +msgstr "Komentár:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "V&yčistiÅ¥" + +msgid "Clear the comment" +msgstr "VymazaÅ¥ komentár" + +msgid "Create new translations project" +msgstr "VytvoriÅ¥ nový projekt prekladu" + +msgid "Edit the project" +msgstr "UpraviÅ¥ projekt" + +msgid "Delete the project" +msgstr "OdstrániÅ¥ projekt" + +msgid "Update all" +msgstr "AktualizovaÅ¥ vÅ¡etko" + +msgid "Update all catalogs in the project" +msgstr "AktualizovaÅ¥ vÅ¡etky katalógy v projekte" + +msgid "Edit project" +msgstr "UpraviÅ¥ projekt" + +msgid "Project name:" +msgstr "Názov projektu:" + +msgid "Browse" +msgstr "PrehliadaÅ¥" + +msgid "Add directory to the list" +msgstr "PridaÅ¥ priečinok do zoznamu" + +msgid "&New..." +msgstr "&Nový..." + +msgid "New from &POT/PO file..." +msgstr "Nový z &POT/PO súboru..." + +msgid "New From &POT/PO File..." +msgstr "Nový z &POT/PO súboru..." + +msgid "&Open..." +msgstr "&OtvoriÅ¥..." + +msgid "Open Recent" +msgstr "OtvoriÅ¥ posledné" + +msgid "Open from Crowdin..." +msgstr "OtvoriÅ¥ zo služby Crowdin..." + +msgid "Open From Crowdin..." +msgstr "OtvoriÅ¥ zo služby Crowdin..." + +msgid "&Close" +msgstr "&ZatvoriÅ¥" + +msgid "&Save" +msgstr "&UložiÅ¥" + +msgid "Save &as..." +msgstr "UložiÅ¥ &ako..." + +msgid "Save &As..." +msgstr "UložiÅ¥ &ako..." + +msgid "Compile to MO..." +msgstr "ZostaviÅ¥ ako MO..." + +msgid "E&xport as HTML..." +msgstr "&ExportovaÅ¥ ako HTML..." + +msgid "Check for updates..." +msgstr "SkontrolovaÅ¥ aktualizácie..." + +msgid "&Preferences..." +msgstr "Nas&tavenia" + +msgid "Catalogs &manager" +msgstr "&Správca katalógov" + +msgid "Catalogs &Manager" +msgstr "&Správca katalógov" + +msgid "E&xit" +msgstr "U&končiÅ¥" + +msgid "Quit" +msgstr "UkončiÅ¥" + +msgid "Copy from singular" +msgstr "KopírovaÅ¥ zo singulára" + +msgid "Copy From Singular" +msgstr "KopírovaÅ¥ zo singulára" + +msgid "Translation is &fuzzy" +msgstr "Preklad je &nepresný" + +msgid "Translation Is &Fuzzy" +msgstr "Preklad je &nepresný" + +msgid "Edit &comment" +msgstr "&UpraviÅ¥ komentár" + +msgid "Edit &Comment" +msgstr "&UpraviÅ¥ komentár" + +msgid "Suggestions" +msgstr "Návrhy" + +msgid "&Show references" +msgstr "&ZobraziÅ¥ odkazy" + +msgid "&Show References" +msgstr "&ZobraziÅ¥ odkazy" + +msgid "&Find..." +msgstr "&HľadaÅ¥..." + +msgid "Replace..." +msgstr "NahradiÅ¥..." + +msgid "Find next" +msgstr "NájsÅ¥ nasledujúci" + +msgid "Find previous" +msgstr "HľadaÅ¥ predchádzajúci" + +msgid "Find and Replace..." +msgstr "NájsÅ¥ a nahradiÅ¥..." + +msgid "Find Next" +msgstr "HľadaÅ¥ nasledujúci" + +msgid "Find Previous" +msgstr "NájsÅ¥ predchádzajúci" + +msgid "&Preferences" +msgstr "Nas&tavenia" + +msgid "Display entry &IDs" +msgstr "ZobraziÅ¥ &ID záznamu" + +msgid "Display Entry &IDs" +msgstr "ZobraziÅ¥ &ID záznamu" + +msgid "Sort by &file order" +msgstr "UsporiadaÅ¥ podľa poradia &súborov" + +msgid "Sort by &File Order" +msgstr "UsporiadaÅ¥ podľa &poradia súborov" + +msgid "Sort by &source" +msgstr "UsporiadaÅ¥ podľa &zdroja" + +msgid "Sort by &Source" +msgstr "UsporiadaÅ¥ podľa &zdroja" + +msgid "Sort by &translation" +msgstr "UsporiadaÅ¥ podľa &prekladu" + +msgid "Sort by &Translation" +msgstr "UsporiadaÅ¥ podľa &prekladu" + +msgid "&Group by context" +msgstr "&ZoskupiÅ¥ podľa súvislostí" + +msgid "&Group By Context" +msgstr "&ZoskupiÅ¥ podľa súvislostí" + +msgid "Entries with errors first" +msgstr "Položky s chybami ako prvé" + +msgid "Entries with Errors First" +msgstr "Položky s chybami ako prvé" + +msgid "&Untranslated entries first" +msgstr "&Najskôr nepreložené záznamy" + +msgid "&Untranslated Entries First" +msgstr "&Najskôr nepreložené záznamy" + +msgid "Show sidebar" +msgstr "ZobraziÅ¥ bočný panel" + +msgid "Show status bar" +msgstr "ZobraziÅ¥ stavový riadok" + +msgid "C&atalog" +msgstr "&Katalóg" + +msgid "&Update from sources" +msgstr "&AktualizovaÅ¥ zo zdroja" + +msgid "&Update from Sources" +msgstr "&AktualizovaÅ¥ zo zdroja" + +msgid "Update from &POT file..." +msgstr "AktualizovaÅ¥ z &POT Å¡ablóny..." + +msgid "Update from &POT File..." +msgstr "AktualizovaÅ¥ z &POT Å¡ablóny..." + +msgid "Sync with Crowdin" +msgstr "Synchronizácia so službou Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "DoplniÅ¥ chýbajúce preklady z &PP..." + +msgid "Fill Missing Translations from &TM..." +msgstr "DoplniÅ¥ chýbajúce preklady z &PP..." + +msgid "&Purge deleted translations" +msgstr "OdstrániÅ¥ &nepoužívané preklady" + +msgid "&Purge Deleted Translations" +msgstr "OdstrániÅ¥ &nepoužívané preklady" + +msgid "&Validate translations" +msgstr "&OveriÅ¥ preklady" + +msgid "&Validate Translations" +msgstr "&OveriÅ¥ preklady" + +msgid "&Properties..." +msgstr "&Vlastnosti..." + +msgid "&Done and next" +msgstr "&DokončiÅ¥ a prejsÅ¥ na ďalší" + +msgid "&Done and Next" +msgstr "&DokončiÅ¥ a prejsÅ¥ na ďalší" + +msgid "&Previous translation" +msgstr "&Predchádzajúci preklad" + +msgid "&Previous Translation" +msgstr "&Predchádzajúci preklad" + +msgid "&Next translation" +msgstr "&Nasledujúci preklad" + +msgid "&Next Translation" +msgstr "&Nasledujúci preklad" + +msgid "P&revious unfinished" +msgstr "P&redoÅ¡lý nedokončený" + +msgid "P&revious Unfinished" +msgstr "P&redoÅ¡lý nedokončený" + +msgid "Ne&xt unfinished" +msgstr "Nasledujúci &nedokončený" + +msgid "Ne&xt Unfinished" +msgstr "Nasledujúci &nedokončený" + +msgid "Previous plural form" +msgstr "Predhádzajúci tvar plurálu" + +msgid "Previous Plural Form" +msgstr "Predhádzajúci tvar plurálu" + +msgid "Next plural form" +msgstr "Ďalší tvar plurálu" + +msgid "Next Plural Form" +msgstr "Ďalší tvar plurálu" + +msgid "&Online help" +msgstr "&Pomocník online" + +msgid "&Online Help" +msgstr "&Pomocník online" + +msgid "&GNU gettext manual" +msgstr "Dokumentácia &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Dokumentácia &GNU gettext" + +msgid "&About Poedit" +msgstr "&O programe Poedit" + +msgid "&About" +msgstr "&O programe..." + +msgid "Extractor setup" +msgstr "Nastavenia extraktora" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Zoznam prípon oddelených bodkočiarkou (napr. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Vyvolanie:" + +msgid "Command to extract translations:" +msgstr "Príkaz pre extrakciu prekladov:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Tento príkaz sa používa na spustenie extraktora.\n" +"„%o\" sa zamení za meno výstupného súboru,\n" +"„%K\" na zoznam kľúčových slov, „%F\" na zoznam\n" +"vstupných súborov, „%C\" na znak kódovej stránky\n" +"(pozri nižšie)." + +msgid "An item in keywords list:" +msgstr "Položka v zozname kľúčových slov:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Toto bude pripojené k príkazovému riadku raz pre každé\n" +"kľúčové slovo. „%k\" sa zamení sa kľúčové slovo." + +msgid "An item in input files list:" +msgstr "Položka v zozname vstupných súborov:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Toto bude pripojené k príkazu raz pre každý vstupný\n" +"súbor. „%f\" sa zamení názvom súboru." + +msgid "Source code charset:" +msgstr "Zdrojový kód znakovej sady:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Toto bude pripojené do príkazového riadku iba ak je zadaný\n" +"zdroj znakovej sady. „%c\" sa rozšíri o hodnotu znakovej sady." + +msgid "Catalog properties" +msgstr "Vlastnosti katalógu" + +msgid "Project name and version:" +msgstr "Názov projektu a verzia:" + +msgid "Plural Forms:" +msgstr "Tvary množného čísla:" + +msgid "Use default rules for this language" +msgstr "PoužiÅ¥ predvolené pravidlá pre tento jazyk" + +msgid "Use custom expression" +msgstr "PoužiÅ¥ vlastný výraz" + +msgid "Learn about plural forms" +msgstr "ZistiÅ¥ informácie o formách množného čísla" + +msgid "Charset:" +msgstr "Znaková sada:" + +msgid "Team:" +msgstr "Názov tímu:" + +msgid "Team's email address:" +msgstr "Emailová adresa tímu:" + +msgid "Translation properties" +msgstr "Vlastnosti prekladu" + +msgid "Sources paths" +msgstr "Cesty k zdrojom" + +msgid "Extract text from source files in the following directories:" +msgstr "AktualizovaÅ¥ text zo zdrojových súborov v nasledovných adresároch:" + +msgid "Base path:" +msgstr "Základná cesta:" + +msgid "Sources keywords" +msgstr "Zdrojové kľúčové slová" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"PoužiÅ¥ tieto kľúčové slová (názvy funkcií) pre rozlíšenie preložiteľných\n" +"reÅ¥azcov v zdrojových súboroch:" + +msgid "Learn about gettext keywords" +msgstr "ZistiÅ¥ informácie o gettext kľúčových slovách" + +msgid "Update summary" +msgstr "Súhrn aktualizácie" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Tieto reÅ¥azce boli nájdené v zdroji ale v katalógu sa nenachádzajú.\n" +"Program Poedit ich teraz pridá do katalógu." + +msgid "New strings" +msgstr "Nové reÅ¥azce" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Tieto reÅ¥azce sa už nenachádzajú v zdrojových kódoch.\n" +"Program Poedit ich teraz odstráni z katalógu." + +msgid "Obsolete strings" +msgstr "Vyradené preklady" + +msgid "(0 new, 0 obsolete)" +msgstr "(žiadne nové, žiadne vyradené)" + +msgid "Open" +msgstr "OtvoriÅ¥" + +msgid "Save catalog" +msgstr "UložiÅ¥ katalóg" + +msgid "Validate" +msgstr "OveriÅ¥" + +msgid "Check for errors in the translation" +msgstr "SkontrolovaÅ¥ chyby v preklade" + +msgid "Update" +msgstr "AktualizovaÅ¥" + +msgid "Update catalog - synchronize it with sources" +msgstr "AktualizovaÅ¥ katalóg - synchronizácia so zdrojom" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Použite, ak je vybraný reÅ¥azec preložený nepresne" + +msgid "Show or hide the sidebar" +msgstr "ZobraziÅ¥ alebo skryÅ¥ bočný panel" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Predchádzajúci zdrojový text:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Starý zdrojový text (pred zmenou počas aktualizácie), bude označený ako " +"nepresný." + +msgid "Notes for translators:" +msgstr "Poznámky pre prekladateľov:" + +msgid "Add comment" +msgstr "PridaÅ¥ komentár" + +msgid "Add Comment" +msgstr "PridaÅ¥ komentár" + +msgid "Translation suggestions:" +msgstr "Návrhy prekladu:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nenájdené žiadne zhody" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "NenaÅ¡li sa žiadne zhody" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Tento reÅ¥azec bol nájdený v pamäti prekladov programu Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nové: %i, zastarané: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Import prekladov: %d" + +msgid "Poedit Update" +msgstr "Aktualizácia programu Poedit" + +msgid "Preparing migration..." +msgstr "Príprava migrácie..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migrácia existujúceho stavu: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Progran Poedit potrebuje previesÅ¥ vaÅ¡u pamäť prekladov do nového formátu." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Toto musí byÅ¥ vykonané pred Å¡tartom programu. Normálne to trvá kratÅ¡ie, ale " +"ak máte uložené veľké množstvo prekladov, ta to môže trvaÅ¥ niekoľko minút." + +msgid "Proceed" +msgstr "PokračovaÅ¥" + +msgid "Translation memory migration failed." +msgstr "Presun pamäte prekladov na nepodaril." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"VaÅ¡a pamäť prekladov nemôže byÅ¥ premiestnená. Chyba:\n" +"\n" +"%s\n" +"Kontaktujte nás na e-mail help@poedit.net a my to opravíme." + +msgid "Cannot create temporary directory." +msgstr "Nepodarilo sa vytvoriÅ¥ dočasný adresár." + +msgid "Welcome to Poedit" +msgstr "Vitajte v programe Poedit" + +msgid "Edit a translation" +msgstr "UpraviÅ¥ preklad" + +msgid "Open an existing PO file and edit the translation." +msgstr "OtvoriÅ¥ existujúci PO súbor a upraviÅ¥ preklad." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "PoužiÅ¥ existujúci PO súbor alebo POT Å¡ablónu a vytvoriÅ¥ nový preklad." + +msgid "Collaborate on a translation with Crowdin" +msgstr "SpolupracovaÅ¥ na preklade so službou Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"StiahnuÅ¥ súbor zo služby Crowdin, preložiÅ¥ a synchronizovaÅ¥ späť so zmenami." + +msgid "What is Crowdin?" +msgstr "Čo je Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "V súboru nie sú žiadne preklady. Toto je nezvyčajné." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Prekladateľné reÅ¥azce nie sú pridávané manuálne v systéme Gettext, ale sú " +"automaticky rozbalené\n" +"zo zdrojového kódu. Takto zostanú vaÅ¡e preklady aktuálne a správne.\n" +"Prekladatelia zvyčajne používajú súbory PO Å¡ablón (s príponou .POT), ktoré " +"sú pripravené vývojarom." + +msgid "(Learn more about GNU gettext)" +msgstr "(Dočítajte sa viac o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"NajjednoduchÅ¡ia cesta, ako vyplniÅ¥ tento katalóg, je aktualizovaÅ¥ ho z POT " +"Å¡ablóny:" + +msgid "Update from POT" +msgstr "AktualizovaÅ¥ z POT súboru" + +msgid "Take translatable strings from an existing POT template." +msgstr "PoužiÅ¥ prekladateľné reÅ¥azce z existujúcej POT Å¡ablóny." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Môžete vybraÅ¥ prekladateľné reÅ¥azce priamo z zdrojového kódu:" + +msgid "Extract from sources" +msgstr "AktualizovaÅ¥ zo zdrojov" + +msgid "Configure source code extraction in Properties." +msgstr "NastaviÅ¥ pôvod zdrojového kódu v Nastaveniach." + +msgid "Sync" +msgstr "Synchronizácia" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synchronizácia prekladu so službou Crowdin" diff --git a/locales/sl.mo b/locales/sl.mo new file mode 100644 index 0000000000000000000000000000000000000000..94400403be79f6e5ce6ab459a523d372e1185108 GIT binary patch literal 35121 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μa_a#4QpYFn>bqOQdC#q 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\n" +"Language-Team: Slovenian\n" +"Language: sl_SI\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: sl\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Skrij obvestilno sporočilo" + +msgid "Don't Show Again" +msgstr "Ne kaži več" + +msgid "Don't show again" +msgstr "_Sporočila ne pokaži več" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" +"Vrstica %d datoteke \"%s\" je okvarjena (ne vsebuje veljavnih podatkov %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Nepravilno oblikovana glava: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"PoÅ¡kodovana datoteka kataloga: edninska oblika msgstr je uporabljena skupaj " +"z msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"PoÅ¡kodovana datoteka kataloga: množinska oblika msgstr je uporabljena brez " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Med nalaganjem kataloga je priÅ¡lo do napak. Del podatkov morda manjka ali pa " +"so kot rezultat nepravilni." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Datoteke '%s' ni mogoče naložiti, najverjetneje je pokvarjena." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Datoteka '%s' je le za branje in je ni mogoče shraniti.\n" +"Shranite jo lahko z drugim imenom." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Datoteke %s ni mogoče shraniti." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"PriÅ¡lo je do napake med zapisovanjem zgradbe kataloga (datoteka je bila " +"sicer uspeÅ¡no shranjena)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog ni mogel shraniti v nabor znakov \"%s\" kot iz kataloga settings.\n" +"\n" +"It je bila shranjena v UTF-8 namesto in nastavitev je ustrezno spremenjene." + +msgid "Error saving catalog" +msgstr "Napaka med shranjevanjem kataloga" + +msgid "PO Translation Files" +msgstr "Prevodne datoteke PO" + +msgid "POT Translation Templates" +msgstr "Prevodne predloge POT" + +msgid "All Translation Files" +msgstr "Vse prevodne datoteke" + +msgid "Merging differences..." +msgstr "Združevanje razlik ..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' ni veljavna datoteka POT." + +msgid "(Use default language)" +msgstr "(Uporabi privzeti jezik)" + +msgid "Select your preferred language" +msgstr "Izbor želenega jezika" + +msgid "Language selection" +msgstr "Izbor jezika" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Program Poedit je treba ponovno zagnati, da spremembe začnejo veljati." + +msgid "Downloading translations is disabled in this project." +msgstr "Prenos prevodov je onemogočena v tem projektu." + +msgid "Not authorized, please sign in again." +msgstr "Niste pooblaščeni, ponovno se prijavite." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin je spletna platforma za upravljanje lokalizacij in orodje za " +"skupinsko prevajanje. Poedit lahko neopazno usklajuje datoteke PO, ki se " +"upravljajo na Crowdin." + +msgid "Sign In" +msgstr "Prijavi" + +msgid "Sign in" +msgstr "Prijavi" + +msgid "Sign Out" +msgstr "Odjavi" + +msgid "Sign out" +msgstr "Odjavi" + +msgid "Waiting for authentication…" +msgstr "Čakanje na preverjanje pristnosti ..." + +msgid "Updating user information…" +msgstr "Posodabljanje informacij o uporabniku ..." + +msgid "Signed in as:" +msgstr "Prijavljeni kot:" + +msgid "Learn More About Crowdin" +msgstr "Več o Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Več o Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Prijavi v Crowdin" + +msgid "Open Crowdin translation" +msgstr "Odpri prevod Crowdin" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Jezik:" + +msgid "File:" +msgstr "Datoteka:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Nobenega projekta prevoda ni v računu Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Ta projekt ne vsebuje datotek, ki jih je mogoče prevesti s programom Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"To datoteko je mogoče urejati le v spletnem vmesniku prevajalskega orodja " +"Crowdin." + +msgid "Downloading latest translations…" +msgstr "PrenaÅ¡anje najnovejÅ¡ih prevodov ..." + +msgid "Syncing with Crowdin" +msgstr "Usklajevanje s Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Usklajevanje s Crowdin ni uspelo." + +msgid "Crowdin error" +msgstr "Napaka Crowdin" + +msgid "Uploading translations…" +msgstr "Nalaganje prevodov ..." + +msgid "&Copy" +msgstr "&Kopiraj" + +msgid "Learn more" +msgstr "Več podrobnosti" + +msgid "Learn More" +msgstr "Več informacij" + +#, c-format +msgid "Failed command: %s" +msgstr "PriÅ¡lo je do napake med izvajanjem ukaza: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "PriÅ¡lo je do napake med združevanjem katalogov sporočil gettext." + +msgid "Scanning files..." +msgstr "Preiskovanje datotek ..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Razčlenjevanje %s datotek ..." + +msgid "Failed to load extracted catalog." +msgstr "PriÅ¡lo je do napake med nalaganjem razÅ¡irjenega kataloga." + +msgid "&Help" +msgstr "Pomo&č" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Datotek MO ni mogoče neposredno urejati s programom Poedit." + +msgid "Error opening file" +msgstr "Napaka pri odpiranju datoteke" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "ne izbriÅ¡i začasnih datotek (za razhroščevanje)" + +msgid "handle a poedit:// URI" +msgstr "upravljaj z naslovom URI poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Neobravnavana izjema: %s" + +msgid "Unhandled exception occurred." +msgstr "PriÅ¡lo je do neobravnavane izjeme." + +msgid "Open catalog" +msgstr "Odpri katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Datoteka '%s' ne obstaja." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "O %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Različica %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Storitve" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Skrij %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Skrij ostale" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Prikaži vse" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Končaj %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit je enostaven in priročen urejevalnik prevodov." + +msgid "Catalogs Manager" +msgstr "Upravljalnik katalogov" + +msgid "Check for Updates..." +msgstr "Preveri za posodobitve ..." + +msgid "&Edit" +msgstr "&Uredi" + +msgid "Undo" +msgstr "Razveljavi" + +msgid "Redo" +msgstr "Ponovi" + +msgid "Paste and Match Style" +msgstr "Prilepi in uskladi slog" + +msgid "Delete" +msgstr "IzbriÅ¡i" + +msgid "Spelling and Grammar" +msgstr "Črkovanje in slovnica" + +msgid "Show Spelling and Grammar" +msgstr "Pokaži črkovanje in slovnico" + +msgid "Check Document Now" +msgstr "Preveri dokument zdaj" + +msgid "Check Spelling While Typing" +msgstr "Preverjanje črkovanja med tipkanjem" + +msgid "Check Grammar With Spelling" +msgstr "Ob preverjanju črkovanja preveri tudi slovnico" + +msgid "Correct Spelling Automatically" +msgstr "Samodejno popravljaj napake v črkovanju" + +msgid "Substitutions" +msgstr "Zamenjave" + +msgid "Show Substitutions" +msgstr "Pokaži zamenjave" + +msgid "Smart Copy/Paste" +msgstr "Pametno kopiranje/lepljenje" + +msgid "Smart Quotes" +msgstr "Pametni narekovaji" + +msgid "Smart Dashes" +msgstr "Pametni pomiÅ¡ljaji" + +msgid "Smart Links" +msgstr "Pametne povezave" + +msgid "Text Replacement" +msgstr "Nadomestno besedilo" + +msgid "Transformations" +msgstr "Pretvorbe" + +msgid "Make Upper Case" +msgstr "IzpiÅ¡i z velikimi črkami" + +msgid "Make Lower Case" +msgstr "IzpiÅ¡i z malimi črkami" + +msgid "Capitalize" +msgstr "Z velikimi začetnicami" + +msgid "Speech" +msgstr "Govor" + +msgid "Start Speaking" +msgstr "Začni govoriti" + +msgid "Stop Speaking" +msgstr "Nehaj govoriti" + +msgid "&View" +msgstr "&Pogled" + +msgid "Enter Full Screen" +msgstr "Vstopi v celozaslonski način" + +msgid "Window" +msgstr "Okno" + +msgid "Minimize" +msgstr "PomanjÅ¡aj" + +msgid "Zoom" +msgstr "Povečava" + +msgid "Bring All to Front" +msgstr "Postavi vse v ospredje" + +msgid "PO Translation" +msgstr "Prevod PO" + +msgid "The file cannot be opened." +msgstr "Datoteke ni mogoče odpreti." + +msgid "Invalid file" +msgstr "Neveljavna datoteka" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Datoteka je lahko poÅ¡kodovana ali v neznanem zapisu za Poedit." + +msgid "&Undo" +msgstr "&Razveljavi" + +msgid "&Redo" +msgstr "&Uveljavi" + +msgid "Cu&t" +msgstr "I&zreži" + +msgid "Cut" +msgstr "Izreži" + +msgid "Copy" +msgstr "Kopiraj" + +msgid "&Paste" +msgstr "&Prilepi" + +msgid "Paste" +msgstr "Prilepi" + +msgid "&Delete" +msgstr "&IzbriÅ¡i" + +msgid "Select &All" +msgstr "Izberi &vse" + +msgid "Select All" +msgstr "Izberi vse" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Krmilka+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Dvigalka+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "VnaÅ¡alka" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Navzgor" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Navzdol" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "krmilka" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "izmenjalka" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "dvigalka" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Ni mogoče povleči več kot ene datoteke v okno Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Datoteka '%s' ni katalog sporočil." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Datoteka" + +msgid "&Go" +msgstr "&Pojdi" + +msgid "Source text:" +msgstr "Izvorno besedilo:" + +msgid "Singular:" +msgstr "Ednina:" + +msgid "Plural:" +msgstr "Množina:" + +msgid "Translation:" +msgstr "Prevod:" + +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 so samo predloge in ne vsebujejo prevodov.\n" +"Za prevod ustvarite novo datoteko PO na osnovi predloge." + +msgid "Create New Translation" +msgstr "Ustvari nov prevod" + +msgid "Create new translation" +msgstr "Ustvari nov prevod" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Preverjanje črkovanja je onemogočeno, ker ni nameščen slovar za %s." + +msgid "Install" +msgstr "Namesti" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog je spremenjen. Ali želite spremembe shraniti?" + +msgid "Save changes" +msgstr "Shrani spremembe" + +msgid "Your changes will be lost if you don't save them." +msgstr "V primeru, da sprememb na shranite, bodo trajno izgubljene." + +msgid "Save" +msgstr "Shrani" + +msgid "Don't save" +msgstr "Ne shrani" + +msgid "Don't Save" +msgstr "Ne shrani" + +msgid "Save as..." +msgstr "Shrani kot ..." + +msgid "Compile to..." +msgstr "Prevedi v ..." + +msgid "Compiled Translation Files" +msgstr "Prevedene prevodne datoteke" + +msgid "Export as..." +msgstr "Izvozi kot ..." + +msgid "HTML Files" +msgstr "Datoteke HTML" + +msgid "Open catalog template" +msgstr "Odpri predlogo kataloga" + +msgid "Updating catalog" +msgstr "Posodabljanje kataloga" + +msgid "Source code not available." +msgstr "Izvorna koda ni na voljo." + +msgid "Updating failed" +msgstr "Posodobitev ni uspela" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Vnosi v katalogu so najbrž napačni." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Posodobitev kataloga ni uspela. Za več podrobnosti kliknite na 'Več >>'." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Najdenih je %d napak v prevodu." +msgstr[1] "Najdena je %d napaka v prevodu." +msgstr[2] "Najdeni sta %d napaki v prevodu." +msgstr[3] "Najdene so %d napake v prevodu." + +msgid "Validation results" +msgstr "Rezultati določanja ustreznosti prevoda" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Vnosi na seznamu z napakami so označeni z rdečo barvo. Podrobnosti napake so " +"prikazane ob izboru." + +msgid "The file was saved safely." +msgstr "Datoteka je bila shranjena varno." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Besedilna datoteka prevoda je uspeÅ¡no shranjena, ni pa je mogoče pretvoriti " +"v zapis MO za uporabo." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "Ni težav z najdenim prevodom." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "The translation is ready for use." +msgstr "Prevod je pripravljen za uporabo." + +msgid "Context:" +msgstr "Vsebina:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "Jezik prevoda ni nastavljen." + +msgid "Set Language" +msgstr "Določi jezik" + +msgid "Set language" +msgstr "Določi jezik" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Predlogi niso na voljo, če jezik prevoda ni pravilno nastavljen. To lahko " +"vpliva tudi na druge funkcije, kot so množinske oblike." + +msgid "Language of the translation is the same as source language." +msgstr "Jezik prevoda je enak izvornemu jeziku." + +msgid "Fix Language" +msgstr "Popravi jezik" + +msgid "Fix language" +msgstr "Popravi jezik" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"V katalogu so vnosi z množinskimi oblikami, ki niso pravilno določeni v " +"glavi kataloga." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Vnosi v katalogu uporabljajo različne množinske oblike, kot je to določeno v " +"glavi kataloga." + +msgid "Required header Plural-Forms is missing." +msgstr "V glavi manjka zahtevano določilo za množinske oblike." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Napaka skladnje v glavi množinskih oblik (\"%s\")." + +msgid "Fix the Header" +msgstr "Popravi glavo" + +msgid "Fix the header" +msgstr "Popravi glavo" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Preglej" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Napaka med nalaganjem datoteke kataloga sporočil '%s'.'" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Prevedeno: %d %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Preostane: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d napaka" +msgstr[1] "%d napaki" +msgstr[2] "%d napake" +msgstr[3] "%d napak" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d vnos" +msgstr[1] "%d vnosa" +msgstr[2] "%d vnosi" +msgstr[3] "%d vnosov" + +msgid " (unsaved)" +msgstr " (neshranjeno)" + +msgid " (modified)" +msgstr " (spremenjeno)" + +msgid "Go" +msgstr "Pojdi" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Posodobitev prevodnega pomnilnika ni uspela: %s" + +msgid "Purge deleted translations" +msgstr "Odstrani izbrisane prevode" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Ali res želite odstraniti vse prevode, ki niso več v uporabi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"V primeru nadaljevanja s počiščenjem prevodov, bodo ti označeni kot " +"izbrisani in s tem trajno izgubljeni. V kolikor se ti nizi v prihodnje znova " +"pojavijo, jih bo treba ponovno prevesti." + +msgid "Keep" +msgstr "Ohrani" + +msgid "Purge" +msgstr "Počisti" + +msgid "Fill missing translations from TM" +msgstr "Zapolni manjkajoče prevode iz PP" + +msgid "Only fill in exact matches" +msgstr "Izpolni le natančna ujemanja" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Natančnih zadetkov ne označi kot nejasnih" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "Izpolni" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "Prevajanje" + +msgid "Filling missing translations from TM..." +msgstr "Zapolni manjkajoče prevode iz PP ..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "Prevedena sta %u niza" +msgstr[2] "" +msgstr[3] "Prevedenih je %u nizov" + +msgid "Copy from source text" +msgstr "Kopiraj iz izvornega besedila" + +msgid "Copy from Source Text" +msgstr "Kopiraj iz izvornega besedila" + +msgid "Clear translation" +msgstr "Počisti prevod" + +msgid "Clear Translation" +msgstr "Počisti prevod" + +msgid "Edit comment" +msgstr "Uredi opombo" + +msgid "Edit Comment" +msgstr "Uredi opombo" + +msgid "References:" +msgstr "Sklici:" + +msgid "Everything" +msgstr "Vse" + +#, c-format +msgid "Form %i" +msgstr "Oblika %i" + +msgid "Singular" +msgstr "Ednina" + +msgid "Zero" +msgstr "Nič" + +msgid "One" +msgstr "Eden" + +msgid "Two" +msgstr "Dva" + +msgid "Plural" +msgstr "Množina" + +msgid "Other" +msgstr "Drugo" + +msgid "&Bookmarks" +msgstr "&Zaznamki" + +#, c-format +msgid "Set bookmark %i" +msgstr "Določi zaznamek %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Pojdi na zaznamek %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Določi zaznamek %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Pojdi na zaznamek %i" + +msgid "Hide Sidebar" +msgstr "Skrij stransko vrstico" + +msgid "Show Sidebar" +msgstr "Pokaži stransko vrstico" + +msgid "Hide Status Bar" +msgstr "Skrij vrstico stanja" + +msgid "Show Status Bar" +msgstr "Pokaži vrstico stanja" + +msgid "Source text" +msgstr "Izvorno besedilo" + +msgid "Translation" +msgstr "Prevod" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Izvorno besedilo – %s" + +msgid "unknown language" +msgstr "neznani jezik" + +#, c-format +msgid "Translation — %s" +msgstr "Prevod — %s" + +msgid "Error:" +msgstr "Napaka:" + +msgid "Source file" +msgstr "Izvorna datoteka" + +msgid "Source file occurrence:" +msgstr "Pojavitev izvorne datoteke:" + +msgid "Open in Editor" +msgstr "Odpri v urejevalniku" + +msgid "Open in editor" +msgstr "Odpri v urejevalniku" + +msgid "No references for the selected item." +msgstr "Ni referenc za izbrani element." + +#, c-format +msgid "Error opening file %s!" +msgstr "Napaka med odpiranjem datoteke %s!" + +msgid "Find" +msgstr "Najdi" + +msgid "Replace" +msgstr "Zamenjaj" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Možnosti" + +msgid "Ignore case" +msgstr "Prezri velikost črk" + +msgid "Wrap around" +msgstr "Prelomi besedilo" + +msgid "Whole words only" +msgstr "Le cele besede" + +msgid "Find in source texts" +msgstr "Poišči med izvirniki" + +msgid "Find in translations" +msgstr "Poišči med prevodi" + +msgid "Find in comments" +msgstr "Najdi v opombah" + +msgid "Close" +msgstr "Zapri" + +msgid "Replace All" +msgstr "Zamenjaj vse" + +msgid "Replace all" +msgstr "Zamenjaj vse" + +msgid "< &Previous" +msgstr "< &PrejÅ¡nji" + +msgid "&Next >" +msgstr "&Naslednji >" + +msgid "String to find" +msgstr "Iskalni niz" + +msgid "Replacement string" +msgstr "Nadomestni niz" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Ni mogoče izvesti programa: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Å ifra jezika ali ime (npr. sl_SI)" + +msgid "Translation Language" +msgstr "Jezik prevoda" + +msgid "Language of the translation:" +msgstr "Jezik prevoda:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - upravljalnik katalogov" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Skupno" + +msgid "Untrans" +msgstr "Neprevedeno" + +msgid "Fuzzy" +msgstr "Ohlapno" + +msgid "Bad Tokens" +msgstr "Nepravilni sklici" + +msgid "Last modified" +msgstr "Zadnjič spremenjeno" + +msgid "Select directory" +msgstr "Izbor mape" + +msgid "Directories:" +msgstr "Mape:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Ali želite izbrisati projekt?" + +msgid "Confirmation" +msgstr "Potrditev" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Ali res želite hkrati osvežiti vse\n" +"kataloge projekta?" + +msgid "Information about the translator" +msgstr "Podatki o prevajalcu" + +msgid "Name:" +msgstr "Ime:" + +msgid "Your Name" +msgstr "VaÅ¡e ime" + +msgid "Email:" +msgstr "E-naslov:" + +msgid "your_email@example.com" +msgstr "vas_naslov@primer.si" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"VaÅ¡e ime in elektronski naslov se uporabljata samo za določene vnose v glavi " +"datotek gettext GNU." + +msgid "Editing" +msgstr "Urejanje" + +msgid "Automatically compile MO file when saving" +msgstr "Samodejno prevedi datoteko MO pri shranjevanju" + +msgid "Show summary after catalog update" +msgstr "Pokaži povzetek po uspeÅ¡ni posodobitvi kataloga" + +msgid "Check spelling" +msgstr "Preveri črkovanja" + +msgid "Always change focus to text input field" +msgstr "Vedno postavi v žarišče polje za vnos besedila" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ne dovoli postavitve seznama nizov v žarišče. Izbrana možnost omogoča " +"uporabo tipk Ctrl+Smerne tipke za premikanje med vrsticami s tipkovnico in " +"hkrati omogoča neposredni vnos besedila brez predhodno pritisnjene tipke Tab." + +msgid "Appearance" +msgstr "Videz" + +msgid "Use custom list font:" +msgstr "Uporabi pisavo seznama po meri:" + +msgid "Use custom text fields font:" +msgstr "Uporabi pisavo besedilnih polj po meri:" + +msgid "Change UI language" +msgstr "Spremeni jezik uporabniÅ¡kega vmesnika" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(zahteva Windows 8 ali novejÅ¡e)" + +msgid "General" +msgstr "SploÅ¡no" + +msgid "Use translation memory" +msgstr "Uporabi prevodni pomnilnik" + +msgid "Learn From Files..." +msgstr "Nauči se iz datotek ..." + +msgid "Learn from files..." +msgstr "Nauči se iz datotek ..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Ponastavi" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "Shranjeni prevodi:" + +msgid "Database size on disk:" +msgstr "Velikost zbirke podatkov na disku:" + +msgid "Select translation files to import" +msgstr "Izberite prevodne datoteke za uvoz" + +msgid "Translation Memory" +msgstr "Pomnilnik prevodov" + +msgid "Importing translations..." +msgstr "Uvažanje prevodov ..." + +msgid "Finalizing..." +msgstr "Zaključevanje ..." + +msgid "Reset translation memory" +msgstr "Ponastavi prevodni pomnilnik" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Ali ste prepričani, da želite ponastaviti prevodni pomnilnik?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Prekliči" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "PP" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Uredi" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "Računi" + +msgid "Automatically check for updates" +msgstr "Samodejno preveri za posodobitve" + +msgid "Include beta versions" +msgstr "Vključi različice beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta različice vsebujejo najnovejÅ¡e izboljÅ¡ave, vendar pa je lahko delovanje " +"programa nestabilno." + +msgid "Updates" +msgstr "Posodobitve" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "Zaključki vrstic:" + +msgid "Unix (recommended)" +msgstr "Unix (priporočeno)" + +msgid "Windows" +msgstr "Okna" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Prelomi pri:" + +msgid "Preserve formatting of existing files" +msgstr "Ohrani oblikovanje obstoječih datotek" + +msgid "Advanced" +msgstr "Napredno" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Nastavitve %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "Dodaj mape ..." + +msgid "Add folders..." +msgstr "Dodaj mape ..." + +msgid "Add Files..." +msgstr "Dodaj datoteke ..." + +msgid "Add files..." +msgstr "Dodaj datoteke ..." + +msgid "Add Wildcard..." +msgstr "Dodaj nadomestni znak ..." + +msgid "Add wildcard..." +msgstr "Dodaj nadomestni znak ..." + +msgid "Paths" +msgstr "Poti" + +msgid "Excluded paths" +msgstr "Izključene poti" + +msgid "Additional keywords" +msgstr "Dodatne ključne besede" + +msgid "Name of the project the translation is for" +msgstr "Ime projekta, katerega prevod je to" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (priporočeno)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "Opomba:" + +msgid "OK" +msgstr "V redu" + +msgid "C&lear" +msgstr "Po&čisti" + +msgid "Clear the comment" +msgstr "Počisti opombe" + +msgid "Create new translations project" +msgstr "Ustvari nov projekt prevajanja" + +msgid "Edit the project" +msgstr "Uredi projekt" + +msgid "Delete the project" +msgstr "IzbriÅ¡i projekt" + +msgid "Update all" +msgstr "Posodobi vse" + +msgid "Update all catalogs in the project" +msgstr "Posodobi vse kataloge projekta" + +msgid "Edit project" +msgstr "Uredi projekt" + +msgid "Project name:" +msgstr "Ime projekta:" + +msgid "Browse" +msgstr "Prebrskaj" + +msgid "Add directory to the list" +msgstr "Dodaj mapo na seznam" + +msgid "&New..." +msgstr "&Nov ..." + +msgid "New from &POT/PO file..." +msgstr "Nov iz datoteke &POT/PO ..." + +msgid "New From &POT/PO File..." +msgstr "Nov iz datoteke &POT/PO ..." + +msgid "&Open..." +msgstr "&Odpri ..." + +msgid "Open Recent" +msgstr "Odpri nedavne" + +msgid "Open from Crowdin..." +msgstr "Odpri iz Crowdina ..." + +msgid "Open From Crowdin..." +msgstr "Odpri iz Crowdina ..." + +msgid "&Close" +msgstr "&Zapri" + +msgid "&Save" +msgstr "&Shrani" + +msgid "Save &as..." +msgstr "Shrani &kot ..." + +msgid "Save &As..." +msgstr "Shrani &kot ..." + +msgid "Compile to MO..." +msgstr "Prevedi v MO ..." + +msgid "E&xport as HTML..." +msgstr "&Izvozi kot HTML ..." + +msgid "Check for updates..." +msgstr "Preveri obstoj posodobitev ..." + +msgid "&Preferences..." +msgstr "&Možnosti ..." + +msgid "Catalogs &manager" +msgstr "&Upravljalnik katalogov" + +msgid "Catalogs &Manager" +msgstr "&Upravljalnik katalogov" + +msgid "E&xit" +msgstr "&Končaj" + +msgid "Quit" +msgstr "Končaj" + +msgid "Copy from singular" +msgstr "Kopiraj iz edninske oblike" + +msgid "Copy From Singular" +msgstr "Kopiraj iz edninske oblike" + +msgid "Translation is &fuzzy" +msgstr "Prevod je &ohlapen" + +msgid "Translation Is &Fuzzy" +msgstr "Prevod je &ohlapen" + +msgid "Edit &comment" +msgstr "Uredi &opombo" + +msgid "Edit &Comment" +msgstr "Uredi &opombo" + +msgid "Suggestions" +msgstr "Predlogi" + +msgid "&Show references" +msgstr "&Pokaži sklice" + +msgid "&Show References" +msgstr "&Pokaži sklice" + +msgid "&Find..." +msgstr "&Najdi ..." + +msgid "Replace..." +msgstr "Zamenjaj ..." + +msgid "Find next" +msgstr "Poišči naslednjega" + +msgid "Find previous" +msgstr "Poišči prejÅ¡njega" + +msgid "Find and Replace..." +msgstr "Najdi in zamenjaj ..." + +msgid "Find Next" +msgstr "Najdi naslednje" + +msgid "Find Previous" +msgstr "Najdi prejÅ¡nje" + +msgid "&Preferences" +msgstr "&Možnosti" + +msgid "Display entry &IDs" +msgstr "Pokaži kode ID vnosov" + +msgid "Display Entry &IDs" +msgstr "Pokaži kode ID vnosov" + +msgid "Sort by &file order" +msgstr "Razvrsti po &imenu datotek" + +msgid "Sort by &File Order" +msgstr "Razvrsti po &imenu datotek" + +msgid "Sort by &source" +msgstr "Razvrsti po &viru" + +msgid "Sort by &Source" +msgstr "Razvrsti po &viru" + +msgid "Sort by &translation" +msgstr "Razvrsti po &prevodu" + +msgid "Sort by &Translation" +msgstr "Razvrsti po &prevodu" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "Vnose z napakami postavi na vrh" + +msgid "Entries with Errors First" +msgstr "Vnose z napakami postavi na vrh" + +msgid "&Untranslated entries first" +msgstr "&Najprej razvrsti neprevedeno" + +msgid "&Untranslated Entries First" +msgstr "&Najprej razvrsti neprevedeno" + +msgid "Show sidebar" +msgstr "Pokaži stransko vrstico" + +msgid "Show status bar" +msgstr "Pokaži vrstico stanja" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Posodobi iz izvorne kode" + +msgid "&Update from Sources" +msgstr "&Posodobi iz izvorne kode" + +msgid "Update from &POT file..." +msgstr "Posodobi s &POT datoteko ..." + +msgid "Update from &POT File..." +msgstr "Posodobi s &POT datoteko ..." + +msgid "Sync with Crowdin" +msgstr "Uskladi s Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Zapolni manjkajoče prevode iz &PP ..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Zapolni manjkajoče prevode iz &PP ..." + +msgid "&Purge deleted translations" +msgstr "&Odstrani izbrisane prevode" + +msgid "&Purge Deleted Translations" +msgstr "&Počisti izbrisane prevode" + +msgid "&Validate translations" +msgstr "&Potrdi ustreznost prevoda" + +msgid "&Validate Translations" +msgstr "&Potrdi ustreznost prevoda" + +msgid "&Properties..." +msgstr "&Lastnosti ..." + +msgid "&Done and next" +msgstr "&Končano in naprej" + +msgid "&Done and Next" +msgstr "&Končano in naprej" + +msgid "&Previous translation" +msgstr "&Predhoden prevod" + +msgid "&Previous Translation" +msgstr "&Predhoden prevod" + +msgid "&Next translation" +msgstr "&Naslednji prevod" + +msgid "&Next Translation" +msgstr "&Naslednji prevod" + +msgid "P&revious unfinished" +msgstr "&Predhodni neprevedeni" + +msgid "P&revious Unfinished" +msgstr "&Predhodni neprevedeni" + +msgid "Ne&xt unfinished" +msgstr "&Naslednji neprevedeni" + +msgid "Ne&xt Unfinished" +msgstr "&Naslednji neprevedeni" + +msgid "Previous plural form" +msgstr "Predhodna množinska oblika" + +msgid "Previous Plural Form" +msgstr "Predhodna množinska oblika" + +msgid "Next plural form" +msgstr "Naslednja množinska oblika" + +msgid "Next Plural Form" +msgstr "Naslednja množinska oblika" + +msgid "&Online help" +msgstr "Spletna pomo&č" + +msgid "&Online Help" +msgstr "Spletna pomo&č" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "&O programu" + +msgid "&About" +msgstr "&O programu" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Seznam pripon, ločenih s podpičjem (e.g. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Priklic:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Predmet v seznamu ključnih besed:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"To bo pripeto ukazni vrstici za vsako ključno\n" +"besedo. %k razÅ¡iri v ključno besedo." + +msgid "An item in input files list:" +msgstr "Predmet v seznamu vhodnih datotek:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"To bo pripeto ukazni vrstici za vsako vhodno\n" +"datoteko. %f razÅ¡iri v ime datoteke." + +msgid "Source code charset:" +msgstr "Kodni nabor izvorne kode:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"To bo pripeto ukazni vrstici le,\n" +"če je naveden izvorni nabor znakov. %c razÅ¡iri v vrednost nabora znakov." + +msgid "Catalog properties" +msgstr "Lastnosti kataloga" + +msgid "Project name and version:" +msgstr "Ime in različica projekta:" + +msgid "Plural Forms:" +msgstr "Množinske oblike:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "Uporabi izraz po meri" + +msgid "Learn about plural forms" +msgstr "Podrobnosti o množinskih oblikah" + +msgid "Charset:" +msgstr "Kodni nabor:" + +msgid "Team:" +msgstr "Skupina:" + +msgid "Team's email address:" +msgstr "Elektronski naslov skupine:" + +msgid "Translation properties" +msgstr "Lastnosti prevoda" + +msgid "Sources paths" +msgstr "Poti vira" + +msgid "Extract text from source files in the following directories:" +msgstr "Izloči besedilo iz izvornih datotek v navedenih mapah:" + +msgid "Base path:" +msgstr "Osnovna pot:" + +msgid "Sources keywords" +msgstr "Ključne besede vira" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Uporabi ključne besede (imena funkcij) za prepoznavanje\n" +"prevedljivih nizov v izvornih datotekah:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "Posodobi povzetek" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ti nizi so bili v izvornih datotekah, vendar niso v katalogu.\n" +"Program jih bo samodejno dodal v katalog." + +msgid "New strings" +msgstr "Nov niz" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ti nizi znakov se ne nahajajo več v izvornih\n" +"datotekah. Program jih bo samodejno odstranil iz kataloga." + +msgid "Obsolete strings" +msgstr "Zastareli nizi" + +msgid "(0 new, 0 obsolete)" +msgstr "(novi: 0, zastareli: 0)" + +msgid "Open" +msgstr "Odpri" + +msgid "Save catalog" +msgstr "Shrani katalog" + +msgid "Validate" +msgstr "Potrdi ustreznost" + +msgid "Check for errors in the translation" +msgstr "Preveri za napake v prevodu" + +msgid "Update" +msgstr "Posodobi" + +msgid "Update catalog - synchronize it with sources" +msgstr "Posodobi katalog - uskladi z izvorno kodo" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Preklop ohlapno prevedenega niza" + +msgid "Show or hide the sidebar" +msgstr "Pokaži oz. skrij stransko vrstico" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Predhodno besedilo vira:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Opomba prevajalcem:" + +msgid "Add comment" +msgstr "Dodaj komentar" + +msgid "Add Comment" +msgstr "Dodaj komentar" + +msgid "Translation suggestions:" +msgstr "Predlogi prevoda:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ni zadetkov" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ni zadetkov" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novo: %i, zastarelo: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Uvažanje prevodov: %d" + +msgid "Poedit Update" +msgstr "Posodobitev Poedit" + +msgid "Preparing migration..." +msgstr "Priprava migracije ..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "Nadaljuj" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "Ni mogoče ustvariti začasne mape." + +msgid "Welcome to Poedit" +msgstr "DobrodoÅ¡li v Poedit" + +msgid "Edit a translation" +msgstr "Uredi prevod" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "Sodeluj pri prevodu s Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "Kaj je Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Ni prevodov. To je nenavadno." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "(Več o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "Posodobi iz datoteke POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Prevodne nize lahko izluščite tudi neposredno iz izvorne kode:" + +msgid "Extract from sources" +msgstr "Izlušči iz izvorne kode" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "Uskladi" + +msgid "Synchronize the translation with Crowdin" +msgstr "Uskladi prevod s Crowdin" diff --git a/locales/sq.mo b/locales/sq.mo new file mode 100644 index 0000000000000000000000000000000000000000..3125d8d1ed4f9904eeb75a21e28fe28fad099bb7 GIT binary patch literal 47170 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 literal 0 HcmV?d00001 diff --git a/locales/sq.po b/locales/sq.po new file mode 100644 index 0000000..21e3151 --- /dev/null +++ b/locales/sq.po @@ -0,0 +1,1969 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:24-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Albanian\n" +"Language: sq_AL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: sq\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Fshihe këtë mesazh njoftimi" + +msgid "Don't Show Again" +msgstr "Mos e Shfaq Sërish" + +msgid "Don't show again" +msgstr "Mos e shfaq sërish" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i rresht i kartelës '%s' s’u ngarkua saktë." +msgstr[1] "%i rreshta të kartelës '%s' s’u ngarkuan saktë." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" +"Rreshti %d i kartelës '%s' është i dëmtuar (pa të dhëna %s të vlefshme)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Titull i keqformuar: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Kartelë katalogu e dëmtuar: vargje mesazhesh në njëjës përdorur bashkë me " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Kartelë katalogu e dëmtuar: vargje mesazhesh në shumës përdorur pa " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Pati gabime gjatë ngarkimit të katalogut. Për pasojë, disa nga të dhënat " +"mund të kenë humbur ose të jenë dëmtuar." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Kartela %s nuk u ngarkua dot, ka gjasa të jetë e dëmtuar." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Kartela '%s' është vetëm e lexueshme dhe s’mund të ruhet.\n" +"Ju lutemi, ruajeni nën një emër tjetër." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nuk u ruajt dot kartela %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Pati një problem me formatimin si duhet të kartelës (por u ruajt në rregull)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogu nuk u ruajt dot nën shkronjat '%s' e treguara në rregullime " +"katalogu.\n" +"\n" +"U ruajt nën UTF-8 dhe rregullimi u ndryshua për përputhje." + +msgid "Error saving catalog" +msgstr "Gabim në ruajtje katalogu" + +msgid "PO Translation Files" +msgstr "Kartela Përkthimi PO" + +msgid "POT Translation Templates" +msgstr "Gjedhe Përkthimi POT" + +msgid "All Translation Files" +msgstr "Krejt Kartelat e Përkthimit" + +msgid "Merging differences..." +msgstr "Po përziehen dallimet..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nuk është një kartelë POT e vlefshme." + +msgid "(Use default language)" +msgstr "(Përdor gjuhë parazgjedhje)" + +msgid "Select your preferred language" +msgstr "Përzgjidhni gjuhën tuaj të parapëlqyer" + +msgid "Language selection" +msgstr "Përzgjedhje gjuhe" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Duhet të rinisni Poedit, që të hyjnë në fuqi ndryshimet." + +msgid "Downloading translations is disabled in this project." +msgstr "Shkarkimi i përkthimeve është i çaktivizuar për këtë projekt." + +msgid "Not authorized, please sign in again." +msgstr "Jo i autorizuar, ju lutemi, bëni hyrjen sërish." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin është një platformë administrimi përkthimesh në internet dhe mjet " +"përkthimi në bashkëpunim. Poedit-i mund të njëkohësojë pa të metë kartela PO " +"të administruara në Crowdin." + +msgid "Sign In" +msgstr "Hyni" + +msgid "Sign in" +msgstr "Hyni" + +msgid "Sign Out" +msgstr "Dilni" + +msgid "Sign out" +msgstr "Dilni" + +msgid "Waiting for authentication…" +msgstr "Po pritet për mirëfilltësim…" + +msgid "Updating user information…" +msgstr "Po përditësohen të dhëna mbi përdoruesin…" + +msgid "Signed in as:" +msgstr "I futur si:" + +msgid "Learn More About Crowdin" +msgstr "Mësoni Më Tepër Mbi Crowdin-in" + +msgid "Learn more about Crowdin" +msgstr "Mësoni më tepër mbi Crowdin-in" + +msgid "Sign in to Crowdin" +msgstr "Hyni në Crowdin" + +msgid "Open Crowdin translation" +msgstr "Hap përkthimin në Crowdin" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "Gjuhë:" + +msgid "File:" +msgstr "Kartelë:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Pa projekte përkthimi në llogarinë tuaj Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Ky projekt nuk ka kartela që mund të përkthehen nën Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Kjo kartelë mund të përpunohet te ndërfaqja web e Crowdin-it." + +msgid "Downloading latest translations…" +msgstr "Po shkarkohen përkthimet më të reja…" + +msgid "Syncing with Crowdin" +msgstr "Po bëhet njëkohësimi me Crowdin-in" + +msgid "Syncing with Crowdin failed." +msgstr "Njëkohësimi me Crowdin-in dështoi." + +msgid "Crowdin error" +msgstr "Gabim Crowdin-i" + +msgid "Uploading translations…" +msgstr "Po ngarkohen përkthime…" + +msgid "&Copy" +msgstr "&Kopjoje" + +msgid "Learn more" +msgstr "Mësoni më tepër" + +msgid "Learn More" +msgstr "Mësoni Më Tepër" + +#, c-format +msgid "Failed command: %s" +msgstr "Urdhri që dështoi: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Dështoi në përzierjen e katalogëve gettext." + +msgid "Scanning files..." +msgstr "Po skanohen kartelat..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Po përtypen kartela %s..." + +msgid "Failed to load extracted catalog." +msgstr "Dështoi në ngarkimin e katalogut të përftuar." + +msgid "&Help" +msgstr "&Ndihmë" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Kartelat MO s’mund të përpunohen drejt e në Poedit." + +msgid "Error opening file" +msgstr "Gabim gjatë hapjes së kartelës" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Ju lutemi, në vend të kësaj, hapni dhe përpunoni kartelën përgjegjëse PO. " +"Kur e ruani, do të përditësohet edhe kartela MO." + +msgid "don't delete temporary files (for debugging)" +msgstr "mos fshi kartela të përkohshme (për diagnostikim)" + +msgid "handle a poedit:// URI" +msgstr "trajto një URI a poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Dështoi komunikimi me procesin Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ndodhi një përjashtim i patrajtuar: %s" + +msgid "Unhandled exception occurred." +msgstr "Ndodhi një përjashtim i patrajtuar." + +msgid "Open catalog" +msgstr "Hap katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Kartela '%s' s’ekziston." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Mbi %s-in" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versioni %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Shërbime" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Fshihe %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Fshihi të Tjerët" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Shfaqi Krejt" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Mbylleni %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit është një përpunues përkthimesh i lehtë për t’u përdorur." + +msgid "Catalogs Manager" +msgstr "Përgjegjës Katalogësh" + +msgid "Check for Updates..." +msgstr "Kontrollo për Përditësime…" + +msgid "&Edit" +msgstr "&Përpunoni" + +msgid "Undo" +msgstr "Zhbëje" + +msgid "Redo" +msgstr "Ribëje" + +msgid "Paste and Match Style" +msgstr "Ngjite dhe Përputhi Stilin" + +msgid "Delete" +msgstr "Fshije" + +msgid "Spelling and Grammar" +msgstr "Drejtshkrim dhe Gramatikë" + +msgid "Show Spelling and Grammar" +msgstr "Shfaq Drejtshkrim dhe Gramatikë" + +msgid "Check Document Now" +msgstr "Kontrollojeni Dokumentin Tani" + +msgid "Check Spelling While Typing" +msgstr "Kontrolloji Drejtshkrimin Teksa Shtypet" + +msgid "Check Grammar With Spelling" +msgstr "Kontrollojini Gramatikën Me Drejtshkrimin" + +msgid "Correct Spelling Automatically" +msgstr "Ndreqe Vetvetiu Drejtshkrimin" + +msgid "Substitutions" +msgstr "Zëvendësime" + +msgid "Show Substitutions" +msgstr "Shfaq Zëvendësimet" + +msgid "Smart Copy/Paste" +msgstr "Kopjim/Ngjitje e Mençur" + +msgid "Smart Quotes" +msgstr "Thonjëza të Mençura" + +msgid "Smart Dashes" +msgstr "Vija Ndarëse të Mençura" + +msgid "Smart Links" +msgstr "Lidhje të Mençura" + +msgid "Text Replacement" +msgstr "Zëvendësim Teksti" + +msgid "Transformations" +msgstr "Shndërrime" + +msgid "Make Upper Case" +msgstr "Kaloje në Shkronja të Mëdha" + +msgid "Make Lower Case" +msgstr "Kaloje në Shkronja të Vogla" + +msgid "Capitalize" +msgstr "Me shkronjë të madhe" + +msgid "Speech" +msgstr "E folur" + +msgid "Start Speaking" +msgstr "Filloni të Folurën" + +msgid "Stop Speaking" +msgstr "Ndalni të Folurën" + +msgid "&View" +msgstr "&Parje" + +msgid "Enter Full Screen" +msgstr "Kaloni Në Gjendjen Krejt Ekrani" + +msgid "Window" +msgstr "Dritare" + +msgid "Minimize" +msgstr "Minimizoje" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Silli Krejt Përpara" + +msgid "PO Translation" +msgstr "Përkthimi PO" + +msgid "The file cannot be opened." +msgstr "Kartela s’hapet dot." + +msgid "Invalid file" +msgstr "Kartelë e pavlefshme" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Kartela mund të jetë ose e dëmtuar, ose në një format të panjohur nga Poedit." + +msgid "&Undo" +msgstr "&Zhbëje" + +msgid "&Redo" +msgstr "&Ribëje" + +msgid "Cu&t" +msgstr "&Prije" + +msgid "Cut" +msgstr "Prijeni" + +msgid "Copy" +msgstr "Kopjojeni" + +msgid "&Paste" +msgstr "&Ngjite" + +msgid "Paste" +msgstr "Ngjitni" + +msgid "&Delete" +msgstr "&Fshije" + +msgid "Select &All" +msgstr "Përzgjidhe &Krejt" + +msgid "Select All" +msgstr "Përzgjidheni Krejt" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "ENTER" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Poshtë" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "S’mund të jepni më tepër se një kartelë te dritarja Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Kartela '%s' s’është katalog mesazhesh." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Kartelë" + +msgid "&Go" +msgstr "&Shko" + +msgid "Source text:" +msgstr "Teksti burim:" + +msgid "Singular:" +msgstr "Njëjës:" + +msgid "Plural:" +msgstr "Shumës:" + +msgid "Translation:" +msgstr "Përkthim:" + +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 "" +"Kartelat POT janë thjesht gjedhe dhe nuk përmbajnë ndonjë përkthim.\n" +"Që të bëni një përkthim, krijoni një kartelë të re PO të bazuar te gjedhja." + +msgid "Create New Translation" +msgstr "Krijoni Përkthim të Ri" + +msgid "Create new translation" +msgstr "Krijoni përkthim të ri" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Kontrolli i drejtshkrimit është i çaktivizuar, ngaqë fjalori për %s s’është " +"i instaluar." + +msgid "Install" +msgstr "Instaloje" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogu u ndryshua. Doni të ruhen ndryshimet?" + +msgid "Save changes" +msgstr "Ruaji ndryshimet" + +msgid "Your changes will be lost if you don't save them." +msgstr "Ndryshimet tuaja do të humbasin, nëse s’i ruani." + +msgid "Save" +msgstr "Ruaje" + +msgid "Don't save" +msgstr "Mos e ruaj" + +msgid "Don't Save" +msgstr "Mos e Ruaj" + +msgid "Save as..." +msgstr "Ruajeni si..." + +msgid "Compile to..." +msgstr "Përpiloje te..." + +msgid "Compiled Translation Files" +msgstr "Kartela Përkthimi të Përpiluara" + +msgid "Export as..." +msgstr "Eksportojeni si..." + +msgid "HTML Files" +msgstr "Kartela HTML" + +msgid "Open catalog template" +msgstr "Hap gjedhe katalogu" + +msgid "Updating catalog" +msgstr "Po përditësohet katalogu" + +msgid "Source code not available." +msgstr "Pa kod burim të gatshëm." + +msgid "Updating failed" +msgstr "Përditësimi dështoi" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"S’u përditësuan dot përkthimet që prej kodit burim, ngaqë s’u gjet kod në " +"vendin e treguar te Vetitë e katalogut." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Ndoshta ka zëra të pasaktë në katalog." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Përditësimi i katalogut dështoi. Për hollësi, klikoni te 'Hollësi >>'." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "U gjet %d problem te përkthimi." +msgstr[1] "U gjetën %d probleme te përkthimi." + +msgid "Validation results" +msgstr "Përfundime vleftësimi" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Zërat me gabime janë shënuar me të kuqe te lista. Hollësitë e gabimit do të " +"shfaqen pasi të keni përzgjedhur një zë të tillë." + +msgid "The file was saved safely." +msgstr "Kartela u ruajt e parrezikuar." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Kartela u ruajt e parrezikuar dhe u përpilua nën formatin MO, por sipas " +"gjasash s’do të funksionojë saktësisht." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Kartela u ruajt e parrezikuar, por s’përpilohet dot në formatin MO dhe të " +"përdoret." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Kartela u përpilua nën formatin MO, por sipas gjasash s’do të funksionojë " +"saktësisht." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Kartela s’përpilohet dot në formatin MO dhe të përdoret." + +msgid "No problems with the translation found." +msgstr "S’u gjetën probleme me përkthimin." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Përkthimi është gati për përdorim, por %d zë është ende i papërkthyer." +msgstr[1] "" +"Përkthimi është gati për përdorim, por %d zëra janë ende të papërkthyer." + +msgid "The translation is ready for use." +msgstr "Përkthimi është gati për përdorim." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit-i ndreqi vetvetiu lëndë të pavlefshme te kartela “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Kartela përmbante elementë të përsëdytur, çka në kartelat PO nuk lejohet dhe " +"mund të pengojë përdorimin e kartelës. Poedit e ndreqi problemin, por do të " +"duhej që të shqyrtonit përkthimet e cilitdo elementi të shënuar si i " +"turbullt dhe t’i ndreqni ato, në rast se duhen ndrequr." + +msgid "Language of the translation isn't set." +msgstr "S’është caktuar gjuha e përkthimit." + +msgid "Set Language" +msgstr "Caktoni Gjuhën" + +msgid "Set language" +msgstr "Caktoni gjuhën" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Nuk jepen këshillime, nës rast se gjuha e përkthimi nuk është caktuar saktë. " +"Kjo mund të prekë edhe veçori të tjera, format e shumësit, për shembull." + +msgid "Language of the translation is the same as source language." +msgstr "Gjuha e përkthimit është e njëjtë me gjuhën burim." + +msgid "Fix Language" +msgstr "Ndreqeni Gjuhën" + +msgid "Fix language" +msgstr "Ndreqeni gjuhën" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Ky katalog ka zëra me forma shumësi, por s’ka të formësuar fushën Plural-" +"Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Zërat në këtë katalog kanë forma shumësi të ndryshme nga çka tregohet te " +"fusha Plural-Forms e katalogut" + +msgid "Required header Plural-Forms is missing." +msgstr "I mungon krye e domosdoshme Plural-Forms." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Gabim sintakse te kryet Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Ndreqni Kryet" + +msgid "Fix the header" +msgstr "Ndreqni kryet" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Shprehja për forma shumësi e përdorur nga katalogu është e pazakontë për %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Shqyrtoni" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Gabim në ngarkimin e kartelës katalog mesazhesh '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Të përkthyera: %d nga %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Të mbetura: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d gabim" +msgstr[1] "%d gabime" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d zë" +msgstr[1] "%d zëra" + +msgid " (unsaved)" +msgstr " (i paruajtur)" + +msgid " (modified)" +msgstr " (ndryshuar)" + +msgid "Go" +msgstr "Shko" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Dështoi në përditësimin e kujtesës së përkthimeve: %s" + +msgid "Purge deleted translations" +msgstr "Pastroji përkthimet e fshira" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Doni të hiqen krejt përkthimet që s’përdoren më?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Nëse vazhdoni me spastrimin, krejt përkthimet e shënuara si të fshira do të " +"hiqen përgjithmonë. Do t’ju duhet t’i përktheni sërish, nëse shtohen sërish " +"në të ardhmen." + +msgid "Keep" +msgstr "Mbaje" + +msgid "Purge" +msgstr "Spastroji" + +msgid "Fill missing translations from TM" +msgstr "Përkthimet që mungojnë plotësoji prej TM-je" + +msgid "Only fill in exact matches" +msgstr "Plotëso vetëm përputhjet e përpikta" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Si parazgjedhje, plotësohen edhe përfundimet e pasakta dhe shënohen si të " +"turbullta. I vini shenjë kësaj mundësie që të përfshihen vetëm përputhjet e " +"përshtatshme." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Përputhjet e sakta mos i shëno si të turbullta" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Aktivizojeni vetëm nëse besoni në cilësinë e TM-së suaj. Si parazgjedhje, " +"krejt përputhjet prej TM-së shënohen si të turbullta dhe do të duheshin " +"marrë në shqyrtim." + +msgid "Fill" +msgstr "Plotësoje" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d zë u plotësua nga kujtesa e përkthimeve." +msgstr[1] "%d zëra u plotësuan nga kujtesa e përkthimeve." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Përkthimet janë shënuar si të turbullt, ngaqë mund të jenë të pasaktë. Do të " +"duhej t’u kontrollonit saktësinë." + +msgid "No entries could be filled from the translation memory." +msgstr "S’u plotësuan dot zëra prej kujtesës së përkthimit." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM-ja s’përmban ndonjë varg të ngjashëm me lëndën e kësaj kartele. Ka efekt " +"vetëm për përkthime gjysmë të vetvetishme, pasi Poedit grumbullon " +"mjaftueshëm lëndë prej kartelave që përktheni dorazi." + +msgid "Translating" +msgstr "Kur përkthehet" + +msgid "Filling missing translations from TM..." +msgstr "Përkthimet që mungojnë po plotësohen prej TM-je…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "U përkthye %u varg" +msgstr[1] "U përkthyen %u vargje" + +msgid "Copy from source text" +msgstr "Kopjoje prej teksti burim" + +msgid "Copy from Source Text" +msgstr "Kopjoje prej Teksti Burim" + +msgid "Clear translation" +msgstr "Pastroje përkthimin" + +msgid "Clear Translation" +msgstr "Pastroje Përkthimin" + +msgid "Edit comment" +msgstr "Përpunoni koment" + +msgid "Edit Comment" +msgstr "Përpunoni Komentin" + +msgid "References:" +msgstr "Referenca:" + +msgid "Everything" +msgstr "Gjithçka" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Njëjës" + +msgid "Zero" +msgstr "Zero" + +msgid "One" +msgstr "Një" + +msgid "Two" +msgstr "Dy" + +msgid "Plural" +msgstr "Shumës" + +msgid "Other" +msgstr "Tjetër" + +msgid "&Bookmarks" +msgstr "&Faqerojtës" + +#, c-format +msgid "Set bookmark %i" +msgstr "Caktoni faqerojtës %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Shkoni te faqerojtësi %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Caktoni Faqerojtës %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Shkoni te Faqerojtësi %i" + +msgid "Hide Sidebar" +msgstr "Fshihe Anështyllën" + +msgid "Show Sidebar" +msgstr "Shfaqe Anështyllën" + +msgid "Hide Status Bar" +msgstr "Fshihe Shtyllën e Gjendjeve" + +msgid "Show Status Bar" +msgstr "Shfaqe Shtyllën e Gjendjeve" + +msgid "Source text" +msgstr "Teksti burim" + +msgid "Translation" +msgstr "Përkthim" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Teksti burim — %s" + +msgid "unknown language" +msgstr "gjuhë e panjohur" + +#, c-format +msgid "Translation — %s" +msgstr "Përkthim — %s" + +msgid "Error:" +msgstr "Gabim:" + +msgid "Source file" +msgstr "Kartelë burim" + +msgid "Source file occurrence:" +msgstr "Hasje në kartelë burim:" + +msgid "Open in Editor" +msgstr "Hape në Përpunues" + +msgid "Open in editor" +msgstr "Hape në përpunues" + +msgid "No references for the selected item." +msgstr "Pa referenca për objektin e përzgjedhur." + +#, c-format +msgid "Error opening file %s!" +msgstr "Gabim gjatë hapjes së kartelës %s!" + +msgid "Find" +msgstr "Gjej" + +msgid "Replace" +msgstr "Zëvendësoje" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Mundësi" + +msgid "Ignore case" +msgstr "Shpërfille shkrimin me të madhe ose me të vogël" + +msgid "Wrap around" +msgstr "Mbështille" + +msgid "Whole words only" +msgstr "Vetëm fjalë të plota" + +msgid "Find in source texts" +msgstr "Gjej tekste burim" + +msgid "Find in translations" +msgstr "Gjej në përkthime" + +msgid "Find in comments" +msgstr "Gjej te komentet" + +msgid "Close" +msgstr "Mbylle" + +msgid "Replace All" +msgstr "Zëvendësoji Krejt" + +msgid "Replace all" +msgstr "Zëvendësoji krejt" + +msgid "< &Previous" +msgstr "< I &mëparshmi" + +msgid "&Next >" +msgstr "&Pasuesi >" + +msgid "String to find" +msgstr "Varg për t’u gjetur" + +msgid "Replacement string" +msgstr "Varg zëvendësimi" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "S’përmbushet dot programi: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kod ose Emër Gjuhe (p.sh. sq)" + +msgid "Translation Language" +msgstr "Gjuhë Përkthimi" + +msgid "Language of the translation:" +msgstr "Gjuha e përkthimit:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Përgjegjës katalogësh" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Gjithsej" + +msgid "Untrans" +msgstr "Papërkth" + +msgid "Fuzzy" +msgstr "I turbullt" + +msgid "Bad Tokens" +msgstr "Objekte të Gabuar" + +msgid "Last modified" +msgstr "Ndryshuar së fundi" + +msgid "Select directory" +msgstr "Përzgjidhni drejtori" + +msgid "Directories:" +msgstr "Drejtori:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Doni të fshini projektin?" + +msgid "Confirmation" +msgstr "Ripohim" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Vërtet doni të bëni përditësim masiv\n" +"të krejt katalogëve në këtë projekt?" + +msgid "Information about the translator" +msgstr "Të dhëna rreth përkthyesit" + +msgid "Name:" +msgstr "Emër:" + +msgid "Your Name" +msgstr "Emri Juaj" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "email_i_juaj@shembull.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Emri dhe email-i juaj përdoren vetëm për të plotësuar fushën Last-Translator " +"të kartelave GNU gettext." + +msgid "Editing" +msgstr "Përpunim" + +msgid "Automatically compile MO file when saving" +msgstr "Gjatë daljes, përpilo vetvetiu kartelën MO" + +msgid "Show summary after catalog update" +msgstr "Pas përditësimesh katalogu, shfaq përmbledhjen" + +msgid "Check spelling" +msgstr "Kontrolloji drejtshkrimin" + +msgid "Always change focus to text input field" +msgstr "Ndryshoje përherë fokusin për te fushë futjeje teksti" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Mos e lër kurrë listën e vargjeve të kontrollojë fokusin. Nëse është aktiv, " +"duhet të përdorni Ctrl-shigjeta për lëvizje me tastierë, por gjithashtu mund " +"të shtypni tekst përnjëherë, pa qenë nevoja të shtypni Tab për të ndryshuar " +"fokusin." + +msgid "Appearance" +msgstr "Dukje" + +msgid "Use custom list font:" +msgstr "Përdor shkronja të personalizuara liste:" + +msgid "Use custom text fields font:" +msgstr "Përdor shkronjat e personalizuara për fusha tekstesh:" + +msgid "Change UI language" +msgstr "Ndryshoni gjuhën për UI-në" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(lyp Windows 8 ose më të ri)" + +msgid "General" +msgstr "Të përgjithshme" + +msgid "Use translation memory" +msgstr "Përdor kujtesë përkthimesh" + +msgid "Learn From Files..." +msgstr "Mëso Prej Kartelave..." + +msgid "Learn from files..." +msgstr "Mëso prej kartelave..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Zeroje" + +msgid "Consult TM when updating from sources" +msgstr "Këshillohu me TM-në, kur përditëson nga burime" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Në u aktivizoftë, Poedit do të provojë t’i plotësojë zërat e rinj duke\n" +"përdorur përkthimet tuaja të mëparshme të depozituara te kujtesa e\n" +"përkthimeve. Nëse TM-ja është thuajse e zbrazët, kjo s’do të ketë\n" +"vlerë kushedi. Sa më shumë përkthime përpunoni, aq më shumë\n" +"rritet TM-ja, dhe aq më e mirë bëhet." + +msgid "Stored translations:" +msgstr "Përkthime të depozituara:" + +msgid "Database size on disk:" +msgstr "Madhësi baze të dhënash në disk:" + +msgid "Select translation files to import" +msgstr "Përzgjidhni kartela përkthimi për importim" + +msgid "Translation Memory" +msgstr "Kujtesë Përkthimesh" + +msgid "Importing translations..." +msgstr "Po importohen përkthimet..." + +msgid "Finalizing..." +msgstr "Po përfundohet..." + +msgid "Reset translation memory" +msgstr "Të zerohet kujtesa e përkthimeve" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Jeni i sigurt se doni të zerohet kujtesa e përkthimeve?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Zerimi i kujtesës së përkthimit do të shkaktojë fshirjen, pa prapakthim, të " +"krejt përkthimeve të depozituara në të. Këtë veprim s’mund ta zhbëni." + +msgid "Cancel" +msgstr "Anuloje" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "KP" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Përftuesit prej kodi burim përdoren për të gjetur vargje të përkthyeshme në " +"kartela kodi burim dhe për t’i përftuar ato që të mund të përkthehen." + +msgid "New" +msgstr "I ri" + +msgid "Edit" +msgstr "Përpunoni" + +msgid "Delete extractor" +msgstr "Fshije përftuesin" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Jeni i sigurt se doni të fshihet përftuesi “%s”?" + +msgid "Extractors" +msgstr "Përftues" + +msgid "Accounts" +msgstr "Llogari" + +msgid "Automatically check for updates" +msgstr "Kontrollo vetvetiu për përditësime" + +msgid "Include beta versions" +msgstr "Përfshi versione beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Versionet beta përmbajnë veçoritë dhe përmirësimet më të reja, por mund të " +"jenë më pak të qëndrueshme." + +msgid "Updates" +msgstr "Përditësime" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Këto rregullime prekin formatim të brendshëm të kartelave PO. Prekini nëse " +"keni domosdoshmëri specifike, p.sh. për shkak sistemi kontrolli versionesh." + +msgid "Line endings:" +msgstr "Fundesh rreshtash:" + +msgid "Unix (recommended)" +msgstr "Unix (e këshillueshme)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Mbështille në gjatësinë:" + +msgid "Preserve formatting of existing files" +msgstr "Ruaje formatimin e kartelave ekzistuese" + +msgid "Advanced" +msgstr "Të mëtejshme" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Parapëlqime mbi %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Tërhiqni dhe Lini Këtu Dosje\n" +"\n" +"ose përdorni butonin +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Tërhiqni dhe lini këtu dosje\n" +"\n" +"ose përdorni butonin +" + +msgid "Add Folders..." +msgstr "Shtoni Dosje…" + +msgid "Add folders..." +msgstr "Shtoni dosje…" + +msgid "Add Files..." +msgstr "Shtoni Kartela…" + +msgid "Add files..." +msgstr "Shtoni kartela…" + +msgid "Add Wildcard..." +msgstr "Shtoni Shenja të Gjithëpushtetshme…" + +msgid "Add wildcard..." +msgstr "Shtoni shenja të gjithëpushtetshme…" + +msgid "Paths" +msgstr "Shtigje" + +msgid "Excluded paths" +msgstr "Shtigje të përjashtuar" + +msgid "Additional keywords" +msgstr "Fjalëkyçe shtesë" + +msgid "Name of the project the translation is for" +msgstr "Emri i projektit për të cilin bëhet përkthimi" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p.sh. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (e këshillueshme)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Ju lutemi, së pari ruajeni kartelën. Kjo pjesë s’mund të përpunohet para " +"kësaj." + +msgid "Comment:" +msgstr "Koment:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Pastroje" + +msgid "Clear the comment" +msgstr "Pastroje komentin" + +msgid "Create new translations project" +msgstr "Krijoni projekt të ri përkthimi" + +msgid "Edit the project" +msgstr "Përpunoni projektin" + +msgid "Delete the project" +msgstr "Fshije projektin" + +msgid "Update all" +msgstr "Përditësoji krejt" + +msgid "Update all catalogs in the project" +msgstr "Përditëso tërë katalogët në projekt" + +msgid "Edit project" +msgstr "Përpunoni projekt" + +msgid "Project name:" +msgstr "Emër projekti:" + +msgid "Browse" +msgstr "Shfletoni" + +msgid "Add directory to the list" +msgstr "Shtoni drejtori te lista" + +msgid "&New..." +msgstr "I &ri..." + +msgid "New from &POT/PO file..." +msgstr "I ri prej kartele &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "I Ri Prej Kartele &POT/PO..." + +msgid "&Open..." +msgstr "&Hapni..." + +msgid "Open Recent" +msgstr "Hap Më të Fundit" + +msgid "Open from Crowdin..." +msgstr "Hapeni prej Crowdin-i..." + +msgid "Open From Crowdin..." +msgstr "Hapeni Prej Crowdin-i..." + +msgid "&Close" +msgstr "&Mbylle" + +msgid "&Save" +msgstr "&Ruaje" + +msgid "Save &as..." +msgstr "Ruajeni &si..." + +msgid "Save &As..." +msgstr "Ruajeni &Si..." + +msgid "Compile to MO..." +msgstr "Përpiloje si MO..." + +msgid "E&xport as HTML..." +msgstr "&Eksportojeni si HTML..." + +msgid "Check for updates..." +msgstr "Kontrollo për përditësime..." + +msgid "&Preferences..." +msgstr "&Parapëlqime..." + +msgid "Catalogs &manager" +msgstr "&Përgjegjës katalogësh" + +msgid "Catalogs &Manager" +msgstr "&Përgjegjës Katalogësh" + +msgid "E&xit" +msgstr "&Dil" + +msgid "Quit" +msgstr "Dilni" + +msgid "Copy from singular" +msgstr "Kopjoje prej njëjësit" + +msgid "Copy From Singular" +msgstr "Kopjoje Prej Njëjësit" + +msgid "Translation is &fuzzy" +msgstr "Përkthimi është i &turbullt" + +msgid "Translation Is &Fuzzy" +msgstr "Përkthimi Është i &Turbullt" + +msgid "Edit &comment" +msgstr "Përpunoni &koment" + +msgid "Edit &Comment" +msgstr "Përpunoni &Komentin" + +msgid "Suggestions" +msgstr "Këshillime" + +msgid "&Show references" +msgstr "&Shfaq referenca" + +msgid "&Show References" +msgstr "&Shfaq Referenca" + +msgid "&Find..." +msgstr "&Gjeni..." + +msgid "Replace..." +msgstr "Zëvendësoni..." + +msgid "Find next" +msgstr "Gjej pasuesin" + +msgid "Find previous" +msgstr "Gjej të mëparshmin" + +msgid "Find and Replace..." +msgstr "Gjeni dhe Zëvendësoni..." + +msgid "Find Next" +msgstr "Gjej Pasuesin" + +msgid "Find Previous" +msgstr "Gjej të Mëparshmin" + +msgid "&Preferences" +msgstr "&Parapëlqime" + +msgid "Display entry &IDs" +msgstr "Shfaq &ID zërash" + +msgid "Display Entry &IDs" +msgstr "Shfaq &ID Zërash" + +msgid "Sort by &file order" +msgstr "Renditi sipas rendi &kartelash" + +msgid "Sort by &File Order" +msgstr "Renditi sipas Rendi &Kartelash" + +msgid "Sort by &source" +msgstr "Renditi sipas &burimesh" + +msgid "Sort by &Source" +msgstr "Renditi sipas &Burimesh" + +msgid "Sort by &translation" +msgstr "Renditi sipas &përkthimesh" + +msgid "Sort by &Translation" +msgstr "Renditi sipas &Përkthimesh" + +msgid "&Group by context" +msgstr "&Grupoji sipas kontekstit" + +msgid "&Group By Context" +msgstr "&Grupoji Sipas Kontekstit" + +msgid "Entries with errors first" +msgstr "Së pari zërat me gabime" + +msgid "Entries with Errors First" +msgstr "Së Pari Zërat me Gabime" + +msgid "&Untranslated entries first" +msgstr "Së pari zërat e &papërkthyer" + +msgid "&Untranslated Entries First" +msgstr "Së Pari Zërat e &Papërkthyer" + +msgid "Show sidebar" +msgstr "Shfaq anështyllë" + +msgid "Show status bar" +msgstr "Shfaq shtyllë gjendjesh" + +msgid "C&atalog" +msgstr "&Katalog" + +msgid "&Update from sources" +msgstr "&Përditëso prej burimesh" + +msgid "&Update from Sources" +msgstr "&Përditësoji prej Burimesh" + +msgid "Update from &POT file..." +msgstr "Përditësojeni prej kartele &POT..." + +msgid "Update from &POT File..." +msgstr "Përditësojeni prej Kartele &POT..." + +msgid "Sync with Crowdin" +msgstr "Njëkohësoje me Crowdin-in" + +msgid "Fill missing translations from &TM..." +msgstr "Përkthimet që mungojnë plotësoji prej &TM-je..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Përkthimet Që Mungojnë Plotësoji prej &TM-je..." + +msgid "&Purge deleted translations" +msgstr "&Spastroji përkthimet e fshira" + +msgid "&Purge Deleted Translations" +msgstr "&Spastroji Përkthimet e Fshira" + +msgid "&Validate translations" +msgstr "&Vleftësoni përkthime" + +msgid "&Validate Translations" +msgstr "&Vleftësoni Përkthime" + +msgid "&Properties..." +msgstr "&Veti..." + +msgid "&Done and next" +msgstr "&U bë, tjetri" + +msgid "&Done and Next" +msgstr "&U bë, Tjetri" + +msgid "&Previous translation" +msgstr "Përkthimi i &mëparshëm" + +msgid "&Previous Translation" +msgstr "Përkthimi i &Mëparshëm" + +msgid "&Next translation" +msgstr "Përkthimi &pasues" + +msgid "&Next Translation" +msgstr "Përkthimi &Pasues" + +msgid "P&revious unfinished" +msgstr "I më&parshmi i pambaruar" + +msgid "P&revious Unfinished" +msgstr "I më&parshmi i Pambaruar" + +msgid "Ne&xt unfinished" +msgstr "I pambaruari pas&ues" + +msgid "Ne&xt Unfinished" +msgstr "I pambaruari Pas&ues" + +msgid "Previous plural form" +msgstr "Forma e mëparshme e shumësit" + +msgid "Previous Plural Form" +msgstr "Forma e Mëparshme e Shumësit" + +msgid "Next plural form" +msgstr "Forma pasuese e shumësit" + +msgid "Next Plural Form" +msgstr "Forma Pasuese e Shumësit" + +msgid "&Online help" +msgstr "Ndihmë në &internet" + +msgid "&Online Help" +msgstr "Ndihmë Në &Internet" + +msgid "&GNU gettext manual" +msgstr "Doracaku &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Doracaku &GNU gettext" + +msgid "&About Poedit" +msgstr "&Mbi Poedit-in" + +msgid "&About" +msgstr "&Mbi" + +msgid "Extractor setup" +msgstr "Rregullim i përftuesit" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Listë e zgjatimeve të ndarë me pikëpresje (p.sh. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Thirrje:" + +msgid "Command to extract translations:" +msgstr "Urdhër për përftim përkthimesh:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ky urdhër përdorej për të nisur përtypësin.\n" +"%o bëhet emri i kartelës përfundim, %K lista\n" +"e fjalëkyçeve, %F lista e kartelave hyrëse,\n" +"%C simboli i shkronjave (shihni më poshtë)." + +msgid "An item in keywords list:" +msgstr "Një përbërës në listë fjalëkyçesh:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Kjo do të shtohet te urdhër rreshti njëherë\n" +"për çdo fjalëkyç. %k bëhet vlerë për fjalëkyç." + +msgid "An item in input files list:" +msgstr "Një përbërës në një listë futje kartelash:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Kjo do të shtohet te urdhër rreshti njëherë\n" +"për çdo kartelë hyrje. %f bëhet emër kartele." + +msgid "Source code charset:" +msgstr "Shkronja kodi burim:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Kjo do të bashkëngjitet në linjën e komandës\n" +"vetëm nëse është dhënë seti i karaktereve të kodit të burimit. %c zgjerohet " +"në vlerën e setit të karaktereve." + +msgid "Catalog properties" +msgstr "Veti katalogu" + +msgid "Project name and version:" +msgstr "Emër dhe version projekti:" + +msgid "Plural Forms:" +msgstr "Forma Shumësi:" + +msgid "Use default rules for this language" +msgstr "Për këtë gjuhë përdor rregullat parazgjedhje" + +msgid "Use custom expression" +msgstr "Përdor shprehje të personalizuar" + +msgid "Learn about plural forms" +msgstr "Mësoni më tepër rreth formash shumësi" + +msgid "Charset:" +msgstr "Shkronja:" + +msgid "Team:" +msgstr "Ekipi:" + +msgid "Team's email address:" +msgstr "Adresë email e ekipit:" + +msgid "Translation properties" +msgstr "Veti përkthimesh" + +msgid "Sources paths" +msgstr "Shtigje burimesh" + +msgid "Extract text from source files in the following directories:" +msgstr "Përfto tekst prej kartelash burim nga drejtoritë vijuese:" + +msgid "Base path:" +msgstr "Shteg bazë:" + +msgid "Sources keywords" +msgstr "Fjalëkyçe burimesh" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Përdorini këta fjalëkyçe (emra funksionesh) për të dalluar vargje të " +"përkthyeshëm\n" +"te kartelat burim:" + +msgid "Learn about gettext keywords" +msgstr "Mësoni rreth fjalëkyçeve gettext" + +msgid "Update summary" +msgstr "Përditëso përmbledhjen" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Këto vargje u gjetën në burime por s’qenë te katalogu.\n" +"Poedit do t’i shtojë te katalogu tani." + +msgid "New strings" +msgstr "Vargje të rinj" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Këto vargje s’janë më në burime.\n" +"Poedit do t’i heqë prej katalogut tani." + +msgid "Obsolete strings" +msgstr "Vargje të vjetruar" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 të rinj, 0 të vjetruar)" + +msgid "Open" +msgstr "Hape" + +msgid "Save catalog" +msgstr "Ruaje katalogun" + +msgid "Validate" +msgstr "Vleftësoje" + +msgid "Check for errors in the translation" +msgstr "Kontrolloni për gabime te përkthimi" + +msgid "Update" +msgstr "Përditësoje" + +msgid "Update catalog - synchronize it with sources" +msgstr "Përditëso katalogun - njëkohësoje me burimet" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "I shtypur nëse vargu i përzgjedhur ka përkthim të turbullt" + +msgid "Show or hide the sidebar" +msgstr "Shfaqni ose fshihni anështyllën" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Teksti burim i dikurshëm:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Teksti burim i vjetër (përpara se të ndryshohej gjatë përditësimit) të cilit " +"i përshoqërohet përkthimi i turbullt." + +msgid "Notes for translators:" +msgstr "Shënime për përkthyesit&:" + +msgid "Add comment" +msgstr "Shtoje koment" + +msgid "Add Comment" +msgstr "Shtoni Koment" + +msgid "Translation suggestions:" +msgstr "Këshillime përkthimi:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "S’u gjetën përputhje" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "S’u Gjetën Përputhje" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ky varg u gjet në kujtesën a e përkthimeve të Poedit-it." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Të rinj: %i, të vjetruar: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Po importohen përkthimet: %d" + +msgid "Poedit Update" +msgstr "Përditësim Poedit-i" + +msgid "Preparing migration..." +msgstr "Po përgatitet migrimi..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Gjendje daljeje nga migrimi: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit ka nevojë të shndërrojë kujtesën e përkthimeve tuaja në një format të " +"ri." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Kjo duhet bërë përpara se të niset Poedit-i. Mund të hajë ca minuta, nëse " +"keni shumë përkthime të depozituara, por normalisht do të duhej të kryhej " +"shumë më shpejt." + +msgid "Proceed" +msgstr "Bëje" + +msgid "Translation memory migration failed." +msgstr "Migrimi i kujtesës së përkthimeve dështoi." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Të dhënat e kujtesës suaj të përkthimit s’u migruan dot. Gabimi qe:\n" +"\n" +"%s\n" +"Ju lutemi, dërgoni një email te help@poedit.net dhe do ta ndreqim." + +msgid "Cannot create temporary directory." +msgstr "S’krijohet dot drejtoria e përkohshme." + +msgid "Welcome to Poedit" +msgstr "Mirë se vini te Poedit" + +msgid "Edit a translation" +msgstr "Përpunoni një përkthim" + +msgid "Open an existing PO file and edit the translation." +msgstr "Hapni një kartel PO ekzistuese dhe përpunoni përkthimin." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Merrni një kartelë ekzistuese PO ose një gjedhe POT dhe krijoni prej saj një " +"përkthim të ri." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Bashkëpunoni për një përkthim te Crowdin-i" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Shkarkoni një kartelë prej një projekti në Crowdin, përkthejeni dhe " +"parashtroni ndryshimet tuaja." + +msgid "What is Crowdin?" +msgstr "Ç’është Crowdin-i?" + +msgid "There are no translations. That’s unusual." +msgstr "S’ka përkthime. Kjo është e pazakontë." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Zërat e përkthyeshëm s’shtohen dorazi në sistemin Gettext, ata përftohen " +"vetvetiu prej\n" +"kodit burim. Kështu sigurohet qenia e tyre të përditësuar dhe të përpiktë.\n" +"Përkthyesit normalisht përdorin kartela gjedhe PO (POT) të përgatitura për " +"ta nga programuesi." + +msgid "(Learn more about GNU gettext)" +msgstr "(Mësoni më tepër mbi GNU gettext-in)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Rruga më e lehtë për të plotësuar këtë katalog është përditësimi i tij prej " +"një POT-i:" + +msgid "Update from POT" +msgstr "Përditësojeni prej POT-i" + +msgid "Take translatable strings from an existing POT template." +msgstr "Merri vargjet e përkthyeshme prej një gjedheje POT ekzistuese." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Mund të përftoni vargje përkthimi edhe drejt e nga kodi burim:" + +msgid "Extract from sources" +msgstr "Përftoji prej burimesh" + +msgid "Configure source code extraction in Properties." +msgstr "Formësoni përftim kodi burim te Vetitë." + +msgid "Sync" +msgstr "Njëkohësoje" + +msgid "Synchronize the translation with Crowdin" +msgstr "Njëkohësojeni përkthimin me atë në Crowdin" diff --git a/locales/sr.mo b/locales/sr.mo new file mode 100644 index 0000000000000000000000000000000000000000..16a5b17d50efe94c9c55f6e93eaa0506671227da GIT binary patch literal 57310 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 literal 0 HcmV?d00001 diff --git a/locales/sr.po b/locales/sr.po new file mode 100644 index 0000000..3a9cc28 --- /dev/null +++ b/locales/sr.po @@ -0,0 +1,1951 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Serbian (Cyrillic)\n" +"Language: sr_SP\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: sr\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Сакриј ово обавештење" + +msgid "Don't Show Again" +msgstr "Не приказуј поново" + +msgid "Don't show again" +msgstr "Не приказуј поново" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i ред датотеке „%s“ није исправно учитан." +msgstr[1] "%i реда датотеке „%s“ нису исправно учитана." +msgstr[2] "%i редова датотеке „%s“ није исправно учитано." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Ред %d датотеке „%s“ је оштећен (неисправни %s подаци)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Погрешно уобличено заглавље: „%s“" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Неисправна датотека каталога: коришћен је облик за множину „msgstr“ заједно " +"са вредношћу „msgid_plural“" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Неисправна датотека каталога: коришћен је облик за множину „msgstr“ без " +"вредности „msgid_plural“" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Дошло је до проблема при учитавању каталога. Неки подаци недостају или су " +"оштећени." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Не могу да учитам датотеку „%s“. Вероватно је оштећена." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Датотека „%s“ је доступна само за читање и не може бити сачувана.\n" +"Сачувајте је под другим именом." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Не могу да сачувам датотеку „%s“." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Дошло је до проблема при обликовању датотеке, али је успешно сачувана." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Не могу да сачувам каталог са кодирањем „%s“, као што је\n" +"наведено у поставкама каталога. Уместо тога, сачуван је у\n" +"UTF-8 формату и поставке су прилагођене према томе." + +msgid "Error saving catalog" +msgstr "Грешка при чувању каталога" + +msgid "PO Translation Files" +msgstr "PO датотеке превода" + +msgid "POT Translation Templates" +msgstr "POT шаблони превода" + +msgid "All Translation Files" +msgstr "Све датотеке превода" + +msgid "Merging differences..." +msgstr "Обједињујем разлике…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "„%s“ је неисправна POT датотека." + +msgid "(Use default language)" +msgstr "(подразумевани језик)" + +msgid "Select your preferred language" +msgstr "Избор жељеног језика" + +msgid "Language selection" +msgstr "Избор језика" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Морате да поново покренете Poedit како би ова измена ступила на снагу." + +msgid "Downloading translations is disabled in this project." +msgstr "Преузимање превода је онемогућено у овом пројекту." + +msgid "Not authorized, please sign in again." +msgstr "Немате овлашћења. Поново се пријавите." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin је интернет платформа за заједничку локализацију и превод. Poedit " +"може аутоматски да синхронизује PO датотеке са Crowdin-ом." + +msgid "Sign In" +msgstr "Пријави ме" + +msgid "Sign in" +msgstr "Пријави ме" + +msgid "Sign Out" +msgstr "Одјави ме" + +msgid "Sign out" +msgstr "Одјави ме" + +msgid "Waiting for authentication…" +msgstr "Проверавам идентитет…" + +msgid "Updating user information…" +msgstr "Ажурирам информације о кориснику…" + +msgid "Signed in as:" +msgstr "Пријављени сте као:" + +msgid "Learn More About Crowdin" +msgstr "Више о Crowdin-у" + +msgid "Learn more about Crowdin" +msgstr "Више о Crowdin-у" + +msgid "Sign in to Crowdin" +msgstr "Пријава на Crowdin" + +msgid "Open Crowdin translation" +msgstr "Отвори превод са Crowdin-а" + +msgid "Project:" +msgstr "Пројекат:" + +msgid "Language:" +msgstr "Језик:" + +msgid "File:" +msgstr "Датотека:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "У вашем налогу на Crowdin-у нема пројеката." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Овај пројекат не садржи датотеке које је могуће преводити у Poedit-у." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Ова датотека може да се уређује само на Crowdin-у." + +msgid "Downloading latest translations…" +msgstr "Преузимам најновије преводе…" + +msgid "Syncing with Crowdin" +msgstr "Синхронизација са Crowdin-ом" + +msgid "Syncing with Crowdin failed." +msgstr "Синхронизација са Crowdin-ом није успела." + +msgid "Crowdin error" +msgstr "Грешка Crowdin-а" + +msgid "Uploading translations…" +msgstr "Отпремам преводе…" + +msgid "&Copy" +msgstr "&Копирај" + +msgid "Learn more" +msgstr "Детаљније" + +msgid "Learn More" +msgstr "Детаљније" + +#, c-format +msgid "Failed command: %s" +msgstr "Неуспела команда: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Не могу да објединим gettext каталоге." + +msgid "Scanning files..." +msgstr "Скенирање датотека" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Рашчлањујем %s датотеке…" + +msgid "Failed to load extracted catalog." +msgstr "Не могу да учитам издвојени каталог." + +msgid "&Help" +msgstr "&Помоћ" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO датотеке се не могу директно уређивати у Poedit-у." + +msgid "Error opening file" +msgstr "Грешка при отварању датотеке" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Отворите и уредите одговарајућу PO датотеку. Када је сачувате, MO датотека " +"ће такође бити ажурирана." + +msgid "don't delete temporary files (for debugging)" +msgstr "не бриши привремене датотеке (ради отклањања грешака)" + +msgid "handle a poedit:// URI" +msgstr "обради адресу poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Не могу да комуницирам са процесом Poedit-а." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Дошло је до изузетка: %s" + +msgid "Unhandled exception occurred." +msgstr "Дошло је до изузетка." + +msgid "Open catalog" +msgstr "Отварање каталога" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Датотека „%s“ не постоји." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "О %s-у" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Верзија %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Услуге" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Сакриј %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Сакриј друге" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Прикажи све" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Изађи из %s-а" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit је једноставан уређивач превода." + +msgid "Catalogs Manager" +msgstr "Управљач каталозима" + +msgid "Check for Updates..." +msgstr "&Потражи ажурирања…" + +msgid "&Edit" +msgstr "&Уређивање" + +msgid "Undo" +msgstr "Опозови" + +msgid "Redo" +msgstr "Понови" + +msgid "Paste and Match Style" +msgstr "Налепи у текућем стилу" + +msgid "Delete" +msgstr "&Обриши" + +msgid "Spelling and Grammar" +msgstr "Провера правописа" + +msgid "Show Spelling and Grammar" +msgstr "Прикажи &правописне грешке" + +msgid "Check Document Now" +msgstr "Провери документ" + +msgid "Check Spelling While Typing" +msgstr "Провери правопис при куцању" + +msgid "Check Grammar With Spelling" +msgstr "Провери правопис и граматику" + +msgid "Correct Spelling Automatically" +msgstr "Аутоматски исправи правопис" + +msgid "Substitutions" +msgstr "Замене" + +msgid "Show Substitutions" +msgstr "Прикажи &замене" + +msgid "Smart Copy/Paste" +msgstr "Паметно копирање/налепљивање" + +msgid "Smart Quotes" +msgstr "Паметни наводници" + +msgid "Smart Dashes" +msgstr "Паметне црте" + +msgid "Smart Links" +msgstr "Паметне везе" + +msgid "Text Replacement" +msgstr "Замена текста" + +msgid "Transformations" +msgstr "Трансформације" + +msgid "Make Upper Case" +msgstr "Претвори у велика слова" + +msgid "Make Lower Case" +msgstr "Претвори у мала слова" + +msgid "Capitalize" +msgstr "Великим словима" + +msgid "Speech" +msgstr "Говор" + +msgid "Start Speaking" +msgstr "Покрени модул за говор" + +msgid "Stop Speaking" +msgstr "Заустави модул за говор" + +msgid "&View" +msgstr "&Приказ" + +msgid "Enter Full Screen" +msgstr "Пређи у режим целог екрана" + +msgid "Window" +msgstr "Прозор" + +msgid "Minimize" +msgstr "Умањи" + +msgid "Zoom" +msgstr "Зумирање" + +msgid "Bring All to Front" +msgstr "Пребаци све напред" + +msgid "PO Translation" +msgstr "PO превод" + +msgid "The file cannot be opened." +msgstr "Не могу да отворим датотеку." + +msgid "Invalid file" +msgstr "Неисправна датотека" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Датотека је оштећена или је у формату који Poedit не препознаје." + +msgid "&Undo" +msgstr "&Опозови" + +msgid "&Redo" +msgstr "&Понови" + +msgid "Cu&t" +msgstr "&Исеци" + +msgid "Cut" +msgstr "Исеци" + +msgid "Copy" +msgstr "Копирај" + +msgid "&Paste" +msgstr "&Налепи" + +msgid "Paste" +msgstr "Налепи" + +msgid "&Delete" +msgstr "&Обриши" + +msgid "Select &All" +msgstr "Изабери &све" + +msgid "Select All" +msgstr "Изабери све" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Не можете да превучете више од једне датотеке на прозор Poedit-а." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Датотека „%s“ није каталог са порукама." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Датотека" + +msgid "&Go" +msgstr "&Навигација" + +msgid "Source text:" +msgstr "Изворни текст:" + +msgid "Singular:" +msgstr "Једнина:" + +msgid "Plural:" +msgstr "Множина:" + +msgid "Translation:" +msgstr "Превод:" + +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 датотеке су само шаблони и они не садрже преводе.\n" +"Да бисте направили превод, креирајте нову PO датотеку засновану на шаблону." + +msgid "Create New Translation" +msgstr "Направи нови превод" + +msgid "Create new translation" +msgstr "Направи нови превод" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Провера правописа је онемогућена јер није инсталиран речник за %s језик." + +msgid "Install" +msgstr "Инсталирај" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталог је измењен. Сачувати измене?" + +msgid "Save changes" +msgstr "Чување измена" + +msgid "Your changes will be lost if you don't save them." +msgstr "Измене ће бити изгубљене ако их не сачувате." + +msgid "Save" +msgstr "&Сачувај" + +msgid "Don't save" +msgstr "&Не чувај" + +msgid "Don't Save" +msgstr "Не чувај" + +msgid "Save as..." +msgstr "Чување" + +msgid "Compile to..." +msgstr "Компилирај у…" + +msgid "Compiled Translation Files" +msgstr "Компилиране датотеке превода" + +msgid "Export as..." +msgstr "Извоз" + +msgid "HTML Files" +msgstr "HTML датотеке" + +msgid "Open catalog template" +msgstr "Отварање шаблона каталога" + +msgid "Updating catalog" +msgstr "Ажурирање каталога" + +msgid "Source code not available." +msgstr "Изворни кôд није доступан." + +msgid "Updating failed" +msgstr "Ажурирање није успело" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Преводи не могу бити ажурирани из изворног кода јер он није пронађен на " +"локацији која је наведена у својствима каталога." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Ставке у каталогу су вероватно неисправне." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Не могу да ажурирам каталог. За више информација, кликните на „Детаљи >>“." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Пронађен је %d проблем са преводом." +msgstr[1] "Пронађена су %d проблема са преводом." +msgstr[2] "Пронађено је %d проблема са преводом." + +msgid "Validation results" +msgstr "Резултати провере ваљаности" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Ставке са грешкама су означене црвеном бојом.\n" +"Више информација о грешци биће приказано када кликнете на такву ставку." + +msgid "The file was saved safely." +msgstr "Датотека је сачувана." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Датотека је сачувана и компилирана у MO формат, али вероватно неће радити " +"како треба." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "Датотека је сачувана, али не може бити компилирана у MO формат." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Датотека је компилирана у MO формат, али вероватно неће радити исправно." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Датотека не може бити компилирана у MO формат." + +msgid "No problems with the translation found." +msgstr "Нема проблема са преводом." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Превод је спреман за коришћење, али %d ставка још није преведена." +msgstr[1] "Превод је спреман за коришћење, али %d ставке још нису преведене." +msgstr[2] "Превод је спреман за коришћење, али %d ставки још није преведено." + +msgid "The translation is ready for use." +msgstr "Превод је спреман за коришћење." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit је аутоматски поправио неисправан садржај у датотеци „%s“." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Датотека је садржала дупликате а они нису дозвољени. Poedit је решио " +"проблем, али вам препоручујемо да проверите преводе свих елемената који су " +"означени као приближни и исправите их, ако је потребно." + +msgid "Language of the translation isn't set." +msgstr "Нисте поставили језик превода." + +msgid "Set Language" +msgstr "Постави језик" + +msgid "Set language" +msgstr "Постави језик" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Предлози нису доступни ако језик превода није исправно подешен. Друге " +"функције такође могу бити недоступне, попут облика за множину." + +msgid "Language of the translation is the same as source language." +msgstr "Језик превода се поклапа с изворним језиком." + +msgid "Fix Language" +msgstr "Исправи језик" + +msgid "Fix language" +msgstr "Исправи језик" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Овај каталог има ставке са облицима за множину, али му није подешено " +"заглавље „Plural-Forms“." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Ставке у каталогу имају другачији број облика за множину од онога што " +"заглавље прописује." + +msgid "Required header Plural-Forms is missing." +msgstr "У заглављу недостаје вредност „Plural-Forms“." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Синтактичка грешка у заглављу Plural-Forms („%s“)." + +msgid "Fix the Header" +msgstr "Исправи заглавље" + +msgid "Fix the header" +msgstr "Исправи заглавље" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Израз за облике множине у каталогу је необичан за %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Провери" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Грешка при учитавању датотеке каталога „%s“." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Преведено: %d од %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Преостало: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d грешка" +msgstr[1] "%d грешке" +msgstr[2] "%d грешака" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d ставка" +msgstr[1] "%d ставке" +msgstr[2] "%d ставки" + +msgid " (unsaved)" +msgstr " (није сачувано)" + +msgid " (modified)" +msgstr " (измењено)" + +msgid "Go" +msgstr "Пређи" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Не могу да ажурирам преводилачку меморију: %s" + +msgid "Purge deleted translations" +msgstr "Чишћење обрисаних превода" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Желите ли да уклоните све преводе који се више не користе?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ако наставите са чишћењем, сви преводи означени као обрисани биће трајно " +"уклоњени." + +msgid "Keep" +msgstr "&Задржи" + +msgid "Purge" +msgstr "&Очисти" + +msgid "Fill missing translations from TM" +msgstr "Копирање из преводилачке меморије" + +msgid "Only fill in exact matches" +msgstr "Копирај само тачна подударања" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"По подразумеваном, слични резултати ће такође бити копирани и означени као " +"приближни. Означите ову опцију ако желите да копирате само тачна подударања." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Не означавај тачна подударања као приближна" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Омогућите само ако имате поверења у квалитет преводилачке меморије. По " +"подразумеваном, сви резултати из меморије су означени као приближни и " +"требало би их прегледати." + +msgid "Fill" +msgstr "Копирај" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d ставка је копирана из преводилачке меморије." +msgstr[1] "%d ставке су копиране из преводилачке меморије." +msgstr[2] "%d ставки је копирано из преводилачке меморије." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Преводи су означени као приближни јер су можда непрецизни. Проверите њихову " +"тачност." + +msgid "No entries could be filled from the translation memory." +msgstr "Уноси не могу бити копирани из преводилачке меморије." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Преводилачка меморија не садржи ниске које су сличне онима у тренутној " +"датотеци. Ова опција је корисна за полуаутоматске преводе тек кад Poedit " +"научи довољно из датотека које сте ручно превели." + +msgid "Translating" +msgstr "Преводим" + +msgid "Filling missing translations from TM..." +msgstr "Копирам преводе који недостају из меморије…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Преведена је %u ниска" +msgstr[1] "Преведене су %u ниске" +msgstr[2] "Преведено је %u ниски" + +msgid "Copy from source text" +msgstr "&Копирај из изворног текста" + +msgid "Copy from Source Text" +msgstr "&Копирај из изворног текста" + +msgid "Clear translation" +msgstr "&Очисти превод" + +msgid "Clear Translation" +msgstr "&Очисти превод" + +msgid "Edit comment" +msgstr "Уређивање коментара" + +msgid "Edit Comment" +msgstr "Уреди коментар" + +msgid "References:" +msgstr "Референце:" + +msgid "Everything" +msgstr "Све" + +#, c-format +msgid "Form %i" +msgstr "Облик %i" + +msgid "Singular" +msgstr "Једнина" + +msgid "Zero" +msgstr "Нула" + +msgid "One" +msgstr "Један" + +msgid "Two" +msgstr "Два" + +msgid "Plural" +msgstr "Множина" + +msgid "Other" +msgstr "Друго" + +msgid "&Bookmarks" +msgstr "&Обележивачи" + +#, c-format +msgid "Set bookmark %i" +msgstr "Постави обележивач %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Пређи на обележивач %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Постави обележивач %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Пређи на обележивач %i" + +msgid "Hide Sidebar" +msgstr "Сакриј бочну траку" + +msgid "Show Sidebar" +msgstr "Прикажи бочну траку" + +msgid "Hide Status Bar" +msgstr "Сакриј статусну траку" + +msgid "Show Status Bar" +msgstr "Прикажи статусну траку" + +msgid "Source text" +msgstr "Изворни текст" + +msgid "Translation" +msgstr "Превод" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Изворни текст – %s" + +msgid "unknown language" +msgstr "непознат језик" + +#, c-format +msgid "Translation — %s" +msgstr "Превод – %s" + +msgid "Error:" +msgstr "Грешка:" + +msgid "Source file" +msgstr "Изворна датотека" + +msgid "Source file occurrence:" +msgstr "Појављивање изворне датотеке:" + +msgid "Open in Editor" +msgstr "Отвори у уређивачу" + +msgid "Open in editor" +msgstr "Отвори у уређивачу" + +msgid "No references for the selected item." +msgstr "За изабрану ставку нема референци." + +#, c-format +msgid "Error opening file %s!" +msgstr "Грешка при отварању датотеке „%s“." + +msgid "Find" +msgstr "П&ронађи" + +msgid "Replace" +msgstr "Замени" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Опције" + +msgid "Ignore case" +msgstr "Занемари величину слова" + +msgid "Wrap around" +msgstr "Кружна претрага" + +msgid "Whole words only" +msgstr "&Само целе речи" + +msgid "Find in source texts" +msgstr "Пронађи у изворним текстовима" + +msgid "Find in translations" +msgstr "&Преводи" + +msgid "Find in comments" +msgstr "&Коментари" + +msgid "Close" +msgstr "&Затвори" + +msgid "Replace All" +msgstr "Замени све" + +msgid "Replace all" +msgstr "Замени све" + +msgid "< &Previous" +msgstr "< П&ретходно" + +msgid "&Next >" +msgstr "&Следеће >" + +msgid "String to find" +msgstr "Жељени упит" + +msgid "Replacement string" +msgstr "Замена" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Не могу да покренем програм: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Кôд језика или име (нпр. sr_RS) " + +msgid "Translation Language" +msgstr "Језик превода" + +msgid "Language of the translation:" +msgstr "Језик превода:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit – управљач каталозима" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Укупно" + +msgid "Untrans" +msgstr "Непреведено" + +msgid "Fuzzy" +msgstr "Приближно" + +msgid "Bad Tokens" +msgstr "Неисправно ознака" + +msgid "Last modified" +msgstr "Последња измена" + +msgid "Select directory" +msgstr "Избор фасцикле" + +msgid "Directories:" +msgstr "Фасцикле:" + +msgid "" +msgstr "<неименовано>" + +msgid "Do you want to delete the project?" +msgstr "Желите ли да обришете пројекат?" + +msgid "Confirmation" +msgstr "Потврда" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Заиста желите да ажурирате све\n" +"каталоге у овом пројекту?" + +msgid "Information about the translator" +msgstr "Информације о преводиоцу" + +msgid "Name:" +msgstr "Име:" + +msgid "Your Name" +msgstr "Ваше име" + +msgid "Email:" +msgstr "Е-адреса:" + +msgid "your_email@example.com" +msgstr "vasa_adresa@primer.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ваше име и е-адреса се користе да назначе последњег преводиоца у заглављу " +"GNU gettext датотека." + +msgid "Editing" +msgstr "Уређивање" + +msgid "Automatically compile MO file when saving" +msgstr "Аутоматски компилирај MO датотеку при чувању" + +msgid "Show summary after catalog update" +msgstr "Прикажи &резиме након ажурирања каталога" + +msgid "Check spelling" +msgstr "Провери правопис" + +msgid "Always change focus to text input field" +msgstr "Увек промени &фокус на поље за унос текста" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Не дозволите да списак порука заузме фокус. Ако омогућите, морате да " +"користите Ctrl и стрелице да бисте се кретали кроз поруке, и не морате да " +"притискате Tab да бисте променили фокус." + +msgid "Appearance" +msgstr "Изглед" + +msgid "Use custom list font:" +msgstr "Користи прилагођени фонт за списак:" + +msgid "Use custom text fields font:" +msgstr "Користи прилагођени фонт за текстуална поља:" + +msgid "Change UI language" +msgstr "&Промени језик окружења" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 или новији)" + +msgid "General" +msgstr "Опште" + +msgid "Use translation memory" +msgstr "&Користи преводилачку меморију" + +msgid "Learn From Files..." +msgstr "&Научи из датотека…" + +msgid "Learn from files..." +msgstr "&Научи из датотека…" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Поништи" + +msgid "Consult TM when updating from sources" +msgstr "Погледај преводилачку меморију при ажурирању из извора" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Ако омогућите, Poedit ће покушати да попуни нове уносе\n" +"претходним преводима из преводилачке меморије.\n" +"Ако је меморија скоро па празна, онда и нема много ефекта. Што више\n" +"превода уређујете и што је већа база са преводима, то су бољи резултати." + +msgid "Stored translations:" +msgstr "Сачувани преводи:" + +msgid "Database size on disk:" +msgstr "Величина базе података:" + +msgid "Select translation files to import" +msgstr "Избор датотеке превода за увоз" + +msgid "Translation Memory" +msgstr "Преводилачка меморија" + +msgid "Importing translations..." +msgstr "Увозим преводе…" + +msgid "Finalizing..." +msgstr "Завршавам…" + +msgid "Reset translation memory" +msgstr "Очисти преводилачку меморију" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Желите ли да очистите преводилачку меморију?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Ако поништите преводилачку меморију, обрисаћете све преводе у њој. Ова радња " +"је неповратна." + +msgid "Cancel" +msgstr "&Откажи" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Меморија" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Издвајачи се користе за проналажење и издвајање ниски за превођење у " +"датотекама изворног кода, како бисте их касније могли превести." + +msgid "New" +msgstr "&Ново" + +msgid "Edit" +msgstr "&Уреди" + +msgid "Delete extractor" +msgstr "Обриши издвајач" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Заиста желите да обришете издвајач „%s“?" + +msgid "Extractors" +msgstr "Издвајачи" + +msgid "Accounts" +msgstr "Налози" + +msgid "Automatically check for updates" +msgstr "Аутоматски проверавај има ли ажурирања" + +msgid "Include beta versions" +msgstr "Укључи &бета верзије" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Бета верзије садрже најновије функције и побољшања, али могу бити мање " +"стабилне." + +msgid "Updates" +msgstr "Ажурирања" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ове поставке утичу на унутрашње обликовање PO датотека. Прилагодите их " +"својим потребама, нпр. ако користите систем за контролу верзија." + +msgid "Line endings:" +msgstr "Завршеци редова:" + +msgid "Unix (recommended)" +msgstr "Unix (препоручује се)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Прелом:" + +msgid "Preserve formatting of existing files" +msgstr "Очувај обликовање постојећих датотека" + +msgid "Advanced" +msgstr "Напредно" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Поставке %s-а" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Овде превуците фасцикле\n" +"\n" +"или кликните на дугме „+“" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Овде превуците фасцикле\n" +"\n" +"или кликните на дугме „+“" + +msgid "Add Folders..." +msgstr "Додај фасцикле…" + +msgid "Add folders..." +msgstr "Додај фасцикле…" + +msgid "Add Files..." +msgstr "Додај датотеке…" + +msgid "Add files..." +msgstr "Додај датотеке…" + +msgid "Add Wildcard..." +msgstr "Додај заменски знак…" + +msgid "Add wildcard..." +msgstr "Додај заменски знак…" + +msgid "Paths" +msgstr "Путање" + +msgid "Excluded paths" +msgstr "Изузете путање" + +msgid "Additional keywords" +msgstr "Додатне кључне речи" + +msgid "Name of the project the translation is for" +msgstr "Име пројекта који се преводи." + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "нпр. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (препоручује се)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Прво сачувајте датотеку. Овај одељак не може да се уређује док то не урадите." + +msgid "Comment:" +msgstr "Коментар:" + +msgid "OK" +msgstr "&У реду" + +msgid "C&lear" +msgstr "О&чисти" + +msgid "Clear the comment" +msgstr "Очистите коментар." + +msgid "Create new translations project" +msgstr "Направите нови пројекат за превођење." + +msgid "Edit the project" +msgstr "Уредите пројекат." + +msgid "Delete the project" +msgstr "Обришите пројекат." + +msgid "Update all" +msgstr "А&журирај све" + +msgid "Update all catalogs in the project" +msgstr "Ажурирајте све каталоге у пројекту." + +msgid "Edit project" +msgstr "Уређивање пројекта" + +msgid "Project name:" +msgstr "Име пројекта:" + +msgid "Browse" +msgstr "&Потражи…" + +msgid "Add directory to the list" +msgstr "Додајте фасциклу на списак." + +msgid "&New..." +msgstr "&Ново…" + +msgid "New from &POT/PO file..." +msgstr "Нови каталог из &POT датотеке…" + +msgid "New From &POT/PO File..." +msgstr "Нови каталог из &POT датотеке…" + +msgid "&Open..." +msgstr "&Отвори…" + +msgid "Open Recent" +msgstr "Отварање недавне датотеке" + +msgid "Open from Crowdin..." +msgstr "Отвори из Crowdin-а…" + +msgid "Open From Crowdin..." +msgstr "Отвори из Crowdin-а…" + +msgid "&Close" +msgstr "&Затвори" + +msgid "&Save" +msgstr "&Сачувај" + +msgid "Save &as..." +msgstr "Сачувај &као…" + +msgid "Save &As..." +msgstr "Сачувај &као…" + +msgid "Compile to MO..." +msgstr "Компилирај у MO…" + +msgid "E&xport as HTML..." +msgstr "Извези као &HTML…" + +msgid "Check for updates..." +msgstr "&Потражи ажурирања…" + +msgid "&Preferences..." +msgstr "&Жељене поставке…" + +msgid "Catalogs &manager" +msgstr "&Управљач каталозима" + +msgid "Catalogs &Manager" +msgstr "&Управљач каталозима" + +msgid "E&xit" +msgstr "&Изађи" + +msgid "Quit" +msgstr "Изађи" + +msgid "Copy from singular" +msgstr "Копирај једнину" + +msgid "Copy From Singular" +msgstr "Копирај једнину" + +msgid "Translation is &fuzzy" +msgstr "Пр&евод је приближан" + +msgid "Translation Is &Fuzzy" +msgstr "Пр&евод је приближан" + +msgid "Edit &comment" +msgstr "Уреди &коментар" + +msgid "Edit &Comment" +msgstr "Уреди &коментар" + +msgid "Suggestions" +msgstr "Предлози" + +msgid "&Show references" +msgstr "Прикажи &референце" + +msgid "&Show References" +msgstr "Прикажи &референце" + +msgid "&Find..." +msgstr "&Пронађи…" + +msgid "Replace..." +msgstr "Замени…" + +msgid "Find next" +msgstr "Пронађи &следеће" + +msgid "Find previous" +msgstr "Пронађи пр&етходно" + +msgid "Find and Replace..." +msgstr "Пронађи и замени…" + +msgid "Find Next" +msgstr "Пронађи &следеће" + +msgid "Find Previous" +msgstr "Пронађи пр&етходно" + +msgid "&Preferences" +msgstr "&Жељене поставке" + +msgid "Display entry &IDs" +msgstr "&Идентификатори ставки" + +msgid "Display Entry &IDs" +msgstr "И&дентификатори ставки" + +msgid "Sort by &file order" +msgstr "Сортирај по &реду у датотеци" + +msgid "Sort by &File Order" +msgstr "Сортирај по &реду у датотеци" + +msgid "Sort by &source" +msgstr "Сортирај по &извору" + +msgid "Sort by &Source" +msgstr "Сортирај по &извору" + +msgid "Sort by &translation" +msgstr "Сортирај по &преводу" + +msgid "Sort by &Translation" +msgstr "Сортирај по &преводу" + +msgid "&Group by context" +msgstr "&Групиши по контексту" + +msgid "&Group By Context" +msgstr "&Групиши по контексту" + +msgid "Entries with errors first" +msgstr "Прво ставке са грешкама" + +msgid "Entries with Errors First" +msgstr "Прво ставке са грешкама" + +msgid "&Untranslated entries first" +msgstr "Прво н&епреведене ставке" + +msgid "&Untranslated Entries First" +msgstr "Прво н&епреведене ставке" + +msgid "Show sidebar" +msgstr "Прикажи бочну траку" + +msgid "Show status bar" +msgstr "Прикажи статусну траку" + +msgid "C&atalog" +msgstr "&Каталог" + +msgid "&Update from sources" +msgstr "Ажурирај из &извора" + +msgid "&Update from Sources" +msgstr "Ажурирај из &извора" + +msgid "Update from &POT file..." +msgstr "Ажурирај помоћу &POT датотеке…" + +msgid "Update from &POT File..." +msgstr "Ажурирај помоћу &POT датотеке…" + +msgid "Sync with Crowdin" +msgstr "Синхронизуј са Crowdin-ом" + +msgid "Fill missing translations from &TM..." +msgstr "Копирај из &преводилачке меморије…" + +msgid "Fill Missing Translations from &TM..." +msgstr "Копирај из &преводилачке меморије…" + +msgid "&Purge deleted translations" +msgstr "&Очисти обрисане преводе" + +msgid "&Purge Deleted Translations" +msgstr "&Очисти обрисане преводе" + +msgid "&Validate translations" +msgstr "Провери &ваљаност превода" + +msgid "&Validate Translations" +msgstr "Провери &ваљаност превода" + +msgid "&Properties..." +msgstr "&Својства…" + +msgid "&Done and next" +msgstr "Примени и &настави" + +msgid "&Done and Next" +msgstr "Примени и &настави" + +msgid "&Previous translation" +msgstr "&Претходни превод" + +msgid "&Previous Translation" +msgstr "&Претходни превод" + +msgid "&Next translation" +msgstr "&Следећи превод" + +msgid "&Next Translation" +msgstr "&Следећи превод" + +msgid "P&revious unfinished" +msgstr "П&ретходна недовршена" + +msgid "P&revious Unfinished" +msgstr "П&ретходна недовршена" + +msgid "Ne&xt unfinished" +msgstr "С&ледећа недовршена" + +msgid "Ne&xt Unfinished" +msgstr "С&ледећа недовршена" + +msgid "Previous plural form" +msgstr "Претходни образац множине" + +msgid "Previous Plural Form" +msgstr "Претходни образац множине" + +msgid "Next plural form" +msgstr "Следећи образац множине" + +msgid "Next Plural Form" +msgstr "Следећи образац множине" + +msgid "&Online help" +msgstr "&Помоћ на мрежи" + +msgid "&Online Help" +msgstr "&Помоћ на мрежи" + +msgid "&GNU gettext manual" +msgstr "Упутство за &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Упутство за &GNU gettext" + +msgid "&About Poedit" +msgstr "&О Poedit-у" + +msgid "&About" +msgstr "&О програму" + +msgid "Extractor setup" +msgstr "Подешавање издвајача" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Списак наставака одвојених тачка-зарезом (нпр. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Позивање" + +msgid "Command to extract translations:" +msgstr "Команда за издвајање изворног текста:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ова команда се користи за покретање издвајача.\n" +"%o означава име излазне датотеке, %K списак\n" +"кључних речи, %F списак улазних датотека,\n" +"%C ознаку кодирања (погледајте испод)." + +msgid "An item in keywords list:" +msgstr "Ставка у списку кључних речи:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ово ће бити прикачено на командну линију по једном\n" +"за сваку кључну реч. Ознака %k представља кључну реч." + +msgid "An item in input files list:" +msgstr "Ставка у списку улазних датотека:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ово ће бити прикачено на командну линију по једном\n" +"за сваку улазну датотеку. Ознака %f представља име датотеке." + +msgid "Source code charset:" +msgstr "Кодирање изворног кода:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ово ће бити додато на командну линију\n" +"само ако је наведено кодирање извора. Ознака %c представља вредност кодирања." + +msgid "Catalog properties" +msgstr "Својства каталога" + +msgid "Project name and version:" +msgstr "Име пројекта и верзија:" + +msgid "Plural Forms:" +msgstr "Облици за множину:" + +msgid "Use default rules for this language" +msgstr "&Подразумевана правила за овај језик" + +msgid "Use custom expression" +msgstr "Прилагођени &израз:" + +msgid "Learn about plural forms" +msgstr "Више о облицима за множину" + +msgid "Charset:" +msgstr "Кодирање:" + +msgid "Team:" +msgstr "Тим:" + +msgid "Team's email address:" +msgstr "Е-адреса тима:" + +msgid "Translation properties" +msgstr "Својства превода" + +msgid "Sources paths" +msgstr "Путање извора" + +msgid "Extract text from source files in the following directories:" +msgstr "Издвојте текст из изворних датотека у следеће фасцикле." + +msgid "Base path:" +msgstr "Основна путања:" + +msgid "Sources keywords" +msgstr "Кључне речи извора" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Користите ове кључне речи (имена функција) за препознавање\n" +"преводивих ниски у изворним датотекама." + +msgid "Learn about gettext keywords" +msgstr "Више о кључним речима gettext-а" + +msgid "Update summary" +msgstr "Резиме ажурирања" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ове ниске су пронађене у изворној датотеци,\n" +"али их нема у каталогу. Сада ће бити додате." + +msgid "New strings" +msgstr "Нове ниске" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ове ниске више нису у изворној датотеци.\n" +"Оне ће бити уклоњене из каталога." + +msgid "Obsolete strings" +msgstr "Застареле ниске" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 нових, 0 застарелих)" + +msgid "Open" +msgstr "Отвори" + +msgid "Save catalog" +msgstr "Сачувајте каталог." + +msgid "Validate" +msgstr "Провери ваљаност" + +msgid "Check for errors in the translation" +msgstr "Проверите има ли грешака у преводу." + +msgid "Update" +msgstr "Ажурирај" + +msgid "Update catalog - synchronize it with sources" +msgstr "Ажурирајте каталог и ускладите га са изворима." + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Поставите ознаку приближног превода или је уклоните." + +msgid "Show or hide the sidebar" +msgstr "Прикажите или сакријте бочну траку." + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Претходна верзија изворног текста:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "Стари изворни текст (до ажурирања) на који се односи приближан превод." + +msgid "Notes for translators:" +msgstr "Напомене за преводиоце:" + +msgid "Add comment" +msgstr "Додај коментар" + +msgid "Add Comment" +msgstr "Додај коментар" + +msgid "Translation suggestions:" +msgstr "Предлози преводa:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Нема резултата" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Нема резултата" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ова ниска је пронађена у преводилачкој меморији Poedit-а." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(нових: %i, застарелих: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Увоз превода: %d" + +msgid "Poedit Update" +msgstr "Poedit – ажурирање" + +msgid "Preparing migration..." +msgstr "Припремам премештање…" + +#, c-format +msgid "Migration exit status: %d" +msgstr "Статус завршног премештања: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit треба да конвертује вашу преводилачку меморију у нови формат." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ово мора бити урађено пре покретања програма. Радња може потрајати и " +"неколико минута ако сте сачували много превода, али је обично доста брже." + +msgid "Proceed" +msgstr "Настави" + +msgid "Translation memory migration failed." +msgstr "Не могу да преместим преводилачку меморију." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Не могу да преместим податке преводилачке меморије. Грешка:\n" +"\n" +"%s\n" +"Пошаљите е-поруку на help@poedit.net а ми ћемо покушати да решимо проблем." + +msgid "Cannot create temporary directory." +msgstr "Не могу да креирам привремену фасциклу." + +msgid "Welcome to Poedit" +msgstr "Добро дошли у Poedit" + +msgid "Edit a translation" +msgstr "Уреди превод" + +msgid "Open an existing PO file and edit the translation." +msgstr "Отворите постојећу PO датотеку и уредите превод." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Направите нови превод из постојеће PO или POT датотеке." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Сарађујте у превођењу на Crowdin-у" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Преузмите датотеку са пројекта Crowdin, преведите је и синхронизујте своје " +"измене." + +msgid "What is Crowdin?" +msgstr "Шта је Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Нема превода. То је необично." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Преводиве ставке се не додају ручно у gettext систем, већ се аутоматски " +"издвајају\n" +"из изворног кода. На овај начин остају ажурне и тачне.\n" +"Преводиоци углавном користе PO датотеке шаблона (POT) које припремају " +"програмери." + +msgid "(Learn more about GNU gettext)" +msgstr "Детаљније о GNU gettext-у" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Најједноставнији начин да попуните овај каталог јесте да га ажурирате помоћу " +"POT датотеке:" + +msgid "Update from POT" +msgstr "Ажурирај помоћу POT датотеке" + +msgid "Take translatable strings from an existing POT template." +msgstr "Копирајте преводиве ниске из постојећег POT шаблона." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Преводиве ниске можете издвојити и директно из изворног кода:" + +msgid "Extract from sources" +msgstr "Издвој из извора" + +msgid "Configure source code extraction in Properties." +msgstr "Подесите издвајање из изворног кода у „Својствима“." + +msgid "Sync" +msgstr "Синхронизација" + +msgid "Synchronize the translation with Crowdin" +msgstr "Синхронизујте превод са Crowdin-ом" diff --git a/locales/sv.mo b/locales/sv.mo new file mode 100644 index 0000000000000000000000000000000000000000..2aa3a49660a2086dc9ad962e5d0146d26fe76f69 GIT binary patch literal 45564 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 literal 0 HcmV?d00001 diff --git a/locales/sv.po b/locales/sv.po new file mode 100644 index 0000000..e06c0e8 --- /dev/null +++ b/locales/sv.po @@ -0,0 +1,1959 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:05-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Swedish\n" +"Language: sv_SE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: sv-SE\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Dölj det här meddelandet" + +msgid "Don't Show Again" +msgstr "Visa inte igen" + +msgid "Don't show again" +msgstr "Visa inte igen" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i rad i fil '%s' laddades inte korrekt." +msgstr[1] "%i rader i fil '%s' laddades inte korrekt." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Rad %d i filen '%s' är skadad (inte giltig %s-data)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Felaktig header: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Trasig katalogfil: singularformen msgstr används tillsammans med msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Trasig katalogfil: pluralformen msgstr används utan msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Det uppstod fel vid läsning av katalogen. Som resultat kan vissa uppgifter " +"saknas eller ha skadats." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Det gick inte att läsa filen %s, den är förmodligen skadad." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Filen '%s' är skrivskyddad och kan inte sparas.\n" +"Spara den under ett annat namn." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Det gick inte att spara filen %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Det uppstod ett problem med att formatera filen snyggt (men den sparades " +"okej)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogen kunde inte sparas i '%s' som anges i kataloginställningar.\n" +"\n" +"Den sparades i UTF-8 istället och inställningen ändrades därefter." + +msgid "Error saving catalog" +msgstr "Fel vid sparande av katalog" + +msgid "PO Translation Files" +msgstr "PO-översättningsfiler" + +msgid "POT Translation Templates" +msgstr "POT-översättningsmallar" + +msgid "All Translation Files" +msgstr "Alla översättningsfiler" + +msgid "Merging differences..." +msgstr "Sammanfogar skillnader..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' är inte en giltig POT-fil." + +msgid "(Use default language)" +msgstr "(Använd standardsprÃ¥k)" + +msgid "Select your preferred language" +msgstr "Välj önskat sprÃ¥k" + +msgid "Language selection" +msgstr "SprÃ¥kval" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Du mÃ¥ste starta om Poedit för att denna ändring ska träda i kraft." + +msgid "Downloading translations is disabled in this project." +msgstr "Nedladdning av översättningar är inaktiverade i detta projekt." + +msgid "Not authorized, please sign in again." +msgstr "Inte behörig, vänligen logga in igen." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin är en online plattform för att hantera översättningar och ett " +"verktyg för att samarbeta med översättningar. Poedit kan smidigt " +"synkronisera PO-filer som hanteras pÃ¥ Crowdin." + +msgid "Sign In" +msgstr "Logga in" + +msgid "Sign in" +msgstr "Logga in" + +msgid "Sign Out" +msgstr "Logga ut" + +msgid "Sign out" +msgstr "Logga ut" + +msgid "Waiting for authentication…" +msgstr "Väntar pÃ¥ verifiering…" + +msgid "Updating user information…" +msgstr "Uppdaterar användarinformation…" + +msgid "Signed in as:" +msgstr "Inloggad som:" + +msgid "Learn More About Crowdin" +msgstr "Lär dig mer om Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Lär dig mer om Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Logga in till Crowdin" + +msgid "Open Crowdin translation" +msgstr "Öppna Crowdin-översättning" + +msgid "Project:" +msgstr "Projekt:" + +msgid "Language:" +msgstr "SprÃ¥k:" + +msgid "File:" +msgstr "Fil:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Inga översättningsprojekt finns pÃ¥ ditt Crowdin-konto." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Detta projekt har inga filer som kan översättas i Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Denna fil kan endast redigeras i Crowdin:s webbgränssnitt." + +msgid "Downloading latest translations…" +msgstr "Hämtar senaste översättning…" + +msgid "Syncing with Crowdin" +msgstr "Synkroniserar med Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synkroniserar med Crowdin misslyckades." + +msgid "Crowdin error" +msgstr "Crowdin-fel" + +msgid "Uploading translations…" +msgstr "Laddar upp översättning…" + +msgid "&Copy" +msgstr "&Kopiera" + +msgid "Learn more" +msgstr "Läs mer" + +msgid "Learn More" +msgstr "Lär mer" + +#, c-format +msgid "Failed command: %s" +msgstr "Kommando misslyckades: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Det gick inte att sammanfoga gettext kataloger." + +msgid "Scanning files..." +msgstr "Skannar filer..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Parsar %s filer..." + +msgid "Failed to load extracted catalog." +msgstr "Det gick inte att läsa extraherad katalog." + +msgid "&Help" +msgstr "&Hjälp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO-filer kan inte öppnas med Poedit." + +msgid "Error opening file" +msgstr "Problem när filen lästes in" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Öppna och redigera motsvarande PO-fil i stället. När du sparar den, " +"uppdateras MO-filen ocksÃ¥." + +msgid "don't delete temporary files (for debugging)" +msgstr "ta inte bort temporära filer (för felsökning)" + +msgid "handle a poedit:// URI" +msgstr "hantera en poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Misslyckades att kommunicera med Poedit-processen." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ohanterat undantag inträffade: %s" + +msgid "Unhandled exception occurred." +msgstr "Ohanterat undantag inträffade." + +msgid "Open catalog" +msgstr "Öppna katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fil '%s' finns inte." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Om %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Tjänster" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Dölj %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Dölj andra" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Visa alla" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Avsluta %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit är en lättanvänd översättningseditor." + +msgid "Catalogs Manager" +msgstr "Kataloghanterare" + +msgid "Check for Updates..." +msgstr "Sök efter uppdateringar..." + +msgid "&Edit" +msgstr "&Redigera" + +msgid "Undo" +msgstr "Ångra" + +msgid "Redo" +msgstr "Gör om" + +msgid "Paste and Match Style" +msgstr "Klistra in och matcha stil" + +msgid "Delete" +msgstr "Ta bort" + +msgid "Spelling and Grammar" +msgstr "Stavning och grammatik" + +msgid "Show Spelling and Grammar" +msgstr "Visa stavning och grammatik" + +msgid "Check Document Now" +msgstr "Kontrollera dokumentet nu" + +msgid "Check Spelling While Typing" +msgstr "Kontrollera stavning medan jag skriver" + +msgid "Check Grammar With Spelling" +msgstr "Kontrollera grammatik tillsammans med stavning" + +msgid "Correct Spelling Automatically" +msgstr "Korrigera stavning automatiskt" + +msgid "Substitutions" +msgstr "Ersättningar" + +msgid "Show Substitutions" +msgstr "Visa ersättningar" + +msgid "Smart Copy/Paste" +msgstr "Smart kopiera/klistra in" + +msgid "Smart Quotes" +msgstr "Typografiska citattecken" + +msgid "Smart Dashes" +msgstr "Smarta streck" + +msgid "Smart Links" +msgstr "Smarta länkar" + +msgid "Text Replacement" +msgstr "Textersättning" + +msgid "Transformations" +msgstr "Transformeringar" + +msgid "Make Upper Case" +msgstr "Gör till versaler" + +msgid "Make Lower Case" +msgstr "Gör till gemener" + +msgid "Capitalize" +msgstr "Kapitalisera" + +msgid "Speech" +msgstr "Tal" + +msgid "Start Speaking" +msgstr "Börja tala" + +msgid "Stop Speaking" +msgstr "Sluta tala" + +msgid "&View" +msgstr "&Visa" + +msgid "Enter Full Screen" +msgstr "Helskärm" + +msgid "Window" +msgstr "Fönster" + +msgid "Minimize" +msgstr "Minimera" + +msgid "Zoom" +msgstr "Zooma" + +msgid "Bring All to Front" +msgstr "Lägg alla överst" + +msgid "PO Translation" +msgstr "PO-översättning" + +msgid "The file cannot be opened." +msgstr "Filen kan inte öppnas." + +msgid "Invalid file" +msgstr "Ogiltig fil" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Filen kan vara skadad eller i ett format som inte känns igen av Poedit." + +msgid "&Undo" +msgstr "&Ångra" + +msgid "&Redo" +msgstr "&Gör om" + +msgid "Cu&t" +msgstr "Kl&ipp ut" + +msgid "Cut" +msgstr "Klipp ut" + +msgid "Copy" +msgstr "Kopiera" + +msgid "&Paste" +msgstr "&Klistra in" + +msgid "Paste" +msgstr "Klistra in" + +msgid "&Delete" +msgstr "&Ta bort" + +msgid "Select &All" +msgstr "Välj &alla" + +msgid "Select All" +msgstr "Markera allt" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Skift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Upp" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Ner" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "skift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Du kan inte släppa mer än en fil pÃ¥ fönstret för Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fil '%s' är inte en meddelandekatalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Arkiv" + +msgid "&Go" +msgstr "&GÃ¥ till" + +msgid "Source text:" +msgstr "Källtext:" + +msgid "Singular:" +msgstr "Singular:" + +msgid "Plural:" +msgstr "Plural:" + +msgid "Translation:" +msgstr "Översättning:" + +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-filer är endast mallar och innehÃ¥ller inte själv nÃ¥gra översättningar.\n" +"För att göra en översättning, skapa en ny PO-fil baserad pÃ¥ mallen." + +msgid "Create New Translation" +msgstr "Skapa ny översättning" + +msgid "Create new translation" +msgstr "Skapa ny översättning" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Stavningskontroll är inaktiverad, eftersom ordboken för %s inte är " +"installerad." + +msgid "Install" +msgstr "Installera" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog ändrad. Vill du spara ändringar?" + +msgid "Save changes" +msgstr "Spara ändringar" + +msgid "Your changes will be lost if you don't save them." +msgstr "Dina ändringar kommer att gÃ¥ förlorade om du inte sparar dem." + +msgid "Save" +msgstr "Spara" + +msgid "Don't save" +msgstr "Spara inte" + +msgid "Don't Save" +msgstr "Spara inte" + +msgid "Save as..." +msgstr "Spara som..." + +msgid "Compile to..." +msgstr "Kompilera till..." + +msgid "Compiled Translation Files" +msgstr "Kompilerade översättningsfiler" + +msgid "Export as..." +msgstr "Exportera som..." + +msgid "HTML Files" +msgstr "HTML-filer" + +msgid "Open catalog template" +msgstr "Öppna mall för katalog" + +msgid "Updating catalog" +msgstr "Uppdaterar katalog" + +msgid "Source code not available." +msgstr "Ingen källkod tillgänglig." + +msgid "Updating failed" +msgstr "Uppdatering misslyckades" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Översättningar kunde inte uppdateras frÃ¥n källkoden, eftersom ingen kod " +"hittades i den plats som anges i katalogens egenskaper." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Poster i katalogen är troligen fel." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Uppdatering av katalogen misslyckades. Klicka pÃ¥ 'Detaljer >>' för detaljer." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problem med översättningen hittades." +msgstr[1] "%d problem med översättningen hittades." + +msgid "Validation results" +msgstr "Valideringsresultat" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Poster med fel har rödmarkerats i listan. Detaljer om felet visas dÃ¥ en " +"sÃ¥dan post väljs." + +msgid "The file was saved safely." +msgstr "Filen har sparats pÃ¥ ett säkert sätt." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Filen sparades säkert och kompilerades till MO-format, men den kommer " +"förmodligen inte fungera korrekt." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Filen sparades säkert, men den kan inte kompileras till MO-formatet och " +"användas." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Filen kompilerades till MO-format, men den kommer förmodligen inte fungera " +"korrekt." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Filen kan inte kompileras till MO-format och användas." + +msgid "No problems with the translation found." +msgstr "Inga problem med översättningen hittades." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Översättningen är klar att användas, men %d post är ännu inte översatt." +msgstr[1] "" +"Översättningen är klar att användas, men %d poster är ännu inte översatta." + +msgid "The translation is ready for use." +msgstr "Översättningen är klar för användning." + +msgid "Context:" +msgstr "InnehÃ¥ll:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit fixade automatiskt ogiltigt innehÃ¥ll i filen \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Filen innehöll dubbletter, vilket inte är tillÃ¥tet i PO-filer och skulle " +"förhindra filen frÃ¥n att användas. Poedit fixade problemet, men du bör se " +"över översättningar som har objekt markerade som luddiga och korrigera dem " +"om det behövs." + +msgid "Language of the translation isn't set." +msgstr "SprÃ¥ket i översättningen har inte angetts." + +msgid "Set Language" +msgstr "Ange sprÃ¥k" + +msgid "Set language" +msgstr "Ange sprÃ¥k" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Förslag är inte tillgängliga om översättningssprÃ¥ket inte är inställt pÃ¥ " +"rätt sätt. Andra funktioner, sÃ¥som pluralformer, kan pÃ¥verkas ocksÃ¥." + +msgid "Language of the translation is the same as source language." +msgstr "SprÃ¥ket i översättningen är samma som källsprÃ¥ket." + +msgid "Fix Language" +msgstr "Fixa sprÃ¥k" + +msgid "Fix language" +msgstr "Fixa sprÃ¥k" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Denna katalog innehÃ¥ller poster med pluralformer, men har inte Plural-Former " +"headern konfigurerad." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Poster i denna katalog har olika antal pluralformer än vad som anges i " +"Plural-Former headern" + +msgid "Required header Plural-Forms is missing." +msgstr "Nödvändig Plural-forms header saknas." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaxfel i Plural-Former headern (\"%s\")." + +msgid "Fix the Header" +msgstr "Fixa header" + +msgid "Fix the header" +msgstr "Fixa header" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Pluralformsuttryck som används av katalogen är ovanligt för %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Granska" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Fel vid laddning av meddelandekatalogfil '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Översatt: %d av %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "ÅterstÃ¥r: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d fel" +msgstr[1] "%d fel" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d post" +msgstr[1] "%d poster" + +msgid " (unsaved)" +msgstr " (ej sparad)" + +msgid " (modified)" +msgstr " (ändrad)" + +msgid "Go" +msgstr "GÃ¥ till" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Det gick inte att uppdatera översättningsminne: %s" + +msgid "Purge deleted translations" +msgstr "Rensa borttagna översättningar" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Vill du ta bort alla översättningar som inte längre används?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Om du fortsätter med rensningen kommer alla översättningar som är markerade " +"för borttagning att tas bort permanent. Du mÃ¥ste översätta dem igen om de " +"läggs tillbaka i framtiden." + +msgid "Keep" +msgstr "BehÃ¥ll" + +msgid "Purge" +msgstr "Rensa" + +msgid "Fill missing translations from TM" +msgstr "Fyll saknade översättningar frÃ¥n översättningsminnet" + +msgid "Only fill in exact matches" +msgstr "Fyll endast i exakta matchningar" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Som standard fylls ocksÃ¥ felaktiga resultat i och markeras som luddiga. " +"Markera detta alternativ för att endast inkludera korrekta matchningar." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Markera inte exakta matchningar som luddiga" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Aktivera endast om du litar pÃ¥ kvaliteten pÃ¥ ditt översättningsminne. Som " +"standard markeras alla matchningar frÃ¥n översättningsminnet som luddiga och " +"bör granskas." + +msgid "Fill" +msgstr "Fyll" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d post fylldes frÃ¥n översättningsminnet." +msgstr[1] "%d poster fylldes frÃ¥n översättningsminnet." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Översättningarna har markerats som luddiga, eftersom de kan vara felaktiga. " +"Du bör granska att dom är korrekta." + +msgid "No entries could be filled from the translation memory." +msgstr "Inga poster kunde fyllas frÃ¥n översättningsminnet." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Översättningsminnet innehÃ¥ller inga matchande strängar till innehÃ¥llet i " +"denna fil. Detta är bara effektivt för semi-automatiska översättningar efter " +"att Poedit har lärt sig frÃ¥n filer som du tidigare har översatt manuellt." + +msgid "Translating" +msgstr "Översätter" + +msgid "Filling missing translations from TM..." +msgstr "Fyller saknade översättningar frÃ¥n översättningsminnet..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Översatte %u sträng" +msgstr[1] "Översatte %u strängar" + +msgid "Copy from source text" +msgstr "Kopiera frÃ¥n källtext" + +msgid "Copy from Source Text" +msgstr "Kopiera frÃ¥n Källtext" + +msgid "Clear translation" +msgstr "Rensa översättning" + +msgid "Clear Translation" +msgstr "Rensa Översättning" + +msgid "Edit comment" +msgstr "Redigera kommentar" + +msgid "Edit Comment" +msgstr "Redigera Kommentar" + +msgid "References:" +msgstr "Hänvisningar:" + +msgid "Everything" +msgstr "Allt" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Noll" + +msgid "One" +msgstr "Ett" + +msgid "Two" +msgstr "TvÃ¥" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Övrigt" + +msgid "&Bookmarks" +msgstr "&Bokmärken" + +#, c-format +msgid "Set bookmark %i" +msgstr "Ange bokmärke %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "GÃ¥ till bokmärke %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Ange bokmärke %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "GÃ¥ till bokmärke %i" + +msgid "Hide Sidebar" +msgstr "Dölj sidofält" + +msgid "Show Sidebar" +msgstr "Visa sidofält" + +msgid "Hide Status Bar" +msgstr "Dölj statusfältet" + +msgid "Show Status Bar" +msgstr "Visa statusfältet" + +msgid "Source text" +msgstr "Källtext" + +msgid "Translation" +msgstr "Översättning" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Källtext — %s" + +msgid "unknown language" +msgstr "okänt sprÃ¥k" + +#, c-format +msgid "Translation — %s" +msgstr "Översättning — %s" + +msgid "Error:" +msgstr "Fel:" + +msgid "Source file" +msgstr "Källfil" + +msgid "Source file occurrence:" +msgstr "Förekomster källfil:" + +msgid "Open in Editor" +msgstr "Öppna i editor" + +msgid "Open in editor" +msgstr "Öppna i editor" + +msgid "No references for the selected item." +msgstr "Inga referenser för det markerade objektet." + +#, c-format +msgid "Error opening file %s!" +msgstr "Fel vid öppning av fil %s!" + +msgid "Find" +msgstr "Hitta" + +msgid "Replace" +msgstr "Ersätt" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Alternativ" + +msgid "Ignore case" +msgstr "Ignorera gemen/versal" + +msgid "Wrap around" +msgstr "Loopa" + +msgid "Whole words only" +msgstr "Endast hela ord" + +msgid "Find in source texts" +msgstr "Hitta i källtexter" + +msgid "Find in translations" +msgstr "Sök i översättningar" + +msgid "Find in comments" +msgstr "Sök i kommentarer" + +msgid "Close" +msgstr "Stäng" + +msgid "Replace All" +msgstr "Ersätt alla" + +msgid "Replace all" +msgstr "Ersätt alla" + +msgid "< &Previous" +msgstr "" +msgstr "&Nästa >" + +msgid "String to find" +msgstr "Sträng att hitta" + +msgid "Replacement string" +msgstr "Ersättningssträng" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Kan inte köra program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "SprÃ¥kkod eller namn (t.ex. en_GB)" + +msgid "Translation Language" +msgstr "ÖversättningssprÃ¥k" + +msgid "Language of the translation:" +msgstr "SprÃ¥k i översättningen:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Kataloghanterare" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Totalt" + +msgid "Untrans" +msgstr "Oöversatt" + +msgid "Fuzzy" +msgstr "Luddig" + +msgid "Bad Tokens" +msgstr "DÃ¥liga tokens" + +msgid "Last modified" +msgstr "Senast ändrad" + +msgid "Select directory" +msgstr "Välj katalog" + +msgid "Directories:" +msgstr "Kataloger:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vill du ta bort projektet?" + +msgid "Confirmation" +msgstr "Bekräftelse" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Vill du verkligen göra en massuppdatering av\n" +"alla kataloger i detta projekt?" + +msgid "Information about the translator" +msgstr "Information om översättaren" + +msgid "Name:" +msgstr "Namn:" + +msgid "Your Name" +msgstr "Ditt namn" + +msgid "Email:" +msgstr "E-post:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ditt namn och e-postadress används endast att ställa in i sista-översättare " +"huvudet pÃ¥ GNU gettext-filer." + +msgid "Editing" +msgstr "Redigering" + +msgid "Automatically compile MO file when saving" +msgstr "Kompilera MO-fil automatiskt vid sparning" + +msgid "Show summary after catalog update" +msgstr "Visa sammanfattning efter kataloguppdatering" + +msgid "Check spelling" +msgstr "Kontrollera stavning" + +msgid "Always change focus to text input field" +msgstr "Ändra alltid fokus till textinmatningsfältet" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"LÃ¥t aldrig listan med strängar ta fokus. Om det är aktiverat, mÃ¥ste du " +"använda Ctrl-pilar för tangentbordsnavigering men du kan ocksÃ¥ skriva text " +"direkt, utan att behöva trycka Tabb för att byta fokus." + +msgid "Appearance" +msgstr "Utseende" + +msgid "Use custom list font:" +msgstr "Använd anpassat typsnitt i lista:" + +msgid "Use custom text fields font:" +msgstr "Använd anpassat typsnitt i textfält:" + +msgid "Change UI language" +msgstr "Ändra UI sprÃ¥k" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(kräver Windows 8 eller nyare)" + +msgid "General" +msgstr "Allmänt" + +msgid "Use translation memory" +msgstr "Använda översättningsminne" + +msgid "Learn From Files..." +msgstr "Lär av filer..." + +msgid "Learn from files..." +msgstr "Lär av filer..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Återställ" + +msgid "Consult TM when updating from sources" +msgstr "Använd översättningsminnet när källor uppdateras" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Om aktiverad, kommer Poedit försöker fylla i nya poster med hjälp av dina " +"tidigare\n" +"översättningar som sparats i översättningsminnet. Om översättningsminnet är\n" +"nästan tomt kommer det inte vara effektivt. Ju fler översättningar\n" +"du redigerar och ju större översättningsminnet växer, desto bättre blir det." + +msgid "Stored translations:" +msgstr "Lagrade översättningar:" + +msgid "Database size on disk:" +msgstr "Databasstorlek pÃ¥ disk:" + +msgid "Select translation files to import" +msgstr "Välj översättningsfiler att importera" + +msgid "Translation Memory" +msgstr "Översättningsminne (TM)" + +msgid "Importing translations..." +msgstr "Importerar översättningar..." + +msgid "Finalizing..." +msgstr "Färdigställer..." + +msgid "Reset translation memory" +msgstr "Återställ översättningsminne" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Är du säker pÃ¥ att du vill Ã¥terställa översättningsminnet?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Återställa översättningsminnet kommer oÃ¥terkalleligen ta bort alla lagrade " +"översättningar frÃ¥n den. Du kan inte Ã¥ngra Ã¥tgärden." + +msgid "Cancel" +msgstr "Avbryt" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Källkodsextrahering används för att hitta översättbara strängar i " +"källkodsfiler och extrahera dem sÃ¥ att de kan översättas." + +msgid "New" +msgstr "Ny" + +msgid "Edit" +msgstr "Redigera" + +msgid "Delete extractor" +msgstr "Ta bort extraherare" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Är du säker pÃ¥ att du vill ta bort extraherare \"%s\"?" + +msgid "Extractors" +msgstr "Extraherare" + +msgid "Accounts" +msgstr "Konton" + +msgid "Automatically check for updates" +msgstr "Sök efter uppdateringar automatiskt" + +msgid "Include beta versions" +msgstr "Inkludera betaversioner" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-versioner innehÃ¥ller de senaste nya funktionerna och förbättringarna, " +"men kan vara lite mindre stabila." + +msgid "Updates" +msgstr "Uppdateringar" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Dessa inställningar pÃ¥verkar den interna formateringen av PO-filer. Justera " +"dem om du har särskilda önskemÃ¥l t.ex. pÃ¥ grund av versionskontroll." + +msgid "Line endings:" +msgstr "Radslut:" + +msgid "Unix (recommended)" +msgstr "Unix (rekommenderas)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Radbryt efter:" + +msgid "Preserve formatting of existing files" +msgstr "Bevara formateringen av befintliga filer" + +msgid "Advanced" +msgstr "Avancerat" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Inställningar %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Dra och Släpp Mappar Här\n" +"\n" +"eller använd +-knappen" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Dra och släpp mappar här\n" +"\n" +"eller använd +-knappen" + +msgid "Add Folders..." +msgstr "Lägg till mappar..." + +msgid "Add folders..." +msgstr "Lägg till mappar..." + +msgid "Add Files..." +msgstr "Lägg till filer..." + +msgid "Add files..." +msgstr "Lägg till filer..." + +msgid "Add Wildcard..." +msgstr "Lägg till jokertecken..." + +msgid "Add wildcard..." +msgstr "Lägg till jokertecken..." + +msgid "Paths" +msgstr "Sökväg" + +msgid "Excluded paths" +msgstr "Undantagna sökvägar" + +msgid "Additional keywords" +msgstr "Ytterligare sökord" + +msgid "Name of the project the translation is for" +msgstr "Namnet pÃ¥ projektet översättningen är för" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "t.ex. nplurals = 2; plural = (n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (rekommenderas)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Vänligen spara filen först. Det här avsnittet kan inte redigeras tills dess." + +msgid "Comment:" +msgstr "Kommentar:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Rensa" + +msgid "Clear the comment" +msgstr "Rensa kommentaren" + +msgid "Create new translations project" +msgstr "Skapa ett nytt översättningsprojekt" + +msgid "Edit the project" +msgstr "Redigera projektet" + +msgid "Delete the project" +msgstr "Ta bort projektet" + +msgid "Update all" +msgstr "Uppdatera alla" + +msgid "Update all catalogs in the project" +msgstr "Uppdatera alla kataloger i projektet" + +msgid "Edit project" +msgstr "Redigera projekt" + +msgid "Project name:" +msgstr "Projektnamn:" + +msgid "Browse" +msgstr "Bläddra" + +msgid "Add directory to the list" +msgstr "Lägg till katalog till listan" + +msgid "&New..." +msgstr "&Ny..." + +msgid "New from &POT/PO file..." +msgstr "Nytt frÃ¥n &POT/PO-fil..." + +msgid "New From &POT/PO File..." +msgstr "Nytt frÃ¥n &POT/PO-fil..." + +msgid "&Open..." +msgstr "&Öppna..." + +msgid "Open Recent" +msgstr "Öppna senaste" + +msgid "Open from Crowdin..." +msgstr "Öppna frÃ¥n Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Öppna frÃ¥n Crowdin..." + +msgid "&Close" +msgstr "&Stäng" + +msgid "&Save" +msgstr "&Spara" + +msgid "Save &as..." +msgstr "Spara s&om..." + +msgid "Save &As..." +msgstr "Spara s&om..." + +msgid "Compile to MO..." +msgstr "Kompilera till MO..." + +msgid "E&xport as HTML..." +msgstr "E&xportera som HTML..." + +msgid "Check for updates..." +msgstr "Sök efter uppdateringar..." + +msgid "&Preferences..." +msgstr "&Inställningar..." + +msgid "Catalogs &manager" +msgstr "&Kataloghanterare" + +msgid "Catalogs &Manager" +msgstr "&Kataloghanterare" + +msgid "E&xit" +msgstr "&Avsluta" + +msgid "Quit" +msgstr "Avsluta" + +msgid "Copy from singular" +msgstr "Kopiera frÃ¥n singular" + +msgid "Copy From Singular" +msgstr "Kopiera frÃ¥n singular" + +msgid "Translation is &fuzzy" +msgstr "Översättningen är &luddig" + +msgid "Translation Is &Fuzzy" +msgstr "Översättningen är &Luddig" + +msgid "Edit &comment" +msgstr "Redigera &kommentar" + +msgid "Edit &Comment" +msgstr "Redigera &Kommentar" + +msgid "Suggestions" +msgstr "Förslag" + +msgid "&Show references" +msgstr "&Visa källor" + +msgid "&Show References" +msgstr "&Visa Källor" + +msgid "&Find..." +msgstr "&Sök..." + +msgid "Replace..." +msgstr "Ersätt..." + +msgid "Find next" +msgstr "Sök nästa" + +msgid "Find previous" +msgstr "Sök föregÃ¥ende" + +msgid "Find and Replace..." +msgstr "Sök och ersätt..." + +msgid "Find Next" +msgstr "Sök nästa" + +msgid "Find Previous" +msgstr "Sök föregÃ¥ende" + +msgid "&Preferences" +msgstr "&Inställningar" + +msgid "Display entry &IDs" +msgstr "Visa post-&ID" + +msgid "Display Entry &IDs" +msgstr "Visa post-&ID" + +msgid "Sort by &file order" +msgstr "Sortera efter &filordning" + +msgid "Sort by &File Order" +msgstr "Sortera efter &Filordning" + +msgid "Sort by &source" +msgstr "Sortera efter &källa" + +msgid "Sort by &Source" +msgstr "Sortera efter &Källa" + +msgid "Sort by &translation" +msgstr "Sortera efter ö&versättning" + +msgid "Sort by &Translation" +msgstr "Sortera efter Ö&versättning" + +msgid "&Group by context" +msgstr "&Gruppera efter innehÃ¥ll" + +msgid "&Group By Context" +msgstr "&Gruppera efter innehÃ¥ll" + +msgid "Entries with errors first" +msgstr "Poster med fel först" + +msgid "Entries with Errors First" +msgstr "Poster med fel först" + +msgid "&Untranslated entries first" +msgstr "&Oöversatta poster först" + +msgid "&Untranslated Entries First" +msgstr "&Oöversatta Poster Först" + +msgid "Show sidebar" +msgstr "Visa sidofält" + +msgid "Show status bar" +msgstr "Visa statusfältet" + +msgid "C&atalog" +msgstr "&Katalog" + +msgid "&Update from sources" +msgstr "&Uppdatera frÃ¥n källor" + +msgid "&Update from Sources" +msgstr "&Uppdatera frÃ¥n Källor" + +msgid "Update from &POT file..." +msgstr "Uppdatera frÃ¥n &POT-fil..." + +msgid "Update from &POT File..." +msgstr "Uppdatera frÃ¥n &POT-Fil..." + +msgid "Sync with Crowdin" +msgstr "Synkronisera med Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Fyll saknade översättningar frÃ¥n ö&versättningsminnet..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Fyll saknade översättningar frÃ¥n ö&versättningsminnet..." + +msgid "&Purge deleted translations" +msgstr "&Rensa borttagna översättningar" + +msgid "&Purge Deleted Translations" +msgstr "&Rensa Borttagna Översättningar" + +msgid "&Validate translations" +msgstr "&Validera översättningar" + +msgid "&Validate Translations" +msgstr "&Validera Översättningar" + +msgid "&Properties..." +msgstr "&Egenskaper..." + +msgid "&Done and next" +msgstr "&Klar och nästa" + +msgid "&Done and Next" +msgstr "&Klar och Nästa" + +msgid "&Previous translation" +msgstr "&Tidigare översättning" + +msgid "&Previous Translation" +msgstr "&Tidigare översättning" + +msgid "&Next translation" +msgstr "&Nästa översättning" + +msgid "&Next Translation" +msgstr "&Nästa översättning" + +msgid "P&revious unfinished" +msgstr "Fö®Ã¥ende ofärdig" + +msgid "P&revious Unfinished" +msgstr "Fö®Ã¥ende Ofärdig" + +msgid "Ne&xt unfinished" +msgstr "Nä&sta ofärdig" + +msgid "Ne&xt Unfinished" +msgstr "Nä&sta Ofärdig" + +msgid "Previous plural form" +msgstr "FöregÃ¥ende pluralform" + +msgid "Previous Plural Form" +msgstr "FöregÃ¥ende pluralform" + +msgid "Next plural form" +msgstr "Nästa pluralform" + +msgid "Next Plural Form" +msgstr "Nästa pluralform" + +msgid "&Online help" +msgstr "O&nline hjälp" + +msgid "&Online Help" +msgstr "O&nline Hjälp" + +msgid "&GNU gettext manual" +msgstr "Manual &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual &GNU gettext" + +msgid "&About Poedit" +msgstr "&Om Poedit" + +msgid "&About" +msgstr "&Om" + +msgid "Extractor setup" +msgstr "Konfigurera extraherare" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista över tillägg avgränsas med semikolon (t.ex. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Anrop:" + +msgid "Command to extract translations:" +msgstr "Kommando för att extrahera översättningar:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Detta är kommandot som används för att starta extraheraren.\n" +"%o expanderar till namnet pÃ¥ utdatafilen, %K till listan\n" +"av sökord, %F till listan över indatafiler,\n" +"%C till charset-flaggan (se nedan)." + +msgid "An item in keywords list:" +msgstr "Ett objekt i sökordslistan:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Detta kommer att bifogas till kommandoraden en\n" +"gÃ¥ng för varje sökord. %k expanderar till sökordet." + +msgid "An item in input files list:" +msgstr "Ett objekt i indatafilslistan:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Detta kommer att bifogas till kommandoraden en\n" +"gÃ¥ng för varje indatafil. %f expanderar till filnamnet." + +msgid "Source code charset:" +msgstr "Källkod teckenuppsättning:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Detta kommer att bifogas till kommandoraden\n" +"endast om källkodsteckenuppsättningen har angetts. %c expanderar till " +"teckenuppsättningsvärdet." + +msgid "Catalog properties" +msgstr "Katalogegenskaper" + +msgid "Project name and version:" +msgstr "Projektnamn och version:" + +msgid "Plural Forms:" +msgstr "Flertalsformer:" + +msgid "Use default rules for this language" +msgstr "Använd standardregler för detta sprÃ¥k" + +msgid "Use custom expression" +msgstr "Använd anpassat uttryck" + +msgid "Learn about plural forms" +msgstr "Lär dig mer om flertalsformer" + +msgid "Charset:" +msgstr "Teckenuppsättning:" + +msgid "Team:" +msgstr "Grupp:" + +msgid "Team's email address:" +msgstr "Gruppens e-postadress:" + +msgid "Translation properties" +msgstr "Översättningsegenskaper" + +msgid "Sources paths" +msgstr "Källor sökvägar" + +msgid "Extract text from source files in the following directories:" +msgstr "Extrahera text frÃ¥n källfilen i följande kataloger:" + +msgid "Base path:" +msgstr "Rotsökväg:" + +msgid "Sources keywords" +msgstr "Källor sökord" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Använd dessa sökord (funktionsnamn) att känna igen översättningsbara " +"strängar\n" +"i källfiler:" + +msgid "Learn about gettext keywords" +msgstr "Lär dig mer om gettext sökord" + +msgid "Update summary" +msgstr "Uppdatera sammanfattning" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Dessa strängar hittades i källorna, men var inte i katalogen.\n" +"Poedit kommer att lägga till dem i katalogen nu." + +msgid "New strings" +msgstr "Nya strängar" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Dessa strängar är inte i källorna längre.\n" +"Poedit tar bort dem frÃ¥n katalogen nu." + +msgid "Obsolete strings" +msgstr "FörÃ¥ldrade strängar" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nya, 0 förÃ¥ldrade)" + +msgid "Open" +msgstr "Öppna" + +msgid "Save catalog" +msgstr "Spara katalog" + +msgid "Validate" +msgstr "Validera" + +msgid "Check for errors in the translation" +msgstr "Leta efter fel i översättning" + +msgid "Update" +msgstr "Uppdatera" + +msgid "Update catalog - synchronize it with sources" +msgstr "Uppdatera katalog - synkronisera den med källor" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Växlas om vald sträng har luddig översättning" + +msgid "Show or hide the sidebar" +msgstr "Visa eller dölj sidofält" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Tidigare källtext:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Den gamla källtexten (innan den ändrades under en uppdatering) som den " +"luddiga översättningen motsvarar." + +msgid "Notes for translators:" +msgstr "Anteckningar för översättare:" + +msgid "Add comment" +msgstr "Lägg till kommentar" + +msgid "Add Comment" +msgstr "Lägg till kommentar" + +msgid "Translation suggestions:" +msgstr "Översättningsförslag:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Inga träffar hittades" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Inga träffar hittades" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Den här strängen hittades i Poedit:s översättningsminne." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nya: %i, förÃ¥ldrade: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importerar översättningar: %d" + +msgid "Poedit Update" +msgstr "Uppdatering av Poedit" + +msgid "Preparing migration..." +msgstr "Förbereder migration..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migrationens avslutningsstatus: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit behöver konvertera ditt översättningsminne till ett nytt format." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Detta mÃ¥ste göras innan Poedit kan starta. Det kan ta nÃ¥gra minuter om du " +"har mÃ¥nga lagrade översättningar, men bör normalt vara mycket snabbare." + +msgid "Proceed" +msgstr "Fortsätt" + +msgid "Translation memory migration failed." +msgstr "Det gick inte att migrera översättningsminnet." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Översättningsminnet kunde inte migreras. Felet var:\n" +"\n" +"%s\n" +"Var vänlig och skicka ett epost till help@poedit.net och vi kommer Ã¥tgärda " +"problemet." + +msgid "Cannot create temporary directory." +msgstr "Kan inte skapa temporär katalog." + +msgid "Welcome to Poedit" +msgstr "Välkommen till Poedit" + +msgid "Edit a translation" +msgstr "Redigera en översättning" + +msgid "Open an existing PO file and edit the translation." +msgstr "Öppna en befintlig PO-fil och redigera översättningen." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Ta en befintlig PO-fil eller POT-mall och skapa en ny översättning frÃ¥n den." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Samarbeta pÃ¥ en översättning med Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Hämta en fil frÃ¥n ett Crowdin-projekt, översätt och synkronisera ändringarna." + +msgid "What is Crowdin?" +msgstr "Vad är Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Det finns inga översättningar. Det är ovanligt." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Översättningsbara poster läggs inte till manuellt i Gettext-systemet, men " +"extraheras automatiskt\n" +"frÃ¥n källkoden. PÃ¥ detta sätt hÃ¥ller de sig uppdaterade och korrekta.\n" +"Översättare använder vanligtvis PO-mallfiler (POTs) förberedda Ã¥t dem av " +"utvecklaren." + +msgid "(Learn more about GNU gettext)" +msgstr "(Läs mer om GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Det enklaste sättet att fylla denna katalog är att uppdatera den frÃ¥n en POT:" + +msgid "Update from POT" +msgstr "Uppdatera frÃ¥n POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Ta översättningsbara strängar frÃ¥n en befintlig POT-mall." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Du kan ocksÃ¥ extrahera översättningsbara strängar direkt frÃ¥n källkoden:" + +msgid "Extract from sources" +msgstr "Extrahera frÃ¥n källor" + +msgid "Configure source code extraction in Properties." +msgstr "Konfigurera källkodsextrahering i egenskaper." + +msgid "Sync" +msgstr "Synkronisera" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synkronisera översättningen med Crowdin" diff --git a/locales/tg.mo b/locales/tg.mo new file mode 100644 index 0000000000000000000000000000000000000000..73edfc36ed76affc30c5ed70a31f337745aeded7 GIT binary patch literal 61591 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%0Ay%v)P8-s zxeoJXLn{_5gGLRr0)uR{*P^hoy{6%+W*Jh|9k&t9@h2W8|7m=2MuStM4OZS2B}r<1 zfq&5kMpq0n>%X|&k~saCM)l%NoO)oT9F4ajl+{34Gv*zf zHl+OX>+n@a={J@E>iTc;sb5yu*qA}821sO7Fc&M<&npxp24M4~T$)ZtL@D5(|apo{ZFF8&V#E5js{TTNh^#1{yXe2BNf19<%?>tHn@Pozh zoEy>$#*uiqA^_CQwmUS$+z)xQSTy7&R+SX^pfJlp`674lwZ+K7j4J-4ug+-MFLLu% zRtr@^pnQ*{JH~fI6^^Y^|3foc??w)a92HnJ_|D8w3^<^x;KBG^^i_cz!G(%vX&O2c zHuPtN`)r4kj&ryMxzF}}Ly&5XRTUa^^2h>F0TTcZc)YNvELR(A&_Jlp=0D$3nE3cS zZekc!@{21`0v61zcf1Fh?zjzYJ;|$TYdtK6B;6DJU_5N!=%V?WkwtyXrjdNEOjl|S zTmwhqW%3`KyxcDj#0fL4k&6?@kry>X?r$5T+>7d1I<&ClH2C2ZNL8capD)glJT zxG!NSa`0q`=*;xAGSD|XSn8`CbJ$U--ySoyk{+8LI_;^7&ZZuk?Qc^1?B!yZ{P9d6{Y@xzH(=GwLkekxmF|c literal 0 HcmV?d00001 diff --git a/locales/tg.po b/locales/tg.po new file mode 100644 index 0000000..d43b41c --- /dev/null +++ b/locales/tg.po @@ -0,0 +1,1979 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-10-13 10:38+0200\n" +"PO-Revision-Date: 2016-10-13 03:52-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Tajik\n" +"Language: tg_TJ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: tg\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Хабари огоҳии зеринро пинҳон кунед" + +msgid "Don't Show Again" +msgstr "Аз нав намоиш надодан" + +msgid "Don't show again" +msgstr "Дигар нишон дода нашавад" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i хат дар файли '%s' ба таври дуруст бор карда нашуд." +msgstr[1] "%i хат дар файли '%s' ба таври дуруст бор карда нашуд." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Хати %d дар файли '%s' вайрон аст (санаи %s беэътибор аст)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Сарлавҳаи хато: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Файли тарҷума вайрон шудааст: шакли ҷамъи msgstr бо шакли ҷамъи msgid " +"истифода шудааст" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Файли тарҷума вайрон шудааст: шакли ҷамъи msgstr бе шакли ҷамъи msgid " +"истифода шудааст" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Ҳангоми боркунии каталог хато пайдо шуд. Эҳтимол баъзе маълумотҳо гум " +"шудаанд ё ҳамчун натиҷа вайрон шудаанд." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Файли %s бор карда нашуд, эҳтимол он вайрон аст." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Файли '%s' танҳо барои хониш аст ва захира карда намешавад.\n" +"Онро дар зери номи дигар захира кунед." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Файли %s захира карда нашуд." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Барои шаклсозии хуби файли зерин мушкилиҳо пайдо шудаанд (аммо он хуб захира " +"карда шуд)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Файл дар маҷмӯи аломатҳои '%s', ки дар танзимоти файл татбиқ шудааст, захира " +"намешавад.\n" +"\n" +"Файл ба ивази рамзгузории интихобшуда ба формати UTF-8 захира шудааст ва " +"танзими файл мувофиқи ин формат тағйир ёфт." + +msgid "Error saving catalog" +msgstr "Захиракунии файл қатъ карда шуд" + +msgid "PO Translation Files" +msgstr "Файлҳои тарҷумавии PO" + +msgid "POT Translation Templates" +msgstr "Қолибҳои тарҷумавии POT" + +msgid "All Translation Files" +msgstr "Ҳамаи файлҳои тарҷума" + +msgid "Merging differences..." +msgstr "Муттаҳидшавии фарқиятҳо..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "POT-файли '%s' номувофиқ аст." + +msgid "(Use default language)" +msgstr "(Истифодаи забони асосӣ)" + +msgid "Select your preferred language" +msgstr "Забони дилхоҳро интихоб кунед" + +msgid "Language selection" +msgstr "Интихоби забон" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Барои татбиқ кардани тағйирот, шумо бояд барномаро аз нав оғоз кунед." + +msgid "Downloading translations is disabled in this project." +msgstr "Боргирии тарҷумаҳо барои ин лоиҳа ғайрифаъол шуд." + +msgid "Not authorized, please sign in again." +msgstr "Ворид нашуд, лутфан аз нав ворид шавед." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin абзори тарҷумаҳои онлайни муштрак ва платформаи идоракунии " +"маҳаллисозӣ мебошад. Poedit метавонад файлҳои PO-и идорашавандаро бо Crowdin " +"ҳамвор ҳамоҳанг кунад." + +msgid "Sign In" +msgstr "Ворид шудан" + +msgid "Sign in" +msgstr "Ворид шудан" + +msgid "Sign Out" +msgstr "Баромадан" + +msgid "Sign out" +msgstr "Баромадан" + +msgid "Waiting for authentication…" +msgstr "Дар ҳоли интизори санҷиши ҳаққоният…" + +msgid "Updating user information…" +msgstr "Дар ҳоли навсозии маълумоти корбар…" + +msgid "Signed in as:" +msgstr "Ворид шуд ҳамчун:" + +msgid "Learn More About Crowdin" +msgstr "Маълумоти бештар дар бораи Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Маълумоти бештар дар бораи Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Ворид шудан ба Crowdin" + +msgid "Open Crowdin translation" +msgstr "Кушодани тарҷума дар Crowdin" + +msgid "Project:" +msgstr "Лоиҳа:" + +msgid "Language:" +msgstr "Забон:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" +"Дар ҳисоби Crowdin-и шумо ягон лоиҳаи тарҷума дар рӯйхат вуҷуд надорад." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Ин лоиҳа ягон файле, ки матавонад дар Poedit тарҷума карда шавад, вуҷуд " +"надорад." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Ин файл метавонад танҳо дар интерфейси веби Crowdin таҳрир карда шавад." + +msgid "Downloading latest translations…" +msgstr "Дар ҳоли боргирии тарҷумаҳои навтарин…" + +msgid "Syncing with Crowdin" +msgstr "Ҳамоҳангсозӣ бо Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Ҳамоҳангсозӣ бо Crowdin иҷро нашуд." + +msgid "Crowdin error" +msgstr "Хатои Crowdin" + +msgid "Uploading translations…" +msgstr "Дар ҳоли боркунии тарҷумаҳо…" + +msgid "&Copy" +msgstr "&Нусха бардоштан" + +msgid "Learn more" +msgstr "Маълумоти бештар" + +msgid "Learn More" +msgstr "Маълумоти бештар" + +#, c-format +msgid "Failed command: %s" +msgstr "Фармони қатъшуда: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Муттаҳид кардани файлҳои gettext баргузор нагашт." + +msgid "Scanning files..." +msgstr "Пуйиши файлҳо..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s файл таҷзия карда шудааст..." + +msgid "Failed to load extracted catalog." +msgstr "Боркунии файлҳои баровардашуда баргузор нагашт." + +msgid "&Help" +msgstr "&Кумак" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Файлҳои MO метавонанд дар Poedit бевосита таҳрир карда шаванд." + +msgid "Error opening file" +msgstr "Хатои кушодани файл" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Лутфан, ба ҷояш ягон файли PO-и мувофиқро кушоед ва таҳрир кунед. Вақте ки " +"шумо онро захира мекунед, файли MO низ навсозӣ карда мешавад." + +msgid "don't delete temporary files (for debugging)" +msgstr "файлҳои муваққатиро (барои ислоҳкунии хатоҳо) нест накунед" + +msgid "handle a poedit:// URI" +msgstr "коркарди poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Алоқа бо раванди Poedit қатъ шуд." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Истиснои иҷронашуда ба амал омад: %s" + +msgid "Unhandled exception occurred." +msgstr "Истиснои иҷронашуда ба амал омад." + +msgid "Open catalog" +msgstr "Кушодани файл" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Файли '%s' мавҷуд нест." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Дар бораи %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Версияи %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Хидматҳо" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Пинҳон кардани %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Дигаронро пинҳон кардан" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Ҳамаро намоиш додан" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Пӯшидани %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Барномаи Poedit барои тарҷумаи файлҳо хеле осон аст." + +msgid "Catalogs Manager" +msgstr "Мудири файлҳои тарҷума" + +msgid "Check for Updates..." +msgstr "Санҷиши навсозиҳо..." + +msgid "&Edit" +msgstr "&Таҳрир" + +msgid "Undo" +msgstr "Ботил сохтан" + +msgid "Redo" +msgstr "Дубора анҷом додан" + +msgid "Paste and Match Style" +msgstr "Гузоштан мувофиқи сабк" + +msgid "Delete" +msgstr "Нест кардан" + +msgid "Spelling and Grammar" +msgstr "Санҷиши имло ва дастури забон" + +msgid "Show Spelling and Grammar" +msgstr "Намоиши санҷиши имло ва дастури забон" + +msgid "Check Document Now" +msgstr "Санҷиши ҳуҷҷат" + +msgid "Check Spelling While Typing" +msgstr "Санҷиши имло ҳангоми навис" + +msgid "Check Grammar With Spelling" +msgstr "Санҷиши имлои тарҷума" + +msgid "Correct Spelling Automatically" +msgstr "Санҷиши имло ба таври худкор" + +msgid "Substitutions" +msgstr "Ивазкуниҳо" + +msgid "Show Substitutions" +msgstr "Намоиши ивазкуниҳо" + +msgid "Smart Copy/Paste" +msgstr "Нусха бардоштан/гузоштани ҳушманд" + +msgid "Smart Quotes" +msgstr "Нохунакҳои ҳушманд" + +msgid "Smart Dashes" +msgstr "Тирегузории ҳушманд" + +msgid "Smart Links" +msgstr "Пайвандҳои ҳушманд" + +msgid "Text Replacement" +msgstr "Ивазкунии матн" + +msgid "Transformations" +msgstr "Табдилдиҳӣ" + +msgid "Make Upper Case" +msgstr "Табдил ба ҳарфҳои хурд" + +msgid "Make Lower Case" +msgstr "Табдил ба ҳарфҳои хурд" + +msgid "Capitalize" +msgstr "Ҳарфҳои калон" + +msgid "Speech" +msgstr "Нутқ" + +msgid "Start Speaking" +msgstr "Оғоз кардани нутқ" + +msgid "Stop Speaking" +msgstr "Манъ кардани нутқ" + +msgid "&View" +msgstr "&Намоиш" + +msgid "Enter Full Screen" +msgstr "Кушодан дар экрани пурра" + +msgid "Window" +msgstr "Равзана" + +msgid "Minimize" +msgstr "Ҳадди ақал сохтан" + +msgid "Zoom" +msgstr "Интихоби андоза" + +msgid "Bring All to Front" +msgstr "Ҳамаро ба пеш гузоред" + +msgid "PO Translation" +msgstr "Тарҷумаи PO" + +msgid "The file cannot be opened." +msgstr "Файл кушода намешавад." + +msgid "Invalid file" +msgstr "Файли нодуруст" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Эҳтимол аст, ки файл вайрон шудааст ё дар формате мебошад, ки бо Poedit " +"дастгирӣ намешавад." + +msgid "&Undo" +msgstr "&Ботил сохтан" + +msgid "&Redo" +msgstr "&Дубора анҷом додан" + +msgid "Cu&t" +msgstr "&Буридан" + +msgid "Cut" +msgstr "Буридан" + +msgid "Copy" +msgstr "Нусха бардоштан" + +msgid "&Paste" +msgstr "&Гузоштан" + +msgid "Paste" +msgstr "Гузоштан" + +msgid "&Delete" +msgstr "&Нест кардан" + +msgid "Select &All" +msgstr "&Ҳамаро интихоб кардан" + +msgid "Select All" +msgstr "Ҳамаро интихоб кардан" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Боло" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Поён" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Шумо наметавонед зиёда аз як файл дар барномаи Poedit кушоед." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Файли '%s' барои тарҷума нест." + +msgid "Poedit" +msgstr "Барномаи Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "&Гузаштан" + +msgid "Source text:" +msgstr "Матни сатри аслӣ:" + +msgid "Singular:" +msgstr "Шакли танҳо:" + +msgid "Plural:" +msgstr "Шакли ҷамъ:" + +msgid "Translation:" +msgstr "Тарҷума:" + +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 танҳо ҳамчун қолибҳо истифода мешаванд ва худаш тарҷумаҳоро дар " +"бар намегиранд.\n" +"Барои тарҷума кардан, файли PO-и наверо дар асоси қолиб эҷод кунед." + +msgid "Create New Translation" +msgstr "Эҷоди тарҷумаи нав" + +msgid "Create new translation" +msgstr "Аз нав тарҷума кардан" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Тафтиши имло ғайрифаъол аст, зеро ки луғат барои %s насб нашудааст." + +msgid "Install" +msgstr "Насб кардан" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Файли тарҷума тағйир ёфт. Оё шумо мехоҳед, ки тағйиротро захира кунед?" + +msgid "Save changes" +msgstr "Захира кардани тағйирот" + +msgid "Your changes will be lost if you don't save them." +msgstr "Тағйиротҳои шумо гум мешаванд, агар онҳоро захира накунед." + +msgid "Save" +msgstr "Захира кардан" + +msgid "Don't save" +msgstr "Захира накардан" + +msgid "Don't Save" +msgstr "Захира накардан" + +msgid "Save as..." +msgstr "Захира кардан ҳамчун..." + +msgid "Compile to..." +msgstr "Табдил додан ба..." + +msgid "Compiled Translation Files" +msgstr "Файлҳои тарҷумавии таҳияшуда" + +msgid "Export as..." +msgstr "Барориш ҳамчун..." + +msgid "HTML Files" +msgstr "Файлҳои HTML" + +msgid "Open catalog template" +msgstr "Кушодани қолиби файл" + +msgid "Updating catalog" +msgstr "Навсозии каталог" + +msgid "Source code not available." +msgstr "Рамзи барнома дастнорас аст." + +msgid "Updating failed" +msgstr "Навсозӣ иҷро нашуд" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Тарҷумаҳо аз рамзи манбаъ навсозӣ карда намешаванд, зеро ки ягон рамз дар " +"макони муайяншуда дар хусусиятҳои файл ёфт нашуд." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Вурудҳои файл эҳтимол нодуруст ҳастанд." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Навсозии файл қатъ карда шуд. Барои маълумот, тугмаи 'Тафсилот >>' -ро пашх " +"кунед." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d масъалаи тарҷума пайдо шудааст." +msgstr[1] "%d масъалаи тарҷума пайдо шудааст." + +msgid "Validation results" +msgstr "Натиҷаҳои санҷиш" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Тарҷумаҳои хато бо ранги сурх дар рӯйхат қайд карда шудаанд. Тафсилоти " +"хатоҳо бо интихоби сатри тарҷумаи хато намоиш дода мешаванд." + +msgid "The file was saved safely." +msgstr "Файл бо муваффақият захира шудааст." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файли тарҷумашуда бо муваффақият захира шудаааст ва ба формати МО табдил " +"дода шудааст, вале эҳтимолан он дуруст кор намекунад." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Файли шумо бехатар захира шудааст, аммо ба формати МО барои истифода сохта " +"намешавад." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Ин файл ба формати MO табдил шудааст, вале метавонад дуруст кор накунад." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Файл ба формати MO табдил дода намешавад ва истифода намешавад." + +msgid "No problems with the translation found." +msgstr "Ягон хато дар тарҷума ёфт нашудааст." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Тарҷума барои истифода тайёр аст, вале %d сатр то ҳол тарҷума нашудааст." +msgstr[1] "" +"Тарҷума барои истифода тайёр аст, вале %d сатр то ҳол тарҷума нашудаанд." + +msgid "The translation is ready for use." +msgstr "Тарҷума барои истифода тайёр аст." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit муҳтавои беэътиборро дар файли “%s” ислоҳ кард." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Файл объектҳои такрориеро дар бар гирифт, ки дар файлҳои PO нораво мебошанд " +"ва файлро аз истифода қатъ мекунад. Poedit мушкилиро ҳал кард, вале шумо " +"бояд тарҷумаҳоро бо ишораҳои душворфаҳм аз назар гузаронед ва агар лозим " +"бошад, онҳоро ислоҳ кунед." + +msgid "Language of the translation isn't set." +msgstr "Забони тарҷума интихоб нашудааст." + +msgid "Set Language" +msgstr "Танзими забон" + +msgid "Set language" +msgstr "Интихоби забон" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Агар забони тарҷумаҳо нодуруст танзим карда бошад, пешниҳодҳо дастнорас " +"мешаванд. Хусусиятҳои дигар, монанди шакли ҷамъ, метавонанд таъсир расонанд." + +msgid "Language of the translation is the same as source language." +msgstr "Забони тарҷума ва забони манбаъ баробаранд." + +msgid "Fix Language" +msgstr "Ислоҳ кадани забон" + +msgid "Fix language" +msgstr "Ислоҳ кадани забон" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Файли зерин барои шакли ҷамъ танзим карда шудааст, аммо шакли ҷамъ дар " +"сарлавҳа танзим карда нашудааст." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Вурудҳои файли тарҷумаи зерин шаклҳои ҷамъи гуногунро дар бар мегиранд ва " +"сарлавҳаи шаклҳои ҷамъ маълумоти мазкур намоиш медиҳад:" + +msgid "Required header Plural-Forms is missing." +msgstr "Сарлавҳаи шакли ҷамъ лозим аст." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Хатои синтаксисӣ дар шакли ҷамъи сарлавҳа (\"%s\")." + +msgid "Fix the Header" +msgstr "Сарварақро ислоҳ кунед" + +msgid "Fix the header" +msgstr "Сарварақро ислоҳ кунед" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Шакли ҷамъ барои ибораи истифодашуда бо файл барои %s ғайриоддӣ аст." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Тафтиш" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Ҳангоми боркунии сатрҳои файли '%s' хато пайдо шуд." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "%d аз %d (%d %%) тарҷума шуд" + +#, c-format +msgid "Remaining: %d" +msgstr "Дар ҳоли ивази номи: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d хато" +msgstr[1] "%d хато" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d вуруд" +msgstr[1] "%d вуруд" + +msgid " (unsaved)" +msgstr " (захиранашуда)" + +msgid " (modified)" +msgstr " (тағйирёфта)" + +msgid "Go" +msgstr "Гузариш" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Ҳофизаи тарҷума навсозӣ нашуд: %s" + +msgid "Purge deleted translations" +msgstr "Пок кардани тарҷумаҳои нестшуда" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Оё шумо мехоҳед, ки ҳамаи тарҷумаҳоеро, ки дигар истифода намешаванд, нест " +"кунед?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Агар тоза карданро идома диҳед, ҳама тарҷумаҳои ҳамчун нест карда, бе " +"бозгашт нест мешаванд. Агар онҳо дар оянда баргашта илова шаванд, шумо " +"онҳоро дигар тарҷума карда наметавонед." + +msgid "Keep" +msgstr "Нигоҳ доштан" + +msgid "Purge" +msgstr "Поксозӣ" + +msgid "Fill missing translations from TM" +msgstr "Ворид кардани тарҷумаҳои намерасидагӣ аз TM" + +msgid "Only fill in exact matches" +msgstr "Ворид кардани танҳо мутобиқати аниқ" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Ба сурати пешфарз, натиҷаҳои нодуруст ворид карда мешаванд ва ҳамчун " +"душворфаҳм ишора мешаванд. Барои ворид кардани танҳо мутобиқати дуруст, ин " +"имконро интихоб кунед." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Қайд накардани мутобиқати аниқ ҳамчун душворфаҳм" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Фаъол кунед, танҳо агар ба ТМ-и худ эътимод дошта бошед. Ба сутари пешфарз, " +"ҳамаи мутобиқатҳо аз ТМ ҳамчун душворфаҳм ишора мешаванд ва бояд аз назар " +"гузаронида шаванд." + +msgid "Fill" +msgstr "Ворид кардан" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d пешниҳод аз ҳофизаи тарҷумаҳо ворид шудааст." +msgstr[1] "%d пешниҳод аз ҳофизаи тарҷумаҳо ворид шудаанд." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Тарҷумаҳо ҳамчун душворфаҳм қайд карда шудаанд, зеро ки онҳо метавонанд " +"носаҳеҳ бошанд. Шумо бояд онҳоро барои санҷиши хатоҳо аз назар гузаронед." + +msgid "No entries could be filled from the translation memory." +msgstr "Ягон пешниҳод аз ҳофизаи тарҷумаҳо ворид нашуд." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Ҳофизаи тарҷумаҳо (TM) ягон пешниҳоди мувофиқро барои сатрҳои ин файл дар " +"бар намегирад. TM-и ҷорӣ танҳо тарҷумаҳои ҷузъӣ ба таври худкор пешниҳод " +"мекунад, баъд аз оне ки Poedit тарҷумаҳоро аз файлҳои қаблӣ ҷамъ кунад." + +msgid "Translating" +msgstr "Дар ҳоли тарҷума" + +msgid "Filling missing translations from TM..." +msgstr "Воридкунии тарҷумаҳои намерасидагӣ аз TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u сатр тарҷума шуд" +msgstr[1] "%u сатр тарҷума шуд" + +msgid "Copy from source text" +msgstr "Нусха бардоштан аз матни сатри аслӣ" + +msgid "Copy from Source Text" +msgstr "Нусха бардоштан аз матни сатри аслӣ" + +msgid "Clear translation" +msgstr "Тоза кардани тарҷума" + +msgid "Clear Translation" +msgstr "Тоза кардани тарҷума" + +msgid "Edit comment" +msgstr "Таҳрир кардани шарҳ" + +msgid "Edit Comment" +msgstr "Таҳрир кардани шарҳ" + +msgid "References:" +msgstr "Маълумотнома:" + +msgid "Everything" +msgstr "Ҳама" + +#, c-format +msgid "Form %i" +msgstr "Шакли %i" + +msgid "Singular" +msgstr "Шумораи танҳо" + +msgid "Zero" +msgstr "Сифр" + +msgid "One" +msgstr "Як" + +msgid "Two" +msgstr "Ду" + +msgid "Plural" +msgstr "Шумораи ҷамъ" + +msgid "Other" +msgstr "Дигар" + +msgid "&Bookmarks" +msgstr "&Хатбаракҳо" + +#, c-format +msgid "Set bookmark %i" +msgstr "Танзими хатбараки %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Гузариш ба хатбараки %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Танзими хатбараки %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Гузариш ба хатбараки %i" + +msgid "Hide Sidebar" +msgstr "Пинҳон кардани навори ҷонибӣ" + +msgid "Show Sidebar" +msgstr "Намоиш додани навори ҷонибӣ" + +msgid "Hide Status Bar" +msgstr "Пинҳон кардани навори вазъият" + +msgid "Show Status Bar" +msgstr "Намоиш додани навори вазъият" + +msgid "Source text" +msgstr "Матни сатри аслӣ" + +msgid "Translation" +msgstr "Тарҷума" + +msgid "ID" +msgstr "Рақам" + +#, c-format +msgid "Source text — %s" +msgstr "Матни манбаъ — %s" + +msgid "unknown language" +msgstr "забони номаълум" + +#, c-format +msgid "Translation — %s" +msgstr "Тарҷума — %s" + +msgid "Error:" +msgstr "Хато:" + +msgid "Source file" +msgstr "Файли аслӣ" + +msgid "Source file occurrence:" +msgstr "Рӯйдодҳои файли аслӣ:" + +msgid "Open in Editor" +msgstr "Кушодан дар муҳаррир" + +msgid "Open in editor" +msgstr "Кушодан дар муҳаррир" + +msgid "No references for the selected item." +msgstr "Ягон иқтибос барои объекти интихобшуда нест." + +#, c-format +msgid "Error opening file %s!" +msgstr "Хато ҳангоми кушодани файли %s!" + +msgid "Find" +msgstr "Ҷустуҷӯ" + +msgid "Replace" +msgstr "Ҷойгузин кардан" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Имконот" + +msgid "Ignore case" +msgstr "Рад кардани ҳарфҳои хурду калон" + +msgid "Wrap around" +msgstr "Ҷустуҷӯи даврӣ" + +msgid "Whole words only" +msgstr "Танҳо калимаҳои пурра" + +msgid "Find in source texts" +msgstr "Ёфтан дар матнҳои манбаъ" + +msgid "Find in translations" +msgstr "Ҷустуҷӯ дар тарҷумаҳо" + +msgid "Find in comments" +msgstr "Ҷустуҷӯ дар шарҳҳо" + +msgid "Close" +msgstr "Пӯшидан" + +msgid "Replace All" +msgstr "Ҳамаро ҷойгузин кардан" + +msgid "Replace all" +msgstr "Ҳамаро ҷойгузин кардан" + +msgid "< &Previous" +msgstr "< &Қаблӣ" + +msgid "&Next >" +msgstr "&Навбатӣ >" + +msgid "String to find" +msgstr "Сатр барои ёфтан" + +msgid "Replacement string" +msgstr "Сатри ҷойгузорӣ" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Барнома иҷро карда намешавад: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Рамзи забон ё номи забон (масалан, \"tg\" барои забони тоҷикӣ)" + +msgid "Translation Language" +msgstr "Забони тарҷума" + +msgid "Language of the translation:" +msgstr "Забони тарҷума:" + +msgid "Poedit - Catalogs manager" +msgstr "Мудири файлҳо - Poedit" + +msgid "Catalog" +msgstr "Файли тарҷума" + +msgid "Total" +msgstr "Ҳамагӣ" + +msgid "Untrans" +msgstr "Тарҷуманашуда" + +msgid "Fuzzy" +msgstr "Душворфаҳм" + +msgid "Bad Tokens" +msgstr "Носаҳеҳ" + +msgid "Last modified" +msgstr "Санаи тағйири охирин" + +msgid "Select directory" +msgstr "Интихоби ҷузвдон" + +msgid "Directories:" +msgstr "Феҳристҳо" + +msgid "" +msgstr "<беном>" + +msgid "Do you want to delete the project?" +msgstr "Оё шумо мехоҳед, ки лоиҳаи зеринро нест кунед?" + +msgid "Confirmation" +msgstr "Тасдиқ" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Шумо дар ҳақиқат мехоҳед, ки ҳама файлҳои тарҷумаи лоиҳаи зеринро ба якбора " +"навсозӣ кунед?" + +msgid "Information about the translator" +msgstr "Маълумот дар бораи тарҷумон" + +msgid "Name:" +msgstr "Ном:" + +msgid "Your Name" +msgstr "Номи шумо" + +msgid "Email:" +msgstr "Почтаи электронӣ:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ном ва почтаи электронии шумо танҳо барои намоиш додани тарҷумони охирин дар " +"сарлавҳаҳои файлҳои GNU gettext истифода мешаванд." + +msgid "Editing" +msgstr "Таҳриркунӣ" + +msgid "Automatically compile MO file when saving" +msgstr "Омодасозии файли MO ба таври худкор ҳангоми захиракунӣ" + +msgid "Show summary after catalog update" +msgstr "Намоиш додани хулоса баъд аз навсозии файл" + +msgid "Check spelling" +msgstr "Санҷиши имло" + +msgid "Always change focus to text input field" +msgstr "Доимо тағйир додани маркази диққат ба ҳошияи матнгузорӣ" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ба рӯйхати сатр ҳаргиз нагузоред, ки маркази диққатро ишғол кунад. Агар " +"фаъол бошад, шумо бояд Ctrl-ақрабаки идора кардан аз клавиатура истифода " +"баред, аммо шумо инчунин имкони ворид кардани матнро бе зарурияти пахш " +"кардани Tab барои тағйироти маркази диққат доред." + +msgid "Appearance" +msgstr "Намуди зоҳирӣ" + +msgid "Use custom list font:" +msgstr "Истифодаи шрифти фармоишӣ:" + +msgid "Use custom text fields font:" +msgstr "Истифодаи шрифти фармоишӣ барои майдонҳои вуруди матн:" + +msgid "Change UI language" +msgstr "Иваз кардани забони интерфейс" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 ё версияи навтарро талаб мекунад)" + +msgid "General" +msgstr "Умумӣ" + +msgid "Use translation memory" +msgstr "Истифодаи ҳофизаи тарҷумаҳо" + +msgid "Learn From Files..." +msgstr "Илова кардан аз файлҳо..." + +msgid "Learn from files..." +msgstr "Ёфтан аз файлҳо..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Танзими дубора" + +msgid "Consult TM when updating from sources" +msgstr "Пеш аз навсозӣ кардан аз манбаҳо, ҳофизаи тарҷумаҳоро (TM) санҷед" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Агар фаъол бошад, Poedit ба воситаи тарҷумаҳои захирашуда аз\n" +"ҳофизаи тарҷумаҳо сатрҳои навро тарҷума мекунад. Агар TM қариб\n" +"холӣ бошад, тарҷума аз ҳофизаи тарҷумаҳо самарабахш намебошад. Агар бисёр\n" +"тарҷума карда, ҳофизаи тарҷумаҳоро (TM) зиёд кунед, дар таниҷа пешниҳодҳои " +"мувофиқтарро қабул мекунед." + +msgid "Stored translations:" +msgstr "Тарҷумаҳои захрашуда:" + +msgid "Database size on disk:" +msgstr "Андозаи пойгоҳи иттилоотӣ дар диск:" + +msgid "Select translation files to import" +msgstr "Интихоби файлҳо барои тарҷума" + +msgid "Translation Memory" +msgstr "Ҳофизаи тарҷума" + +msgid "Importing translations..." +msgstr "Воридкунии тарҷумаҳо" + +msgid "Finalizing..." +msgstr "Омодасозӣ..." + +msgid "Reset translation memory" +msgstr "Дубора танзим кардани ҳофизаи тарҷумаҳо" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Шумо мутмаин ҳастед, ки мехоҳед ҳофизаи тарҷумаро дубора танзим кунед?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Поксозии тарҷумаҳо аз ҳофизаи тарҷумаҳо ҳамаи тарҷумаҳоро бебозгашт нест " +"мекунад. Ин амал ботил сохта намешавад." + +msgid "Cancel" +msgstr "Бекор кардан" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Василаи барориши манбаи рамз барои ёфтани сатрҳои тарҷумашаванда ва " +"баровардани онҳо барои тарҷума истифода мешавад." + +msgid "New" +msgstr "Нав" + +msgid "Edit" +msgstr "Таҳрир" + +msgid "Delete extractor" +msgstr "Нест кардани василаи барориш" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Шумо мутмаин ҳастед, ки мехоҳед василаи барориши “%s”-ро нест кунед?" + +msgid "Extractors" +msgstr "Василаи барориш" + +msgid "Accounts" +msgstr "Ҳисобҳо" + +msgid "Automatically check for updates" +msgstr "Санҷиши худкори навсозиҳо" + +msgid "Include beta versions" +msgstr "Иловаи версияҳои бета" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Версияҳои бета хусусиятҳои нав ва такмилҳоро дар бар мегиранд, вале " +"метавонанд каме ноустувор бошанд." + +msgid "Updates" +msgstr "Навсозиҳо" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Танзимоти мазкур ба форматгузории дохирии файлҳои PO таъсир мерасонад. Агар " +"шумо талаботи махсус дошта бошед, масалан ба сабаби идоракунии версия, " +"онҳоро мос кунед." + +msgid "Line endings:" +msgstr "Анҷоми сатрҳо:" + +msgid "Unix (recommended)" +msgstr "Unix (тавсия мешавад)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Гузарондан:" + +msgid "Preserve formatting of existing files" +msgstr "Истифодаи қолаббандӣ аз файлҳои мавҷудбуда" + +msgid "Advanced" +msgstr "Иловагӣ" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Хусусиятҳои %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Ҷузвдонҳоро ба ин ҷо кашида гузоред\n" +"\n" +"ё тугмаи \"+\" -ро зер кунед" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Ҷузвдонҳоро ба ин ҷо кашида гузоред\n" +"\n" +"ё тугмаи \"+\" -ро зер кунед" + +msgid "Add Folders..." +msgstr "Илова кардани ҷузвдонҳо..." + +msgid "Add folders..." +msgstr "Илова кардани ҷузвдонҳо..." + +msgid "Add Files..." +msgstr "Илова кардани файлҳо..." + +msgid "Add files..." +msgstr "Илова кардани файлҳо..." + +msgid "Add Wildcard..." +msgstr "Илова кардани рамзи махсус..." + +msgid "Add wildcard..." +msgstr "Илова кардани рамзи махсус..." + +msgid "Paths" +msgstr "Масирҳо" + +msgid "Excluded paths" +msgstr "Масирҳои истисношуда" + +msgid "Additional keywords" +msgstr "Калидвожаҳои иловагӣ" + +msgid "Name of the project the translation is for" +msgstr "Номи лоиҳаи тарҷума барои" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "масалан, nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (тавсия мешавад)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Лутфан, аввал файлро захира кунед. То он гоҳ ин қисмат таҳрир карда " +"намешавад." + +msgid "Comment:" +msgstr "Шарҳ:" + +msgid "OK" +msgstr "Хуб" + +msgid "C&lear" +msgstr "&Тоза кардан" + +msgid "Clear the comment" +msgstr "Тоза кардани шарҳ" + +msgid "Create new translations project" +msgstr "Эҷод кардани лоиҳаи тарҷумаи нав" + +msgid "Edit the project" +msgstr "Таҳрири лоиҳа" + +msgid "Delete the project" +msgstr "Нест кардани лоиҳа" + +msgid "Update all" +msgstr "Ҷадидсозии ҳама" + +msgid "Update all catalogs in the project" +msgstr "Ҳамаи файлҳоро дар ин лоиҳа навсозӣ кунед" + +msgid "Edit project" +msgstr "Таҳрир кардани лоиҳа" + +msgid "Project name:" +msgstr "Номи лоиҳа:" + +msgid "Browse" +msgstr "Тамошо кардан" + +msgid "Add directory to the list" +msgstr "Илова кардани директория ба рӯйхат" + +msgid "&New..." +msgstr "&Лоиҳаи нав..." + +msgid "New from &POT/PO file..." +msgstr "Файли нав аз &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Файли нав аз &POT/PO..." + +msgid "&Open..." +msgstr "&Кушодан..." + +msgid "Open Recent" +msgstr "Кушодани файлҳои охирин" + +msgid "Open from Crowdin..." +msgstr "Кушодан аз Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Кушодан аз Crowdin..." + +msgid "&Close" +msgstr "&Пӯшидан" + +msgid "&Save" +msgstr "&Захира кардан" + +msgid "Save &as..." +msgstr "&Захира кардан ҳамчун..." + +msgid "Save &As..." +msgstr "&Захира кардан ҳамчун..." + +msgid "Compile to MO..." +msgstr "Таҳия кардани файли MO..." + +msgid "E&xport as HTML..." +msgstr "&Захира кардан ҳамчун HTML..." + +msgid "Check for updates..." +msgstr "Санҷидани навсозиҳо..." + +msgid "&Preferences..." +msgstr "&Танзимот..." + +msgid "Catalogs &manager" +msgstr "Мудири &файлҳои тарҷума" + +msgid "Catalogs &Manager" +msgstr "Мудири &файлҳои тарҷума" + +msgid "E&xit" +msgstr "&Баромад" + +msgid "Quit" +msgstr "Баромад" + +msgid "Copy from singular" +msgstr "Нусха бардоштан аз шумораи танҳо" + +msgid "Copy From Singular" +msgstr "Нусха бардоштан аз Шумораи танҳо" + +msgid "Translation is &fuzzy" +msgstr "&Тарҷумаи зерин барои ман душворфаҳм аст" + +msgid "Translation Is &Fuzzy" +msgstr "&Тарҷумаи зерин барои ман душворфаҳм аст" + +msgid "Edit &comment" +msgstr "&Таҳрир кардани шарҳ" + +msgid "Edit &Comment" +msgstr "&Таҳрир кардани шарҳ" + +msgid "Suggestions" +msgstr "Пешниҳодҳо" + +msgid "&Show references" +msgstr "&Намоиши бартариҳо" + +msgid "&Show References" +msgstr "&Намоиши бартариҳо" + +msgid "&Find..." +msgstr "&Ҷустуҷӯ..." + +msgid "Replace..." +msgstr "Ҷойгузин кардан..." + +msgid "Find next" +msgstr "Ҷустуҷӯи навбатӣ" + +msgid "Find previous" +msgstr "Ҷустуҷӯи қаблӣ" + +msgid "Find and Replace..." +msgstr "Ёфтан ва ҷойгузин кардан..." + +msgid "Find Next" +msgstr "Ҷустуҷӯи навбатӣ" + +msgid "Find Previous" +msgstr "Ҷустуҷӯи қаблӣ" + +msgid "&Preferences" +msgstr "&Танзими барнома" + +msgid "Display entry &IDs" +msgstr "Намоиши рақамҳои &сартҳо" + +msgid "Display Entry &IDs" +msgstr "Намоиши рақамҳои &сартҳо" + +msgid "Sort by &file order" +msgstr "Аз рӯи &тартиби файлҳо" + +msgid "Sort by &File Order" +msgstr "Аз рӯи &тартиби файлҳо" + +msgid "Sort by &source" +msgstr "Аз рӯи &сатрҳои аслӣ" + +msgid "Sort by &Source" +msgstr "Аз рӯи &сатрҳои аслӣ" + +msgid "Sort by &translation" +msgstr "Аз рӯи &тарҷумаҳо" + +msgid "Sort by &Translation" +msgstr "Аз рӯи &тарҷумаҳо" + +msgid "&Group by context" +msgstr "&Гурӯҳбандӣ аз рӯи қарина" + +msgid "&Group By Context" +msgstr "&Гурӯҳбандӣ аз рӯи қарина" + +msgid "Entries with errors first" +msgstr "Пеш аз ҳама сабтҳоро бо хатоҳо намоиш диҳед" + +msgid "Entries with Errors First" +msgstr "Пеш аз ҳама сабтҳоро бо хатоҳо намоиш диҳед" + +msgid "&Untranslated entries first" +msgstr "&Аввал сатрҳои тарҷуманашуда" + +msgid "&Untranslated Entries First" +msgstr "&Аввал сатрҳои тарҷуманашуда" + +msgid "Show sidebar" +msgstr "Намоиш додани навори ҷонибӣ" + +msgid "Show status bar" +msgstr "Намоиш додани навори вазъият" + +msgid "C&atalog" +msgstr "&Файли тарҷума" + +msgid "&Update from sources" +msgstr "&Навсозӣ кардан аз сатрҳои аслӣ" + +msgid "&Update from Sources" +msgstr "&Навсозӣ кардан аз сатрҳои аслӣ" + +msgid "Update from &POT file..." +msgstr "Навсозӣ кардан аз файли &POT..." + +msgid "Update from &POT File..." +msgstr "Навсозӣ кардан аз файли &POT..." + +msgid "Sync with Crowdin" +msgstr "Ҳамоҳанг кардан бо Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Ворид кардани тарҷумаҳои намерасидагӣ аз &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Ворид кардани тарҷумаҳои намерасидагӣ аз &TM..." + +msgid "&Purge deleted translations" +msgstr "&Пок кардани тарҷумаҳои нестшуда" + +msgid "&Purge Deleted Translations" +msgstr "&Пок кардани тарҷумаҳои нестшуда" + +msgid "&Validate translations" +msgstr "Санҷиши тарҷума" + +msgid "&Validate Translations" +msgstr "&Санҷиши тарҷума" + +msgid "&Properties..." +msgstr "&Хусусиятҳо..." + +msgid "&Done and next" +msgstr "&Татбиқ кардан ва ба сатри дигар гузарондан" + +msgid "&Done and Next" +msgstr "&Татбиқ кардан ва ба сатри дигар гузарондан" + +msgid "&Previous translation" +msgstr "&Тарҷумаи қаблӣ" + +msgid "&Previous Translation" +msgstr "&Тарҷумаи қаблӣ" + +msgid "&Next translation" +msgstr "&Тарҷумаи навбатӣ" + +msgid "&Next Translation" +msgstr "&Тарҷумаи навбатӣ" + +msgid "P&revious unfinished" +msgstr "&Тарҷуманашудаи пешина" + +msgid "P&revious Unfinished" +msgstr "&Тарҷуманашудаи пешина" + +msgid "Ne&xt unfinished" +msgstr "&Тарҷуманашудаи навбатӣ" + +msgid "Ne&xt Unfinished" +msgstr "&Тарҷуманашудаи навбатӣ" + +msgid "Previous plural form" +msgstr "Шумораи ҷамъи қаблӣ" + +msgid "Previous Plural Form" +msgstr "Шумораи ҷамъи қаблӣ" + +msgid "Next plural form" +msgstr "Шумораи ҷамъи навбатӣ" + +msgid "Next Plural Form" +msgstr "Шумораи ҷамъи навбатӣ" + +msgid "&Online help" +msgstr "&Кумаки онлайн" + +msgid "&Online Help" +msgstr "&Кумаки онлайн" + +msgid "&GNU gettext manual" +msgstr "&Кумаки GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Кумаки GNU gettext" + +msgid "&About Poedit" +msgstr "&Дар бораи Poedit" + +msgid "&About" +msgstr "&Дар бораи PoEdit" + +msgid "Extractor setup" +msgstr "Танзими василаи барориш" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" +"Рӯйхати дарозкунии муддат бо нуқта-вергулҳо ҷудо карда мешаванд (мисол *.cpp;" +"*.h):" + +msgid "Invocation:" +msgstr "Дархост:" + +msgid "Command to extract translations:" +msgstr "Фармон барои баровардани тарҷумаҳо:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ин фармон барои оғози василаи барориш истифода мешавад.\n" +"%o бо номи файли барориш, %K бо рӯйхати калимаҳои\n" +"калидӣ, %F бо рӯйхати файлҳои вуруд,\n" +"%C бо байрақи маҷмӯаи ҳарфҳо (поёнтар бинед) васеъ карда мешавад." + +msgid "An item in keywords list:" +msgstr "Илова кардани объект ба рӯйхати калидвожаҳо:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Мазкур ба сатри фармонӣ як бор барои ҳар як\n" +"калимаи калидӣ замима карда мешавад.\n" +"%k ба калимаи калидӣ васеъ мекунад." + +msgid "An item in input files list:" +msgstr "Объект дар рӯйхати файлҳои вурудӣ:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Мазкур ба сатри фармонӣ як бор барои ҳар як\n" +"файли вурудӣ замима карда мешавад.\n" +"%f ба номи файл васеъ мекунад." + +msgid "Source code charset:" +msgstr "Рамзгузории сатрҳои аслӣ:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Мазкур ба сатри фармонӣ замима карда мешавад.\n" +"бо шарте, ки агар рамзгузории сатри аслӣ дода шуда бошад.\n" +"%c бо воҳиди рамзгузорӣ иваз карда мешавад." + +msgid "Catalog properties" +msgstr "Хусусиятҳои файли тарҷума" + +msgid "Project name and version:" +msgstr "Номи лоиҳа ва версия:" + +msgid "Plural Forms:" +msgstr "Шаклҳои ҷамъ:" + +msgid "Use default rules for this language" +msgstr "Истифодаи қоидаҳои пешфарз барои ин забон" + +msgid "Use custom expression" +msgstr "Истифодаи ибораҳои шахсӣ" + +msgid "Learn about plural forms" +msgstr "Маълумоти бештар дар бораи шаклҳои ҷамъ" + +msgid "Charset:" +msgstr "Рамзгузорӣ:" + +msgid "Team:" +msgstr "Гурӯҳ:" + +msgid "Team's email address:" +msgstr "Почтаи электронии гурӯҳи корӣ:" + +msgid "Translation properties" +msgstr "Хусусиятҳои тарҷума" + +msgid "Sources paths" +msgstr "Масирҳои сатрҳои аслӣ" + +msgid "Extract text from source files in the following directories:" +msgstr "Баровардани матн аз файлҳои манбаъ дар ҷузвдонҳои зерин:" + +msgid "Base path:" +msgstr "Масири асосӣ:" + +msgid "Sources keywords" +msgstr "Луғати сатрҳои аслӣ" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Истифодаи калидвожаҳои зерин (номҳои супориш) барои шинохтани\n" +"сатрҳои тарҷумашаванда дар файлҳои манбаъ:" + +msgid "Learn about gettext keywords" +msgstr "Маълумоти бештар дар бораи калидвожаҳои gettext" + +msgid "Update summary" +msgstr "Хулосаи навсозӣ" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Сатрҳои зерин дар сатрҳои аслӣ дарёфт шудаанд, аммо дар файл вуҷуд " +"надоранд.\n" +"Poedit онҳоро ҳоло ба файл илова мекунад." + +msgid "New strings" +msgstr "Сатрҳои нав" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Сатрҳои зерин дигар дар сатрҳои асосӣ мавҷуд нестанд.\n" +"Poedit онҳоро ҳоло аз файл нест мекунад." + +msgid "Obsolete strings" +msgstr "Сатри кӯҳнашуда" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 нав, 0 кӯҳнашуда)" + +msgid "Open" +msgstr "Кушодан" + +msgid "Save catalog" +msgstr "Захира кардани файл" + +msgid "Validate" +msgstr "Санҷиш" + +msgid "Check for errors in the translation" +msgstr "Санҷиши хатогиҳо дар тарҷума" + +msgid "Update" +msgstr "Навсозӣ" + +msgid "Update catalog - synchronize it with sources" +msgstr "Файлро навсозӣ кунед - бо файли аслӣ ҳамоҳанг созед" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Ин нишона чӯкида меистад, агар тарҷумаи ҷориӣ душворфаҳм аст" + +msgid "Show or hide the sidebar" +msgstr "Намоиш додан ё пинҳон кардани навори ҷонибӣ" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Матни манбаи қаблӣ:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Матни манбаи куҳна (пеш аз тағйир ҳангоми навсозӣ), ки ба тарҷумаҳои " +"душворфаҳм тааллуқ дорад." + +msgid "Notes for translators:" +msgstr "Қайдҳои тарҷумон:" + +msgid "Add comment" +msgstr "Илова кардани шарҳ" + +msgid "Add Comment" +msgstr "Илова кардани шарҳ" + +msgid "Translation suggestions:" +msgstr "Пешниҳодҳои тарҷума:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ягон мутобиқат ёфт нашуд" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ягон мутобиқат ёфт нашуд" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ин тарҷума аз ҳофизаи тарҷумаҳои Poedit ворид карда шуд." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Нав: %i, куҳна: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Воридкунии тарҷумаҳо: %d" + +msgid "Poedit Update" +msgstr "Такмилдиҳии Poedit" + +msgid "Preparing migration..." +msgstr "Омодасозии интиқол..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Вазъияти хуруҷи интиқол: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit бояд ҳофизаи тарҷумаҳои шуморо ба формати нав табдил кунад." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ин амал бояд пеш аз оғози Poedit иҷро шавад. Агар шумо бисёр тарҷумаро дошта " +"бошед, ин метавонад якчанд дақиқаро гирад, вале асосан ин амал бояд тезтар " +"иҷро шавад." + +msgid "Proceed" +msgstr "Амал кардан" + +msgid "Translation memory migration failed." +msgstr "Интиқоли ҳофизаи тарҷумаҳо қатъ шудааст." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Иттилооти ҳофизаи тарҷумаҳо интиқол дода нашуд. Хато ба вуҷуд омад:\n" +"\n" +"%s\n" +"Лутфан, ба суроғаи help@poedit.net хабар рсонед ва мо он хаторо ҳал мекунем." + +msgid "Cannot create temporary directory." +msgstr "Директорияи муваққатӣ эҷод карда нашуд." + +msgid "Welcome to Poedit" +msgstr "Хуш омадед ба Poedit" + +msgid "Edit a translation" +msgstr "Таҳрир кардани тарҷума" + +msgid "Open an existing PO file and edit the translation." +msgstr "Файли PO-и мавҷудбударо кушоед ва тарҷумаро таҳрир намоед." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Файли PO ё қолиби POT-и мавҷудбударо истифода баред ва тарҷумаи навро дар " +"асоси он таҳия кунед." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Якҷоя тарҷума кардан дар Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Файлеро аз лоиҳаи Crowdin боргирӣ кунед, тарҷума намоед ва ҳамоҳанг созед." + +msgid "What is Crowdin?" +msgstr "Crowdin чист?" + +msgid "There are no translations. That’s unusual." +msgstr "Ягон тарҷума вуҷуд надорад. Ин ғайриоддӣ аст." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Сатрҳое, ки метавонед тарҷума кунед аз системаи Gettext ба таври дастӣ илова " +"намешаванд,\n" +"онҳо аз рамзи манбаъ ба таври худкор бароварда мешаванд. Ин тавр онҳо дақиқ " +"ва навшуда мебошанд.\n" +"Асосан тарҷумон қолиби файлҳои PO (POTs)-ро истифода мебарад, ки аз ҷониби " +"барномасозон таҳия мешаванд." + +msgid "(Learn more about GNU gettext)" +msgstr "(Маълумоти муфассал дар бораи GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Осонтар аст, ки агар шумо ин файлро аз файли POT навсозӣ кунед:" + +msgid "Update from POT" +msgstr "Навсозӣ кардан аз POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Сатрҳоро барои тарҷума аз қолиби POT-и мавҷудбуда истифода баред." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Шумо инчунин метавонед сатрҳоро барои тарҷума аз рамзи манбъ бевосита " +"бароред:" + +msgid "Extract from sources" +msgstr "Баровардан аз манбаҳо" + +msgid "Configure source code extraction in Properties." +msgstr "Баровардани рамзи манбаро дар Танзимот танзим кунед." + +msgid "Sync" +msgstr "Ҳамоҳангсозӣ" + +msgid "Synchronize the translation with Crowdin" +msgstr "Ҳамоҳангсозии тарҷума бо Crowdin" diff --git a/locales/th.mo b/locales/th.mo new file mode 100644 index 0000000000000000000000000000000000000000..0725df77951b7e5700189972f6f87fce6baf5061 GIT binary patch literal 18189 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 n5m8D%\n" +"Language-Team: Thai\n" +"Language: th_TH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: th\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "" + +msgid "Don't Show Again" +msgstr "" + +msgid "Don't show again" +msgstr "ไม่ต้องแสดงอีกครั้ง" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "หัวข้อที่ผิดปกติ: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "แฟ้มรายการที่เสียหาย: รูปแบบเอกพจน์ถูกใชเรวมกับรูปแบบพหูพจน์" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "แฟ้มรายการที่เสียหาย: รูปแบบพหูพจน์สำหรับ msgstr ถูกใช้โดยไม่มี msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "ผิดผลาดระหว่างมีการโหลดรายการ ข้อมูลบางอันอาจจะหายหรือไม่สามารถใช้การได้" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "ไม่สามารถโหลดแฟ้ม %s อาจจะเป็นเพราะว่าแฟ้มเสียหาย" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"แฟ้ม '%s' เป็นแบบอ่านอย่างเดียวและไม่สามารถบันทึกได้\n" +"กรุณาบันทึกภายใต้ชื่ออื่น" + +#, c-format +msgid "Couldn't save file %s." +msgstr "" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "ข้อผิดผลาดในการบันทึกรายการ" + +msgid "PO Translation Files" +msgstr "ไฟล์แปลภาษา PO" + +msgid "POT Translation Templates" +msgstr "" + +msgid "All Translation Files" +msgstr "" + +msgid "Merging differences..." +msgstr "กำลังเมชรความแตกต่าง..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' ไม่ใช้แฟ้มภาษา POT ที่ถูกต้อง" + +msgid "(Use default language)" +msgstr "(ใช้ภาษาเริ่มต้น)" + +msgid "Select your preferred language" +msgstr "เลือกภาษาที่คุณต้องการ" + +msgid "Language selection" +msgstr "การเลือกภาษา" + +msgid "You must restart Poedit for this change to take effect." +msgstr "คุณต้องเริ่มต้น Poedit ใหม่เพื่อให้การเปลี่ยนแปลงมีผล" + +msgid "Downloading translations is disabled in this project." +msgstr "" + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "เข้าสู่ระบบ" + +msgid "Sign in" +msgstr "เข้าสู่ระบบ" + +msgid "Sign Out" +msgstr "ออกจากระบบ" + +msgid "Sign out" +msgstr "ออกจากระบบ" + +msgid "Waiting for authentication…" +msgstr "" + +msgid "Updating user information…" +msgstr "" + +msgid "Signed in as:" +msgstr "" + +msgid "Learn More About Crowdin" +msgstr "" + +msgid "Learn more about Crowdin" +msgstr "" + +msgid "Sign in to Crowdin" +msgstr "" + +msgid "Open Crowdin translation" +msgstr "" + +msgid "Project:" +msgstr "โครงการ:" + +msgid "Language:" +msgstr "ภาษา:" + +msgid "File:" +msgstr "ไฟล์:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "ไม่มีโครงการแปลที่ระบุไว้ในบัญชี Crowdin ของคุณ" + +msgid "This project has no files that can be translated in Poedit." +msgstr "โครงการนี้ไม่มีแฟ้มที่สามารถแปลใน Poedit ได้" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "ดาวน์โหลดการแปลล่าสุด..." + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "&คัดลอก" + +msgid "Learn more" +msgstr "เรียนรู้เพิ่มเติม" + +msgid "Learn More" +msgstr "เรียนรู้เพิ่มเติม" + +#, c-format +msgid "Failed command: %s" +msgstr "คำสั่งที่ล้มเหลว: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "ล้มเหลวที่จะรวมรายการ gettext" + +msgid "Scanning files..." +msgstr "กำลังสแกนไฟล์..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "กำลังพลาส %s แฟ้ม..." + +msgid "Failed to load extracted catalog." +msgstr "ล้มเหลวในการโหลดรายการที่ขยาย" + +msgid "&Help" +msgstr "&ช่วยเหลือ" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "เปิดแค็ตตาล็อก" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "แฟ้ม '%s' ไม่มีอยู่จริง" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "เกี่ยวกับ %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "เวอร์ชั่น %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit เป็นโปรแกรมแปลภาษาที่ง่ายต่อการใช้งาน" + +msgid "Catalogs Manager" +msgstr "ตัวจัดการแค็ตตาล็อก" + +msgid "Check for Updates..." +msgstr "ตรวจหาการอัพเดท..." + +msgid "&Edit" +msgstr "&แก้ไข" + +msgid "Undo" +msgstr "เลิกทำ" + +msgid "Redo" +msgstr "ทำซ้ำ" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "ลบ" + +msgid "Spelling and Grammar" +msgstr "" + +msgid "Show Spelling and Grammar" +msgstr "" + +msgid "Check Document Now" +msgstr "" + +msgid "Check Spelling While Typing" +msgstr "" + +msgid "Check Grammar With Spelling" +msgstr "" + +msgid "Correct Spelling Automatically" +msgstr "" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "" + +msgid "Transformations" +msgstr "" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "" + +msgid "Start Speaking" +msgstr "" + +msgid "Stop Speaking" +msgstr "" + +msgid "&View" +msgstr "&มุมมอง" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "หน้าต่าง" + +msgid "Minimize" +msgstr "" + +msgid "Zoom" +msgstr "ย่อ/ขยาย" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "" + +msgid "The file cannot be opened." +msgstr "" + +msgid "Invalid file" +msgstr "" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "" + +msgid "&Redo" +msgstr "" + +msgid "Cu&t" +msgstr "" + +msgid "Cut" +msgstr "" + +msgid "Copy" +msgstr "" + +msgid "&Paste" +msgstr "&วาง" + +msgid "Paste" +msgstr "" + +msgid "&Delete" +msgstr "&ลบ" + +msgid "Select &All" +msgstr "เลือก&ทั้งหมด" + +msgid "Select All" +msgstr "เลือกทั้งหมด" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "" + +msgid "You can't drop more than one file on Poedit window." +msgstr "คุณไม่สามารถวางแฟ้มมากกว่าหนึ่งแฟ้มในหน้าต่าง Poedit" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "" + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&ไฟล์" + +msgid "&Go" +msgstr "" + +msgid "Source text:" +msgstr "" + +msgid "Singular:" +msgstr "เอกพจน์:" + +msgid "Plural:" +msgstr "พหูพจน์:" + +msgid "Translation:" +msgstr "การแปล:" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "รายการถูกปรับเปลี่ยน คุณต้องการจะบันทึกการเปลี่ยนแปลงหรือไม่?" + +msgid "Save changes" +msgstr "บันทึกการเปลี่ยนแปลง" + +msgid "Your changes will be lost if you don't save them." +msgstr "" + +msgid "Save" +msgstr "บันทึก" + +msgid "Don't save" +msgstr "" + +msgid "Don't Save" +msgstr "" + +msgid "Save as..." +msgstr "บันทึกเป็น..." + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "ส่งออกเป็น..." + +msgid "HTML Files" +msgstr "" + +msgid "Open catalog template" +msgstr "เปิดรายการแม่แบบ" + +msgid "Updating catalog" +msgstr "" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "ข้อึความในรายการไม่ถูกต้อง" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" + +msgid "Validation results" +msgstr "ผลการตรวจสอบ" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" + +msgid "The translation is ready for use." +msgstr "" + +msgid "Context:" +msgstr "" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "" + +msgid "Set language" +msgstr "กำหนดภาษา" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "" + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "ผิดพลาดในการโหลดแฟ้มรายการข้อความ '%s'" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr "(ที่ถูกปรับเปลี่ยน)" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "ลบการแปลที่ลบถาวร" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Purge" +msgstr "" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" + +msgid "Copy from source text" +msgstr "" + +msgid "Copy from Source Text" +msgstr "" + +msgid "Clear translation" +msgstr "" + +msgid "Clear Translation" +msgstr "" + +msgid "Edit comment" +msgstr "แก้ไขคำแนะนำ" + +msgid "Edit Comment" +msgstr "" + +msgid "References:" +msgstr "การอ้างอิง:" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "ฟอร์ม %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "ศูนย์" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "สอง" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "&Bookmarks" +msgstr "&รายการโปรด" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "" + +msgid "Translation" +msgstr "การแปล" + +msgid "ID" +msgstr "" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "ภาษาที่ไม่รู้จัก" + +#, c-format +msgid "Translation — %s" +msgstr "การแปล — %s" + +msgid "Error:" +msgstr "" + +msgid "Source file" +msgstr "แฟ้มดั้งเดิม" + +msgid "Source file occurrence:" +msgstr "" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "ข้อผิดลากในการเปิดแฟ้ม %s!" + +msgid "Find" +msgstr "" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "ศัพท์อย่างเต็มเท่านั้น" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "ค้นหาในการแปล" + +msgid "Find in comments" +msgstr "ค้นหาในความคิดเห็น" + +msgid "Close" +msgstr "" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "&ถัดไป >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - ตัวจัดการรายการ" + +msgid "Catalog" +msgstr "รายการ" + +msgid "Total" +msgstr "ทั้งหมด" + +msgid "Untrans" +msgstr "ไม่ได้แปล" + +msgid "Fuzzy" +msgstr "Fuzzy" + +msgid "Bad Tokens" +msgstr "สัญลักษณ์เสียหาย" + +msgid "Last modified" +msgstr "ปรับเปลี่ยนล่าสุด" + +msgid "Select directory" +msgstr "เลือกไดเรกทอรี" + +msgid "Directories:" +msgstr "ที่ตั้ง:" + +msgid "" +msgstr "<ไม่มีชื่อ>" + +msgid "Do you want to delete the project?" +msgstr "คุณต้องการจะลบโครงการหรือไม่?" + +msgid "Confirmation" +msgstr "การยืนยัน" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"คุณต้องการจะปรับปรุงข้อมูลปรับปรุงทั้งหมดของ\n" +"รายการทั้งหมดในโครงการหรือไม่?" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "แสดงผลลัพธ์หลังจากการปรับปรุงรายการ" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "เปลี่ยนความละเอียดไปยังพื้นที่ของข้อความ" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"อย่าทำให้รายการของข้อมูลมีความละเอียด ถ้าเปิการใช้งาน คุณจะต้องใช้ลูกศรและ Ctr " +"เพื่อการเคลือนที่เท่านั้นแต่คุณก็สามารถพิมพ์ข้อความได้ทันที โดยไม่ต้องในการปุ่ม Tab " + +msgid "Appearance" +msgstr "" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "เปลี่ยนภาษา UI " + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Use translation memory" +msgstr "ใช้หน่วยความจำการแปล" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "ความจำของการแปล" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "ยกเลิก" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "สร้างใหม่" + +msgid "Edit" +msgstr "แก้ไข" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (แนะนำ)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "เส้นทาง" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "เช่น nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (แนะนำ)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "คำแนะนำ:" + +msgid "OK" +msgstr "ตกลง" + +msgid "C&lear" +msgstr "" + +msgid "Clear the comment" +msgstr "ลบคำแนะนำ" + +msgid "Create new translations project" +msgstr "สร้างโครงการแปลใหม่" + +msgid "Edit the project" +msgstr "แก้ไขโครงการ" + +msgid "Delete the project" +msgstr "ลบโครงการ" + +msgid "Update all" +msgstr "อัพเดททั้งหมด" + +msgid "Update all catalogs in the project" +msgstr "ปรับปรุงรายการทั้งหมดในโครงการ" + +msgid "Edit project" +msgstr "แก้ไขโครงการ" + +msgid "Project name:" +msgstr "ชื่อโครงการ:" + +msgid "Browse" +msgstr "เรียกดู" + +msgid "Add directory to the list" +msgstr "เพิ่มตำแหน่งไปยังรายการ" + +msgid "&New..." +msgstr "&สร้างใหม่..." + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&เปิด..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "&ปิด" + +msgid "&Save" +msgstr "&บันทึก" + +msgid "Save &as..." +msgstr "บันทึกเป็น..." + +msgid "Save &As..." +msgstr "บันทึก&เป็น..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&ตั้งค่า..." + +msgid "Catalogs &manager" +msgstr "ตัวจัดการ&แค็ตตาล็อก" + +msgid "Catalogs &Manager" +msgstr "ตัวจัดการ&แค็ตตาล็อก" + +msgid "E&xit" +msgstr "" + +msgid "Quit" +msgstr "ออก" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "การแปลไม่ชั&ดเจน" + +msgid "Translation Is &Fuzzy" +msgstr "" + +msgid "Edit &comment" +msgstr "แก้ไขคำแ&นะนำ" + +msgid "Edit &Comment" +msgstr "" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "แสดงการอ้า&งอิง" + +msgid "&Show References" +msgstr "" + +msgid "&Find..." +msgstr "&ค้นหา..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "" + +msgid "Find previous" +msgstr "" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "" + +msgid "Find Previous" +msgstr "" + +msgid "&Preferences" +msgstr "&ตั้งค่า" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "" + +msgid "Sort by &File Order" +msgstr "" + +msgid "Sort by &source" +msgstr "" + +msgid "Sort by &Source" +msgstr "" + +msgid "Sort by &translation" +msgstr "" + +msgid "Sort by &Translation" +msgstr "" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "" + +msgid "&Untranslated Entries First" +msgstr "" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "รา&ยการ" + +msgid "&Update from sources" +msgstr "ปรับปรุง&จากต้นฉบับ" + +msgid "&Update from Sources" +msgstr "" + +msgid "Update from &POT file..." +msgstr "ปรับปรุ&งจากแฟ้ม POT" + +msgid "Update from &POT File..." +msgstr "" + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&ลบการแปล" + +msgid "&Purge Deleted Translations" +msgstr "" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "" + +msgid "&Done and next" +msgstr "" + +msgid "&Done and Next" +msgstr "" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "" + +msgid "P&revious Unfinished" +msgstr "" + +msgid "Ne&xt unfinished" +msgstr "" + +msgid "Ne&xt Unfinished" +msgstr "" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "" + +msgid "&Online Help" +msgstr "" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "" + +msgid "&About" +msgstr "" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "รายการของส่วนขยายแยกโดยใช้อัฒภาค (ต.ย. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "การร้องขอ:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "รายการในรายการของศัพท์:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"นี้จะแนบแฟ้มไปยังคำสั่งหนึ่งครั้ง\n" +"ต่อศัพท์ที่ใช้แต่ละคำ %k จะขยายไปยังชื่อของศัพท์ที่ใช้" + +msgid "An item in input files list:" +msgstr "รายการในรายการของแฟ้ม:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"นี้จะแนบแฟ้มคำสั่งไปยังรายการหนึ่งครั้ง\n" +"สำหรับแฟ้มแต่ละแฟ้ม %f จะขยายไปยังชื่อของแฟ้ม" + +msgid "Source code charset:" +msgstr "รหัสอักขระดั้งเดิม:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"นี้จะแนบแฟ้มคำสั่งของรายการ\n" +"เมื่อรหัสชุดอักขระถูกมให้มาเท่านั้น %c จะขยายไปยังค่าของชุดอักขระ" + +msgid "Catalog properties" +msgstr "" + +msgid "Project name and version:" +msgstr "ชื่อและรุ่นของโครงการ:" + +msgid "Plural Forms:" +msgstr "แบบพหูพจน์:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "รูปแบบอักขระ:" + +msgid "Team:" +msgstr "ทีม:" + +msgid "Team's email address:" +msgstr "ที่อยู่อีเมลของทีมงาน:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "" + +msgid "Extract text from source files in the following directories:" +msgstr "" + +msgid "Base path:" +msgstr "ส่วนฐาน:" + +msgid "Sources keywords" +msgstr "" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "ปรับปรุงผลลัพธ์" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"ข้อมูลพบในรายการดั้งเดิมแต่ไปได้อยู่ในรายการ\n" +"Poedit จะเพิ่มแฟ้มไปยังรายการเดี๋ยวนี้" + +msgid "New strings" +msgstr "สตริงใหม่" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"ข้อมูลที่ไม่ได้อยู่ในรายการดั้งเดิมนี้อีกต่อไป\n" +"Poedit จะเอาแฟ้มออกจากรายการเดี๋ยวนี้" + +msgid "Obsolete strings" +msgstr "ข้อมูลโดยแท้" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 ใหม่ 0 ล้าสมัย)" + +msgid "Open" +msgstr "เปิด" + +msgid "Save catalog" +msgstr "บันทึกแค็ตตาล็อก" + +msgid "Validate" +msgstr "ตรวจสอบ" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "อัพเดท" + +msgid "Update catalog - synchronize it with sources" +msgstr "ปรับปรุงรายการ - เชื่อมต่อกับแฟ้มดั้งเดิม" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "เลือกถ้าข้อมูลที่เลือกเป็นการแปลที่ไมชัดเจน" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "ดำเนินการต่อ" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "" + +msgid "Welcome to Poedit" +msgstr "ยินดีต้อนรับสู่ Poedit" + +msgid "Edit a translation" +msgstr "" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "แตกไฟล์จากแหล่งข้อมูล" + +msgid "Configure source code extraction in Properties." +msgstr "กำหนดค่าการแตกไฟล์โค้ดต้นฉบับในคุณสมบัติ" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/tr.mo b/locales/tr.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb1753b1b7bc9836ef7429f9bc4cdf661bcf1c22 GIT binary patch literal 46223 zcmb`Q37i~dng5GZ7%sWNvp8mwKxPt94hIBs6O)iYCO|;Np6Q;MW_r5EK9bC!h!=-= zfG8fI@mN3(1$4y)=1F5cIoyNW2fAPehy{J+2FectNoNy4uC`S&L^zk1(# z>#g^A?)RyN*(BlKf(BlI#OM0(OB%9B?ne4s;DO-x9DfDs{y%}LfA@I-_XSn%5XT;HU(%;KE&=tN^FX!# zV$UB047vus@&Y&>922l0i2x|N`gS&&D z24{f}fTF{PLDlzXQ1o)-i=ZX&Sny=<<=_j!8^Af>r$Ckaq2n*WSCD=JJP17Z#YwUN zEP~6yTS3k1Z^74sPl0Mz>!gr>x#OF`qsf0O_#E(VP|x`?D0+GbgtU?$f_l!rH10s~ zg^nkH&nCSH)b#;S&l&Ob1gLp`qvK}q5YnFoj{*P5)4u~Xo_jM0s{aVb;~Y;1MGxnI z8jk@m1uqBnyv?B6@i9<*ct5EAJP1OH$-|)L?VwYWq#Jx8sQZ?HnxAt(wSO&mC^+ot z*LeCJpy=)v5YkJwf`@@mI_~?DkUj>~y!C@>$3@`v;3%l}{~pxyM4aO1JwVm7H>mka zLG@!6sP>!+s@*F*eWBwRxP<)6LCxP*@J#UMpyqGZX`!AIL8TXY`W#T>ehH{{yb)Xh zUJa_Ae*u~5^z=zk{d@pa z{a*kz-w%SKv+sh#;9f5c{84kf25gc4QE)bRyCs_!>}r{6X*t@b5v5=a0cP;BIGy zehq*cuZzHL@Dj&2gR1XNQ1yHb)ObD#s{C#Xf}Gk5RQ^HW!C(q%9A6Bo{YxA#0{13e z166(!R6nnBd>5$xf7tOJQ1kG2pvM0}Pk#+WEhZ0vnvd@|{u0!<`~lQ`&srGd;Q^qY z^ITBlHyeBbcq+IncmeoF@FMVb@WMsmzFilGdEFm;4*9b|@!KLW1=oXm&J?Kn-vCPf zz60DHya_xS{16C~Tg{&&GEz#oE|w^zO_%*Q0Cal9N9UA_lYyY2!{1pfxq zJU$9)o}UI)ZhwT1=<*oH6TxSZUI1!5mV+v{+OY_#{G_L^1~r}^0Ivf-18UyRUK#Fx zIjH9idU_LBC4D)_R3^U$_XJ!sCu6O_XGD^9q8h@p!$C-sBu0H+#Os3>b{qG z`aEzS(iecbf5@-D+VdwJ-wbwf{d!Px?PhQ`csHo$dX= z$3eAc3fv2Pz30CL)cCyz)cyB@>faYY_2*we)%R<^{(JB!(p~3;ahwaPz88D?rQkuN zmw5h#pvJY}=^D5<=}n;e^9E4$-vFw=AM*5Fpy=>^Q0@8}C_4C|=RfZGd#(-nhdCY( zUP-yLK+XGupz3`XJRE$?(|Zntb{+)k`Q4z}b0VnrE&?@P=YlK13&BIczXJCM?*~=x zA3XnCp8u%l{~pwH_ga@EZwC(nMSmX!4+K93ihdpd4*`D)N`5{K9uFRRevlsvKu9}T z44w+!03Hf{6%^e)465C~0KW+S7x-Rq%LSqQx(mZNydC^G`L~0Jp5*%V_$=V}!6C5k zBKiux6V$l<3{?J~K~z>UbaCj%EuiNA#V-$X;Cyf{>22Uj@Nw`};F+(0cfk*VJR<3N zCB7SY1xS(PF|Z$8aS6N)UI|_gp7^SukG6u6t4Sf;cPdDcO!G2Y#4NJP-UTsQGxr@kvnQxJxmN|KZ?4r00UlKNCC_Tn8QoPJu^&*Mll| z2PnGv9C$7GWpFp}{8FIXi@@DUSHb6l4KM|-2X+4^LCK+Q;I81;K+)Sjf#UaXgGYl8 zgBssGhQsqubX)-wSN6(5R)po3)DFL3KYNZJreqPjN?l{U0)3z z16DvtDY*_*|9=jO&;JCf{m&W=?R*ZX{&j<*>qVfRzs_+O+>`W1@LAyHpyuI9a4+zk z;Mw3!;ETYYftvRt%0W)70Z$-(5y;dhZv|fiJ_c%h$1V*x0c!kPo}L6XZkK~8cqgcS zd==aS{3)n*KH~Ym2fw=ueHaV(6^RJ+$YUJ9yxuLn;A-{SZ=@Nm+RKfj(2mlR?qVO0WmK5PUZH zI`CNVI#B)jG${K1vgiK{R6q8v2YNolaST*Dz6h$nU-9&JK$ZVj@F4J4pyvP2p!#ue zBV0cYRQe=P@web{q>pTd@{7UKNUwIh z7S#0z!TI3hpq_tBE0pgCA=P9FcnJ7O@I3HAa2@!Z4S}8}z*|Uf1l9lNZw%N2ir(gd zDR?p{`EvodKR5+yUatWcf!Bk2&O?sBbo?`TF!_gU3iB`uL9N2>p;=hd%?rO+dcgSPk#eU$^Rv&{_JyE;Nw$3wevj3QBcpl z92CFY4Bijk1*-kS2s6<`1(f`HHK=iEdHS88#`#82{kjv}8~hBIf?sfa7(9pcZm$h- zlk>n;r0byO`SYOq^CeGz&(l8zd&&PDsQQn-9GM07fhl+m_#*HQP;~qw@Oj`Ppz7W8 zbzyuCaGV8-F3$ut{^xtT4C?t;I9?B`zK?*a=i{Kp<33R1v;`Ese-(sOlc&HJfYmDk zz72dc>AS$wz!P5|+EoQr?pp9U;2ogq-3Dr2zXEE0z6okx9|6_QUEUDr`VdgZ9E?>8KO0*W3U1H~V^F$n6<;h^s81y%kG$CaSu+eMBepzdorUJZ(# zZU!|Ew}N|scY}KVr$O=W{h;dq3aD}U0jTo70yTb5f*Pm2t_=7>@JP}pgQ{l@xa%&& z8^H%iUvO36i-WEXbT%IpU7ZW+zN+KZ;GU#E0_wT9gKF>npz56lj{+YAj|LwBRnNZH zgmIVyimp!qcLx`N>c`oj+PfYU9ZZ0to2x<1&u!pr@VlVO?fRBb?nqGOP5>8!Ye3ca zZcpC|Y91d2H7`e98|Ld2u$%NsQ0=UPYUjJbBfw9B>c>~WJ-}ak{u7S-zBSmj-JtsM z{I`X1JKAv(sCh4fYH!`~8c_9r26DE`?Bsy#mj z_XGb8)VMzZehhpHd?EOucZB@UgBs7Rpy=WU;B&#>fa24At_$@n14YN{K$W}H@wJZE zf%}mEQBd=LH>iHx=lFF{bo~oZskAN${quv$9ZyeNoUkz$r z?sWVjsCIuB>;iuSs(-%+)!u{O9iI0>Q0?jgpAYtdnva#B`hOm%{#*j8o?&or@YSBa z3_OJNm5w)on#X%Q{kLEr>2HF%Z`T{0e?UY`G6&or`~;}yd=Aw3Y<2uLcp&Ltg3kv3 z0BZjCdr#&e{22TJ-LG|nXpq~FXpxXOIP~-4z@L=$#o_-2cJ9c|- zcy1S{aeE#pzC6j(1CHb1G2~zA={p>!LG}9wpvG;V_l0pe3{?79@NjUR=Pz?y2WtF> zK((U`iXJ9F_5W?)Vc-Wrwfobc+Vv$+_5A`o0!-c?@{a_Se=4Z_HK5TK$iL)D{yYaf z>LwpYQ1!0_HI74|o-+YzUf%>B3BD85xZeeeez$<4(`}%}_u!iY{mphf1JpbYfVywk zaRaD%xe~k*ybcsS9{z#w+!unHzZZdO|GA*#=B41N;0>V0^Q+(m;J3lkz{VJHSn( zzX7WMD?Wa4z^Ua3%NRPkskVU+#8i zkk5PG71}!&6kjX@H4ke+jmyR0zTh}0I-K(SYr(msKLBdpzYL0Aehlh4Pk^G2T|XYi zX&-QR(r*G)?=_&Fa})S{@S|V~egV{T9tQUVp8&hST|N=$WnWOwISlLuj{{Ev*MKho zuXMZx)I4kjHUB>b_Xi&bMd!QR9iDpx_$tyTgR{W*fX@a04%B_$2UGAd@Hp^*djj@@ znx_&dzW8TQ{e2Wv{l5d%?tShJbbA=6{4+td<9zT?umoxxE^~Y%sQz6G9sq6zmx6bL zXM_I$`q0f&Bjf&UDy z;6NNF50L(Mj^A*uF>P|h-@kD3dyeP%y)pmmq%Y>!!to%Pe+wQ)KW1|-`YUpXpTEoT z9InORDYz7o6|R6K4k z%H04W4w9d6EaF`9_;=vjz-NQ{y@W%0^fgNG`|kkB8GikG$M2Jm=rvz%IeCwJzKYj4 zp3n)u|KxbPU;9_bSAc)bQREonxSL}Whkggq&OUOWLW~TTs`(@7mviX%Yw)i) zj^?P7{uRd+9QtkKSVjH?95-`53J!4m6Xz2gZ{*Og!7-Qo^T5}G`duC%`}-F1zwFmO z4qoWzp9DY0aR3cl0)B`)-oo)x&R+_i!J*%;IsVGd!k_iPt(3|C?jwCN8Gi!b%(0yF zvpAl`aVN(y9QxhCu|LPDO5}cra?dMBpUpAG`Fp@O`So9r*6(}{?ce(t>8CjVC(lp8 zCpcDf^pO8<4*g!wu^V|$foG$<;mEpfr$$Pe+U&{GKoc|4IKTRCJE=Qfe zoa0EH@Vkw2SAqqO!zuGh(!b#RCXQ_!`u!Vu-{d%g; zjJ!93|HbhqFa1HVMcRJgi#S;e{sYJCm`~oLoG%QelA}ETxt{(r>7RMtUz2wu=c~Xk zftP@v02_Y&L*T{aUCN=~@fVy$IV`D7I*;1WnB9_SmjvCxqg>${uqaThk)+~ zU&*l>$0Ck@tmbr@(_$$bbJxdOz+vl=KlCeWV}c_&d(` zC;uJbR?-J@ehTMr;#|L1fyZ)O6_Uv>!8iE%vni|JfgGRb_!LL}cLRyNx%W^ncNXWn zaefh~-%a4(gwy0-IR6;u{|WZ{^*56q_wy+)x1RJG&KHB9=9uJ|&v8F__kj8>1;@gv z+5T@M{cXRtnf!vE-_7|Pjvsp2mEi8QZz0z&;QYlLujTwSj+b!U!J*%)IUeCy#__ zv&U=2@^HCSoWpsm+9+($X?HO#Rh#w6cv3Dk;^}0%vCv3|%auy0m=4!#<7soWls4;y zYNJwUmTT2?yfj{`Pxi$dxHsKcs+a!P_tfjPy4|c3dv3YWXqD29<>u&i4;!wvszrO2 z72;9PRH~d-%GFX@8&+dV>8$R?EbC6S)=Vq4LXj>F)#~-qP_v>AgyM}E<<*y++|WqZ z)Jww@s17k=JqreFt)@e|rdBGJNiD3^#>NZvF|IGF)L1F+SyY>tOnMfVDy1f=#Wh-3 zs20<6N}DL2C99TPVs$K~^-0gtGF|WMOL~@_vo0MeHJg-3R~4$QLZvfrJm%HNuh&`= z>B7l$QLU;QV$R?sUH6=`OO=VF=bX|;t6l9#&rlj1Xiv1~7M+HpHM@d*rhKEj{r|Vr^+}z?x5;MoAgRN$>R-JKcQMV5Jt)u_b zt*vUcFkUL2kr;cX-Hl|y&=6vz$w{#YUyP44Uv@4&GqTbJZ=0x0$qUMr;!vS(9H{hA z?!F@ZA8H~6(`L;YUMWKpDkZs-)#y!*HE!&zu`Fp?sH9`1$&IyoQLWohK(G{(1(iyk zvLQJtCAWDze>N5-8|ly}^8tm`hF~JKLA+b8PB6C!`wCT5({i&kPF|Kx9f-$9vp;_^ zK0IETn1EK)iev%QGFfY-jh3HmEL59%R^Tt|_QO})+}(KiiVvhbzFyFXoVoM+Aej;s z>`P^j+Uw^%B@@-Nfs86 z3$?Kl9J8r6QtC?<)_HQOd1HW<))BO1sSW8+p;@TZMy#3r z=|rVfXUgf=cskw~X*7-Yi>B4YnBHlm5p z3eL}Sp^C!L5RE}j(P3DePBYQauM|H+gB7r`M2DoRq|eBeVbGeIn(Rv#+59v|kwdi! zvkK^Ut;)=mt3#DmkwJ>JGpWobZ#XUL2}8k21tLopiOebjY1^SXV~-RljZf6-1vo3? zG42dSN}EbUEy^%0BlW^KQmVnFi82FRo+@!_BOMWW7c8H?baBlnITEmpAm^aQnOSja zbv+Za8fg#O7NMuMTHWNJYddqYB7r5>Eze{n+s6uZXuh8lk@I4>Rn(N8Q`_iS%jgG# zi?G4=Sv$dai-JS(m`pDi6{!zQPPDIyGlD`fVH0jpX32~y&EE`0^Gb6pC9xE4Y-A7C z#N+27nWE*!{rf)uApmaK1At{lNHMdh;z{vxE(u-C*=DMFj(q9T*QIpmX9w zwxnXt2#KXE?Flu=U| zX3ez#s;O1_+}cLEBKAv#aS3C3+nB5lVGP-5G>}?iRm4^^^=8rAX1#KJvZ&QVQ?cC_ z!`FjS5)C8>4MgfRc!|nw^#GA-@LD`W?7#?HhZnmkfceLLby2CI`DBC?(x5`ZAl@Ph~hS7(sLTHIY(0)wM#r_V5+&lfJBvF?tvVoSGKM zR0ub1R3#g$^2?AGMvulUk%YV(bF;?MbST5-7{jCJp#2O3(N5;VW+K zD3ZS>j$z`Z%1!l|Uh~KIB};lX;n(pO#l$#aybi2dDe+^zn*OA?c)_R)sVFKf)p4mq zDq01ZT(!cHsw|NwGi6BpFBvbCEB(n5L{B~ZO_#Qq(6#8#QdK$Th`9WZ#)l@Cs)I;C zLkG!15Awwsgjjx58WQbku5L4Lwa9eBln#<`qX@_EnT2m`#!c^1jGIO}TEg9~W0Orb zvd5V3z9eX<;6}v;*cI1Z!HL?@6$>-CEkY0Lakh{t*tO_+Y`k*C{CSO?)raa~c(B?U z&}TKsb2Dr45~0gRYiLxmsU-GfK-4%36^M++kt#@#*u_Aj^1ot1EQYEIig^9rd=~Qc zD9?sbRL}=2WHOByq?1saCU%qAO+_ZZJkw17oMLj}=M;boQmJj! zqoX}#g352Euh=K82_6SO$bN4mOBq52Rx}K|nUUpLXkq2Hsu<~*VK!$W>LKF7$wiyA ziyB{}@Kmqr3l>zq#CS=rd<<-OfsQ&{7Up=>qfen(Qeox}7i*=4L{({%=pb2|U4W)# zToz_d<%}|j;$p9vucmu~xha}~4~l(VYcPVOBg7SOI}s@;yUiYQH$#Q}dUVD9q^k&6 zY1{|emJ;T(41}J6Rhm^5O~<`du8V(Bsex5ij~=x1s^atTHp^2K4NtEYxfOwGaVR^> zJa8dJtj0eXl`#URA|YqcV{*!o^iD+~jpXby zHet8pY90XjTi#kO4C11ML=&g5kuHpB(+*G-VO3~Wwxr96WclJ``7oly6v^CZqnH4a z@~3ITnsdfX_LD@8f<`SP6VqsMWV-Uhhm%R<#uZbiE##rtl&5NVuvg2Ct|~TsFK$$G z(yT#yyqExbmbghvi1nc+W>sH0z)cnw%0I75;;|&PCJIo!xSKKx{1GFVco>>W4Js&E z7f-;&a4zl8%|lqm4#FBw4C%uNVIT#wrP!CQr)n!; z>WR^et+wFNcrZTFvW>;088n5WLcX#Og8hVl+meG%OGl~-hYi8k$#S`z(ym#BiV=wB zcYFomQ%sh-pUV)m;|k=;f(=v=LTwtR*iJ0SKF`vJ!%<2H(i|P9q!gRxt;;(=d3)7Fi_h(en~M|4}M zieEc|1F#bPqZ*Kf#Ggb)4CMq7HK{;C@Qu=V8P`VnVK$HJ8=9Cn?YO?tIsM71=(yn3 znEedL2CWSjh#`Xz2r9QPSydP-r7LR~Md>1uv8C4$z{}DV5hFJRvDt6BGFgSz6|G18 zh2GYLtSS>zF=>Vpg#b+G8Kti(SIgrHuow|Kxw)abBhurcRJ%r%r;dzR{HJrK-l)YaNEyfGpKMK)+U^Nqcu8)U|95wTz8w)LaH7hN!0Qd33p2r4CPb+hDV-f6|?NDToTm%MC% zO|%%(iyjHsS)nN7B!8SZLby2)Eu#-vdT@Z)pqvQZhmvVA=5^?+I2T7F7+U2K3(%N1 zX{At;n%npg?9_gJ1YotVaYTwqR#!_LVi!}wQU;p$W?j^xhQFG{vvPA%RAx=WG}2;O z78aFroDEc5{Y0Aftvg5CSdM0Os2?eTVy-tj1xmKiOEsE=hpu zY9J>cDG`iio>v-T+QYfL71_C>P$*7>Wlb@aJ!2OAcDJp={hqK;s~qK!Yt%FIu~;fg zkUKE6wSuG`Vo8aL1~2qsG$m_#;>ul)*V~yney6Oj+Af;6mu+Fxsv@o&1eIfead)Do*_MfwO`Q4V zjft9RlWcCwm<*V~eZ+yeLFDX?NU*_NYhi|8*rS|(P+V^xb*E*wl+!GbQkU`?b*X_E;{)r4F&b*INga^pd*YO4YN z87p@;Vx3eImd@Rm>_weRIV(sZ@l3`H1xL(=a6gh<^Cz`ZmYvHS z&iR>sY9ZmED7k7Y&e4!b!%%pjiCJ{dw~vAtuHkQfEJgtW-qt%9*#=rqT_EwxPAAz2F(+Ml#%fk_Kxq&|~CmiMxijy{WB%sbq=*sfx}1B*uHss- zizu9*+p4ijovc*|8b5-)K}fXKbplcCytTG?)J_kyrCB@Eq(9pY@;3&7(JqrC5i+%Z z1);~NLW5yFGoOhK>!Cw4l1%h7B-s3Id7*$vw9%qW4i60#8!ZQ27^9k_Y+jI|t`IY` z$x0To8e=!MO@>y!8PZ&Z4a6?>tn891j>SUHwJdG>x0r*_HMs%#a}>q9B+_!1W7$S~ zvqree!k4LZh_*B|%6B2qxI!I8ThKqDP z!p1u1i?TK>86Px7Haw=FCnRf|Y>dgL#IA9KkUOG1^QAw1oLh3chAgBhb`a@$xLE2Zt_(FjK>ZwyG zzDV7&S)*8#!`g4T`ip~^Q>e)RLxwkF@p20>RO%2A1}o zN?EhIZT2(@euEW_ku7aBT)EFVl+>t+^O#S)gGM>B4eZ_s%u zcr;X1Y)w?c0*ribSZL#DnKdkDLdJ-Qkd1@;E;4cnteTsOPTwH2SRJw_8f^`h#1qz* z)aNEx(<)}$Zo~E`b3KB;E2Fe?XMnA`$=|Y8?a){DWk)@ojcLO;SXwhe3g(8uUdQ^vrs#ldC|mLN=9-wLLtD9xM}L{Bh< z<}hWdOUPoS*U>4MILTEob6`&RbI0Pzl}Vp2iuzo-^1#}pU@QNdqY(RPoLCfh!0M627D zz+}{a?cI36muPgdnHWZvf^$&SmRji<)raP0t(7X5TVH4*-ZPKe+D2iKLLtWeoR>0x z$Vi;ET@m(dMNGvUnP5b)r1kR1Xj9tHo@~AIHGA8CsTE&Ik|q=96Wo`st>JGfRvx<= zmnpqFwmC^+T6dwl*mq?Q(0Z%OXw-&QtRzHBb?ul95;Qu@QO@qcJIaGf0@C=jwe4c3Xz zA7!Xx1leq(PJ2xA9#_+C>~>@YF+yQ;ohdIWkJ>A20Yw>m0Es5M>1EWou{0Paaae20 zj4!wHPd(PEvh5#1Yn?t9@zrP<}$=@DsypMf&*PJPooNDs@Rf zmS|CKVtIhp;yNfsv?{9k3wkr7ekUj@*Y38C%HySEpf)mMh95%^*GhcAHCJH)AveU_ zfa8}8$Yl@WO#~6r#J9~Mh-`}_lFb_yx1(XK>D4SO^Y?@rlaR@HASH>e%px~pa-J#` zyG%gkX31m1Xlx5Fvt-$Xn0ciL_OLfq#HDd_H$ildF|Z<|MK#~P4;L$Zow-07b5=Z2 z>y0^DQX?D+-DtvS^0)#TYI+glw1VX;;`VAO)lIzHMDPwX+e1{+UL{+;!IK*-kUj@`PyLKxZ^yZ z-Do@F7(wkAPK-7ackxznim5Wj&#TxP~1Q8D(~&e9lLFvoyB`L5t&VH-=W z^=1pb;nD52-ryb+-p^m)hL~=ISfeM^dYUe)$=lJ+2yuyaT9XnR>oJRT5w75v)}>~} zy^m*{G0PaM81_PXJKVvO6O~C9?TB4Bkr{1mLgS4duE4^)T*MNKWSoKu@Jc?{7VC$x zmHP9!=1bTsNFt|rF}_7sZ%GaWzK3zLsIVSJ_xKx?bvk<(1HkA{!WyxG{K-7NOl#%? zC0)#~leo#7&@Q79B&aw&aAk5nOTb1iexggk@@ypMhgA`g+yw>Oa%;`iA~oXIH+*S) zE+|zXahhFot(sgQwM(zu;yIHHUci$#iMb+un1mPR9C$#zFoFGU>-yoGv0NWk62dkG z7t=fJZhLFUju$8WOk;8CUq|vWuGZtJ!b=u6E z5c#qD!X72n(B7CGbvLiUGBRN)9@~i~DcEAN-|x*e`=G>Si5zRuy7{v$LVALB0 zA!@|KbJ$bM&S}3ZYh>V0*q#o8SCS7Q1#wN>1qUkIK1=|=tE;;aH-Ux*>YdlKCTtn8 zuS%Pw6gQTTh_0yzt~oQe(~T zLzDnaJ0~$Or5cR%#!F8;&Euypon1}ONKcq^S`x&n+&XJc|GatWy7QJN4K1`Jt?C#q zK()iRnby0oHPYxEsP!}8 z9RtvXgzL38Nnobl#R%j6^u+lmoZLJA)ZY0gq$j+j|HPAzpMT=~`4sHcT9~9sN4b-F zPkeED!u*EVMrzXw}Eq zZ5gaXsF!NGy1Fjx4I5V3M$yk^1AARYbHD|c9K9%2 zt;l9m(7qCTsxIYjSc-kspU$&4Yf6oIPM8z5W*2Y$7fV|=m$z+hmg~HK%6q-(?6JZm zin(0T&L{gAzzEm2ZPrWqel~p-b5t+O{i*2obc~k_3e~Om5*IFv$<7J|afK>`iP!?u z>P!AlH&GRGv!G`idL_6ED2J*IQ{VG=6e=%NQTxw*O zMs#WM^p>d}b`$Xh0lJzj>}gfBtDxg!0V_0N8(LGX&TQJ6WwVCAu&{M=g(jrSrtia3 z;1dFbn5i*lkA&=zklnMM&2?Mv9Z!1J^YVipxwh70jn+p5y#1+9V=m)1qbLzc&xSfH z4AZxj(^yqU=47mY!Srpaetn^5V(YySFq6xG#9_~!s?_w2Jvf15*fp^??X800T*ST?;yLj_~2@$LMPcD~P^br|{*_dpOGxq+ud z!t_;7o8B@WzD*$NEY&Lrk8)TED~dqjMbsLiguogfDVT(I^p%2AV@#hK$ZPG<$V^m# zz)~!U4G$C&z2OXSpYGBbndh@4U6>R>>*YP38YC50+Mg%bP?{{D?MDmt*hU!@U58Zc za|P2kR(nJ@;gbU^Duo8!v5qf9rgPug=`C~*qM5|LghLlXh6QnZ{CX8RV-S4AnMfR6F<=R$C}CqElxi-Mo($2P`?e)F{BZb-t9j{- z(I=1bS6Y;xZ%)j68E>oC(-ji$&}~*UR8&$$e%JICd)ulsiG?(yex+yDAM--}W3m32 zy<`mAsW6JMiRoV{kBj(uqoV>>iXoB#$SSgD+U^S9L0}h&N!97wFh(X)XwEbiT}4e* z3u&z=imyrsB+JUI(xC>jk&yGEnJP+Rh)$>P+q$`=FC)xoi#`#v<3b8h@2nsl!lsBWK=4DP~*hN50Thx{%qZH%V%0kdCDa zn-F;i(Y~k<$k>z{VPzCHI}~A4#xs+(WpNEsjp@V&@unjFk$`nx3aJj!OJmN$lt!vN z#_RtT29Hi40Lo%UVhhlL37HgzwJ2A)o-C|QwZ_shk99{e)6Y~OvRV};79|ruw7_12 z+{YEDeY_xPm>D+X(lI-&vI(I)bA^~-q9pVSLVHH7& zVx(b*A|lI;D_kmu5L=AT%P=86yNoAcv?f}iTxXqy*DcwnqGq<4aAW zMTSHs6=6xHplZflRudu)3t~kWP$}4;>$cuAq2Q!QqC5m2=_N8+(PBbn`xO|v$r_V{ z-O5V@@at^_CNOAhN#=0f;y4SZx5)lNX4QvH0ohJZ$kQ-r2%{5;e!bCYwktZ@)HZ@u zbR0SYsqj<<<=IyXC&fDQq?dIjT|a#vjvCExm=zWtH<`?Qi528@?eQOe?S1>zntDKMj~zO_+J zXWq2FFpFd%n)`G zP-tF-dCeqhmy0>U+I6?a`fak-MKvRf44|pJ;Y2tgBb)d@)50!RO%xjGj@8Cn#7Wvs zuoq{XCroy!AKO0ILI-5Y#gb{&ysej4Cet@&!fF<+fyS_k(y>}G6Y8O(42BsRn7^n~ zSY>s!FsV_Hc^eR^ih!*HCIYYM}=*hH?)vn!NTUHFLwt9BxM+TC?fa=q26>A zgu^(s^Rt3uodw5Z!I-}~s)W@+C4~89(&Rprh)7^RM8TQ5XM~6^Vq}fCMwv$xGU7sl z7H26}))*0k%L+p`CiI;GSG#ENT%YbJFgkNB8jDGmU5(Tt;zdIxF&!x<`VN!WaEz!c z720n64SQh#*>@yb5}JrM6UtJ)T8G9IqVusXxwtSg3R_c}eO1ET&PFSfwB7{KhCfDw z!U9LzqL8+yEoH>?Cg_vP};^aQdp8 z1tG@5dQ6)KvE|H<&7_of9fM`SIi>+-h7&7lBzRZDQ^Q{km@xl;+1@`Cy;!cpN#YoAZ>kZxvs)9k*;YqZEF0s zZ8Khb=j59e%*9e>B=koKZZ06Qj;RkK-7?gkh0u~*aTMDW28Jw|w3|1={DmYDgd2#A zeUs_LeW4y=bE3j{r$Vh!Rj9KW?YahMS*o*m+!Wx`XJla7N8VM`pq;mLwAAHO=A`Bo z1GcZa;NRi!NY7*qbD=X!bYY#!H8%!?I!iWKDe0|^Vbz=86Q>?aW2&!f<@A>3FuWJ1 z)T(8pAq!>@xER#SBVCQ~_$rgRQOT0A2FnL7q-<8VGtFdT5${q+TSlbck<(8z2f}ng zPw>-ra>rG{D$mS6JtN$(UHwtSXX9+uhr-0bs@G(}J@ zMzaF>ysTW1x_qgFAv1>;$CFSiK^&~ra=IR=O5n#r90TbZ zUG5-a`??}&W8;|D!Def=+>|C+Vjrv#@h-(ZRtKp+iPU0^}^eR*YNe%TCL5H^Ndu*_+X zb=OTpDKR2OGzoj1K%r?U^`%NN1$Hs8P=&-qv_shKu)wx@_LNqXOh{NYAp|ysY2a}Q z-1+I-6rkW$r{OYcWDF&rV}TUvq`xwuY^a?Dx89S_*6anLfoOy>^ofvspe)8?yk54W z@;F~XLM;;(NY-1(ITwX9W0M=ON_jFHfAsY_qB@XXD-9v&1sHhgY>a$1*4c{ZoY-)W zj0e9Kr_Ee(Qd{qBuiBA~GX#C3QCNWu4=-5bkRSMX=Q(-${E; z-$+y0IcaN(5Auo~_<%-;QOC)j@lg>Y9jg%PBb|}utZ+^>vd8?ZBTIvY ztQ<8Mt(}QSxjG^e3omLh4m;7j7rlVc8gCg7tu2r9t+2(GL14$*hgxwl#fZk}Oz>+V zFLp?ZQ^XdKYERIRX;hz1-J&n-LTirHOI5fS^`bfRHdv z7n;e97eJ=Dm3giq$ZwIYMrjPoZ8jepVYd@ws0bDx9td%27bv*c?3hGgOctg>c-+-KVnI_aJj1ut!}m;#Pb4Kp zGcm5C*@^{>xMG1w11ey;&c*~bjP?nX6c{x4R_*MLh&@9ebl?&h#2&^@*Vo44Y-b8{ zhDscj3lMyoOg%EI5P+P&P$%`Z>qNe1b)wXfiz5<)R!?s8fmg9svQLhmtrq#LSy^P~bI}Na)on?{YW=`pLtr#l;M6j_;Fh!!!7Bk?; z86g`toH1TA-Qfdi)))?C%(r$?PNXO`wIW8Ihz1xhm;qeXnvAtxengDu1*;%LNXTr54iQJ8HH%%;PO=z*?L<408Cj}Lv<9_c%HYMC z<%(7BTO4MJu7kR``N%**cpcokzOII1WrY1j*lglG3(m@T>k!Cn-emfbQqmOL&?s(#5P7i$ z3pZjUlC?A z?Uuc5Dk{9+%Zg+Otc+=5k!l!DL|rPp&>)g>uFi%|49RyQB!I$wvk;N7P;{g$gqu-i zSYc*iff<|L0-3R^L(743L>L-bHqox(>y=sulzE+b?os%(`HZy|$#T3|f^GOJ(Upfs z^Ap+5?wF@6+x3wJu=F|W;EG{!TcFhpBhkJ)CDU7&Fzq>Xi^W8@oQO(l2fW@Vf_SUEnWMhF#%xs2SI|`9o)8Aoc+eD%R%(HpZ66fudUM-Z> z1>G#ufLjY}oI>!H(R4F3xK&I{Nl_qFLfm5k$%X(;dxF~=FrM)uK{-=-4clj8Jkwst zVE$3QMir>FDWkWHTM#TVr*MeH`B;Z7MQ$zhXZJB!SdBpo;hVC$VQSJ0}2 zRiehQPw{ffyIc z^77Z$h7ZxSJHsezrHG}vnK2>1;7j9*q~#ay<9+6vzyR%_k>9u7_{KYS_9QqHhu$Mg zJ8O+UE*H9r?RQC=sTbRlCe@5*StnA&&Kx57BVK%&EtyCuLhRA;Qpzt(avF^o1=zH} z5?rln?go`=-vFy?WsVg~`-=;PKUYC@#C7d?JRsA`*~I}qrLVcoGQ#?}JGt%b0im@?xmZtXfVRe0hG@k zvrPkaB;spqUXQCNPi-IRiT8#D9X$`zTE4OE{?ir@-&M2yN~q$i*cOa;ip>*TBzAXB zVK3pTDZs{+qNE>tQg_7N{wxcyTBur)+iE)(g3fk>;J-*|*xR4e z+q@FmUM&#GYueEC+C8PUKj^%(cgd^rz~%G1eQ3>mWK+PN;yEV`(jVko19 zkD=+=5yP>#oAVvpwVQUgCuj|c@h4Uu7O^p~c(sb%Vq{OSaY@^C(!4zr$GIKhz{WS; zLIbn!g65ggi>PZ&j^Lhj_*-TSxwmD;XSyWBdXdjKMz(}4-`+bZ@^A||?+5VR3?8C2 zYsEQ;jA}2QZTkosB&>mC+eUMhi3d@^jGf64Gx_7vI{yotkuow)GitE`{4v`XYeX6X zr!&PQ9Ub$v->}uFt7~E2FAFc6IUmlih|=F!-KR**LOVEsW`s;fPVS*_!uWG0ravuu#n$_X(U z?dYy z2In?%bPC3};w9;fjE$3n*+U$Q_RGV|EbdOiz!BeW#@kOE^rawZirGO8X?k@+93}N`x|eUgFj6^d zQSMLO2opNa^9xd;0ZmkFTqXxKh-z%qjB)?}Rgl#!skw7bL-b@; zN8EWNvN09Qt?X$wQmSah*^Lrx&>7t4Oy(orO-S*?R8;`7RsmZ3H(kXum6gnIcmJgQT0$WRp#%R5WnYH`Z;xI-ZQZJVVec z8h?B&O~Gp{60>lEe^*eJ_0n;{OCfeXiJ@Z!5HL&_+TCK zWlxF93%Iw{APYkrCn`T1Q7!8-h9VJ@oxV_Mt8N-$2>U7)=EAD8Zz+soTyz*-)s@@r zn>PFzlBi=W6%b1vE02X82Eme#Gd#lR2Wy`)tiaREhL>Z8;$nfCATpXz1TgzwYs_7u zl*?ClHf`xj4~|pN;MJ0epe1mkBGr5UcNjmF7z#|#>1NIx`5;+}Wwxx$Wm8O`hisW0 zqt3Q@#L#&cUlQ7`1}QINe_JiJUd}Z;2!4Qftq-Uom%=ulC}AVK+=IG09;7b{*^L$} zmF=dL*j(M6bodw6J@aii+%2zO!8JTCZ8{atq}H{z9&%&ONF=YbS=AU|D|ca>HKq`v zCVGb;nBmj31w`C)(Gcs{rYhd|GFMN#YRm-BgjW_LFlC-O1i?t^@{oq8A2K)PWlsFu zsP<*C8F{)1C{bWELMHt^Mwd_PAw!omqd?);L-ztdR3IOf-$$%+-2Xajy!#z2;0Elltv3hs{lJ} zg|E@eK)_;TD~5=nvyFNw!iiTji|Gv2ITPA7(PLPzbap4srYzI*lBQJNEc1UUM<)Ru zumZsw(n6IUWEKsYV(0i^^ws{s>?1MCJ{%}-%SbM zRf>BaW_(e|Bc;p{-yh=jpN!KzY8(94EC?pz%2sug^=6S*u+e2JCE1sktPy&HSwc53 zD~qrQvDv0x+@FB%jK5LvwwHFt-}5=czP_{&)ija+@X{>Sm|XybPcVsSU5^poPeN}P Ok+W)evt#!4rT+&Ky}4Wf literal 0 HcmV?d00001 diff --git a/locales/tr.po b/locales/tr.po new file mode 100644 index 0000000..253890e --- /dev/null +++ b/locales/tr.po @@ -0,0 +1,1960 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:05-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Turkish\n" +"Language: tr_TR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: tr\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Bu uyarı iletisini gizle" + +msgid "Don't Show Again" +msgstr "Tekrar Gösterme" + +msgid "Don't show again" +msgstr "Tekrar gösterme" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i satır '%s' dosyasından doğru olarak yüklenmedi." +msgstr[1] "%i satır '%s' dosyasından doğru olarak yüklenmedi." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d satırı, '%s' dosyasında bozulmuş (%s verisi geçerli değil)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Hatalı oluşturulmuş başlık: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Bozuk katalog dosyası: tekil biçim msgstr, msgid_plural ile birlikte " +"kullanılmış" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Bozuk katalog dosyası: çoğul biçim msgstr, msgid_plural olmadan kullanılmış" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Katalog yüklenirken hatalar oldu. Bazı veriler sonuçta kayıp veya bozuk " +"olabilir." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "%s dosyası yüklenemedi, muhtemelen bozuk." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' dosyası salt-okunur ve kaydedilemez.\n" +"Lütfen farklı bir isim altında kaydedin." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s dosyası kaydedilemedi." + +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)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog, katalog ayarlarında belirtildiği gibi '%s' karakter kümesine " +"kaydedilemedi.\n" +"\n" +"Bunun yerine UTF-8 olarak kaydedildi ve ayar buna göre değiştirildi." + +msgid "Error saving catalog" +msgstr "Katalog kaydedilirken hata" + +msgid "PO Translation Files" +msgstr "PO Çeviri Dosyaları" + +msgid "POT Translation Templates" +msgstr "POT Çeviri Şablonları" + +msgid "All Translation Files" +msgstr "Tüm Çeviri Dosyaları" + +msgid "Merging differences..." +msgstr "Farklılıklar birleştiriliyor..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' geçerli bir POT dosyası değil." + +msgid "(Use default language)" +msgstr "(Varsayılan dili kullan)" + +msgid "Select your preferred language" +msgstr "Tercih ettiğiniz dili seçin" + +msgid "Language selection" +msgstr "Dil seçimi" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" +"Bu değişikliğin etkili olması için Poedit'i yeniden başlatmak zorundasınız." + +msgid "Downloading translations is disabled in this project." +msgstr "Bu projede çevirileri indirmek etkisizleştirildi." + +msgid "Not authorized, please sign in again." +msgstr "Yetkiniz yok, lütfen tekrar giriş yapın." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin bir çevrimiçi yerelleştirme yönetimi platformu ve işbirliğine dayalı " +"bir çeviri aracıdır. Poedit sorunsuz olarak Crowdin'de yönetilen PO " +"dosyalarını eşitleyebilir." + +msgid "Sign In" +msgstr "Giriş Yap" + +msgid "Sign in" +msgstr "Giriş yap" + +msgid "Sign Out" +msgstr "Çıkış Yap" + +msgid "Sign out" +msgstr "Çıkış yap" + +msgid "Waiting for authentication…" +msgstr "Kimlik doğrulaması için bekleniyor…" + +msgid "Updating user information…" +msgstr "Kullanıcı bilgileri güncelleniyor…" + +msgid "Signed in as:" +msgstr "Giriş yapan:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin Hakkında Bilgi Edinin" + +msgid "Learn more about Crowdin" +msgstr "Crowdin hakkında bilgi edinin" + +msgid "Sign in to Crowdin" +msgstr "Crowdin'e giriş yapın" + +msgid "Open Crowdin translation" +msgstr "Crowdin çevirisini aç" + +msgid "Project:" +msgstr "Proje:" + +msgid "Language:" +msgstr "Dil:" + +msgid "File:" +msgstr "Dosya:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Crowdin hesabınızda listelenen hiç çeviri projesi yok." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Bu proje, Poedit içinde çevrilebilir hiç bir dosyaya sahip değil." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Bu dosya sadece Crowdin'in web arayüzünde düzenlenebilir." + +msgid "Downloading latest translations…" +msgstr "En son çeviriler indiriliyor…" + +msgid "Syncing with Crowdin" +msgstr "Crowdin ile eşitleniyor" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin ile eşitleme başarısız oldu." + +msgid "Crowdin error" +msgstr "Crowdin hatası" + +msgid "Uploading translations…" +msgstr "Çeviriler gönderiliyor…" + +msgid "&Copy" +msgstr "K&opyala" + +msgid "Learn more" +msgstr "Daha fazla bilgi edinin" + +msgid "Learn More" +msgstr "Daha Fazla Bilgi Edinin" + +#, c-format +msgid "Failed command: %s" +msgstr "Başarısız komut: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext kataloglarını birleştirme başarısız." + +msgid "Scanning files..." +msgstr "Dosyalar taranıyor..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s dosya ayrıştırılıyor..." + +msgid "Failed to load extracted catalog." +msgstr "Çıkartılan kataloğu yükleme başarısız." + +msgid "&Help" +msgstr "&Yardım" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO dosyaları doğrudan Poedit içinde düzenlenemez." + +msgid "Error opening file" +msgstr "Dosya açılırken hata oldu" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Lütfen bunun yerine ilgili PO dosyasını açın ve düzenleyin. Kaydettiğiniz " +"zaman, MO dosyası da güncellenecektir." + +msgid "don't delete temporary files (for debugging)" +msgstr "geçici dosyaları silme (hata ayıklama için)" + +msgid "handle a poedit:// URI" +msgstr "Bir poedit:// URI'si kullan" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit işlemi ile iletişim kurma başarısız." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Beklenmeyen bir hata oluştu: %s" + +msgid "Unhandled exception occurred." +msgstr "Beklenmeyen bir hata oluştu." + +msgid "Open catalog" +msgstr "Kataloğu aç" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' dosyası yok." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s Hakkında" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Sürüm %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Hizmetler" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s Gizle" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Diğerlerini Gizle" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Tümünü Göster" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s'ten Çık" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit kollanımı kolay bir çeviri düzenleyicisidir." + +msgid "Catalogs Manager" +msgstr "Katalog Yöneticisi" + +msgid "Check for Updates..." +msgstr "Güncellemeleri Kontrol Et..." + +msgid "&Edit" +msgstr "Düz&en" + +msgid "Undo" +msgstr "Geri al" + +msgid "Redo" +msgstr "Yinele" + +msgid "Paste and Match Style" +msgstr "Stili Yapıştır ve Eşleştir" + +msgid "Delete" +msgstr "Sil" + +msgid "Spelling and Grammar" +msgstr "Yazım ve Dilbilgisi" + +msgid "Show Spelling and Grammar" +msgstr "Yazım ve Dilbilgisini Göster" + +msgid "Check Document Now" +msgstr "Belgeyi Şimdi Kontrol Et" + +msgid "Check Spelling While Typing" +msgstr "Yazarken Yazım Denetimi Yap" + +msgid "Check Grammar With Spelling" +msgstr "Yazım Denetimi ile Dilbilgisini Kontrol Et" + +msgid "Correct Spelling Automatically" +msgstr "Otomatik Olarak Yazımı Düzelt" + +msgid "Substitutions" +msgstr "Değişiklikler" + +msgid "Show Substitutions" +msgstr "Değişiklikleri Göster" + +msgid "Smart Copy/Paste" +msgstr "Akıllı Kopyala/Yapıştır" + +msgid "Smart Quotes" +msgstr "Akıllı Tırnaklar" + +msgid "Smart Dashes" +msgstr "Akıllı Tireler" + +msgid "Smart Links" +msgstr "Akıllı Bağlantılar" + +msgid "Text Replacement" +msgstr "Metin Değiştirme" + +msgid "Transformations" +msgstr "Dönüşümler" + +msgid "Make Upper Case" +msgstr "Büyük Harfe Çevir" + +msgid "Make Lower Case" +msgstr "Küçük Harfe Çevir" + +msgid "Capitalize" +msgstr "Büyük Harfle" + +msgid "Speech" +msgstr "Konuşun" + +msgid "Start Speaking" +msgstr "Konuşmaya Başlayın" + +msgid "Stop Speaking" +msgstr "Konuşmayı Bırakın" + +msgid "&View" +msgstr "&Görünüm" + +msgid "Enter Full Screen" +msgstr "Tam Ekran Girin" + +msgid "Window" +msgstr "Pencere" + +msgid "Minimize" +msgstr "Simge Durumuna Küçült" + +msgid "Zoom" +msgstr "Yakınlaştır" + +msgid "Bring All to Front" +msgstr "Tümünü Öne Getir" + +msgid "PO Translation" +msgstr "PO Çevirisi" + +msgid "The file cannot be opened." +msgstr "Dosya açılamaz." + +msgid "Invalid file" +msgstr "Geçersiz dosya" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Dosya ya bozulmuş ya da biçimi Poedit tarafından tanınamıyor." + +msgid "&Undo" +msgstr "&Geri Al" + +msgid "&Redo" +msgstr "&Yinele" + +msgid "Cu&t" +msgstr "&Kes" + +msgid "Cut" +msgstr "Kes" + +msgid "Copy" +msgstr "Kopyala" + +msgid "&Paste" +msgstr "Ya&pıştır" + +msgid "Paste" +msgstr "Yapıştır" + +msgid "&Delete" +msgstr "&Sil" + +msgid "Select &All" +msgstr "&Tümünü Seç" + +msgid "Select All" +msgstr "Tümünü Seç" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Yukarı Ok" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Aşağı Ok" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit penceresine birden fazla dosyayı sürükleyip bırakamazsınız." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' dosyası bir ileti kataloğu değil." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Dosya" + +msgid "&Go" +msgstr "&Git" + +msgid "Source text:" +msgstr "Kaynak metin:" + +msgid "Singular:" +msgstr "Tekil:" + +msgid "Plural:" +msgstr "Çoğul:" + +msgid "Translation:" +msgstr "Çeviri:" + +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 dosyaları sadece şablonlardır ve kendiliğinden herhangi bir çeviri " +"içermezler.\n" +"Bir çeviri yapmak için şablonu temel alan yeni bir PO dosyası oluşturun." + +msgid "Create New Translation" +msgstr "Yeni Çeviri Oluştur" + +msgid "Create new translation" +msgstr "Yeni çeviri oluştur" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "İmla denetimi etkisizleştirildi, çünkü %s için sözlük yüklü değil." + +msgid "Install" +msgstr "Yükle" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog değiştirildi. Değişiklikleri kaydetmek istiyor musunuz?" + +msgid "Save changes" +msgstr "Değişiklikleri kaydet" + +msgid "Your changes will be lost if you don't save them." +msgstr "Eğer kaydetmezseniz yaptığınız değişiklikler kaybolacaktır." + +msgid "Save" +msgstr "Kaydet" + +msgid "Don't save" +msgstr "Kaydetme" + +msgid "Don't Save" +msgstr "Kaydetme" + +msgid "Save as..." +msgstr "Farklı kaydet..." + +msgid "Compile to..." +msgstr "Şuna derle..." + +msgid "Compiled Translation Files" +msgstr "Derlenmiş Çeviri Dosyaları" + +msgid "Export as..." +msgstr "Dışa farklı aktar..." + +msgid "HTML Files" +msgstr "HTML Dosyaları" + +msgid "Open catalog template" +msgstr "Katalog şablonu aç" + +msgid "Updating catalog" +msgstr "Katalog güncelleniyor" + +msgid "Source code not available." +msgstr "Kaynak kodu mevcut değil." + +msgid "Updating failed" +msgstr "Güncelleme başarısız oldu" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Çeviriler kaynak kodundan güncellenemedi, çünkü kataloğun Özelliklerinde " +"belirtilen konumda hiç kod bulunamadı." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogdaki girişler muhtemelen yanlış." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Kataloğu güncelleme başarısız. Ayrıntılar için 'Ayrıntılar >>' düğmesine " +"tıklayın." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Çeviride %d sorun bulundu." +msgstr[1] "Çeviride %d sorun bulundu." + +msgid "Validation results" +msgstr "Doğrulama sonuçları" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Hatalı girişler listede kırmızı renkle işaretlendi. Hatanın ayrıntıları " +"böyle bir girişi seçtiğinizde gösterilecektir." + +msgid "The file was saved safely." +msgstr "Dosya güvenli bir şekilde kaydedildi." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Dosya güvenli bir şekilde kaydedildi ve MO biçiminde derlendi, ancak büyük " +"olasılıkla doğru olarak çalışmayacak." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Dosya güvenli bir şekilde kaydedildi, ancak MO biçiminde derlenemez ve " +"kullanılamaz." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Dosya, MO biçiminde derlendi, ancak muhtemelen doğru olarak çalışmayacak." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Dosya, MO biçiminde derlenemez ve kullanılamaz." + +msgid "No problems with the translation found." +msgstr "Çeviri ile ilgili hiç sorun bulunmadı." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Çeviri kullanıma hazır, ancak henüz %d giriş çevrilmemiş." +msgstr[1] "Çeviri kullanıma hazır, ancak henüz %d giriş çevrilmemiş." + +msgid "The translation is ready for use." +msgstr "Çeviri kullanıma hazır." + +msgid "Context:" +msgstr "Bağlam:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit, “%s” dosyasındaki geçersiz içeriği otomatik olarak düzeltti." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Dosya, PO dosyalarında izin verilmeyen ve dosyanın kullanılmasını engelleyen " +"kopya öğeleri içermekte. Poedit sorunu düzeltti, ancak belirsiz olarak " +"işaretlenen her bir öğenin çevirisini gözden geçirmeli ve gerekirse " +"düzeltmelisiniz." + +msgid "Language of the translation isn't set." +msgstr "Çeviri dili ayarlanmamış." + +msgid "Set Language" +msgstr "Dili ayarla" + +msgid "Set language" +msgstr "Dili ayarla" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Çeviri dili doğru olarak ayarlanmazsa, öneriler kullanılabilir olmaz. Çoğul " +"biçimler gibi, diğer özellikler de etkilenebilir." + +msgid "Language of the translation is the same as source language." +msgstr "Çeviri dili kaynak dil ile aynı." + +msgid "Fix Language" +msgstr "Dili Düzelt" + +msgid "Fix language" +msgstr "Dili düzelt" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Bu katalogda çoğul biçimleri olan girişler var, ancak Çoğul-Biçimli başlık " +"yapılandırılmamış." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Bu katalogdaki girişlerde, kataloğun Çoğul-Biçim başlığında belirtilen " +"sayıdan farklı çoğul biçimler var" + +msgid "Required header Plural-Forms is missing." +msgstr "Gereken Çoğul-Biçin başlık bilgisi eksik." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Çoğul-Biçim başlığında sözdizimi hatası (\"%s\")." + +msgid "Fix the Header" +msgstr "Başlığı Düzelt" + +msgid "Fix the header" +msgstr "Başlığı düzelt" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"%s kataloğu tarafından kullanılan çoğul biçim ifadesi alışılmış şekilde " +"değil." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Gözden Geçir" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "İleti katalog dosyası '%s' yüklenirken bir hata oluştu." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Çevrilen: %d / %d (%% %d)" + +#, c-format +msgid "Remaining: %d" +msgstr "Kalan: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d hata" +msgstr[1] "%d hata" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d giriş" +msgstr[1] "%d giriş" + +msgid " (unsaved)" +msgstr " (kaydedilmedi)" + +msgid " (modified)" +msgstr " (değiştirildi)" + +msgid "Go" +msgstr "Git" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Başarısız çeviri belleği güncellemesi: %s" + +msgid "Purge deleted translations" +msgstr "Silinmiş çevirileri temizle" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Artık kullanılmayan tüm çevirileri kaldırmak istediğinize emin misiniz?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Temizleyerek devam ederseniz, silinmek üzere işaretlenmiş tüm çeviriler " +"kalıcı olarak kaldırılacaktır. Gelecekte bunlar geri eklenirse, tekrar " +"çevirmek zorunda kalacaksınız." + +msgid "Keep" +msgstr "Tut" + +msgid "Purge" +msgstr "Temizle" + +msgid "Fill missing translations from TM" +msgstr "Eksik çevirileri Çeviri Belleğinden doldur" + +msgid "Only fill in exact matches" +msgstr "Sadece tam eşleşmeleri doldur" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Varsayılan olarak, doğru olmayan sonuçlar da doldurulur ve belirsiz olarak " +"işaretlenir. Sadece doğru eşleşmeleri dahil etmek için bu seçeneği " +"işaretleyin." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Tam eşleşmeleri belirsiz olarak işaretleme" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Sadece ÇB'nizin kalitesine güveniyorsanız etkinleştirin. Varsayılan olarak, " +"ÇB'den olan tüm eşleşmeler belirsiz olarak işaretlenir ve gözden " +"geçirilmelidir." + +msgid "Fill" +msgstr "Doldur" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "Çeviri belleği kullanılarak %d giriş dolduruldu." +msgstr[1] "Çeviri belleği kullanılarak %d giriş dolduruldu." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Çeviriler belirsiz olarak işaretlendi çünkü yanlış olabilirler. Doğruluğu " +"için gözden geçirmelisiniz." + +msgid "No entries could be filled from the translation memory." +msgstr "Çeviri belleği kullanılarak hiç giriş doldurulamadı." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Çeviri belleği bu dosyanın içeriğine uygun herhangi bir dizge içermiyor. El " +"ile yaptığınız çeviriler Poedit tarafından yeterince öğrenildikten sonra " +"yarı otomatik çeviriler etkili olur." + +msgid "Translating" +msgstr "Çevriliyor" + +msgid "Filling missing translations from TM..." +msgstr "Eksik çeviriler çeviri belleğinden dolduruluyor..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u dizge çevrildi" +msgstr[1] "%u dizge çevrildi" + +msgid "Copy from source text" +msgstr "Kaynak metinden kopyala" + +msgid "Copy from Source Text" +msgstr "Kaynak Metinden Kopyala" + +msgid "Clear translation" +msgstr "Çeviriyi temizle" + +msgid "Clear Translation" +msgstr "Çeviriyi Temizle" + +msgid "Edit comment" +msgstr "Açıklamayı düzenle" + +msgid "Edit Comment" +msgstr "Açıklamayı Düzenle" + +msgid "References:" +msgstr "Kaynaklar:" + +msgid "Everything" +msgstr "Herşey" + +#, c-format +msgid "Form %i" +msgstr "Biçim %i" + +msgid "Singular" +msgstr "Tekil" + +msgid "Zero" +msgstr "Sıfır" + +msgid "One" +msgstr "Bir" + +msgid "Two" +msgstr "İki" + +msgid "Plural" +msgstr "Çoğul" + +msgid "Other" +msgstr "Diğer" + +msgid "&Bookmarks" +msgstr "Ye&r İmleri" + +#, c-format +msgid "Set bookmark %i" +msgstr "%i yer imini ayarla" + +#, c-format +msgid "Go to bookmark %i" +msgstr "%i yer imine git" + +#, c-format +msgid "Set Bookmark %i" +msgstr "%i Yer İmini Ayarla" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "%i Yer İmine Git" + +msgid "Hide Sidebar" +msgstr "Kenar çubuğunu gizle" + +msgid "Show Sidebar" +msgstr "Kenar çubuğunu göster" + +msgid "Hide Status Bar" +msgstr "Durum Çubuğunu Gizle" + +msgid "Show Status Bar" +msgstr "Durum Çubuğunu Göster" + +msgid "Source text" +msgstr "Kaynak metin" + +msgid "Translation" +msgstr "Çeviri" + +msgid "ID" +msgstr "Kod" + +#, c-format +msgid "Source text — %s" +msgstr "Kaynak metin — %s" + +msgid "unknown language" +msgstr "bilinmeyen dil" + +#, c-format +msgid "Translation — %s" +msgstr "Çeviri — %s" + +msgid "Error:" +msgstr "Hata:" + +msgid "Source file" +msgstr "Kaynak dosyası" + +msgid "Source file occurrence:" +msgstr "Kaynak dosya oluşumu:" + +msgid "Open in Editor" +msgstr "Düzenleyicide Aç" + +msgid "Open in editor" +msgstr "Düzenleyicide aç" + +msgid "No references for the selected item." +msgstr "Seçilen öğe için hiç kaynak yok." + +#, c-format +msgid "Error opening file %s!" +msgstr "%s dosyası açılırken hata!" + +msgid "Find" +msgstr "Bul" + +msgid "Replace" +msgstr "Değiştir" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Seçenekler" + +msgid "Ignore case" +msgstr "Büyük küçük harfi yoksay" + +msgid "Wrap around" +msgstr "Çevresinde kaydır" + +msgid "Whole words only" +msgstr "Sadece bütün kelime" + +msgid "Find in source texts" +msgstr "Kaynak metinlerde bul" + +msgid "Find in translations" +msgstr "Çevirilerde bul" + +msgid "Find in comments" +msgstr "Açıklamalarda bul" + +msgid "Close" +msgstr "Kapat" + +msgid "Replace All" +msgstr "Tümünü Değiştir" + +msgid "Replace all" +msgstr "Tümünü değiştir" + +msgid "< &Previous" +msgstr "< Ön&ceki" + +msgid "&Next >" +msgstr "So&nraki >" + +msgid "String to find" +msgstr "Bulunacak dizge" + +msgid "Replacement string" +msgstr "Değiştirme dizgesi" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Program çalıştırılamıyor: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Dil Kodu ya da Adı (örn. tr_TR)" + +msgid "Translation Language" +msgstr "Çeviri Dili" + +msgid "Language of the translation:" +msgstr "Çeviri dili:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Katalog yöneticisi" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Toplam" + +msgid "Untrans" +msgstr "Çevrilmemiş" + +msgid "Fuzzy" +msgstr "Belirsiz" + +msgid "Bad Tokens" +msgstr "Geçersiz Belirteçler" + +msgid "Last modified" +msgstr "Son değiştirme" + +msgid "Select directory" +msgstr "Dizin seçin" + +msgid "Directories:" +msgstr "Dizinler:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Projeyi silmek istiyor musunuz?" + +msgid "Confirmation" +msgstr "Onaylama" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Bu projedeki tüm katalogları toplu güncellemeyi\n" +"gerçekten istiyor musunuz?" + +msgid "Information about the translator" +msgstr "Çevirmen hakkında bilgi" + +msgid "Name:" +msgstr "Adı:" + +msgid "Your Name" +msgstr "Adınız" + +msgid "Email:" +msgstr "E-posta:" + +msgid "your_email@example.com" +msgstr "epostaniz@ornek.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Adınız ve e-postanız sadece GNU gettext dosyalarının Last-Translator\n" +"üstbilgisini ayarlamak için kullanılır." + +msgid "Editing" +msgstr "Düzenleme" + +msgid "Automatically compile MO file when saving" +msgstr "Kaydederken MO dosyasını otomatik olarak derle" + +msgid "Show summary after catalog update" +msgstr "Katalog güncellemesinden sonra özeti göster" + +msgid "Check spelling" +msgstr "Yazım denetimi yap" + +msgid "Always change focus to text input field" +msgstr "İmleç hep çeviri alanına odaklansın" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Bu seçenek etkinleştirildiğinde, imleç asla dizge listesine odaklanmaz. " +"Böylece odağı değiştirmek için sekme (Tab) tuşuna basmadan çeviriyi hemen " +"yazabilirsiniz. Gezinmek için Ctrl-Aşağı/Yukarı ok tuşlarını " +"kullanmalısınız. " + +msgid "Appearance" +msgstr "Görünüm" + +msgid "Use custom list font:" +msgstr "Özel liste yazı tipini kullan:" + +msgid "Use custom text fields font:" +msgstr "Özel metin alanları yazı tipini kullan:" + +msgid "Change UI language" +msgstr "Arayüz dilini değiştir" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 veya daha yenisi gerekir)" + +msgid "General" +msgstr "Genel" + +msgid "Use translation memory" +msgstr "Çeviri belleğini kullan" + +msgid "Learn From Files..." +msgstr "Dosyalardan Öğren..." + +msgid "Learn from files..." +msgstr "Dosyalardan öğren..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Sıfırla" + +msgid "Consult TM when updating from sources" +msgstr "Kaynaklardan güncellerken Çeviri Belleğine başvur" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Bu seçenek etkinleştirildiğinde, Yeni kayıtlar, çeviri belleğinde\n" +"bulunan önceki çeviriler kullanılarak doldurulmaya çalışılır.\n" +"Çeviri belleği neredeyse boş ise bu özellik pek etkili olmaz.\n" +"Çeviri yaptıkça bu özelliğin etkisi de artar." + +msgid "Stored translations:" +msgstr "Saklanan çeviri:" + +msgid "Database size on disk:" +msgstr "Diskteki veritabanı boyutu:" + +msgid "Select translation files to import" +msgstr "İçe aktarmak için çeviri dosyalarını seçin" + +msgid "Translation Memory" +msgstr "Çeviri Belleği" + +msgid "Importing translations..." +msgstr "Çeviriler içe aktarılıyor..." + +msgid "Finalizing..." +msgstr "Tamamlanıyor..." + +msgid "Reset translation memory" +msgstr "Çeviri belleğini sıfırla" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Çeviri belleğini sıfırlamak istediğinize emin misiniz?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Çeviri belleğini sıfırlama tüm saklanan çevirileri geri dönülmez bir şekilde " +"bundan silecek. Bu işlemi geri alamazsınız." + +msgid "Cancel" +msgstr "İptal" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "ÇBelleği" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Kaynak kodu çıkarıcıları kaynak kodu dosyalarında çevrilebilir dizgeleri " +"bulmak ve onları çıkarmak için kullanılır böylece çevrilebilirler." + +msgid "New" +msgstr "Yeni" + +msgid "Edit" +msgstr "Düzenle" + +msgid "Delete extractor" +msgstr "Çıkartıcıyı sil" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "\"%s\" çıkartıcısını silmek istediğinize emin misiniz?" + +msgid "Extractors" +msgstr "Çıkarıcılar" + +msgid "Accounts" +msgstr "Hesaplar" + +msgid "Automatically check for updates" +msgstr "Güncellemeleri otomatik olarak kontrol et" + +msgid "Include beta versions" +msgstr "Beta sürümleri dahil et" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta sürümleri en son yeni özellikleri ve geliştirmeleri içerir, ancak daha " +"az istikrarlı olabilirler." + +msgid "Updates" +msgstr "Güncellemeler" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Bu ayarlar, PO dosyalarının iç biçimlendirmesini etkiler. Örneğin sürüm " +"denetimi nedeniyle özel gereksinimleriniz varsa, bunları ayarlayın." + +msgid "Line endings:" +msgstr "Satır sonları:" + +msgid "Unix (recommended)" +msgstr "Unix (önerilir)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Kaydırma yeri:" + +msgid "Preserve formatting of existing files" +msgstr "Varolan dosyaların biçimini koru" + +msgid "Advanced" +msgstr "Gelişmiş" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Tercihleri" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Klasörleri Buraya Sürükleyin ve Bırakın\n" +"\n" +"ya da + düğmesini kullanın" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Klasörleri buraya sürükleyin ve bırakın\n" +"\n" +"ya da + düğmesini kullanın" + +msgid "Add Folders..." +msgstr "Klasörleri Ekle..." + +msgid "Add folders..." +msgstr "Klasörleri ekle..." + +msgid "Add Files..." +msgstr "Dosyaları Ekle..." + +msgid "Add files..." +msgstr "Dosyaları ekle..." + +msgid "Add Wildcard..." +msgstr "Joker Karakter Ekle..." + +msgid "Add wildcard..." +msgstr "Joker karakter ekle..." + +msgid "Paths" +msgstr "Yollar" + +msgid "Excluded paths" +msgstr "Hariç tutulan yollar" + +msgid "Additional keywords" +msgstr "Ek anahtar kelimeler" + +msgid "Name of the project the translation is for" +msgstr "Çevirisi yapılan projenin adı:" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "örn. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (önerilir)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Lütfen önce dosyayı kaydedin. O zamana kadar bu bölüm düzenlenemez." + +msgid "Comment:" +msgstr "Açıklama:" + +msgid "OK" +msgstr "TAMAM" + +msgid "C&lear" +msgstr "&Temizle" + +msgid "Clear the comment" +msgstr "Açıklamayı temizle" + +msgid "Create new translations project" +msgstr "Yeni çeviri projesi oluştur" + +msgid "Edit the project" +msgstr "Projeyi düzenle" + +msgid "Delete the project" +msgstr "Projeyi sil" + +msgid "Update all" +msgstr "Tümünü güncelle" + +msgid "Update all catalogs in the project" +msgstr "Projedeki tüm katalogları güncelle" + +msgid "Edit project" +msgstr "Projeyi düzenle" + +msgid "Project name:" +msgstr "Proje adı:" + +msgid "Browse" +msgstr "Gözat" + +msgid "Add directory to the list" +msgstr "Klasörü listeye ekle" + +msgid "&New..." +msgstr "&Yeni..." + +msgid "New from &POT/PO file..." +msgstr "&POT/PO dosyasından oluştur..." + +msgid "New From &POT/PO File..." +msgstr "&POT/PO Dosyasından Oluştur..." + +msgid "&Open..." +msgstr "&Aç..." + +msgid "Open Recent" +msgstr "Son Kullanılanları Açın" + +msgid "Open from Crowdin..." +msgstr "Crowdin'den aç..." + +msgid "Open From Crowdin..." +msgstr "Crowdin'den Aç..." + +msgid "&Close" +msgstr "&Kapat" + +msgid "&Save" +msgstr "Kay&det" + +msgid "Save &as..." +msgstr "&Farklı kaydet..." + +msgid "Save &As..." +msgstr "F&arklı Kaydet..." + +msgid "Compile to MO..." +msgstr "MO olarak derle..." + +msgid "E&xport as HTML..." +msgstr "HTML olarak &dışa aktar..." + +msgid "Check for updates..." +msgstr "Güncellemeleri kontrol et..." + +msgid "&Preferences..." +msgstr "&Tercihler..." + +msgid "Catalogs &manager" +msgstr "&Katalog yöneticisi" + +msgid "Catalogs &Manager" +msgstr "&Katalog Yöneticisi" + +msgid "E&xit" +msgstr "Çı&kış" + +msgid "Quit" +msgstr "Çık" + +msgid "Copy from singular" +msgstr "Tekilden kopyala" + +msgid "Copy From Singular" +msgstr "Tekilden Kopyala" + +msgid "Translation is &fuzzy" +msgstr "Çeviri &belirsiz" + +msgid "Translation Is &Fuzzy" +msgstr "Çeviri &Belirsiz" + +msgid "Edit &comment" +msgstr "Açıklamayı dü&zenle" + +msgid "Edit &Comment" +msgstr "Açıklamayı Dü&zenle" + +msgid "Suggestions" +msgstr "Öneriler" + +msgid "&Show references" +msgstr "Referansları gö&ster" + +msgid "&Show References" +msgstr "Referansları Gö&ster" + +msgid "&Find..." +msgstr "B&ul..." + +msgid "Replace..." +msgstr "Değiştir..." + +msgid "Find next" +msgstr "Sonrakini bul" + +msgid "Find previous" +msgstr "Öncekini bul" + +msgid "Find and Replace..." +msgstr "Bul ve Değiştir..." + +msgid "Find Next" +msgstr "Sonrakini Bul" + +msgid "Find Previous" +msgstr "Öncekini Bul" + +msgid "&Preferences" +msgstr "&Tercihler" + +msgid "Display entry &IDs" +msgstr "&Kayıt kodlarını görüntüle" + +msgid "Display Entry &IDs" +msgstr "&Kayıt Kodlarını Görüntüle" + +msgid "Sort by &file order" +msgstr "&Dosya düzenine göre sırala" + +msgid "Sort by &File Order" +msgstr "&Dosya Düzenine göre Sırala" + +msgid "Sort by &source" +msgstr "&Kaynağa göre sırala" + +msgid "Sort by &Source" +msgstr "&Kaynağa göre Sırala" + +msgid "Sort by &translation" +msgstr "Çeviriye &göre sırala" + +msgid "Sort by &Translation" +msgstr "Çeviriye &göre Sırala" + +msgid "&Group by context" +msgstr "Bağlama göre &grupla" + +msgid "&Group By Context" +msgstr "Bağlama Göre &Grupla" + +msgid "Entries with errors first" +msgstr "Önce hataları olan girişler" + +msgid "Entries with Errors First" +msgstr "Önce Hataları olan Girişler" + +msgid "&Untranslated entries first" +msgstr "Ç&evrilmemiş dizgeler en üstte görüntülensin" + +msgid "&Untranslated Entries First" +msgstr "Ç&evrilmemiş Dizgeler En Üstte Görüntülensin" + +msgid "Show sidebar" +msgstr "Kenar çubuğunu göster" + +msgid "Show status bar" +msgstr "Durum çubuğunu göster" + +msgid "C&atalog" +msgstr "&Katalog" + +msgid "&Update from sources" +msgstr "Kaynaklardan gü&ncelle" + +msgid "&Update from Sources" +msgstr "Kaynaklardan Gü&ncelle" + +msgid "Update from &POT file..." +msgstr "&POT dosyasından güncelle..." + +msgid "Update from &POT File..." +msgstr "&POT Dosyasından Güncelle..." + +msgid "Sync with Crowdin" +msgstr "Crowdin ile eşitle" + +msgid "Fill missing translations from &TM..." +msgstr "Eksik çevirileri çeviri belleğinden &doldur..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Eksik Çevirileri Çeviri Belleğinden &Doldur..." + +msgid "&Purge deleted translations" +msgstr "Silin&miş çevirileri temizle" + +msgid "&Purge Deleted Translations" +msgstr "Silin&miş Çevirileri Temizle" + +msgid "&Validate translations" +msgstr "Çevirileri &doğrula" + +msgid "&Validate Translations" +msgstr "Çevirileri &Doğrula" + +msgid "&Properties..." +msgstr "Ö&zellikler..." + +msgid "&Done and next" +msgstr "&Tamamla ve sonrakine geç" + +msgid "&Done and Next" +msgstr "&Tamamla ve Sonrakine Geç" + +msgid "&Previous translation" +msgstr "Ö&nceki çeviri" + +msgid "&Previous Translation" +msgstr "Ö&nceki Çeviri" + +msgid "&Next translation" +msgstr "&Sonraki çeviri" + +msgid "&Next Translation" +msgstr "&Sonraki Çeviri" + +msgid "P&revious unfinished" +msgstr "Ö&nceki tamamlanmamış" + +msgid "P&revious Unfinished" +msgstr "Ö&nceki Tamamlanmamış" + +msgid "Ne&xt unfinished" +msgstr "S&onraki tamamlanmamış" + +msgid "Ne&xt Unfinished" +msgstr "S&onraki Tamamlanmamış" + +msgid "Previous plural form" +msgstr "Önceki çoğul biçim" + +msgid "Previous Plural Form" +msgstr "Önceki Çoğul Biçim" + +msgid "Next plural form" +msgstr "Sonraki çoğul biçim" + +msgid "Next Plural Form" +msgstr "Sonraki Çoğul Biçim" + +msgid "&Online help" +msgstr "Çe&vrimiçi yardım" + +msgid "&Online Help" +msgstr "Çe&vrimiçi Yardım" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext kılavuzu" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext Kılavuzu" + +msgid "&About Poedit" +msgstr "PoEdit H&akkında" + +msgid "&About" +msgstr "H&akkında" + +msgid "Extractor setup" +msgstr "Çıkarıcı kur" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Noktalı virgülle ayrılmış uzantılar listesi (örn. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Çağrı:" + +msgid "Command to extract translations:" +msgstr "Çevirileri çıkarmak için komut:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ayıklayıcı çalıştırmak için kullanılan komut.\n" +"%o belirtilen adlı dosyaya ayıklar, %K anahtar kelimelerin listesine,\n" +"%F giriş dosyalarının listesine, %C karakter kümesi\n" +"işaretine dönüşür (aşağıya bakın)." + +msgid "An item in keywords list:" +msgstr "Anahtar kelimeleri listesindeki bir öğe:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Bu, her anahtar kelime için bir kez komut satırına\n" +"eklenecektir. %k anahtar kelimeyi yazar." + +msgid "An item in input files list:" +msgstr "Girdi dosyaları listesindeki bir öğe:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Bu, her girdi dosyası için bir kez komut satırına\n" +"eklenecektir. %f dosya adını yazar." + +msgid "Source code charset:" +msgstr "Kaynak kod karakter kümesi:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Kaynak kodu karakter kümesi verildiyse,\n" +"bu komut satırına eklenecektir.\n" +"%c karakter kümesi değerini yazar." + +msgid "Catalog properties" +msgstr "Katalog özellikleri" + +msgid "Project name and version:" +msgstr "Proje adı ve sürümü:" + +msgid "Plural Forms:" +msgstr "Çoğul Biçimler:" + +msgid "Use default rules for this language" +msgstr "Bu dil için varsayılan kuralları kullan" + +msgid "Use custom expression" +msgstr "Özel ifade kullan" + +msgid "Learn about plural forms" +msgstr "Çoğul biçimler hakkında bilgi edinin" + +msgid "Charset:" +msgstr "Karakter kümesi:" + +msgid "Team:" +msgstr "Ekip:" + +msgid "Team's email address:" +msgstr "Ekibin e-posta adresi:" + +msgid "Translation properties" +msgstr "Çeviri özellikleri" + +msgid "Sources paths" +msgstr "Kaynak yolları" + +msgid "Extract text from source files in the following directories:" +msgstr "Kaynak dosyalardan metinleri şurada belirtilen dizinlere çıkart:" + +msgid "Base path:" +msgstr "Temel yol:" + +msgid "Sources keywords" +msgstr "Kaynak anahtar kelimeleri" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Kaynak dosyalardaki çevrilebilir dizgeleri tanımak için,\n" +"şu anahtar kelimeleri (işlev adları) kullan:" + +msgid "Learn about gettext keywords" +msgstr "Gettext anahtar kelimeleri hakkında bilgi edinin" + +msgid "Update summary" +msgstr "Güncelleme özeti" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Bu dizgeler kaynaklarda bulundu ancak katalogda bulunamadı.\n" +"Poedit bunları şimdi kataloğa ekleyecek." + +msgid "New strings" +msgstr "Yeni dizgeler" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Bu dizgeler artık kaynaklarda yok.\n" +"Poedit bunları şimdi katalogdan kaldıracak." + +msgid "Obsolete strings" +msgstr "Eski dizgeler" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 yeni, 0 eski)" + +msgid "Open" +msgstr "Aç" + +msgid "Save catalog" +msgstr "Kataloğu kaydet" + +msgid "Validate" +msgstr "Doğrula" + +msgid "Check for errors in the translation" +msgstr "Çeviri içindeki hataları kontrol et" + +msgid "Update" +msgstr "Güncelle" + +msgid "Update catalog - synchronize it with sources" +msgstr "Kataloğu güncelleyin - kaynak dosyalarla eşitleyin" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Seçilen satır eğer belirsiz çeviri ise değiştirilir" + +msgid "Show or hide the sidebar" +msgstr "Kenar çubuğunu göster veya gizle" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Önceki kaynak metin:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Belirsiz çevirinin karşılık geldiği eski kaynak metin (bir güncelleme " +"sırasında değiştirilmeden önceki hali)." + +msgid "Notes for translators:" +msgstr "Çevirmenler için notlar:" + +msgid "Add comment" +msgstr "Yorum ekle" + +msgid "Add Comment" +msgstr "Yorum Ekle" + +msgid "Translation suggestions:" +msgstr "Çeviri önerileri:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Bulunan eşleşmeler yok" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Bulunan Eşleşmeler Yok" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Bu dizge Poedit'in çeviri belleğinde bulundu." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Yeni: %i, eski: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "İçe aktarılan çeviri: %d" + +msgid "Poedit Update" +msgstr "Poedit Güncellemesi" + +msgid "Preparing migration..." +msgstr "Geçişe hazırlanıyor..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Geçiş çıkış durumu: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit'in çeviri belleğinizi yeni bir biçime dönüştürmesi gerekiyor." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Bu işlem Poedit başlatılmadan önce yapılmalıdır. Çok fazla sayıda çeviri " +"kaydedilmiş ise bu işlem bir kaç dakika sürebilir, ancak genellikle daha " +"kısa sürede tamamlanır." + +msgid "Proceed" +msgstr "Devam edin" + +msgid "Translation memory migration failed." +msgstr "Çeviri belleği geçişi başarısız oldu." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Çeviri belleği verileriniz geçirilemedi. Hata:\n" +"\n" +"%s\n" +"Lütfen help@poedit.net adresine eposta gönderin ve bu sorunu düzeltelim." + +msgid "Cannot create temporary directory." +msgstr "Geçici dizin oluşturulamıyor." + +msgid "Welcome to Poedit" +msgstr "Poedit'e Hoş Geldiniz" + +msgid "Edit a translation" +msgstr "Çeviriyi düzenle" + +msgid "Open an existing PO file and edit the translation." +msgstr "Varolan bir PO dosyasını açın ve çeviriyi düzenleyin." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Varolan bir PO dosyası ya da POT şablonu alın ve bundan yeni bir çeviri " +"oluşturun." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Crowdin ile bir çeviri üzerinde ortak çalış" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Crowdin projesinden bir dosya indirin, çevirin ve tekrar değişikliklerinizi " +"eşitleyin." + +msgid "What is Crowdin?" +msgstr "Crowdin nedir?" + +msgid "There are no translations. That’s unusual." +msgstr "Çeviriler yok. Bu olağandışı bir durum." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Çevrilebilir girişler Gettext sistemine el ile eklenemedi ancak kaynak " +"kodundan otomatik olarak\n" +"çıkartıldı. Bu yolla, güncel ve doğru kalırlar. Çevirmenler genellikle\n" +"geliştirici tarafından hazırlanan PO şablon dosyalarını (POT) kullanırlar." + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU gettext hakkında bildi edinin)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Bu kataloğu doldurmanın en kolay yolu bir POT dosyasından güncellemektir:" + +msgid "Update from POT" +msgstr "POT dosyasından güncelle" + +msgid "Take translatable strings from an existing POT template." +msgstr "Çevrilebilir dizgeleri varolan bir POT şablonundan alın." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Çevrilebilir dizgeleri doğrudan kaynak kodundan çıkartabilirsiniz:" + +msgid "Extract from sources" +msgstr "Kaynaklardan aktar" + +msgid "Configure source code extraction in Properties." +msgstr "Özellikler'de kaynak kod çıkartmayı yapılandırın." + +msgid "Sync" +msgstr "Eşitle" + +msgid "Synchronize the translation with Crowdin" +msgstr "Çeviriyi Crowdin ile eşitle" diff --git a/locales/uk.mo b/locales/uk.mo new file mode 100644 index 0000000000000000000000000000000000000000..594ed336fea1a5facf7879444e41033a77dadd68 GIT binary patch literal 59091 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 YxqrCZD~9Z{8pP3}g<6?x\n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Сховати це повідомлення" + +msgid "Don't Show Again" +msgstr "Не показувати знову" + +msgid "Don't show again" +msgstr "Не показувати знову" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i рядок файлу '%s' не було коректно завантажено." +msgstr[1] "%i рядків файлу '%s' не було завантажена коректно." +msgstr[2] "%i рядків файлу '%s' не було завантажена коректно." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Рядок %d файлу \"%s\" пошкоджений (недійсні дані %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Невірний заголовок '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Зіпсований файл каталогу: msgstr у однині використана разом із формою " +"множини msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Зіпсований файл каталогу: msgstr у множині використано без msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"При завантаженні каталогу виникли помилки. В результаті деякі дані можуть " +"бути відсутніми або бути пошкоджені." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Не вдається завантажити файл %s. Можливо він пошкоджений." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Файл '%s' доступний лише для читання і не може бути збережений.\n" +"Будь ласка, збережіть його під іншим іменем." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Не вдалося зберегти файл %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Сталися негаразди при спробі правильного форматування файлу (але його все " +"одно збережено)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Каталог не вдалося зберегти в кодуванні '%s' як зазначено в налаштування " +"каталогу. \n" +"\n" +"Він був збережений в кодуванні UTF-8, і відповідним чином налаштування були " +"змінені." + +msgid "Error saving catalog" +msgstr "Помилка збереження каталогу" + +msgid "PO Translation Files" +msgstr "Файли перекладу PO" + +msgid "POT Translation Templates" +msgstr "Шаблони перекладу POT" + +msgid "All Translation Files" +msgstr "Всі файли перекладу" + +msgid "Merging differences..." +msgstr "Злиття відмінностей..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s': некоректний POT-файл." + +msgid "(Use default language)" +msgstr "(Мова за замовчанням)" + +msgid "Select your preferred language" +msgstr "Виберіть бажану мову" + +msgid "Language selection" +msgstr "Вибір мови" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Зміни набудуть чинності після перезапуску Poedit." + +msgid "Downloading translations is disabled in this project." +msgstr "Завантаження перекладів відключена в цьому проекті." + +msgid "Not authorized, please sign in again." +msgstr "Не авторизовані, повторіть вхід до будь ласка." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin це онлайн платформа управління локалізаціями та інструмент для " +"спільного перекладу. Poedit можна легко синхронізувати файли PO керованих в " +"Crowdin." + +msgid "Sign In" +msgstr "Увійти" + +msgid "Sign in" +msgstr "Увійти" + +msgid "Sign Out" +msgstr "Вийти" + +msgid "Sign out" +msgstr "Вийти" + +msgid "Waiting for authentication…" +msgstr "Очікування автентифікації…" + +msgid "Updating user information…" +msgstr "Оновлення відомостей про користувача…" + +msgid "Signed in as:" +msgstr "Увійшли як:" + +msgid "Learn More About Crowdin" +msgstr "Дізнатися більше про Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Дізнатися більше про Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Увійти до Crowdin" + +msgid "Open Crowdin translation" +msgstr "Відкрити переклад Crowdin" + +msgid "Project:" +msgstr "Проект:" + +msgid "Language:" +msgstr "Мова:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Немає перекладацьких проектів у вашому обліковому записі Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Цей проект не немає файлів, які можуть бути переведені в Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Цей файл можна редагувати тільки за допомогою веб-інтерфейсу Crowdin." + +msgid "Downloading latest translations…" +msgstr "Завантажити найновіший переклад…" + +msgid "Syncing with Crowdin" +msgstr "Синхронізація з Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Не вдалось синхронізувати з Crowdin." + +msgid "Crowdin error" +msgstr "Помилка Crowdin" + +msgid "Uploading translations…" +msgstr "Відправка перекладу…" + +msgid "&Copy" +msgstr "&Копіювати" + +msgid "Learn more" +msgstr "Дізнатися більше" + +msgid "Learn More" +msgstr "Дізнатися більше" + +#, c-format +msgid "Failed command: %s" +msgstr "Не вдалося виконати команду: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Не вдалося злити gettext-каталоги." + +msgid "Scanning files..." +msgstr "Сканування файлів..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Аналіз %s файлів..." + +msgid "Failed to load extracted catalog." +msgstr "Не вдалося завантажити добутий каталог." + +msgid "&Help" +msgstr "&Довідка" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Файли MO не можна редагувати безпосередньо в Poedit." + +msgid "Error opening file" +msgstr "Не вдалося відкрити файл" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Будь ласка, відкрийте і редагуйте відповідний PO файл. Коли ви збережете " +"його, MO файл також оновиться." + +msgid "don't delete temporary files (for debugging)" +msgstr "не видаляти тимчасові файли (для зневадження)" + +msgid "handle a poedit:// URI" +msgstr "handle a poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Помилка зв’язку з процесом Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Сталося непередбачене виключення: %s" + +msgid "Unhandled exception occurred." +msgstr "Сталося непередбачене виключення." + +msgid "Open catalog" +msgstr "Відкрити каталог" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Файл '%s' не існує." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Про %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Версія %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Сервіси" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Приховати %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Приховати інші" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Показати все" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Вийти з %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit — простий редактор перекладів." + +msgid "Catalogs Manager" +msgstr "Менеджер каталогів" + +msgid "Check for Updates..." +msgstr "Перевірити оновлення." + +msgid "&Edit" +msgstr "&Правка" + +msgid "Undo" +msgstr "Скасувати" + +msgid "Redo" +msgstr "Відновити" + +msgid "Paste and Match Style" +msgstr "Вставити в поточному стилі" + +msgid "Delete" +msgstr "Вилучити" + +msgid "Spelling and Grammar" +msgstr "Перевірка орфографії та граматики" + +msgid "Show Spelling and Grammar" +msgstr "Показати орфографічні та граматичні помилки" + +msgid "Check Document Now" +msgstr "Перевірити документ зараз" + +msgid "Check Spelling While Typing" +msgstr "Перевіряти орфографію під час введення" + +msgid "Check Grammar With Spelling" +msgstr "Перевірити граматику і правопис" + +msgid "Correct Spelling Automatically" +msgstr "Виправляти правопис автоматично" + +msgid "Substitutions" +msgstr "Заміни" + +msgid "Show Substitutions" +msgstr "Показати заміни" + +msgid "Smart Copy/Paste" +msgstr "Розумне копіювання/вставка" + +msgid "Smart Quotes" +msgstr "Розумні цитати" + +msgid "Smart Dashes" +msgstr "Розумні тире" + +msgid "Smart Links" +msgstr "Розумні посилання" + +msgid "Text Replacement" +msgstr "Заміна тексту" + +msgid "Transformations" +msgstr "Перетворення" + +msgid "Make Upper Case" +msgstr "Зробити у верхньому регістрі" + +msgid "Make Lower Case" +msgstr "Зробити у нижньому регістрі" + +msgid "Capitalize" +msgstr "Великими буквами" + +msgid "Speech" +msgstr "Мовлення" + +msgid "Start Speaking" +msgstr "Почати озвучування" + +msgid "Stop Speaking" +msgstr "Зупинити озвучування" + +msgid "&View" +msgstr "&Вигляд" + +msgid "Enter Full Screen" +msgstr "Перейти в повноекранний режим" + +msgid "Window" +msgstr "Вікно" + +msgid "Minimize" +msgstr "Мінімізувати" + +msgid "Zoom" +msgstr "Наблизити" + +msgid "Bring All to Front" +msgstr "Вивести всі передній план" + +msgid "PO Translation" +msgstr "PO переклад" + +msgid "The file cannot be opened." +msgstr "Файл не може бути відкритий." + +msgid "Invalid file" +msgstr "Неправильний файл" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Файл може бути або пошкоджений, або у форматі, який не підтримується Poedit." + +msgid "&Undo" +msgstr "&Скасувати" + +msgid "&Redo" +msgstr "&Відновити" + +msgid "Cu&t" +msgstr "Ви&різати" + +msgid "Cut" +msgstr "Вирізати" + +msgid "Copy" +msgstr "Копіювати" + +msgid "&Paste" +msgstr "&Вставити" + +msgid "Paste" +msgstr "Вставити" + +msgid "&Delete" +msgstr "&Вилучити" + +msgid "Select &All" +msgstr "Вибрати &все" + +msgid "Select All" +msgstr "Вибрати усе" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Не можна перетягувати на вікно Poedit більш аніж один файл." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "«%s» не є каталогом повідомлень." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "Пере&йти" + +msgid "Source text:" +msgstr "Оригінал:" + +msgid "Singular:" +msgstr "Однина:" + +msgid "Plural:" +msgstr "Множина:" + +msgid "Translation:" +msgstr "Переклад:" + +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 файли - лише шаблони і самі не містять будь-яких перекладів.\n" +" Щоб зробити переклад, створіть новий файл PO, заснованому на цьому шаблоні." + +msgid "Create New Translation" +msgstr "Створити новий переклад" + +msgid "Create new translation" +msgstr "Створити новий переклад" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Перевірка орфографії відключена, тому що словник для %s не встановлений." + +msgid "Install" +msgstr "Встановити" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталог змінено. Зберегти зміни?" + +msgid "Save changes" +msgstr "Зберегти зміни" + +msgid "Your changes will be lost if you don't save them." +msgstr "Зміни буде стерто, якщо ви їх не збережете." + +msgid "Save" +msgstr "Зберегти" + +msgid "Don't save" +msgstr "Не зберігати" + +msgid "Don't Save" +msgstr "Не зберігати" + +msgid "Save as..." +msgstr "Зберегти як" + +msgid "Compile to..." +msgstr "Компілювати в ..." + +msgid "Compiled Translation Files" +msgstr "Скомпільовані файли перекладу" + +msgid "Export as..." +msgstr "Експортувати як..." + +msgid "HTML Files" +msgstr "HTML файли" + +msgid "Open catalog template" +msgstr "Відкрити шаблон каталогу" + +msgid "Updating catalog" +msgstr "Поновлюю каталог..." + +msgid "Source code not available." +msgstr "Вихідний код не доступний." + +msgid "Updating failed" +msgstr "Оновлення не вдалося" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Переклади не можуть бути оновлені з вихідного коду, тому вихідний код не був " +"знайдений в папці, зазначеної у властивостях каталогу." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Напевне, у каталозі є неправильні записи." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Не вдалося поновити каталог. Отримайте детальнішу інформацію, натиснувши " +"«Деталі»." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Знайдено %d проблему з перекладом." +msgstr[1] "Знайдено %d проблеми з перекладом." +msgstr[2] "Знайдено %d проблем із перекладом." + +msgid "Validation results" +msgstr "Результати перевірки" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Елементи з помилками позначені червоним у списку. Перегляньте деталі " +"помилки, виділивши елемент." + +msgid "The file was saved safely." +msgstr "Файл був успішно збережений." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файл був збережений і скомпільований в формат MO. Але він може працювати " +"некоректно." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "Файл збережений, але не може бути зібраний як MO та використаний." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Файл був скомпільований в формат MO, але швидше за все не буде правильно " +"працювати." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Не вдається скомпілювати даний файл у формат MO для подальшого використання." + +msgid "No problems with the translation found." +msgstr "Переклад не має проблем. :)" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Переклад готовий до використання, але %d запис ще не перекладено." +msgstr[1] "Переклад готовий до використання, але %d записи ще не перекладено." +msgstr[2] "Переклад готовий до використання, але %d записів ще не перекладено." + +msgid "The translation is ready for use." +msgstr "Переклад готовий до використання." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit автоматично виправив хибний вміст у файлі „%s“." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Файл містив дубльовані елементи, що не дозволяються у PO-файлах і " +"унеможливлює використання файла. Poedit виправив цю помилку, проте Ви " +"повинні переглянути переклади, позначені як „неточні“, та за потреби їх " +"виправити." + +msgid "Language of the translation isn't set." +msgstr "Мова перекладу не вказана." + +msgid "Set Language" +msgstr "Вибрати мову" + +msgid "Set language" +msgstr "Вибрати мову" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Пропозиції будуть недоступними, якщо неправильно вказано мову перекладу. " +"Інші функції, такі як форми множини, також можуть бути порушені." + +msgid "Language of the translation is the same as source language." +msgstr "Мова перекладу така сама, як і вихідна мова." + +msgid "Fix Language" +msgstr "Встановити мову" + +msgid "Fix language" +msgstr "Встановити мову" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Каталог містить елементи з формами множини, але не має налаштованого " +"заголовку Plural-Forms." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Елементи цього каталогу мають форми множини, відмінні від вказаних у " +"заголовку Plural-Forms." + +msgid "Required header Plural-Forms is missing." +msgstr "Відсутній обов’язковий заголовок Plural-Forms." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Синтаксична помилка в заголовку Plural-Forms («%s»)." + +msgid "Fix the Header" +msgstr "Виправити заголовок" + +msgid "Fix the header" +msgstr "Виправити заголовок" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Вираз форми множини, вжитий у каталозі, незвичний для %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Огляд" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Помилка завантаження файлу каталогу '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Перекладено: %d of %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Лишилось: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d помилка" +msgstr[1] "%d помилки" +msgstr[2] "%d помилок" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d елемент" +msgstr[1] "%d елементи" +msgstr[2] "%d елементів" + +msgid " (unsaved)" +msgstr " (не збережено)" + +msgid " (modified)" +msgstr " (змінено)" + +msgid "Go" +msgstr "Перейти" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Не вдалося оновити пам'ять перекладів: %s" + +msgid "Purge deleted translations" +msgstr "Знищити вилучені переклади" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Що робити з невикористаним перекладом?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Точно вилучити з каталогу усі невикористані переклади? Якщо вони знову " +"знадобляться в майбутньому, вам доведеться ще раз перекладати їх." + +msgid "Keep" +msgstr "Залишити" + +msgid "Purge" +msgstr "Знищити" + +msgid "Fill missing translations from TM" +msgstr "Заповнити відсутні переклади з пам'яті перекладів" + +msgid "Only fill in exact matches" +msgstr "Заповнити тільки при точних спвпадіннях" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"По-замовчуванням результати які не повністю співпадають всеодно будуть " +"заповнені але помічені неточними." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Не позначати точні співпадіння неточними" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Увімкніть це тільки якщо ви впевнені в якості вашій пам'яті перекладів. За " +"замовчуванням всі збіги з пам'яті перекладів помічаються як неточні і " +"підлягають перевірці." + +msgid "Fill" +msgstr "Заповнити" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d елемент було заповнено з пам'яті перекладів." +msgstr[1] "%d елементи було заповнено з пам'яті перекладів." +msgstr[2] "%d елементів було заповнено з пам'яті перекладів." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "Переклади були відзначені як неточні. Перевірте їх правильність." + +msgid "No entries could be filled from the translation memory." +msgstr "Немає елементів, які можуть бути заповнені з пам'яті перекладів." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Пам'ять перекладів не містить ніяких рядків, схожих на вміст цього файлу. " +"Вона підходить тільки для напівавтоматичного перекладу після того, як Poedit " +"збере достатньо даних з файлів, які ви перевели самостійно." + +msgid "Translating" +msgstr "Перекладається" + +msgid "Filling missing translations from TM..." +msgstr "Заповнити відсутні переклади з пам'яті перекладів..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Перекладено %u стрічку" +msgstr[1] "Перекладено %u стрічки" +msgstr[2] "Перекладено %u стрічок" + +msgid "Copy from source text" +msgstr "&Дублювати оригінал" + +msgid "Copy from Source Text" +msgstr "&Дублювати оригінал" + +msgid "Clear translation" +msgstr "&Стерти переклад" + +msgid "Clear Translation" +msgstr "&Стерти переклад" + +msgid "Edit comment" +msgstr "Зміна коментаря" + +msgid "Edit Comment" +msgstr "Редагувати коментар" + +msgid "References:" +msgstr "Посилання:" + +msgid "Everything" +msgstr "Усе" + +#, c-format +msgid "Form %i" +msgstr "Форма %i" + +msgid "Singular" +msgstr "Однина" + +msgid "Zero" +msgstr "Нуль" + +msgid "One" +msgstr "Один" + +msgid "Two" +msgstr "Два" + +msgid "Plural" +msgstr "Множина" + +msgid "Other" +msgstr "Інше" + +msgid "&Bookmarks" +msgstr "Зак&ладки" + +#, c-format +msgid "Set bookmark %i" +msgstr "Додати закладку %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Перейти до закладки %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Додати закладку %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Перейти до закладки %i" + +msgid "Hide Sidebar" +msgstr "Приховати бічну панель" + +msgid "Show Sidebar" +msgstr "Показати бічну панель" + +msgid "Hide Status Bar" +msgstr "Приховати панель стану" + +msgid "Show Status Bar" +msgstr "Показати панель стану" + +msgid "Source text" +msgstr "Оригінал" + +msgid "Translation" +msgstr "Переклад" + +msgid "ID" +msgstr "Ідентифікатор" + +#, c-format +msgid "Source text — %s" +msgstr "Вихідний текст — %s" + +msgid "unknown language" +msgstr "невідома мова" + +#, c-format +msgid "Translation — %s" +msgstr "Переклад — %s" + +msgid "Error:" +msgstr "Збій:" + +msgid "Source file" +msgstr "Джерельний файл" + +msgid "Source file occurrence:" +msgstr "Розташування джерельного файлу:" + +msgid "Open in Editor" +msgstr "Відкрити в редакторі" + +msgid "Open in editor" +msgstr "Відкрити в редакторі" + +msgid "No references for the selected item." +msgstr "Немає посилання для вибраного елемента." + +#, c-format +msgid "Error opening file %s!" +msgstr "Помилка при відкритті файлу '%s'!" + +msgid "Find" +msgstr "Знайти" + +msgid "Replace" +msgstr "Замінити" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Опції" + +msgid "Ignore case" +msgstr "Ігнорувати регістр" + +msgid "Wrap around" +msgstr "По колу" + +msgid "Whole words only" +msgstr "Лише повні слова" + +msgid "Find in source texts" +msgstr "Шукати у вихідних текстах" + +msgid "Find in translations" +msgstr "Пошук у перекладах" + +msgid "Find in comments" +msgstr "Шукати в коментарях" + +msgid "Close" +msgstr "Закрити" + +msgid "Replace All" +msgstr "Замінити всі" + +msgid "Replace all" +msgstr "Замінити всі" + +msgid "< &Previous" +msgstr "< &Попереднє" + +msgid "&Next >" +msgstr "&Наступне >" + +msgid "String to find" +msgstr "Рядок пошуку" + +msgid "Replacement string" +msgstr "Рядок заміни" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Не вдалося виконати програму: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Код мови або назва (напр. en_GB)" + +msgid "Translation Language" +msgstr "Мова перекладу" + +msgid "Language of the translation:" +msgstr "Мова перекладу:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit. Менеджер каталогів" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Всього" + +msgid "Untrans" +msgstr "Без перекладу" + +msgid "Fuzzy" +msgstr "Неточно" + +msgid "Bad Tokens" +msgstr "Неправильні лексеми" + +msgid "Last modified" +msgstr "Останні зміни" + +msgid "Select directory" +msgstr "Виберіть теку" + +msgid "Directories:" +msgstr "Теки:" + +msgid "" +msgstr "<без назви>" + +msgid "Do you want to delete the project?" +msgstr "Ви дійсно хочете вилучити проект?" + +msgid "Confirmation" +msgstr "Підтвердження" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Ви дійсно хочете поновити\n" +"всі каталоги цього проекту?" + +msgid "Information about the translator" +msgstr "Інформація про перекладача" + +msgid "Name:" +msgstr "Ім'я:" + +msgid "Your Name" +msgstr "Ваше ім'я" + +msgid "Email:" +msgstr "Emaіl:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ваше ім'я та пошта будуть використовуватися тільки при вказівці останнього " +"перекладача в заголовках GNU gettext файлів." + +msgid "Editing" +msgstr "Редагування" + +msgid "Automatically compile MO file when saving" +msgstr "Автоматично компілювати файл MO при збереженні" + +msgid "Show summary after catalog update" +msgstr "Показувати підсумок після поновлення каталогу" + +msgid "Check spelling" +msgstr "Перевірка правопису" + +msgid "Always change focus to text input field" +msgstr "Завжди встановлювати фокус у поле вводу тесту" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ніколи не дозволяйте списку рядків отримати фокус. Якщо активовано, можна " +"використовувати Ctrl+стрілки для навігації за допомогою клавіатури, але ввід " +"тексту можна починати одразу не натискаючи Tab для зміни фокусу." + +msgid "Appearance" +msgstr "Зовнішній вигляд" + +msgid "Use custom list font:" +msgstr "Використовувати користувацький шрифт для списку:" + +msgid "Use custom text fields font:" +msgstr "Використовувати користувальницький текст в полях вводу:" + +msgid "Change UI language" +msgstr "Змінити мову інтерфейсу" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(потрібно Windows 8 або пізнішої версії)" + +msgid "General" +msgstr "Загальні" + +msgid "Use translation memory" +msgstr "Використовувати па'ять перекладів" + +msgid "Learn From Files..." +msgstr "Зібрати з файлів.." + +msgid "Learn from files..." +msgstr "Зібрати з файлів.." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Скинути" + +msgid "Consult TM when updating from sources" +msgstr "Використовувати пам'ять перекладів при оновленні з вихідного коду" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Якщо відмічена ця опція, Poedit спробує заповнити нові елементи, " +"використовуючи ваші попередні\n" +"переклади, збережені у пам'яті перекладів. Якщо пам'ять перекладів \n" +"майже порожня, це буде не дуже ефективно. Чим більше перекладів\n" +"ви редагуєте і чим більшою стає пам'ять перекладів, тим кращою стає ця опція." + +msgid "Stored translations:" +msgstr "Збережені переклади:" + +msgid "Database size on disk:" +msgstr "Розмір бази даних на диску:" + +msgid "Select translation files to import" +msgstr "Виберіть файли перекладу для імпорту" + +msgid "Translation Memory" +msgstr "Пам'ять перекладів" + +msgid "Importing translations..." +msgstr "Імпортування перекладів..." + +msgid "Finalizing..." +msgstr "Завершення..." + +msgid "Reset translation memory" +msgstr "Скинути па'ять перекладів" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Ви впевнені, що хочете очистити пам'ять перекладів?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"При очищені пам'яті перекладів будуть безповоротно видалені всі збережені " +"переклади. Ви не зможете скасувати цю операцію." + +msgid "Cancel" +msgstr "Скасувати" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Пам'ять перекладів" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Екстрактори використовуються для пошуку рядків, що перекладаються, у файлах " +"вихідного коду і витягують їх так, щоб їх можна було перевести." + +msgid "New" +msgstr "Новий" + +msgid "Edit" +msgstr "Редагувати" + +msgid "Delete extractor" +msgstr "Видалити екстрактор" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Ви впевнені, що бажаєте видалити екстрактор \"%s\"?" + +msgid "Extractors" +msgstr "Екстрактори" + +msgid "Accounts" +msgstr "Облікові записи" + +msgid "Automatically check for updates" +msgstr "Автоматично перевіряти оновлення" + +msgid "Include beta versions" +msgstr "Включити бета-версії" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Бета-версії містять новітні функції і поліпшення, але можуть бути менш " +"стабільними." + +msgid "Updates" +msgstr "Оновлення" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ці параметри впливають на внутрішнє форматування файлів PO. Скоректуйте їх, " +"якщо у вас є спеціальні вимоги, наприклад, якщо ви користуєтеся системою " +"контролю версій." + +msgid "Line endings:" +msgstr "Закінчення рядків:" + +msgid "Unix (recommended)" +msgstr "Unix (рекомендовано)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Перенос:" + +msgid "Preserve formatting of existing files" +msgstr "Зберігати форматування існуючих файлів" + +msgid "Advanced" +msgstr "Розширені параметри" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Налаштування %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Перетягніть теки сюди\n" +"\n" +"або використайте кнопку „+“" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Перетягніть теки сюди\n" +"\n" +"або використайте кнопку „+“" + +msgid "Add Folders..." +msgstr "Додати теки..." + +msgid "Add folders..." +msgstr "Додати теки..." + +msgid "Add Files..." +msgstr "Додати файли..." + +msgid "Add files..." +msgstr "Додати файли..." + +msgid "Add Wildcard..." +msgstr "Додати шаблон..." + +msgid "Add wildcard..." +msgstr "Додати шаблон..." + +msgid "Paths" +msgstr "Шляхи" + +msgid "Excluded paths" +msgstr "Виключені шляхи" + +msgid "Additional keywords" +msgstr "Додаткові ключові слова" + +msgid "Name of the project the translation is for" +msgstr "Назва проекту, для якого призначений переклад" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "напр. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (рекомендовано)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Будь ласка, спершу збережіть файл. Цей розділ не можна редагувати до тих пір." + +msgid "Comment:" +msgstr "Коментар:" + +msgid "OK" +msgstr "Гаразд" + +msgid "C&lear" +msgstr "&Стерти" + +msgid "Clear the comment" +msgstr "Очистити коментар" + +msgid "Create new translations project" +msgstr "Створити новий проект перекладів" + +msgid "Edit the project" +msgstr "Змінити проект" + +msgid "Delete the project" +msgstr "Вилучити проект" + +msgid "Update all" +msgstr "Поновити усе" + +msgid "Update all catalogs in the project" +msgstr "Поновити усі каталоги в цьому проекті" + +msgid "Edit project" +msgstr "Зміна проекту" + +msgid "Project name:" +msgstr "Назва проекту:" + +msgid "Browse" +msgstr "Вибрати" + +msgid "Add directory to the list" +msgstr "Додати теку до списку" + +msgid "&New..." +msgstr "&Нові..." + +msgid "New from &POT/PO file..." +msgstr "Новий з &POT/PO-файлу..." + +msgid "New From &POT/PO File..." +msgstr "Новий з &POT/PO-файлу..." + +msgid "&Open..." +msgstr "&Відкрити..." + +msgid "Open Recent" +msgstr "Відкрити нещодавні" + +msgid "Open from Crowdin..." +msgstr "Відкрити на Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Відкрити на Crowdin..." + +msgid "&Close" +msgstr "З&акрити" + +msgid "&Save" +msgstr "&Зберегти" + +msgid "Save &as..." +msgstr "Зберегти &як..." + +msgid "Save &As..." +msgstr "Зберегти &як..." + +msgid "Compile to MO..." +msgstr "Компілювати в MO..." + +msgid "E&xport as HTML..." +msgstr "E&кспортувати як HTML..." + +msgid "Check for updates..." +msgstr "Перевірити наявність оновлень..." + +msgid "&Preferences..." +msgstr "&Налаштування..." + +msgid "Catalogs &manager" +msgstr "Менеджер &каталогів" + +msgid "Catalogs &Manager" +msgstr "Менеджер &каталогів" + +msgid "E&xit" +msgstr "&Вихід" + +msgid "Quit" +msgstr "Вийти" + +msgid "Copy from singular" +msgstr "Копіювати форму однини" + +msgid "Copy From Singular" +msgstr "Копіювати форму однини" + +msgid "Translation is &fuzzy" +msgstr "Переклад не&точний" + +msgid "Translation Is &Fuzzy" +msgstr "Переклад не&точний" + +msgid "Edit &comment" +msgstr "Змінити &коментар" + +msgid "Edit &Comment" +msgstr "Редагувати &коментар" + +msgid "Suggestions" +msgstr "Пропозиції" + +msgid "&Show references" +msgstr "&Показувати посилання" + +msgid "&Show References" +msgstr "&Показувати посилання" + +msgid "&Find..." +msgstr "&Знайти..." + +msgid "Replace..." +msgstr "Замінити..." + +msgid "Find next" +msgstr "Знайти наступне" + +msgid "Find previous" +msgstr "Знайти попереднє" + +msgid "Find and Replace..." +msgstr "Знайти і замінити..." + +msgid "Find Next" +msgstr "Знайти наступне" + +msgid "Find Previous" +msgstr "Знайти попереднє" + +msgid "&Preferences" +msgstr "&Налаштування" + +msgid "Display entry &IDs" +msgstr "Показувати &ID елементів" + +msgid "Display Entry &IDs" +msgstr "Показувати &ID елементів" + +msgid "Sort by &file order" +msgstr "Сортувати за положенням у &файлі" + +msgid "Sort by &File Order" +msgstr "Сортувати за положенням у &файлі" + +msgid "Sort by &source" +msgstr "Сортувати за &оригіналом" + +msgid "Sort by &Source" +msgstr "Сортувати за &оригіналом" + +msgid "Sort by &translation" +msgstr "Сортувати за &перекладом" + +msgid "Sort by &Translation" +msgstr "Сортувати за &перекладом" + +msgid "&Group by context" +msgstr "&Групувати по контексту" + +msgid "&Group By Context" +msgstr "&Групувати по контексту" + +msgid "Entries with errors first" +msgstr "Записи з помилками - згори" + +msgid "Entries with Errors First" +msgstr "Записи з помилками - згори" + +msgid "&Untranslated entries first" +msgstr "&Неперекладене — згори" + +msgid "&Untranslated Entries First" +msgstr "Неперекладене — &згори" + +msgid "Show sidebar" +msgstr "Показати бічну панель" + +msgid "Show status bar" +msgstr "Показати панель стану" + +msgid "C&atalog" +msgstr "&Каталог" + +msgid "&Update from sources" +msgstr "&Поновити з джерельних кодів" + +msgid "&Update from Sources" +msgstr "Поновити з &джерельних кодів" + +msgid "Update from &POT file..." +msgstr "Поновити з POT-файлу..." + +msgid "Update from &POT File..." +msgstr "Поновити з POT-&файлу..." + +msgid "Sync with Crowdin" +msgstr "Синхронізація з Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Заповнити відсутні переклади з пам'яті перекладів..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Заповнити відсутні переклади з пам'яті перекладів..." + +msgid "&Purge deleted translations" +msgstr "&Знищити вилучені переклади" + +msgid "&Purge Deleted Translations" +msgstr "&Знищити вилучені переклади" + +msgid "&Validate translations" +msgstr "&Перевірити переклад" + +msgid "&Validate Translations" +msgstr "&Перевірити переклад" + +msgid "&Properties..." +msgstr "&Властивості..." + +msgid "&Done and next" +msgstr "&Далі" + +msgid "&Done and Next" +msgstr "&Далі" + +msgid "&Previous translation" +msgstr "Попередній переклад" + +msgid "&Previous Translation" +msgstr "Попередній переклад" + +msgid "&Next translation" +msgstr "Наступний переклад" + +msgid "&Next Translation" +msgstr "Наступний переклад" + +msgid "P&revious unfinished" +msgstr "До п&опереднього незавершеного" + +msgid "P&revious Unfinished" +msgstr "До п&опереднього незавершеного" + +msgid "Ne&xt unfinished" +msgstr "До н&аступного незавершеного" + +msgid "Ne&xt Unfinished" +msgstr "До н&аступного незавершеного" + +msgid "Previous plural form" +msgstr "Попередня форма множини" + +msgid "Previous Plural Form" +msgstr "Попередня форма множини" + +msgid "Next plural form" +msgstr "Наступна форма множини" + +msgid "Next Plural Form" +msgstr "Наступна форма множини" + +msgid "&Online help" +msgstr "&Онлайн-довідка" + +msgid "&Online Help" +msgstr "&Онлайн-довідка" + +msgid "&GNU gettext manual" +msgstr "&Документація GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Документація GNU gettext" + +msgid "&About Poedit" +msgstr "&Про Poedit..." + +msgid "&About" +msgstr "&Про програму..." + +msgid "Extractor setup" +msgstr "Налаштування екстрактора" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Список розширень, розділених крапкою з комою (наприклад, *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Виклик:" + +msgid "Command to extract translations:" +msgstr "Команда для видобування перекладу:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ця команда запускає екстрактор.\n" +"%o означає назву вихідного файлу, %K — список\n" +"ключових слів, %F — список вхідних файлів,\n" +"%C — кодування (див. нижче)." + +msgid "An item in keywords list:" +msgstr "Елемент списку ключових слів:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Це буде додано до командного рядку для кожного\n" +"ключового слова. %k замінюється на ключове слово." + +msgid "An item in input files list:" +msgstr "Елемент в списку вхідних файлів:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Це буде додано до командного рядку для кожного\n" +"вхідного файлу. %f замінюється на ім'я файлу." + +msgid "Source code charset:" +msgstr "Кодування файлів з джерельним кодом:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Це буде додано до командного рядку лише якщо вказано\n" +"кодування файлів з вихідними кодами. %c замінюється на кодування." + +msgid "Catalog properties" +msgstr "Властивості каталогу" + +msgid "Project name and version:" +msgstr "Назва та версія проекту:" + +msgid "Plural Forms:" +msgstr "Форми множини:" + +msgid "Use default rules for this language" +msgstr "Використовувати стандартні правила для цієї мови" + +msgid "Use custom expression" +msgstr "Використовувати користувальницький вираз" + +msgid "Learn about plural forms" +msgstr "Дізнатися більше про форми множини" + +msgid "Charset:" +msgstr "Кодування каталогу:" + +msgid "Team:" +msgstr "Команда:" + +msgid "Team's email address:" +msgstr "Електронна пошта команди:" + +msgid "Translation properties" +msgstr "Властивості перекладу" + +msgid "Sources paths" +msgstr "Шлях до джерела" + +msgid "Extract text from source files in the following directories:" +msgstr "Шукати джерельний текст у наступних теках:" + +msgid "Base path:" +msgstr "Базовий шлях:" + +msgid "Sources keywords" +msgstr "Ключові слова" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Використовувати ці ключові слова (назви функцій) додатково до\n" +"типових для розпізнавання у джерельних файлах рядків,\n" +"придатних для перекладу." + +msgid "Learn about gettext keywords" +msgstr "Дізнатися більше про ключові слова gettext" + +msgid "Update summary" +msgstr "Підсумок про поновлення" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ці рядки було знайдено у джерельних текстах, але вони відсутні у каталозі.\n" +"Poedit додасть їх до каталогу." + +msgid "New strings" +msgstr "Нові рядки" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Цих рядків вже немає у джерельних текстах.\n" +"Poedit вилучить їх з каталогу." + +msgid "Obsolete strings" +msgstr "Застарілі рядки" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 нових, 0 застарілих)" + +msgid "Open" +msgstr "Відкрити" + +msgid "Save catalog" +msgstr "Зберегти каталог" + +msgid "Validate" +msgstr "Перевірити" + +msgid "Check for errors in the translation" +msgstr "Первірити переклад на наявність помилок" + +msgid "Update" +msgstr "Поновити" + +msgid "Update catalog - synchronize it with sources" +msgstr "Поновлення каталогу — синхронізація з джерельними текстами" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Натиснуто, якщо рядок містить неточний переклад" + +msgid "Show or hide the sidebar" +msgstr "Показати або сховати бічну панель" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Попередній вихідний текст:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Старий вихідний текст (до оновлення), якому відповідає нечіткий переклад." + +msgid "Notes for translators:" +msgstr "Примітка для перекладачів:" + +msgid "Add comment" +msgstr "Додати коментар" + +msgid "Add Comment" +msgstr "Додати коментар" + +msgid "Translation suggestions:" +msgstr "Варіанти перекладу:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Збігів не знайдено" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Збігів не знайдено" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Цей рядок був знайдений в пам'яті перекладів Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Нових: %i, застарілих: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Імпортування перекладів: %d" + +msgid "Poedit Update" +msgstr "Оновлення PoEdit" + +msgid "Preparing migration..." +msgstr "Підготовка міграції..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Статус закінчення міграції: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "PoEdit необхідно перетворити вашу пам'ять перекладів у новий формат." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Це необхідно зробити перед запуском Poedit. Якщо у вас збережено багато " +"перекладів, на це може знадобитися кілька хвилин. Але зазвичай це " +"виконується набагато швидше." + +msgid "Proceed" +msgstr "Продовжити" + +msgid "Translation memory migration failed." +msgstr "Міграція пам'яті перекладів не вдалась." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Дані пам'яті перекладів не вдалося мігрувати. Виникла помилка: \n" +"\n" +"%s \n" +"Відправте цю помилку за адресою help@poedit.net, і ми займемося її рішенням." + +msgid "Cannot create temporary directory." +msgstr "Не вдалося створити тимчасову теку." + +msgid "Welcome to Poedit" +msgstr "Ласкаво просимо в Poedit" + +msgid "Edit a translation" +msgstr "Редагувати переклад" + +msgid "Open an existing PO file and edit the translation." +msgstr "Відкрити наявний PO-файл та редагувати переклад." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Створення перекладу на основі існуючого PO-файлу або POT-шаблону." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Спільна робота над перекладом з Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Завантажити файл з проекту Crowdin, перекласти та синхронізувати зміни назад." + +msgid "What is Crowdin?" +msgstr "Що таке Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Дивно, але переклад відсутній." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Записи, що перекладаються, не додаються вручну в систему Gettext, а " +"автоматично витягуються з вихідного коду. \n" +"Таким чином забезпечується їх актуальність і точність. \n" +"Перекладачі зазвичай працюють з PO-файлами (POT-шаблони), які підготував для " +"них розробник." + +msgid "(Learn more about GNU gettext)" +msgstr "(Більше про GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Найпростіший спосіб перевести цей каталог - оновити його з POT:" + +msgid "Update from POT" +msgstr "Оновити з &POT-файлу..." + +msgid "Take translatable strings from an existing POT template." +msgstr "Витяг рядків для перекладу з існуючого POT-шаблону." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Рядки що перекладаються можна також отримати безпосередньо з вихідного коду:" + +msgid "Extract from sources" +msgstr "Видобути з джерел" + +msgid "Configure source code extraction in Properties." +msgstr "Налаштувати видобуток вихідного коду у Властивостях." + +msgid "Sync" +msgstr "Синхронізувати" + +msgid "Synchronize the translation with Crowdin" +msgstr "Синхронізувати переклад з Crowdin" diff --git a/locales/uz.mo b/locales/uz.mo new file mode 100644 index 0000000000000000000000000000000000000000..828ac2507a4584c39c626902eccc86ea4de72aff GIT binary patch literal 47038 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 JBkW^k{~JdQutER; literal 0 HcmV?d00001 diff --git a/locales/uz.po b/locales/uz.po new file mode 100644 index 0000000..4df3c11 --- /dev/null +++ b/locales/uz.po @@ -0,0 +1,1968 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Uzbek\n" +"Language: uz_UZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: uz\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ushbu ogohlantirish xabarini yashirish" + +msgid "Don't Show Again" +msgstr "Boshqa ko‘rsatilmasin" + +msgid "Don't show again" +msgstr "Boshqa ko‘rsatilmasin" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i qator ('%s' fayldagi) to‘g‘ri yuklanmagan." +msgstr[1] "%i qator ('%s' fayldagi) to‘g‘ri yuklanmagan." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "%d-qator ('%s' fayldagi) buzilgan (to‘g‘ri %s ma’lumotlar emas)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Noto‘g‘ri formatdagi bosh qator: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Buzilgan katalog fayli: msgstr’ning birlik shakli msgid_plural bilan birga " +"ishlatilgan" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Katalog faylida xatolik: msgstr ning ko'plik shakli msgid_plural siz " +"ishlatilgan" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Katalogni yuklashda xatolik ro‘y berdi. Ba’zi ma’lumotlar bo'lmasligi yoki " +"natija sifatida buzilgan bo‘lishi mumkin." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "%s faylini yuklab bo‘lmaydi, u buzilgan bo‘lishi mumkin." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' fayli faqat o‘qish uchun, shuning uchun uni saqlab bo‘lmaydi.\n" +"Uni boshqa nom bilan saqlang." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s fayl saqlanmadi." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Faylni formatlashda muammo yuz berdi (ammo u yaxshi saqlangandi)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Ushbu katalogni katalog sozlamalarida %s kodlash usulida saqlab bo‘lmaydi. \n" +"\n" +"O‘rniga UTF-8 kodlash usulida saqlandi va sozlash muvofiq ravishda " +"o‘zgartirildi." + +msgid "Error saving catalog" +msgstr "Katalogni saqlashda xatolik" + +msgid "PO Translation Files" +msgstr "PO tarjima fayllari" + +msgid "POT Translation Templates" +msgstr "POT tarjima shablonlari" + +msgid "All Translation Files" +msgstr "Barcha tarjima fayllari" + +msgid "Merging differences..." +msgstr "Farqlar birlashtirilmoqda..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' noto‘g‘ri POT fayli." + +msgid "(Use default language)" +msgstr "(Standart tildan foydalanish)" + +msgid "Select your preferred language" +msgstr "Siznig avfzal tilingizni tanlash" + +msgid "Language selection" +msgstr "Tilni tanlash" + +msgid "You must restart Poedit for this change to take effect." +msgstr "" +"O‘zgartirish amalga oshishi uchun Poedit’ni qayta ishga tushirishingiz kerak." + +msgid "Downloading translations is disabled in this project." +msgstr "Tarjimalarni yuklab olish ushbu loyihada o‘chirib qo‘yilgan." + +msgid "Not authorized, please sign in again." +msgstr "Tasdiqdan o‘tmagan, yana kiring." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin onlayn tarjimalarni boshqarish platformasi va hamkorlikda tarjima " +"qilish vositasi hisoblanadi. Poedit PO fayllar bilan ishlash uchun Crowdin " +"tarmog‘i bilan muammosiz sinxronlay oladi." + +msgid "Sign In" +msgstr "Kirish" + +msgid "Sign in" +msgstr "Kirish" + +msgid "Sign Out" +msgstr "Chiqish" + +msgid "Sign out" +msgstr "Chiqish" + +msgid "Waiting for authentication…" +msgstr "Tasdiqdan o‘tkazilmoqda…" + +msgid "Updating user information…" +msgstr "Foydalanuvchi ma’lumoti yangilanmoqda…" + +msgid "Signed in as:" +msgstr "Foydalanuvchi:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin haqida ko‘proq ma’lumot olish" + +msgid "Learn more about Crowdin" +msgstr "Crowdin haqida ko‘proq ma’lumot olish" + +msgid "Sign in to Crowdin" +msgstr "Crowdin saytiga kiring" + +msgid "Open Crowdin translation" +msgstr "Crowdin tarjimasini ochish" + +msgid "Project:" +msgstr "Loyiha:" + +msgid "Language:" +msgstr "Til:" + +msgid "File:" +msgstr "Fayl:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Crowdin hisobingizda birorta ham tarjima loyihalari keltirilmagan." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Loyihada Poedit orqali tarjima qilish uchun fayllar yo‘q." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Ushbu faylni faqat Crowdin veb interfeysida tahrirlash mumkin." + +msgid "Downloading latest translations…" +msgstr "So‘nggi tarjimalar yuklab olinmoqda…" + +msgid "Syncing with Crowdin" +msgstr "Crowdin bilan sinxronlanmoqda" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin bilan sinxronlash amalga oshmadi." + +msgid "Crowdin error" +msgstr "Crowdin’da xatolik" + +msgid "Uploading translations…" +msgstr "Tarjimalar yuklab qo‘yilmoqda…" + +msgid "&Copy" +msgstr "&Nusxa olish" + +msgid "Learn more" +msgstr "Batafsil ma’lumot" + +msgid "Learn More" +msgstr "Batafsil ma’lumot" + +#, c-format +msgid "Failed command: %s" +msgstr "Xato buyruq: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext kataloglarini birlashtirishda xatolik." + +msgid "Scanning files..." +msgstr "Fayllar tekshirilmoqda..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s ta fayl ajratilmoqda..." + +msgid "Failed to load extracted catalog." +msgstr "Ajratilgan katalog yuklanmadi." + +msgid "&Help" +msgstr "&Yordam" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Poedit’da MO fayllarni to‘g‘ridan-to‘g‘ri tahrirlab bo‘lmaydi." + +msgid "Error opening file" +msgstr "Faylni ochishda xato yuz berdi" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"O‘rniga mavjud PO faylini oching va tahrirlang. Uni saqlaganingizda, MO fayl " +"ham yangilanadi." + +msgid "don't delete temporary files (for debugging)" +msgstr "vaqtinchalik fayllarni o‘chirmang (nosozlikni hal qilish uchun)" + +msgid "handle a poedit:// URI" +msgstr "poedit:// URI bilan ishlash" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit jarayoni bilan bog‘lab bo‘lmadi." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Qayta ishlab bo‘lmaydigan istisno yuz berdi: %s" + +msgid "Unhandled exception occurred." +msgstr "Qayta ishlab bo‘lmaydigan istisno ro‘y berdi." + +msgid "Open catalog" +msgstr "Katalogni ochish" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' fayli mavjud emas." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s haqida" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "%s versiya" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Xizmatlar" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%sni yashirish" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Boshqalarini yashirish" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Barchasini ko‘rsatish" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%sdan chiqish" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit qulay va oson tarjimalar tahrirlagichidir." + +msgid "Catalogs Manager" +msgstr "Kataloglar menejeri" + +msgid "Check for Updates..." +msgstr "Yangilanishlar uchun tekshirish..." + +msgid "&Edit" +msgstr "&Tahrirlash" + +msgid "Undo" +msgstr "Orqaga qaytarish" + +msgid "Redo" +msgstr "Qayta bajarish" + +msgid "Paste and Match Style" +msgstr "Nusxa olish va joylash uslubi" + +msgid "Delete" +msgstr "O‘chirish" + +msgid "Spelling and Grammar" +msgstr "Imlo va grammatika" + +msgid "Show Spelling and Grammar" +msgstr "Imlo va grammatikani ko‘rsatish" + +msgid "Check Document Now" +msgstr "Hujjatni hozir tekshirish" + +msgid "Check Spelling While Typing" +msgstr "Yozayotganda imlo xatolari tekshirilsin" + +msgid "Check Grammar With Spelling" +msgstr "Grammatik xatolar imlo xatolar bilan birga tekshirilsin" + +msgid "Correct Spelling Automatically" +msgstr "Imlo xatolar avtomatik to‘g‘rilansin" + +msgid "Substitutions" +msgstr "Almashishlar" + +msgid "Show Substitutions" +msgstr "Almashishlarni ko‘rsatish" + +msgid "Smart Copy/Paste" +msgstr "Qulay nusxa olish/Qo‘yish" + +msgid "Smart Quotes" +msgstr "Qulay qo‘shtirnoqlar" + +msgid "Smart Dashes" +msgstr "Qulay tirelar" + +msgid "Smart Links" +msgstr "Qulay linklar" + +msgid "Text Replacement" +msgstr "Matnni almashtirish" + +msgid "Transformations" +msgstr "Transformatsiya" + +msgid "Make Upper Case" +msgstr "Katta harf qilish" + +msgid "Make Lower Case" +msgstr "Kichik harf qilish" + +msgid "Capitalize" +msgstr "Katta harf qilish" + +msgid "Speech" +msgstr "Nutq" + +msgid "Start Speaking" +msgstr "Gapirishni boshlash" + +msgid "Stop Speaking" +msgstr "Gapirishni to‘xtatish" + +msgid "&View" +msgstr "&Ko‘rinishi" + +msgid "Enter Full Screen" +msgstr "\"Butun ekranda\" usuliga o‘tish" + +msgid "Window" +msgstr "Oyna" + +msgid "Minimize" +msgstr "Yig‘ish" + +msgid "Zoom" +msgstr "Kattalashtirish/Kichiklashtirish" + +msgid "Bring All to Front" +msgstr "Hammasini oldga o‘tkazish" + +msgid "PO Translation" +msgstr "PO tarjima" + +msgid "The file cannot be opened." +msgstr "Faylni ochib bo‘lmaydi." + +msgid "Invalid file" +msgstr "Noto‘g‘ri fayl" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Fayl buzilgan bo‘lishi mumkin yoki ushbu formatni Poedit aniqlay olmadi." + +msgid "&Undo" +msgstr "&Qaytarish" + +msgid "&Redo" +msgstr "&Qayta bajarish" + +msgid "Cu&t" +msgstr "Kes&ish" + +msgid "Cut" +msgstr "Kesib olish" + +msgid "Copy" +msgstr "Nusxa olish" + +msgid "&Paste" +msgstr "&Qo‘yish" + +msgid "Paste" +msgstr "Qo‘yish" + +msgid "&Delete" +msgstr "&O‘chirish" + +msgid "Select &All" +msgstr "B&archasini belgilash" + +msgid "Select All" +msgstr "Barchasini belgilash" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Tepaga" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Pastga" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit oynasiga bittadan ortiq faylni tashlab bo‘lmaydi." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' fayli xabar katalogi emas." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fayl" + +msgid "&Go" +msgstr "&O‘tish" + +msgid "Source text:" +msgstr "Manba matn:" + +msgid "Singular:" +msgstr "Birlik:" + +msgid "Plural:" +msgstr "Ko‘plik:" + +msgid "Translation:" +msgstr "Tarjima:" + +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 fayllar aslida faqat shablonlar hisoblanadi va ularning tarkibida hech " +"qanday tarjima bo‘lmaydi.\n" +"Tarjima qilish uchun shablonga asoslangan yangi PO fayl yarating." + +msgid "Create New Translation" +msgstr "Yangi tarjima yaratish" + +msgid "Create new translation" +msgstr "Yangi tarjima yaratish" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Imloni tekshirish o‘chirib qo‘yildi, chunki %s uchun lug‘at o‘rnatilmagan." + +msgid "Install" +msgstr "O‘rnatish" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog o‘zgartirildi. O‘zgarishlarni saqlashni xohlaysizmi?" + +msgid "Save changes" +msgstr "O‘zgarishlarni saqlash" + +msgid "Your changes will be lost if you don't save them." +msgstr "Agar o‘zgarishlarni saqlamasangiz, ular yo‘qoladi." + +msgid "Save" +msgstr "Saqlash" + +msgid "Don't save" +msgstr "Saqlanmasin" + +msgid "Don't Save" +msgstr "Saqlanmasin" + +msgid "Save as..." +msgstr "Boshqacha saqlash" + +msgid "Compile to..." +msgstr "Quyidagiga kompilyatsiya qilish..." + +msgid "Compiled Translation Files" +msgstr "Kompilyatsiya qilingan tarjima fayllari" + +msgid "Export as..." +msgstr "Eksport qilish" + +msgid "HTML Files" +msgstr "HTML fayllar" + +msgid "Open catalog template" +msgstr "Andoza namunasini ochish" + +msgid "Updating catalog" +msgstr "Katalogni yangilash" + +msgid "Source code not available." +msgstr "Manba kodi mavjud emas." + +msgid "Updating failed" +msgstr "Yuklash amalga oshmadi" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Tarjimalarni manba kodidan yuklab bo‘lmaydi, chunki katalogning xossalarida " +"ko‘rsatilgan manzildan hech qanday kod topilmadi." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogga kiritilganlar noto‘g‘ri bo‘lishi mumkin." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Katalogni yangilab bo‘lmadi. Batafsil ma’lumotlar uchun 'Tafsilotlar >>'ga " +"bosing." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Tarjima bilan %d ta muammo topildi." +msgstr[1] "Tarjima bilan %d ta muammo topildi." + +msgid "Validation results" +msgstr "To‘g‘rilash natijalari" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Xato kiritilganlar ro‘yxatda qizil bilan belgilangan. Xatolik tafsilotlari " +"kiritilganni tanlasangiz ko‘rinadi." + +msgid "The file was saved safely." +msgstr "Fayl xavfsiz saqlandi." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Fayl xavfsiz saqlandi va MO formatga o‘zgartirildi, ammo u to‘g‘ri " +"ishlamasligi mumkin." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Fayl xavfsiz saqlandi, ammo MO formatga o‘zgartirilmadi va undan foydalanib " +"bo‘lmaydi." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Fayl MO formatga kompilyatsiya qilindi, ammo u to‘g‘ri ishlamasligi mumkin." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Faylni MO formatga kompilyatsiya qilib bo‘lmaydi va undan foydalanib ham " +"bo‘lmaydi." + +msgid "No problems with the translation found." +msgstr "Tarjima bilan bog‘liq hech qanday muammo topilmadi." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Tarjima foydalanish uchun tayyor, ammo %d ta kiritilgan tarjima qilinmagan." +msgstr[1] "" +"Tarjima foydalanish uchun tayyor, ammo %d ta kiritilgan tarjima qilinmagan." + +msgid "The translation is ready for use." +msgstr "Tarjima foydalanish uchun tayyor." + +msgid "Context:" +msgstr "Matn:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit avtomatik tarzda “%s” nomli fayl ichidagi xato tarkibni to‘g‘riladi." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Bu faylda foydalanishga xalaqit qiladigan takroriy elementlar bor edi (PO " +"fayllarda bunga ruxsat berilmaydi). Poedit muammoni bartaraf qildi, biroq " +"barcha tarjimalarni qayta ko‘rib chiqib, noaniq tarjimalarni tuzatish " +"tavsiya etiladi." + +msgid "Language of the translation isn't set." +msgstr "Tarjima nomi kiritilmagan." + +msgid "Set Language" +msgstr "Tilni o‘rnatish" + +msgid "Set language" +msgstr "Tilni o‘rnatish" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Tarjima tili noto‘g‘ri bo‘lsa, tavsiyalar ko‘rsatilmaydi. Boshqa " +"xususiyatlar, masalan, ko‘plik shahkli yaxshi bo‘lishi mumkin." + +msgid "Language of the translation is the same as source language." +msgstr "Til nomi manba tildagi bilan bir xil." + +msgid "Fix Language" +msgstr "Tilni to‘g‘rilash" + +msgid "Fix language" +msgstr "Tilni to‘g‘rilash" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Katalogdagilar ko‘plik shaklida, ammo ko‘plik shakllari bosh qatori " +"moslanmagan." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Ko‘plik shakllari bosh qatori bilan tarjima qilinganda foydalanilayotgan " +"ko‘plik shakllari farq qilmoqda" + +msgid "Required header Plural-Forms is missing." +msgstr "Ko‘plik shakllari yo‘q bosh qatori talab qilinmoqda." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Ko‘plik shakllari (\"%s\") bosh qatorida sintaktik xato." + +msgid "Fix the Header" +msgstr "Boshlang‘ich qatorni to‘g‘rilash" + +msgid "Fix the header" +msgstr "Bosh qatorni to‘g‘rilash" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Katalogda foydalanilgan ko‘plik shakllari ifodasi %s uchun noodatiy." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Ko‘rib chiqish" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "'%s' katalog fayli xabarini yuklashda xatolik yuz berdi." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Tarjima qilindi: %d / %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Qolmoqda: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d ta xato" +msgstr[1] "%d ta xato" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d ta kiritilgan" +msgstr[1] "%d ta kiritilgan" + +msgid " (unsaved)" +msgstr " (saqlanmagan)" + +msgid " (modified)" +msgstr " (o‘zgartirilgan)" + +msgid "Go" +msgstr "O‘tish" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Tarjima xotirasi yangilanmadi: %s" + +msgid "Purge deleted translations" +msgstr "O‘chirilgan tarjimalarni tozalash" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Uzoq vaqt foydalanilmagan barcha tarjimalarni o‘chirishni xohlaysizmi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Agar tozalashda davom etsangiz, barcha o‘chirish uchun belgilangan " +"tarjimalar butunlay o‘chiriladi. Agar ular keyinchalik kerak bo‘lib qolsa, " +"yana tarjima qilishingiz kerak bo‘ladi." + +msgid "Keep" +msgstr "Saqlab qo‘yish" + +msgid "Purge" +msgstr "Tozalash" + +msgid "Fill missing translations from TM" +msgstr "TX orqali tarjima qilish" + +msgid "Only fill in exact matches" +msgstr "Faqat to‘liq mos kelganlar bilan to‘ldirilsin" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Standart holat bo‘yicha, aniq bo‘lmagan natijalar odatda \"noaniq\" sifatida " +"belgilanadi. Ushbu tanlovni faqat to‘liq mos tushganlarni qo‘shish uchun " +"tanlang." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "To‘liq mos tushganlar \"noaniq\" sifatida belgilanmasin" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Agar TX sifatiga to‘liq ishonsangiz, uni yoqib qo‘ying. Standart holat " +"bo‘yicha, barcha TX’dan topilgan tarjimalar \"noaniq\" sifatida belgilanadi " +"va qaytadan ko‘rib chiqish kerak bo‘ladi." + +msgid "Fill" +msgstr "To‘ldirish" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d ta tarjima xotirasidan kiritildi." +msgstr[1] "%d ta tarjima xotirasidan kiritildi." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Tarjimalar noaniq sifatida belgilangan, chunki ularda kamchiliklar bo‘lishi " +"mumkin. Ularni bexato bo‘lishini ta’minlash uchun ko‘rib chiqishingiz kerak." + +msgid "No entries could be filled from the translation memory." +msgstr "Tarjima xotirasidan birorta ham tarjima kiritilmagan." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TXda ushbu fayl tarkibi bilan bir xil qatorlar mavjud emas. U faqat Poedit " +"siz tarjima qilgan fayllardan yetarlicha o‘rgangandan so‘ng avtomatik " +"tarjima qilishida samaralidir." + +msgid "Translating" +msgstr "Tarjima qilinmoqda" + +msgid "Filling missing translations from TM..." +msgstr "TXdan kerakli tarjimalar qo‘yilmoqda..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u ta qator tarjima qilindi" +msgstr[1] "%u ta qator tarjima qilindi" + +msgid "Copy from source text" +msgstr "Manba matnidan nusxa ko‘chirish" + +msgid "Copy from Source Text" +msgstr "Manba matnidan nusxa ko‘chirish" + +msgid "Clear translation" +msgstr "Tarjimani tozalash" + +msgid "Clear Translation" +msgstr "Tarjimani tozalash" + +msgid "Edit comment" +msgstr "Sharhni tahrirlash" + +msgid "Edit Comment" +msgstr "Sharhni tahrirlash" + +msgid "References:" +msgstr "Bog‘lanishlar:" + +msgid "Everything" +msgstr "Hammasi" + +#, c-format +msgid "Form %i" +msgstr "%i shakli " + +msgid "Singular" +msgstr "Birlik" + +msgid "Zero" +msgstr "Nol" + +msgid "One" +msgstr "Bir" + +msgid "Two" +msgstr "Ikki" + +msgid "Plural" +msgstr "Ko‘plik" + +msgid "Other" +msgstr "Boshqa" + +msgid "&Bookmarks" +msgstr "&Xatcho‘plar" + +#, c-format +msgid "Set bookmark %i" +msgstr "%i xatcho‘pni o‘rnatish" + +#, c-format +msgid "Go to bookmark %i" +msgstr "%i xatcho‘pga o‘tish" + +#, c-format +msgid "Set Bookmark %i" +msgstr "%i xatcho‘pni o‘rnatish" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "%i xatcho‘pga o‘tish" + +msgid "Hide Sidebar" +msgstr "Yon panelni yashirish" + +msgid "Show Sidebar" +msgstr "Yon panelni ko‘rsatish" + +msgid "Hide Status Bar" +msgstr "Holat qatorini yashirish" + +msgid "Show Status Bar" +msgstr "Holat qatorini ko‘rsatish" + +msgid "Source text" +msgstr "Manba matni" + +msgid "Translation" +msgstr "Tarjima" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Manba matn — %s" + +msgid "unknown language" +msgstr "noma’lum til" + +#, c-format +msgid "Translation — %s" +msgstr "Tarjima — %s" + +msgid "Error:" +msgstr "Xato:" + +msgid "Source file" +msgstr "Manba fayl" + +msgid "Source file occurrence:" +msgstr "Manba fayli hodisalari:" + +msgid "Open in Editor" +msgstr "Tahrirlagichda ochish" + +msgid "Open in editor" +msgstr "Tahrirlagichda ochish" + +msgid "No references for the selected item." +msgstr "Tanlangan band uchun ma’lumotlar yo‘q." + +#, c-format +msgid "Error opening file %s!" +msgstr "%s faylini ochishda xatolik!" + +msgid "Find" +msgstr "Topish" + +msgid "Replace" +msgstr "Almashtirish" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Tanlamalar" + +msgid "Ignore case" +msgstr "Katta-kichiklikni rad qilish" + +msgid "Wrap around" +msgstr "Uzun qidiruv" + +msgid "Whole words only" +msgstr "Faqat to‘liq so‘zlar" + +msgid "Find in source texts" +msgstr "Manba matnlaridan topish" + +msgid "Find in translations" +msgstr "Tarjimalardan topish" + +msgid "Find in comments" +msgstr "Sharhlardan qidirish" + +msgid "Close" +msgstr "Yopish" + +msgid "Replace All" +msgstr "Barchasini almashtirish" + +msgid "Replace all" +msgstr "Barchasini almashtirish" + +msgid "< &Previous" +msgstr "< &Oldingi" + +msgid "&Next >" +msgstr "&Keyingi >" + +msgid "String to find" +msgstr "Topish uchun qator" + +msgid "Replacement string" +msgstr "Almashadigan qator" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Dastur ishga tushirilmadi: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Til kodi yoki nomi (masalan: en_GB)" + +msgid "Translation Language" +msgstr "Tarjima tili" + +msgid "Language of the translation:" +msgstr "Tarjima tili:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - kataloglar boshqaruvchisi" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Jami" + +msgid "Untrans" +msgstr "Tarjima qilinmagan" + +msgid "Fuzzy" +msgstr "Noaniq" + +msgid "Bad Tokens" +msgstr "Noto‘g‘ri belgilar" + +msgid "Last modified" +msgstr "So‘nggi o‘zgartirish" + +msgid "Select directory" +msgstr "Direktoriyani tanlash" + +msgid "Directories:" +msgstr "Direktoriyalar:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Loyihani o‘chirishni xohlaysizmi?" + +msgid "Confirmation" +msgstr "Tasdiqlash" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Siz rostdan ushbu loyihadagi barcha\n" +"kataloglarni yangilamoqchimisiz?" + +msgid "Information about the translator" +msgstr "Tarjimon haqida ma’lumot" + +msgid "Name:" +msgstr "Nomi:" + +msgid "Your Name" +msgstr "Ismingiz" + +msgid "Email:" +msgstr "E-pochtangiz:" + +msgid "your_email@example.com" +msgstr "e-pochtangiz@masalan.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Ismingiz va e-pochtangiz manzilidan faqat GNU gettext fayllaridagi \"Last-" +"Translator\" bosh qatorida foydalaniladi." + +msgid "Editing" +msgstr "Tahrirlanmoqda" + +msgid "Automatically compile MO file when saving" +msgstr "Saylayotganda avtomatik tarzda MO fayl yaratilsin" + +msgid "Show summary after catalog update" +msgstr "Katalog yangilangandan so‘ng natijani ko‘rsatish" + +msgid "Check spelling" +msgstr "Imloni tekshirish" + +msgid "Always change focus to text input field" +msgstr "Fokusni doimo matnni kiritish maydoniga o‘zgartirish" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Hech qachon qatorlar ro‘yxatiga fokusni olishiga yo‘l qo‘yilmasin. Agar u " +"yoqib qo‘yilsa, klaviaturadan boshqarish uchun Ctrl-ko‘rsatkichlar’dan " +"foydalanishingiz kerak, ammo siz, shuningdek, fokusni o‘zgartirish uchun Tab " +"tugmasini bosmasdan ham matnni tez yozishingiz mumkin." + +msgid "Appearance" +msgstr "Ko‘rinishi" + +msgid "Use custom list font:" +msgstr "Boshqa shrift ro‘yxatidan foydalanish:" + +msgid "Use custom text fields font:" +msgstr "Matn maydonlari shriftini o‘zgartirish:" + +msgid "Change UI language" +msgstr "Grafik interfeys tilini o‘zgartirish" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 yoki yangirog‘i talab qilinadi)" + +msgid "General" +msgstr "Umumiy" + +msgid "Use translation memory" +msgstr "Tarjima xotirasidan foydalanish" + +msgid "Learn From Files..." +msgstr "Fayllardan o‘rganish" + +msgid "Learn from files..." +msgstr "...fayllardan o‘rganish" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Tiklash" + +msgid "Consult TM when updating from sources" +msgstr "Manbalardan yangilanganda TX tavsiya qilsin" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Agar yoqib qo‘yilsa, Poedit tarjima xotirasida joylashgan oldingi\n" +"tarjimalaringizdan foydalanib tarjima qilishga urinadi. Agar tarjima " +"xotirasi endi tuzilgan bo‘lsa samarasi kam bo‘ladi. Siz \n" +"ko‘plab tarjimalarni tahrirlasangiz va TX kattalashib borsa,\n" +" shuncha tarjima sifatli bo‘lib boradi." + +msgid "Stored translations:" +msgstr "Saqlangan tarjimalar:" + +msgid "Database size on disk:" +msgstr "Diskdagi ma’lumotlar bazasi hajmi:" + +msgid "Select translation files to import" +msgstr "Import qilish uchun tarjimalarni tanlang" + +msgid "Translation Memory" +msgstr "Tarjima xotirasi" + +msgid "Importing translations..." +msgstr "Tarjimalar import qilinmoqda..." + +msgid "Finalizing..." +msgstr "Tugatilmoqda..." + +msgid "Reset translation memory" +msgstr "Tarjima xotirasini tiklash" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Tarjima xotirasini tiklamoqchi ekanligingizga ishonchingiz komilmi?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Tarjima xotirasini tiklash barcha joylashgan tarjimalarni xotiradan butunlay " +"o‘chiradi. Siz bu jarayonni iziga qaytara olmaysiz." + +msgid "Cancel" +msgstr "Bekor qilish" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TX" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Manba kodi ajratgichlari manba kodi fayllaridagi tarjima qilinadigan " +"qatorlarni topishda foydalaniladi va ularni tarjima qilish uchun ajratadi." + +msgid "New" +msgstr "Yangi" + +msgid "Edit" +msgstr "Tahrirlash" + +msgid "Delete extractor" +msgstr "Ajratkichni o‘chirish" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "“%s” ajratkichni o‘chirmoqchimisiz?" + +msgid "Extractors" +msgstr "Ajratgichlar" + +msgid "Accounts" +msgstr "Hisoblar" + +msgid "Automatically check for updates" +msgstr "Yangilanishlar avtomatik tekshirilsin" + +msgid "Include beta versions" +msgstr "Beta versiyalari ham" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta versiyalarda so‘nggi yangi xususiyatlar va yaxshilanishlar bo‘ladi, " +"ammo biroz barqaror bo‘lmasligi mumkin." + +msgid "Updates" +msgstr "Yangilanishlar" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ushbu sozlamalar PO fayllarni ichki formatlashga ta’sir qiladi. Agar " +"versiyani boshgarishga o‘xshagan maxsus talablaringiz bo‘lsa, uni " +"to‘g‘rilang." + +msgid "Line endings:" +msgstr "Qator tugashi:" + +msgid "Unix (recommended)" +msgstr "Unix (tavsiya qilingan)" + +msgid "Windows" +msgstr "Oynalar" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Ushbuda joylashtirish:" + +msgid "Preserve formatting of existing files" +msgstr "Mavjud fayllarni formatlashni saqlash" + +msgid "Advanced" +msgstr "Qo‘shimcha" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s sozlamalar" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Jildlarni kursor yordamida bu yerga tashlang\n" +"\n" +"yoki + tugmasidan foydalaning" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Jildlarni kursor yordamida bu yerga tashlang\n" +"\n" +"yoki + tugmasidan foydalaning" + +msgid "Add Folders..." +msgstr "Jildlar qo‘shish" + +msgid "Add folders..." +msgstr "Jildlar qo‘shish" + +msgid "Add Files..." +msgstr "Fayllar qo‘shish" + +msgid "Add files..." +msgstr "Fayllar qo‘shish" + +msgid "Add Wildcard..." +msgstr "Andoza bo‘yicha qo‘shish..." + +msgid "Add wildcard..." +msgstr "Andoza bo‘yicha qo‘shish..." + +msgid "Paths" +msgstr "Yo‘llar" + +msgid "Excluded paths" +msgstr "Qo‘shilmagan yo‘llar" + +msgid "Additional keywords" +msgstr "Qo‘shimcha kalit so‘zlar" + +msgid "Name of the project the translation is for" +msgstr "Tarjima loyihasi nomi" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "masalan: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (tavsiya qilinadi)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Avval faylni saqlang, Saqlamasangiz uchbu qismni tahrirlay olmaysiz." + +msgid "Comment:" +msgstr "Sharh:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "Toza&lash" + +msgid "Clear the comment" +msgstr "Sharhni tozalash" + +msgid "Create new translations project" +msgstr "Yangi tarjimalar loyihasini yaratish" + +msgid "Edit the project" +msgstr "Loyihani tahrirlash" + +msgid "Delete the project" +msgstr "Loyihani o‘chirish" + +msgid "Update all" +msgstr "Barchasini yangilash" + +msgid "Update all catalogs in the project" +msgstr "Loyihadagi barcha kataloglarni yangilash" + +msgid "Edit project" +msgstr "Loyihani tahrirlash" + +msgid "Project name:" +msgstr "Loyiha nomi:" + +msgid "Browse" +msgstr "Ko‘rish" + +msgid "Add directory to the list" +msgstr "Ro‘yxatga direktoriyani qo‘shish" + +msgid "&New..." +msgstr "&Yangi..." + +msgid "New from &POT/PO file..." +msgstr "&POT/PO fayldan yangi..." + +msgid "New From &POT/PO File..." +msgstr "&POT/PO fayldan yangi..." + +msgid "&Open..." +msgstr "&Ochish..." + +msgid "Open Recent" +msgstr "So‘nggisini ochish" + +msgid "Open from Crowdin..." +msgstr "Crowdin saytidan ochish..." + +msgid "Open From Crowdin..." +msgstr "Crowdin saytidan ochish..." + +msgid "&Close" +msgstr "&Yopish" + +msgid "&Save" +msgstr "&Saqlash" + +msgid "Save &as..." +msgstr "Boshqa forma&tda saqlash..." + +msgid "Save &As..." +msgstr "Boshqacha s&aqlash..." + +msgid "Compile to MO..." +msgstr "MO ga kompilyatsiya qilish" + +msgid "E&xport as HTML..." +msgstr "HTML sifatida e&ksport qilish..." + +msgid "Check for updates..." +msgstr "Yangilanishlar uchun tekshirish..." + +msgid "&Preferences..." +msgstr "&Parametrlar..." + +msgid "Catalogs &manager" +msgstr "Kataloglar &menejeri" + +msgid "Catalogs &Manager" +msgstr "Kataloglar &menejeri" + +msgid "E&xit" +msgstr "Chi&qish" + +msgid "Quit" +msgstr "Chiqish" + +msgid "Copy from singular" +msgstr "Birlik shaklidan nusxa ko‘chirish" + +msgid "Copy From Singular" +msgstr "Birlik shaklidan nusxa ko‘chirish" + +msgid "Translation is &fuzzy" +msgstr "Tarjima &noaniq" + +msgid "Translation Is &Fuzzy" +msgstr "Tarjima &noaniq" + +msgid "Edit &comment" +msgstr "&Sharhni tahrirlash" + +msgid "Edit &Comment" +msgstr "&Sharhni tahrirlash" + +msgid "Suggestions" +msgstr "Tavsiyalar" + +msgid "&Show references" +msgstr "&Bog‘lanishlarni ko‘rsatish" + +msgid "&Show References" +msgstr "Linklarni ko‘rsati&sh" + +msgid "&Find..." +msgstr "&Topish..." + +msgid "Replace..." +msgstr "Almashtirish..." + +msgid "Find next" +msgstr "Keyingisini topish" + +msgid "Find previous" +msgstr "Oldingisini topish" + +msgid "Find and Replace..." +msgstr "Topish va almashtirish" + +msgid "Find Next" +msgstr "Keyingisini topish" + +msgid "Find Previous" +msgstr "Oldingisini topish" + +msgid "&Preferences" +msgstr "&Parametrlar" + +msgid "Display entry &IDs" +msgstr "Kiritilganlarning ID’sini ko‘rsatish" + +msgid "Display Entry &IDs" +msgstr "Kiritilganlarning ID’sini ko‘rsatish" + +msgid "Sort by &file order" +msgstr "&Fayl tartibi bo‘yicha saralash" + +msgid "Sort by &File Order" +msgstr "&Fayl tartibi bo‘yicha saralash" + +msgid "Sort by &source" +msgstr "&Manba bo‘yicha saralash" + +msgid "Sort by &Source" +msgstr "&Manba bo‘yicha saralash" + +msgid "Sort by &translation" +msgstr "&Tarjima bo‘yicha saralash" + +msgid "Sort by &Translation" +msgstr "&Tarjima bo‘yicha saralash" + +msgid "&Group by context" +msgstr "Matn bo‘yicha &guruhlash" + +msgid "&Group By Context" +msgstr "Matn bo‘yicha &guruhlash" + +msgid "Entries with errors first" +msgstr "Xato kiritilganlar birinchi" + +msgid "Entries with Errors First" +msgstr "Xato kiritilganlar birinchi" + +msgid "&Untranslated entries first" +msgstr "Avval &tarjima qilinmaganlar" + +msgid "&Untranslated Entries First" +msgstr "Avval &tarjima qilinmaganlar" + +msgid "Show sidebar" +msgstr "Yon panelni ko‘rsatish" + +msgid "Show status bar" +msgstr "Holat qatorini ko‘rsatish" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Manbalardan yangilash" + +msgid "&Update from Sources" +msgstr "&Manbalardan yangilash" + +msgid "Update from &POT file..." +msgstr "&POT faylidan yangilash..." + +msgid "Update from &POT File..." +msgstr "&POT faylidan yangilash..." + +msgid "Sync with Crowdin" +msgstr "Crowdin bilan sinxronlash" + +msgid "Fill missing translations from &TM..." +msgstr "Kerakli tarjimalarni &TX’dan to‘ldirish" + +msgid "Fill Missing Translations from &TM..." +msgstr "Kerakli tarjimalarni &TX’dan to‘ldirish" + +msgid "&Purge deleted translations" +msgstr "&O‘chirilgan tarjimalarni tozalash" + +msgid "&Purge Deleted Translations" +msgstr "&O‘chirilgan tarjimalarni tozalash" + +msgid "&Validate translations" +msgstr "Tarjimalarni to‘g‘rilash" + +msgid "&Validate Translations" +msgstr "Tarjimalarni &to‘g‘rilash" + +msgid "&Properties..." +msgstr "&Xossalari..." + +msgid "&Done and next" +msgstr "&Tayyor va keyingisi" + +msgid "&Done and Next" +msgstr "&Tayyor va keyingisi" + +msgid "&Previous translation" +msgstr "&Oldingi tarjima" + +msgid "&Previous Translation" +msgstr "&Oldingi tarjima" + +msgid "&Next translation" +msgstr "&Keyingi tarjima" + +msgid "&Next Translation" +msgstr "&Keyingi tarjima" + +msgid "P&revious unfinished" +msgstr "O&ldingi tugatilmagan" + +msgid "P&revious Unfinished" +msgstr "O&ldingi tugatilmagan" + +msgid "Ne&xt unfinished" +msgstr "Ke&yingi tugatilmagan" + +msgid "Ne&xt Unfinished" +msgstr "Ke&yingi tugatilmagan" + +msgid "Previous plural form" +msgstr "Oldingi ko‘plik shakli" + +msgid "Previous Plural Form" +msgstr "Oldingi ko‘plik shakli" + +msgid "Next plural form" +msgstr "Keyingi ko‘plik shakli" + +msgid "Next Plural Form" +msgstr "Keyingi ko‘plik shakli" + +msgid "&Online help" +msgstr "&Onlayn yordam" + +msgid "&Online Help" +msgstr "&Onlayn yordam" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext yo‘riqnomasi" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext yo‘riqnomasi" + +msgid "&About Poedit" +msgstr "Poedit h&aqida" + +msgid "&About" +msgstr "H&aqida" + +msgid "Extractor setup" +msgstr "Ajratgichni o‘rnatish" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" +"Nuqtali vergul bilan ajratilgan kengaytmalar ro‘yxati (masalan: *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Chaqirish:" + +msgid "Command to extract translations:" +msgstr "Tarjimalarni ajratish buyrug‘i:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ushbu buyruqdan ajratgichni ishga tushirish uchun foydalaniladi.\n" +"%o chiquvchi fayl nomiga, %K kalit so‘zlar ro‘yxatiga\n" +"%F kiruvchi fayllar ro‘yxatiga,\n" +"%C kodlash bayrog‘iga (quyidagini ko‘ring) ajratiladi." + +msgid "An item in keywords list:" +msgstr "Kalit so‘zlar ro‘yxatidagi band:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Har bir kalit so'zi uchun bir marta buyruq\n" +"satriga ilova qilinadi. %k kalit so'z." + +msgid "An item in input files list:" +msgstr "Kirish fayllari ro'yxatida element:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"U har bir kiruvchi fayl uchun buyruq satriga qo‘shiladi. %f fayl nomini " +"anglatadi." + +msgid "Source code charset:" +msgstr "Manba kodi kodlash usuli:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Agar manba kodlash usuli berilgan bo‘lsa, u buyruq satriga\n" +"ilova qilinadi. %c kodlash usuli qiymatini anglatadi." + +msgid "Catalog properties" +msgstr "Katalog xossalari" + +msgid "Project name and version:" +msgstr "Loyiha nomi va versiyasi:" + +msgid "Plural Forms:" +msgstr "Ko‘plik shakllari:" + +msgid "Use default rules for this language" +msgstr "Ushbu til uchun standart qoidalardan foydalanish" + +msgid "Use custom expression" +msgstr "Boshqa ifodadan foydalanish" + +msgid "Learn about plural forms" +msgstr "Ko‘plik shakllari haqida o‘rganish" + +msgid "Charset:" +msgstr "Kodlash usuli:" + +msgid "Team:" +msgstr "Guruh:" + +msgid "Team's email address:" +msgstr "Guruhning e-pochta manzili:" + +msgid "Translation properties" +msgstr "Tarjima xossalari" + +msgid "Sources paths" +msgstr "Manbalar yo‘llari" + +msgid "Extract text from source files in the following directories:" +msgstr "Quyidagi direktoriyalardagi manba fayllaridan matnni ajratish:" + +msgid "Base path:" +msgstr "Asosiy yo‘l:" + +msgid "Sources keywords" +msgstr "Manbalar kalit so‘zlari" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Ushbu kalit so‘zlar (funksiya nomlari)dan manba fayllaridagi\n" +"tarjima qilinadigan qatorlarni tanish uchun foydalaning:" + +msgid "Learn about gettext keywords" +msgstr "gettext kalit so‘lari haqida o‘rganish" + +msgid "Update summary" +msgstr "Yangilash hisoboti" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ushbu qatorlar manbalardan topildi, ammo katalogdan topilmadi.\n" +"Poedit katalogka qo'shib qo'yadi." + +msgid "New strings" +msgstr "Yangi qatorlar" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ushbu qatorlar endi manbalarda mavjud emas.\n" +"Poedit ularni hozir katalogdan o‘chiradi." + +msgid "Obsolete strings" +msgstr "Eski qatorlar" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 ta yangi, 0 ta eski)" + +msgid "Open" +msgstr "Ochish" + +msgid "Save catalog" +msgstr "Katalogni saqlash" + +msgid "Validate" +msgstr "To‘g‘rilash" + +msgid "Check for errors in the translation" +msgstr "Tarjimadagi xatolarni tekshirish" + +msgid "Update" +msgstr "Yangilash" + +msgid "Update catalog - synchronize it with sources" +msgstr "Katalogni yangilash - uni manbalar bilan sinxronlash" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Agar belgilangan qator noaniq tarjimaga ega bo‘lsa, yoqiladi" + +msgid "Show or hide the sidebar" +msgstr "Yon panelni ko‘rsatish yoki yashirish" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Oldingi manba matni:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Noaniq tarjima ham javob beradigan eski manba matni (yangilash davomida uni " +"o‘zgartirishdan oldin)." + +msgid "Notes for translators:" +msgstr "Tarjimonlar uchun eslatmalar:" + +msgid "Add comment" +msgstr "Sharh qo‘shish" + +msgid "Add Comment" +msgstr "Sharh qo‘shish" + +msgid "Translation suggestions:" +msgstr "Tarjima takliflari:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Topilmadi" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Topilmadi" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ushbu qator Poedit’ning tarjima xotirasida topildi." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Yangi: %i, eskirgan: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Tarjimalar import qilinmoqda: %d" + +msgid "Poedit Update" +msgstr "Poedit’ni yangilash" + +msgid "Preparing migration..." +msgstr "Ko‘chirishga tayyorlanmoqda..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migratsiya chiqish holati: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit tarjimalaringiz xotirasini yangi formatga o‘girishi kerak." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Bu Poedit ishga tushishidan oldin tayyor bo‘lishi kerak. Agar sizda juda " +"ko‘p tarjimalar bo‘lsa, u bir necha daqiqa olishi mumkin, lekin yetarlicha " +"tez bo‘lishi kerak." + +msgid "Proceed" +msgstr "Davom ettirish" + +msgid "Translation memory migration failed." +msgstr "Tarjima xotirasini ko‘chirib o‘tkazish amalga oshmadi." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Tarjima xotirasi ma’lumotlari ko‘chirib o‘tkazilmadi. Xatolik:\n" +"\n" +"%s\n" +"help@poedit.net manziliga xat yozing va biz uni tezda to‘g‘rilaymiz." + +msgid "Cannot create temporary directory." +msgstr "Vaqtinchalik direktoriya yaratilmadi." + +msgid "Welcome to Poedit" +msgstr "Poedit’ga xush kelibsiz" + +msgid "Edit a translation" +msgstr "Tarjimani tahrirlash" + +msgid "Open an existing PO file and edit the translation." +msgstr "Mavjud PO faylni oching va tarjimani tahrirlang." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Mavjud PO fayl yoki POT namunani oling va undan yangi tarjima yarating." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Crowdin bilan tarjimalarda hamkorlik qilish" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Crowdin loyihasidan fayl import qilish, uni tarjima qilish va o‘zgarishlarni " +"sinxronlash." + +msgid "What is Crowdin?" +msgstr "Crowdin nima?" + +msgid "There are no translations. That’s unusual." +msgstr "Tarjimalar yo‘q. Bu noodatiy." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Tarjima qilinadigan kiritishlar Gettext tizimiga qo‘lbola qo‘shilmagan, ammo " +"avtomatik ravishda\n" +"manba kodidan ajratilgan. Bunday usulda, ular yangilanishi va taxlanishi " +"kerak.\n" +"Tarjimonlar odatda dasturchilar tomonidan tayyorlangan PO namuna fayllari " +"(POTlar)dan foydalanishiadi." + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU gettext haqida ko‘proq o‘rganing)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Ushbu katalogni eng oson to‘ldirish yo‘li - uni POT fayldan yangilashdir:" + +msgid "Update from POT" +msgstr "POT fayldan yangilash" + +msgid "Take translatable strings from an existing POT template." +msgstr "Mavjud POT namunasidan tarjima qilinadigan qatorlarni oling." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Shuningdek, siz tarjima qilinadigan qatorlarni to‘g‘ridan to‘g‘ri manba " +"kodidan ajratishingiz mumkin:" + +msgid "Extract from sources" +msgstr "Manbalardan ajratish" + +msgid "Configure source code extraction in Properties." +msgstr "Xossalardan manba kodini ajratishni moslang." + +msgid "Sync" +msgstr "Sinxronlash" + +msgid "Synchronize the translation with Crowdin" +msgstr "Tarjimani Crowdin bilan sinxronlash" diff --git a/locales/vi.mo b/locales/vi.mo new file mode 100644 index 0000000000000000000000000000000000000000..74d06e5f121b72c1583bec53902a5e5c7b11e2d5 GIT binary patch literal 49852 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%0DjU>lYiy>4$glEc7^NjB)v48 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ÐMn6WBw8fMO%o0K7W9rj&WhLjauz7&3jxUx3Sxr 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 Z#BxFGC2Z?hHi9%db&&sh!9M!?e*qQ*adiLy literal 0 HcmV?d00001 diff --git a/locales/vi.po b/locales/vi.po new file mode 100644 index 0000000..46dd4e1 --- /dev/null +++ b/locales/vi.po @@ -0,0 +1,1947 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-10-13 10:38+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Ẩn lời cảnh báo này đi" + +msgid "Don't Show Again" +msgstr "Không hiện thị lại" + +msgid "Don't show again" +msgstr "Không hiển thị hộp thoại này lần sau nữa." + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i dòng cá»§a tập tin '%s' đã không được nạp một cách chính xác." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Dòng %d cá»§a tập tin '%s' bị hỏng (dữ liệu không hợp lệ %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Phần đầu dị hình: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Tập tin catalog hỏng: dạng số ít msgstr mà sá»­ dụng với msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Tập tin catalog hỏng: dạng số nhiều msgstr được sá»­ dụng mà không có " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Có nhiều lỗi khi tải lên tập tin catalog. Một số dữ liệu bị mất hay sai lạc." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Không thể tải tập tin %s, nó gần như chắc chắn là đã bị hỏng." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Tập tin '%s' chỉ cho phép đọc và không thể ghi lại được.\n" +"Xin hãy ghi lại dưới một cái tên mới." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Không thể lưu tập tin %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Có vấn đề với định dạng (nhưng vẫn có thể ghi lại)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Catalog không ghi lại được theo danh nghÄ©a bộ ký tá»± '%s' như trong cài đặt.\n" +"\n" +"Thay vào đó, nó được ghi lại bằng kiểu UTF-8 và cài đặt sẽ được chỉnh sá»­a " +"lại cho phù hợp." + +msgid "Error saving catalog" +msgstr "Gặp lỗi khi đang ghi lại catalog" + +msgid "PO Translation Files" +msgstr "PO Dịch Tập Tin" + +msgid "POT Translation Templates" +msgstr "PO Dịch Mẫu" + +msgid "All Translation Files" +msgstr "Tất Cả Các Tập Tin Bản Dịch" + +msgid "Merging differences..." +msgstr "Đang trộn các khác biệt..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "tập tin '%s' không hợp định dạng POT." + +msgid "(Use default language)" +msgstr "(Dùng ngôn ngữ mặc định)" + +msgid "Select your preferred language" +msgstr "Chọn ngôn ngữ ưa thích" + +msgid "Language selection" +msgstr "Lá»±a chọn ngôn ngữ" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Bạn phải khởi động lại Poedit để các thay đổi có tác dụng." + +msgid "Downloading translations is disabled in this project." +msgstr "Tải về bản dịch bị vô hiệu hóa trong dá»± án này." + +msgid "Not authorized, please sign in again." +msgstr "Không có thẩm quyền, xin vui lòng đăng nhập lại." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin là một nÆ¡i quản lý trá»±c tuyến nền tảng và các công cụ dịch thuật hợp " +"tác. Poedit có thể liên tục đồng bộ tập tin PO quản lý tại Crowdin." + +msgid "Sign In" +msgstr "Đăng Nhập" + +msgid "Sign in" +msgstr "Đăng nhập" + +msgid "Sign Out" +msgstr "Đăng Xuất" + +msgid "Sign out" +msgstr "Đăng xuất" + +msgid "Waiting for authentication…" +msgstr "Đang chờ xác thá»±c…" + +msgid "Updating user information…" +msgstr "Đang cập nhật thông tin người dùng…" + +msgid "Signed in as:" +msgstr "Đăng nhập như là:" + +msgid "Learn More About Crowdin" +msgstr "Tìm Hiểu Thêm Về Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Tìm hiểu thêm về Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Đăng nhập vào Crowdin" + +msgid "Open Crowdin translation" +msgstr "Mở Crowdin dịch" + +msgid "Project:" +msgstr "Dá»± án:" + +msgid "Language:" +msgstr "Ngôn ngữ:" + +msgid "File:" +msgstr "Tập tin:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" +"Không có dá»± án dịch thuật được liệt kê trong tài khoản Crowdin cá»§a bạn." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Dá»± án này đã không có tập tin nào có thể được dịch trong Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Tập tin này chỉ có thể được chỉnh sá»­a trong giao diện web cá»§a Crowdin." + +msgid "Downloading latest translations…" +msgstr "Đang tải xuống bản dịch mới nhất…" + +msgid "Syncing with Crowdin" +msgstr "Đồng bộ với Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Đồng bộ với Crowdin không thành công." + +msgid "Crowdin error" +msgstr "Crowdin lỗi" + +msgid "Uploading translations…" +msgstr "Tải lên bản dịch…" + +msgid "&Copy" +msgstr "&Sao" + +msgid "Learn more" +msgstr "Nghiên cứu sâu hÆ¡n" + +msgid "Learn More" +msgstr "Tìm Hiểu Thêm" + +#, c-format +msgid "Failed command: %s" +msgstr "Lệnh bị sai: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Lỗi trộn catalog gettext." + +msgid "Scanning files..." +msgstr "Đang quét các tập tin..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Đang phân tích cú pháp tập tin %s..." + +msgid "Failed to load extracted catalog." +msgstr "Lỗi rút trích catalog." + +msgid "&Help" +msgstr "T&rợ giúp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Tập tin MO không thể chỉnh sá»­a trá»±c tiếp trong Poedit." + +msgid "Error opening file" +msgstr "Lỗi mở tập tin" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Hãy mở và chỉnh sá»­a các tập tin PO. Khi bạn lưu nó, tập tin MO sẽ được cập " +"nhật." + +msgid "don't delete temporary files (for debugging)" +msgstr "không xóa tập tin tạm (để gỡ lỗi)" + +msgid "handle a poedit:// URI" +msgstr "xá»­ lý một poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Không thể giao tiếp với quá trình Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Chưa được xá»­ lý ngoại lệ: %s" + +msgid "Unhandled exception occurred." +msgstr "Ngoại lệ không được xảy ra." + +msgid "Open catalog" +msgstr "Mở catalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Tập tin '%s' không tồn tại." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Giới thiệu về %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Phiên bản %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Dịch vụ" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Ẩn %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Ẩn Những Thứ Khác" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Hiển Thị Tất Cả" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Thoát %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit rất dễ dùng cho việc biên tập bản dịch." + +msgid "Catalogs Manager" +msgstr "Quản lý các catalog" + +msgid "Check for Updates..." +msgstr "Kiểm tra phiên bản mới..." + +msgid "&Edit" +msgstr "&Biên tập" + +msgid "Undo" +msgstr "Huá»· thao tác trước" + +msgid "Redo" +msgstr "Làm lại" + +msgid "Paste and Match Style" +msgstr "Dán và Khớp Kiểu" + +msgid "Delete" +msgstr "Xóa bỏ" + +msgid "Spelling and Grammar" +msgstr "Chính Tả và Ngữ Pháp" + +msgid "Show Spelling and Grammar" +msgstr "Hiện Chính Tả và Ngữ Pháp" + +msgid "Check Document Now" +msgstr "Kiểm Tra Tài Liệu Ngay" + +msgid "Check Spelling While Typing" +msgstr "Kiểm Tra Chính Tả Trong Khi Gõ" + +msgid "Check Grammar With Spelling" +msgstr "Kiểm Tra Ngữ Pháp Với Chính Tả" + +msgid "Correct Spelling Automatically" +msgstr "Sá»­a Chính Tả Tá»± Động" + +msgid "Substitutions" +msgstr "Thay Thế" + +msgid "Show Substitutions" +msgstr "Hiển Thị Thay Thế" + +msgid "Smart Copy/Paste" +msgstr "Sao Chép/Dán Thông Minh" + +msgid "Smart Quotes" +msgstr "Trích Dẫn Thông Minh" + +msgid "Smart Dashes" +msgstr "Dấu Gạch Ngang Thông Minh" + +msgid "Smart Links" +msgstr "Liên Kết Thông Minh" + +msgid "Text Replacement" +msgstr "Thay Thế Văn Bản" + +msgid "Transformations" +msgstr "Biến Đổi" + +msgid "Make Upper Case" +msgstr "Chữ HOA" + +msgid "Make Lower Case" +msgstr "Chữ thường" + +msgid "Capitalize" +msgstr "Viết Hoa" + +msgid "Speech" +msgstr "Lời nói" + +msgid "Start Speaking" +msgstr "Bắt Đầu Nói" + +msgid "Stop Speaking" +msgstr "Dừng Nói" + +msgid "&View" +msgstr "&Trình bày" + +msgid "Enter Full Screen" +msgstr "Nhập Toàn Màn Hình" + +msgid "Window" +msgstr "Cá»­a sổ" + +msgid "Minimize" +msgstr "Thu nhỏ" + +msgid "Zoom" +msgstr "Phóng to" + +msgid "Bring All to Front" +msgstr "Mang Tất Cả ra Trước" + +msgid "PO Translation" +msgstr "PO Dịch" + +msgid "The file cannot be opened." +msgstr "Không thể mở tập-tin." + +msgid "Invalid file" +msgstr "Tập tin không hợp lệ" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Tập tin có lẽ đã hư hỏng hoặc là Poedit không chấp nhận định dạng này." + +msgid "&Undo" +msgstr "&Hoàn tác" + +msgid "&Redo" +msgstr "&Làm lại" + +msgid "Cu&t" +msgstr "Cắ&t" + +msgid "Cut" +msgstr "Cắt" + +msgid "Copy" +msgstr "Sao chép" + +msgid "&Paste" +msgstr "&Dán" + +msgid "Paste" +msgstr "Dán" + +msgid "&Delete" +msgstr "&Xóa" + +msgid "Select &All" +msgstr "Chọn &Tất Cả" + +msgid "Select All" +msgstr "Chọn Tất cả" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Lên" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Xuống" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Bạn không thể kéo thả nhiều hÆ¡n một tập tin vào trong cá»­a sổ Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Tập tin '%s' không phải là catalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Chính" + +msgid "&Go" +msgstr "Nhả&y đến" + +msgid "Source text:" +msgstr "Văn bản nguồn:" + +msgid "Singular:" +msgstr "Dạng số ít:" + +msgid "Plural:" +msgstr "Số nhiều:" + +msgid "Translation:" +msgstr "Bản dịch:" + +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 "" +"Các tập tin POT chỉ là các mẫu và không chứa bất kì bản dịch nào cá»§a chính " +"chúng.\n" +"Để tạo 1 bản dịch, tạo 1 tập tin PO mới dá»±a trên mẫu." + +msgid "Create New Translation" +msgstr "Tạo Bản Dịch Mới" + +msgid "Create new translation" +msgstr "Tạo bản dịch mới" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Kiểm tra chính tả bị vô hiệu, bởi vì từ điển cho %s không được cài đặt." + +msgid "Install" +msgstr "Cài đặt" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Catalog đã bị sá»­a. Bạn có muốn ghi lại các thay đổi không?" + +msgid "Save changes" +msgstr "Ghi lại các thay đổi" + +msgid "Your changes will be lost if you don't save them." +msgstr "Các thay đổi cá»§a bạn sẽ bị mất nếu bạn không ghi nó lại." + +msgid "Save" +msgstr "Ghi lại" + +msgid "Don't save" +msgstr "Không ghi Lại" + +msgid "Don't Save" +msgstr "Không Ghi Lại" + +msgid "Save as..." +msgstr "Ghi lại với tên mới..." + +msgid "Compile to..." +msgstr "Biên dịch sang..." + +msgid "Compiled Translation Files" +msgstr "Các tập tin bản dịch đã được biên dịch" + +msgid "Export as..." +msgstr "Xuất ra thành..." + +msgid "HTML Files" +msgstr "Tập tin HTML" + +msgid "Open catalog template" +msgstr "Mở tập tin catalog mẫu" + +msgid "Updating catalog" +msgstr "Cập nhật catalog" + +msgid "Source code not available." +msgstr "Mã nguồn không có sẵn." + +msgid "Updating failed" +msgstr "Cập Nhật không thành công" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Bản dịch không thể được cập nhật từ mã nguồn, bởi vì không có mã nào được " +"tìm thấy tại vị trí chỉ định trong Thuộc tính cá»§a danh mục." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Các mục từ trong catalog chắc chắn là không đúng." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Cập nhật catalog không thành công. Bấm chuột vào 'Chi tiết >>' để có thông " +"tin đầy đủ." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Tìm thấy trong bản dịch %d lỗi." + +msgid "Validation results" +msgstr "Kết quả xác nhận" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Các mục có lỗi được đánh dấu màu đỏ trong danh sách. Chi tiết về lỗi sẽ hiển " +"thị khi bạn chọn mục tương ứng đó." + +msgid "The file was saved safely." +msgstr "Tệp được lưu một cách an toàn." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Các tập tin được lưu một cách an toàn và biên soạn thành định dạng MO, nhưng " +"nó sẽ có lẽ không làm việc một cách chính xác." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Tập tin đã được ghi lại một cách an toàn, nhưng nó không thể được dịch thành " +"tập tin có định dạng MO để có thể dùng được." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Các tập tin được biên dịch vào các định dạng MO, nhưng nó sẽ có lẽ không làm " +"việc một cách chính xác." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Các tập tin không thể được biên dịch thành các định dạng MO và sá»­ dụng." + +msgid "No problems with the translation found." +msgstr "Không tìm thấy lỗi nào trong bản dịch." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Bản dịch đã sẵn sàng để sá»­ dụng, nhưng %d mục không được dịch." + +msgid "The translation is ready for use." +msgstr "Bản dịch đã sẵn sàng để dùng" + +msgid "Context:" +msgstr "Ngữ cảnh:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit đã tá»± động sá»­a các nội dung không hợp lệ trong tập tin \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Tập tin chứa các mục trùng lặp, mà không được cho phép trong các tập tin PO " +"và sẽ ngăn chặn các tập tin được sá»­ dụng từ chúng. Poedit đã sá»­a vấn đề, " +"nhưng bạn nên xem lại các bản dịch cá»§a bất kỳ mục nào được đánh dấu là mờ và " +"sá»­a lại chúng nếu cần thiết." + +msgid "Language of the translation isn't set." +msgstr "Ngôn ngữ cá»§a bản dịch chưa được đặt." + +msgid "Set Language" +msgstr "Đặt ngôn ngữ" + +msgid "Set language" +msgstr "Đặt ngôn ngữ" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Gợi ý không có sẵn nếu ngôn ngữ bản dịch không được thiết lập đúng. Các tính " +"năng khác, chẳng hạn như hình thức số nhiều, có thể bị ảnh hưởng." + +msgid "Language of the translation is the same as source language." +msgstr "Ngôn ngữ cá»§a bản dịch là giống như ngôn ngữ nguồn." + +msgid "Fix Language" +msgstr "Sá»­a ngôn ngữ" + +msgid "Fix language" +msgstr "Sá»­a chữa ngôn ngữ" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Có các mục tin dạng số nhiều, nhưng chưa được khai báo ở phần đầu (Plural-" +"Form)" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Các mục từ trong catalog có dạng số nhiều khác với phần khai báo ở phần đầu " +"tập tin (Plural-Forms)" + +msgid "Required header Plural-Forms is missing." +msgstr "Phần đầu Plural-Forms đã yêu cầu bị thiếu." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Cú pháp lỗi trong khai báo phần đầu Plural-Forms (\"%s\")." + +msgid "Fix the Header" +msgstr "Sá»­a Phần Đầu" + +msgid "Fix the header" +msgstr "Sá»­a phần đầu" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Dạng thức số nhiều được dùng cho catalog là bất thường đối với %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Xem lại" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Gặp lỗi khi đang tải các chuỗi từ tập tin catalog '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Đã dịch: %d of %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Còn lại: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d lỗi" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d mục" + +msgid " (unsaved)" +msgstr " (chưa lưu)" + +msgid " (modified)" +msgstr " (đã sá»­a)" + +msgid "Go" +msgstr "Thá»±c hiện" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Gặp lỗi khi cập nhật bộ nhớ dịch: %s" + +msgid "Purge deleted translations" +msgstr "Xóa bỏ các chuỗi dịch bị đánh dấu là không dùng nữa" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Bạn có muốn loại bỏ tất cả các chuỗi không còn sá»­ dụng nữa không?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Nếu bạn vẫn muốn thanh lọc, tất cả các chuỗi dịch mà được đánh dấu là đã xoá " +"sẽ bị gỡ bỏ hoàn toàn khỏi tập tin. Bạn sẽ phải dịch lại chúng nếu người lập " +"trình sá»­ dụng lại nó trong tương lai." + +msgid "Keep" +msgstr "Giữ lại" + +msgid "Purge" +msgstr "Thanh lọc" + +msgid "Fill missing translations from TM" +msgstr "Điền vào các bản dịch bị thiếu từ TM" + +msgid "Only fill in exact matches" +msgstr "Chỉ điền vào các từ khớp chính xác" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Theo mặc định, kết quả không chính xác cÅ©ng được điền vào và được đánh dấu " +"là mờ. Chọn tuỳ chọn này để chỉ bao gồm các từ khớp chính xác." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Không đánh dấu các từ khớp chính xác là mờ" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Chỉ cho phép nếu bạn tin tưởng chất lượng TM cá»§a bạn. Theo mặc định, tất cả " +"các từ khớp từ TM được đánh dấu là mờ và nên được xem lại." + +msgid "Fill" +msgstr "Điền vào" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d mục đã được điền từ bộ nhớ dịch thuật." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Các bản dịch đã được đánh dấu là mờ, bởi vì chúng có thể không chính xác. " +"Bạn nên xem lại chúng cho việc sá»­a chữa." + +msgid "No entries could be filled from the translation memory." +msgstr "Không có mục nào có thể được điền vào từ bộ nhớ dịch thuật." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM không chứa bất kỳ chuỗi tương tá»± cho nội dung cá»§a tập tin này. Nó là chỉ " +"có hiệu lá»±c cho các bản dịch bán tá»± động sau khi Poedit học đủ từ các tập " +"tin mà bạn đã dịch thá»§ công." + +msgid "Translating" +msgstr "Dịch" + +msgid "Filling missing translations from TM..." +msgstr "Đang điền vào các bản dịch thiếu từ TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Đã dịch %u chuỗi" + +msgid "Copy from source text" +msgstr "Chép từ chuỗi nguồn" + +msgid "Copy from Source Text" +msgstr "Chép từ chuỗi nguồn" + +msgid "Clear translation" +msgstr "Xóa phần dịch" + +msgid "Clear Translation" +msgstr "Xóa phần dịch" + +msgid "Edit comment" +msgstr "Sá»­a chú thích" + +msgid "Edit Comment" +msgstr "Sá»­a chú thích" + +msgid "References:" +msgstr "Tham chiếu:" + +msgid "Everything" +msgstr "Mọi thứ" + +#, c-format +msgid "Form %i" +msgstr "Dạng %i" + +msgid "Singular" +msgstr "Dạng số ít" + +msgid "Zero" +msgstr "Số không" + +msgid "One" +msgstr "Một" + +msgid "Two" +msgstr "Hai" + +msgid "Plural" +msgstr "Số nhiều" + +msgid "Other" +msgstr "Khác" + +msgid "&Bookmarks" +msgstr "Đánh &dấu" + +#, c-format +msgid "Set bookmark %i" +msgstr "Đặt dấu trang %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Đi đến dấu trang %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Đặt Dấu Trang %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Đi đến Dấu Trang %i" + +msgid "Hide Sidebar" +msgstr "Ẩn Thanh Công Cụ" + +msgid "Show Sidebar" +msgstr "Hiện thanh công cụ" + +msgid "Hide Status Bar" +msgstr "Ẩn Thanh Trạng Thái" + +msgid "Show Status Bar" +msgstr "Hiển Thanh Trạng Thái" + +msgid "Source text" +msgstr "Văn bản nguồn" + +msgid "Translation" +msgstr "Bản dịch" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Mã nguồn văn bản — %s" + +msgid "unknown language" +msgstr "không hiểu ngôn ngữ" + +#, c-format +msgid "Translation — %s" +msgstr "Bản dịch — %s" + +msgid "Error:" +msgstr "Lỗi:" + +msgid "Source file" +msgstr "Tập tin mã nguồn" + +msgid "Source file occurrence:" +msgstr "Xuất hiện trong tập tin nguồn:" + +msgid "Open in Editor" +msgstr "Mở trong Trình Soạn Thảo" + +msgid "Open in editor" +msgstr "Mở trong trình soạn thảo" + +msgid "No references for the selected item." +msgstr "Không có tham chiếu cho mục đã chọn." + +#, c-format +msgid "Error opening file %s!" +msgstr "Gặp lỗi khi đang mở tập tin %s!" + +msgid "Find" +msgstr "Tìm" + +msgid "Replace" +msgstr "Thay thế" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Tùy chọn" + +msgid "Ignore case" +msgstr "Trường hợp bỏ qua" + +msgid "Wrap around" +msgstr "Ngắt khoảng" + +msgid "Whole words only" +msgstr "Phải khớp toàn bộ các từ" + +msgid "Find in source texts" +msgstr "Tìm trong các văn bản nguồn" + +msgid "Find in translations" +msgstr "Tìm trong phần dịch" + +msgid "Find in comments" +msgstr "Tìm trong chú thích" + +msgid "Close" +msgstr "Đóng" + +msgid "Replace All" +msgstr "Thay Thế Tất Cả" + +msgid "Replace all" +msgstr "Thay thế tất cả" + +msgid "< &Previous" +msgstr "< &Trước" + +msgid "&Next >" +msgstr "&Tiếp theo >" + +msgid "String to find" +msgstr "Chuỗi cần tìm" + +msgid "Replacement string" +msgstr "Thay thế chuỗi" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Không thể thi hành chương trình: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Mã ngôn ngữ hoặc tên (ví dụ: vi_VN)" + +msgid "Translation Language" +msgstr "Ngôn ngữ bản dịch" + +msgid "Language of the translation:" +msgstr "Ngôn ngữ cá»§a bản dịch:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Quản lý catalog" + +msgid "Catalog" +msgstr "Catalog" + +msgid "Total" +msgstr "Tổng cộng" + +msgid "Untrans" +msgstr "Chưa dịch" + +msgid "Fuzzy" +msgstr "Tạm dịch" + +msgid "Bad Tokens" +msgstr "Token hỏng" + +msgid "Last modified" +msgstr "Lần sá»­a cuối" + +msgid "Select directory" +msgstr "Chọn thư mục" + +msgid "Directories:" +msgstr "Thư mục:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Bạn có muốn xóa bỏ dá»± án không?" + +msgid "Confirmation" +msgstr "Sá»± xác thá»±c" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Bạn có muốn cập nhật hàng loạt\n" +"tất cả các catalog trong dá»± án này?" + +msgid "Information about the translator" +msgstr "Thông tin về các dịch giả" + +msgid "Name:" +msgstr "Tên:" + +msgid "Your Name" +msgstr "Tên Bạn" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "thevuong@live.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Tên và địa chỉ email cá»§a bạn chỉ được sá»­ dụng để thiết lập các tiêu đề dịch " +"giả cuối cùng cá»§a GNU gettext tập tin." + +msgid "Editing" +msgstr "Đang chỉnh sá»­a" + +msgid "Automatically compile MO file when saving" +msgstr "Tá»± động biên dịch tập tin MO khi lưu" + +msgid "Show summary after catalog update" +msgstr "Hiển thị thông tin tóm tắt sau khi cập nhật catalog" + +msgid "Check spelling" +msgstr "Kiểm tra lỗi chính tả" + +msgid "Always change focus to text input field" +msgstr "Luôn luôn để focus vào ô nhập liệu" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Đừng bao giờ để danh sách chuỗi nhận focus. Nếu cho phép, bạn phải sá»­ dụng " +"Ctrl-Phím mÅ©i tên để có thể di chuyển bằng bàn phím nhưng bạn lại có thể " +"nhập chữ một cách trá»±c tiếp, mà không cần phải nhấn Tab để thay đổi focus." + +msgid "Appearance" +msgstr "Giao diện" + +msgid "Use custom list font:" +msgstr "Sá»­ dụng danh sách tùy chỉnh phông:" + +msgid "Use custom text fields font:" +msgstr "Sá»­ dụng font tùy chỉnh các trường văn bản:" + +msgid "Change UI language" +msgstr "Thay đổi ngôn ngữ UI" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(yêu cầu Windows 8 hay mới hÆ¡n)" + +msgid "General" +msgstr "Tổng quan" + +msgid "Use translation memory" +msgstr "Dùng bộ nhớ bản dịch" + +msgid "Learn From Files..." +msgstr "Học từ các tập tin..." + +msgid "Learn from files..." +msgstr "Tìm hiểu từ các tập tin..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Thiết lập lại" + +msgid "Consult TM when updating from sources" +msgstr "Tham khảo TM khi cập nhật từ nguồn" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Nếu kích hoạt, Poedit sẽ cố gắng điền vào các mục mới bằng cách sá»­ dụng các\n" +"bản dịch trước được lưu trữ trong bộ nhớ dịch thuật. Nếu TM trống rỗng\n" +", nó sẽ rất không hiệu quả. Càng nhiều bản dịch\n" +" bạn sá»­a, TM càng phát triển lớn hÆ¡n và nó trở nên tốt hÆ¡n." + +msgid "Stored translations:" +msgstr "Các bản dịch được lưu trữ:" + +msgid "Database size on disk:" +msgstr "Kích thước cá»§a cÆ¡ sở dữ liệu trên đĩa:" + +msgid "Select translation files to import" +msgstr "Chọn các tập tin bản dịch để nhập vào" + +msgid "Translation Memory" +msgstr "CÆ¡ sở dữ liệu dịch" + +msgid "Importing translations..." +msgstr "Đang nhập các bản dịch..." + +msgid "Finalizing..." +msgstr "Hoàn thành..." + +msgid "Reset translation memory" +msgstr "Đặt lại bộ nhớ dịch thuật" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Bạn có chắc bạn muốn đặt lại bộ nhớ dịch thuật?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Đặt lại bộ nhớ dịch thuật sẽ xóa bỏ tất cả bản dịch được lưu trữ từ nó. Bạn " +"không thể hoàn tác thao tác này." + +msgid "Cancel" +msgstr "Há»§y bỏ" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Trình giải nén mã nguồn được dùng để tìm các chuỗi có thể dịch trong các tập " +"tin mã nguồn và giải nén nó vì thế chúng có thể được dịch." + +msgid "New" +msgstr "Tạo mới" + +msgid "Edit" +msgstr "Biên tập" + +msgid "Delete extractor" +msgstr "Xóa trình giải nén" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Bạn có chắc muốn xóa trình giải nén \"%s\"?" + +msgid "Extractors" +msgstr "Trình giải nén" + +msgid "Accounts" +msgstr "Tài khoản" + +msgid "Automatically check for updates" +msgstr "Tá»± động kiểm tra cập nhật" + +msgid "Include beta versions" +msgstr "Bao gồm cả bản thá»­ nghiệm" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Phiên bản beta chứa các tính năng và cải tiến mới nhất, nhưng có thể ít ổn " +"định." + +msgid "Updates" +msgstr "Cập Nhật" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Các thiết đặt này ảnh hưởng đến định dạng bên trong cá»§a các tập tin PO. Điều " +"chỉnh chúng nếu bạn có yêu cầu cụ thể ví dụ vì kiểm soát phiên bản." + +msgid "Line endings:" +msgstr "Dòng kết thúc:" + +msgid "Unix (recommended)" +msgstr "Unix (nên dùng)" + +msgid "Windows" +msgstr "Kiểu Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Ngắt tại:" + +msgid "Preserve formatting of existing files" +msgstr "Duy trì định dạng cá»§a tập tin đã có" + +msgid "Advanced" +msgstr "Nâng cao" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Cấu hình %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Kéo và Thả Thư mục Ở đây \n" +"\n" +"hoặc sá»­ dụng nút +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Kéo và thả thư mục ở đây \n" +"\n" +"hoặc sá»­ dụng nút +" + +msgid "Add Folders..." +msgstr "Thêm Thư Mục..." + +msgid "Add folders..." +msgstr "Thêm thư mục..." + +msgid "Add Files..." +msgstr "Thêm Tệp Tin..." + +msgid "Add files..." +msgstr "Thêm tệp tin..." + +msgid "Add Wildcard..." +msgstr "Thêm ký tá»± đại diện..." + +msgid "Add wildcard..." +msgstr "Thêm ký tá»± đại diện..." + +msgid "Paths" +msgstr "Đường dẫn" + +msgid "Excluded paths" +msgstr "Đường dẫn loại trừ" + +msgid "Additional keywords" +msgstr "Từ khoá bổ xung" + +msgid "Name of the project the translation is for" +msgstr "Tên cá»§a dá»± án cá»§a bản dịch" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "ví dụ: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (nên dùng)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Hãy ghi lại tập tin trước. Phần này không thể được sá»­a chữa cho đến sau này." + +msgid "Comment:" +msgstr "Chú thích:" + +msgid "OK" +msgstr "Đồng ý" + +msgid "C&lear" +msgstr "&Dọn dẹp" + +msgid "Clear the comment" +msgstr "Xóa phần chú thích" + +msgid "Create new translations project" +msgstr "Tạo một dá»± án dịch mới" + +msgid "Edit the project" +msgstr "Chỉnh sá»­a dá»± án" + +msgid "Delete the project" +msgstr "Xóa bỏ dá»± án" + +msgid "Update all" +msgstr "Cập nhật tất cả" + +msgid "Update all catalogs in the project" +msgstr "Cập nhật tất cả các catalog trong dá»± án" + +msgid "Edit project" +msgstr "Chỉnh sá»­a dá»± án" + +msgid "Project name:" +msgstr "Tên dá»± án:" + +msgid "Browse" +msgstr "Tìm duyệt" + +msgid "Add directory to the list" +msgstr "Thêm thư mục vào danh sách" + +msgid "&New..." +msgstr "&Mới..." + +msgid "New from &POT/PO file..." +msgstr "Tạo cái mới từ tệp tin &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Tạo cái mới từ tệp tin &POT/PO..." + +msgid "&Open..." +msgstr "&Mở..." + +msgid "Open Recent" +msgstr "Mở gần đây" + +msgid "Open from Crowdin..." +msgstr "Mở từ Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Mở Từ Crowdin..." + +msgid "&Close" +msgstr "Đó&ng" + +msgid "&Save" +msgstr "&Ghi lại" + +msgid "Save &as..." +msgstr "Ghi lại với tên &mới..." + +msgid "Save &As..." +msgstr "Ghi lại với tên &mới..." + +msgid "Compile to MO..." +msgstr "Biên dịch sang MO..." + +msgid "E&xport as HTML..." +msgstr "&Xuất ra định dạng HTML..." + +msgid "Check for updates..." +msgstr "Kiểm tra cập nhật..." + +msgid "&Preferences..." +msgstr "&Cá nhân hóa..." + +msgid "Catalogs &manager" +msgstr "&Quản lý các catalog" + +msgid "Catalogs &Manager" +msgstr "&Quản lý các catalog" + +msgid "E&xit" +msgstr "Thoát r&a" + +msgid "Quit" +msgstr "Thoát" + +msgid "Copy from singular" +msgstr "Sao chép từ số ít" + +msgid "Copy From Singular" +msgstr "Sao chép từ số ít" + +msgid "Translation is &fuzzy" +msgstr "Chuỗi là tạ&m dịch" + +msgid "Translation Is &Fuzzy" +msgstr "Chuỗi là &tạm dịch" + +msgid "Edit &comment" +msgstr "Sá»­a &chú thích" + +msgid "Edit &Comment" +msgstr "Sá»­a &chú thích" + +msgid "Suggestions" +msgstr "Đề xuất" + +msgid "&Show references" +msgstr "&Hiển thị tham chiếu" + +msgid "&Show References" +msgstr "&Hiển thị tham chiếu" + +msgid "&Find..." +msgstr "&Tìm kiếm..." + +msgid "Replace..." +msgstr "Thay thế..." + +msgid "Find next" +msgstr "Tìm tiếp" + +msgid "Find previous" +msgstr "Tìm lùi" + +msgid "Find and Replace..." +msgstr "Tìm và Thay thế..." + +msgid "Find Next" +msgstr "Tìm tiếp" + +msgid "Find Previous" +msgstr "Tìm lùi" + +msgid "&Preferences" +msgstr "&Cá nhân hóa" + +msgid "Display entry &IDs" +msgstr "Hiển thị các &ID mục vào" + +msgid "Display Entry &IDs" +msgstr "Hiển thị các &ID mục vào" + +msgid "Sort by &file order" +msgstr "Sắp xếp theo thứ tá»± &tập tin" + +msgid "Sort by &File Order" +msgstr "Sắp xếp theo thứ tá»± &Tập tin" + +msgid "Sort by &source" +msgstr "Sắp xếp theo &chuỗi nguồn" + +msgid "Sort by &Source" +msgstr "Sắp xếp theo &chuỗi nguồn" + +msgid "Sort by &translation" +msgstr "Sắp xếp theo chuỗi &dịch" + +msgid "Sort by &Translation" +msgstr "Sắp xếp theo chuỗi &dịch" + +msgid "&Group by context" +msgstr "Nhóm theo n&gữ cảnh" + +msgid "&Group By Context" +msgstr "Nhóm Theo N&gữ Cảnh" + +msgid "Entries with errors first" +msgstr "Mục có lỗi đầu tiên" + +msgid "Entries with Errors First" +msgstr "Mục Có Lỗi Đầu Tiên" + +msgid "&Untranslated entries first" +msgstr "Mục &chưa dịch đầu tiên" + +msgid "&Untranslated Entries First" +msgstr "Mục &chưa dịch đầu tiên" + +msgid "Show sidebar" +msgstr "Hiện thanh công cụ" + +msgid "Show status bar" +msgstr "Hiển thanh trạng thái" + +msgid "C&atalog" +msgstr "C&atalog" + +msgid "&Update from sources" +msgstr "&Cập nhật từ mã nguồn" + +msgid "&Update from Sources" +msgstr "&Cập nhật từ Mã nguồn" + +msgid "Update from &POT file..." +msgstr "Cập nhật từ tập tin &POT..." + +msgid "Update from &POT File..." +msgstr "Cập nhật từ tập tin &POT..." + +msgid "Sync with Crowdin" +msgstr "Đồng bộ với Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Điền vào các bản dịch thiếu từ &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Điền vào các Bản Dịch Thiếu từ &TM..." + +msgid "&Purge deleted translations" +msgstr "&Thanh lọc các chuỗi đã xóa" + +msgid "&Purge Deleted Translations" +msgstr "&Thanh lọc các chuỗi đã xóa" + +msgid "&Validate translations" +msgstr "&Thẩm tra bản dịch" + +msgid "&Validate Translations" +msgstr "&Thẩm tra bản dịch" + +msgid "&Properties..." +msgstr "&Thuộc tính..." + +msgid "&Done and next" +msgstr "&Thá»±c hiện và làm tiếp" + +msgid "&Done and Next" +msgstr "&Thá»±c hiện và làm tiếp" + +msgid "&Previous translation" +msgstr "Bản dịch &Trước" + +msgid "&Previous Translation" +msgstr "Bản Dịch &Trước" + +msgid "&Next translation" +msgstr "Bản dịch &kế tiếp" + +msgid "&Next Translation" +msgstr "Bản Dịch &Kế Tiếp" + +msgid "P&revious unfinished" +msgstr "Câu cần dịch liền t&rước" + +msgid "P&revious Unfinished" +msgstr "Câu cần dịch liền t&rước" + +msgid "Ne&xt unfinished" +msgstr "Câu chưa dịch &tiếp theo" + +msgid "Ne&xt Unfinished" +msgstr "Câu chưa dịch &tiếp theo" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "Dạng số tiếp theo" + +msgid "Next Plural Form" +msgstr "Dạng số tiếp theo" + +msgid "&Online help" +msgstr "Trợ giúp &trá»±c tuyến" + +msgid "&Online Help" +msgstr "Trợ Giúp &Trá»±c tuyến" + +msgid "&GNU gettext manual" +msgstr "Sổ tay hướng dẫn sá»­ dụng &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Sổ tay hướng dẫn sá»­ dụng &GNU gettext" + +msgid "&About Poedit" +msgstr "&Giới thiệu về Poedit" + +msgid "&About" +msgstr "&Giới thiệu" + +msgid "Extractor setup" +msgstr "Thiết lập Extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Danh sách đuôi tập tin ngăn cách bởi dấu chấm phẩy (ví dụ *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Lệnh gọi:" + +msgid "Command to extract translations:" +msgstr "Lệnh để giải nén các bản dịch:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Đây là lệnh được dùng để khởi chạy trình giải nén.\n" +"%o mở rộng tên cá»§a tập tin đầu ra, %K tới danh sách\n" +"các từ khóa, %F tới danh sách tập tin đầu vào,\n" +"%C tới cờ bộ mã ký tá»± (xem bên dưới)." + +msgid "An item in keywords list:" +msgstr "Một mục tin trong danh sách các từ khóa:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Cái này sẽ gắn với dòng lệnh một lần\n" +"cho mỗi từ khóa. %k được triển khai thành từ khóa." + +msgid "An item in input files list:" +msgstr "Một mục tin trong danh sách các tập tin nguồn vào:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Cái này sẽ gắn với dòng lệnh một lần với mỗi\n" +"tập tin đầu vào. %f được triển khai thành tên tập tin." + +msgid "Source code charset:" +msgstr "Bảng mã dữ liệu nguồn:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Cái này sẽ gắn với dòng lệnh chỉ khi bộ mã ký tá»±\n" +"nguồn được đưa ra. %c được triển khai thành giá trị bộ ký tá»±." + +msgid "Catalog properties" +msgstr "Các thuộc tính cá»§a catalog" + +msgid "Project name and version:" +msgstr "Tên và phiên bản cá»§a dá»± án:" + +msgid "Plural Forms:" +msgstr "Dạng số nhiều:" + +msgid "Use default rules for this language" +msgstr "Sá»­ dụng quy tắc mặc định cho ngôn ngữ này" + +msgid "Use custom expression" +msgstr "Dùng biểu thức tá»± chọn" + +msgid "Learn about plural forms" +msgstr "Tìm hiểu dạng thức số nhiều" + +msgid "Charset:" +msgstr "Bảng mã ký tá»±:" + +msgid "Team:" +msgstr "Nhóm:" + +msgid "Team's email address:" +msgstr "Địa chỉ thư điện tá»­ cá»§a nhóm" + +msgid "Translation properties" +msgstr "Thuộc tính bản dịch" + +msgid "Sources paths" +msgstr "Đường dẫn mã nguồn" + +msgid "Extract text from source files in the following directories:" +msgstr "Trích xuất văn bản từ mã nguồn trong những thư mục sau đây:" + +msgid "Base path:" +msgstr "Đường dẫn cÆ¡ sở:" + +msgid "Sources keywords" +msgstr "Từ khóa dùng cho mã nguồn" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Sá»­ dụng những từ khóa (tên hàm) để nó có thể nhận ra các chuỗi có thể dịch\n" +"trong tập tin mã nguồn:" + +msgid "Learn about gettext keywords" +msgstr "Học thêm về các từ khóa cá»§a GNU gettext" + +msgid "Update summary" +msgstr "Tóm tắt sÆ¡ lược quá trình cập nhật" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Các chuỗi tìm thấy trong tập tin nguồn nhưng không có trong catalog.\n" +"Poedit sẽ thêm vào ngay bây giờ." + +msgid "New strings" +msgstr "Chuỗi mới" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Những chuỗi này không còn tồn tại trong tập tin nguồn nữa.\n" +"Poedit sẽ loại bỏ chúng bây giờ." + +msgid "Obsolete strings" +msgstr "Chuỗi đã cÅ©" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 mới, 0 cÅ©)" + +msgid "Open" +msgstr "Mở" + +msgid "Save catalog" +msgstr "Ghi lại catalog" + +msgid "Validate" +msgstr "Thẩm tra" + +msgid "Check for errors in the translation" +msgstr "Tìm kiếm các lỗi trong bản dịch" + +msgid "Update" +msgstr "Cập nhật" + +msgid "Update catalog - synchronize it with sources" +msgstr "Cập nhật catalog - đồng bộ hóa nó với mã nguồn" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Đặt/Tắt trạng thái cá»§a một chuỗi là tạm dịch" + +msgid "Show or hide the sidebar" +msgstr "Hiện hoặc ẩn thanh công cụ" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Văn bản nguồn trước đó:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Văn bản nguồn cÅ© (trước khi nó bị thay đổi trong một bản cập nhật) mà bản " +"dịch mờ tương ứng với." + +msgid "Notes for translators:" +msgstr "Ghi chú dành cho người dịch:" + +msgid "Add comment" +msgstr "Thêm bình luận" + +msgid "Add Comment" +msgstr "Thêm Bình Luận" + +msgid "Translation suggestions:" +msgstr "Các gợi ý dịch:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Không tìm thấy từ khớp" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Không tìm thấy các từ khớp" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Chuỗi này được tìm thấy trong bộ nhớ bản dịch cá»§a Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Mới: %i, quá cÅ©: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Đang nhập các bản dịch: %d" + +msgid "Poedit Update" +msgstr "Cập nhật Poedit" + +msgid "Preparing migration..." +msgstr "Chuẩn bị chuyển đổi..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Trạng thái thoát di chuyển: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit cần chuyển đổi bộ nhớ bản dịch sang một định dạng mới." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Điều này phải được thá»±c hiện trước khi Poedit có thể khởi động. Nó có thể " +"mất vài phút nếu bạn có nhiều bạn dịch được lưu, nhưng thường thì nhanh hÆ¡n." + +msgid "Proceed" +msgstr "Tiếp tục" + +msgid "Translation memory migration failed." +msgstr "Chuyển đổi bộ nhớ bản dịch gặp lỗi." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Dữ liệu bộ nhớ bản dịch cá»§a bạn không thể di chuyển. Lỗi là: \n" +"\n" +"%s\n" +"Vui lòng email help@poedit.net và chúng tôi sẽ nhận nó đã được sá»­a." + +msgid "Cannot create temporary directory." +msgstr "Không thể tạo thư mục tạm." + +msgid "Welcome to Poedit" +msgstr "Chào mừng bạn dùng Poedit" + +msgid "Edit a translation" +msgstr "Sá»­a một bản dịch" + +msgid "Open an existing PO file and edit the translation." +msgstr "Mở một tập tin PO sẵn có và sá»­a bản dịch." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Lấy một tập tin PO hay mẫu POT và tạo bản dịch mới từ đó." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Cộng tác trên một bản dịch với Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Tải một tập tin từ dá»± án Crowdin, dịch và đồng bộ các thay đổi cá»§a bạn trở " +"lại." + +msgid "What is Crowdin?" +msgstr "Crowdin là gì?" + +msgid "There are no translations. That’s unusual." +msgstr "Ở đây không có bản dịch nào cả. Điều này là bất thường." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Các chuỗi có thể dịch không được tá»± động thêm vào trong hệ thống Gettext, " +"nhưng lại có thể tá»± động\n" +"rút trích ra từ mã nguồn. Theo cách này chúng luôn được cập nhật và chính " +"xác.\n" +"Những người dịch thường dùng các tập tin mẫu PO (POT) được chuẩn bị sẵn dành " +"cho họ từ người phát triển." + +msgid "(Learn more about GNU gettext)" +msgstr "(Học thêm về GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Cách đơn giản nhất để điền thông tin cho catalog này là cập nhật nó từ một " +"tập tin POT:" + +msgid "Update from POT" +msgstr "Cập nhật từ tệp tin POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Lấy các chuỗi có thể dịch được từ một mẫu POT sẵn có." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Bạn đồng thời có thể rút trích các chuỗi có thể dịch được trá»±c tiếp từ mã " +"nguồn:" + +msgid "Extract from sources" +msgstr "Trích từ mã nguồn" + +msgid "Configure source code extraction in Properties." +msgstr "Cấu hình việc rút trích mã nguồn trong `Thuộc tính'." + +msgid "Sync" +msgstr "Đồng bộ" + +msgid "Synchronize the translation with Crowdin" +msgstr "Đồng bộ bản dịch với Crowdin" diff --git a/locales/zh_CN.mo b/locales/zh_CN.mo new file mode 100644 index 0000000000000000000000000000000000000000..4ee8ce5fb4ea49afaf4364d14419f6798e561770 GIT binary patch literal 43007 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 h@22?a>`}gXHr{#EFP=F@?b*m)(f4T4t9\n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "隐藏这条消息" + +msgid "Don't Show Again" +msgstr "不再显示" + +msgid "Don't show again" +msgstr "不再显示" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "共有 %i 行(文件“%s”中)未正确载入。" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "第 %d 行已损坏(文件“%s”中),不是有效的 %s 数据。" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "格式异常的头:“%s”" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "已损坏的编目文件:和 msgid_plural 一起使用了单数形式的 msgstr" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "已损坏的编目文件:在没有 msgid_plural 的情况下使用了复数形式的 msgstr" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "加载编目时遇到错误。有些数据可能缺失或损坏。" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "不能加载文件 %s,它可能已损坏。" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"文件“%s”为只读,不能保存。\n" +"请使用其他名称保存。" + +#, c-format +msgid "Couldn't save file %s." +msgstr "不能保存文件 %s。" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "在精确格式化文件时有一个问题(但文件保存正确)。" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"不能按编目设置中所指定的将编目保存为 “%s” 字符集。\n" +"\n" +"将保存为 UTF-8 字符集,设置也会相应地被修改。" + +msgid "Error saving catalog" +msgstr "保存编目时出错" + +msgid "PO Translation Files" +msgstr "PO 翻译文件" + +msgid "POT Translation Templates" +msgstr "POT 翻译模板" + +msgid "All Translation Files" +msgstr "所有翻译文件" + +msgid "Merging differences..." +msgstr "合并差异..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "“%s”不是一个有效的 POT 文件。" + +msgid "(Use default language)" +msgstr "(使用默认语言)" + +msgid "Select your preferred language" +msgstr "选择您的首选语言" + +msgid "Language selection" +msgstr "语言选择" + +msgid "You must restart Poedit for this change to take effect." +msgstr "您必须重新启动 Poedit 才能使这个更改生效。" + +msgid "Downloading translations is disabled in this project." +msgstr "此项目禁用了下载翻译。" + +msgid "Not authorized, please sign in again." +msgstr "未授权,请尝试重新登录。" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin 是一个在线的本地化管理平台和协作翻译工具。Poedit 可以无缝同步在 " +"Crowdin 上管理的 PO 文件。" + +msgid "Sign In" +msgstr "登录" + +msgid "Sign in" +msgstr "登录" + +msgid "Sign Out" +msgstr "登出" + +msgid "Sign out" +msgstr "登出" + +msgid "Waiting for authentication…" +msgstr "正在等待身份验证…" + +msgid "Updating user information…" +msgstr "正在更新用户信息…" + +msgid "Signed in as:" +msgstr "已登录为:" + +msgid "Learn More About Crowdin" +msgstr "了解更多有关 Crowdin" + +msgid "Learn more about Crowdin" +msgstr "了解更多有关 Crowdin" + +msgid "Sign in to Crowdin" +msgstr "登录到 Crowdin" + +msgid "Open Crowdin translation" +msgstr "打开 Crowdin 翻译" + +msgid "Project:" +msgstr "项目:" + +msgid "Language:" +msgstr "语言:" + +msgid "File:" +msgstr "文件:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "您的 Crowdin 账户中没有列出翻译项目。" + +msgid "This project has no files that can be translated in Poedit." +msgstr "此项目没有可以在 Poedit 中翻译的文件。" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "只能在 Crowdin 的网页界面中编辑此文件。" + +msgid "Downloading latest translations…" +msgstr "正在下载最新的翻译…" + +msgid "Syncing with Crowdin" +msgstr "正在与 Crowdin 同步" + +msgid "Syncing with Crowdin failed." +msgstr "与 Crowdin 同步失败。" + +msgid "Crowdin error" +msgstr "Crowdin 错误" + +msgid "Uploading translations…" +msgstr "正在上传翻译…" + +msgid "&Copy" +msgstr "复制(&C)" + +msgid "Learn more" +msgstr "了解更多" + +msgid "Learn More" +msgstr "了解更多" + +#, c-format +msgid "Failed command: %s" +msgstr "命令失败: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "合并 gettext 编目失败。" + +msgid "Scanning files..." +msgstr "正在扫描文件..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "正在解析 %s 文件..." + +msgid "Failed to load extracted catalog." +msgstr "加载已提取的编目失败。" + +msgid "&Help" +msgstr "帮助(&H)" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO 文件不能直接在 Poedit 中编辑。" + +msgid "Error opening file" +msgstr "打开文件时出错" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "请打开并编辑对应的 PO 文件。当你保存它时,MO 文件也将被更新。" + +msgid "don't delete temporary files (for debugging)" +msgstr "不删除临时文件(供调试使用)" + +msgid "handle a poedit:// URI" +msgstr "处理 poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "与 Poedit 进程的通信失败。" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "发生了不能处理的异常:%s" + +msgid "Unhandled exception occurred." +msgstr "发生了不能处理的异常。" + +msgid "Open catalog" +msgstr "打开编目" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "文件“%s”不存在。" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "关于 %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "版本 %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "服务" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "隐藏 %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "隐藏其他" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "全部显示" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "退出 %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit 是一个易于使用的翻译编辑器。" + +msgid "Catalogs Manager" +msgstr "编目管理器" + +msgid "Check for Updates..." +msgstr "检查更新..." + +msgid "&Edit" +msgstr "编辑(&E)" + +msgid "Undo" +msgstr "撤销" + +msgid "Redo" +msgstr "重做" + +msgid "Paste and Match Style" +msgstr "粘贴并匹配样式" + +msgid "Delete" +msgstr "删除" + +msgid "Spelling and Grammar" +msgstr "拼写和语法" + +msgid "Show Spelling and Grammar" +msgstr "显示拼写和语法" + +msgid "Check Document Now" +msgstr "立即检查文档" + +msgid "Check Spelling While Typing" +msgstr "在输入时检查拼写" + +msgid "Check Grammar With Spelling" +msgstr "检查拼写和语法" + +msgid "Correct Spelling Automatically" +msgstr "自动更正拼写错误" + +msgid "Substitutions" +msgstr "替换" + +msgid "Show Substitutions" +msgstr "显示替换项目" + +msgid "Smart Copy/Paste" +msgstr "智能复制/粘贴" + +msgid "Smart Quotes" +msgstr "智能引号" + +msgid "Smart Dashes" +msgstr "智能短划线" + +msgid "Smart Links" +msgstr "智能链接" + +msgid "Text Replacement" +msgstr "文本替换" + +msgid "Transformations" +msgstr "转换" + +msgid "Make Upper Case" +msgstr "使大写" + +msgid "Make Lower Case" +msgstr "使小写" + +msgid "Capitalize" +msgstr "大写" + +msgid "Speech" +msgstr "朗读" + +msgid "Start Speaking" +msgstr "开始朗读" + +msgid "Stop Speaking" +msgstr "停止朗读" + +msgid "&View" +msgstr "查看(&V)" + +msgid "Enter Full Screen" +msgstr "进入全屏模式" + +msgid "Window" +msgstr "窗口" + +msgid "Minimize" +msgstr "最小化" + +msgid "Zoom" +msgstr "缩放" + +msgid "Bring All to Front" +msgstr "全部带到最前方" + +msgid "PO Translation" +msgstr "PO 翻译" + +msgid "The file cannot be opened." +msgstr "该文件无法打开。" + +msgid "Invalid file" +msgstr "无效文件" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "该文件可能已损坏或不是 Poedit 所能识别的格式。" + +msgid "&Undo" +msgstr "撤销(&U)" + +msgid "&Redo" +msgstr "恢复(&R)" + +msgid "Cu&t" +msgstr "剪切(&T)" + +msgid "Cut" +msgstr "剪切" + +msgid "Copy" +msgstr "复制" + +msgid "&Paste" +msgstr "粘贴(&P)" + +msgid "Paste" +msgstr "粘贴" + +msgid "&Delete" +msgstr "刪除(&D)" + +msgid "Select &All" +msgstr "全选(&A)" + +msgid "Select All" +msgstr "全选" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "您不能在 Poedit 窗口上放下一个以上的文件。" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "文件“%s”不是一个消息编目。" + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "文件(&F)" + +msgid "&Go" +msgstr "转到(&G)" + +msgid "Source text:" +msgstr "源文本:" + +msgid "Singular:" +msgstr "单数:" + +msgid "Plural:" +msgstr "复数:" + +msgid "Translation:" +msgstr "翻译:" + +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 文件只是模板,不包含任何翻译内容。\n" +"若要制作一个翻译,请基于模板创建一个新的 PO 文件。" + +msgid "Create New Translation" +msgstr "创建新的翻译" + +msgid "Create new translation" +msgstr "创建新的翻译" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "拼写检查被禁用,因为 %s 的字典没有安装。" + +msgid "Install" +msgstr "安装" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "编目已修改。您想要保存更改吗?" + +msgid "Save changes" +msgstr "保存更改" + +msgid "Your changes will be lost if you don't save them." +msgstr "如果您不保存,则您的更改将丢失。" + +msgid "Save" +msgstr "保存" + +msgid "Don't save" +msgstr "不保存" + +msgid "Don't Save" +msgstr "不保存" + +msgid "Save as..." +msgstr "另存为..." + +msgid "Compile to..." +msgstr "编译为..." + +msgid "Compiled Translation Files" +msgstr "已编译的翻译文件" + +msgid "Export as..." +msgstr "导出为..." + +msgid "HTML Files" +msgstr "HTML 文件" + +msgid "Open catalog template" +msgstr "打开编目模板" + +msgid "Updating catalog" +msgstr "更新编目" + +msgid "Source code not available." +msgstr "源代码不可用。" + +msgid "Updating failed" +msgstr "更新失败" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "不能从源代码更新翻译,因为在目录属性中指定的位置没有发现代码。" + +msgid "Entries in the catalog are probably incorrect." +msgstr "编目中的条目可能不正确。" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "更新编目失败。单击 '详细资料 >>' 了解详细信息。" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "在翻译中发现了 %d 个问题。" + +msgid "Validation results" +msgstr "验证结果" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"有错误的条目在列表中被标记为红色。您选择这样的条目时将显示错误的详细信息。" + +msgid "The file was saved safely." +msgstr "文件已被安全地保存。" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "文件已安全地保存,并编译成 MO 格式的文件,但它可能不能正常工作。" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "文件已安全地保存,但它不能被编译成 MO 格式并使用。" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "文件被编译成 MO 格式,但它可能不能正确工作。" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "文件不能编译成 MO 格式并使用。" + +msgid "No problems with the translation found." +msgstr "翻译中未发现问题。" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "翻译已经可以使用了,不过还有 %d 个条目没有被翻译。" + +msgid "The translation is ready for use." +msgstr "翻译为使用准备就绪。" + +msgid "Context:" +msgstr "上下文:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit 自动修复了“%s”文件中的无效内容。" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"该文件中包含重复的项目,这是不允许的,并且影响了该文件被使用。Poedit 修复了该" +"问题,但您应该审阅任何已被标记为“模糊”的翻译和纠正它们(如有必要)。" + +msgid "Language of the translation isn't set." +msgstr "翻译语言未设置。" + +msgid "Set Language" +msgstr "设置语言" + +msgid "Set language" +msgstr "选择语言" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"如果翻译语言设置不正确,建议将不可用。其他特性(例如复数形式)也可能受到影" +"响。" + +msgid "Language of the translation is the same as source language." +msgstr "翻译语言与源语言相同。" + +msgid "Fix Language" +msgstr "修复语言" + +msgid "Fix language" +msgstr "修复语言" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "这个编目有带有复数形式的条目,但没有已配置的 Plural-Forms 头。" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "这个编目中的条目的复数形式数量与编目的 Plural-Forms 头所说明的不同" + +msgid "Required header Plural-Forms is missing." +msgstr "缺少必需的头 Plural-Forms。" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "在 Plural-Forms 头中存在语法错误(\"%s\")。" + +msgid "Fix the Header" +msgstr "修复文件头" + +msgid "Fix the header" +msgstr "修正头" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "该目录中所使用的复数形式对于 %s 是不同寻常的。" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "检查" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "加载消息编目文件 '%s' 时存在错误。" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "已翻译: %d 共计 %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "剩余: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d 错误" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d 条目" + +msgid " (unsaved)" +msgstr " (未保存)" + +msgid " (modified)" +msgstr " (已修改)" + +msgid "Go" +msgstr "转至" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "更新翻译记忆库失败: %s " + +msgid "Purge deleted translations" +msgstr "清除已删除的翻译" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "您确定要移除所有不再使用的翻译吗?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"如果您继续清除,则所有被标记为已删除的翻译都将被永久移除。如果未来它们被添加" +"回来,您必须再翻译一遍。" + +msgid "Keep" +msgstr "保持" + +msgid "Purge" +msgstr "清除" + +msgid "Fill missing translations from TM" +msgstr "从 TM 填补缺少的翻译" + +msgid "Only fill in exact matches" +msgstr "仅填补完全匹配的项" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"默认情况下,不准确的结果被填补并标记为模糊。选中此选项只包括精确匹配的项。" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "不标记完全匹配的项为模糊" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"只有在你信任你 TM 的质量时启用。默认情况下,从 TM 的所有匹配项被标记为模糊," +"应加以审查。" + +msgid "Fill" +msgstr "å¡«è¡¥" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d 个条目已通过翻译记忆库填充。" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "这些翻译被标记为模糊的,因为他们可能是不准确。请检查它们的准确性。" + +msgid "No entries could be filled from the translation memory." +msgstr "没有条目可以通过翻译记忆库来填补。" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"翻译记忆库中没有包含任何与此文件内容相似的字符串。 Poedit 需要通过你手动翻译" +"的文件来得到充分的学习,然后才能在半自动翻译中发挥作用。" + +msgid "Translating" +msgstr "翻译中" + +msgid "Filling missing translations from TM..." +msgstr "正在使用翻译记忆库填补缺少的翻译..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "已翻译 %u 个字符串" + +msgid "Copy from source text" +msgstr "复制源文本" + +msgid "Copy from Source Text" +msgstr "复制源文本" + +msgid "Clear translation" +msgstr "清除翻译" + +msgid "Clear Translation" +msgstr "清除翻译" + +msgid "Edit comment" +msgstr "编辑注释" + +msgid "Edit Comment" +msgstr "编辑注释" + +msgid "References:" +msgstr "引用:" + +msgid "Everything" +msgstr "一切" + +#, c-format +msgid "Form %i" +msgstr "表格 %i" + +msgid "Singular" +msgstr "单数" + +msgid "Zero" +msgstr "零" + +msgid "One" +msgstr "一" + +msgid "Two" +msgstr "二" + +msgid "Plural" +msgstr "复数" + +msgid "Other" +msgstr "其他" + +msgid "&Bookmarks" +msgstr "书签(&B)" + +#, c-format +msgid "Set bookmark %i" +msgstr "设置书签 %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "转至书签 %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "设置书签 %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "转至书签 %i" + +msgid "Hide Sidebar" +msgstr "隐藏侧边栏" + +msgid "Show Sidebar" +msgstr "显示侧边栏" + +msgid "Hide Status Bar" +msgstr "隐藏状态栏" + +msgid "Show Status Bar" +msgstr "显示状态栏" + +msgid "Source text" +msgstr "源文本" + +msgid "Translation" +msgstr "翻译" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "源文本 — %s" + +msgid "unknown language" +msgstr "未知语言" + +#, c-format +msgid "Translation — %s" +msgstr "翻译 — %s" + +msgid "Error:" +msgstr "错误:" + +msgid "Source file" +msgstr "源文件" + +msgid "Source file occurrence:" +msgstr "源文件出现:" + +msgid "Open in Editor" +msgstr "在编辑器中打开" + +msgid "Open in editor" +msgstr "在编辑器中打开" + +msgid "No references for the selected item." +msgstr "没有对选定项的引用。" + +#, c-format +msgid "Error opening file %s!" +msgstr "打开文件 %s 时出错!" + +msgid "Find" +msgstr "查找" + +msgid "Replace" +msgstr "替换" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "选项" + +msgid "Ignore case" +msgstr "忽略大小写" + +msgid "Wrap around" +msgstr "全字匹配" + +msgid "Whole words only" +msgstr "仅整个单词" + +msgid "Find in source texts" +msgstr "在源文本中查找" + +msgid "Find in translations" +msgstr "在翻译中查找" + +msgid "Find in comments" +msgstr "在注释中查找" + +msgid "Close" +msgstr "关闭" + +msgid "Replace All" +msgstr "全部替换" + +msgid "Replace all" +msgstr "全部替换" + +msgid "< &Previous" +msgstr "< 上一个(&P)" + +msgid "&Next >" +msgstr "下一个(&N) >" + +msgid "String to find" +msgstr "要查找的字符串" + +msgid "Replacement string" +msgstr "替换字符串" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "不能执行程序: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "语言的代码或名称(例如:en_GB)" + +msgid "Translation Language" +msgstr "翻译" + +msgid "Language of the translation:" +msgstr "要翻译的语言:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - 编目管理器" + +msgid "Catalog" +msgstr "编目" + +msgid "Total" +msgstr "总计" + +msgid "Untrans" +msgstr "未翻译" + +msgid "Fuzzy" +msgstr "模糊" + +msgid "Bad Tokens" +msgstr "错误的标记" + +msgid "Last modified" +msgstr "最后修改" + +msgid "Select directory" +msgstr "选择目录" + +msgid "Directories:" +msgstr "目录:" + +msgid "" +msgstr "<未命名>" + +msgid "Do you want to delete the project?" +msgstr "您确定要删除此项目吗?" + +msgid "Confirmation" +msgstr "确认" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"您确定要对这个项目中的所有编目执行\n" +"大规模更新吗?" + +msgid "Information about the translator" +msgstr "关于翻译者的信息" + +msgid "Name:" +msgstr "名称:" + +msgid "Your Name" +msgstr "你的名字" + +msgid "Email:" +msgstr "电子邮件:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"你的名称和电子邮件地址仅用于设置 GNU gettext 文件的 Last-Translator 信息。" + +msgid "Editing" +msgstr "编辑" + +msgid "Automatically compile MO file when saving" +msgstr "在保存时自动编译 MO 文件" + +msgid "Show summary after catalog update" +msgstr "在编目更新之后显示摘要" + +msgid "Check spelling" +msgstr "检查拼写" + +msgid "Always change focus to text input field" +msgstr "总是将焦点移动到文本输入字段" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"从不让字串列表取得焦点。如果启用,您必须使用 “Ctrl-方向键” 进行键盘导航,但您" +"也可以立即输入文本,不用按 Tab 改变焦点。" + +msgid "Appearance" +msgstr "外观" + +msgid "Use custom list font:" +msgstr "使用自定义的列表字体:" + +msgid "Use custom text fields font:" +msgstr "使用自定义的文本框字体:" + +msgid "Change UI language" +msgstr "更改用户界面语言" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(需要 Windows 8 或更高版本)" + +msgid "General" +msgstr "常规" + +msgid "Use translation memory" +msgstr "使用翻译记忆" + +msgid "Learn From Files..." +msgstr "从文件中学习..." + +msgid "Learn from files..." +msgstr "从文件中了解..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "重置" + +msgid "Consult TM when updating from sources" +msgstr "从源代码更新时查阅翻译记忆库" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"如果启用,Poedit 会尝试使用你以前存储在翻译\n" +"记忆库中的翻译填补新的条目。如果翻译记忆库\n" +"几乎是空的,这将不会非常有效。你翻译的越多,\n" +"翻译记忆库就会成长得越大,自动填补的效果就会越好。" + +msgid "Stored translations:" +msgstr "存储翻译:" + +msgid "Database size on disk:" +msgstr "磁盘上数据文件的大小:" + +msgid "Select translation files to import" +msgstr "选择需要导入的翻译文件" + +msgid "Translation Memory" +msgstr "翻译记忆" + +msgid "Importing translations..." +msgstr "导入翻译..." + +msgid "Finalizing..." +msgstr "正在完成..." + +msgid "Reset translation memory" +msgstr "重置翻译记忆库" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "你确定你要重置翻译记忆库吗?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "重置翻译记忆库将无可挽回地删除其中存储的所有翻译。你无法撤消此操作。" + +msgid "Cancel" +msgstr "取消" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "翻译记忆" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"源代码提取器用于在源代码文件中找到可翻译字符串和提取它们,以便它们可以被翻" +"译。" + +msgid "New" +msgstr "新建" + +msgid "Edit" +msgstr "编辑" + +msgid "Delete extractor" +msgstr "删除提取器" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "您确定要删除“%s”提取器吗?" + +msgid "Extractors" +msgstr "提取器" + +msgid "Accounts" +msgstr "账号" + +msgid "Automatically check for updates" +msgstr "自动检查更新" + +msgid "Include beta versions" +msgstr "包括测试版本" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "测试版包含最新功能和改进,但可能有点不太稳定。" + +msgid "Updates" +msgstr "更新" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"这些设置会影响 PO 文件的内部格式。如果你有特定的要求例如版本控制时,调整它" +"们。" + +msgid "Line endings:" +msgstr "行结束符:" + +msgid "Unix (recommended)" +msgstr "Unix (推荐)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "换行在:" + +msgid "Preserve formatting of existing files" +msgstr "保留现有文件的格式" + +msgid "Advanced" +msgstr "高级" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s 首选项" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"拖放文件夹到这里\n" +"\n" +"或者使用 + 按钮" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"拖放文件夹到这里\n" +"\n" +"或者使用 + 按钮" + +msgid "Add Folders..." +msgstr "添加文件夹..." + +msgid "Add folders..." +msgstr "添加文件夹..." + +msgid "Add Files..." +msgstr "添加文件..." + +msgid "Add files..." +msgstr "添加文件..." + +msgid "Add Wildcard..." +msgstr "添加通配符..." + +msgid "Add wildcard..." +msgstr "添加通配符..." + +msgid "Paths" +msgstr "路径" + +msgid "Excluded paths" +msgstr "排除的路径" + +msgid "Additional keywords" +msgstr "额外的关键字" + +msgid "Name of the project the translation is for" +msgstr "翻译的项目名称" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "例如: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (推荐)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "请先保存文件。以下内容在此之前不能被编辑。" + +msgid "Comment:" +msgstr "注释:" + +msgid "OK" +msgstr "确定" + +msgid "C&lear" +msgstr "清除(&L)" + +msgid "Clear the comment" +msgstr "清除注释" + +msgid "Create new translations project" +msgstr "创建新的翻译项目" + +msgid "Edit the project" +msgstr "编辑项目" + +msgid "Delete the project" +msgstr "删除项目" + +msgid "Update all" +msgstr "更新全部" + +msgid "Update all catalogs in the project" +msgstr "更新项目中的所有编目" + +msgid "Edit project" +msgstr "编辑项目" + +msgid "Project name:" +msgstr "项目名称:" + +msgid "Browse" +msgstr "浏览" + +msgid "Add directory to the list" +msgstr "将目录添加到列表" + +msgid "&New..." +msgstr "新建(&N)..." + +msgid "New from &POT/PO file..." +msgstr "从 POT/PO 文件新建(&P)..." + +msgid "New From &POT/PO File..." +msgstr "从 POT/PO 文件新建(&P)..." + +msgid "&Open..." +msgstr "打开(&O)..." + +msgid "Open Recent" +msgstr "打开最近的" + +msgid "Open from Crowdin..." +msgstr "从 Crowdin 打开..." + +msgid "Open From Crowdin..." +msgstr "从 Crowdin 打开..." + +msgid "&Close" +msgstr "关闭(&C)" + +msgid "&Save" +msgstr "保存(&S)" + +msgid "Save &as..." +msgstr "另存为(&A)..." + +msgid "Save &As..." +msgstr "另存为(&A)..." + +msgid "Compile to MO..." +msgstr "编译为 MO..." + +msgid "E&xport as HTML..." +msgstr "导出为HTML格式...(&X)" + +msgid "Check for updates..." +msgstr "检查更新..." + +msgid "&Preferences..." +msgstr "首选项(&P)..." + +msgid "Catalogs &manager" +msgstr "编目管理器(&M)" + +msgid "Catalogs &Manager" +msgstr "编目管理器(&M)" + +msgid "E&xit" +msgstr "退出(&X)" + +msgid "Quit" +msgstr "退出" + +msgid "Copy from singular" +msgstr "复制单数" + +msgid "Copy From Singular" +msgstr "复制单数" + +msgid "Translation is &fuzzy" +msgstr "翻译是模糊翻译(&F)" + +msgid "Translation Is &Fuzzy" +msgstr "翻译是模糊翻译(&F)" + +msgid "Edit &comment" +msgstr "编辑注释(&C)" + +msgid "Edit &Comment" +msgstr "编辑注释(&C)" + +msgid "Suggestions" +msgstr "建议" + +msgid "&Show references" +msgstr "显示引用(&S)" + +msgid "&Show References" +msgstr "显示引用(&S)" + +msgid "&Find..." +msgstr "查找(&F)..." + +msgid "Replace..." +msgstr "替换..." + +msgid "Find next" +msgstr "查找下一个" + +msgid "Find previous" +msgstr "查找上一个" + +msgid "Find and Replace..." +msgstr "查找和替换..." + +msgid "Find Next" +msgstr "查找下一个" + +msgid "Find Previous" +msgstr "查找上一个" + +msgid "&Preferences" +msgstr "首选项(&P)" + +msgid "Display entry &IDs" +msgstr "显示条目ID(&I)" + +msgid "Display Entry &IDs" +msgstr "显示条目ID(&I)" + +msgid "Sort by &file order" +msgstr "按文件顺序排序(&F)" + +msgid "Sort by &File Order" +msgstr "按文件顺序排序(&F)" + +msgid "Sort by &source" +msgstr "按源文排序(&S)" + +msgid "Sort by &Source" +msgstr "按源文排序(&S)" + +msgid "Sort by &translation" +msgstr "按翻译排序(&T)" + +msgid "Sort by &Translation" +msgstr "按翻译排序(&T)" + +msgid "&Group by context" +msgstr "按上下文分组(&G)" + +msgid "&Group By Context" +msgstr "按上下文分组(&G)" + +msgid "Entries with errors first" +msgstr "带有错误的条目优先" + +msgid "Entries with Errors First" +msgstr "带有错误的条目优先" + +msgid "&Untranslated entries first" +msgstr "未翻译条目优先(&U)" + +msgid "&Untranslated Entries First" +msgstr "未翻译条目优先(&U)" + +msgid "Show sidebar" +msgstr "显示侧边栏" + +msgid "Show status bar" +msgstr "显示状态栏" + +msgid "C&atalog" +msgstr "编目(&A)" + +msgid "&Update from sources" +msgstr "从源文更新(&U)" + +msgid "&Update from Sources" +msgstr "从源文更新(&U)" + +msgid "Update from &POT file..." +msgstr "从 POT 文件更新(&P)..." + +msgid "Update from &POT File..." +msgstr "从 POT 文件更新(&P)..." + +msgid "Sync with Crowdin" +msgstr "与 Crowdin 同步" + +msgid "Fill missing translations from &TM..." +msgstr "从 TM 填补缺少的翻译...(&T)" + +msgid "Fill Missing Translations from &TM..." +msgstr "从 TM 填补缺少的翻译...(&T)" + +msgid "&Purge deleted translations" +msgstr "清除已删除的翻译(&P)" + +msgid "&Purge Deleted Translations" +msgstr "清除已删除的翻译(&P)" + +msgid "&Validate translations" +msgstr "验证翻译(&V)" + +msgid "&Validate Translations" +msgstr "验证翻译(&V)" + +msgid "&Properties..." +msgstr "属性(&P)..." + +msgid "&Done and next" +msgstr "完成并转到下一个(&D)" + +msgid "&Done and Next" +msgstr "完成并转到下一个(&D)" + +msgid "&Previous translation" +msgstr "前一个翻译(&P)" + +msgid "&Previous Translation" +msgstr "前一个翻译(&P)" + +msgid "&Next translation" +msgstr "下一个翻译(&N)" + +msgid "&Next Translation" +msgstr "下一个翻译(&N)" + +msgid "P&revious unfinished" +msgstr "上一个未完成(&R)" + +msgid "P&revious Unfinished" +msgstr "上一个未完成(&R)" + +msgid "Ne&xt unfinished" +msgstr "下一个未完成(&X)" + +msgid "Ne&xt Unfinished" +msgstr "下一个未完成(&X)" + +msgid "Previous plural form" +msgstr "上一个复数形式" + +msgid "Previous Plural Form" +msgstr "上一个复数形式" + +msgid "Next plural form" +msgstr "下一个复数形式" + +msgid "Next Plural Form" +msgstr "下一个复数形式" + +msgid "&Online help" +msgstr "在线帮助(&O)" + +msgid "&Online Help" +msgstr "在线帮助(&O)" + +msgid "&GNU gettext manual" +msgstr "GNU gettext 手册(&G)" + +msgid "&GNU gettext Manual" +msgstr "GNU gettext 手册(&G)" + +msgid "&About Poedit" +msgstr "关于 Poedit (&A)" + +msgid "&About" +msgstr "关于(&A)" + +msgid "Extractor setup" +msgstr "提取器安装" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "用分号分隔的扩展名列表(例如 *.cpp;*.h):" + +msgid "Invocation:" +msgstr "调用:" + +msgid "Command to extract translations:" +msgstr "提取翻译的命令:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"这是用来启动提取器的命令。\n" +"%o 提取到输出文件的名称,%K \n" +"关键字的列表,%F \n" +"输入文件的列表,%C \n" +"字符集标记(见下面)。" + +msgid "An item in keywords list:" +msgstr "在关键字列表中的项:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"对于每个关键字,这将被附加到命令行一次。\n" +"%k 展开成关键字。" + +msgid "An item in input files list:" +msgstr "在输入文件列表中的项:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"对于每个输入文件,这将被附加到命令行一次。\n" +"%f 展开成文件名。" + +msgid "Source code charset:" +msgstr "源代码字符集:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"仅在指定了源代码字符集时,这才被附加到命令行。\n" +"%c 展开成字符集值。" + +msgid "Catalog properties" +msgstr "编目属性" + +msgid "Project name and version:" +msgstr "项目名称和版本:" + +msgid "Plural Forms:" +msgstr "复数形式:" + +msgid "Use default rules for this language" +msgstr "使用默认语言" + +msgid "Use custom expression" +msgstr "使用自定义表达式" + +msgid "Learn about plural forms" +msgstr "了解复数形式" + +msgid "Charset:" +msgstr "字符集:" + +msgid "Team:" +msgstr "团队:" + +msgid "Team's email address:" +msgstr "团队的电子邮件地址:" + +msgid "Translation properties" +msgstr "翻译属性" + +msgid "Sources paths" +msgstr "源路径" + +msgid "Extract text from source files in the following directories:" +msgstr "从下列目录中的源文件提取文本:" + +msgid "Base path:" +msgstr "基础路径:" + +msgid "Sources keywords" +msgstr "源关键字" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "使用这些关键字(函数名)来识别源文件中的可翻译字串:" + +msgid "Learn about gettext keywords" +msgstr "了解 gettext 关键字" + +msgid "Update summary" +msgstr "更新摘要" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"在源文中找到这些字串,但编目中没有。\n" +"Poedit 现在将把这些字串添加到编目。" + +msgid "New strings" +msgstr "新建字串" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"源文件中不再有这些字串。\n" +"Poedit 现在将从编目中移除这些字串。" + +msgid "Obsolete strings" +msgstr "已废弃的字串" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 个新建,0 个已废弃)" + +msgid "Open" +msgstr "打开" + +msgid "Save catalog" +msgstr "保存编目" + +msgid "Validate" +msgstr "验证" + +msgid "Check for errors in the translation" +msgstr "检查翻译中的错误" + +msgid "Update" +msgstr "更新" + +msgid "Update catalog - synchronize it with sources" +msgstr "更新编目 - 将其与源文同步" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "切换是否选择的字串有模糊翻译" + +msgid "Show or hide the sidebar" +msgstr "显示或隐藏侧边栏" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "上一个源文本:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "模糊翻译与相对应的旧的源文本 (在更新期间改变之前)。" + +msgid "Notes for translators:" +msgstr "给译员的注释:" + +msgid "Add comment" +msgstr "添加注释" + +msgid "Add Comment" +msgstr "添加注释" + +msgid "Translation suggestions:" +msgstr "翻译建议:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "未找到匹配项" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "未找到匹配项" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Poedit 的翻译记忆库中找到此字符串。" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(新的: %i, 旧的: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "导入翻译: %d" + +msgid "Poedit Update" +msgstr "Poedit 更新" + +msgid "Preparing migration..." +msgstr "准备迁移..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "迁移退出状态: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit 需要将你的翻译记忆库转换为新的格式。" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"完成这些之后 Poedit 就可以开始工作了。如果你有大量可翻译的字符串,这可能需要" +"几分钟的时间,但一般应很快。" + +msgid "Proceed" +msgstr "继续进行" + +msgid "Translation memory migration failed." +msgstr "翻译记忆库迁移失败。" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"你的翻译记忆库数据无法迁移。原因是:\n" +"\n" +"%s\n" +"请发送电子邮件到 help@poedit.net ,我们会尽快修复。" + +msgid "Cannot create temporary directory." +msgstr "不能创建临时目录。" + +msgid "Welcome to Poedit" +msgstr "欢迎使用 Poedit" + +msgid "Edit a translation" +msgstr "编辑翻译" + +msgid "Open an existing PO file and edit the translation." +msgstr "打开一个现有的PO文件并编辑翻译。" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "利用现有的PO文件或者POT模板,并从它创建一个新的翻译。" + +msgid "Collaborate on a translation with Crowdin" +msgstr "在 Crowdin 上进行翻译协作" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "从 Crowdin 项目下载一个文件、翻译,然后将您的更改同步回去。" + +msgid "What is Crowdin?" +msgstr "Crowdin 是什么?" + +msgid "There are no translations. That’s unusual." +msgstr "找不到翻译文件,这不正常" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"翻译条目不是在 Gettext 系统中手动添加的,而是自动从源代码中提取。\n" +"这样一来,我们才可以掌握最新且最准确的需要翻译的条目。\n" +"翻译人员通常使用开发商为他们准备的 PO 模板文件(.pot)。" + +msgid "(Learn more about GNU gettext)" +msgstr "(了解更多关于 GNU gettext 的内容)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "填补这个编目的最简单的办法是从一个 POT 文件更新:" + +msgid "Update from POT" +msgstr "从 POT 文件更新" + +msgid "Take translatable strings from an existing POT template." +msgstr "从现有的 POT 模板中提取可翻译的字符串。" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "你也可以直接从源代码中提取可翻译的字符串:" + +msgid "Extract from sources" +msgstr "从源代码中提取" + +msgid "Configure source code extraction in Properties." +msgstr "在属性中配置源代码提取。" + +msgid "Sync" +msgstr "同步" + +msgid "Synchronize the translation with Crowdin" +msgstr "与 Crowdin 同步翻译" diff --git a/locales/zh_TW.mo b/locales/zh_TW.mo new file mode 100644 index 0000000000000000000000000000000000000000..3207a921bf6e14fbbb09e9947973312cce5f8cab GIT binary patch literal 42948 zcmb`P34C2;ng5T1ERh{V5SNSEkOB<_5wRd!7pPELXbXZO+$OheY?2#ulP;*3ZZuuf z(l*^`3vKDXuy(KGxQ(NuGb3)}Hkf;JGp>U&I*ud%@9%lubMHwBI?jLYrzgMj?%VS| z+xwpW=$sRmNBk~)V-&p|>^duozQOy>ixnG1#ml4U&0r5$0losBtAqhjR12I3o&!z; zKMXDa9|XSxo&kQKI*LvLhk>VqBS6*j(GWi#d=udY@MJIto&kO;;5<<2s{*bEPa(V+ zR6lkH{5*I9;ctUygWnJMb5P~~1gicMuW&pKRKD{9R)VJyzBb@cQ0?3es{bDi@#DZV z31`8#fS(Px96W>Y4)7xIV8CyKYX9YczXzG(=uZL99O&sOP~|EE-U6OS_~QX{;Q55x z1Fi>E@AKe0z{8;C2Z9%Z*MrJ;52*R50hO;ARR3mxs=pJ|{H+I11fK&h0S|(r z!{&v@Ld6~1kWNo z7*zTgQ0+_z;U-Y)J~QBY@I1nY!1sXP4B_8`n$J_21l4~*z)J&O4~ib{1T`OHz!dlh zsP@)_>c>`4`|tp$@q8JC6r-0wt=l=*Mo~ZTU7*Sh1+_kRg6jWh@Gao@5dL%scYvb1 z%^;)~eE~cld?ny%AN25hK&{&#Q2n?cTmnu6)&D<$YEQ(e{ro0S^_&W7y;7jYaS5pY zTnnn-w}$wV4cyI{c32NRS1l5n3;O$^LsCvEy zveePo8p8%C_ z4@gtd7eMXbH!yk1e>SLbydAt0yaJS{xIf^hLG9zm!3)4Iftt@BgQLI`Zt`)B0X1Lu zgZ;n<1I`9j-wsgqd>zz$z5*)$2{${RIt5hxIpDcq3e-Ga4XXb`1KtmwN;nHD|1?nJ zoD*;vsPS(MxEItq90N7~Uk>4~gNViGMNsSU-GKiFYF_>bs@%!9I6piSR67@en!hUW zo#3_L8^L?Q{|4^|w}BrS?B(7##Mku<@NL9bf!c3_!4!BOsCFI(RsRf7{I>%<5nKbl z8{7awqS4=imEf!3+ri4AzJ7y2&C5NY=H($!^VkS#JTpM8-$GF3wuJECg39*;Q2Blx z;{OZ0hVXgAyuRB((a(LL=(ZEoJbW?Wi=gN-AMlUhg@n(&)%nfT_$Dw7YJDdJ zoC+QyJQoz77ir6+_P+q{%IlH4r)Hvfs4TxK&{(tcX;`afogAD2u}qY z2|og|l+iE1lfd_l@bw%7!V03>K=oq|sPqm{?R0{tgL}c7z@y**@YN6=aHr2-BdGbD z4XXb;0)7rue_jMt|Ia|x`y23d@br;R7Z-sV|9e5r^QGX4;80NIJ{-b#gKs8$FR1c0 zA^npfeptw1K^p2Zvs`{s1SZ2gd0Hh=V9;^aC(TJ z2WtLSfGWQa)cF1e)OfxHs=i-@^gnQ2qKkC_4CIh<`c6pETOz&kuMR_$c{q0=4d6237A% z;9J38hVV&ayr1WQYQG<-{#*sBzk@-|*InT4;77poz)j#8-~mwiz7pcU9pZl$;{O1u z-BZR!(IW6XQ1tgCcs95d6#X0o&jWu7ihuqdybOHHJr+_DekAPZ-N5NCT$H3dbHQ@WeE>P=!L7nr7 zQQ(z??+01>XaV?X@Ry+GchV;un?TKfYY0yRHE)lADR2j>#+{30C$0!kNqM1)qpPs{7Jx{ zftvUK2zYLzmme7LI`DMThk@sUV**YL>7NF*9&JYyhRJjA7`t{|I{+)n712z6v z1D=)j{1=1j{}rIp2Z3t$_J9ut%z>(Z4ygVw5BM~w^4|#feNgq}1O7*dKe@^0@0@^F zfokXOfaAfl2tOQfKB#)vg4!2Pfuhr|g5p=d1TO+l{iN^bexULV0?z~=06zpa1l$1{ zKLAf9{uNN`{3@vRJ*nBtoeOGy-vf#-Tmvfo4p98yK2Y^HgXe%VK;>H=!aG3KdlXc@ zFM^`m7r{%x?}P6J-;{H_6jc6^U?q4Dcro}H@EmYGsQG>xR6o7}s@@-fL%^SdYX8a> zms_`j!w4@0Rqyw~dEmc-TEF^MpVx;$rOyU6j|;%Jf?Gkg^EpuS^mXuh@H?Q|J#Vt_ ztM>-H4pcwy4wwN|ZfXe60N+A*IjH&D0ji!afYN8a6~ey()$R#X9M1~)j)0ef>hA|Y z_4kH=_k(J0GN^jnK-IGtRKM1Nmw|ghmHz>#`Tr@Xa;Hr7_;Wy&zYtV^`-kw2Av_XP zeHpL{oC=-~ZUj|sf55MR7ZCm~cn0|IAVWg|cRn-)6kUG?RDaq*t#?NV?*pyAfL{UC z&+md~fiDI84R{CP6CZXybr<+S!qY&F{~1vAd@h8)8NxpV2N3@YQ0-szDVG=T2DKjJ zK=o%jsD3^PYCd*@%KrsW{rLNUKLFLrVksdBod02UI`b9l}?D zYVXDn{sgFU4})(7XMrhjEvWf867a|1I|#qwv!3r=p!m`Uz}vx(f~w~!P~+VPivIQo z>;gr9XSI3z?*}y>4}r?x1gf7?0?q<84@&}W3iv|6uY$_|!+`%5@OJ@EobKso2Ye@} z{#^#Dz4r&aKHy+b{rPaf`$6%|Pk<^n8B}|1A$?)Mb)eQ`7byMaOW-fTzXLnL{WF}7 zM$QcT2t1GYsi4|h2&&$7p!&5vg!h4J_h^X!3iuwv-vBj_zX9I~UNFn+{Q#(XJ`Aed zy`bt(hxAW|^jVf=>4BS)l&qO?-lS?uwu5y-wobG_(4!~v?0X*eZcR6 zDdO{>*6*Z8on9^k)vqhTi@@tb_+C)_Bpq-n_$|U6;7MTZ9Pj6(fU`iGFHrSw4|oJr z|Gx>UUxg4pyWQKn1k`*D2E_-)ftP@bL6zGNs=a>zRsW0N3E)fMTCf1B{LHzY?+H-l zwgo%}sy{D+RbUa+{GUC~^IaV91EBJa2>1}Fc5?wA1~nhk1Fi&5CAl`T_OIG1>V1Ea3t|JfNEzEsQ#=3wNC3n$kG}vlu2UC#{qF|PB-|fVy&nwWVIh1E zsD9Rj@Fzn06j1HW3E_31#<2@jJD&^jKM449P;~o8Q1xB3B(xu}KX?Z514H;mQ2iPf z!uNoh#|OZ3!3iP#Q=s}iKj2F6?SwajqTkO4{9cIvbqJsSn5VxNR6Ey!4}iCWwx2-N zdkoZkeJzCZpxS>KRJoIuI-U)J)rtm2dZD61vTF*!7IRLLG_~x)IRxl@G7usxzGPcLCxdCpz_TE9|xC! z3&4S$E-#OOZz0?Reg}LNyczt?3fJo|T#1i{@V($za4&cPc+x7@i{1s^K)4>f3ETl* z4E`K^2s~r8hqK@q!b`y0!2$?th^|@#F9DB&lfZLee)oZofFA_E3qGOvb;v^SIq?19 zH4H}Mtp_K7>p}JN?ZsQcs}^U4L+XVf|{?>H+ufJf@cwa zC#dYC!dCHuxrRHK_VGfTELK;2S{wzQXf&JO_E0?&zd9@`s=J(aSua z3K^e?3lOKd`V!&QJZksfdG6wQU&y1izlQhb5dJ)2{mv$QdWchaIq#41sIU6{ocEJ> zX7I$n?(lvp{W?PAZG`K<3&Fn+X;Z*4#Qg~Dr+D5EgtYg7SBLkz!I7k8cz(>I-{0`0 z^ulii=|AAn?-cMKLG5q0e{_&=f#+AeYff8u;@`J;`2)|}L)kd~8-zc~bC~DLL>>jt zXB^T2w4ZBvPU86<&)Z0ge;-J^EAB?Zb9v_T{0+}P^7Qb$nP&&jmE;jWyPo$6JSXy8 z$`k)?<^5#ZJxau9cv?fk6~yOxha93;ct1asc`V>u;&0^nDvy5k4$(yLD)KDgxlZpq zZ=n9i34e+ACh#<#H}Om$JcMUG@A_TtV1GYJ+?)`vh{?Q<=edOU|KvH1I`6{LgQJWju$7zZ3jP$p0?h zf6b%cmBjrXJe3D_7X6XuM4n?I@0&wkUL`L6eLsEyKf=?+vzh$jrH_Cw@?6jRAHix+ zKUMSJgg?fk-!H&TJn!adCj4`rHXi+^@Qfh-UY@nQPXx#Ce3SPko|!!Q<#;Y9{%&wO zsNW+FrN8rt|7u9v1%4#FKMfw?Ig^eJ1vgM)9?yq({}6ZskAA=4*<^42=RRNyd6K{9 z3136RpTOBX!+F1n=VYE8Jn!MrZ#&N!Jl86a_`QWP4-meMXAsFJv_R< zx0Uekc>iXIPl3PT8Oc*g{Bj=srt_RY+$-RZLH%~}e3ti{!D)&JziWv*E4+V#_xpL@ z586))$FCxw-ap23p0zXZMu)bC#co&laqn=g2@`Hb~?GV$AZ&gXpq_yh3G zJcoGxi|`^)zrW@ADdAu7ypt#X{Vnf5BJleVcM2yRTI>-8nl^?L#QI#?OP19*Rkr-JZ@dA`8AeiaU-zn|spr#$Z` z&yzgo^8A|T!^F)5|C8rWA@}28D`ESA@8e}O_!XY2IG(tl@qUZviY^ZE7lrVvgu6oA zv&41sJ_7tZ@Ii1lm<#C}z>gC52_F3}<9R2~8;Nh>SsU_Q0-nk9DbhX%Hu4PPUB3r; z|0R!p=YgxikMo?sGnnTecrJh*^lK;mE}jLv-yX`;gNF(K4m?Mh!tWmlpH8{A5Waw? zn(&u-j`4m5@g3k72%pXS2Y8>wyM7OW@8y}}!RX(>8R7jb^6Gas&*yla;Yt3M5;&Ez zZwdKs;{62P?+5i;1Mc_N=v%yR<^4avK_PuM;fC=3aL9Kb;ZeK~0iWZU#xs!T0C9Uk z{f2>){MBrTg@nHo($*874)1$-@6YqYkoOMoMEZ9N>G$$}HP2^wzmDgFJllEn`y@{f z&#gTFMBHUOjl9Rdv4p=vU^CCI5V;rJN&Gl)XowpR-b~yw9{m=Be+chca2;{$z&m-a z;Qil}ma1yV*4B-$%hdMgy|poyo~+k?wW&;FOY^k&r7n|;U#F#}q;sk9b@la`+SK^w zY(uJLVkXtnoNmn3r(5c>jj4uAL$-NZbzFe5sVSM}%>TGdb91)Y3hTw%t;^+FGpQ+c zEfZhU*!XN~W39DinP}?I<*G~7*EMER+41U3CUr@_+$A=g#%xQfKAWy(NHy8!=1fgX zy$0afbI0Y^SYD?^lSm(2pXH>y za&We3T2whCQ=e%eG$cz8(~Y&MJ2O+sUJ5o^aH!QWjNV6;!|E7%b#+vE>z!j$6EZC= z4zzhS_VP5&_TCoS9sgZO!#=j$9twtI1K# z*``c$3uNX+Tbn0jQa+ir$@0wiC`+rgiLOo3ENORVYMGtU&_91CW~Zd?PAsHFBv*E9 zqjHaBk2u{!I711D)`!(K=a|)AY1&Lm8z0h|YSS%j2<@KH+16$wma&P*TpW2%y1vfx zCgz>amZIbK*>{Sr%S?%ksOxe@qUqFRRgfAra*R=YbyPJl)tH%bd1_!PJ1& z?#QH@*|%8;J1vq;B?yXS2w_mFU)|-UA_@^dHkV1&X2z#m>)Ac&#tE(I3979*^U2n_ zW=4B2^qHNKOI@4FHmlW4bN}f2lvduBF}i+S-Gm#4G^ZyRxes9-Q^T_LwVCEz>NfV! z^;ampqJqM$v?MljS!!HsOG~!#xT3WxIzAMg_?L>dHa4akGPO5Ewmnn*a?#B-HL#Hu zUTSOE7Yz-pm%VGB8CfYI^i5Qz;JtPAwKeHx+kpz#B+At?{+brJV5%i+9j~v0CX`Ej zr&MF;a$Mt--Zj>Vo2KhilQPq$WSeW%yUA%7OKo&>eSMO$Avr1~w&gPZOi546rD`U! z9#B}ehE1eCXz$iFHnFxa`+BNqOx3ky8i*@JQwQuZ*D@%X7&jiLG&Mmh>P2)j)G{sG zn##3?mnrGS7PaO3%ZB|@+uDA)m)h2)XudhE8M*QG%Rw?3D(F+1P^`5j+kk+nN!QoI zswQS?CNVrn!?q2h@134)Xkt=QBSzYcr>0EIG^P-4b&V6EThj1_?4%4k=9V;s)s$|T zI4HU$)530n_Oz9Z6{eXR^#-w)$+d`pQ{yw~7KWQMf~{+4YR*p1h*)x$i!f6S>1nBP z?4i`SI(9@RmrLbZ(&Oqg)zK}@w4BnqF+szcVYEc452>1TOS(Qg!MZsp)l}cw%#t&( zhEzjtLaxPVzt*IhHYRa(wGVo(zH7+QP-}g<`L%VlWRVf<4i}Nf*E9u5gj5Lo`EsZt zT~kA6;8P5kEzY1>Xy{jhpQ%9$n37>Y5>=9C#7Z$}efZ&N)v3X@J}ndBL)j+N3K(~` zk(H}!tf_CUWs>6BSyWb&FPsKf`c&{z50OQKMP~H^N!yxc<{mDPX=uter`cJhJw{2- zl9`&RX(bQKGNC!$0GG;<)Ktd=*FBu!)n+G$)u|y_qvV)?r38f?l)JH%omzvO ziKB9-lk@}cvP31K03>PTIY`lOXGp1B&{f^scq0+>b5?k_uxl+Sg zm?Z0o23w5kiuqrNN$3f#<_yl(*CSnwqRV!hP%S{GwB8~V@8{s)>wlwWV4ZjYiX;(wpvo5Ta31)x&E?f zaBC%9MRy;7k!z|9A2e3-#h`y8PY^b@vG9(aoS65t0XU* zCoy{{2E3XSD2WgXO;IIN8fBNkEsP#*v&1A6hH-hRvveKGur)?8X^vTVYFxTzQgx{= z?b9IAlcRj8ZA-5#$u#X47G9#2G)*{sjRoXe>6cJ7+a|yPwDK`U# zq1@zB6Em3G&FEy)a;0X>b|2~z%FU>_1C|nGmm5)irI?!`=pu};IbJPz3VJPa9v!c) z-t2kJoz;ivVS3Qoa?od^^K(;cu@a%nTx-ol@urNnCljL1nX5o#)Bsn3gTzC08kPMO zXGCLYR7MeRD4UFezg`@o*(k~wCd(sPMikO%P@5KZs_9L&rmiw&F|`??xpv)K{0t3| zruruYQ(%690x&`9vs2V`tWO!E3WXUf`bldO&9NV(zvrT1Od%618fLqhk`tvo&+ChlmR!7im(?YWo_2r+QVNYf#A?4H=p8v121-=v7DHg^9fyyieXOi7+#V zYqOc0SXE}K=pY(aN`R)NT&9m-%H#6Difad$`f9Sr)lJb1`=GYEViZb{WQ2AFyB&`d zlwIB)GB>@#L2A0*{-j3Wu+qGbDQilo&r%R7$BfXbDr>4C;lUcaii zJ*>^Thso-#H`Y=VhH8E&dn;M)7SdGQok5<}Wa0vnLV>wKC@M@uP_RUY<;diCJg51$ ztV~nvAQ)CRHFZaDERbnxS#wrETlhBPB9^A0GnGgj1{Xy%OvXrbYo;-SQ5D^q<)4(w z*aN359y2cZcNdu6-#f>Im943kfS}+Q8saxW(Ne8G3w<B^q{ZSOFvY&2F$W(+Q1oht;sJqv0|+C0$Du%10oY?>hzNQyUErb}my;_A3x84c4i`U2U4CxSwc{ z!y9oKz#@h>y5|mppaYGQ(TPP$gQD9rnWiY-6sf_oTHw-m!eUZYnd%AEkj;a)-qOFE z1!s4%4bdZ9Pf@r1(mAOF7jpThr)(4+`EYpZxI{^dW4&;w&fEVI_5*aa-O?cEK0&&6T zG7WW@Hj4MvytKNesp+~)t0(p!6pe@t7pxl7pV_f4wb=#Qkj?~LwYZ)dA<7Nm^2*8-0QTm9w#<~VM zSd0h*xdlbFFVdq?%Q`5!GgFCMax9j0V_j|{j!lnfO-8_yaHY9lP+FX354V`6Gu5II znvb(uEUv^@#bX*;$t%CHEV=<{^fo-vG%a`PxGa9#R3j?a1Rs)|cgC2|^wRY?ILEXm zwk4~SszY(Ftz&)aVV6>AmjO=&(4}Vo)yH0 zb(D)uFgsFHMY0I$GwAB3$sJ$PvN4b>3^+dWvI#cUVw+y{h{Mh@#XL^@ClH6bo1JKx zeaJF62k;Hbh)_9%Oe=HV41LvJj-la-R^0@1(3mx8xe$|D+qe<*)Is`B07iy0j+kPi zk&PK1Z5I>55(ZlLmS$0lI{rxx&+1yHiOQ@?s75+0E4f8w9G504KK(?l%7QA3EAxW7 zH444>DoCl}3DH>H7 zpWG$(dO0$&-|6p|vOXO34hF4EhgpeCsWIp>X3&$}kGb4cZThe zsh4s$W-_%9kZj;agq8`EGDp&=o!2Uh6OX1P4VN3$EEPa>(hv(-ZET`*nPwKn^Vxnj z)gkO{qbTL_L-C}XC`Be^MJY02kTJKi%n`ky{Dw$HDTPoSV~~PkIZ7#|5HC7R_rKxD z@35oh(J6l)t(T6Y-j3Hh+vo7jzyGtLJ`#gA6B^81dmM9er z^*TIH_pvKutqn1ag5gJF7^d1<>Y1cNG@4Cle^Qk<8@EtIsxn=EPrSxl+w!>Xk&8xa zmx`833}>`^vMM#F;XUyhyM3m`X^8=N9U@rHIx&IbEG8M7Ozg|>j132pnlh4whI^5OL>iBbK7D|$6g}Ra6abwN0$w8&)GT-DcI8L zqR67q5hlv07vsqVBi<5v2fQL#_@3CRLpV&v@v>%PhUJVj8ZBjHc%$P;&I~L94|qUL zUu;8I6bhuJ89T!M8brv?Y)dah(ICeX92#BW0>dMQq|uX^UrWWb;1-d;-_@GslsXzM z7c_PRcZ1+)Bb#wVmE%U+;ZZp}rp(RCk;eVGZjdbK45OSUK_W!z{t8TwS%n7uJTn=I z4jWvDrX(5bXG+ld%ltwPkyuBId9pX^6&o$PER4OH6S=$~MO`jtR+Ez~cs0sy+&3v& z$!*BxVFGs_l#`UwdpHbAOla_`B8!87af zGm-lhIwnH@IGq?6axeND!|sPU*E@EK6^tzg#;7IsWAEMdFsr8nv}D zSO;0G{$gMz1Zp&fDZ`pEf4R9BlA3aCcIPnnb;AUj(Gzfen?@q=U*y0Pqh!1lcK+;}>m3p7DAN8Q@g5MmZ> zCb0ZfFa{~b<|MTffxxQF{neDIu`96RJaI{gRf+&+Km{Y2A}?87e(acG1Fj{nY2CJZ znuSonvc{e*U2=hyQcv75<1uAD8eh5YFQ{8#GNrAXT4)uES^9{MD=6EbcamE)R8`yB zRPP5cvc1_tQzq7Nh7~p;bA(68<{{WFQgU&unwg4BpDeXl1F{y4w#H?&C#)~2ur{tu zE1O-r_3KY&dbqtSrL_0W06TS)y=A@X(^d}0j%uBYY2z`lbY=t>OiV%G2N@hO62&Fo z8=Fe@Ts(Q=H(bHXP7ot7Q^Px+s7Y)3XXf9Bgz{=SpIjlP@Tp>M<4sC%GNU+~tumS9 z(&KR$`PP2@HU7V7qg2QLnyQZPwa*c^DPza5`N68jWgtvD-*Qz`lx9W?tjATM{;Zr! zW4{Jg+Mmb|pD(jrWh8kUFcLgEcwV@(=n@D$+BD;M8$z{gjBw1yVmPl8|Acu#eK7}6 z3*^-~oy$z9)n}$(xXK=HfVc!yF-=bFzp54;$E2AAQNdqZ(QBHLBzvvbh+da9foZY) zE8oU*TO!wcn`y&HQwTe#(T-Xf8P$7tOTCpSmsy`~fxVY3ZtEMFMGEQI?-%w`$sRHi z=WJJmT_umHHb;pu!dOzxbrUAGNcvgJHo9 zrVPWe%SmF>DuwLg-jy|=^VYzl5gR(O5);id>&C2e(AZ#(`CN7C=GspLKcDdz@hdwj z%DDunp?)(Y?Mi3LPE+E=K)3~im`Ubfjypygrg{;a(P5&)1sRx;I-D~V5-Ae+rZJOn z&xUkXE%qVC6yKPga(vA;k>+j{k4sc*mrgBJ1R2ueneEjia$g1cSR=@6_n<(?)*4$U zZhsXH|njAY2D+~bep@rv>;~4FV~syqViaJ`4v!vad05f<)C^QHBQNl^FDu z0zXOxN%4^p@x$VH`G4c<(r~EDEBXyqQmi$MujkTwRW73wPUNYPJRP+&2S$gRQ7OhR z!@|otL3MA&7l1w?DQ1Tk2rR^81BanlZ?QMp=CwY{jazyVvl(sN;A3#c7FYnslnqjR zq~bK_vdVbQ)-ugu_JXG!GM5f+>!A6xYdOc6OQN5$kYqGY*tW$>#OE1ou@W5%?vc=@ z(Kx+Hx3r|Ob!@qkOQ=hJ6{Z*><9&m$yk+yzTAaZ7b7OU?UrlmBs5K26phJFm|%(@QxKn(gbCML z`2j*=iYb8M7mbn0?(9tj;bHvSW)Q^N7EUCc*AKU2#aPR$Rk$^LCzP88nKU>liFK7U zawDd&r!ut_#-I|b6nw%+Y;!MjWZ42S^GOlg!@g9}E{!jD<3tZW22Nyjs1~m8vy0`v zE}1}@b51-F>$(0qQo|hz-Dtt+a)TTi>Uu58X+4^+h&xnEu73EtjRp4^S)QVd?kd^w zEq|+c`t|EyDuP%lzjM+O*Dt+dIJdg}CP^~3dP@hr-gNn_*Ue+x`^f|f#NnL#8beUMr|Z(1LO;q8?w2TswJ33C zgU=#07*lYP&ZRDi?>^pe!zH${YW*%`=tnT{WJHy?i*Ce@Z7L~kWkTbN9#YuCd|bp4 zi+G%z3hb3+tR2>mM^_q@j5S-rK0y*W#fkA(WX-MO1HSLsI3=&J8e@3;jfHipYCH;n z(Vv(#Yy8I8a}wbOl9M)z<8Z1fUdl;oOcF1p80MMQG< zrtQkDbytVfu-|auOY?JYrXCWf+u0yhqkAQG8CB4DZX|*a@MKM*u1Fq6{=r-T8fZ>8 zp}*U?zP~e<_xVYJUsDKdy3gU3uZHxs!Alh(DD3k&zvjgrq$|PrXV@jRRbTQ|TjQqW zFdgP;4C$p6bJI|RHuc6mKUU7~D5-|>#q3yi^BF8N<45u6PIO7m7UTV)Z0S_0mmABB z8`C6WwNO4r?E_sf8W1x=#7J<@p-JQYV6&^qnr*}qSnSqm;jCCorX=+{Gg5DCT=FkJg2JBSJIH31cHxB>Ph37cua5Sa0x)Kvqoyk@|_YX=OxGIiw# z2VHf|WdpAoIFO73bQUIV(ktKl2V8Y^>dJwG2EK2=z^lo3+zJm$P3HUa$#s)b*H2E@ z@OG02tLw5ikk>y>9Ux!mpwwV4REw8DADm;;P`bX9Wl-wji4Tssw_?Qb5kt#Ey|Q{> z#bCG0TkA5&(C@~ziXxaUjT(C*6D-%o(;2k z>t3^)tofslcON@c+_k5;b!Fkv=kptP4nZYUHf-+uR7e_ zaa8(OzHNSfc}LI21dX-@IUBlena-`=x|3`6=y`P~Z&?TfqiZ|Q#OP;t&PUHj*E?Qdhme>t)H zg{{TId#Wmj_K$oFRh7f2Z}0rV+@pHcael9_^b2$6=O3NdXIy^n!u-*;s>)mYM_otP z6=u%PKQS}k{%H4ev#Kilh$35Y`}V@hMOBrz(R%0J{1cB?Ro-b$`UseDMeqrKX+*ws zitRJ5`-RnA`{%{gj_e=3CZea4Ra{?HInvrGK7E+{Rh6R{b7E!sjL=jtM4#EXA1c^a z+`gTKwx?8$N)=w%+P&?dXwR0cd-W_QFKgz{Cicu(n4iA7s`74{F{-Yr91T5e+|#}3 zV7_B!_iWneD^S5TKcpiAt`l7jw%QM&NttnOu7Eks(^ zkz<5e>JLc#2&M7`Kr_i}7zv*aUerI9X(R};fp0-uRCpX6b6@cnmxyRe(KLhA#U;h7F zT8wVVk^JI?H^j^X%`U(Hnc}MTQGVVArlq)Td2#EZ5b)h?H0+6ShZ9kYcQPyaT`RhG zZb`&?ErogW;GaDUW_jI({j>9(yJ2+y`|5i(F3fN0WF5uc7CuM2QBT{`J*yW*g}H64 zyb~+^_WvKCd;bw;kg4vTwWa6Kd=JM2T$pzx-_e<01!=ACm5rSXarqcr(kMr9 z&i4HL;uY#}*(F^PRSJjy#(0*h3_<%G6P5_qJ_}#s%5d zo|#+o`=5toDGxI%bRLKbix(F5v@vURhxwu_G}yDI(+Le$;STb|-}~nm z9`YU9`(yt;>tY?DpT24-w$JHRo;|k(vW&XhI*MD4M80VeE`?{NBNYN;SUWSncmZ?h z(p&?4`Y0%jcN)>SM>_l$#utsA?ana3pL=O68vzQ3?*6MxCyb!c-Q z;nlId``Lx!E?(8nE&0XbQC^{@t~56;ulLV3aeN0Xx1+Q0e0$VAYh&S=<@rMgyLZel ztloi6;ycL7dfNIIiW?VnZ=KIXiZ|t=;*q)ZEWhcg{GJ`<2Fh`PM!3yXR4R*P;16 z>z;7-8LAPGrMA~*g zaab+RIhdd~bjj@tBNW)AK!)mJCOw_|lDsBz?aTUR8ly`2hI0)vQH!(Czb04UVjDK1 z;D&j2T6a}f*M5v+EO4#^%{mWA5WW#=$f)SBOAz*^oBx?`JbU@Q?Wo*QyjFo2;vhug zsvi@aU%NNIpfgbQfoF%!P^Dk`9&whb!jPmQVbQ>PPkh=Hp5Pk029J@ZG z0C+{Lq8!1DQ{DHE@AGrF!;-2h$4DvEYZTOigFEO(_mk7RpIEO7R?pG~->WSjxi|?> zk|uF@?anYv=Nu{!lsPkJ^dbIhBaY(>-D}quW?l^=mh7VKe%!|+r3 zc2iMeVB#5v_XKd(Vg{ebzfMG)-T7HEYeKnnU?ri+g512g??r4Ye=v zQOS^j%x>}VC-MiDE3+#ED7T^*H>+dqg0*y`*Jo-|DL3@xS+(>D^#Kil>X>rmLMe0a z3u-J+&jwK^QXBnK!X0JE_j_o5)^@C%zM{lG7wjqb6OA!e3AMwYon4&!w9^S4Mw0r@ zM@K>vC~kY&t0$*ZV{zLv-Oq}6y>T{oajWzP6i%7=1Paq(J7I!KDk8=TPK0Iay_AuF z8KF*h$u$1kd|9V~FUrbE6#UiU=|Nd6HE~>yFauh=!k!KkUSvm9So9csP}66MW0~em z#qTXkOe*Y0ey?zTqg7k_g47wzzwOKNv!Bvbn!pJ15Y1O=?vdT)aO83^Z@Nu>)4sy; z74!(*Cddf%yTE6q_#Esg99-AaX1Zunh`8{hxzb=Yah`)+-gV@;()aa!J1^G0 z)rHcUY+ojRv}+|>S@rggM|iwuE!p_Jd_4Iz8}iHc6nD23+ZKdg8Iz*63K%dnqXrNj zOxxmxu9(F&#C2(*Tw~S5CwuF$-G>k6_b$;Km{62p35)iBn%7ubU+wp-SY9v<-TkjPU)!0i`(IPZo40-~+hzEl1jh7-WOaLVM-<*H-(3a2FuL+54?D0L^x5B4-b%}~$!#yn^sdkSv94wxNz+C zEPsKd3b}cfZPh@^WmJ8X-!h}{_*zwe;BfcB1@081gzFBlXdGTLjA9=ewK{c3PVe2{ zGkt^W8q^i4TDzT2F}IjPzL~Me%{tzIEGJ2oGlP5g<&UliNvJ2b(Zo5YFSKqQJJP*; zGiFL*k0t`0O?H`703xOPrSITXK@b&KePL5;!{S(7wAuGnaQxVsxGTU(u9sh+u;DNc z1G*YyZr_*^%caNonV`-os$>IuErILCPj4yGL%*na3HE@eYz#v3u9teA}wRhK=}O zY{=$2^rZ-fDMxubw}iEG6+hPW<7xEH8%@Pgo>2;uzp+yh)6Q%|6ep8%l$Tr)>WztK zUsmyA<5>$EEq$*M!k58dt~$~P(JOs4aocf5u_==7@ZXgnxk95J5swXakWG~Rg5)FwjZJeNUlvE zQLLeRCY_`EPDq+5?1!%XX7(dDapxV~Mibg|I#Se0P0x&39Gbg1R#>`_f!l%`V-KDe z#=J%6I5Q6F%*TZN>qc0rZPF64hgw{%2#lq$Xl9|K!|6svT>Sc^`qdDV#~u+<-8&Nk zOrcvNOr*~dm4!47&+av7rOiS>;aixWk7cn{S5V64Y%mQx&!0^k?H{_kODyh|-$*E1 zx)%1c0aMd-^b0GSwRZ+XIEq0dIj)dis&+ z=Wab#c5`ePcLRF7SoBSu$N_&v%~O0nLYSlVmzLL`0E;GSVM(g*XW2*MPO zCAMtGyea=cUHQYnO<6bhfJt6vFdWF?DB*2P%C$PEw5-^f@@E6XZILLJ$Xu9zOr~i^ z&@p{gtjOAxJ*#zimpmxZ+2Xo3EoI)4_2%+ANXKMn-55%0r#%}V?>c-KHO+Uh>oFx- zpjByP*b`-cfxAHRn>OHVgS+cG-u$5CQZ7{E${$xbP#*U##5ob}mbli8mSS!=4eB_J zFYHIt`{f4MzRX2|)&pg50Vi#%X(m>~m>ige(>1kKROENhlw)Pt0k}oVznJh;XwGZO zw;kptm#ehy9duukI^(_fK1f+ZHL-*ARP6BBQsxvvWG4<%$~E{5OL^Ed$K?vmch7nr zD?gA(P*i76FK*rE`N+Xhm;3-nWD%iX9mku3X36ke74?~OvzfwOM;_I3%$X~5!c+#g zKaMvXZ3#p~@x2r|KDf(Zm(Q3P*$Z~C&Wee#Qn=E&ZJ0_*6;);?{%kfc9rVqj8DHDhy?3KD1=IL(Trm#0ii{&M zjaI$!e$%|QUCf@~S}+sUb##pn!)Fhb6ylH{6OUW)rIdJ>D+8}rfqDpy%KdE(6`$B~ z94*pBSQ@L+tLHv07pEwE95riaw=L0F7H@$%JWp^$c>|PDdu{^moe%w}3!GTw*LLFj z3!91=TJ)GK7NZd~VL67DKihL;9#(J9^j$sE=lGt&fqDe3VIfPCTt)NA`gv<<+9{bl zD5Y6cE{+p?bcOYcH3@d#(d`ax9NR?dV3;FUhvAnd`(jA~7eFx2eu^t{-r?g6Iw~kR zE?KDVxd&j7?B&9~85mH-?Z+6J&z#ot=zKD>^uF13^UE%l78X5~Z-2hr7Z*8VG`KSG zZrSZy=ny7Mruge<)FDwTJ;nzZ6ChbIXUJPR4M8r&HN=VG?xaQ@LW8+t|bU%9Xb;B^~~A2;D}6& zU1cm%_w#J_>3%1TS)dP`QiVQ=lW>-G^ilkPZ0XW18*Nv+!=<6}1-2%0-*S94@H9Dn zxhS-KnFzp~;PjWzuc@n|q)3)d0r>u!gyZg=Qb1o{YtNXREUZ|;4ur{c%*0iQ{}&cv zd3C7Vb1jBtb~g%T z@j;_isz}LYi@#UqXTs!gr$>ju}J4mn@^vM@e|w#9fjD*CQ|e6Q*mGc@oQDlSpQpRIUOuZl}$Y;riy z=vaeTk_*63N{rpQI)gULZB<|Fh|AE$t?fG0p#-xUJ4Ed^4lKB5-Q&ndR}O<9vRmJ! zkEpw!In@0egt80zKDw$0|a8v)^>jtvL zAH|`)7-i|xX_1LLlOR7Tg|8weuaK;azmfLLj3k_I2Jo3QW80@Qct(;```WC@RQLUr zEf}vRT(1oQv)syZJ~mA~Rq?^#BptPd^iX!R$7ntBpA3?XGh0^SS)hL9sb4>5pXArcTxHdTE;X_$%h# zRjZy|d*t)vC@u0H1qf~GE?~qTr!p^lIp%-E_^-p(egLT52U!A+r4(a-yQR_ ze@&+}?2@u+pQEq=JlU@i`YpqG`5DhRU$iVUMfCtF{tu zmlo_Z3DvQYBZ4>w+uL^mYY@JR+0ubap{zbQ-)AzyrZv^F#J`YgbB^HQc2Q}%GCO@` zzI}6vIr(laH<{c};bWlyuDwOB9myH(ljR3(?v*QS*pKq=GqtgJY>{^=2+yeNP+QNz z!!Wg2L(n}_m{rdll<0-h$zUFxyNlZ%#{<*Zy?sUL%Vh~%E;1e6-u>9#2;Ryh`R-G{ zQHf={`t4vyZPDiPeluR#$5>T{<8KZT`7mhBGsWj;7brQK_Hn*I&)98z zUgl16cS;{$0lO{f?qDu(ci@q5Z(z~1=H!Q0a^BPWYd&K}@xiB$8jTiLZX-zouAn;` zbN)&`_x)g2GX3_gvd+Ht%*yYbp6nIs!SSE%YM|{)WU-VkO&!~fiKVuC);!OJ7OCc3 z8{$Z{{Qa_43Xhz9rRQI4FdW_FSi==c`ogI7A)|Iy>GRh\n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: zh-TW\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "隱藏這項通知訊息" + +msgid "Don't Show Again" +msgstr "不要再顯示" + +msgid "Don't show again" +msgstr "不要再顯示" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "共有 %i 列 (檔案「%s」中) 未正確載入。" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "第 %d 列 (檔案「%s」中) 已毀損 (不是有效的 %s 資料)。" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "格式不良的檔頭:「%s」" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "損毀的編目檔:將單數形式的 msgstr 與 msgid_plural 並用" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "損毀的編目檔:雖使用複數形式的 msgstr 卻沒有 msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "載入編目檔時發生錯誤。結果可能某些資料闕漏或損毀。" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "無法載入 %s 檔,可能已損毀。" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"檔案「%s」因唯讀而無法儲存。\n" +"請以不同檔名儲存檔案。" + +#, c-format +msgid "Couldn't save file %s." +msgstr "無法儲存 %s 檔。" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "試圖讓檔案的排版格式變得整齊時遭遇問題 (但仍舊順利儲存)。" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"這個編目檔無法以編目檔設定中所指定的「%s」字集儲存。\n" +"\n" +"它已改用 UTF-8 儲存,設定值也同時隨之修改。" + +msgid "Error saving catalog" +msgstr "儲存編目檔時發生錯誤" + +msgid "PO Translation Files" +msgstr "PO 翻譯檔" + +msgid "POT Translation Templates" +msgstr "POT 翻譯模板" + +msgid "All Translation Files" +msgstr "所有翻譯檔" + +msgid "Merging differences..." +msgstr "正合併差異..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "「%s」不是有效的 POT 檔。" + +msgid "(Use default language)" +msgstr "(使用預設語言)" + +msgid "Select your preferred language" +msgstr "選取您偏好的語言" + +msgid "Language selection" +msgstr "語言選擇" + +msgid "You must restart Poedit for this change to take effect." +msgstr "您得要重新啟動 Poedit 這項更動才會生效。" + +msgid "Downloading translations is disabled in this project." +msgstr "此專案已停用翻譯下載。" + +msgid "Not authorized, please sign in again." +msgstr "尚未獲得授權,請重新登入。" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin 是線上在地化管理平臺暨翻譯協作工具。Poedit 可以無縫同步 Crowdin 上管" +"理的 PO 檔。" + +msgid "Sign In" +msgstr "登入" + +msgid "Sign in" +msgstr "登入" + +msgid "Sign Out" +msgstr "登出" + +msgid "Sign out" +msgstr "登出" + +msgid "Waiting for authentication…" +msgstr "正在等候身分核對⋯" + +msgid "Updating user information…" +msgstr "正在更新使用者資訊⋯" + +msgid "Signed in as:" +msgstr "登入身分:" + +msgid "Learn More About Crowdin" +msgstr "深入瞭解 Crowdin" + +msgid "Learn more about Crowdin" +msgstr "深入瞭解 Crowdin" + +msgid "Sign in to Crowdin" +msgstr "登入 Crowdin" + +msgid "Open Crowdin translation" +msgstr "開啟 Crowdin 翻譯" + +msgid "Project:" +msgstr "專案:" + +msgid "Language:" +msgstr "語言:" + +msgid "File:" +msgstr "檔案:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "您的 Crowdin 帳號中尚無翻譯專案。" + +msgid "This project has no files that can be translated in Poedit." +msgstr "這個專案沒有可在 Poedit 中翻譯的檔案。" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "這份檔案僅能在 Crowdin 的網頁介面中編輯。" + +msgid "Downloading latest translations…" +msgstr "正在下載最新的翻譯⋯" + +msgid "Syncing with Crowdin" +msgstr "正與 Crowdin 同步中" + +msgid "Syncing with Crowdin failed." +msgstr "與 Crowdin 同步失敗。" + +msgid "Crowdin error" +msgstr "Crowdin 錯誤" + +msgid "Uploading translations…" +msgstr "正在上傳翻譯⋯" + +msgid "&Copy" +msgstr "複製(&C)" + +msgid "Learn more" +msgstr "深入瞭解" + +msgid "Learn More" +msgstr "深入瞭解" + +#, c-format +msgid "Failed command: %s" +msgstr "指令執行失敗:%s" + +msgid "Failed to merge gettext catalogs." +msgstr "無法合併 gettext 編目檔。" + +msgid "Scanning files..." +msgstr "正在掃描檔案..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "正在剖析 %s 檔案..." + +msgid "Failed to load extracted catalog." +msgstr "無法載入抽出的編目檔。" + +msgid "&Help" +msgstr "說明(&H)" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "無法在 Poedit 中直接編輯 MO 檔。" + +msgid "Error opening file" +msgstr "開啟檔案發生錯誤" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "請改開啟並編輯對應的 PO 檔。當您儲存時,MO 檔會同時更新。" + +msgid "don't delete temporary files (for debugging)" +msgstr "不要刪除暫存檔 (供除錯用)" + +msgid "handle a poedit:// URI" +msgstr "處理 poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "無法與 Poedit 程序溝通。" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "遭遇未處理的例外:%s" + +msgid "Unhandled exception occurred." +msgstr "遭遇未處理的例外。" + +msgid "Open catalog" +msgstr "開啟編目檔" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "「%s」檔不存在。" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "關於 %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "版本 %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "服務" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "隱藏 %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "隱藏其他" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "顯示全部" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "退出 %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit 是個易用的翻譯編輯器。" + +msgid "Catalogs Manager" +msgstr "編目檔管理員" + +msgid "Check for Updates..." +msgstr "檢查更新..." + +msgid "&Edit" +msgstr "編輯(&E)" + +msgid "Undo" +msgstr "取消動作" + +msgid "Redo" +msgstr "再次動作" + +msgid "Paste and Match Style" +msgstr "貼上並比對樣式" + +msgid "Delete" +msgstr "刪除" + +msgid "Spelling and Grammar" +msgstr "拼字與文法" + +msgid "Show Spelling and Grammar" +msgstr "顯示拼字與文法" + +msgid "Check Document Now" +msgstr "立刻檢查文件" + +msgid "Check Spelling While Typing" +msgstr "打字同時檢查拼字" + +msgid "Check Grammar With Spelling" +msgstr "檢查文法與拼字" + +msgid "Correct Spelling Automatically" +msgstr "自動校正拼字" + +msgid "Substitutions" +msgstr "替換項目" + +msgid "Show Substitutions" +msgstr "顯示替換項目" + +msgid "Smart Copy/Paste" +msgstr "智慧複製/貼上" + +msgid "Smart Quotes" +msgstr "智慧引號" + +msgid "Smart Dashes" +msgstr "智慧破折號" + +msgid "Smart Links" +msgstr "智慧連結" + +msgid "Text Replacement" +msgstr "文字取代" + +msgid "Transformations" +msgstr "轉換" + +msgid "Make Upper Case" +msgstr "轉為大寫" + +msgid "Make Lower Case" +msgstr "轉為小寫" + +msgid "Capitalize" +msgstr "轉為大寫" + +msgid "Speech" +msgstr "朗讀" + +msgid "Start Speaking" +msgstr "開始朗讀" + +msgid "Stop Speaking" +msgstr "停止朗讀" + +msgid "&View" +msgstr "檢視(&V)" + +msgid "Enter Full Screen" +msgstr "進入全螢幕" + +msgid "Window" +msgstr "視窗" + +msgid "Minimize" +msgstr "最小化" + +msgid "Zoom" +msgstr "調整遠近" + +msgid "Bring All to Front" +msgstr "全部帶到最前方" + +msgid "PO Translation" +msgstr "PO 翻譯" + +msgid "The file cannot be opened." +msgstr "無法開啟檔案。" + +msgid "Invalid file" +msgstr "檔案無效" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "檔案可能損毀,或是採用 Poedit 無法辨認的格式。" + +msgid "&Undo" +msgstr "復原(&U)" + +msgid "&Redo" +msgstr "重做(&R)" + +msgid "Cu&t" +msgstr "剪下(&T)" + +msgid "Cut" +msgstr "剪下" + +msgid "Copy" +msgstr "複製" + +msgid "&Paste" +msgstr "貼上(&P)" + +msgid "Paste" +msgstr "貼上" + +msgid "&Delete" +msgstr "刪除(&D)" + +msgid "Select &All" +msgstr "選取全部(&A)" + +msgid "Select All" +msgstr "選取全部" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "上鍵" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "下鍵" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "您不能拖曳超過一個檔案進 Poedit 視窗裡。" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "「%s」檔不是訊息編目檔。" + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "檔案(&F)" + +msgid "&Go" +msgstr "前往(&G)" + +msgid "Source text:" +msgstr "來源文字:" + +msgid "Singular:" +msgstr "單數:" + +msgid "Plural:" +msgstr "複數:" + +msgid "Translation:" +msgstr "譯文:" + +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 檔僅只是翻譯模板,檔案內並不包含任何翻譯。\n" +"若要翻譯,請根據該模板建立新的 PO 檔。" + +msgid "Create New Translation" +msgstr "建立新翻譯" + +msgid "Create new translation" +msgstr "建立新翻譯" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "由於尚未安裝 %s 字典,已停用拼字檢查。" + +msgid "Install" +msgstr "安裝" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "編目檔已修改。請問您是否要儲存這些更動?" + +msgid "Save changes" +msgstr "儲存變更" + +msgid "Your changes will be lost if you don't save them." +msgstr "如果不儲存,會失去您所做過的變更。" + +msgid "Save" +msgstr "儲存" + +msgid "Don't save" +msgstr "不要儲存" + +msgid "Don't Save" +msgstr "不要儲存" + +msgid "Save as..." +msgstr "另存為..." + +msgid "Compile to..." +msgstr "編譯成…" + +msgid "Compiled Translation Files" +msgstr "編譯的翻譯檔" + +msgid "Export as..." +msgstr "匯出為..." + +msgid "HTML Files" +msgstr "HTML 檔案" + +msgid "Open catalog template" +msgstr "開啟編目模板檔" + +msgid "Updating catalog" +msgstr "更新編目檔中" + +msgid "Source code not available." +msgstr "源碼無法使用。" + +msgid "Updating failed" +msgstr "更新失敗" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"由於在編目檔的屬性中所指定的位置找不到程式代碼,所以無法從源碼更新翻譯。" + +msgid "Entries in the catalog are probably incorrect." +msgstr "編目檔裡的條目可能有不正確。" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "編目檔更新失敗。請按下 [Details >>] 查看詳細資訊。" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "譯文中發現 %d 個問題。" + +msgid "Validation results" +msgstr "驗證結果" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "出錯的條目在清單中以紅色標記。您可以點選該條目以顯示詳細的錯誤資訊。" + +msgid "The file was saved safely." +msgstr "檔案已順利儲存。" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "檔案已順利儲存,且成功編譯為 MO 格式,但仍可能無法正常運作。" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "檔案已順利儲存,但是無法編譯成 MO 格式所以也無法真的使用。" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "檔案已編譯成 MO 格式,但可能無法正常運作。" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "檔案無法編譯成 MO 格式並使用。" + +msgid "No problems with the translation found." +msgstr "找不到譯文的問題。" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "譯文已準備好可供使用,但還有 %d 條尚未翻譯。" + +msgid "The translation is ready for use." +msgstr "譯文已準備好可供使用。" + +msgid "Context:" +msgstr "情境:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit 已自動修正「%s」檔中的無效內容。" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"檔案包含重複項目,然而 PO 檔並不允許重複,進而使檔案無法使用。Poedit 已修正這" +"個問題,但您應該校閱任何標記為模糊翻譯的項目,如有需要也請校正其內容。" + +msgid "Language of the translation isn't set." +msgstr "尚未設定譯文的語言。" + +msgid "Set Language" +msgstr "設定語言" + +msgid "Set language" +msgstr "設定語言" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"如果未正確設定翻譯語言,則無法使用翻譯建議。其他功能,如複數型,也可能受到影" +"響。" + +msgid "Language of the translation is the same as source language." +msgstr "翻譯語言與來源語言相同。" + +msgid "Fix Language" +msgstr "修正語言" + +msgid "Fix language" +msgstr "修正語言" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "這個編目檔內含有複數形式之條目,但卻尚未設定 Plural-Forms 檔頭。" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "此編目檔中條目的複數形式數目,與編目檔 Plural-Forms 檔頭的記錄不符" + +msgid "Required header Plural-Forms is missing." +msgstr "闕漏必要的 Plural-Forms 檔頭。" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Plural-Forms 檔頭中有語法錯誤 (\"%s\")。" + +msgid "Fix the Header" +msgstr "修正檔頭" + +msgid "Fix the header" +msgstr "修正檔頭" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "這個編目檔所採用的複數形式表述式,對 %s 來說並不常見。" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "校閱" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "載入訊息編目檔「%s」時發生錯誤。" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "已譯:%d / %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "剩餘:%d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d 項錯誤" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d 條" + +msgid " (unsaved)" +msgstr " (未儲存)" + +msgid " (modified)" +msgstr " (已修改)" + +msgid "Go" +msgstr "前往" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "無法更新翻譯記憶:%s" + +msgid "Purge deleted translations" +msgstr "淨空已刪除的譯文" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "請問您是否想要移除所有不再用到的譯文?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"如果您繼續淨空,所有標示為已刪除之譯文將永遠移除。如果未來這些訊息重新加回" +"來,您就得重新再翻譯一遍。" + +msgid "Keep" +msgstr "保留" + +msgid "Purge" +msgstr "淨空" + +msgid "Fill missing translations from TM" +msgstr "從翻譯記憶填入缺少的翻譯" + +msgid "Only fill in exact matches" +msgstr "僅只填入完全相符項目" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"預設情況下,也會同時填入不精確的項目,並將之標記為模糊。勾選此選項以僅只納入" +"精確符合的項目。" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "不要將完全符合的項目標記為模糊" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"請您只有在信任翻譯記憶的品質時才啟用。預設情況下,所有翻譯記憶的符合項目都會" +"標記為模糊狀態,並等候校閱。" + +msgid "Fill" +msgstr "填入" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d 項條目已從翻譯記憶填入。" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "這些譯文被標記為模糊,可能翻譯尚未明確。您應該校閱它們是否正確。" + +msgid "No entries could be filled from the translation memory." +msgstr "沒有可從翻譯記憶填入的條目。" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"翻譯記憶尚未包含任何類似此檔案內容的字串。這僅在 Poedit 學習夠多您手動翻譯的" +"檔案後,才會對半自動翻譯有效用。" + +msgid "Translating" +msgstr "翻譯中" + +msgid "Filling missing translations from TM..." +msgstr "正從翻譯記憶填入闕漏的翻譯..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "已翻譯 %u 個字串" + +msgid "Copy from source text" +msgstr "從來源文字複製" + +msgid "Copy from Source Text" +msgstr "從來源文字複製" + +msgid "Clear translation" +msgstr "清除譯文" + +msgid "Clear Translation" +msgstr "清除譯文" + +msgid "Edit comment" +msgstr "編輯註解" + +msgid "Edit Comment" +msgstr "編輯註解" + +msgid "References:" +msgstr "參照:" + +msgid "Everything" +msgstr "每一項" + +#, c-format +msgid "Form %i" +msgstr "形式 %i" + +msgid "Singular" +msgstr "單數" + +msgid "Zero" +msgstr "零" + +msgid "One" +msgstr "壹" + +msgid "Two" +msgstr "è²³" + +msgid "Plural" +msgstr "複數" + +msgid "Other" +msgstr "其他" + +msgid "&Bookmarks" +msgstr "書籤(&B)" + +#, c-format +msgid "Set bookmark %i" +msgstr "設定書籤 %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "前往書籤 %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "設定書籤 %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "前往書籤 %i" + +msgid "Hide Sidebar" +msgstr "隱藏側邊欄" + +msgid "Show Sidebar" +msgstr "顯示側邊欄" + +msgid "Hide Status Bar" +msgstr "隱藏狀態列" + +msgid "Show Status Bar" +msgstr "顯示狀態列" + +msgid "Source text" +msgstr "來源文字" + +msgid "Translation" +msgstr "譯文" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "來源文字 — %s" + +msgid "unknown language" +msgstr "未知語言" + +#, c-format +msgid "Translation — %s" +msgstr "譯文 — %s" + +msgid "Error:" +msgstr "錯誤:" + +msgid "Source file" +msgstr "來源檔案" + +msgid "Source file occurrence:" +msgstr "來源檔案出現處:" + +msgid "Open in Editor" +msgstr "以編輯器開啟" + +msgid "Open in editor" +msgstr "以編輯器開啟" + +msgid "No references for the selected item." +msgstr "選取的項目沒有參照。" + +#, c-format +msgid "Error opening file %s!" +msgstr "開啟 %s 檔時發生錯誤!" + +msgid "Find" +msgstr "尋找" + +msgid "Replace" +msgstr "取代" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "選項" + +msgid "Ignore case" +msgstr "忽略字母大小寫" + +msgid "Wrap around" +msgstr "前後循環" + +msgid "Whole words only" +msgstr "只針對整個單詞" + +msgid "Find in source texts" +msgstr "尋找來源文字" + +msgid "Find in translations" +msgstr "從譯文中尋找" + +msgid "Find in comments" +msgstr "從註解中尋找" + +msgid "Close" +msgstr "關閉" + +msgid "Replace All" +msgstr "全部取代" + +msgid "Replace all" +msgstr "全部取代" + +msgid "< &Previous" +msgstr "< 上一個(&P)" + +msgid "&Next >" +msgstr "下一個(&N) >" + +msgid "String to find" +msgstr "要尋找的字串" + +msgid "Replacement string" +msgstr "取代用字串" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "無法執行程式:%s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "語言代碼或名稱 (例:zh_TW)" + +msgid "Translation Language" +msgstr "譯文語言" + +msgid "Language of the translation:" +msgstr "譯文的語言:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - 編目檔管理員" + +msgid "Catalog" +msgstr "編目檔" + +msgid "Total" +msgstr "總計" + +msgid "Untrans" +msgstr "未譯" + +msgid "Fuzzy" +msgstr "模糊" + +msgid "Bad Tokens" +msgstr "不良代符" + +msgid "Last modified" +msgstr "上次修改於" + +msgid "Select directory" +msgstr "選取目錄" + +msgid "Directories:" +msgstr "目錄:" + +msgid "" +msgstr "<未命名>" + +msgid "Do you want to delete the project?" +msgstr "請問您是否想刪除這個專案?" + +msgid "Confirmation" +msgstr "確認" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"請問您是否真想要大規模更新\n" +"這個專案中的所有編目檔?" + +msgid "Information about the translator" +msgstr "譯者資訊" + +msgid "Name:" +msgstr "姓名:" + +msgid "Your Name" +msgstr "您的姓名" + +msgid "Email:" +msgstr "電子郵件:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"您的姓名與電子郵件位址僅用於設定 GNU gettext 檔的 Last-Translator 標頭部份。" + +msgid "Editing" +msgstr "編輯" + +msgid "Automatically compile MO file when saving" +msgstr "儲存時自動編譯 MO 檔" + +msgid "Show summary after catalog update" +msgstr "更新編目檔後顯示摘要" + +msgid "Check spelling" +msgstr "檢查拼字" + +msgid "Always change focus to text input field" +msgstr "總是將焦點放在文字輸入欄位中" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"永遠不要讓字串清單取得焦點。如果您啟用這個選項,就得並用 Ctrl 鍵與方向鍵才能" +"以鍵盤導覽,不過同時您能立即輸入文字,而不必先按 Tab 鍵變更輸入焦點。" + +msgid "Appearance" +msgstr "外觀" + +msgid "Use custom list font:" +msgstr "使用自訂清單字型:" + +msgid "Use custom text fields font:" +msgstr "使用自訂文字欄位自行:" + +msgid "Change UI language" +msgstr "變更介面語言" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(需要 Windows 8 或更高版本)" + +msgid "General" +msgstr "一般" + +msgid "Use translation memory" +msgstr "使用翻譯記憶" + +msgid "Learn From Files..." +msgstr "從檔案學習..." + +msgid "Learn from files..." +msgstr "從檔案中學習…" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "重設" + +msgid "Consult TM when updating from sources" +msgstr "從來源更新時查閱翻譯記憶" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"若啟用,Poedit 會試著使用您存在翻譯記憶中的先前翻譯\n" +"填入新條目。若翻譯記憶幾近空白,可能效用不大。\n" +"隨著您編輯過的翻譯越來越多,翻譯記憶隨之增長,\n" +"效用會越來越大。" + +msgid "Stored translations:" +msgstr "儲存的翻譯:" + +msgid "Database size on disk:" +msgstr "資料庫在磁碟上的大小:" + +msgid "Select translation files to import" +msgstr "選取要匯入的翻譯檔" + +msgid "Translation Memory" +msgstr "翻譯記憶" + +msgid "Importing translations..." +msgstr "正匯入譯文..." + +msgid "Finalizing..." +msgstr "正在收尾..." + +msgid "Reset translation memory" +msgstr "重設翻譯記憶" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "您確定要重設翻譯記憶?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "重設翻譯記憶將刪除所有儲存過的翻譯,且不可回復。您將無法還原這項操作。" + +msgid "Cancel" +msgstr "取消" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "翻譯記憶" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "源碼抽取器用於尋找源瑪檔中的可譯字串,並將之抽取出來以便翻譯。" + +msgid "New" +msgstr "新增" + +msgid "Edit" +msgstr "編輯" + +msgid "Delete extractor" +msgstr "刪除抽取器" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "您確定要刪除「%s」抽取器?" + +msgid "Extractors" +msgstr "抽取器" + +msgid "Accounts" +msgstr "帳號" + +msgid "Automatically check for updates" +msgstr "自動檢查更新" + +msgid "Include beta versions" +msgstr "包括 Beta 版" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "Beta 版本包含最新功能和改善,但可能有點不穩定。" + +msgid "Updates" +msgstr "更新" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"這些設定會影響 PO 檔案的內部格式化處理方式。如果您有特定需求再調整它們,例" +"如:需要行版本控制。" + +msgid "Line endings:" +msgstr "列結尾:" + +msgid "Unix (recommended)" +msgstr "Unix (建議採用)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "換行位置:" + +msgid "Preserve formatting of existing files" +msgstr "保留既有檔案的格式化處理方式" + +msgid "Advanced" +msgstr "進階" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s 偏好設定" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"請將資料夾拖放到這裡\n" +"\n" +"或是使用 + 鈕" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"請將資料夾拖放到這裡\n" +"\n" +"或是使用 + 鈕" + +msgid "Add Folders..." +msgstr "加入資料夾..." + +msgid "Add folders..." +msgstr "加入資料夾..." + +msgid "Add Files..." +msgstr "加入檔案..." + +msgid "Add files..." +msgstr "加入檔案..." + +msgid "Add Wildcard..." +msgstr "加入萬用字符..." + +msgid "Add wildcard..." +msgstr "加入萬用字符..." + +msgid "Paths" +msgstr "路徑" + +msgid "Excluded paths" +msgstr "排除的路徑" + +msgid "Additional keywords" +msgstr "額外的關鍵字" + +msgid "Name of the project the translation is for" +msgstr "翻譯的目標專案名稱" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "例:nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (建議採用)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "請先儲存檔案。直到儲存之後,此區段才能編輯。" + +msgid "Comment:" +msgstr "註解:" + +msgid "OK" +msgstr "確定" + +msgid "C&lear" +msgstr "清除(&L)" + +msgid "Clear the comment" +msgstr "清除註解" + +msgid "Create new translations project" +msgstr "建立新的翻譯專案" + +msgid "Edit the project" +msgstr "編輯這個專案" + +msgid "Delete the project" +msgstr "刪除本專案" + +msgid "Update all" +msgstr "更新全部" + +msgid "Update all catalogs in the project" +msgstr "更新專案中的所有編目檔" + +msgid "Edit project" +msgstr "編輯專案" + +msgid "Project name:" +msgstr "專案名稱:" + +msgid "Browse" +msgstr "瀏覽" + +msgid "Add directory to the list" +msgstr "把目錄加入清單中" + +msgid "&New..." +msgstr "新增(&N)..." + +msgid "New from &POT/PO file..." +msgstr "從 &POT/PO 檔新增..." + +msgid "New From &POT/PO File..." +msgstr "從 &POT/PO 檔新增..." + +msgid "&Open..." +msgstr "開啟(&O)..." + +msgid "Open Recent" +msgstr "開啟最近檔案" + +msgid "Open from Crowdin..." +msgstr "從 Crowdin 開啟⋯" + +msgid "Open From Crowdin..." +msgstr "從 Crowdin 開啟⋯" + +msgid "&Close" +msgstr "關閉(&C)" + +msgid "&Save" +msgstr "儲存(&S)" + +msgid "Save &as..." +msgstr "另存為(&A)..." + +msgid "Save &As..." +msgstr "另存為(&A)..." + +msgid "Compile to MO..." +msgstr "編譯成 MO…" + +msgid "E&xport as HTML..." +msgstr "匯出為 HTML(&X)..." + +msgid "Check for updates..." +msgstr "檢查更新..." + +msgid "&Preferences..." +msgstr "偏好設定(&P)..." + +msgid "Catalogs &manager" +msgstr "編目檔管理員(&M)" + +msgid "Catalogs &Manager" +msgstr "編目檔管理員(&M)" + +msgid "E&xit" +msgstr "離開(&X)" + +msgid "Quit" +msgstr "退出" + +msgid "Copy from singular" +msgstr "從單數複製" + +msgid "Copy From Singular" +msgstr "從單數複製" + +msgid "Translation is &fuzzy" +msgstr "譯文模糊(&F)" + +msgid "Translation Is &Fuzzy" +msgstr "譯文模糊(&F)" + +msgid "Edit &comment" +msgstr "編輯註解(&C)" + +msgid "Edit &Comment" +msgstr "編輯註解(&C)" + +msgid "Suggestions" +msgstr "建議" + +msgid "&Show references" +msgstr "顯示參照(&S)" + +msgid "&Show References" +msgstr "顯示參照(&S)" + +msgid "&Find..." +msgstr "尋找(&F)..." + +msgid "Replace..." +msgstr "取代⋯" + +msgid "Find next" +msgstr "往後尋找" + +msgid "Find previous" +msgstr "往前尋找" + +msgid "Find and Replace..." +msgstr "尋找與取代⋯" + +msgid "Find Next" +msgstr "往後尋找" + +msgid "Find Previous" +msgstr "往前尋找" + +msgid "&Preferences" +msgstr "偏好設定(&P)" + +msgid "Display entry &IDs" +msgstr "顯示條目 &ID" + +msgid "Display Entry &IDs" +msgstr "顯示條目 &ID" + +msgid "Sort by &file order" +msgstr "按照檔案順序排列(&F)" + +msgid "Sort by &File Order" +msgstr "按照檔案順序排列(&F)" + +msgid "Sort by &source" +msgstr "按照來源排列(&S)" + +msgid "Sort by &Source" +msgstr "按照來源排列(&S)" + +msgid "Sort by &translation" +msgstr "按照譯文排列(&T)" + +msgid "Sort by &Translation" +msgstr "按照譯文排列(&T)" + +msgid "&Group by context" +msgstr "依情境分組(&G)" + +msgid "&Group By Context" +msgstr "依情境分組(&)" + +msgid "Entries with errors first" +msgstr "錯誤條目優先" + +msgid "Entries with Errors First" +msgstr "錯誤條目優先" + +msgid "&Untranslated entries first" +msgstr "先顯示未翻譯的條目(&U)" + +msgid "&Untranslated Entries First" +msgstr "先顯示未翻譯的條目(&U)" + +msgid "Show sidebar" +msgstr "顯示側邊欄" + +msgid "Show status bar" +msgstr "顯示狀態列" + +msgid "C&atalog" +msgstr "編目檔(&A)" + +msgid "&Update from sources" +msgstr "從來源更新(&U)" + +msgid "&Update from Sources" +msgstr "從來源更新(&U)" + +msgid "Update from &POT file..." +msgstr "從 &POT 檔更新..." + +msgid "Update from &POT File..." +msgstr "從 &POT 檔更新..." + +msgid "Sync with Crowdin" +msgstr "與 Crowdin 同步" + +msgid "Fill missing translations from &TM..." +msgstr "從翻譯記憶填入缺少的翻譯(&T)..." + +msgid "Fill Missing Translations from &TM..." +msgstr "從翻譯記憶填入缺少的翻譯(&T)..." + +msgid "&Purge deleted translations" +msgstr "淨空已刪除的譯文(&P)" + +msgid "&Purge Deleted Translations" +msgstr "淨空已刪除的譯文(&P)" + +msgid "&Validate translations" +msgstr "驗證譯文(&V)" + +msgid "&Validate Translations" +msgstr "驗證譯文(&V)" + +msgid "&Properties..." +msgstr "屬性(&P)..." + +msgid "&Done and next" +msgstr "完成並移至下一條(&D)" + +msgid "&Done and Next" +msgstr "完成並移至下一條(&D)" + +msgid "&Previous translation" +msgstr "前一條翻譯(&P)" + +msgid "&Previous Translation" +msgstr "前一條翻譯(&P)" + +msgid "&Next translation" +msgstr "下一條翻譯(&N)" + +msgid "&Next Translation" +msgstr "下一條翻譯(&N)" + +msgid "P&revious unfinished" +msgstr "前一條未完成(&R)" + +msgid "P&revious Unfinished" +msgstr "前一條未完成(&R)" + +msgid "Ne&xt unfinished" +msgstr "下一條未完成(&X)" + +msgid "Ne&xt Unfinished" +msgstr "下一條未完成(&X)" + +msgid "Previous plural form" +msgstr "上個複數形式" + +msgid "Previous Plural Form" +msgstr "上個複數形式" + +msgid "Next plural form" +msgstr "下個複數形式" + +msgid "Next Plural Form" +msgstr "下個複數形式" + +msgid "&Online help" +msgstr "線上說明(&O)" + +msgid "&Online Help" +msgstr "線上說明(&O)" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext 手冊" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext 手冊" + +msgid "&About Poedit" +msgstr "關於 Poedit(&A)" + +msgid "&About" +msgstr "關於(&A)" + +msgid "Extractor setup" +msgstr "抽取器設置" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "副檔名清單,請用半形分號隔開 (例:*.cpp; *.h):" + +msgid "Invocation:" +msgstr "喚起:" + +msgid "Command to extract translations:" +msgstr "抽取翻譯用的指令:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"這是用來啟動抽取器的指令。\n" +"%o 會展開成輸出檔的名稱,%K 是\n" +"關鍵字清單,%F 是輸入檔清單,\n" +"%C 是字集旗標 (參閱下方)。" + +msgid "An item in keywords list:" +msgstr "關鍵字清單中的一個項目:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"這個內容會按照每個關鍵字逐次\n" +"附到命令列中。%k 會展開成關鍵字。" + +msgid "An item in input files list:" +msgstr "輸入檔清單中的一個項目:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"這個內容會按照每個輸入檔逐次\n" +"附到命令列中。%f 會展開成檔名。" + +msgid "Source code charset:" +msgstr "源碼字集:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"只有在給定源碼字集時,這個內容\n" +"才會附到命令列中。%c 會展開成字集的值。" + +msgid "Catalog properties" +msgstr "編目檔屬性" + +msgid "Project name and version:" +msgstr "專案名稱及版本:" + +msgid "Plural Forms:" +msgstr "複數形式:" + +msgid "Use default rules for this language" +msgstr "使用此語言的預設規則" + +msgid "Use custom expression" +msgstr "使用自訂表述式" + +msgid "Learn about plural forms" +msgstr "瞭解複數型態" + +msgid "Charset:" +msgstr "字集:" + +msgid "Team:" +msgstr "團隊:" + +msgid "Team's email address:" +msgstr "團隊的電子郵件地址:" + +msgid "Translation properties" +msgstr "譯文屬性" + +msgid "Sources paths" +msgstr "來源路徑" + +msgid "Extract text from source files in the following directories:" +msgstr "從下列目錄中擷取源檔內的文字" + +msgid "Base path:" +msgstr "基礎路徑:" + +msgid "Sources keywords" +msgstr "來源關鍵字" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"在來源檔案中使用這些關鍵字 (函式名稱) 來\n" +"識別可翻譯字串:" + +msgid "Learn about gettext keywords" +msgstr "學習 gettext 關鍵字" + +msgid "Update summary" +msgstr "更新摘要" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"在來源中發現這些字串,但編目檔中卻沒有。\n" +"Poedit 現在會將它們加入編目檔中。" + +msgid "New strings" +msgstr "新增字串" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"這些字串已不在來源之中。\n" +"Poedit 現在會從編目檔中將之移除。" + +msgid "Obsolete strings" +msgstr "過時字串" + +msgid "(0 new, 0 obsolete)" +msgstr "(沒有新的,也沒有過時的)" + +msgid "Open" +msgstr "開啟" + +msgid "Save catalog" +msgstr "儲存編目檔" + +msgid "Validate" +msgstr "驗證" + +msgid "Check for errors in the translation" +msgstr "檢查譯文中是否有錯誤" + +msgid "Update" +msgstr "更新" + +msgid "Update catalog - synchronize it with sources" +msgstr "更新編目檔 - 與來源同步" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "切換所選字串是否包含模糊譯文" + +msgid "Show or hide the sidebar" +msgstr "顯示或隱藏側邊欄。" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "過去的來源文字:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "模糊翻譯所對應之舊的 (在更新並改動之前的) 來源文字。" + +msgid "Notes for translators:" +msgstr "給譯者的備註:" + +msgid "Add comment" +msgstr "加入評註" + +msgid "Add Comment" +msgstr "加入評註" + +msgid "Translation suggestions:" +msgstr "譯文建議:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "找不到符合項目" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "找不到符合項目" + +msgid "This string was found in Poedit’s translation memory." +msgstr "此字串已在 Poedit 的翻譯記憶中找到。" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(新增:%i,棄用:%i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "正匯入譯文:%d" + +msgid "Poedit Update" +msgstr "Poedit 更新" + +msgid "Preparing migration..." +msgstr "正準備轉移..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "轉移離開狀態:%d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit 需要將您的翻譯記憶轉換為新格式。" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"這必須在 Poedit 啟動前完成。如果您已儲存大量譯文可能會花上幾分鐘,但正常來說" +"會更快許多。" + +msgid "Proceed" +msgstr "繼續" + +msgid "Translation memory migration failed." +msgstr "翻譯記憶轉移失敗。" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"您的翻譯記憶資料無法轉移。錯誤為:\n" +"\n" +"%s\n" +"請寄封電子郵件到 help@poedit.net,我們會試著修好。" + +msgid "Cannot create temporary directory." +msgstr "無法建立暫存目錄。" + +msgid "Welcome to Poedit" +msgstr "歡迎使用 Poedit" + +msgid "Edit a translation" +msgstr "編輯譯文" + +msgid "Open an existing PO file and edit the translation." +msgstr "開啟現有的 PO 檔並編輯譯文。" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "從既有的 PO 檔或 POT 模板檔建立新翻譯。" + +msgid "Collaborate on a translation with Crowdin" +msgstr "使用 Crowdin 協作翻譯" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "從 Crowdin 下載檔案,翻譯,再將更動同步回去。" + +msgid "What is Crowdin?" +msgstr "什麼是 Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "沒有譯文。這並不尋常。" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"可翻譯條目並非以手動方式加入 Gettext 系統中,而是自動從源碼中抽出。\n" +"如此一來,條目不只能維持在最新狀態,還能保持精確。\n" +"譯者通常使用開發者提供的 PO 模板檔 (POT)。" + +msgid "(Learn more about GNU gettext)" +msgstr "(深入瞭解 GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "填充此編目檔的最簡單方式就是從 POT 檔更新:" + +msgid "Update from POT" +msgstr "從 POT 檔更新" + +msgid "Take translatable strings from an existing POT template." +msgstr "從既有的 POT 模板檔拿取可翻譯字串。" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "您也可以直接從源碼抽出可翻譯字串:" + +msgid "Extract from sources" +msgstr "從來源更新" + +msgid "Configure source code extraction in Properties." +msgstr "在 [屬性] 中設定源碼抽出項目。" + +msgid "Sync" +msgstr "同步" + +msgid "Synchronize the translation with Crowdin" +msgstr "同步 Crowdin 翻譯" diff --git a/poedit-uri.desktop b/poedit-uri.desktop new file mode 100644 index 0000000..3f4a321 --- /dev/null +++ b/poedit-uri.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Poedit +Type=Application +Terminal=false +NoDisplay=true +MimeType=x-scheme-handler/poedit; +Exec=poedit --handle-poedit-uri %u +Icon=poedit diff --git a/poedit.appdata.xml b/poedit.appdata.xml new file mode 100644 index 0000000..e9b0bce --- /dev/null +++ b/poedit.appdata.xml @@ -0,0 +1,35 @@ + + + poedit.desktop + CC0-1.0 + MIT + Poedit +

    GUI editor for GNU gettext .po files + Grafischer Editor für GNU Gettext-Dateien + +

    + This program is a GUI frontend to GNU Gettext utilities and a catalogs + editor/source code parser. It helps with translating applications into + other languages. +

    +

    + Dieses Programm stellt eine grafische Benutzeroberfläche für die + Dienstprogramme aus GNU Gettext bereit, sowie einen Katalogeditor und + einen Quellcode-Parser. Es hilft beim Übersetzen von Anwendungen in + andere Sprachen. +

    +
    + + + https://upload.wikimedia.org/wikipedia/commons/c/c2/Poedit_1.8.1_en.png + + + https://poedit.net + https://crowdin.com/project/poedit + help@poedit.net + + translation + gettext + wordpress + + diff --git a/poedit.desktop b/poedit.desktop new file mode 100644 index 0000000..2fb1d17 --- /dev/null +++ b/poedit.desktop @@ -0,0 +1,25 @@ +[Desktop Entry] +Name=Poedit +GenericName=Gettext catalogs editor +GenericName[ca]=Editor de catàlegs del Gettext +GenericName[de]=Katalogeditor für Gettext +GenericName[eo]=Gettext-a katalogredaktilo +GenericName[es]=Editor de catálogos de Gettext +GenericName[eu]=Gettext katalogo editatzailea +GenericName[fr]=Outil de traduction +GenericName[lt]=Gettext katalogų redaktorius +GenericName[nl]=Gettext-vertaalhulpmiddel +GenericName[pl]=Edytor pakietów gettext +GenericName[sv]=Gettext Översättningsverktyg +GenericName[ky]=Gettext каталогдор редактору +GenericName[kk]=Gettext каталогтар түзетушісі +GenericName[cs]=Editor katalogů Gettext +GenericName[vi]=Phần mềm sửa bản dịch Gettext +MimeType=application/x-po;application/x-gettext;text/x-gettext-translation;text/x-po;application/x-gettext-translation;text/x-gettext-translation-template; +Exec=poedit %F +Icon=poedit +Terminal=false +Type=Application +Categories=Development;Translation; +StartupNotify=true +Keywords=Translate;po;gettext; diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..cb9d965 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,80 @@ + +DB_LIBS = @DB_LIBS@ +LUCENE_LIBS = @LUCENE_LIBS@ +WX_LIBS = @WX_LIBS@ + +bin_PROGRAMS = poedit + +if MIGRATE_LEGACY_TM +libexec_PROGRAMS = poedit-dump-legacy-tm +poedit_dump_legacy_tm_SOURCES = tm/dump_legacy_tm.cpp +poedit_dump_legacy_tm_LDADD = $(DB_LIBS) +endif + +WX_BACKPORT_SRC = wx_backports/wx_gtk_activityindicator.cpp \ + wx_backports/activityindicator.h \ + wx_backports/gtk_activityindicator.h \ + wx_backports/nativewin.h \ + wx_backports/wx_gtk_nativewin.cpp + +if HAVE_CPPREST +CROWDIN_SUPPORT_SRC = \ + http_client.h http_client.cpp http_client_casablanca.cpp \ + crowdin_client.h crowdin_client.cpp \ + crowdin_gui.h crowdin_gui.cpp \ + keychain/keytar_posix.cc keychain/keytar.h +CROWDIN_SUPPORT_LIBS = $(CPPREST_LIBS) $(LIBSECRET_LIBS) +endif + +poedit_SOURCES = attentionbar.cpp attentionbar.h \ + errorbar.cpp errorbar.h \ + catalog.cpp catalog.h edapp.cpp edapp.h edframe.cpp \ + edframe.h fileviewer.cpp fileviewer.h extractor.cpp extractor.h \ + prefsdlg.cpp prefsdlg.h \ + propertiesdlg.cpp propertiesdlg.h progressinfo.h \ + progressinfo.cpp digger.h digger.cpp gexecute.h \ + gexecute.cpp summarydlg.h summarydlg.cpp \ + spellchecking.h spellchecking.cpp \ + findframe.cpp findframe.h commentdlg.h commentdlg.cpp \ + tm/suggestions.cpp tm/suggestions.h tm/transmem.cpp tm/transmem.h tm/tm_migrate.cpp \ + manager.h manager.cpp chooselang.cpp chooselang.h \ + export_html.cpp icons.h icons.cpp \ + pluralforms/pl_evaluate.cpp pluralforms/pl_evaluate.h \ + edlistctrl.cpp edlistctrl.h \ + cat_sorting.cpp cat_sorting.h \ + utility.cpp utility.h ThreadPool.h concurrency.cpp concurrency.h \ + version.h errors.h \ + str_helpers.h logcapture.h \ + unicode_helpers.h unicode_helpers.cpp \ + language.cpp language.h language_impl_legacy.h language_impl_plurals.h \ + languagectrl.cpp languagectrl.h \ + welcomescreen.cpp welcomescreen.h \ + syntaxhighlighter.cpp syntaxhighlighter.h \ + sidebar.cpp sidebar.h \ + text_control.h text_control.cpp \ + customcontrols.cpp customcontrols.h \ + hidpi.cpp hidpi.h \ + main_toolbar.h wx/main_toolbar.cpp \ + $(CROWDIN_SUPPORT_SRC) \ + $(WX_BACKPORT_SRC) +nodist_poedit_SOURCES = compiled_xrc.cpp + +poedit_LDADD = $(WX_LIBS) $(LUCENE_LIBS) $(EXPAT_LIBS) $(CLD2_LIBS) $(CROWDIN_SUPPORT_LIBS) \ + $(BOOST_LDFLAGS) $(BOOST_REGEX_LIB) $(BOOST_SYSTEM_LIB) + +XRC_RESOURCES = \ + $(srcdir)/resources/menus.xrc \ + $(srcdir)/resources/prefs.xrc \ + $(srcdir)/resources/progress.xrc \ + $(srcdir)/resources/properties.xrc \ + $(srcdir)/resources/summary.xrc \ + $(srcdir)/resources/toolbar.xrc \ + $(srcdir)/resources/comment.xrc \ + $(srcdir)/resources/manager.xrc + +compiled_xrc.cpp: $(XRC_RESOURCES) + $(WXRC) -v -c -o $@ $(XRC_RESOURCES) + +DISTCLEANFILES = $(nodist_poedit_SOURCES) + +EXTRA_DIST = $(XRC_RESOURCES) pluralforms/COPYING diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..557cfb0 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,937 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = poedit$(EXEEXT) +@MIGRATE_LEGACY_TM_TRUE@libexec_PROGRAMS = \ +@MIGRATE_LEGACY_TM_TRUE@ poedit-dump-legacy-tm$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/admin/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/ax_boost_base.m4 \ + $(top_srcdir)/admin/ax_boost_iostreams.m4 \ + $(top_srcdir)/admin/ax_boost_regex.m4 \ + $(top_srcdir)/admin/ax_boost_system.m4 \ + $(top_srcdir)/admin/ax_boost_thread.m4 \ + $(top_srcdir)/admin/ax_cxx_check_flag.m4 \ + $(top_srcdir)/admin/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/admin/berkeley_db.m4 \ + $(top_srcdir)/admin/wxwin.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" +PROGRAMS = $(bin_PROGRAMS) $(libexec_PROGRAMS) +am__poedit_SOURCES_DIST = attentionbar.cpp attentionbar.h errorbar.cpp \ + errorbar.h catalog.cpp catalog.h edapp.cpp edapp.h edframe.cpp \ + edframe.h fileviewer.cpp fileviewer.h extractor.cpp \ + extractor.h prefsdlg.cpp prefsdlg.h propertiesdlg.cpp \ + propertiesdlg.h progressinfo.h progressinfo.cpp digger.h \ + digger.cpp gexecute.h gexecute.cpp summarydlg.h summarydlg.cpp \ + spellchecking.h spellchecking.cpp findframe.cpp findframe.h \ + commentdlg.h commentdlg.cpp tm/suggestions.cpp \ + tm/suggestions.h tm/transmem.cpp tm/transmem.h \ + tm/tm_migrate.cpp manager.h manager.cpp chooselang.cpp \ + chooselang.h export_html.cpp icons.h icons.cpp \ + pluralforms/pl_evaluate.cpp pluralforms/pl_evaluate.h \ + edlistctrl.cpp edlistctrl.h cat_sorting.cpp cat_sorting.h \ + utility.cpp utility.h ThreadPool.h concurrency.cpp \ + concurrency.h version.h errors.h str_helpers.h logcapture.h \ + unicode_helpers.h unicode_helpers.cpp language.cpp language.h \ + language_impl_legacy.h language_impl_plurals.h \ + languagectrl.cpp languagectrl.h welcomescreen.cpp \ + welcomescreen.h syntaxhighlighter.cpp syntaxhighlighter.h \ + sidebar.cpp sidebar.h text_control.h text_control.cpp \ + customcontrols.cpp customcontrols.h hidpi.cpp hidpi.h \ + main_toolbar.h wx/main_toolbar.cpp http_client.h \ + http_client.cpp http_client_casablanca.cpp crowdin_client.h \ + crowdin_client.cpp crowdin_gui.h crowdin_gui.cpp \ + keychain/keytar_posix.cc keychain/keytar.h \ + wx_backports/wx_gtk_activityindicator.cpp \ + wx_backports/activityindicator.h \ + wx_backports/gtk_activityindicator.h wx_backports/nativewin.h \ + wx_backports/wx_gtk_nativewin.cpp +am__dirstamp = $(am__leading_dot)dirstamp +@HAVE_CPPREST_TRUE@am__objects_1 = http_client.$(OBJEXT) \ +@HAVE_CPPREST_TRUE@ http_client_casablanca.$(OBJEXT) \ +@HAVE_CPPREST_TRUE@ crowdin_client.$(OBJEXT) \ +@HAVE_CPPREST_TRUE@ crowdin_gui.$(OBJEXT) \ +@HAVE_CPPREST_TRUE@ keychain/keytar_posix.$(OBJEXT) +am__objects_2 = wx_backports/wx_gtk_activityindicator.$(OBJEXT) \ + wx_backports/wx_gtk_nativewin.$(OBJEXT) +am_poedit_OBJECTS = attentionbar.$(OBJEXT) errorbar.$(OBJEXT) \ + catalog.$(OBJEXT) edapp.$(OBJEXT) edframe.$(OBJEXT) \ + fileviewer.$(OBJEXT) extractor.$(OBJEXT) prefsdlg.$(OBJEXT) \ + propertiesdlg.$(OBJEXT) progressinfo.$(OBJEXT) \ + digger.$(OBJEXT) gexecute.$(OBJEXT) summarydlg.$(OBJEXT) \ + spellchecking.$(OBJEXT) findframe.$(OBJEXT) \ + commentdlg.$(OBJEXT) tm/suggestions.$(OBJEXT) \ + tm/transmem.$(OBJEXT) tm/tm_migrate.$(OBJEXT) \ + manager.$(OBJEXT) chooselang.$(OBJEXT) export_html.$(OBJEXT) \ + icons.$(OBJEXT) pluralforms/pl_evaluate.$(OBJEXT) \ + edlistctrl.$(OBJEXT) cat_sorting.$(OBJEXT) utility.$(OBJEXT) \ + concurrency.$(OBJEXT) unicode_helpers.$(OBJEXT) \ + language.$(OBJEXT) languagectrl.$(OBJEXT) \ + welcomescreen.$(OBJEXT) syntaxhighlighter.$(OBJEXT) \ + sidebar.$(OBJEXT) text_control.$(OBJEXT) \ + customcontrols.$(OBJEXT) hidpi.$(OBJEXT) \ + wx/main_toolbar.$(OBJEXT) $(am__objects_1) $(am__objects_2) +nodist_poedit_OBJECTS = compiled_xrc.$(OBJEXT) +poedit_OBJECTS = $(am_poedit_OBJECTS) $(nodist_poedit_OBJECTS) +am__DEPENDENCIES_1 = +@HAVE_CPPREST_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ +@HAVE_CPPREST_TRUE@ $(am__DEPENDENCIES_1) +poedit_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am__poedit_dump_legacy_tm_SOURCES_DIST = tm/dump_legacy_tm.cpp +@MIGRATE_LEGACY_TM_TRUE@am_poedit_dump_legacy_tm_OBJECTS = \ +@MIGRATE_LEGACY_TM_TRUE@ tm/dump_legacy_tm.$(OBJEXT) +poedit_dump_legacy_tm_OBJECTS = $(am_poedit_dump_legacy_tm_OBJECTS) +@MIGRATE_LEGACY_TM_TRUE@poedit_dump_legacy_tm_DEPENDENCIES = \ +@MIGRATE_LEGACY_TM_TRUE@ $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/admin/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(poedit_SOURCES) $(nodist_poedit_SOURCES) \ + $(poedit_dump_legacy_tm_SOURCES) +DIST_SOURCES = $(am__poedit_SOURCES_DIST) \ + $(am__poedit_dump_legacy_tm_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_IOSTREAMS_LIB = @BOOST_IOSTREAMS_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ +BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLD2_LIBS = @CLD2_LIBS@ +CPPFLAGS = @CPPFLAGS@ +CPPREST_LIBS = @CPPREST_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB_LIBS = @DB_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXPAT_CFLAGS = @EXPAT_CFLAGS@ +EXPAT_LIBS = @EXPAT_LIBS@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +HAVE_CXX11 = @HAVE_CXX11@ +ICU_CFLAGS = @ICU_CFLAGS@ +ICU_LIBS = @ICU_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSECRET_CFLAGS = @LIBSECRET_CFLAGS@ +LIBSECRET_LIBS = @LIBSECRET_LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUCENE_CFLAGS = @LUCENE_CFLAGS@ +LUCENE_LIBS = @LUCENE_LIBS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_SHORT_VERSION = @PACKAGE_SHORT_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WXRC = @WXRC@ +WX_CFLAGS = @WX_CFLAGS@ +WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ +WX_CONFIG_PATH = @WX_CONFIG_PATH@ +WX_CONFIG_WITH_ARGS = @WX_CONFIG_WITH_ARGS@ +WX_CPPFLAGS = @WX_CPPFLAGS@ +WX_CXXFLAGS = @WX_CXXFLAGS@ +WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ +WX_LIBS = @WX_LIBS@ +WX_LIBS_STATIC = @WX_LIBS_STATIC@ +WX_RESCOMP = @WX_RESCOMP@ +WX_VERSION = @WX_VERSION@ +WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ +WX_VERSION_MICRO = @WX_VERSION_MICRO@ +WX_VERSION_MINOR = @WX_VERSION_MINOR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@MIGRATE_LEGACY_TM_TRUE@poedit_dump_legacy_tm_SOURCES = tm/dump_legacy_tm.cpp +@MIGRATE_LEGACY_TM_TRUE@poedit_dump_legacy_tm_LDADD = $(DB_LIBS) +WX_BACKPORT_SRC = wx_backports/wx_gtk_activityindicator.cpp \ + wx_backports/activityindicator.h \ + wx_backports/gtk_activityindicator.h \ + wx_backports/nativewin.h \ + wx_backports/wx_gtk_nativewin.cpp + +@HAVE_CPPREST_TRUE@CROWDIN_SUPPORT_SRC = \ +@HAVE_CPPREST_TRUE@ http_client.h http_client.cpp http_client_casablanca.cpp \ +@HAVE_CPPREST_TRUE@ crowdin_client.h crowdin_client.cpp \ +@HAVE_CPPREST_TRUE@ crowdin_gui.h crowdin_gui.cpp \ +@HAVE_CPPREST_TRUE@ keychain/keytar_posix.cc keychain/keytar.h + +@HAVE_CPPREST_TRUE@CROWDIN_SUPPORT_LIBS = $(CPPREST_LIBS) $(LIBSECRET_LIBS) +poedit_SOURCES = attentionbar.cpp attentionbar.h \ + errorbar.cpp errorbar.h \ + catalog.cpp catalog.h edapp.cpp edapp.h edframe.cpp \ + edframe.h fileviewer.cpp fileviewer.h extractor.cpp extractor.h \ + prefsdlg.cpp prefsdlg.h \ + propertiesdlg.cpp propertiesdlg.h progressinfo.h \ + progressinfo.cpp digger.h digger.cpp gexecute.h \ + gexecute.cpp summarydlg.h summarydlg.cpp \ + spellchecking.h spellchecking.cpp \ + findframe.cpp findframe.h commentdlg.h commentdlg.cpp \ + tm/suggestions.cpp tm/suggestions.h tm/transmem.cpp tm/transmem.h tm/tm_migrate.cpp \ + manager.h manager.cpp chooselang.cpp chooselang.h \ + export_html.cpp icons.h icons.cpp \ + pluralforms/pl_evaluate.cpp pluralforms/pl_evaluate.h \ + edlistctrl.cpp edlistctrl.h \ + cat_sorting.cpp cat_sorting.h \ + utility.cpp utility.h ThreadPool.h concurrency.cpp concurrency.h \ + version.h errors.h \ + str_helpers.h logcapture.h \ + unicode_helpers.h unicode_helpers.cpp \ + language.cpp language.h language_impl_legacy.h language_impl_plurals.h \ + languagectrl.cpp languagectrl.h \ + welcomescreen.cpp welcomescreen.h \ + syntaxhighlighter.cpp syntaxhighlighter.h \ + sidebar.cpp sidebar.h \ + text_control.h text_control.cpp \ + customcontrols.cpp customcontrols.h \ + hidpi.cpp hidpi.h \ + main_toolbar.h wx/main_toolbar.cpp \ + $(CROWDIN_SUPPORT_SRC) \ + $(WX_BACKPORT_SRC) + +nodist_poedit_SOURCES = compiled_xrc.cpp +poedit_LDADD = $(WX_LIBS) $(LUCENE_LIBS) $(EXPAT_LIBS) $(CLD2_LIBS) $(CROWDIN_SUPPORT_LIBS) \ + $(BOOST_LDFLAGS) $(BOOST_REGEX_LIB) $(BOOST_SYSTEM_LIB) + +XRC_RESOURCES = \ + $(srcdir)/resources/menus.xrc \ + $(srcdir)/resources/prefs.xrc \ + $(srcdir)/resources/progress.xrc \ + $(srcdir)/resources/properties.xrc \ + $(srcdir)/resources/summary.xrc \ + $(srcdir)/resources/toolbar.xrc \ + $(srcdir)/resources/comment.xrc \ + $(srcdir)/resources/manager.xrc + +DISTCLEANFILES = $(nodist_poedit_SOURCES) +EXTRA_DIST = $(XRC_RESOURCES) pluralforms/COPYING +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .cpp .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +install-libexecPROGRAMS: $(libexec_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-libexecPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(libexecdir)" && rm -f $$files + +clean-libexecPROGRAMS: + -test -z "$(libexec_PROGRAMS)" || rm -f $(libexec_PROGRAMS) +tm/$(am__dirstamp): + @$(MKDIR_P) tm + @: > tm/$(am__dirstamp) +tm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tm/$(DEPDIR) + @: > tm/$(DEPDIR)/$(am__dirstamp) +tm/suggestions.$(OBJEXT): tm/$(am__dirstamp) \ + tm/$(DEPDIR)/$(am__dirstamp) +tm/transmem.$(OBJEXT): tm/$(am__dirstamp) tm/$(DEPDIR)/$(am__dirstamp) +tm/tm_migrate.$(OBJEXT): tm/$(am__dirstamp) \ + tm/$(DEPDIR)/$(am__dirstamp) +pluralforms/$(am__dirstamp): + @$(MKDIR_P) pluralforms + @: > pluralforms/$(am__dirstamp) +pluralforms/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) pluralforms/$(DEPDIR) + @: > pluralforms/$(DEPDIR)/$(am__dirstamp) +pluralforms/pl_evaluate.$(OBJEXT): pluralforms/$(am__dirstamp) \ + pluralforms/$(DEPDIR)/$(am__dirstamp) +wx/$(am__dirstamp): + @$(MKDIR_P) wx + @: > wx/$(am__dirstamp) +wx/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) wx/$(DEPDIR) + @: > wx/$(DEPDIR)/$(am__dirstamp) +wx/main_toolbar.$(OBJEXT): wx/$(am__dirstamp) \ + wx/$(DEPDIR)/$(am__dirstamp) +keychain/$(am__dirstamp): + @$(MKDIR_P) keychain + @: > keychain/$(am__dirstamp) +keychain/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) keychain/$(DEPDIR) + @: > keychain/$(DEPDIR)/$(am__dirstamp) +keychain/keytar_posix.$(OBJEXT): keychain/$(am__dirstamp) \ + keychain/$(DEPDIR)/$(am__dirstamp) +wx_backports/$(am__dirstamp): + @$(MKDIR_P) wx_backports + @: > wx_backports/$(am__dirstamp) +wx_backports/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) wx_backports/$(DEPDIR) + @: > wx_backports/$(DEPDIR)/$(am__dirstamp) +wx_backports/wx_gtk_activityindicator.$(OBJEXT): \ + wx_backports/$(am__dirstamp) \ + wx_backports/$(DEPDIR)/$(am__dirstamp) +wx_backports/wx_gtk_nativewin.$(OBJEXT): wx_backports/$(am__dirstamp) \ + wx_backports/$(DEPDIR)/$(am__dirstamp) + +poedit$(EXEEXT): $(poedit_OBJECTS) $(poedit_DEPENDENCIES) $(EXTRA_poedit_DEPENDENCIES) + @rm -f poedit$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(poedit_OBJECTS) $(poedit_LDADD) $(LIBS) +tm/dump_legacy_tm.$(OBJEXT): tm/$(am__dirstamp) \ + tm/$(DEPDIR)/$(am__dirstamp) + +poedit-dump-legacy-tm$(EXEEXT): $(poedit_dump_legacy_tm_OBJECTS) $(poedit_dump_legacy_tm_DEPENDENCIES) $(EXTRA_poedit_dump_legacy_tm_DEPENDENCIES) + @rm -f poedit-dump-legacy-tm$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(poedit_dump_legacy_tm_OBJECTS) $(poedit_dump_legacy_tm_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f keychain/*.$(OBJEXT) + -rm -f pluralforms/*.$(OBJEXT) + -rm -f tm/*.$(OBJEXT) + -rm -f wx/*.$(OBJEXT) + -rm -f wx_backports/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attentionbar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cat_sorting.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chooselang.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commentdlg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compiled_xrc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/concurrency.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crowdin_client.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crowdin_gui.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/customcontrols.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digger.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edapp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edframe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edlistctrl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errorbar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/export_html.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extractor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileviewer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findframe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gexecute.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hidpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_client.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_client_casablanca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icons.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/language.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/languagectrl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/manager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefsdlg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/propertiesdlg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sidebar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spellchecking.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/summarydlg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syntaxhighlighter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unicode_helpers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utility.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/welcomescreen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@keychain/$(DEPDIR)/keytar_posix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pluralforms/$(DEPDIR)/pl_evaluate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tm/$(DEPDIR)/dump_legacy_tm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tm/$(DEPDIR)/suggestions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tm/$(DEPDIR)/tm_migrate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tm/$(DEPDIR)/transmem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@wx/$(DEPDIR)/main_toolbar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@wx_backports/$(DEPDIR)/wx_gtk_activityindicator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@wx_backports/$(DEPDIR)/wx_gtk_nativewin.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f keychain/$(DEPDIR)/$(am__dirstamp) + -rm -f keychain/$(am__dirstamp) + -rm -f pluralforms/$(DEPDIR)/$(am__dirstamp) + -rm -f pluralforms/$(am__dirstamp) + -rm -f tm/$(DEPDIR)/$(am__dirstamp) + -rm -f tm/$(am__dirstamp) + -rm -f wx/$(DEPDIR)/$(am__dirstamp) + -rm -f wx/$(am__dirstamp) + -rm -f wx_backports/$(DEPDIR)/$(am__dirstamp) + -rm -f wx_backports/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) keychain/$(DEPDIR) pluralforms/$(DEPDIR) tm/$(DEPDIR) wx/$(DEPDIR) wx_backports/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libexecPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) keychain/$(DEPDIR) pluralforms/$(DEPDIR) tm/$(DEPDIR) wx/$(DEPDIR) wx_backports/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libexecPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libexecPROGRAMS \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-libexecPROGRAMS + + +compiled_xrc.cpp: $(XRC_RESOURCES) + $(WXRC) -v -c -o $@ $(XRC_RESOURCES) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ThreadPool.h b/src/ThreadPool.h new file mode 100644 index 0000000..002e8a6 --- /dev/null +++ b/src/ThreadPool.h @@ -0,0 +1,132 @@ +/* + +Copyright (c) 2012 Jakob Progsch + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + +See https://github.com/progschj/ThreadPool + +*/ + +#ifndef THREAD_POOL_H +#define THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ThreadPool { +public: + ThreadPool(size_t); + template + auto enqueue(F&& f, Args&&... args) + -> std::future::type>; + void enqueue_func(std::function&& f); + ~ThreadPool(); +private: + // need to keep track of threads so we can join them + std::vector< std::thread > workers; + // the task queue + std::queue< std::function > tasks; + + // synchronization + std::mutex queue_mutex; + std::condition_variable condition; + bool stop; +}; + +// the constructor just launches some amount of workers +inline ThreadPool::ThreadPool(size_t threads) + : stop(false) +{ + for(size_t i = 0;i task; + + { + std::unique_lock lock(this->queue_mutex); + this->condition.wait(lock, + [this]{ return this->stop || !this->tasks.empty(); }); + if(this->stop && this->tasks.empty()) + return; + task = std::move(this->tasks.front()); + this->tasks.pop(); + } + + task(); + } + } + ); +} + +// add new work item to the pool +template +auto ThreadPool::enqueue(F&& f, Args&&... args) + -> std::future::type> +{ + using return_type = typename std::result_of::type; + + auto task = std::make_shared< std::packaged_task >( + std::bind(std::forward(f), std::forward(args)...) + ); + + std::future res = task->get_future(); + enqueue_func([task](){ (*task)(); }); + return res; +} + +inline void ThreadPool::enqueue_func(std::function&& f) +{ + { + std::unique_lock lock(queue_mutex); + + // don't allow enqueueing after stopping the pool + if(stop) + throw std::runtime_error("enqueue on stopped ThreadPool"); + + tasks.emplace(f); + } + condition.notify_one(); +} + +// the destructor joins all threads +inline ThreadPool::~ThreadPool() +{ + { + std::unique_lock lock(queue_mutex); + stop = true; + } + condition.notify_all(); + for(std::thread &worker: workers) + worker.join(); +} + +#endif diff --git a/src/attentionbar.cpp b/src/attentionbar.cpp new file mode 100644 index 0000000..e5fc858 --- /dev/null +++ b/src/attentionbar.cpp @@ -0,0 +1,290 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2008-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "attentionbar.h" + +#include "utility.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "customcontrols.h" +#include "hidpi.h" + +#ifdef __WXOSX__ +#include "osx_helpers.h" +#endif + +#ifdef __WXOSX__ + #define SMALL_BORDER PX(7) + #define BUTTONS_SPACE PX(10) +#else + #define SMALL_BORDER PX(3) + #define BUTTONS_SPACE PX(5) +#endif + +BEGIN_EVENT_TABLE(AttentionBar, wxPanel) + EVT_BUTTON(wxID_CLOSE, AttentionBar::OnClose) + EVT_BUTTON(wxID_ANY, AttentionBar::OnAction) +END_EVENT_TABLE() + +AttentionBar::AttentionBar(wxWindow *parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, + wxTAB_TRAVERSAL | wxBORDER_NONE) +{ +#ifdef __WXOSX__ + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + +#ifndef __WXGTK__ + m_icon = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap); +#endif + m_label = new AutoWrappingText(this, ""); + + m_explanation = new AutoWrappingText(this, ""); + m_explanation->SetForegroundColour(GetBackgroundColour().ChangeLightness(40)); + + m_buttons = new wxBoxSizer(wxHORIZONTAL); + + m_checkbox = new wxCheckBox(this, wxID_ANY, ""); + + wxButton *btnClose = + new wxBitmapButton + ( + this, wxID_CLOSE, + wxArtProvider::GetBitmap("window-close", wxART_MENU), + wxDefaultPosition, wxDefaultSize, + wxNO_BORDER + ); + btnClose->SetToolTip(_("Hide this notification message")); +#ifdef __WXMSW__ + btnClose->SetBackgroundColour(GetBackgroundColour()); +#endif + +#if defined(__WXOSX__) || defined(__WXMSW__) + wxFont boldFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + boldFont.SetWeight(wxFONTWEIGHT_BOLD); + m_label->SetFont(boldFont); +#endif + + Bind(wxEVT_PAINT, &AttentionBar::OnPaint, this); + + wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->AddSpacer(PXDefaultBorder); +#ifndef __WXGTK__ + sizer->Add(m_icon, wxSizerFlags().Center().Border(wxALL, SMALL_BORDER)); +#endif + + auto labelSizer = new wxBoxSizer(wxVERTICAL); + labelSizer->Add(m_label, wxSizerFlags().Expand()); + labelSizer->Add(m_explanation, wxSizerFlags().Expand().Border(wxTOP|wxRIGHT, PX(4))); + sizer->Add(labelSizer, wxSizerFlags(1).Center().PXDoubleBorder(wxALL)); + sizer->AddSpacer(PX(20)); + sizer->Add(m_buttons, wxSizerFlags().Center().Border(wxALL, SMALL_BORDER)); + sizer->Add(m_checkbox, wxSizerFlags().Center().Border(wxRIGHT, BUTTONS_SPACE)); + sizer->Add(btnClose, wxSizerFlags().Center().Border(wxALL, SMALL_BORDER)); +#ifdef __WXMSW__ + sizer->AddSpacer(PX(4)); +#endif + + SetSizer(sizer); + + // the bar should be initially hidden + Show(false); +} + + +void AttentionBar::OnPaint(wxPaintEvent&) +{ + wxPaintDC dc(this); + wxRect rect(dc.GetSize()); + + auto bg = GetBackgroundColour(); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.SetPen(bg.ChangeLightness(90)); +#ifndef __WXOSX__ + dc.DrawLine(rect.GetTopLeft(), rect.GetTopRight()); +#endif + dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight()); +} + + +void AttentionBar::ShowMessage(const AttentionMessage& msg) +{ + if ( msg.IsBlacklisted() ) + return; + +#ifdef __WXGTK__ + switch ( msg.m_kind ) + { + case AttentionMessage::Info: + SetBackgroundColour(wxColour(252,252,189)); + break; + case AttentionMessage::Warning: + SetBackgroundColour(wxColour(250,173,61)); + break; + case AttentionMessage::Question: + SetBackgroundColour(wxColour(138,173,212)); + break; + case AttentionMessage::Error: + SetBackgroundColour(wxColour(237,54,54)); + break; + } +#else + + switch ( msg.m_kind ) + { + case AttentionMessage::Question: + SetBackgroundColour("#ABE887"); + break; + default: + #ifdef __WXMSW__ + SetBackgroundColour("#FFF499"); // match Visual Studio 2012+'s aesthetics + #else + SetBackgroundColour("#FCDE59"); + #endif + break; + } + +#ifdef __WXMSW__ + auto bg = GetBackgroundColour(); + for (auto w : GetChildren()) + w->SetBackgroundColour(bg); +#endif + + wxString iconName; + switch ( msg.m_kind ) + { + case AttentionMessage::Info: + iconName = wxART_INFORMATION; + break; + case AttentionMessage::Warning: + iconName = wxART_WARNING; + break; + case AttentionMessage::Question: + iconName = wxART_QUESTION; + break; + case AttentionMessage::Error: + iconName = wxART_ERROR; + break; + } + m_icon->SetBitmap(wxArtProvider::GetBitmap(iconName, wxART_MENU, wxSize(PX(16), PX(16)))); +#endif + + m_label->SetAndWrapLabel(msg.m_text); + m_explanation->SetAndWrapLabel(msg.m_explanation); + m_explanation->GetContainingSizer()->Show(m_explanation, !msg.m_explanation.empty()); + m_checkbox->SetLabel(msg.m_checkbox); + m_checkbox->GetContainingSizer()->Show(m_checkbox, !msg.m_checkbox.empty()); + + m_buttons->Clear(true/*delete_windows*/); + m_actions.clear(); + + for ( AttentionMessage::Actions::const_iterator i = msg.m_actions.begin(); + i != msg.m_actions.end(); ++i ) + { + wxButton *b = new wxButton(this, wxID_ANY, i->first); +#ifdef __WXOSX__ + MakeButtonRounded(b->GetHandle()); +#endif + m_buttons->Add(b, wxSizerFlags().Center().Border(wxRIGHT, BUTTONS_SPACE)); + m_actions[b] = i->second; + } + + // we need to size the control correctly _and_ lay out the controls if this + // is the first time it's being shown, otherwise we can get garbled look: + SetSize(GetParent()->GetClientSize().x, GetBestSize().y); + Layout(); + + Refresh(); + Show(); + GetParent()->Layout(); +} + +void AttentionBar::HideMessage() +{ + Hide(); + GetParent()->Layout(); +} + +void AttentionBar::OnClose(wxCommandEvent& WXUNUSED(event)) +{ + HideMessage(); +} + +void AttentionBar::OnAction(wxCommandEvent& event) +{ + ActionsMap::const_iterator i = m_actions.find(event.GetEventObject()); + if ( i == m_actions.end() ) + { + event.Skip(); + return; + } + + // first perform the action... + AttentionMessage::ActionInfo info; + info.checkbox = m_checkbox->IsShown() && m_checkbox->IsChecked(); + i->second(info); + + // ...then hide the message + HideMessage(); +} + + +/* static */ +void AttentionMessage::AddToBlacklist(const wxString& id) +{ + wxConfig::Get()->Write + ( + wxString::Format("/messages/dont_show/%s", id.c_str()), + (long)true + ); +} + +/* static */ +bool AttentionMessage::IsBlacklisted(const wxString& id) +{ + return wxConfig::Get()->ReadBool + ( + wxString::Format("/messages/dont_show/%s", id.c_str()), + false + ); +} + +void AttentionMessage::AddDontShowAgain() +{ + auto id = m_id; + AddAction( + MSW_OR_OTHER(_("Don't show again"), _("Don't Show Again")), [id]{ + AddToBlacklist(id); + }); +} diff --git a/src/attentionbar.h b/src/attentionbar.h new file mode 100644 index 0000000..603cc72 --- /dev/null +++ b/src/attentionbar.h @@ -0,0 +1,163 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2008-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _ATTENTIONBAR_H_ +#define _ATTENTIONBAR_H_ + +#include + +#include +#include +#include + +class WXDLLIMPEXP_FWD_CORE wxCheckBox; +class WXDLLIMPEXP_FWD_CORE wxStaticText; +class WXDLLIMPEXP_FWD_CORE wxStaticBitmap; +class WXDLLIMPEXP_FWD_CORE wxSizer; +class AutoWrappingText; + +/// Message to be displayed in AttentionBar +class AttentionMessage +{ +public: + /// Kind of the message + enum Kind + { + Info, + Warning, + Question, + Error + }; + + /// Information passed to the action callback + struct ActionInfo + { + /// State of the (optional) checkbox + bool checkbox; + }; + + /** + Ctor. + + @param id ID of the message. This ID must be globally unique within + the application. It is used to record this message's + status, i.e. if the user marked it as "don't show again" + etc. + @param kind Kind of the message. + @param text Text of the message; this should be kept reasonably short. + + @see AddToBlacklist + */ + AttentionMessage(const wxString& id, Kind kind, const wxString& text) + : m_id(id), m_kind(kind), m_text(text), m_explanation("") {} + + typedef std::function Callback; + typedef std::function CallbackNoArgs; + + /** + Adds an action button to the bar. By default, a close button is shown, + this makes it possible to add custom buttons. + + @param label Short label for the action. + @param callback Function to call when the button is clicked. + */ + void AddAction(const wxString& label, CallbackNoArgs callback) + { AddActionWithInfo(label, [=](ActionInfo){ callback(); }); } + + /// Similarly to AddAction(), but uses callback that is passed ActionInfo + void AddActionWithInfo(const wxString& label, Callback callback) + { m_actions.push_back(std::make_pair(label, callback)); } + + /// Adds "Don't show again" action. + void AddDontShowAgain(); + + /// Set additional explanatory text + void SetExplanation(const wxString& txt) { m_explanation = txt; } + + /// Add checkbox to the message + void AddCheckbox(const wxString& label) { m_checkbox = label; } + + wxString m_id; + Kind m_kind; + wxString m_text; + wxString m_explanation; + wxString m_checkbox; + + typedef std::pair Action; + typedef std::vector Actions; + Actions m_actions; + + /** + Adds message with given ID to blacklist, i.e. it won't be shown + ever again. + */ + static void AddToBlacklist(const wxString& id); + + /// Returns true if @a id is on the blacklist + static bool IsBlacklisted(const wxString& id); + + /// Returns true if this message is on the blacklist + bool IsBlacklisted() const { return IsBlacklisted(m_id); } +}; + + +/** + Attention bar is a tooltip-colored bar displayed on top of the main + window (a la Firefox or other browsers). + */ +class AttentionBar : public wxPanel +{ +public: + AttentionBar(wxWindow *parent); + + /** + Shows the message + (unless the user disallowed showing this particular message. + */ + void ShowMessage(const AttentionMessage& msg); + + /// Hides currently shown message + void HideMessage(); + +private: + void OnClose(wxCommandEvent& event); + void OnAction(wxCommandEvent& event); + void OnPaint(wxPaintEvent& event); + +private: +#ifndef __WXGTK__ + wxStaticBitmap *m_icon; +#endif + AutoWrappingText *m_label; + AutoWrappingText *m_explanation; + wxCheckBox *m_checkbox; + wxSizer *m_buttons; + typedef std::map ActionsMap; + ActionsMap m_actions; + + DECLARE_EVENT_TABLE() +}; + +#endif // _ATTENTIONBAR_H_ diff --git a/src/cat_sorting.cpp b/src/cat_sorting.cpp new file mode 100644 index 0000000..7ae569a --- /dev/null +++ b/src/cat_sorting.cpp @@ -0,0 +1,208 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * Copyright (C) 2005 Olivier Sannier + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "cat_sorting.h" + +#include +#include "str_helpers.h" + +#include +#include + +/*static*/ SortOrder SortOrder::Default() +{ + SortOrder order; + + wxString by = wxConfig::Get()->Read("/sort_by", "file-order"); + long ctxt = wxConfig::Get()->Read("/sort_group_by_context", 0L); + long untrans = wxConfig::Get()->Read("/sort_untrans_first", 0L); + long errors = wxConfig::Get()->Read("/sort_errors_first", 1L); + + if ( by == "source" ) + order.by = By_Source; + else if ( by == "translation" ) + order.by = By_Translation; + else + order.by = By_FileOrder; + + order.groupByContext = (ctxt != 0); + order.untransFirst = (untrans != 0); + order.errorsFirst = (errors != 0); + + return order; +} + + +void SortOrder::Save() +{ + wxString bystr; + switch ( by ) + { + case By_FileOrder: + bystr = "file-order"; + break; + case By_Source: + bystr = "source"; + break; + case By_Translation: + bystr = "translation"; + break; + } + + wxConfig::Get()->Write("/sort_by", bystr); + wxConfig::Get()->Write("/sort_group_by_context", groupByContext); + wxConfig::Get()->Write("/sort_untrans_first", untransFirst); + wxConfig::Get()->Write("/sort_errors_first", errorsFirst); +} + + +CatalogItemsComparator::CatalogItemsComparator(const Catalog& catalog, const SortOrder& order) + : m_catalog(catalog), m_order(order) +{ + UErrorCode err = U_ZERO_ERROR; + switch (m_order.by) + { + case SortOrder::By_Source: + m_collator.reset(icu::Collator::createInstance(catalog.GetSourceLanguage().ToIcu(), err)); + break; + + case SortOrder::By_Translation: + m_collator.reset(icu::Collator::createInstance(catalog.GetLanguage().ToIcu(), err)); + break; + + case SortOrder::By_FileOrder: + break; + } + + if (!U_SUCCESS(err) || err == U_USING_FALLBACK_WARNING) + { + wxLogTrace("poedit", "warning: not using collation for %s (%s)", + catalog.GetLanguage().Code(), u_errorName(err)); + } + + if (m_collator) + { + // Case-insensitive comparison: + m_collator->setStrength(icu::Collator::SECONDARY); + } +} + + +bool CatalogItemsComparator::operator()(int i, int j) const +{ + const CatalogItem& a = Item(i); + const CatalogItem& b = Item(j); + + if ( m_order.errorsFirst ) + { + if ( a.GetValidity() == CatalogItem::Val_Invalid && b.GetValidity() != CatalogItem::Val_Invalid ) + return true; + else if ( a.GetValidity() != CatalogItem::Val_Invalid && b.GetValidity() == CatalogItem::Val_Invalid ) + return false; + } + + if ( m_order.untransFirst ) + { + if ( !a.IsTranslated() && b.IsTranslated() ) + return true; + else if ( a.IsTranslated() && !b.IsTranslated() ) + return false; + + if ( a.IsFuzzy() && !b.IsFuzzy() ) + return true; + else if ( !a.IsFuzzy() && b.IsFuzzy() ) + return false; + } + + if ( m_order.groupByContext ) + { + if ( a.HasContext() && !b.HasContext() ) + return true; + else if ( !a.HasContext() && b.HasContext() ) + return false; + else if ( a.HasContext() && b.HasContext() ) + { + int r = CompareStrings(a.GetContext(), b.GetContext()); + if ( r != 0 ) + return r < 0; + } + } + + switch ( m_order.by ) + { + case SortOrder::By_FileOrder: + { + return i < j; + } + + case SortOrder::By_Source: + { + int r = CompareStrings(a.GetString(), b.GetString()); + if ( r != 0 ) + return r < 0; + break; + } + + case SortOrder::By_Translation: + { + int r = CompareStrings(a.GetTranslation(), b.GetTranslation()); + if ( r != 0 ) + return r < 0; + break; + } + } + + // As last resort, sort by position in file. Note that this means that + // no two items are considered equal w.r.t. sort order; this ensures stable + // ordering. + return i < j; +} + + +int CatalogItemsComparator::CompareStrings(wxString a, wxString b) const +{ + a.Replace("&", ""); + a.Replace("_", ""); + + b.Replace("&", ""); + b.Replace("_", ""); + + if (m_collator) + { + UErrorCode err = U_ZERO_ERROR; +#if wxUSE_UNICODE_UTF8 + return m_collator->compareUTF8(a.wx_str(), b.wx_str(), err); +#elif SIZEOF_WCHAR_T == 2 + return m_collator->compare(a.wx_str(), a.length(), b.wx_str(), b.length(), err); +#else + return m_collator->compare(str::to_icu(a), str::to_icu(b), err); +#endif + } + else + { + return a.CmpNoCase(b); + } +} diff --git a/src/cat_sorting.h b/src/cat_sorting.h new file mode 100644 index 0000000..392c924 --- /dev/null +++ b/src/cat_sorting.h @@ -0,0 +1,92 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _CAT_SORTING_H_ +#define _CAT_SORTING_H_ + +#include "catalog.h" + +#include +#include + +/// Sort order information +struct SortOrder +{ + enum ByWhat + { + By_FileOrder, + By_Source, + By_Translation + }; + + SortOrder() : by(By_FileOrder), groupByContext(false), untransFirst(false), errorsFirst(true) {} + + /// Loads default sort order from config settings + static SortOrder Default(); + + /// Saves this sort order into config + void Save(); + + /// What are we sorting by + ByWhat by; + + /// Group items by context? + bool groupByContext; + + /// Do untranslated entries go first? + bool untransFirst; + + /// Do entries with errors go first? + bool errorsFirst; +}; + +/** + Comparator for sorting catalog items by different criteria. + */ +class CatalogItemsComparator +{ +public: + /** + Initializes comparator instance for given catalog. + */ + CatalogItemsComparator(const Catalog& catalog, const SortOrder& order); + + CatalogItemsComparator(const CatalogItemsComparator&) = delete; + CatalogItemsComparator& operator=(const CatalogItemsComparator&) = delete; + + bool operator()(int i, int j) const; + +protected: + const CatalogItem& Item(int i) const { return *m_catalog[i]; } + int CompareStrings(wxString a, wxString b) const; + +private: + const Catalog& m_catalog; + SortOrder m_order; + std::unique_ptr m_collator; +}; + + +#endif // _CAT_SORTING_H_ diff --git a/src/catalog.cpp b/src/catalog.cpp new file mode 100644 index 0000000..98f58da --- /dev/null +++ b/src/catalog.cpp @@ -0,0 +1,2700 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "catalog.h" +#include "digger.h" +#include "gexecute.h" +#include "progressinfo.h" +#include "str_helpers.h" +#include "utility.h" +#include "version.h" +#include "language.h" + +#ifdef __WXOSX__ +#import +#endif + +// TODO: split into different file +#if wxUSE_GUI + #include + #include "summarydlg.h" +#endif + +// ---------------------------------------------------------------------- +// Textfile processing utilities: +// ---------------------------------------------------------------------- + +namespace +{ + +// If input begins with pattern, fill output with end of input (without +// pattern; strips trailing spaces) and return true. Return false otherwise +// and don't touch output. Is permissive about whitespace in the input: +// a space (' ') in pattern will match any number of any whitespace characters +// on that position in input. +bool ReadParam(const wxString& input, const wxString& pattern, wxString& output) +{ + if (input.size() < pattern.size()) + return false; + + unsigned in_pos = 0; + unsigned pat_pos = 0; + while (pat_pos < pattern.size() && in_pos < input.size()) + { + const wxChar pat = pattern[pat_pos++]; + + if (pat == _T(' ')) + { + if (!wxIsspace(input[in_pos++])) + return false; + + while (wxIsspace(input[in_pos])) + { + in_pos++; + if (in_pos == input.size()) + return false; + } + } + else + { + if (input[in_pos++] != pat) + return false; + } + + } + + if (pat_pos < pattern.size()) // pattern not fully matched + return false; + + output = input.Mid(in_pos).Strip(wxString::trailing); + return true; +} + + +// Checks if the file was loaded correctly, i.e. that non-empty lines +// ended up non-empty in memory, after doing charset conversion in +// wxTextFile. This detects for example files that claim they are in UTF-8 +// while in fact they are not. +bool VerifyFileCharset(const wxTextFile& f, const wxString& filename, + const wxString& charset) +{ + wxTextFile f2; + + if (!f2.Open(filename, wxConvISO8859_1)) + return false; + + if (f.GetLineCount() != f2.GetLineCount()) + { + int linesCount = (int)f2.GetLineCount() - (int)f.GetLineCount(); + wxLogError(wxPLURAL("%i line of file '%s' was not loaded correctly.", + "%i lines of file '%s' were not loaded correctly.", + linesCount), + linesCount, + filename.c_str()); + return false; + } + + bool ok = true; + size_t cnt = f.GetLineCount(); + for (size_t i = 0; i < cnt; i++) + { + if (f[i].empty() && !f2[i].empty()) // wxMBConv conversion failed + { + wxLogError( + _("Line %d of file '%s' is corrupted (not valid %s data)."), + int(i), filename.c_str(), charset.c_str()); + ok = false; + } + } + + return ok; +} + + +wxTextFileType GetFileCRLFFormat(wxTextFile& po_file) +{ + wxLogNull null; + auto crlf = po_file.GuessType(); + + // Discard any unsupported setting. In particular, we ignore "Mac" + // line endings, because the ancient OS 9 systems aren't used anymore, + // OSX uses Unix ending *and* "Mac" endings break gettext tools. So if + // we encounter a catalog with "Mac" line endings, we silently convert + // it into Unix endings (i.e. the modern Mac). + if (crlf == wxTextFileType_Mac) + crlf = wxTextFileType_Unix; + if (crlf != wxTextFileType_Dos && crlf != wxTextFileType_Unix) + crlf = wxTextFileType_None; + return crlf; +} + +wxTextFileType GetDesiredCRLFFormat(wxTextFileType existingCRLF) +{ + if (existingCRLF != wxTextFileType_None && wxConfigBase::Get()->ReadBool("keep_crlf", true)) + { + return existingCRLF; + } + else + { + wxString format = wxConfigBase::Get()->Read("crlf_format", "unix"); + if (format == "win") + return wxTextFileType_Dos; + else /* "unix" or obsolete settings */ + return wxTextFileType_Unix; + } +} + +// Fixup some common issues with filepaths in PO files, due to old Poedit versions, +// user misunderstanding or Poedit bugs: +wxString FixBrokenSearchPathValue(wxString p) +{ + if (p.empty()) + return p; + // no DOS paths please: + p.Replace("\\", "/"); + if (p.Last() == '/') + p.RemoveLast(); + return p; +} + +} // anonymous namespace + + +// ---------------------------------------------------------------------- +// Catalog::HeaderData +// ---------------------------------------------------------------------- + +void Catalog::HeaderData::FromString(const wxString& str) +{ + wxStringTokenizer tkn(str, "\n"); + wxString ln; + + m_entries.clear(); + + while (tkn.HasMoreTokens()) + { + ln = tkn.GetNextToken(); + size_t pos = ln.find(_T(':')); + if (pos == wxString::npos) + { + wxLogError(_("Malformed header: '%s'"), ln.c_str()); + } + else + { + Entry en; + en.Key = wxString(ln.substr(0, pos)).Strip(wxString::both); + en.Value = wxString(ln.substr(pos + 1)).Strip(wxString::both); + + m_entries.push_back(en); + wxLogTrace("poedit.header", + "%s='%s'", en.Key.c_str(), en.Value.c_str()); + } + } + + ParseDict(); +} + +wxString Catalog::HeaderData::ToString(const wxString& line_delim) +{ + UpdateDict(); + + wxString hdr; + for (auto& e: m_entries) + { + hdr << EscapeCString(e.Key) << ": " << EscapeCString(e.Value) << "\\n" << line_delim; + } + return hdr; +} + +void Catalog::HeaderData::UpdateDict() +{ + SetHeader("Project-Id-Version", Project); + SetHeader("POT-Creation-Date", CreationDate); + SetHeader("PO-Revision-Date", RevisionDate); + + if (TranslatorEmail.empty()) + { + if (!Translator.empty() || !HasHeader("Last-Translator")) + SetHeader("Last-Translator", Translator); + // else: don't modify the header, leave as-is + } + else + { + if (Translator.empty()) + SetHeader("Last-Translator", TranslatorEmail); + else + SetHeader("Last-Translator", Translator + " <" + TranslatorEmail + ">"); + } + + if (TeamEmail.empty()) + { + SetHeader("Language-Team", Team); + } + else + { + if (Team.empty()) + SetHeader("Language-Team", TeamEmail); + else + SetHeader("Language-Team", Team + " <" + TeamEmail + ">"); + } + + SetHeader("MIME-Version", "1.0"); + SetHeader("Content-Type", "text/plain; charset=" + Charset); + SetHeader("Content-Transfer-Encoding", "8bit"); + SetHeaderNotEmpty("Language", Lang.Code()); + SetHeader("X-Generator", wxString::FromAscii("Poedit " POEDIT_VERSION)); + + // Set extended information: + + SetHeaderNotEmpty("X-Poedit-SourceCharset", SourceCodeCharset); + + if (!Keywords.empty()) + { + wxString kw; + for (size_t i = 0; i < Keywords.GetCount(); i++) + kw += Keywords[i] + _T(';'); + kw.RemoveLast(); + SetHeader("X-Poedit-KeywordsList", kw); + } + + unsigned i; + bool noBookmarkSet = true; + wxString bk; + for (i = 0; i < BOOKMARK_LAST ; i++) + { + noBookmarkSet = noBookmarkSet && (Bookmarks[i] == NO_BOOKMARK); + bk += wxString() << Bookmarks[i] << _T(','); + } + bk.RemoveLast(); + if (noBookmarkSet) + DeleteHeader("X-Poedit-Bookmarks"); + else + SetHeader("X-Poedit-Bookmarks", bk); + + SetHeaderNotEmpty("X-Poedit-Basepath", BasePath); + + i = 0; + while (true) + { + wxString path; + path.Printf("X-Poedit-SearchPath-%i", i); + if (!HasHeader(path)) + break; + DeleteHeader(path); + i++; + } + + i = 0; + while (true) + { + wxString path; + path.Printf("X-Poedit-SearchPathExcluded-%i", i); + if (!HasHeader(path)) + break; + DeleteHeader(path); + i++; + } + + for (i = 0; i < SearchPaths.size(); i++) + { + wxString path; + path.Printf("X-Poedit-SearchPath-%i", i); + SetHeader(path, SearchPaths[i]); + } + + for (i = 0; i < SearchPathsExcluded.size(); i++) + { + wxString path; + path.Printf("X-Poedit-SearchPathExcluded-%i", i); + SetHeader(path, SearchPathsExcluded[i]); + } +} + +void Catalog::HeaderData::ParseDict() +{ + wxString dummy; + + Project = GetHeader("Project-Id-Version"); + CreationDate = GetHeader("POT-Creation-Date"); + RevisionDate = GetHeader("PO-Revision-Date"); + + dummy = GetHeader("Last-Translator"); + if (!dummy.empty()) + { + wxStringTokenizer tkn(dummy, "<>"); + if (tkn.CountTokens() != 2) + { + Translator = dummy; + TranslatorEmail = wxEmptyString; + } + else + { + Translator = tkn.GetNextToken().Strip(wxString::trailing); + TranslatorEmail = tkn.GetNextToken(); + } + } + + dummy = GetHeader("Language-Team"); + if (!dummy.empty()) + { + wxStringTokenizer tkn(dummy, "<>"); + if (tkn.CountTokens() != 2) + { + Team = dummy; + TeamEmail = wxEmptyString; + } + else + { + Team = tkn.GetNextToken().Strip(wxString::trailing); + TeamEmail = tkn.GetNextToken(); + } + } + + wxString ctype = GetHeader("Content-Type"); + int charsetPos = ctype.Find("; charset="); + if (charsetPos != -1) + { + Charset = + ctype.Mid(charsetPos + strlen("; charset=")).Strip(wxString::both); + } + else + { + Charset = "iso-8859-1"; + } + + // Parse language information, with backwards compatibility with X-Poedit-*: + wxString languageCode = GetHeader("Language"); + if ( !languageCode.empty() ) + { + Lang = Language::TryParse(languageCode.ToStdWstring()); + } + else + { + wxString X_Language = GetHeader("X-Poedit-Language"); + wxString X_Country = GetHeader("X-Poedit-Country"); + if ( !X_Language.empty() ) + Lang = Language::FromLegacyNames(X_Language.ToStdString(), X_Country.ToStdString()); + } + + DeleteHeader("X-Poedit-Language"); + DeleteHeader("X-Poedit-Country"); + + // Parse extended information: + SourceCodeCharset = GetHeader("X-Poedit-SourceCharset"); + BasePath = FixBrokenSearchPathValue(GetHeader("X-Poedit-Basepath")); + + Keywords.Clear(); + wxString kwlist = GetHeader("X-Poedit-KeywordsList"); + if (!kwlist.empty()) + { + wxStringTokenizer tkn(kwlist, ";"); + while (tkn.HasMoreTokens()) + Keywords.Add(tkn.GetNextToken()); + } + else + { + // try backward-compatibility version X-Poedit-Keywords. The difference + // is the separator used, see + // http://sourceforge.net/tracker/index.php?func=detail&aid=1206579&group_id=27043&atid=389153 + + wxString kw = GetHeader("X-Poedit-Keywords"); + if (!kw.empty()) + { + wxStringTokenizer tkn(kw, ","); + while (tkn.HasMoreTokens()) + Keywords.Add(tkn.GetNextToken()); + + // and remove it, it's not for newer versions: + DeleteHeader("X-Poedit-Keywords"); + } + } + + int i; + for(i = 0; i < BOOKMARK_LAST; i++) + { + Bookmarks[i] = NO_BOOKMARK; + } + wxString bk = GetHeader("X-Poedit-Bookmarks"); + if (!bk.empty()) + { + wxStringTokenizer tkn(bk, ","); + i=0; + long int val; + while (tkn.HasMoreTokens() && iValue; + else + return wxEmptyString; +} + +bool Catalog::HeaderData::HasHeader(const wxString& key) const +{ + return Find(key) != NULL; +} + +void Catalog::HeaderData::SetHeader(const wxString& key, const wxString& value) +{ + Entry *e = (Entry*) Find(key); + if (e) + { + e->Value = value; + } + else + { + Entry en; + en.Key = key; + en.Value = value; + m_entries.push_back(en); + } +} + +void Catalog::HeaderData::SetHeaderNotEmpty(const wxString& key, + const wxString& value) +{ + if (value.empty()) + DeleteHeader(key); + else + SetHeader(key, value); +} + +void Catalog::HeaderData::DeleteHeader(const wxString& key) +{ + if (HasHeader(key)) + { + Entries enew; + + for (Entries::const_iterator i = m_entries.begin(); + i != m_entries.end(); i++) + { + if (i->Key != key) + enew.push_back(*i); + } + + m_entries = enew; + } +} + +const Catalog::HeaderData::Entry * +Catalog::HeaderData::Find(const wxString& key) const +{ + size_t size = m_entries.size(); + for (size_t i = 0; i < size; i++) + { + if (m_entries[i].Key == key) + return &(m_entries[i]); + } + return NULL; +} + + +// ---------------------------------------------------------------------- +// Parsers +// ---------------------------------------------------------------------- + +bool CatalogParser::Parse() +{ + if (m_textFile->GetLineCount() == 0) + return false; + + wxString line, dummy; + wxString mflags, mstr, msgid_plural, mcomment; + wxArrayString mrefs, mextractedcomments, mtranslations; + wxArrayString msgid_old; + bool has_plural = false; + bool has_context = false; + wxString msgctxt; + unsigned mlinenum = 0; + + line = m_textFile->GetFirstLine(); + if (line.empty()) line = ReadTextLine(); + + while (!line.empty()) + { + // ignore empty special tags (except for extracted comments which we + // DO want to preserve): + while (line == "#," || line == "#:" || line == "#|") + line = ReadTextLine(); + + // flags: + // Can't we have more than one flag, now only the last is kept ... + if (ReadParam(line, "#, ", dummy)) + { + mflags = "#, " + dummy; + line = ReadTextLine(); + } + + // auto comments: + if (ReadParam(line, "#. ", dummy) || ReadParam(line, "#.", dummy)) // second one to account for empty auto comments + { + mextractedcomments.Add(dummy); + line = ReadTextLine(); + } + + // references: + else if (ReadParam(line, "#: ", dummy)) + { + // Just store the references unmodified, we don't modify this + // data anywhere. + mrefs.push_back(dummy); + line = ReadTextLine(); + } + + // previous msgid value: + else if (ReadParam(line, "#| ", dummy)) + { + msgid_old.Add(dummy); + line = ReadTextLine(); + } + + // msgctxt: + else if (ReadParam(line, _T("msgctxt \""), dummy)) + { + has_context = true; + msgctxt = UnescapeCString(dummy.RemoveLast()); + while (!(line = ReadTextLine()).empty()) + { + if (line[0u] == _T('\t')) + line.Remove(0, 1); + if (line[0u] == _T('"') && line.Last() == _T('"')) + { + msgctxt += UnescapeCString(line.Mid(1, line.Length() - 2)); + PossibleWrappedLine(); + } + else + break; + } + } + + // msgid: + else if (ReadParam(line, _T("msgid \""), dummy)) + { + mstr = UnescapeCString(dummy.RemoveLast()); + mlinenum = unsigned(m_textFile->GetCurrentLine() + 1); + while (!(line = ReadTextLine()).empty()) + { + if (line[0u] == _T('\t')) + line.Remove(0, 1); + if (line[0u] == _T('"') && line.Last() == _T('"')) + { + mstr += UnescapeCString(line.Mid(1, line.Length() - 2)); + PossibleWrappedLine(); + } + else + break; + } + } + + // msgid_plural: + else if (ReadParam(line, _T("msgid_plural \""), dummy)) + { + msgid_plural = UnescapeCString(dummy.RemoveLast()); + has_plural = true; + mlinenum = unsigned(m_textFile->GetCurrentLine() + 1); + while (!(line = ReadTextLine()).empty()) + { + if (line[0u] == _T('\t')) + line.Remove(0, 1); + if (line[0u] == _T('"') && line.Last() == _T('"')) + { + msgid_plural += UnescapeCString(line.Mid(1, line.Length() - 2)); + PossibleWrappedLine(); + } + else + break; + } + } + + // msgstr: + else if (ReadParam(line, _T("msgstr \""), dummy)) + { + if (has_plural) + { + wxLogError(_("Broken catalog file: singular form msgstr used together with msgid_plural")); + return false; + } + + wxString str = UnescapeCString(dummy.RemoveLast()); + while (!(line = ReadTextLine()).empty()) + { + if (line[0u] == _T('\t')) + line.Remove(0, 1); + if (line[0u] == _T('"') && line.Last() == _T('"')) + { + str += UnescapeCString(line.Mid(1, line.Length() - 2)); + PossibleWrappedLine(); + } + else + break; + } + mtranslations.Add(str); + + bool shouldIgnore = m_ignoreHeader && (mstr.empty() && !has_context); + if ( shouldIgnore ) + { + OnIgnoredEntry(); + } + else + { + if (!mstr.empty() && m_ignoreTranslations) + mtranslations.clear(); + + if (!OnEntry(mstr, wxEmptyString, false, + has_context, msgctxt, + mtranslations, + mflags, mrefs, mcomment, mextractedcomments, msgid_old, + mlinenum)) + { + return false; + } + } + + mcomment = mstr = msgid_plural = msgctxt = mflags = wxEmptyString; + has_plural = has_context = false; + mrefs.Clear(); + mextractedcomments.Clear(); + mtranslations.Clear(); + msgid_old.Clear(); + } + + // msgstr[i]: + else if (ReadParam(line, "msgstr[", dummy)) + { + if (!has_plural) + { + wxLogError(_("Broken catalog file: plural form msgstr used without msgid_plural")); + return false; + } + + wxString idx = dummy.BeforeFirst(_T(']')); + wxString label = "msgstr[" + idx + "]"; + + while (ReadParam(line, label + _T(" \""), dummy)) + { + wxString str = UnescapeCString(dummy.RemoveLast()); + + while (!(line=ReadTextLine()).empty()) + { + line.Trim(/*fromRight=*/false); + if (line[0u] == _T('"') && line.Last() == _T('"')) + { + str += UnescapeCString(line.Mid(1, line.Length() - 2)); + PossibleWrappedLine(); + } + else + { + if (ReadParam(line, "msgstr[", dummy)) + { + idx = dummy.BeforeFirst(_T(']')); + label = "msgstr[" + idx + "]"; + } + break; + } + } + mtranslations.Add(str); + } + + if (!OnEntry(mstr, msgid_plural, true, + has_context, msgctxt, + mtranslations, + mflags, mrefs, mcomment, mextractedcomments, msgid_old, + mlinenum)) + { + return false; + } + + mcomment = mstr = msgid_plural = msgctxt = mflags = wxEmptyString; + has_plural = has_context = false; + mrefs.Clear(); + mextractedcomments.Clear(); + mtranslations.Clear(); + msgid_old.Clear(); + } + + // deleted lines: + else if (ReadParam(line, "#~", dummy)) + { + wxArrayString deletedLines; + deletedLines.Add(line); + mlinenum = unsigned(m_textFile->GetCurrentLine() + 1); + while (!(line = ReadTextLine()).empty()) + { + // if line does not start with "#~" anymore, stop reading + if (!ReadParam(line, "#~", dummy)) + break; + // if the line starts with "#~ msgid", we skipped an empty line + // and it's a new entry, so stop reading too (see bug #329) + if (ReadParam(line, "#~ msgid", dummy)) + break; + + deletedLines.Add(line); + } + if (!OnDeletedEntry(deletedLines, + mflags, mrefs, mcomment, mextractedcomments, mlinenum)) + { + return false; + } + + mcomment = mstr = msgid_plural = mflags = wxEmptyString; + has_plural = false; + mrefs.Clear(); + mextractedcomments.Clear(); + mtranslations.Clear(); + msgid_old.Clear(); + } + + // comment: + else if (line[0u] == _T('#')) + { + bool readNewLine = false; + + while (!line.empty() && + line[0u] == _T('#') && + (line.Length() < 2 || (line[1u] != _T(',') && line[1u] != _T(':') && line[1u] != _T('.') && line[1u] != _T('~') ))) + { + mcomment << line << _T('\n'); + readNewLine = true; + line = ReadTextLine(); + } + + if (!readNewLine) + line = ReadTextLine(); + } + + else + { + line = ReadTextLine(); + } + } + + return true; +} + + +wxString CatalogParser::ReadTextLine() +{ + m_previousLineHardWrapped = m_lastLineHardWrapped; + m_lastLineHardWrapped = false; + + wxString s; + + while (s.empty()) + { + if (m_textFile->Eof()) + return wxEmptyString; + + // read next line and strip insignificant whitespace from it: + auto ln = m_textFile->GetNextLine(); + + // gettext tools don't include (extracted) comments in wrapping, so they can't + // be reliably used to detect file's wrapping either; just skip them. + if (!ln.StartsWith(wxS("#. ")) && !ln.StartsWith(wxS("# "))) + { + if (ln.EndsWith(wxS("\\n\""))) + { + // Similarly, lines ending with \n are always wrapped, so skip that too. + m_lastLineHardWrapped = true; + } + else if (ln == "msgid \"\"" || ln == "msgstr \"\"") + { + // The header is always indented like this + m_lastLineHardWrapped = true; + } + else + { + // Watch out for lines with too long words that couldn't be wrapped. + // That "2" is to account for unwrappable comment lines: "#: somethinglong" + // See https://github.com/vslavik/poedit/issues/135 + auto space = ln.find_last_of(' '); + if (space != wxString::npos && space > 2) + { + m_detectedLineWidth = std::max(m_detectedLineWidth, (int)ln.size()); + } + } + } + + s = ln.Strip(wxString::both); + } + + return s; +} + +int CatalogParser::GetWrappingWidth() const +{ + if (!m_detectedWrappedLines) + return Catalog::NO_WRAPPING; + + return m_detectedLineWidth; +} + + + +class CharsetInfoFinder : public CatalogParser +{ + public: + CharsetInfoFinder(wxTextFile *f) + : CatalogParser(f), m_charset("iso-8859-1") {} + wxString GetCharset() const { return m_charset; } + + protected: + wxString m_charset; + + virtual bool OnEntry(const wxString& msgid, + const wxString& /*msgid_plural*/, + bool /*has_plural*/, + bool has_context, + const wxString& /*context*/, + const wxArrayString& mtranslations, + const wxString& /*flags*/, + const wxArrayString& /*references*/, + const wxString& /*comment*/, + const wxArrayString& /*extractedComments*/, + const wxArrayString& /*msgid_old*/, + unsigned /*lineNumber*/) + { + if (msgid.empty() && !has_context) + { + // gettext header: + Catalog::HeaderData hdr; + hdr.FromString(mtranslations[0]); + m_charset = hdr.Charset; + if (m_charset == "CHARSET") + m_charset = "iso-8859-1"; + return false; // stop parsing + } + return true; + } +}; + + + +class LoadParser : public CatalogParser +{ + public: + LoadParser(Catalog& c, wxTextFile *f) + : CatalogParser(f), + FileIsValid(false), + m_catalog(c), m_nextId(1), m_seenHeaderAlready(false), m_collectMsgidText(true) {} + + // true if the file is valid, i.e. has at least some data + bool FileIsValid; + + Language GetMsgidLanguage() + { + auto x_srclang = m_catalog.m_header.GetHeader("X-Source-Language"); + if (!x_srclang.empty()) + { + return Language::TryParse(str::to_utf8(x_srclang)); + } + else + { + auto utf8 = m_allMsgidText.utf8_str(); + return Language::TryDetectFromText(utf8.data(), utf8.length(), Language::English()); + } + } + + protected: + Catalog& m_catalog; + + virtual bool OnEntry(const wxString& msgid, + const wxString& msgid_plural, + bool has_plural, + bool has_context, + const wxString& context, + const wxArrayString& mtranslations, + const wxString& flags, + const wxArrayString& references, + const wxString& comment, + const wxArrayString& extractedComments, + const wxArrayString& msgid_old, + unsigned lineNumber); + + virtual bool OnDeletedEntry(const wxArrayString& deletedLines, + const wxString& flags, + const wxArrayString& references, + const wxString& comment, + const wxArrayString& extractedComments, + unsigned lineNumber); + + virtual void OnIgnoredEntry() { FileIsValid = true; } + + private: + int m_nextId; + bool m_seenHeaderAlready; + + // collected text of msgids, with newlines, for language detection + bool m_collectMsgidText; + wxString m_allMsgidText; +}; + + +bool LoadParser::OnEntry(const wxString& msgid, + const wxString& msgid_plural, + bool has_plural, + bool has_context, + const wxString& context, + const wxArrayString& mtranslations, + const wxString& flags, + const wxArrayString& references, + const wxString& comment, + const wxArrayString& extractedComments, + const wxArrayString& msgid_old, + unsigned lineNumber) +{ + FileIsValid = true; + + static const wxString MSGCAT_CONFLICT_MARKER("#-#-#-#-#"); + + if (msgid.empty() && !has_context) + { + if (!m_seenHeaderAlready) + { + // gettext header: + m_catalog.m_header.FromString(mtranslations[0]); + m_catalog.m_header.Comment = comment; + m_collectMsgidText = m_catalog.m_header.GetHeader("X-Source-Language").empty(); + m_seenHeaderAlready = true; + } + // else: ignore duplicate header in malformed files + } + else + { + CatalogItemPtr d = std::make_shared(); + d->SetId(m_nextId++); + if (!flags.empty()) + d->SetFlags(flags); + d->SetString(msgid); + if (has_plural) + d->SetPluralString(msgid_plural); + if (has_context) + d->SetContext(context); + d->SetTranslations(mtranslations); + d->SetComment(comment); + d->SetLineNumber(lineNumber); + for (size_t i = 0; i < references.GetCount(); i++) + d->AddReference(references[i]); + + for (auto i: extractedComments) + { + // Sometimes, msgcat produces conflicts in extracted comments; see the gory details: + // https://groups.google.com/d/topic/poedit/j41KuvXtVUU/discussion + // As a workaround, just filter them out. + // FIXME: Fix this properly... but not using msgcat in the first place + if (i.StartsWith(MSGCAT_CONFLICT_MARKER) && i.EndsWith(MSGCAT_CONFLICT_MARKER)) + continue; + d->AddExtractedComments(i); + } + d->SetOldMsgid(msgid_old); + m_catalog.AddItem(d); + + // collect text for language detection: + if (m_collectMsgidText) + { + m_allMsgidText.append(msgid); + m_allMsgidText.append('\n'); + if (!msgid_plural.empty()) + { + m_allMsgidText.append(msgid_plural); + m_allMsgidText.append('\n'); + } + } + } + return true; +} + +bool LoadParser::OnDeletedEntry(const wxArrayString& deletedLines, + const wxString& flags, + const wxArrayString& /*references*/, + const wxString& comment, + const wxArrayString& extractedComments, + unsigned lineNumber) +{ + FileIsValid = true; + + CatalogDeletedData d; + if (!flags.empty()) d.SetFlags(flags); + d.SetDeletedLines(deletedLines); + d.SetComment(comment); + d.SetLineNumber(lineNumber); + for (size_t i = 0; i < extractedComments.GetCount(); i++) + d.AddExtractedComments(extractedComments[i]); + m_catalog.AddDeletedItem(d); + + return true; +} + + + +// ---------------------------------------------------------------------- +// Catalog class +// ---------------------------------------------------------------------- + +Catalog::Catalog(Type type) +{ + m_sourceLanguage = Language::English(); + m_fileType = type; + + m_fileCRLF = wxTextFileType_None; + m_fileWrappingWidth = DEFAULT_WRAPPING; + + m_isOk = true; + m_header.BasePath = wxEmptyString; + for(int i = BOOKMARK_0; i < BOOKMARK_LAST; i++) + { + m_header.Bookmarks[i] = -1; + } +} + +Catalog::Catalog(const wxString& po_file, int flags) +{ + m_sourceLanguage = Language::English(); + m_fileType = Type::PO; + + m_fileCRLF = wxTextFileType_None; + m_fileWrappingWidth = DEFAULT_WRAPPING; + + m_isOk = Load(po_file, flags); +} + +Catalog::~Catalog() +{ + Clear(); +} + + +bool Catalog::HasCapability(Catalog::Cap cap) const +{ + switch (cap) + { + case Cap::Translations: + case Cap::LanguageSetting: + case Cap::UserComments: + return m_fileType == Type::PO; + } + return false; // silence VC++ warning +} + + +static inline wxString GetCurrentTimeString() +{ + return wxDateTime::Now().Format("%Y-%m-%d %H:%M%z"); +} + +void Catalog::CreateNewHeader() +{ + HeaderData &dt = Header(); + + dt.CreationDate = GetCurrentTimeString(); + dt.RevisionDate = dt.CreationDate; + + dt.Lang = Language(); + if (m_fileType == Type::POT) + dt.SetHeader("Plural-Forms", "nplurals=INTEGER; plural=EXPRESSION;"); // default invalid value + + dt.Project = wxEmptyString; + dt.Team = wxEmptyString; + dt.TeamEmail = wxEmptyString; + dt.Charset = "UTF-8"; + dt.Translator = wxConfig::Get()->Read("translator_name", wxEmptyString); + dt.TranslatorEmail = wxConfig::Get()->Read("translator_email", wxEmptyString); + dt.SourceCodeCharset = wxEmptyString; + + dt.BasePath = "."; + + dt.UpdateDict(); +} + +void Catalog::CreateNewHeader(const Catalog::HeaderData& pot_header) +{ + HeaderData &dt = Header(); + dt = pot_header; + + // UTF-8 should be used by default no matter what the POT uses + dt.Charset = "UTF-8"; + + // clear the fields that are translation-specific: + dt.Lang = Language(); + if (dt.Team == "LANGUAGE") + dt.Team.clear(); + if (dt.TeamEmail == "LL@li.org") + dt.TeamEmail.clear(); + + // translator should be pre-filled & not the default "FULL NAME " + dt.DeleteHeader("Last-Translator"); + dt.Translator = wxConfig::Get()->Read("translator_name", wxEmptyString); + dt.TranslatorEmail = wxConfig::Get()->Read("translator_email", wxEmptyString); + + dt.UpdateDict(); +} + + +bool Catalog::Load(const wxString& po_file, int flags) +{ + wxTextFile f; + + Clear(); + m_isOk = false; + m_fileName = po_file; + m_header.BasePath = wxEmptyString; + + wxString ext; + wxFileName::SplitPath(po_file, nullptr, nullptr, &ext); + if (ext.CmpNoCase("pot") == 0) + m_fileType = Type::POT; + else + m_fileType = Type::PO; + + /* Load the .po file: */ + + if (!f.Open(po_file, wxConvISO8859_1)) + return false; + + { + wxLogNull null; // don't report parsing errors from here, report them later + CharsetInfoFinder charsetFinder(&f); + charsetFinder.Parse(); + m_header.Charset = charsetFinder.GetCharset(); + } + + f.Close(); + wxCSConv encConv(m_header.Charset); + if (!f.Open(po_file, encConv)) + return false; + + if (!VerifyFileCharset(f, po_file, m_header.Charset)) + { + wxLogError(_("There were errors when loading the catalog. Some data may be missing or corrupted as the result.")); + } + + LoadParser parser(*this, &f); + parser.IgnoreHeader(flags & CreationFlag_IgnoreHeader); + parser.IgnoreTranslations(flags & CreationFlag_IgnoreTranslations); + if (!parser.Parse()) + { + wxLogError( + wxString::Format( + _("Couldn't load file %s, it is probably corrupted."), + po_file.c_str())); + return false; + } + + m_sourceLanguage = parser.GetMsgidLanguage(); + + // now that the catalog is loaded, update its items with the bookmarks + for (unsigned i = BOOKMARK_0; i < BOOKMARK_LAST; i++) + { + if (m_header.Bookmarks[i] != -1 && + m_header.Bookmarks[i] < (int)m_items.size()) + { + m_items[m_header.Bookmarks[i]]->SetBookmark( + static_cast(i)); + } + } + + m_fileCRLF = GetFileCRLFFormat(f); + m_fileWrappingWidth = parser.GetWrappingWidth(); + wxLogTrace("poedit", "detect line wrapping: %d", m_fileWrappingWidth); + + // If we didn't find any entries, the file must be invalid: + if (!parser.FileIsValid) + return false; + + m_isOk = true; + + f.Close(); + + FixupCommonIssues(); + + if ( flags & CreationFlag_IgnoreHeader ) + CreateNewHeader(); + + return true; +} + + +void Catalog::FixupCommonIssues() +{ + if (m_header.Project == "PACKAGE VERSION") + m_header.Project.clear(); + + // All the following fixups are specific to POs and should *not* be done in POTs: + if (m_fileType == Type::POT) + return; + + if (!m_header.Lang.IsValid()) + { + if (!m_fileName.empty()) + { + m_header.Lang = Language::TryGuessFromFilename(m_fileName); + wxLogTrace("poedit", "guessed language from filename '%s': %s", m_fileName, m_header.Lang.Code()); + } + + if (!m_header.Lang.IsValid()) + { + // If all else fails, try to detect the language from content + wxString allText; + for (auto& i: items()) + { + for (auto& s: i->GetTranslations()) + { + if (s.empty()) + continue; + allText.append(s); + allText.append('\n'); + } + } + if (!allText.empty()) + { + auto utf8 = allText.utf8_str(); + m_header.Lang = Language::TryDetectFromText(utf8.data(), utf8.length()); + } + } + } + + wxLogTrace("poedit", "catalog lang is '%s'", GetLanguage().Code()); + + if (m_header.GetHeader("Language-Team") == "LANGUAGE ") + { + m_header.DeleteHeader("Language-Team"); + m_header.Team.clear(); + m_header.TeamEmail.clear(); + } + + if (m_header.GetHeader("Last-Translator") == "FULL NAME ") + { + m_header.DeleteHeader("Last-Translator"); + m_header.Translator.clear(); + m_header.TranslatorEmail.clear(); + } + + wxString pluralForms = m_header.GetHeader("Plural-Forms"); + + if (pluralForms == "nplurals=INTEGER; plural=EXPRESSION;") // default invalid value + pluralForms = ""; + + if (!pluralForms.empty()) + { + if (!pluralForms.EndsWith(";")) + { + pluralForms += ";"; + m_header.SetHeader("Plural-Forms", pluralForms); + } + } + else + { + // Auto-fill default plural form if it is missing: + if (m_header.Lang.IsValid() && HasPluralItems()) + { + pluralForms = m_header.Lang.DefaultPluralFormsExpr(); + if (!pluralForms.empty()) + m_header.SetHeader("Plural-Forms", pluralForms); + } + } + + // TODO: mark catalog as modified if any changes were made +} + +void Catalog::AddItem(const CatalogItemPtr& data) +{ + m_items.push_back(data); +} + +void Catalog::AddDeletedItem(const CatalogDeletedData& data) +{ + m_deletedItems.push_back(data); +} + +bool Catalog::HasDeletedItems() +{ + return !m_deletedItems.empty(); +} + +void Catalog::RemoveDeletedItems() +{ + m_deletedItems.clear(); +} + +CatalogItemPtr Catalog::FindItemByLine(int lineno) +{ + CatalogItemPtr last; + + for (auto& i: m_items) + { + if ( i->GetLineNumber() > lineno ) + return last; + last = i; + } + + return last; +} + +void Catalog::Clear() +{ + m_items.clear(); + m_deletedItems.clear(); + m_isOk = true; + for(int i = BOOKMARK_0; i < BOOKMARK_LAST; i++) + { + m_header.Bookmarks[i] = -1; + } +} + +int Catalog::SetBookmark(int id, Bookmark bookmark) +{ + int result = (bookmark==NO_BOOKMARK)?-1:m_header.Bookmarks[bookmark]; + + // unset previous bookmarks, if any + Bookmark bk = m_items[id]->GetBookmark(); + if (bk != NO_BOOKMARK) + m_header.Bookmarks[bk] = -1; + if (result > -1) + m_items[result]->SetBookmark(NO_BOOKMARK); + + // set new bookmark + m_items[id]->SetBookmark(bookmark); + if (bookmark != NO_BOOKMARK) + m_header.Bookmarks[bookmark] = id; + + // return id of previous item for that bookmark + return result; +} + + +// misc file-saving helpers +namespace +{ + +inline bool CanEncodeStringToCharset(const wxString& s, wxMBConv& conv) +{ + if (s.empty()) + return true; + const wxCharBuffer converted(s.mb_str(conv)); + if ( converted.length() == 0 ) + return false; + return true; +} + +bool CanEncodeToCharset(const wxTextBuffer& f, const wxString& charset) +{ + if (charset.Lower() == "utf-8" || charset.Lower() == "utf8") + return true; + + wxCSConv conv(charset); + + const size_t lines = f.GetLineCount(); + for ( size_t i = 0; i < lines; i++ ) + { + if ( !CanEncodeStringToCharset(f.GetLine(i), conv) ) + return false; + } + + return true; +} + + +void SaveMultiLines(wxTextBuffer &f, const wxString& text) +{ + wxStringTokenizer tkn(text, _T('\n')); + while (tkn.HasMoreTokens()) + f.AddLine(tkn.GetNextToken()); +} + +/** Adds \n characters as necessary for good-looking output + */ +wxString FormatStringForFile(const wxString& text) +{ + wxString s; + s.reserve(text.length() + 16); + + wxStringTokenizer tkn(text, wxS('\n'), wxTOKEN_RET_EMPTY_ALL); + while (tkn.HasMoreTokens()) + { + if (!s.empty()) + s += wxS("\"\n\""); + auto piece = tkn.GetNextToken(); + if (tkn.GetLastDelimiter()) + piece += tkn.GetLastDelimiter(); + s += EscapeCString(piece); + } + + return s; +} + +} // anonymous namespace + + +#ifdef __WXOSX__ + +@interface CompiledMOFilePresenter : NSObject +@property (atomic, copy) NSURL *presentedItemURL; +@property (atomic, copy) NSURL *primaryPresentedItemURL; +@end + +@implementation CompiledMOFilePresenter +- (NSOperationQueue *)presentedItemOperationQueue { + return [NSOperationQueue mainQueue]; +} +@end + +#endif // __WXOSX__ + + +bool Catalog::Save(const wxString& po_file, bool save_mo, + int& validation_errors, CompilationStatus& mo_compilation_status) +{ + mo_compilation_status = CompilationStatus::NotDone; + + if ( wxFileExists(po_file) && !wxFile::Access(po_file, wxFile::write) ) + { + wxLogError(_("File '%s' is read-only and cannot be saved.\nPlease save it under different name."), + po_file.c_str()); + return false; + } + + TempOutputFileFor po_file_temp_obj(po_file); + const wxString po_file_temp = po_file_temp_obj.FileName(); + + wxTextFileType outputCrlf = GetDesiredCRLFFormat(m_fileCRLF); + // Save into Unix line endings first and only if Windows is required, + // reformat the file later. This is because msgcat cannot handle DOS + // input particularly well. + + if ( !DoSaveOnly(po_file_temp, wxTextFileType_Unix) ) + { + wxLogError(_("Couldn't save file %s."), po_file.c_str()); + return false; + } + + validation_errors = DoValidate(po_file_temp); + + // Now that the file was written, run msgcat to re-format it according + // to the usual format. This is a (barely) passable fix for #25 until + // proper preservation of formatting is implemented. + + int msgcat_ok = false; + { + int wrapping = DEFAULT_WRAPPING; + if (wxConfig::Get()->ReadBool("keep_crlf", true)) + wrapping = m_fileWrappingWidth; + + wxString wrappingFlag; + if (wrapping == DEFAULT_WRAPPING) + { + if (wxConfig::Get()->ReadBool("wrap_po_files", true)) + { + wrapping = (int)wxConfig::Get()->ReadLong("wrap_po_files_width", 79); + } + else + { + wrapping = NO_WRAPPING; + } + } + + if (wrapping == NO_WRAPPING) + wrappingFlag = " --no-wrap"; + else if (wrapping != DEFAULT_WRAPPING) + wrappingFlag.Printf(" --width=%d", wrapping); + + TempOutputFileFor po_file_temp2_obj(po_file_temp); + const wxString po_file_temp2 = po_file_temp2_obj.FileName(); + auto msgcatCmd = wxString::Format("msgcat --force-po%s -o %s %s", + wrappingFlag, + QuoteCmdlineArg(po_file_temp2), + QuoteCmdlineArg(po_file_temp)); + wxLogTrace("poedit", "formatting file with %s", msgcatCmd); + + // Ignore msgcat errors output (but not exit code), because it + // a) complains about things DoValidate() already complained above + // b) issues warnings about source-extraction things (e.g. using non-ASCII + // msgids) that, while correct, are not something a *translator* can + // do anything about. + wxLogNull null; + msgcat_ok = ExecuteGettext(msgcatCmd) && + wxFileExists(po_file_temp2); + + // msgcat always outputs Unix line endings, so we need to reformat the file + if (msgcat_ok && outputCrlf == wxTextFileType_Dos) + { + wxTextFile finalFile(po_file_temp2); + if (finalFile.Open()) + finalFile.Write(outputCrlf); + } + + if (!TempOutputFileFor::ReplaceFile(po_file_temp2, po_file)) + msgcat_ok = false; + } + + if ( msgcat_ok ) + { + wxRemoveFile(po_file_temp); + } + else + { + if ( !po_file_temp_obj.Commit() ) + { + wxLogError(_("Couldn't save file %s."), po_file.c_str()); + } + else + { + // Only shows msgcat's failure warning if we don't also get + // validation errors, because if we do, the cause is likely the + // same. + if ( !validation_errors ) + { + wxLogWarning(_("There was a problem formatting the file nicely (but it was saved all right).")); + } + } + } + + + /* If the user wants it, compile .mo file right now: */ + + if (m_fileType == Type::PO && save_mo && wxConfig::Get()->Read("compile_mo", (long)true)) + { + const wxString mo_file = wxFileName::StripExtension(po_file) + ".mo"; + TempOutputFileFor mo_file_temp_obj(mo_file); + const wxString mo_file_temp = mo_file_temp_obj.FileName(); + + { + // Ignore msgfmt errors output (but not exit code), because it + // complains about things DoValidate() already complained above. + wxLogNull null; + + if ( ExecuteGettext + ( + wxString::Format("msgfmt -o %s %s", + QuoteCmdlineArg(mo_file_temp), + QuoteCmdlineArg(CliSafeFileName(po_file))) + ) ) + { + mo_compilation_status = CompilationStatus::Success; + } + else + { + // Don't report errors, they were reported as part of validation + // step above. Notice that we run msgfmt *without* the -c flag + // here to create the MO file in as many cases as possible, even if + // it has some errors. + // + // Still, msgfmt has the ugly habit of sometimes returning non-zero + // exit code, reporting "fatal errors" and *still* producing a usable + // .mo file. If this happens, don't pretend the file wasn't created. + if (wxFileName::FileExists(mo_file_temp)) + mo_compilation_status = CompilationStatus::Success; + else + mo_compilation_status = CompilationStatus::Error; + } + } + + // Move the MO from temporary location to the final one, if it was created + if (mo_compilation_status == CompilationStatus::Success) + { +#ifdef __WXOSX__ + NSURL *mofileUrl = [NSURL fileURLWithPath:str::to_NS(mo_file)]; + NSURL *mofiletempUrl = [NSURL fileURLWithPath:str::to_NS(mo_file_temp)]; + bool sandboxed = (getenv("APP_SANDBOX_CONTAINER_ID") != NULL); + CompiledMOFilePresenter *presenter = nil; + if (sandboxed) + { + presenter = [CompiledMOFilePresenter new]; + presenter.presentedItemURL = mofileUrl; + presenter.primaryPresentedItemURL = [NSURL fileURLWithPath:str::to_NS(po_file)]; + [NSFileCoordinator addFilePresenter:presenter]; + [NSFileCoordinator filePresenters]; + } + NSFileCoordinator *coo = [[NSFileCoordinator alloc] initWithFilePresenter:presenter]; + [coo coordinateWritingItemAtURL:mofileUrl options:NSFileCoordinatorWritingForReplacing error:nil byAccessor:^(NSURL *newURL) { + NSURL *resultingUrl; + BOOL ok = [[NSFileManager defaultManager] replaceItemAtURL:newURL + withItemAtURL:mofiletempUrl + backupItemName:nil + options:0 + resultingItemURL:&resultingUrl + error:nil]; + if (!ok) + { + wxLogError(_("Couldn't save file %s."), mo_file.c_str()); + mo_compilation_status = CompilationStatus::Error; + } + }]; + if (sandboxed) + { + [NSFileCoordinator removeFilePresenter:presenter]; + } +#else // !__WXOSX__ + if ( !mo_file_temp_obj.Commit() ) + { + wxLogError(_("Couldn't save file %s."), mo_file.c_str()); + mo_compilation_status = CompilationStatus::Error; + } +#endif // __WXOSX__/!__WXOSX__ + } + } + + m_fileName = po_file; + + return true; +} + + +std::string Catalog::SaveToBuffer() +{ + class StringSerializer : public wxMemoryText + { + public: + bool OnWrite(wxTextFileType typeNew, const wxMBConv& conv) override + { + size_t cnt = GetLineCount(); + for (size_t n = 0; n < cnt; n++) + { + auto ln = GetLine(n) + + GetEOL(typeNew == wxTextFileType_None ? GetLineType(n) : typeNew); + auto buf = ln.mb_str(conv); + buffer.append(buf.data(), buf.length()); + } + return true; + } + + std::string buffer; + }; + + StringSerializer f; + + if (!DoSaveOnly(f, wxTextFileType_Unix)) + return std::string(); + return f.buffer; +} + + +bool Catalog::CompileToMO(const wxString& mo_file, + int& validation_errors, + CompilationStatus& mo_compilation_status) +{ + mo_compilation_status = CompilationStatus::NotDone; + + TempDirectory tmpdir; + if ( !tmpdir.IsOk() ) + return false; + wxString po_file_temp = tmpdir.CreateFileName("output.po"); + + if ( !DoSaveOnly(po_file_temp, wxTextFileType_Unix) ) + { + wxLogError(_("Couldn't save file %s."), po_file_temp.c_str()); + return false; + } + + validation_errors = DoValidate(po_file_temp); + + TempOutputFileFor mo_file_temp_obj(mo_file); + const wxString mo_file_temp = mo_file_temp_obj.FileName(); + + { + // Ignore msgfmt errors output (but not exit code), because it + // complains about things DoValidate() already complained above. + wxLogNull null; + ExecuteGettext(wxString::Format("msgfmt -o %s %s", + QuoteCmdlineArg(mo_file_temp), + QuoteCmdlineArg(po_file_temp))); + } + + // Don't check return code: + // msgfmt has the ugly habit of sometimes returning non-zero + // exit code, reporting "fatal errors" and *still* producing a usable + // .mo file. If this happens, don't pretend the file wasn't created. + if (!wxFileName::FileExists(mo_file_temp)) + { + mo_compilation_status = CompilationStatus::Error; + return false; + } + else + { + mo_compilation_status = CompilationStatus::Success; + } + + if ( !mo_file_temp_obj.Commit() ) + { + wxLogError(_("Couldn't save file %s."), mo_file.c_str()); + return false; + } + + return true; +} + + + + +bool Catalog::DoSaveOnly(const wxString& po_file, wxTextFileType crlf) +{ + wxTextFile f; + if (!f.Create(po_file)) + return false; + + return DoSaveOnly(f, crlf); +} + +bool Catalog::DoSaveOnly(wxTextBuffer& f, wxTextFileType crlf) +{ + /* Save .po file: */ + if (!m_header.Charset || m_header.Charset == "CHARSET") + m_header.Charset = "UTF-8"; + + // Update information about last modification time. But if the header + // was empty previously, the author apparently doesn't want this header + // set, so don't mess with it. See https://sourceforge.net/tracker/?func=detail&atid=389156&aid=1900298&group_id=27043 + // for motivation: + auto currentTime = GetCurrentTimeString(); + switch (m_fileType) + { + case Type::PO: + if ( !m_header.RevisionDate.empty() ) + m_header.RevisionDate = currentTime; + break; + case Type::POT: + if ( m_fileType == Type::POT && !m_header.CreationDate.empty() ) + m_header.CreationDate = currentTime; + break; + } + + SaveMultiLines(f, m_header.Comment); + if (m_fileType == Type::POT) + f.AddLine("#, fuzzy"); + f.AddLine(_T("msgid \"\"")); + f.AddLine(_T("msgstr \"\"")); + wxString pohdr = wxString(_T("\"")) + m_header.ToString(_T("\"\n\"")); + pohdr.RemoveLast(); + SaveMultiLines(f, pohdr); + f.AddLine(wxEmptyString); + + auto pluralsCount = GetPluralFormsCount(); + + for (auto& data: m_items) + { + data->SetLineNumber(int(f.GetLineCount()+1)); + SaveMultiLines(f, data->GetComment()); + for (unsigned i = 0; i < data->GetExtractedComments().GetCount(); i++) + { + if (data->GetExtractedComments()[i].empty()) + f.AddLine("#."); + else + f.AddLine("#. " + data->GetExtractedComments()[i]); + } + for (unsigned i = 0; i < data->GetRawReferences().GetCount(); i++) + f.AddLine("#: " + data->GetRawReferences()[i]); + wxString dummy = data->GetFlags(); + if (!dummy.empty()) + f.AddLine(dummy); + for (unsigned i = 0; i < data->GetOldMsgidRaw().GetCount(); i++) + f.AddLine("#| " + data->GetOldMsgidRaw()[i]); + if ( data->HasContext() ) + { + SaveMultiLines(f, _T("msgctxt \"") + FormatStringForFile(data->GetContext()) + _T("\"")); + } + dummy = FormatStringForFile(data->GetString()); + SaveMultiLines(f, _T("msgid \"") + dummy + _T("\"")); + if (data->HasPlural()) + { + dummy = FormatStringForFile(data->GetPluralString()); + SaveMultiLines(f, _T("msgid_plural \"") + dummy + _T("\"")); + + for (unsigned i = 0; i < pluralsCount; i++) + { + dummy = FormatStringForFile(data->GetTranslation(i)); + wxString hdr = wxString::Format(_T("msgstr[%u] \""), i); + SaveMultiLines(f, hdr + dummy + _T("\"")); + } + } + else + { + dummy = FormatStringForFile(data->GetTranslation()); + SaveMultiLines(f, _T("msgstr \"") + dummy + _T("\"")); + } + f.AddLine(wxEmptyString); + } + + // Write back deleted items in the file so that they're not lost + for (unsigned itemIdx = 0; itemIdx < m_deletedItems.size(); itemIdx++) + { + if ( itemIdx != 0 ) + f.AddLine(wxEmptyString); + + CatalogDeletedData& deletedItem = m_deletedItems[itemIdx]; + deletedItem.SetLineNumber(int(f.GetLineCount()+1)); + SaveMultiLines(f, deletedItem.GetComment()); + for (unsigned i = 0; i < deletedItem.GetExtractedComments().GetCount(); i++) + f.AddLine("#. " + deletedItem.GetExtractedComments()[i]); + for (unsigned i = 0; i < deletedItem.GetRawReferences().GetCount(); i++) + f.AddLine("#: " + deletedItem.GetRawReferences()[i]); + wxString dummy = deletedItem.GetFlags(); + if (!dummy.empty()) + f.AddLine(dummy); + + for (size_t j = 0; j < deletedItem.GetDeletedLines().GetCount(); j++) + f.AddLine(deletedItem.GetDeletedLines()[j]); + } + + if (!CanEncodeToCharset(f, m_header.Charset)) + { +#if wxUSE_GUI + wxString msg; + msg.Printf(_("The catalog couldn't be saved in '%s' charset as specified in catalog settings.\n\nIt was saved in UTF-8 instead and the setting was modified accordingly."), + m_header.Charset.c_str()); + wxMessageBox(msg, _("Error saving catalog"), + wxOK | wxICON_EXCLAMATION); +#endif + m_header.Charset = "UTF-8"; + + // Re-do the save again because we modified a header: + f.Clear(); + return DoSaveOnly(f, crlf); + } + + // Otherwise everything can be safely saved: + return f.Write(crlf, wxCSConv(m_header.Charset)); +} + + +bool Catalog::HasDuplicateItems() const +{ + typedef std::pair MsgId; + std::set ids; + for (auto& item: m_items) + { + if (!ids.emplace(std::make_pair(item->GetContext(), item->GetString())).second) + return true; + } + return false; +} + +bool Catalog::FixDuplicateItems() +{ + auto oldname = m_fileName; + + TempDirectory tmpdir; + if ( !tmpdir.IsOk() ) + return false; + + wxString ext; + wxFileName::SplitPath(m_fileName, nullptr, nullptr, &ext); + wxString po_file_temp = tmpdir.CreateFileName("catalog." + ext); + wxString po_file_fixed = tmpdir.CreateFileName("fixed." + ext); + + if ( !DoSaveOnly(po_file_temp, wxTextFileType_Unix) ) + { + wxLogError(_("Couldn't save file %s."), po_file_temp.c_str()); + return false; + } + + ExecuteGettext(wxString::Format("msguniq -o %s %s", + QuoteCmdlineArg(po_file_fixed), + QuoteCmdlineArg(po_file_temp))); + + if (!wxFileName::FileExists(po_file_fixed)) + return false; + + bool ok = Load(po_file_fixed); + m_fileName = oldname; + return ok; +} + + +namespace +{ + +wxString MaskForType(const char *extensions, const wxString& description, bool showExt = true) +{ + (void)showExt; +#ifdef __WXMSW__ + if (showExt) + return wxString::Format("%s (%s)|%s", description, extensions, extensions); + else +#endif + return wxString::Format("%s|%s", description, extensions); +} + +wxString MaskForType(Catalog::Type t) +{ + switch (t) + { + case Catalog::Type::PO: + return MaskForType("*.po", _("PO Translation Files")); + case Catalog::Type::POT: + return MaskForType("*.pot", _("POT Translation Templates")); + } + return ""; // silence stupid warning +} + +} // anonymous namespace + +wxString Catalog::GetTypesFileMask(std::initializer_list types) +{ + if (types.size() == 0) + return ""; + wxString out; + auto t = types.begin(); + out += MaskForType(*t); + for (++t; t != types.end(); ++t) + { + out += "|"; + out += MaskForType(*t); + } + return out; +} + +wxString Catalog::GetAllTypesFileMask() +{ + return MaskForType("*.po;*.pot", _("All Translation Files"), /*showExt=*/false) + + "|" + + GetTypesFileMask({Type::PO, Type::POT}); +} + + +int Catalog::Validate() +{ + TempDirectory tmpdir; + if ( !tmpdir.IsOk() ) + return 0; + + wxString tmp_po = tmpdir.CreateFileName("validated.po"); + if ( !DoSaveOnly(tmp_po, wxTextFileType_Unix) ) + return 0; + + return DoValidate(tmp_po); +} + +int Catalog::DoValidate(const wxString& po_file) +{ + GettextErrors err; + ExecuteGettextAndParseOutput + ( + wxString::Format("msgfmt -o /dev/null -c %s", QuoteCmdlineArg(CliSafeFileName(po_file))), + err + ); + + for (auto& i: m_items) + { + i->SetValidity(CatalogItem::Val_Valid); + } + + for ( GettextErrors::const_iterator i = err.begin(); i != err.end(); ++i ) + { + if ( i->line != -1 ) + { + auto item = FindItemByLine(i->line); + if ( item ) + { + item->SetValidity(CatalogItem::Val_Invalid); + item->SetErrorString(i->text); + continue; + } + } + // if not matched to an item: + wxLogError(i->text); + } + + return (int)err.size(); +} + +void Catalog::SetFileName(const wxString& fn) +{ + wxFileName f(fn); + f.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); + m_fileName = f.GetFullPath(); +} + + +namespace +{ + +enum class SourcesPath +{ + Base, + Root +}; + +wxString GetSourcesPath(const wxString& fileName, const Catalog::HeaderData& header, SourcesPath kind) +{ + if (fileName.empty()) + return wxString(); + + if (header.BasePath.empty()) + return wxString(); + + wxString basepath; + if (wxIsAbsolutePath(header.BasePath)) + { + basepath = header.BasePath; + } + else + { + wxString path = wxPathOnly(fileName); + if (path.empty()) + path = "."; + basepath = path + wxFILE_SEP_PATH + header.BasePath + wxFILE_SEP_PATH; + } + + wxFileName root = wxFileName::DirName(basepath); + root.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); + + if (kind == SourcesPath::Root) + { + // Deal with misconfigured catalogs where the basepath isn't the root. + for (auto& p : header.SearchPaths) + { + wxString path = (p == ".") ? basepath : basepath + wxFILE_SEP_PATH + p; + root = CommonDirectory(root, MakeFileName(path)); + } + } + + return root.GetFullPath(); +} + +} // anonymous namespace + +wxString Catalog::GetSourcesBasePath() const +{ + return GetSourcesPath(m_fileName, m_header, SourcesPath::Base); +} + +wxString Catalog::GetSourcesRootPath() const +{ + return GetSourcesPath(m_fileName, m_header, SourcesPath::Root); +} + +bool Catalog::HasSourcesConfigured() const +{ + return !m_fileName.empty() && + !m_header.BasePath.empty() && + !m_header.SearchPaths.empty(); +} + +bool Catalog::HasSourcesAvailable() const +{ + if (!HasSourcesConfigured()) + return false; + + auto basepath = GetSourcesBasePath(); + if (!wxFileName::DirExists(basepath)) + return false; + + for (auto& p: m_header.SearchPaths) + { + auto fullp = wxIsAbsolutePath(p) ? p : basepath + p; + if (!wxFileName::Exists(fullp)) + return false; + } + + auto wpfile = m_header.GetHeader("X-Poedit-WPHeader"); + if (!wpfile.empty()) + { + // The following tests in this function are heuristics, so don't run + // them in presence of X-Poedit-WPHeader and consider the existence + // of that file a confirmation of correct setup (even though strictly + // speaking only its absence proves anything). + return wxFileName::FileExists(basepath + wpfile); + } + + if (m_header.SearchPaths.size() == 1) + { + // A single path doesn't give us much in terms of detection. About the + // only thing we can do is to check if it is is a well known directory + // that is unlikely to be the root. + auto root = GetSourcesRootPath(); + if (root == wxGetUserHome() || + root == wxStandardPaths::Get().GetDocumentsDir() || + root.EndsWith(wxString(wxFILE_SEP_PATH) + "Desktop" + wxFILE_SEP_PATH)) + { + return false; + } + } + + return true; +} + +#if wxUSE_GUI // TODO: better separation into another file +bool Catalog::Update(ProgressInfo *progress, bool summary, UpdateResultReason& reason) +{ + reason = UpdateResultReason::Unspecified; + + if (!m_isOk) + return false; + + wxString cwd = wxGetCwd(); + auto path = GetSourcesBasePath(); + if (!path.empty()) + { + if (!wxFileName::DirExists(path)) + { + reason = UpdateResultReason::NoSourcesFound; + return false; + } + + wxSetWorkingDirectory(path); + } + + SourceDigger dig(progress); + + auto newcat = dig.Dig(m_header.SearchPaths, + m_header.SearchPathsExcluded, + m_header.Keywords, + m_header.SourceCodeCharset, + reason); + + if (progress->Cancelled()) + reason = UpdateResultReason::CancelledByUser; + + if (newcat) + { + bool succ = false; + if ( progress ) + progress->UpdateMessage(_("Merging differences...")); + + bool cancelledByUser = false; + if (!summary || ShowMergeSummary(newcat, &cancelledByUser)) + { + switch (m_fileType) + { + case Type::PO: + succ = Merge(newcat); + break; + case Type::POT: + m_items = newcat->m_items; + succ = true; + break; + } + } + if (!succ) + { + newcat.reset(); + } + if (cancelledByUser) + reason = UpdateResultReason::CancelledByUser; + } + + wxSetWorkingDirectory(cwd); + + return newcat != nullptr; +} +#endif + +bool Catalog::UpdateFromPOT(const wxString& pot_file, + bool summary, + UpdateResultReason& reason, + bool replace_header) +{ + reason = UpdateResultReason::Unspecified; + if (!m_isOk) return false; + + CatalogPtr newcat = std::make_shared(pot_file, CreationFlag_IgnoreTranslations); + + if (!newcat->IsOk()) + { + wxLogError(_("'%s' is not a valid POT file."), pot_file.c_str()); + return false; + } + + bool cancelledByUser = false; + if (!summary || ShowMergeSummary(newcat, &cancelledByUser)) + { + if ( !Merge(newcat) ) + return false; + if ( replace_header ) + CreateNewHeader(newcat->Header()); + return true; + } + else + { + if (cancelledByUser) + reason = UpdateResultReason::CancelledByUser; + return false; + } +} + + +bool Catalog::Merge(const CatalogPtr& refcat) +{ + wxString oldname = m_fileName; + + TempDirectory tmpdir; + if ( !tmpdir.IsOk() ) + return false; + + wxString tmp1 = tmpdir.CreateFileName("ref.pot"); + wxString tmp2 = tmpdir.CreateFileName("input.po"); + wxString tmp3 = tmpdir.CreateFileName("output.po"); + + refcat->DoSaveOnly(tmp1, wxTextFileType_Unix); + DoSaveOnly(tmp2, wxTextFileType_Unix); + + wxString flags("-q --force-po"); + if (wxConfig::Get()->ReadBool("use_tm_when_updating", false) == false) + { + flags += " --no-fuzzy-matching"; + } + + bool succ = ExecuteGettext + ( + wxString::Format + ( + "msgmerge %s -o %s %s %s", + flags, + QuoteCmdlineArg(tmp3), + QuoteCmdlineArg(tmp2), + QuoteCmdlineArg(tmp1) + ) + ); + + if (succ) + { + const wxString charset = m_header.Charset; + + Load(tmp3); + + // msgmerge doesn't always preserve the charset, it tends to pick + // the most generic one of the charsets used, so if we are merging with + // UTF-8 catalog, it will become UTF-8. Some people hate this. + m_header.Charset = charset; + } + + m_fileName = oldname; + + return succ; +} + + +static inline wxString ItemMergeSummary(const CatalogItemPtr& item) +{ + wxString s = item->GetString(); + if ( item->HasPlural() ) + s += "|" + item->GetPluralString(); + if ( item->HasContext() ) + s += wxString::Format(" [%s]", item->GetContext()); + + return s; +} + +void Catalog::GetMergeSummary(const CatalogPtr& refcat, + wxArrayString& snew, wxArrayString& sobsolete) +{ + wxASSERT( snew.empty() ); + wxASSERT( sobsolete.empty() ); + + std::set strsThis, strsRef; + + for (auto& i: m_items) + strsThis.insert(ItemMergeSummary(i)); + for (auto& i: refcat->m_items) + strsRef.insert(ItemMergeSummary(i)); + + for (auto& i: strsThis) + { + if (strsRef.find(i) == strsRef.end()) + sobsolete.Add(i); + } + + for (auto& i: strsRef) + { + if (strsThis.find(i) == strsThis.end()) + snew.Add(i); + } +} + +bool Catalog::ShowMergeSummary(const CatalogPtr& refcat, bool *cancelledByUser) +{ +#if wxUSE_GUI + if (cancelledByUser) + *cancelledByUser = false; + if (wxConfig::Get()->ReadBool("show_summary", false)) + { + wxArrayString snew, sobsolete; + GetMergeSummary(refcat, snew, sobsolete); + MergeSummaryDialog sdlg; + sdlg.TransferTo(snew, sobsolete); + bool ok = (sdlg.ShowModal() == wxID_OK); + if (cancelledByUser) + *cancelledByUser = !ok; + return ok; + } + else + return true; +#else + (void)refcat; + (void)cancelledByUser; + return true; +#endif +} + +static unsigned GetCountFromPluralFormsHeader(const Catalog::HeaderData& header) +{ + if ( header.HasHeader("Plural-Forms") ) + { + // e.g. "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? + // 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + + wxString form = header.GetHeader("Plural-Forms"); + form = form.BeforeFirst(_T(';')); + if (form.BeforeFirst(_T('=')) == "nplurals") + { + wxString vals = form.AfterFirst('='); + if (vals == "INTEGER") // POT default + return 2; + long val; + if (vals.ToLong(&val)) + return (unsigned)val; + } + } + + // fallback value for plural forms count should be 2, as in English: + return 2; +} + +unsigned Catalog::GetPluralFormsCount() const +{ + unsigned count = GetCountFromPluralFormsHeader(m_header); + + for (auto& i: m_items) + { + count = std::max(count, i->GetPluralFormsCount()); + } + + return count; +} + +bool Catalog::HasWrongPluralFormsCount() const +{ + unsigned count = 0; + + for (auto& i: m_items) + { + count = std::max(count, i->GetPluralFormsCount()); + } + + if ( count == 0 ) + return false; // nothing translated, so we can't tell + + // if 'count' is less than the count from header, it may simply mean there + // are untranslated strings + if ( count > GetCountFromPluralFormsHeader(m_header) ) + return true; + + return false; +} + +bool Catalog::HasPluralItems() const +{ + for (auto& i: m_items) + { + if ( i->HasPlural() ) + return true; + } + return false; +} + +void Catalog::SetLanguage(Language lang) +{ + m_header.Lang = lang; + m_header.SetHeaderNotEmpty("Plural-Forms", lang.DefaultPluralFormsExpr()); +} + +void Catalog::GetStatistics(int *all, int *fuzzy, int *badtokens, + int *untranslated, int *unfinished) +{ + if (all) *all = 0; + if (fuzzy) *fuzzy = 0; + if (badtokens) *badtokens = 0; + if (untranslated) *untranslated = 0; + if (unfinished) *unfinished = 0; + + for (auto& i: m_items) + { + bool ok = true; + + if (all) + (*all)++; + + if (i->IsFuzzy()) + { + if (fuzzy) + (*fuzzy)++; + ok = false; + } + if (i->GetValidity() == CatalogItem::Val_Invalid) + { + if (badtokens) + (*badtokens)++; + ok = false; + } + if (!i->IsTranslated()) + { + if (untranslated) + (*untranslated)++; + ok = false; + } + + if ( !ok && unfinished ) + (*unfinished)++; + } +} + + +void CatalogItem::SetFlags(const wxString& flags) +{ + m_isFuzzy = false; + m_moreFlags.Empty(); + + if (flags.empty()) return; + wxStringTokenizer tkn(flags.Mid(1), " ,", wxTOKEN_STRTOK); + wxString s; + while (tkn.HasMoreTokens()) + { + s = tkn.GetNextToken(); + if (s == "fuzzy") m_isFuzzy = true; + else m_moreFlags << ", " << s; + } +} + + +wxString CatalogItem::GetFlags() const +{ + wxString f; + if (m_isFuzzy) f << ", fuzzy"; + f << m_moreFlags; + if (!f.empty()) + return "#" + f; + else + return wxEmptyString; +} + +void CatalogItem::SetFuzzy(bool fuzzy) +{ + if (!fuzzy && m_isFuzzy) + m_oldMsgid.clear(); + m_isFuzzy = fuzzy; +} + +bool CatalogItem::IsInFormat(const wxString& format) +{ + wxString lookingFor; + lookingFor.Printf("%s-format", format.c_str()); + wxStringTokenizer tkn(m_moreFlags, " ,", wxTOKEN_STRTOK); + while (tkn.HasMoreTokens()) + { + if (tkn.GetNextToken() == lookingFor) + return true; + } + return false; +} + +wxString CatalogItem::GetTranslation(unsigned idx) const +{ + if (idx >= GetNumberOfTranslations()) + return wxEmptyString; + else + return m_translations[idx]; +} + +void CatalogItem::SetTranslation(const wxString &t, unsigned idx) +{ + while (idx >= m_translations.GetCount()) + m_translations.Add(wxEmptyString); + m_translations[idx] = t; + + m_validity = Val_Unknown; + + m_isTranslated = true; + for (size_t i = 0; i < m_translations.GetCount(); i++) + { + if (m_translations[i].empty()) + { + m_isTranslated = false; + break; + } + } +} + +void CatalogItem::SetTranslations(const wxArrayString &t) +{ + m_translations = t; + + m_validity = Val_Unknown; + + m_isTranslated = true; + for (size_t i = 0; i < m_translations.GetCount(); i++) + { + if (m_translations[i].empty()) + { + m_isTranslated = false; + break; + } + } +} + +void CatalogItem::SetTranslationFromSource() +{ + m_validity = Val_Unknown; + m_isFuzzy = false; + m_isAutomatic = false; + m_isTranslated = true; + + auto iter = m_translations.begin(); + if (*iter != m_string) + { + *iter = m_string; + m_isModified = true; + } + + if (m_hasPlural) + { + ++iter; + for ( ; iter != m_translations.end(); ++iter ) + { + if (*iter != m_plural) + { + *iter = m_plural; + m_isModified = true; + } + } + } +} + +void CatalogItem::ClearTranslation() +{ + m_isFuzzy = false; + m_isAutomatic = false; + m_isTranslated = false; + for (auto& t: m_translations) + { + if (!t.empty()) + m_isModified = true; + t.clear(); + } +} + +unsigned CatalogItem::GetPluralFormsCount() const +{ + unsigned trans = GetNumberOfTranslations(); + if ( !HasPlural() || !trans ) + return 0; + + return trans - 1; +} + +wxArrayString CatalogItem::GetReferences() const +{ + // A line may contain several references, separated by white-space. + // Each reference is in the form "path_name:line_number" + // (path_name may contain spaces) + + wxArrayString refs; + + for ( wxArrayString::const_iterator i = m_references.begin(); i != m_references.end(); ++i ) + { + wxString line = *i; + + line = line.Strip(wxString::both); + while (!line.empty()) + { + size_t idx = 0; + while (idx < line.length() && line[idx] != _T(':')) { idx++; } + while (idx < line.length() && !wxIsspace(line[idx])) { idx++; } + + refs.push_back(line.Left(idx)); + line = line.Mid(idx).Strip(wxString::both); + } + } + + return refs; +} + +wxString CatalogItem::GetOldMsgid() const +{ + wxString s; + for (auto line: m_oldMsgid) + { + if (line.length() < 2) + continue; + if (line.Last() == '"') + line.RemoveLast(); + if (line[0] == '"') + line.Remove(0, 1); + if (line.StartsWith("msgid \"")) + line.Remove(0, 7); + s += UnescapeCString(line); + } + return s; +} diff --git a/src/catalog.h b/src/catalog.h new file mode 100644 index 0000000..b5a4585 --- /dev/null +++ b/src/catalog.h @@ -0,0 +1,867 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _CATALOG_H_ +#define _CATALOG_H_ + +#include "language.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +class ProgressInfo; + +class Catalog; +class CatalogItem; +typedef std::shared_ptr CatalogItemPtr; +typedef std::shared_ptr CatalogPtr; + + +/// The possible bookmarks for a given item +typedef enum +{ + NO_BOOKMARK = -1, + BOOKMARK_0, + BOOKMARK_1, + BOOKMARK_2, + BOOKMARK_3, + BOOKMARK_4, + BOOKMARK_5, + BOOKMARK_6, + BOOKMARK_7, + BOOKMARK_8, + BOOKMARK_9, + BOOKMARK_LAST +} Bookmark; + +/// Result of Catalog::Update() +enum class UpdateResultReason +{ + Unspecified, + CancelledByUser, + NoSourcesFound +}; + +/** This class holds information about one particular string. + This includes source string and its occurrences in source code + (so-called references), translation and translation's status + (fuzzy, non translated, translated) and optional comment. + + This class is mostly internal, used by Catalog to store data. + */ +class CatalogItem +{ + public: + /// Ctor. Initializes the object with source string and translation. + CatalogItem() + : m_id(0), + m_hasPlural(false), + m_hasContext(false), + m_references(), + m_isFuzzy(false), + m_isTranslated(false), + m_isModified(false), + m_isAutomatic(false), + m_validity(Val_Unknown), + m_lineNum(0), + m_bookmark(NO_BOOKMARK) {} + + CatalogItem(const CatalogItem& dt) + : m_id(dt.m_id), + m_string(dt.m_string), + m_plural(dt.m_plural), + m_hasPlural(dt.m_hasPlural), + m_hasContext(dt.m_hasContext), + m_context(dt.m_context), + m_translations(dt.m_translations), + m_references(dt.m_references), + m_extractedComments(dt.m_extractedComments), + m_oldMsgid(dt.m_oldMsgid), + m_isFuzzy(dt.m_isFuzzy), + m_isTranslated(dt.m_isTranslated), + m_isModified(dt.m_isModified), + m_isAutomatic(dt.m_isAutomatic), + m_hasBadTokens(dt.m_hasBadTokens), + m_moreFlags(dt.m_moreFlags), + m_comment(dt.m_comment), + m_validity(dt.m_validity), + m_lineNum(dt.m_lineNum), + m_errorString(dt.m_errorString), + m_bookmark(dt.m_bookmark) {} + + /// Gets numeric, 1-based ID + int GetId() const { return m_id; } + + /// Returns the source string. + const wxString& GetString() const { return m_string; } + + /// Does this entry have a msgid_plural? + bool HasPlural() const { return m_hasPlural; } + + /// Returns the plural string. + const wxString& GetPluralString() const { return m_plural; } + + /// Does this entry have a msgctxt? + bool HasContext() const { return m_hasContext; } + + /// Returns context string (can only be called if HasContext() returns + /// true and empty string is accepted value). + const wxString& GetContext() const { return m_context; } + + /// How many translations (plural forms) do we have? + unsigned GetNumberOfTranslations() const + { return (unsigned)m_translations.size(); } + + /// Returns number of plural forms in this translation; note that this + /// may be less than what the header says, because some may be + /// still untranslated + unsigned GetPluralFormsCount() const; + + /// Returns the nth-translation. + wxString GetTranslation(unsigned n = 0) const; + + /// Returns all translations. + const wxArrayString& GetTranslations() const { return m_translations; } + wxArrayString& GetTranslations() { return m_translations; } + + /// Returns references (#:) lines for the entry + const wxArrayString& GetRawReferences() const { return m_references; } + + /// Returns array of all occurrences of this string in source code, + /// parsed into individual references + wxArrayString GetReferences() const; + + /// Returns comment added by the translator to this entry + const wxString& GetComment() const { return m_comment; } + + /// Returns array of all auto comments. + const wxArrayString& GetExtractedComments() const { return m_extractedComments; } + + /// Convenience function: does this entry has a comment? + bool HasComment() const { return !m_comment.empty(); } + + /// Convenience function: does this entry has auto comments? + bool HasExtractedComments() const { return !m_extractedComments.empty(); } + + /// Adds new reference to the entry (used by SourceDigger). + void AddReference(const wxString& ref) + { + if (m_references.Index(ref) == wxNOT_FOUND) + m_references.Add(ref); + } + + void SetId(int id) { m_id = id; } + + /// Sets the string. + void SetString(const wxString& s) + { + m_string = s; + m_validity = Val_Unknown; + } + + /// Sets the plural form (if applicable). + void SetPluralString(const wxString& p) + { + m_plural = p; + m_hasPlural = true; + } + + /// Sets the context (msgctxt0 + void SetContext(const wxString& context) + { + m_hasContext = true; + m_context = context; + } + + /** Sets the translation. Changes "translated" status to true + if \a t is not empty. + */ + void SetTranslation(const wxString& t, unsigned index = 0); + + /// Sets all translations. + void SetTranslations(const wxArrayString& t); + + /// Set translations to equal source text. + void SetTranslationFromSource(); + + // Clears all translation content from the entry + void ClearTranslation(); + + /// Sets the comment. + void SetComment(const wxString& c) + { + m_comment = c; + } + + /** Sets gettext flags directly in string format. It may be + either empty string or "#, fuzzy", "#, c-format", + "#, fuzzy, c-format" or others (not understood by Poedit). + */ + void SetFlags(const wxString& flags); + + /// Gets gettext flags. \see SetFlags + wxString GetFlags() const; + + /// Sets fuzzy flag. + void SetFuzzy(bool fuzzy); + /// Gets value of fuzzy flag. + bool IsFuzzy() const { return m_isFuzzy; } + /// Sets translated flag. + void SetTranslated(bool t) { m_isTranslated = t; } + /// Gets value of translated flag. + bool IsTranslated() const { return m_isTranslated; } + /// Sets modified flag. + void SetModified(bool modified) { m_isModified = modified; } + /// Gets value of modified flag. + bool IsModified() const { return m_isModified; } + /// Sets automatic translation flag. + void SetAutomatic(bool automatic) { m_isAutomatic = automatic; } + /// Gets value of automatic translation flag. + bool IsAutomatic() const { return m_isAutomatic; } + /// Sets the number of the line this entry occurs on. + void SetLineNumber(int line) { m_lineNum = line; } + /// Get line number of this entry. + int GetLineNumber() const { return m_lineNum; } + + /** Returns true if the gettext flags line contains "foo-format" + flag when called with "foo" as argument. */ + bool IsInFormat(const wxString& format); + + /// Adds new extracted comments (#. ) + void AddExtractedComments(const wxString& com) + { + m_extractedComments.Add(com); + } + + /// Clears extracted comments. + void ClearExtractedComments() + { + m_extractedComments.Clear(); + } + + void SetOldMsgid(const wxArrayString& data) { m_oldMsgid = data; } + const wxArrayString& GetOldMsgidRaw() const { return m_oldMsgid; } + wxString GetOldMsgid() const; + bool HasOldMsgid() const { return !m_oldMsgid.empty(); } + + // Validity (syntax-checking) status of the entry: + enum Validity + { + Val_Unknown = -1, + Val_Invalid = 0, + Val_Valid = 1 + }; + + /** Checks if %i etc. are correct in the translation (true if yes). + Strings that are not c-format are always correct. */ + Validity GetValidity() const { return m_validity; } + void SetValidity(Validity val) { m_validity = val; } + + void SetErrorString(const wxString& str) { m_errorString = str; } + wxString GetErrorString() const { return m_errorString; } + + /// Returns the bookmark for the item + Bookmark GetBookmark() const {return m_bookmark;} + /// Returns true if the item has a bookmark + bool HasBookmark() const {return (GetBookmark() != NO_BOOKMARK);} + /// Sets the bookmark + void SetBookmark(Bookmark bookmark) {m_bookmark = bookmark;} + + private: + int m_id; + + wxString m_string, m_plural; + bool m_hasPlural; + + bool m_hasContext; + wxString m_context; + + wxArrayString m_translations; + + wxArrayString m_references, m_extractedComments; + wxArrayString m_oldMsgid; + bool m_isFuzzy, m_isTranslated, m_isModified, m_isAutomatic; + bool m_hasBadTokens; + wxString m_moreFlags; + wxString m_comment; + Validity m_validity; + int m_lineNum; + wxString m_errorString; + Bookmark m_bookmark; +}; + + +/** This class holds information about one particular deleted item. + This includes deleted lines, references, translation's status + (fuzzy, non translated, translated) and optional comment(s). + + This class is mostly internal, used by Catalog to store data. + */ +// FIXME: derive this from CatalogItem (or CatalogItemBase) +class CatalogDeletedData +{ + public: + /// Ctor. + CatalogDeletedData() + : m_lineNum(0) {} + CatalogDeletedData(const wxArrayString& deletedLines) + : m_deletedLines(deletedLines), + m_lineNum(0) {} + + CatalogDeletedData(const CatalogDeletedData& dt) + : m_deletedLines(dt.m_deletedLines), + m_references(dt.m_references), + m_extractedComments(dt.m_extractedComments), + m_flags(dt.m_flags), + m_comment(dt.m_comment), + m_lineNum(dt.m_lineNum) {} + + /// Returns the deleted lines. + const wxArrayString& GetDeletedLines() const { return m_deletedLines; } + + /// Returns references (#:) lines for the entry + const wxArrayString& GetRawReferences() const { return m_references; } + + /// Returns comment added by the translator to this entry + const wxString& GetComment() const { return m_comment; } + + /// Returns array of all auto comments. + const wxArrayString& GetExtractedComments() const { return m_extractedComments; } + + /// Convenience function: does this entry has a comment? + bool HasComment() const { return !m_comment.empty(); } + + /// Adds new reference to the entry (used by SourceDigger). + void AddReference(const wxString& ref) + { + if (m_references.Index(ref) == wxNOT_FOUND) + m_references.Add(ref); + } + + /// Sets the string. + void SetDeletedLines(const wxArrayString& a) + { + m_deletedLines = a; + } + + /// Sets the comment. + void SetComment(const wxString& c) + { + m_comment = c; + } + + /** Sets gettext flags directly in string format. It may be + either empty string or "#, fuzzy", "#, c-format", + "#, fuzzy, c-format" or others (not understood by Poedit). + */ + void SetFlags(const wxString& flags) {m_flags = flags;}; + + /// Gets gettext flags. \see SetFlags + wxString GetFlags() const {return m_flags;}; + + /// Sets the number of the line this entry occurs on. + void SetLineNumber(int line) { m_lineNum = line; } + /// Get line number of this entry. + int GetLineNumber() const { return m_lineNum; } + + /// Adds new extracted comments (#. ) + void AddExtractedComments(const wxString& com) + { + m_extractedComments.Add(com); + } + + /// Clears extracted comments. + void ClearExtractedComments() + { + m_extractedComments.Clear(); + } + + private: + wxArrayString m_deletedLines; + + wxArrayString m_references, m_extractedComments; + wxString m_flags; + wxString m_comment; + int m_lineNum; +}; + + +typedef std::vector CatalogItemArray; +typedef std::vector CatalogDeletedDataArray; +typedef std::map CatalogItemIndex; + +/** This class stores all translations, together with filelists, references + and other additional information. It can read .po files and save both + .mo and .po files. Furthermore, it provides facilities for updating the + catalog from source files. + */ +class Catalog +{ + public: + /// Type of the file loaded + enum class Type + { + PO, + POT + }; + + /// Capabilities of the file type + enum class Cap + { + Translations, // Can translations be added (e.g. POTs can't)? + LanguageSetting, // Is language code saved in the file? + UserComments, // Can users add comments? + }; + + /// Is this file capable of doing these things + bool HasCapability(Cap cap) const; + + /// PO file header information. + class HeaderData + { + public: + HeaderData() {} + + /** Initializes the headers from string that is in msgid "" format + (i.e. list of key:value\n entries). */ + void FromString(const wxString& str); + + /** Converts the header into string representation that can be + directly written to .po file as msgid "". */ + wxString ToString(const wxString& line_delim = wxEmptyString); + + /// Updates headers list from parsed values entries below + void UpdateDict(); + /// Reverse operation to UpdateDict + void ParseDict(); + + /// Returns value of header or empty string if missing. + wxString GetHeader(const wxString& key) const; + + /// Returns true if given key is present in the header. + bool HasHeader(const wxString& key) const; + + /** Sets header to given value. Overwrites old value if present, + appends to the end of header values otherwise. */ + void SetHeader(const wxString& key, const wxString& value); + + /// Like SetHeader, but deletes the header if value is empty + void SetHeaderNotEmpty(const wxString& key, const wxString& value); + + /// Removes given header entry + void DeleteHeader(const wxString& key); + + struct Entry + { + wxString Key, Value; + }; + typedef std::vector Entries; + + const Entries& GetAllHeaders() const { return m_entries; } + + // Parsed values: + + wxString Project, CreationDate, + RevisionDate, Translator, TranslatorEmail, + Team, TeamEmail, Charset, SourceCodeCharset; + Language Lang; + + wxArrayString SearchPaths, SearchPathsExcluded, Keywords; + int Bookmarks[BOOKMARK_LAST]; + wxString BasePath; + + wxString Comment; + + protected: + Entries m_entries; + + const Entry *Find(const wxString& key) const; + }; + + enum CreationFlags + { + CreationFlag_IgnoreHeader = 1, + CreationFlag_IgnoreTranslations = 2 + }; + + enum class CompilationStatus + { + NotDone, + Success, + Error + }; + + // Common wrapping values + static const int NO_WRAPPING = -1; + static const int DEFAULT_WRAPPING = -2; + + /// Default ctor. Creates empty catalog, you have to call Load. + Catalog(Type type = Type::PO); + + /// Ctor that loads the catalog from \a po_file with Load. + /// \a flags is CreationFlags combination. + explicit Catalog(const wxString& po_file, int flags = 0); + + ~Catalog(); + + /** Creates new, empty header. Sets Charset to something meaningful + ("UTF-8", currently). + */ + void CreateNewHeader(); + + /** Creates new header initialized based on a POT file's header. + */ + void CreateNewHeader(const HeaderData& pot_header); + + /// Clears the catalog, removes all entries from it. + void Clear(); + + /** Loads catalog from .po file. + If file named po_file ".poedit" (e.g. "cs.po.poedit") exists, + this function loads additional information from it. .po.poedit + file contains parts of catalog header data that are not part + of standard .po format, namely SearchPaths, Keywords, BasePath + and Language. + + @param flags CreationFlags combination. + */ + bool Load(const wxString& po_file, int flags = 0); + + /** Saves catalog to file. Creates both .po (text) and .mo (binary) + version of the catalog (unless the latter was disabled in + preferences). Calls external xmsgfmt program to generate the .mo + file. + + Note that \a po_file refers to .po file, .mo file will have same + name & location as .po file except for different extension. + */ + bool Save(const wxString& po_file, bool save_mo, + int& validation_errors, + CompilationStatus& mo_compilation_status); + + /** + "Saves" the PO file into a memory buffer with content identical + to what Save() would save into a file. + + Returns empty string in case of failure. + */ + std::string SaveToBuffer(); + + /// File mask for opening/saving this catalog's file type + wxString GetFileMask() const { return GetTypesFileMask({m_fileType}); } + /// File mask for opening/saving any supported file type + static wxString GetTypesFileMask(std::initializer_list types); + static wxString GetAllTypesFileMask(); + + /// Compiles the catalog into binary MO file. + bool CompileToMO(const wxString& mo_file, + int& validation_errors, + CompilationStatus& mo_compilation_status); + + /// Exports the catalog to HTML format + void ExportToHTML(std::ostream& output); + + /// Detect a particular common breakage of catalogs. + bool HasDuplicateItems() const; + + /// Fixes a common invalid kind of entries, when msgids aren't unique. + bool FixDuplicateItems(); + + Type GetFileType() const { return m_fileType; } + + wxString GetFileName() const { return m_fileName; } + void SetFileName(const wxString& fn); + + /** + Return base path to source code for extraction, or empty string if not configured. + + This is the path that file references are relative to. It should be, + but may not be, the root of the source tree. + */ + wxString GetSourcesBasePath() const; + + /** + Returns top-most directory of the configured source tree. + + Returns empty string if not configured. + */ + wxString GetSourcesRootPath() const; + + /** + Returns true if the source code to update the PO from is available. + */ + bool HasSourcesConfigured() const; + + /** + Returns true if the source code to update the PO from is available. + */ + bool HasSourcesAvailable() const; + + /** Updates the catalog from sources. + \see SourceDigger, Parser, UpdateFromPOT. + */ + bool Update(ProgressInfo *progress, bool summary, UpdateResultReason& reason); + + /** Updates the catalog from POT file. + \see Update + */ + bool UpdateFromPOT(const wxString& pot_file, + bool summary, + UpdateResultReason& reason, + bool replace_header = false); + + /// Returns the number of strings/translations in the catalog. + unsigned GetCount() const { return (unsigned)m_items.size(); } + + const CatalogItemArray& items() const { return m_items; } + + /// Is the catalog empty? + bool empty() const { return m_items.empty(); } + + /** Returns number of all, fuzzy, badtokens and untranslated items. + Any argument may be NULL if the caller is not interested in + given statistic value. + + @note "untranslated" are entries without translation; "unfinished" + are entries with any problems + */ + void GetStatistics(int *all, int *fuzzy, int *badtokens, + int *untranslated, int *unfinished); + + /// Gets n-th item in the catalog (read-write access). + CatalogItemPtr operator[](unsigned n) { return m_items[n]; } + + /// Gets n-th item in the catalog (read-only access). + const CatalogItemPtr operator[](unsigned n) const { return m_items[n]; } + + /// Gets catalog header (read-write access). + HeaderData& Header() { return m_header; } + + /// Returns plural forms count: taken from Plural-Forms header if + /// present, 0 otherwise (unless there are existing plural forms + /// translations in the file) + unsigned GetPluralFormsCount() const; + + /// Returns true if Plural-Forms header doesn't match plural forms + /// usage in catalog items + bool HasWrongPluralFormsCount() const; + + /// Does this catalog have any items with plural forms? + bool HasPluralItems() const; + + /** Returns status of catalog object: true if ok, false if damaged + (i.e. constructor or Load failed). + */ + bool IsOk() const { return m_isOk; } + + /// Returns catalog's source language (may be invalid, but usually English). + Language GetSourceLanguage() const { return m_sourceLanguage; } + + /// Returns catalog's language (may be invalid). + Language GetLanguage() const { return m_header.Lang; } + + /// Change the catalog's language and update headers accordingly + void SetLanguage(Language lang); + + /// Is the PO file from Crowdin, i.e. sync-able? + bool IsFromCrowdin() const + { return m_header.HasHeader("X-Crowdin-Project") && m_header.HasHeader("X-Crowdin-File"); } + + /// Adds entry to the catalog (the catalog will take ownership of + /// the object). + void AddItem(const CatalogItemPtr& data); + + /// Adds entry to the catalog (the catalog will take ownership of + /// the object). + void AddDeletedItem(const CatalogDeletedData& data); + + /// Returns true if the catalog contains obsolete entries (~.*) + bool HasDeletedItems(); + + /// Removes all obsolete translations from the catalog + void RemoveDeletedItems(); + + /// Finds item by line number + CatalogItemPtr FindItemByLine(int lineno); + + /// Sets the given item to have the given bookmark and returns the index + /// of the item that previously had this bookmark (or -1) + int SetBookmark(int id, Bookmark bookmark); + + /// Returns the index of the item that has the given bookmark or -1 + int GetBookmarkIndex(Bookmark bookmark) const + { + return m_header.Bookmarks[bookmark]; + } + + + /// Validates correctness of the translation by running msgfmt + /// Returns number of errors (i.e. 0 if no errors). + int Validate(); + + protected: + /// Fix commonly encountered fixable problems with loaded files + void FixupCommonIssues(); + + int DoValidate(const wxString& po_file); + bool DoSaveOnly(const wxString& po_file, wxTextFileType crlf); + bool DoSaveOnly(wxTextBuffer& f, wxTextFileType crlf); + + /** Merges the catalog with reference catalog + (in the sense of msgmerge -- this catalog is old one with + translations, \a refcat is reference catalog created by Update().) + + \return true if the merge was successful, false otherwise. + Note that if it returns false, the catalog was + \em not modified! + */ + bool Merge(const CatalogPtr& refcat); + + /** Returns list of strings that are new in reference catalog + (compared to this one) and that are not present in \a refcat + (i.e. are obsoleted). + + \see ShowMergeSummary + */ + void GetMergeSummary(const CatalogPtr& refcat, + wxArrayString& snew, wxArrayString& sobsolete); + + /** Shows a dialog with merge summary. + \see GetMergeSummary, Merge + + \return true if the merge was OK'ed by the user, false otherwise + */ + bool ShowMergeSummary(const CatalogPtr& refcat, bool *cancelledByUser); + + private: + CatalogItemArray m_items; + CatalogDeletedDataArray m_deletedItems; + + bool m_isOk; + Type m_fileType; + wxString m_fileName; + HeaderData m_header; + Language m_sourceLanguage; + wxTextFileType m_fileCRLF; + int m_fileWrappingWidth; + + friend class LoadParser; +}; + + +/// Internal class - used for parsing of po files. +class CatalogParser +{ + public: + CatalogParser(wxTextFile *f) + : m_textFile(f), + m_detectedLineWidth(0), + m_detectedWrappedLines(false), + m_lastLineHardWrapped(true), m_previousLineHardWrapped(true), + m_ignoreHeader(false), + m_ignoreTranslations(false) + {} + + virtual ~CatalogParser() {} + + /// Tell the parser to ignore header entries when processing + void IgnoreHeader(bool ignore) { m_ignoreHeader = ignore; } + + /// Tell the parser to treat input as POT and ignore translations + void IgnoreTranslations(bool ignore) { m_ignoreTranslations = ignore; } + + /** Parses the entire file, calls OnEntry each time + new msgid/msgstr pair is found. + + @return false if parsing failed, true otherwise + */ + bool Parse(); + + int GetWrappingWidth() const; + + protected: + // Read one line from file, remove all \r and \n characters, ignore empty lines: + wxString ReadTextLine(); + + void PossibleWrappedLine() + { + if (!m_previousLineHardWrapped) + m_detectedWrappedLines = true; + } + + /** Called when new entry was parsed. Parsing continues + if returned value is true and is cancelled if it + is false. + */ + virtual bool OnEntry(const wxString& msgid, + const wxString& msgid_plural, + bool has_plural, + bool has_context, + const wxString& context, + const wxArrayString& mtranslations, + const wxString& flags, + const wxArrayString& references, + const wxString& comment, + const wxArrayString& extractedComments, + const wxArrayString& msgid_old, + unsigned lineNumber) = 0; + + /** Called when new deleted entry was parsed. Parsing continues + if returned value is true and is cancelled if it + is false. Defaults to an empty implementation. + */ + virtual bool OnDeletedEntry(const wxArrayString& /*deletedLines*/, + const wxString& /*flags*/, + const wxArrayString& /*references*/, + const wxString& /*comment*/, + const wxArrayString& /*extractedComments*/, + unsigned /*lineNumber*/) + { + return true; + } + + virtual void OnIgnoredEntry() {} + + /// Textfile being parsed. + wxTextFile *m_textFile; + int m_detectedLineWidth; + bool m_detectedWrappedLines; + bool m_lastLineHardWrapped, m_previousLineHardWrapped; + + /// Whether the header should be parsed or not + bool m_ignoreHeader; + + /// Whether the translations should be ignored (as if it was a POT) + bool m_ignoreTranslations; +}; + +#endif // _CATALOG_H_ diff --git a/src/chooselang.cpp b/src/chooselang.cpp new file mode 100644 index 0000000..263a07b --- /dev/null +++ b/src/chooselang.cpp @@ -0,0 +1,94 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2003-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "chooselang.h" + +#if NEED_CHOOSELANG_UI + +#include "language.h" + +#include +#include +#include + +static void SaveUILanguage(const wxString& lang) +{ + if (lang.empty()) + wxConfig::Get()->Write("ui_language", "default"); + else + wxConfig::Get()->Write("ui_language", lang); +} + +wxString GetUILanguage() +{ + wxString lng = wxConfig::Get()->Read("ui_language"); + if (!lng.empty() && lng != "default") + return lng; + else + return ""; +} + +static bool ChooseLanguage(wxString *value) +{ + wxArrayString langs; + wxArrayString arr; + + { + wxBusyCursor bcur; + langs = wxTranslations::Get()->GetAvailableTranslations("poedit"); + + arr.push_back(_("(Use default language)")); + for (auto i : langs) + { + auto lang = Language::TryParse(i.ToStdWstring()); + arr.push_back(lang.DisplayNameInItself() + L" — " + lang.DisplayName()); + } + } + int choice = wxGetSingleChoiceIndex( + _("Select your preferred language"), + _("Language selection"), + arr); + if ( choice == -1 ) + return false; + + if ( choice == 0 ) + *value = ""; + else + *value = langs[choice-1]; + return true; +} + +void ChangeUILanguage() +{ + wxString lang; + if ( !ChooseLanguage(&lang) ) + return; + SaveUILanguage(lang); + wxMessageBox(_("You must restart Poedit for this change to take effect."), + "Poedit", + wxOK | wxCENTRE | wxICON_INFORMATION); +} + +#endif // NEED_CHOOSELANG_UI diff --git a/src/chooselang.h b/src/chooselang.h new file mode 100644 index 0000000..f1cdef2 --- /dev/null +++ b/src/chooselang.h @@ -0,0 +1,48 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2003-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _CHOOSELANG_H_ +#define _CHOOSELANG_H_ + +#include +#include + +#ifdef __WXMSW__ + #define NEED_CHOOSELANG_UI 1 +#else + #define NEED_CHOOSELANG_UI 0 +#endif + +#if NEED_CHOOSELANG_UI + +/// Let the user change UI language +void ChangeUILanguage(); + +/** Return currently chosen language. Calls ChooseLanguage if necessary. */ +wxString GetUILanguage(); + +#endif // NEED_CHOOSELANG_UI + +#endif diff --git a/src/commentdlg.cpp b/src/commentdlg.cpp new file mode 100644 index 0000000..4e437d9 --- /dev/null +++ b/src/commentdlg.cpp @@ -0,0 +1,84 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include + +#include "catalog.h" +#include "commentdlg.h" + + +CommentDialog::CommentDialog(wxWindow *parent, const wxString& comment) : wxDialog() +{ + wxXmlResource::Get()->LoadDialog(this, parent, "comment_dlg"); +#ifndef __WXOSX__ + CenterOnParent(); +#endif + m_text = XRCCTRL(*this, "comment", wxTextCtrl); + + m_text->SetValue(RemoveStartHash(comment)); + + wxAcceleratorEntry entries[] = { + { wxACCEL_CMD, WXK_RETURN, wxID_OK } + }; + wxAcceleratorTable accel(WXSIZEOF(entries), entries); + SetAcceleratorTable(accel); +} + +wxString CommentDialog::GetComment() const +{ + // Put the start hash back + return AddStartHash(m_text->GetValue()); +} + +BEGIN_EVENT_TABLE(CommentDialog, wxDialog) + EVT_BUTTON(XRCID("clear"), CommentDialog::OnClear) +END_EVENT_TABLE() + +void CommentDialog::OnClear(wxCommandEvent&) +{ + m_text->Clear(); +} + + +/*static*/ wxString CommentDialog::RemoveStartHash(const wxString& comment) +{ + wxString tmpComment; + wxStringTokenizer tkn(comment, "\n\r"); + while (tkn.HasMoreTokens()) + tmpComment << tkn.GetNextToken().Mid(2) << "\n"; + return tmpComment; +} + +/*static*/ wxString CommentDialog::AddStartHash(const wxString& comment) +{ + wxString tmpComment; + wxStringTokenizer tkn(comment, "\n\r"); + while (tkn.HasMoreTokens()) + tmpComment << "# " << tkn.GetNextToken() << "\n"; + return tmpComment; +} diff --git a/src/commentdlg.h b/src/commentdlg.h new file mode 100644 index 0000000..c09a882 --- /dev/null +++ b/src/commentdlg.h @@ -0,0 +1,63 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _COMMENTDLG_H_ +#define _COMMENTDLG_H_ + +#include +class WXDLLIMPEXP_FWD_CORE wxTextCtrl; + +/** CommentDialog is a very simple dialog that lets the user edit + catalog comments. Comment consists of one or more lines that + begin with the '#' character. The user is presented with more + user friendly representation with '#' removed. + */ +class CommentDialog : public wxDialog +{ + public: + /// Returns the given comment without the leading "# " + static wxString RemoveStartHash(const wxString& comment); + + /// Returns the given comment with the leading "# " added + static wxString AddStartHash(const wxString& comment); + + /** Ctor. + \param parent Parent frame, FindFrame will float on it + \param comment Initial value of comment + */ + CommentDialog(wxWindow *parent, const wxString& comment); + + /// Returns the content of comment edit field. + wxString GetComment() const; + + private: + wxTextCtrl *m_text; + + void OnClear(wxCommandEvent& event); + DECLARE_EVENT_TABLE() +}; + + +#endif // _FINDFRAME_H_ diff --git a/src/concurrency.cpp b/src/concurrency.cpp new file mode 100644 index 0000000..36764ca --- /dev/null +++ b/src/concurrency.cpp @@ -0,0 +1,110 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "concurrency.h" + +#include "errors.h" +#include + +#if defined(HAVE_DISPATCH) + + +#include + +void call_on_main_thread_impl(std::function&& f) +{ + std::function func(std::move(f)); + dispatch_async(dispatch_get_main_queue(), [func]{ + try + { + func(); + } + catch (...) + { + // FIXME: This is gross. Should be reported better and properly, but this + // is consistent with pplx/ConcurrencyRT/futures, so do it for now. + wxLogDebug("uncaught exception: %s", DescribeCurrentException()); + } + }); +} + +void concurrency_queue::enqueue(std::function&& f) +{ + std::function func(std::move(f)); + dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(q, [func]{ + try + { + func(); + } + catch (...) + { + // FIXME: This is gross. Should be reported better and properly, but this + // is consistent with pplx/ConcurrencyRT/futures, so do it for now. + wxLogDebug("uncaught exception: %s", DescribeCurrentException()); + } + }); +} + +void concurrency_queue::cleanup() +{ +} + + +#elif !defined(HAVE_PPL) // generic implementation + + +#include "ThreadPool.h" + +#include + +namespace +{ + +std::unique_ptr gs_pool; +static std::once_flag initializationFlag; + +ThreadPool& pool() +{ + std::call_once(initializationFlag, []{ + gs_pool.reset(new ThreadPool(std::thread::hardware_concurrency() + 1)); + }); + return *gs_pool; +} + +} // anonymous namespace + +void concurrency_queue::enqueue(std::function&& f) +{ + pool().enqueue_func(std::move(f)); +} + +void concurrency_queue::cleanup() +{ + gs_pool.reset(); +} + + +#endif // !HAVE_DISPATCH diff --git a/src/concurrency.h b/src/concurrency.h new file mode 100644 index 0000000..a04b301 --- /dev/null +++ b/src/concurrency.h @@ -0,0 +1,238 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_concurrency_h +#define Poedit_concurrency_h + +#include +#include +#include + +#include +#include + +#if defined(__WXOSX__) && defined(__clang__) + #define HAVE_DISPATCH + extern void call_on_main_thread_impl(std::function&& f); +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1800) + #define HAVE_PPL + #include +#endif + +// ---------------------------------------------------------------------- +// Background operations +// ---------------------------------------------------------------------- + +#if defined(HAVE_PPL) + +class concurrency_queue +{ +public: + /// Future type used by the queue. + template using future = Concurrency::task; + + /** + Enqueue an operation for background processing. + + Return future for it. + */ + template + static auto add(F&& f) -> future::type> + { + return Concurrency::create_task(f); + } + + /// @internal Call on shutdown to terminate the queue + static void cleanup() {} +}; + +template +inline bool is_future_valid(const concurrency_queue::future& f) +{ + try + { + f.is_done(); + return true; + } + catch (Concurrency::invalid_operation) + { + return false; + } +} + +#else // generic version + +class concurrency_queue +{ +public: + /// Future type used by the queue. + template using future = std::future; + + /** + Enqueue an operation for background processing. + + Return future for it. + */ + template + static auto add(F&& f) -> future::type> + { + using return_type = typename std::result_of::type; + auto task = std::make_shared< std::packaged_task >(std::forward(f)); + future res = task->get_future(); + enqueue([task](){ (*task)(); }); + return res; + } + + /// @internal Call on shutdown to terminate the queue + static void cleanup(); + +private: + static void enqueue(std::function&& f); +}; + +template +inline bool is_future_valid(const concurrency_queue::future& f) +{ + return f.valid(); +} + +#endif // !HAVE_PPL + + +// ---------------------------------------------------------------------- +// Helpers for running code on the main thread +// ---------------------------------------------------------------------- + +/** + Simply calls the callable @a func on the main thread, asynchronously. + */ +template +void call_on_main_thread(F&& func) +{ +#ifdef HAVE_DISPATCH + call_on_main_thread_impl(func); +#else + wxTheApp->CallAfter(func); +#endif +} + +#if defined(__clang__) + +template +auto on_main_thread_impl(std::function func) -> std::function +{ + return [func](Args... args){ + call_on_main_thread([func,args...]{ + func(args...); + }); + }; +} + +#else // sigh... neither VS2013 nor GCC 4.8 can deal with the above + +// Visual Studio 2013 is broken and won't parse the above; 2015 fixes it. +inline auto on_main_thread_impl(std::function func) -> std::function +{ + return [func](){ call_on_main_thread([=]{ func(); }); }; +} +template +auto on_main_thread_impl(std::function func) -> std::function +{ + return [func](A1 a1){ call_on_main_thread([=]{ func(a1); }); }; +} +template +auto on_main_thread_impl(std::function func) -> std::function +{ + return [func](A1 a1, A2 a2){ call_on_main_thread([=]{ func(a1,a2); }); }; +} +template +auto on_main_thread_impl(std::function func) -> std::function +{ + return [func](A1 a1, A2 a2, A3 a3){ call_on_main_thread([=]{ func(a1, a2, a3); }); }; +} + +#endif + +/** + Wraps a callable into std::function called on the main thread. + + Returned function takes the same arguments as @a func and is called on the + main thread. I.e. the returned object may be called from any thread, but + @a func is guaranteed to execute on the main one. + + Notice that it is necessary to specify template parameters because they + cannot be deduced. + + Example usage: + + on_main_thread(this, [=](int i, std::string s){ + ... + }) + */ +template +auto on_main_thread(F&& func) -> std::function +{ + return on_main_thread_impl(std::function(func)); +} + +/** + Like on_main_thread<> but is only called if @a window is still valid + (using a wxWeakRef<> to check). + */ +template +auto on_main_thread_for_window(Class *self, F&& func) -> std::function +{ + wxWeakRef weak(self); + return on_main_thread([=](Args... args){ + if (weak) + func(args...); + }); +} + + +/** + Wraps a method into function called on the main thread. + + Returned function takes the same arguments as the provided method @a func + and is called on the main thread. I.e. the returned object may be called + from any thread, but @a func is guaranteed to execute on the main one. + + Example usage: + + on_main_thread(this, &CrowdinOpenDialog::OnFetchedProjects) + */ +template +auto on_main_thread(Class *self, void (Class::*func)(Args...)) -> std::function +{ + wxWeakRef weak(self); + return on_main_thread([=](Args... args){ + if (weak) + ((*weak.get()).*func)(args...); + }); +} + +#endif // Poedit_concurrency_h diff --git a/src/crowdin_client.cpp b/src/crowdin_client.cpp new file mode 100644 index 0000000..053611d --- /dev/null +++ b/src/crowdin_client.cpp @@ -0,0 +1,317 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + + +#include "crowdin_client.h" + +#include "http_client.h" +#include "keychain/keytar.h" +#include "str_helpers.h" + +#include +#include +#include + +#include +#include + +// GCC's libstdc++ didn't have functional std::regex implementation until 4.9 +#if (defined(__GNUC__) && !defined(__clang__) && !wxCHECK_GCC_VERSION(4,9)) + #include + using boost::regex; + using boost::regex_search; + using boost::smatch; +#else + #include + using std::regex; + using std::regex_search; + using std::smatch; +#endif + +// ---------------------------------------------------------------- +// Implementation +// ---------------------------------------------------------------- + +namespace +{ + +#define OAUTH_CLIENT_ID "poedit-y1aBMmDbm3s164dtJ4Ur150e2" +#define OAUTH_AUTHORIZE_URL "/oauth2/authorize?response_type=token&client_id=" OAUTH_CLIENT_ID +#define OAUTH_URI_PREFIX "poedit://auth/crowdin/" + +// Recursive extract files from /api/project/*/info response +void ExtractFilesFromInfo(std::vector& out, const json_dict& r, const std::wstring& prefix) +{ + r.iterate_array("files",[&out,prefix](const json_dict& i){ + auto name = prefix + i.wstring("name"); + auto node_type = i.utf8_string("node_type"); + if (node_type == "file") + { + out.push_back(name); + } + else if (node_type == "directory") + { + ExtractFilesFromInfo(out, i, name + L"/"); + } + }); +} + +} // anonymous namespace + + +std::string CrowdinClient::WrapLink(const std::string& page) +{ + std::string url("https://poedit.net/crowdin"); + if (!page.empty() && page != "/") + url += "?u=" + http_client::url_encode(page); + return url; +} + + +class CrowdinClient::crowdin_http_client : public http_client +{ +public: + crowdin_http_client(CrowdinClient& owner) + : http_client("https://api.crowdin.com"), m_owner(owner) + {} + +protected: + std::string parse_json_error(const json_dict& response) const override + { + auto msg = response.subdict("error").utf8_string("message"); + + // Translate commonly encountered messages: + if (msg == "Translations download is forbidden by project owner") + msg = _("Downloading translations is disabled in this project.").utf8_str(); + + return msg; + } + + void on_error_response(int& statusCode, std::string& message) override + { + if (statusCode == 401/*Unauthorized*/) + { + // message is e.g. "The access token provided is invalid" + message = _("Not authorized, please sign in again.").utf8_str(); + m_owner.SignOut(); + } + } + + CrowdinClient& m_owner; +}; + + +CrowdinClient::CrowdinClient() : m_api(new crowdin_http_client(*this)) +{ + SignInIfAuthorized(); +} + +CrowdinClient::~CrowdinClient() {} + + +void CrowdinClient::Authenticate(std::function callback) +{ + auto url = WrapLink(OAUTH_AUTHORIZE_URL); + m_authCallback = callback; + wxLaunchDefaultBrowser(url); +} + + +void CrowdinClient::HandleOAuthCallback(const std::string& uri) +{ + if (!m_authCallback) + return; + + const regex re("access_token=([^&]+)&"); + smatch m; + if (!regex_search(uri, m, re)) + return; + + SaveAndSetToken(m.str(1)); + + m_authCallback(); + m_authCallback = nullptr; +} + + +bool CrowdinClient::IsOAuthCallback(const std::string& uri) +{ + return boost::starts_with(uri, OAUTH_URI_PREFIX); +} + + +void CrowdinClient::GetUserInfo(std::function callback) +{ + m_api->get("/api/account/profile?json=", + // OK: + [callback](const json_dict& r){ + auto profile = r.subdict("profile"); + UserInfo u; + u.login = profile.wstring("login"); + u.name = !profile.is_null("name") ? profile.wstring("name") : u.login; + callback(u); + }, + // error: + [](std::exception_ptr) {} + ); +} + + +void CrowdinClient::GetUserProjects(std::function)> onResult, + error_func_t onError) +{ + m_api->get("/api/account/get-projects?json=&role=all", + // OK: + [onResult](const json_dict& r){ + std::vector all; + r.iterate_array("projects",[&all](const json_dict& i){ + all.push_back({i.wstring("name"), + i.utf8_string("identifier"), + (bool)i.number("downloadable")}); + }); + onResult(all); + }, + onError + ); +} + + +void CrowdinClient::GetProjectInfo(const std::string& project_id, + std::function onResult, + error_func_t onError) +{ + auto url = "/api/project/" + project_id + "/info?json=&project-identifier=" + project_id; + m_api->get(url, + // OK: + [onResult](const json_dict& r){ + ProjectInfo prj; + auto details = r.subdict("details"); + prj.name = details.wstring("name"); + prj.identifier = details.utf8_string("identifier"); + r.iterate_array("languages",[&prj](const json_dict& i){ + if (i.number("can_translate") != 0) + prj.languages.push_back(Language::TryParse(i.wstring("code"))); + }); + ExtractFilesFromInfo(prj.files, r, L"/"); + onResult(prj); + }, + onError + ); +} + + +void CrowdinClient::DownloadFile(const std::string& project_id, const std::wstring& file, const Language& lang, + const std::wstring& output_file, + std::function onSuccess, + error_func_t onError) +{ + // NB: "export_translated_only" means the translation is not filled with the source string + // if there's no translation, i.e. what Poedit wants. + auto url = "/api/project/" + project_id + "/export-file" + "?json=" + "&export_translated_only=1" + "&language=" + lang.LanguageTag() + + "&file=" + http_client::url_encode(file); + m_api->download(url, output_file, onSuccess, onError); +} + + +void CrowdinClient::UploadFile(const std::string& project_id, const std::wstring& file, const Language& lang, + const std::string& file_content, + std::function onSuccess, + error_func_t onError) +{ + auto url = "/api/project/" + project_id + "/upload-translation"; + + multipart_form_data data; + data.add_value("json", ""); + data.add_value("language", lang.LanguageTag()); + data.add_value("import_duplicates", "0"); + data.add_value("import_eq_suggestions", "0"); + data.add_file("files[" + str::to_utf8(file) + "]", "upload.po", file_content); + + m_api->post(url, data, onSuccess, onError); +} + + +bool CrowdinClient::IsSignedIn() const +{ + std::string token; + return keytar::GetPassword("Crowdin", &token); +} + + +void CrowdinClient::SignInIfAuthorized() +{ + std::string token; + if (keytar::GetPassword("Crowdin", &token)) + SetToken(token); +} + + +void CrowdinClient::SetToken(const std::string& token) +{ + m_api->set_authorization(!token.empty() ? "Bearer " + token : ""); +} + + +void CrowdinClient::SaveAndSetToken(const std::string& token) +{ + SetToken(token); + keytar::AddPassword("Crowdin", token); +} + + +void CrowdinClient::SignOut() +{ + m_api->set_authorization(""); + keytar::DeletePassword("Crowdin"); +} + + +// ---------------------------------------------------------------- +// Singleton management +// ---------------------------------------------------------------- + +static std::once_flag initializationFlag; +CrowdinClient* CrowdinClient::ms_instance = nullptr; + +CrowdinClient& CrowdinClient::Get() +{ + std::call_once(initializationFlag, []() { + ms_instance = new CrowdinClient; + }); + return *ms_instance; +} + +void CrowdinClient::CleanUp() +{ + if (ms_instance) + { + delete ms_instance; + ms_instance = nullptr; + } +} + diff --git a/src/crowdin_client.h b/src/crowdin_client.h new file mode 100644 index 0000000..fe4fe64 --- /dev/null +++ b/src/crowdin_client.h @@ -0,0 +1,137 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_crowdin_client_h +#define Poedit_crowdin_client_h + +#ifdef HAVE_HTTP_CLIENT + +#include +#include + +#include "language.h" + + +/** + Client to the Crowdin platform. + */ +class CrowdinClient +{ +public: + /// Return singleton instance of the client. + static CrowdinClient& Get(); + + /// Destroys the singleton, must be called (omly) on app shutdown. + static void CleanUp(); + + /// Is the user currently signed into Crowdin? + bool IsSignedIn() const; + + /// Wrap relative Crowdin link to absolute URL + static std::string WrapLink(const std::string& page); + + typedef std::function error_func_t; + + /** + Authenticate with Crowdin. + + This opens the browser to authenticate the app. The app must handle + poedit:// URL and call HandleOAuthCallback. @a callback will be + called after receiving the OAuth token. + */ + void Authenticate(std::function callback); + void HandleOAuthCallback(const std::string& uri); + bool IsOAuthCallback(const std::string& uri); + + /// Sign out of Crowdin, forget the token + void SignOut(); + + /// Information about logged-in user + struct UserInfo + { + std::wstring name; + std::wstring login; + }; + + /// Retrieve information about the current user asynchronously + void GetUserInfo(std::function callback); + + /// Project listing info + struct ProjectListing + { + std::wstring name; + std::string identifier; + bool downloadable; + }; + + /// Retrieve listing of projects accessible to the user + void GetUserProjects(std::function)> onResult, + error_func_t onError); + + /// Project detailed information + struct ProjectInfo + { + std::wstring name; + std::string identifier; + std::vector languages; + std::vector files; + }; + + /// Retrieve listing of projects accessible to the user + void GetProjectInfo(const std::string& project_id, + std::function onResult, + error_func_t onError); + + /// Asynchronously download specific Crowdin file into @a output_file. + void DownloadFile(const std::string& project_id, const std::wstring& file, const Language& lang, + const std::wstring& output_file, + std::function onSuccess, + error_func_t onError); + + /// Asynchronously upload specific Crowdin file data. + void UploadFile(const std::string& project_id, const std::wstring& file, const Language& lang, + const std::string& file_content, + std::function onSuccess, + error_func_t onError); + +private: + CrowdinClient(); + ~CrowdinClient(); + + void SignInIfAuthorized(); + void SetToken(const std::string& token); + void SaveAndSetToken(const std::string& token); + + class crowdin_http_client; + std::unique_ptr m_api; + + std::function m_authCallback; + + static CrowdinClient *ms_instance; +}; + +#endif // HAVE_HTTP_CLIENT + +#endif // Poedit_crowdin_client_h diff --git a/src/crowdin_gui.cpp b/src/crowdin_gui.cpp new file mode 100644 index 0000000..f231a77 --- /dev/null +++ b/src/crowdin_gui.cpp @@ -0,0 +1,646 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + + +#include "crowdin_gui.h" + +#include "crowdin_client.h" + +#include "catalog.h" +#include "concurrency.h" +#include "customcontrols.h" +#include "errors.h" +#include "hidpi.h" +#include "languagectrl.h" +#include "str_helpers.h" +#include "utility.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !wxCHECK_VERSION(3,1,0) + #define CenterVertical() Center() +#endif + +#include + +CrowdinLoginPanel::CrowdinLoginPanel(wxWindow *parent, int flags) + : wxPanel(parent, wxID_ANY), + m_state(State::Uninitialized) +{ + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + sizer->SetMinSize(PX(400), -1); + SetSizer(sizer); + + sizer->AddSpacer(PX(10)); + auto logo = new wxStaticBitmap(this, wxID_ANY, wxArtProvider::GetBitmap("CrowdinLogo")); + logo->SetCursor(wxCURSOR_HAND); + logo->Bind(wxEVT_LEFT_UP, [](wxMouseEvent&){ wxLaunchDefaultBrowser(CrowdinClient::WrapLink("/")); }); + sizer->Add(logo, wxSizerFlags().PXDoubleBorder(wxBOTTOM)); + auto explain = new ExplanationLabel(this, _("Crowdin is an online localization management platform and collaborative translation tool. Poedit can seamlessly sync PO files managed at Crowdin.")); + sizer->Add(explain, wxSizerFlags().Expand()); + + m_loginInfo = new wxBoxSizer(wxHORIZONTAL); + auto loginInfoContainer = new wxBoxSizer(wxVERTICAL); + loginInfoContainer->SetMinSize(-1, PX(50)); + loginInfoContainer->AddStretchSpacer(); + loginInfoContainer->Add(m_loginInfo, wxSizerFlags().Center()); + loginInfoContainer->AddStretchSpacer(); + + sizer->Add(loginInfoContainer, wxSizerFlags().Expand().ReserveSpaceEvenIfHidden().Border(wxTOP|wxBOTTOM, PX(10))); + + m_signIn = new wxButton(this, wxID_ANY, MSW_OR_OTHER(_("Sign in"), _("Sign In"))); + m_signIn->Bind(wxEVT_BUTTON, &CrowdinLoginPanel::OnSignIn, this); + m_signOut= new wxButton(this, wxID_ANY, MSW_OR_OTHER(_("Sign out"), _("Sign Out"))); + m_signOut->Bind(wxEVT_BUTTON, &CrowdinLoginPanel::OnSignOut, this); + + auto learnMore = new LearnAboutCrowdinLink(this); + + auto buttons = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(buttons, wxSizerFlags().Expand().Border(wxBOTTOM, 1)); + buttons->Add(learnMore, wxSizerFlags().Center().Border(wxLEFT, PX(LearnMoreLink::EXTRA_INDENT))); + buttons->AddStretchSpacer(); + buttons->Add(m_signIn, wxSizerFlags()); + buttons->Add(m_signOut, wxSizerFlags()); + + if (flags & DialogButtons) + { + auto cancel = new wxButton(this, wxID_CANCEL); +#ifdef __WXMSW__ + buttons->Add(cancel, wxSizerFlags().Border(wxLEFT, PX(3))); +#else + buttons->Insert(2, cancel, wxSizerFlags().Border(wxRIGHT, PX(6))); +#endif + m_signIn->SetDefault(); + m_signIn->SetFocus(); + } + + ChangeState(State::Uninitialized); +} + +void CrowdinLoginPanel::EnsureInitialized() +{ + if (m_state != State::Uninitialized) + return; + + if (CrowdinClient::Get().IsSignedIn()) + UpdateUserInfo(); + else + ChangeState(State::SignedOut); +} + +void CrowdinLoginPanel::ChangeState(State state) +{ + m_state = state; + + bool canSignIn = (state == State::SignedOut || state == State::Authenticating); + auto sizer = m_signIn->GetContainingSizer(); + m_signIn->GetContainingSizer()->Show(m_signIn, canSignIn); + if (m_signOut) + m_signOut->GetContainingSizer()->Show(m_signOut, !canSignIn); + sizer->Layout(); + + CreateLoginInfoControls(state); +} + +void CrowdinLoginPanel::CreateLoginInfoControls(State state) +{ + auto sizer = m_loginInfo; + sizer->Clear(/*delete_windows=*/true); + + switch (state) + { + case State::Authenticating: + case State::UpdatingInfo: + { + auto text = (state == State::Authenticating) + ? _(L"Waiting for authentication…") + : _(L"Updating user information…"); + auto waitingLabel = new ActivityIndicator(this); + sizer->Add(waitingLabel, wxSizerFlags().Center()); + waitingLabel->Start(text); + break; + } + + case State::Uninitialized: + case State::SignedOut: + { + // nothing to show in the UI except for "sign in" button + break; + }; + + case State::SignedIn: + { + auto account = new wxStaticText(this, wxID_ANY, _("Signed in as:")); + account->SetForegroundColour(SecondaryLabel::GetTextColor()); + auto name = new wxStaticText(this, wxID_ANY, m_userName); + name->SetFont(name->GetFont().Bold()); + auto username = new SecondaryLabel(this, m_userLogin); + + sizer->Add(account, wxSizerFlags().PXBorder(wxRIGHT)); + auto box = new wxBoxSizer(wxVERTICAL); + box->Add(name, wxSizerFlags().Left()); + box->Add(username, wxSizerFlags().Left()); + sizer->Add(box); + break; + } + } + + Layout(); +} + +void CrowdinLoginPanel::UpdateUserInfo() +{ + ChangeState(State::UpdatingInfo); + + CrowdinClient::Get().GetUserInfo(on_main_thread_for_window( + this, + [=](CrowdinClient::UserInfo u) { + m_userName = u.name; + m_userLogin = u.login; + ChangeState(State::SignedIn); + })); +} + +void CrowdinLoginPanel::OnSignIn(wxCommandEvent&) +{ + ChangeState(State::Authenticating); + CrowdinClient::Get().Authenticate(on_main_thread(this, &CrowdinLoginPanel::OnUserSignedIn)); +} + +void CrowdinLoginPanel::OnUserSignedIn() +{ + UpdateUserInfo(); + Raise(); +} + +void CrowdinLoginPanel::OnSignOut(wxCommandEvent&) +{ + CrowdinClient::Get().SignOut(); + ChangeState(State::SignedOut); +} + + +LearnAboutCrowdinLink::LearnAboutCrowdinLink(wxWindow *parent, const wxString& text) + : LearnMoreLink(parent, + CrowdinClient::WrapLink("/"), + text.empty() ? (MSW_OR_OTHER(_("Learn more about Crowdin"), _("Learn More About Crowdin"))) : text) +{ +} + + + +namespace +{ + +class CrowdinLoginDialog : public wxDialog +{ +public: + CrowdinLoginDialog(wxWindow *parent) : wxDialog(parent, wxID_ANY, _("Sign in to Crowdin")) + { + auto topsizer = new wxBoxSizer(wxHORIZONTAL); + auto panel = new Panel(this); + panel->SetClientSize(panel->GetBestSize()); + topsizer->Add(panel, wxSizerFlags(1).Expand().Border(wxALL, PX(15))); + SetSizerAndFit(topsizer); + CenterOnParent(); + } + +private: + class Panel : public CrowdinLoginPanel + { + public: + Panel(CrowdinLoginDialog *parent) : CrowdinLoginPanel(parent, DialogButtons), m_owner(parent) + { + EnsureInitialized(); + } + + protected: + void OnUserSignedIn() override + { + m_owner->Raise(); + m_owner->EndModal(wxID_OK); + } + + CrowdinLoginDialog *m_owner; + }; +}; + + +class CrowdinOpenDialog : public wxDialog +{ +public: + CrowdinOpenDialog(wxWindow *parent) : wxDialog(parent, wxID_ANY, _("Open Crowdin translation")) + { + auto topsizer = new wxBoxSizer(wxVERTICAL); + topsizer->SetMinSize(PX(400), -1); + + topsizer->AddSpacer(PX(10)); + + auto pickers = new wxFlexGridSizer(2, wxSize(PX(5),PX(6))); + pickers->AddGrowableCol(1); + topsizer->Add(pickers, wxSizerFlags().Expand().PXDoubleBorderAll()); + + pickers->Add(new wxStaticText(this, wxID_ANY, _("Project:")), + wxSizerFlags().CenterVertical().Right().BORDER_OSX(wxTOP, 1)); + m_project = new wxChoice(this, wxID_ANY); + pickers->Add(m_project, wxSizerFlags().Expand().CenterVertical()); + + pickers->Add(new wxStaticText(this, wxID_ANY, _("Language:")), + wxSizerFlags().CenterVertical().Right().BORDER_OSX(wxTOP, 1)); + m_language = new wxChoice(this, wxID_ANY); + pickers->Add(m_language, wxSizerFlags().Expand().CenterVertical()); + + pickers->AddSpacer(PX(5)); + pickers->AddSpacer(PX(5)); + + pickers->Add(new wxStaticText(this, wxID_ANY, _("File:")), + wxSizerFlags().CenterVertical().Right().BORDER_OSX(wxTOP, 1)); + m_file = new wxChoice(this, wxID_ANY); + pickers->Add(m_file, wxSizerFlags().Expand().CenterVertical()); + + m_activity = new ActivityIndicator(this); + topsizer->AddSpacer(PX(5)); + topsizer->Add(m_activity, wxSizerFlags().Expand().PXDoubleBorder(wxLEFT|wxRIGHT)); + topsizer->AddSpacer(PX(5)); + + auto buttons = CreateButtonSizer(wxOK | wxCANCEL); + auto ok = static_cast(FindWindow(wxID_OK)); + ok->SetDefault(); + #ifdef __WXOSX__ + topsizer->Add(buttons, wxSizerFlags().Expand()); + #else + topsizer->Add(buttons, wxSizerFlags().Expand().PXBorderAll()); + topsizer->AddSpacer(PX(5)); + #endif + + SetSizerAndFit(topsizer); + CenterOnParent(); + + m_project->Bind(wxEVT_CHOICE, [=](wxCommandEvent&){ OnProjectSelected(); }); + m_file->Bind(wxEVT_CHOICE, [=](wxCommandEvent&){ OnFileSelected(); }); + ok->Bind(wxEVT_UPDATE_UI, &CrowdinOpenDialog::OnUpdateOK, this); + ok->Bind(wxEVT_BUTTON, &CrowdinOpenDialog::OnOK, this); + + ok->Disable(); + EnableAllChoices(false); + + FetchProjects(); + } + + wxString OutLocalFilename; + +private: + void EnableAllChoices(bool enable = true) + { + m_project->Enable(enable); + m_file->Enable(enable); + m_language->Enable(enable); + } + + void FetchProjects() + { + m_activity->Start(); + CrowdinClient::Get().GetUserProjects( + on_main_thread(this, &CrowdinOpenDialog::OnFetchedProjects), + m_activity->HandleError + ); + } + + void OnFetchedProjects(const std::vector& prjs) + { + m_projects = prjs; + m_project->Append(""); + for (auto& p: prjs) + m_project->Append(p.name); + m_project->Enable(!prjs.empty()); + + if (prjs.empty()) + m_activity->StopWithError(_("No translation projects listed in your Crowdin account.")); + else + m_activity->Stop(); + + if (prjs.size() == 1) + { + m_project->SetSelection(1); + OnProjectSelected(); + } + } + + void OnProjectSelected() + { + auto sel = m_project->GetSelection(); + if (sel > 0) + { + m_activity->Start(); + EnableAllChoices(false); + CrowdinClient::Get().GetProjectInfo( + m_projects[sel-1].identifier, + on_main_thread(this, &CrowdinOpenDialog::OnFetchedProjectInfo), + m_activity->HandleError + ); + } + } + + void OnFetchedProjectInfo(const CrowdinClient::ProjectInfo& prj) + { + m_info = prj; + // Put supported files first in the list: + std::vector f_unsup; + m_info.files.clear(); + m_supportedFilesCount = 0; + for (auto& i: prj.files) + { + if (IsFileSupported(i)) + { + m_info.files.push_back(i); + m_supportedFilesCount++; + } + else + { + f_unsup.push_back(i); + } + } + std::move(f_unsup.begin(), f_unsup.end(), std::inserter(m_info.files, m_info.files.end())); + + m_language->Clear(); + m_language->Append(""); + for (auto& i: m_info.languages) + m_language->Append(i.DisplayName()); + + m_file->Clear(); + m_file->Append(""); + for (auto& i: m_info.files) + { + if (IsFileSupported(i)) + { + m_file->Append(i); + } + else + { + /// TRANSLATORS: This is a file selector list, %s is filename, and it is shown for Crowdin files not editable in Poedit + m_file->Append(wxString::Format(L"%s — not supported", i)); + } + } + + EnableAllChoices(); + m_activity->Stop(); + + if (m_info.languages.size() == 1) + { + m_language->SetSelection(1); + } + else + { + auto preferred = LanguageDialog::GetLastChosen(); + if (preferred.IsValid()) + { + for (size_t i = 0; i < m_info.languages.size(); i++) + { + if (m_info.languages[i] == preferred) + { + m_language->SetSelection(1 + int(i)); + break; + } + } + } + } + + if (m_supportedFilesCount == 1) + m_file->SetSelection(1); + + if (m_supportedFilesCount == 0) + { + m_activity->StopWithError(_("This project has no files that can be translated in Poedit.")); + m_file->Disable(); + m_language->Disable(); + } + } + + void OnFileSelected() + { + auto filesel = m_file->GetSelection(); + if (filesel - 1 < m_supportedFilesCount) + m_activity->Stop(); + else + m_activity->StopWithError(_(L"This file can only be edited in Crowdin’s web interface.")); + } + + void OnUpdateOK(wxUpdateUIEvent& e) + { + auto filesel = m_file->GetSelection(); + e.Enable(!m_activity->IsRunning() && + m_project->GetSelection() > 0 && + m_language->GetSelection() > 0 && + filesel > 0 && filesel - 1 < m_supportedFilesCount); + } + + void OnOK(wxCommandEvent&) + { + auto crowdin_prj = m_info.identifier; + auto crowdin_file = m_info.files[m_file->GetSelection() - 1]; + auto crowdin_lang = m_info.languages[m_language->GetSelection() - 1]; + LanguageDialog::SetLastChosen(crowdin_lang); + OutLocalFilename = CreateLocalFilename(crowdin_file, crowdin_lang); + + m_activity->Start(_(L"Downloading latest translations…")); + + auto outfile = std::make_shared(OutLocalFilename); + CrowdinClient::Get().DownloadFile( + crowdin_prj, crowdin_file, crowdin_lang, + outfile->FileName().ToStdWstring(), + on_main_thread_for_window<>(this, [=]{ + outfile->Commit(); + AcceptAndClose(); + }), + m_activity->HandleError + ); + } + + bool IsFileSupported(const wxString& name) const + { + return boost::ends_with(name, ".po") || boost::ends_with(name, ".pot"); + } + + wxString CreateLocalFilename(const wxString& name, const Language& lang) + { + wxString cache; + #if defined(__WXOSX__) + cache = wxGetHomeDir() + "/Library/Caches/net.poedit.Poedit"; + #elif defined(__UNIX__) + if (!wxGetEnv("XDG_CACHE_HOME", &cache)) + cache = wxGetHomeDir() + "/.cache"; + cache += "/poedit"; + #else + cache = wxStandardPaths::Get().GetUserDataDir() + wxFILE_SEP_PATH + "Cache"; + #endif + + cache += wxFILE_SEP_PATH; + cache += "Crowdin"; + + if (!wxFileName::DirExists(cache)) + wxFileName::Mkdir(cache, wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); + + auto basename = name.AfterLast('/').BeforeLast('.'); + + return wxString::Format("%s%c%s_%s_%s.po", cache, wxFILE_SEP_PATH, m_info.name, basename, lang.Code()); + } + +private: + wxButton *m_ok; + wxChoice *m_project, *m_file, *m_language; + ActivityIndicator *m_activity; + + std::vector m_projects; + CrowdinClient::ProjectInfo m_info; + int m_supportedFilesCount; +}; + + +class SyncProgressDialog : public wxDialog +{ +public: + SyncProgressDialog(wxWindow *parent) + : wxDialog(parent, wxID_ANY, _("Syncing with Crowdin"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxSYSTEM_MENU) + { + auto sizer = new wxBoxSizer(wxVERTICAL); + sizer->SetMinSize(PX(300), -1); + Activity = new ActivityIndicator(this); + sizer->AddStretchSpacer(); + sizer->Add(Activity, wxSizerFlags().Expand().Border(wxALL, PX(25))); + sizer->AddStretchSpacer(); + SetSizerAndFit(sizer); + CenterOnParent(); + } + + ActivityIndicator *Activity; +}; + + +} // anonymous namespace + + +void CrowdinOpenFile(wxWindow *parent, std::function onLoaded) +{ + if (!CrowdinClient::Get().IsSignedIn()) + { + wxWindowPtr login(new CrowdinLoginDialog(parent)); + login->ShowWindowModalThenDo([login,parent,onLoaded](int retval){ + if (retval == wxID_OK) + CrowdinOpenFile(parent, onLoaded); + }); + return; + } + + wxWindowPtr dlg(new CrowdinOpenDialog(parent)); + + dlg->ShowWindowModalThenDo([dlg,onLoaded](int retval) { + dlg->Hide(); + if (retval == wxID_OK) + onLoaded(dlg->OutLocalFilename); + }); +} + + +void CrowdinSyncFile(wxWindow *parent, std::shared_ptr catalog, + std::function)> onDone) +{ + if (!CrowdinClient::Get().IsSignedIn()) + { + wxWindowPtr login(new CrowdinLoginDialog(parent)); + login->ShowWindowModalThenDo([login,parent,catalog,onDone](int retval){ + if (retval == wxID_OK) + CrowdinSyncFile(parent, catalog, onDone); + }); + return; + } + + const auto& header = catalog->Header(); + auto crowdin_prj = header.GetHeader("X-Crowdin-Project"); + auto crowdin_file = header.GetHeader("X-Crowdin-File"); + auto crowdin_lang = header.HasHeader("X-Crowdin-Language") + ? Language::TryParse(header.GetHeader("X-Crowdin-Language").ToStdWstring()) + : catalog->GetLanguage(); + + wxWindowPtr dlg(new SyncProgressDialog(parent)); + + auto handle_error = on_main_thread([=](std::exception_ptr e){ + dlg->EndModal(wxID_CANCEL); + wxWindowPtr err(new wxMessageDialog + ( + parent, + _("Syncing with Crowdin failed."), + _("Crowdin error"), + wxOK | wxICON_ERROR + )); + err->SetExtendedMessage(DescribeException(e)); + err->ShowWindowModalThenDo([err](int){}); + }); + + dlg->Activity->Start(_(L"Uploading translations…")); + + // TODO: nicer API for this. + // This must be done right after entering the modal loop (on non-OSX) + dlg->CallAfter([=]{ + CrowdinClient::Get().UploadFile( + str::to_utf8(crowdin_prj), str::to_wstring(crowdin_file), crowdin_lang, + catalog->SaveToBuffer(), + [=]{ + auto tmpdir = std::make_shared(); + auto outfile = tmpdir->CreateFileName("crowdin.po"); + + call_on_main_thread([=]{ + dlg->Activity->Start(_(L"Downloading latest translations…")); + }); + + CrowdinClient::Get().DownloadFile( + str::to_utf8(crowdin_prj), str::to_wstring(crowdin_file), crowdin_lang, + outfile.ToStdWstring(), + on_main_thread([=]{ + CatalogPtr newcat = std::make_shared(outfile); + newcat->SetFileName(catalog->GetFileName()); + + tmpdir->Clear(); + dlg->EndModal(wxID_OK); + + onDone(newcat); + }), + handle_error); + }, + handle_error); + }); + + dlg->ShowWindowModal(); +} diff --git a/src/crowdin_gui.h b/src/crowdin_gui.h new file mode 100644 index 0000000..56a5f94 --- /dev/null +++ b/src/crowdin_gui.h @@ -0,0 +1,109 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_crowdin_gui_h +#define Poedit_crowdin_gui_h + +#ifdef HAVE_HTTP_CLIENT + +#include "catalog.h" +#include "customcontrols.h" + +#include + +class WXDLLIMPEXP_FWD_CORE wxBoxSizer; +class WXDLLIMPEXP_FWD_CORE wxButton; + + +/** + Panel used to sign in into Crowdin. + */ +class CrowdinLoginPanel : public wxPanel +{ +public: + enum Flags + { + DialogButtons = 1 + }; + + CrowdinLoginPanel(wxWindow *parent, int flags = 0); + + /// Call this when the window is first shown + void EnsureInitialized(); + +protected: + enum class State + { + Uninitialized, + Authenticating, + SignedIn, + SignedOut, + UpdatingInfo + }; + + void ChangeState(State state); + void CreateLoginInfoControls(State state); + void UpdateUserInfo(); + + void OnSignIn(wxCommandEvent&); + void OnSignOut(wxCommandEvent&); + virtual void OnUserSignedIn(); + + State m_state; + wxBoxSizer *m_loginInfo; + wxButton *m_signIn, *m_signOut; + wxString m_userName, m_userLogin; +}; + + +/// Link to learn about Crowdin +class LearnAboutCrowdinLink : public LearnMoreLink +{ +public: + LearnAboutCrowdinLink(wxWindow *parent, const wxString& text = ""); +}; + + +/** + Let the user choose a Crowdin file, download it and open in Poedit. + + @param parent PoeditFrame the UI should be shown under. + @param onLoaded Called with the name of loaded PO file. + */ +void CrowdinOpenFile(wxWindow *parent, std::function onLoaded); + +/** + Synces the catalog with Crowdin, uploading and downloading translations. + + @param parent PoeditFrame the UI should be shown under. + @param catalog Catalog to sync. + @param onDone Called with the (new) updated catalog instance. + */ +void CrowdinSyncFile(wxWindow *parent, std::shared_ptr catalog, + std::function)> onDone); + +#endif // HAVE_HTTP_CLIENT + +#endif // Poedit_crowdin_gui_h diff --git a/src/customcontrols.cpp b/src/customcontrols.cpp new file mode 100644 index 0000000..b0dbea1 --- /dev/null +++ b/src/customcontrols.cpp @@ -0,0 +1,386 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "customcontrols.h" + +#include "concurrency.h" +#include "errors.h" +#include "hidpi.h" + +#include +#include +#include +#include +#include +#include +#include + +#if wxCHECK_VERSION(3,1,0) + #include +#else + #include "wx_backports/activityindicator.h" +#endif + +#include +#ifdef __WXGTK__ +#include +#endif + +#include "str_helpers.h" +#include "unicode_helpers.h" + +#include +#include + +namespace +{ + +wxString WrapTextAtWidth(const wxString& text_, int width, Language lang, wxWindow *wnd) +{ + if (text_.empty()) + return text_; + +#ifdef BIDI_NEEDS_DIRECTION_ON_EACH_LINE + wchar_t directionMark = 0; + if (bidi::is_direction_mark(*text_.begin())) + directionMark = *text_.begin(); +#endif + + auto text = str::to_icu(text_); + + static std::map> lang_iters; + std::shared_ptr iter; + auto lang_name = lang.IcuLocaleName(); + auto li = lang_iters.find(lang_name); + if (li == lang_iters.end()) + { + UErrorCode err = U_ZERO_ERROR; + iter.reset(icu::BreakIterator::createLineInstance(lang.IsValid() ? lang.ToIcu() : icu::Locale(), err)); + if (!iter) + iter.reset(icu::BreakIterator::createLineInstance(icu::Locale::getEnglish(), err)); + lang_iters[lang_name] = iter; + } + else + { + iter = li->second; + } + + iter->setText(text); + + wxString out; + out.reserve(text_.length() + 10); + + int32_t lineStart = 0; + wxString previousSubstr; + + for (int32_t pos = iter->next(); pos != icu::BreakIterator::DONE; pos = iter->next()) + { + auto substr = str::to_wx(text.tempSubStringBetween(lineStart, pos)); + + if (wnd->GetTextExtent(substr).x > width) + { + auto previousPos = iter->previous(); + if (previousPos == lineStart || previousPos == icu::BreakIterator::DONE) + { + // line is too large but we can't break it, so have no choice but not to wrap + out += substr; + lineStart = pos; + } + else + { + // need to wrap at previous linebreak position + out += previousSubstr; + lineStart = previousPos; + } + + out += '\n'; +#ifdef BIDI_NEEDS_DIRECTION_ON_EACH_LINE + if (directionMark) + out += directionMark; +#endif + + previousSubstr.clear(); + } + else if (pos > 0 && text[pos-1] == '\n') // forced line feed + { + out += substr; + lineStart = pos; + previousSubstr.clear(); + } + else + { + previousSubstr = substr; + } + } + + if (!previousSubstr.empty()) + { + out += previousSubstr; + } + + if (out.Last() == '\n') + out.RemoveLast(); + + return out; +} + + +} // anonymous namespace + + +AutoWrappingText::AutoWrappingText(wxWindow *parent, const wxString& label) + : wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE), + m_text(label), + m_wrapWidth(-1) +{ + m_text.Replace("\n", " "); + + SetInitialSize(wxSize(10,10)); + Bind(wxEVT_SIZE, &AutoWrappingText::OnSize, this); +} + +void AutoWrappingText::SetLanguage(Language lang) +{ + m_language = lang; + SetAlignment(m_language.Direction()); +} + +void AutoWrappingText::SetAlignment(TextDirection dir) +{ + // a quirk of wx API: if the current locale is RTL, the meaning of L and R is reversed + // for alignments + bool isRTL = (dir == TextDirection::RTL); + if (GetLayoutDirection() == wxLayout_RightToLeft) + isRTL = !isRTL; + + const int align = isRTL ? wxALIGN_RIGHT : wxALIGN_LEFT; + if (HasFlag(align)) + return; + SetWindowStyleFlag(wxST_NO_AUTORESIZE | align); +} + +void AutoWrappingText::SetAndWrapLabel(const wxString& label) +{ + m_text = bidi::platform_mark_direction(label); + if (!m_language.IsValid()) + SetAlignment(bidi::get_base_direction(m_text)); + + wxWindowUpdateLocker lock(this); + m_wrapWidth = GetSize().x; + SetLabelText(WrapTextAtWidth(label, m_wrapWidth, m_language, this)); + + InvalidateBestSize(); + SetMinSize(wxDefaultSize); + SetMinSize(GetBestSize()); +} + +void AutoWrappingText::OnSize(wxSizeEvent& e) +{ + e.Skip(); + int w = wxMax(0, e.GetSize().x - PX(4)); + if (w == m_wrapWidth) + return; + + wxWindowUpdateLocker lock(this); + + m_wrapWidth = w; + SetLabel(WrapTextAtWidth(m_text, w, m_language, this)); + + InvalidateBestSize(); + SetMinSize(wxDefaultSize); + SetMinSize(GetBestSize()); +} + + +SelectableAutoWrappingText::SelectableAutoWrappingText(wxWindow *parent, const wxString& label) + : AutoWrappingText(parent, label) +{ +#if defined(__WXOSX__) + NSTextField *view = (NSTextField*)GetHandle(); + [view setSelectable:YES]; +#elif defined(__WXGTK__) + GtkLabel *view = GTK_LABEL(GetHandle()); + gtk_label_set_selectable(view, TRUE); +#else + // at least allow copying + static wxWindowID idCopy = wxNewId(); + Bind(wxEVT_CONTEXT_MENU, [=](wxContextMenuEvent&){ + wxMenu *menu = new wxMenu(); + menu->Append(idCopy, _("&Copy")); + PopupMenu(menu); + }); + Bind(wxEVT_MENU, [=](wxCommandEvent&){ + wxClipboardLocker lock; + wxClipboard::Get()->SetData(new wxTextDataObject(m_text)); + }, idCopy); +#endif +} + + +ExplanationLabel::ExplanationLabel(wxWindow *parent, const wxString& label) + : AutoWrappingText(parent, label) +{ +#if defined(__WXOSX__) + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#elif defined(__WXGTK__) + #if wxCHECK_VERSION(3,1,0) + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + #else + SetFont(GetFont().Smaller()); + #endif +#endif +#ifndef __WXGTK__ + SetForegroundColour(GetTextColor()); +#endif +} + +wxColour ExplanationLabel::GetTextColor() +{ +#if defined(__WXOSX__) + return wxColour("#777777"); +#elif defined(__WXGTK__) + return wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); +#else + return wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT); +#endif +} + +SecondaryLabel::SecondaryLabel(wxWindow *parent, const wxString& label) + : wxStaticText(parent, wxID_ANY, label) +{ +#if defined(__WXOSX__) + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#elif defined(__WXGTK__) + #if wxCHECK_VERSION(3,1,0) + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + #else + SetFont(GetFont().Smaller()); + #endif +#endif +#ifndef __WXGTK__ + SetForegroundColour(GetTextColor()); +#endif +} + + +LearnMoreLink::LearnMoreLink(wxWindow *parent, const wxString& url, wxString label, wxWindowID winid) +{ + if (label.empty()) + { +#ifdef __WXMSW__ + label = _("Learn more"); +#else + label = _("Learn More"); +#endif + } + + wxHyperlinkCtrl::Create(parent, winid, label, url); + SetNormalColour("#2F79BE"); + SetVisitedColour("#2F79BE"); + SetHoverColour("#3D8DD5"); + +#ifdef __WXOSX__ + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + SetFont(GetFont().Underlined()); +#endif +} + + +wxObject *LearnMoreLinkXmlHandler::DoCreateResource() +{ + auto w = new LearnMoreLink(m_parentAsWindow, GetText("url"), GetText("label"), GetID()); + w->SetName(GetName()); + SetupWindow(w); + return w; +} + +bool LearnMoreLinkXmlHandler::CanHandle(wxXmlNode *node) +{ + return IsOfClass(node, "LearnMoreLink"); +} + + +ActivityIndicator::ActivityIndicator(wxWindow *parent) + : wxWindow(parent, wxID_ANY), m_running(false) +{ + auto sizer = new wxBoxSizer(wxHORIZONTAL); + SetSizer(sizer); + + m_spinner = new wxActivityIndicator(this, wxID_ANY); + m_spinner->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + m_label = new wxStaticText(this, wxID_ANY, ""); +#ifdef __WXOSX__ + m_label->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + sizer->Add(m_spinner, wxSizerFlags().Center().Border(wxRIGHT, PX(4))); + sizer->Add(m_label, wxSizerFlags(1).Center()); + + HandleError = on_main_thread_for_window(this, [=](std::exception_ptr e){ + StopWithError(DescribeException(e)); + }); +} + +void ActivityIndicator::Start(const wxString& msg) +{ + m_running = true; + + m_label->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); + m_label->SetLabel(msg); + + auto sizer = GetSizer(); + sizer->Show(m_spinner); + sizer->Show(m_label, !msg.empty()); + Layout(); + + m_spinner->Start(); +} + +void ActivityIndicator::Stop() +{ + m_running = false; + + m_spinner->Stop(); + m_label->SetLabel(""); + + auto sizer = GetSizer(); + sizer->Hide(m_spinner); + sizer->Hide(m_label); + Layout(); +} + +void ActivityIndicator::StopWithError(const wxString& msg) +{ + m_running = false; + + m_spinner->Stop(); + m_label->SetForegroundColour(*wxRED); + m_label->SetLabel(msg); + + auto sizer = GetSizer(); + sizer->Hide(m_spinner); + sizer->Show(m_label); + Layout(); +} diff --git a/src/customcontrols.h b/src/customcontrols.h new file mode 100644 index 0000000..30544fd --- /dev/null +++ b/src/customcontrols.h @@ -0,0 +1,164 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_customcontrols_h +#define Poedit_customcontrols_h + +#include "language.h" + +#include +#include +#include + +class WXDLLIMPEXP_ADV wxActivityIndicator; + +#include +#include + + +// Label marking a subsection of a dialog: +class HeadingLabel : public wxStaticText +{ +public: + HeadingLabel(wxWindow *parent, const wxString& label) + : wxStaticText(parent, wxID_ANY, label) + { + SetFont(GetFont().Bold()); + } + +}; + +// Label that auto-wraps itself to fit surrounding control's width. +class AutoWrappingText : public wxStaticText +{ +public: + AutoWrappingText(wxWindow *parent, const wxString& label); + + void SetLanguage(Language lang); + void SetAlignment(TextDirection dir); + + void SetAndWrapLabel(const wxString& label); + +protected: + void OnSize(wxSizeEvent& e); + + wxString m_text; + int m_wrapWidth; + Language m_language; +}; + +/// Like AutoWrappingText, but allows selecting (OS X) or at least copying (Windows) +/// the text too. +class SelectableAutoWrappingText : public AutoWrappingText +{ +public: + SelectableAutoWrappingText(wxWindow *parent, const wxString& label); +}; + + +/** + Longer, often multiline, explanation label used to provide more information + about the effects of some less obvious settings. Typeset using smaller font + on OS X and grey appearance. Auto-wraps itself to fit surrounding control's + width. + */ +class ExplanationLabel : public AutoWrappingText +{ +public: + ExplanationLabel(wxWindow *parent, const wxString& label); + +#if defined(__WXOSX__) + static const int CHECKBOX_INDENT = 19; +#elif defined(__WXMSW__) + static const int CHECKBOX_INDENT = 17; +#elif defined(__WXGTK__) + static const int CHECKBOX_INDENT = 25; +#endif + + static wxColour GetTextColor(); +}; + +/// Like ExplanationLabel, but nonwrapping +class SecondaryLabel : public wxStaticText +{ +public: + SecondaryLabel(wxWindow *parent, const wxString& label); + + static wxColour GetTextColor() { return ExplanationLabel::GetTextColor(); } +}; + + +/// "Learn more" hyperlink for dialogs. +class LearnMoreLink : public wxHyperlinkCtrl +{ +public: + LearnMoreLink(wxWindow *parent, const wxString& url, wxString label = wxString(), wxWindowID winid = wxID_ANY); + +#if defined(__WXOSX__) + static const int EXTRA_INDENT = 2; +#elif defined(__WXMSW__) || defined(__WXGTK__) + static const int EXTRA_INDENT = 0; +#endif +}; + +class LearnMoreLinkXmlHandler : public wxXmlResourceHandler +{ +public: + LearnMoreLinkXmlHandler() {} + wxObject *DoCreateResource() override; + bool CanHandle(wxXmlNode *node) override; +}; + + +/// Indicator of background activity, using spinners where appropriate. +class ActivityIndicator : public wxWindow +{ +public: + ActivityIndicator(wxWindow *parent); + + /// Start indicating, with optional progress label. + void Start(const wxString& msg = ""); + + /// Stop the indicator. + void Stop(); + + /// Stop the indicator and report error in its place. + void StopWithError(const wxString& msg); + + /// Is between Start() and Stop() calls? + bool IsRunning() const { return m_running; } + + /// Convenience function for showing error message in the indicator + std::function HandleError; + + bool HasTransparentBackground() override { return true; } + +private: + bool m_running; + wxActivityIndicator *m_spinner; + wxStaticText *m_label, *m_error; +}; + +#endif // Poedit_customcontrols_h diff --git a/src/digger.cpp b/src/digger.cpp new file mode 100644 index 0000000..2825372 --- /dev/null +++ b/src/digger.cpp @@ -0,0 +1,273 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include + +#include "digger.h" +#include "extractor.h" +#include "progressinfo.h" +#include "gexecute.h" +#include "utility.h" + +namespace +{ + +// concatenates catalogs using msgcat +bool ConcatCatalogs(const wxArrayString& files, TempDirectory& tmpdir, wxString *outfile) +{ + if (files.empty()) + return false; + + if (files.size() == 1) + { + *outfile = files.front(); + return true; + } + + *outfile = tmpdir.CreateFileName("merged.pot"); + + wxString list; + for ( wxArrayString::const_iterator i = files.begin(); + i != files.end(); ++i ) + { + list += wxString::Format(" %s", QuoteCmdlineArg(*i)); + } + + wxString cmd = + wxString::Format("msgcat --force-po -o %s %s", + QuoteCmdlineArg(*outfile), + list.c_str()); + bool succ = ExecuteGettext(cmd); + + if ( !succ ) + { + wxLogError(_("Failed command: %s"), cmd.c_str()); + wxLogError(_("Failed to merge gettext catalogs.")); + return false; + } + + return true; +} + +} // anonymous namespace + +CatalogPtr SourceDigger::Dig(const wxArrayString& paths, + const wxArrayString& excludePaths, + const wxArrayString& keywords, + const wxString& charset, + UpdateResultReason& reason) +{ + ExtractorsDB db; + db.Read(wxConfig::Get()); + + m_progressInfo->UpdateMessage(_("Scanning files...")); + + wxArrayString *all_files = FindFiles(paths, PathsToMatch(excludePaths), db); + if (all_files == nullptr) + { + reason = UpdateResultReason::NoSourcesFound; + return nullptr; + } + + TempDirectory tmpdir; + wxArrayString partials; + + for (size_t i = 0; i < db.Data.size(); i++) + { + if ( all_files[i].empty() ) + continue; // no files of this kind + + m_progressInfo->UpdateMessage( + // TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) + wxString::Format(_("Parsing %s files..."), db.Data[i].Name.c_str())); + if (!DigFiles(tmpdir, partials, all_files[i], db.Data[i], keywords, charset)) + { + delete[] all_files; + return nullptr; + } + } + + delete[] all_files; + + wxString mergedFile; + if ( !ConcatCatalogs(partials, tmpdir, &mergedFile) ) + return nullptr; // couldn't parse any source files + + CatalogPtr c = std::make_shared(mergedFile, Catalog::CreationFlag_IgnoreHeader); + + if ( !c->IsOk() ) + { + wxLogError(_("Failed to load extracted catalog.")); + return nullptr; + } + + return c; +} + + + +// cmdline's length is limited by OS/shell, this is maximal number +// of files we'll pass to the parser at one run: +#define BATCH_SIZE 16 + +bool SourceDigger::DigFiles(TempDirectory& tmpdir, + wxArrayString& outFiles, + const wxArrayString& files, + Extractor &extract, const wxArrayString& keywords, + const wxString& charset) +{ + wxArrayString batchfiles; + wxArrayString tempfiles; + size_t i, last = 0; + + while (last < files.GetCount()) + { + batchfiles.clear(); + for (i = last; i < last + BATCH_SIZE && i < files.size(); i++) + batchfiles.Add(files[i]); + last = i; + + wxString tempfile = tmpdir.CreateFileName("extracted.pot"); + if (!ExecuteGettext( + extract.GetCommand(batchfiles, keywords, tempfile, charset))) + { + return false; + } + + tempfiles.push_back(tempfile); + + m_progressInfo->UpdateGauge((int)batchfiles.GetCount()); + + if (m_progressInfo->Cancelled()) + return false; + } + + wxString outfile; + if ( !ConcatCatalogs(tempfiles, tmpdir, &outfile) ) + return false; // failed to parse any source files + + outFiles.push_back(outfile); + return true; +} + + + +wxArrayString *SourceDigger::FindFiles(const wxArrayString& paths, + const PathsToMatch& excludePaths, + ExtractorsDB& db) +{ + if (db.Data.empty()) + return NULL; + + wxArrayString *p_files = new wxArrayString[db.Data.size()]; + wxArrayString files; + size_t i; + + for (i = 0; i < paths.GetCount(); i++) + { + if (wxFileName::FileExists(paths[i])) + { + if (excludePaths.MatchesFile(paths[i])) + { + wxLogTrace("poedit", "no files found in '%s'", paths[i]); + continue; + } + files.Add(paths[i]); + } + else if ( !FindInDir(paths[i], excludePaths, files) ) + { + wxLogTrace("poedit", "no files found in '%s'", paths[i]); + } + } + + // Sort the filenames in some well-defined order. This is because directory + // traversal has, generally speaking, undefined order, and the order differs + // between filesystems. Finally, the order is reflected in the created PO + // files and it is much better for diffs if it remains consistent. + files.Sort(); + + size_t filescnt = 0; + for (i = 0; i < db.Data.size(); i++) + { + if (!db.Data[i].Enabled) + continue; + p_files[i] = db.Data[i].SelectParsable(files); + filescnt += p_files[i].GetCount(); + } + m_progressInfo->SetGaugeMax((int)filescnt); + + if (filescnt == 0) + return nullptr; + + return p_files; +} + + + +int SourceDigger::FindInDir(const wxString& dirname, + const PathsToMatch& excludePaths, + wxArrayString& files) +{ + if (dirname.empty()) + return 0; + wxDir dir(dirname); + if (!dir.IsOpened()) + return 0; + bool cont; + wxString filename; + int found = 0; + + cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_FILES); + while (cont) + { + const wxString f = (dirname == ".") ? filename : dirname + "/" + filename; + cont = dir.GetNext(&filename); + + if (excludePaths.MatchesFile(f)) + continue; + + files.Add(f); + found++; + } + + cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_DIRS); + while (cont) + { + const wxString f = (dirname == ".") ? filename : dirname + "/" + filename; + cont = dir.GetNext(&filename); + + if (excludePaths.MatchesFile(f)) + continue; + + found += FindInDir(f, excludePaths, files); + } + + return found; +} + diff --git a/src/digger.h b/src/digger.h new file mode 100644 index 0000000..a5763f2 --- /dev/null +++ b/src/digger.h @@ -0,0 +1,144 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _DIGGER_H_ +#define _DIGGER_H_ + +#include +#include + +#include "catalog.h" + +class wxArrayString; +class ExtractorsDB; +class Extractor; +class ProgressInfo; +class TempDirectory; + +/** This class extracts translatable strings from sources. + It uses ExtractorsDB to get information about external programs to + call in order to dig information from single file. + */ +class SourceDigger +{ + public: + /// Ctor. \a pi is used to display the progress of parsing. + SourceDigger(ProgressInfo *progress) : m_progressInfo(progress) {} + + /** Scans files for translatable strings and returns Catalog + instance containing them. All files in input \a paths that + match file extensions in a definition of extractor in ExtractorsDB + instance passed to the ctor are proceed by external extractor + program (typically, gettext) according to extractor definition. + + \param paths list of directories to look in + \param excludePaths directories to skip + \param keywords list of keywords that are recognized as + prefixes for translatable strings in sources + \param charset source code charset (may be empty) + */ + CatalogPtr Dig(const wxArrayString& paths, + const wxArrayString& excludePaths, + const wxArrayString& keywords, + const wxString& charset, + UpdateResultReason& reason); + + private: + // Path matching with support for wildcards + struct PathToMatch + { + wxString path; + bool isWildcard; + + bool MatchesFile(const wxString& fn) const + { + if (isWildcard) + return wxMatchWild(path, fn); + else + return fn == path || fn.StartsWith(path + "/"); + } + }; + + class PathsToMatch + { + public: + PathsToMatch() {} + explicit PathsToMatch(const wxArrayString& a) + { + paths.reserve(a.size()); + for (auto& p: a) + paths.push_back({p, wxIsWild(p)}); + } + + bool MatchesFile(const wxString& fn) const + { + for (auto& p: paths) + { + if (p.MatchesFile(fn)) + return true; + } + return false; + } + + private: + std::vector paths; + }; + + /** Finds all parsable files. Returned value is a new[]-allocated + array of wxArrayString objects. n-th string array in returned + array holds list of files that can be parsed by n-th extractor + in \a pdb database. + */ + wxArrayString *FindFiles(const wxArrayString& paths, + const PathsToMatch& excludePaths, + ExtractorsDB& pdb); + + /** Finds all files in given directory. + \return false if an error occurred. + */ + int FindInDir(const wxString& dirname, + const PathsToMatch& excludePaths, + wxArrayString& files); + + /** Digs translatable strings from given files. + \param outfiles list to which (temporary) file name of extracted + catalog will be appended + \param files list of files to parse + \param extractor extractor definition + \param keywords list of keywords that mark translatable strings + \param charset source code charset (may be empty) + */ + bool DigFiles(TempDirectory& tmpdir, + wxArrayString& outFiles, + const wxArrayString& files, + Extractor &extract, const wxArrayString& keywords, + const wxString& charset); + + ProgressInfo *m_progressInfo; +}; + + + +#endif // _DIGGER_H_ diff --git a/src/edapp.cpp b/src/edapp.cpp new file mode 100644 index 0000000..9f4acda --- /dev/null +++ b/src/edapp.cpp @@ -0,0 +1,1431 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __WXOSX__ +#include "osx_helpers.h" +#endif + +#ifdef __WXMSW__ +#include +#include +#include +#include +#endif + +#include +#include + +#if !wxUSE_UNICODE + #error "Unicode build of wxWidgets is required by Poedit" +#endif + +#include "edapp.h" +#include "edframe.h" +#include "concurrency.h" +#include "manager.h" +#include "prefsdlg.h" +#include "extractor.h" +#include "chooselang.h" +#include "customcontrols.h" +#include "gexecute.h" +#include "hidpi.h" +#include "icons.h" +#include "version.h" +#include "str_helpers.h" +#include "tm/transmem.h" +#include "utility.h" +#include "prefsdlg.h" +#include "errors.h" +#include "language.h" +#include "crowdin_client.h" + +#ifdef __WXOSX__ +struct PoeditApp::RecentMenuData +{ + NSMenu *menu = nullptr; + NSMenuItem *menuItem = nullptr; + wxMenuBar *menuBar = nullptr; +}; +#endif + +#ifndef DONT_MIGRATE_LEGACY_TM +extern bool MigrateLegacyTranslationMemory(); +#endif + + +#ifndef __WXOSX__ + +// IPC for ensuring that only one instance of Poedit runs at a time. This is +// handled native on OS X and GtkApplication could do it under GTK+3, but wx +// doesn't support that and we have to implement everything manually for both +// Windows and GTK+ ports. + +namespace +{ + +#ifdef __UNIX__ +wxString GetRuntimeDir() +{ + wxString dir; + if (!wxGetEnv("XDG_RUNTIME_DIR", &dir)) + dir = wxGetHomeDir(); + if (dir.Last() != '/') + dir += '/'; + return dir; +} +wxString RemoteService() { return GetRuntimeDir() + "poedit.ipc"; } +#else +wxString RemoteService() { return "Poedit"; } +#endif + +const char *IPC_TOPIC = "cmdline"; + +} // anonymous namespace + +class PoeditApp::RemoteServer +{ +public: + RemoteServer(PoeditApp *app) : m_server(app) + { + m_server.Create(RemoteService()); + } + +private: + class Connection : public wxConnection + { + public: + Connection(PoeditApp *app) : m_app(app) {} + + bool OnExec(const wxString& topic, const wxString& data) override + { + if (topic != IPC_TOPIC) + return false; + wxString payload; + if (data == "Activate") + { + m_app->OpenNewFile(); + return true; + } + if (data.StartsWith("OpenURI:", &payload)) + { + m_app->HandleCustomURI(payload); + return true; + } + if (data.StartsWith("OpenFile:", &payload)) + { + wxArrayString a; + a.push_back(payload); + m_app->OpenFiles(a); + return true; + } + return false; + } + + private: + PoeditApp *m_app; + }; + + class Server : public wxServer + { + public: + Server(PoeditApp *app) : m_app(app) {} + + wxConnectionBase *OnAcceptConnection(const wxString& topic) override + { + if (topic != IPC_TOPIC) + return nullptr; + return new Connection(m_app); + } + + private: + PoeditApp *m_app; + }; + + Server m_server; +}; + +class PoeditApp::RemoteClient +{ +public: + RemoteClient(wxSingleInstanceChecker *instCheck) : m_instCheck(instCheck), m_client() + { + } + + enum ConnectionStatus + { + NoOtherInstance, + Connected, + Failure + }; + + ConnectionStatus ConnectIfNeeded() + { + // Try several times in case of a race condition where one instance + // is exiting and not communicating, while another one is just starting. + for (int attempt = 0; attempt < 3; attempt++) + { + if (!m_instCheck->IsAnotherRunning()) + return NoOtherInstance; + + m_conn.reset(m_client.MakeConnection("localhost", RemoteService(), IPC_TOPIC)); + if (m_conn) + return Connected; + + // else: Something went wrong, no connection despite other instance existing. + // Try again in a little while. + wxMilliSleep(100); + } + + return Failure; + } + + void Activate() + { + Command("Activate"); + } + + void HandleCustomURI(const wxString& uri) + { + Command("OpenURI:" + uri); + } + + void OpenFile(const wxString& filename) + { + wxFileName fn(filename); + fn.MakeAbsolute(); + Command("OpenFile:" + fn.GetFullPath()); + } + +private: + void Command(const wxString cmd) { m_conn->Execute(cmd); } + + wxSingleInstanceChecker *m_instCheck; + wxClient m_client; + std::unique_ptr m_conn; +}; + +#endif // __WXOSX__ + + +IMPLEMENT_APP(PoeditApp); + +PoeditApp::PoeditApp() +{ +#ifdef __WXOSX__ + m_recentMenuData.reset(new RecentMenuData); +#endif +} + +PoeditApp::~PoeditApp() +{ +} + +wxString PoeditApp::GetAppVersion() const +{ + return wxString::FromAscii(POEDIT_VERSION); +} + +wxString PoeditApp::GetAppBuildNumber() const +{ +#if defined(__WXOSX__) + NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; + NSString *ver = [infoDict objectForKey:@"CFBundleVersion"]; + return str::to_wx(ver); +#elif defined(__WXMSW__) + auto exe = wxStandardPaths::Get().GetExecutablePath(); + DWORD unusedHandle; + DWORD fiSize = GetFileVersionInfoSize(exe.wx_str(), &unusedHandle); + if (fiSize == 0) + return ""; + wxCharBuffer fi(fiSize); + if (!GetFileVersionInfo(exe.wx_str(), unusedHandle, fiSize, fi.data())) + return ""; + void *ver; + UINT sizeInfo; + if (!VerQueryValue(fi.data(), L"\\", &ver, &sizeInfo)) + return ""; + VS_FIXEDFILEINFO *info = (VS_FIXEDFILEINFO*)ver; + return wxString::Format("%d", LOWORD(info->dwFileVersionLS)); +#else + return ""; +#endif +} + +bool PoeditApp::IsBetaVersion() const +{ + wxString v = GetAppVersion(); + return v.Contains("beta") || v.Contains("rc"); +} + +bool PoeditApp::CheckForBetaUpdates() const +{ + return IsBetaVersion() || + wxConfigBase::Get()->ReadBool("check_for_beta_updates", false); +} + + +#ifndef __WXOSX__ +static wxArrayString gs_filesToOpen; +#endif + +extern void InitXmlResource(); + +bool PoeditApp::OnInit() +{ +#ifdef __WXMSW__ + // remove the current directory from the default DLL search order + SetDllDirectory(L""); +#endif + + SetVendorName("Vaclav Slavik"); + SetAppName("Poedit"); + +#ifndef __WXOSX__ + // create early for use in cmd line parsing + m_instanceChecker.reset(new wxSingleInstanceChecker); + #ifdef __UNIX__ + m_instanceChecker->Create("poedit.lock", GetRuntimeDir()); + #else + m_instanceChecker->CreateDefault(); + #endif +#endif + + if (!wxApp::OnInit()) + return false; + +#ifndef __WXOSX__ + m_remoteServer.reset(new RemoteServer(this)); +#endif + + InitHiDPIHandling(); + +#ifdef __WXOSX__ + MoveToApplicationsFolderIfNecessary(); + + wxSystemOptions::SetOption(wxMAC_TEXTCONTROL_USE_SPELL_CHECKER, 1); + + SetExitOnFrameDelete(false); +#endif + + // timestamps on the logs are of not use for Poedit: + wxLog::DisableTimestamp(); + +#if defined(__UNIX__) && !defined(__WXOSX__) + wxString installPrefix = POEDIT_PREFIX; +#ifdef __linux__ + wxFileName::SplitPath(wxStandardPaths::Get().GetExecutablePath(), &installPrefix, nullptr, nullptr); + wxFileName fn = wxFileName::DirName(installPrefix); + fn.RemoveLastDir(); + installPrefix = fn.GetFullPath(); +#endif + wxStandardPaths::Get().SetInstallPrefix(installPrefix); + + wxString xdgConfigHome; + if (!wxGetEnv("XDG_CONFIG_HOME", &xdgConfigHome)) + xdgConfigHome = wxGetHomeDir() + "/.config"; + wxString configDir = xdgConfigHome + "/poedit"; + if (!wxFileName::DirExists(configDir)) + wxFileName::Mkdir(configDir, wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); + wxString configFile = configDir + "/config"; + + // Move legacy config locations to XDG compatible ones: + if (!wxFileExists(configFile)) + { + wxString oldconfig = wxGetHomeDir() + "/.poedit"; + if (wxDirExists(oldconfig)) + { + if (wxFileExists(oldconfig + "/config")) + wxRenameFile(oldconfig + "/config", configFile); + { + wxLogNull null; + wxRmdir(oldconfig); + } + } + else if (wxFileExists(oldconfig)) + { + // even older dotfile + wxRenameFile(oldconfig, configDir + "/config"); + } + } +#endif // __UNIX__ + +#if defined(__WXOSX__) + #define CFG_FILE (wxStandardPaths::Get().GetUserConfigDir() + "/net.poedit.Poedit.cfg") +#elif defined(__UNIX__) + #define CFG_FILE configFile +#else + #define CFG_FILE wxEmptyString +#endif + +#ifdef __WXOSX__ + // upgrade from the old location of config file: + wxString oldcfgfile = wxStandardPaths::Get().GetUserConfigDir() + "/poedit.cfg"; + if (wxFileExists(oldcfgfile) && !wxFileExists(CFG_FILE)) + { + wxRenameFile(oldcfgfile, CFG_FILE); + } + + // Remove legacy Sparkle updates folder that used to accumulate broken download + // files for some users and eat up disk space: + auto oldsparkle = wxStandardPaths::Get().GetUserDataDir() + "/.Sparkle"; + if (wxFileName::DirExists(oldsparkle)) + wxFileName::Rmdir(oldsparkle, wxPATH_RMDIR_RECURSIVE); +#endif + + wxConfigBase::Set( + new wxConfig(wxEmptyString, wxEmptyString, CFG_FILE, wxEmptyString, + wxCONFIG_USE_GLOBAL_FILE | wxCONFIG_USE_LOCAL_FILE)); + wxConfigBase::Get()->SetExpandEnvVars(false); + + wxImage::AddHandler(new wxPNGHandler); +#ifdef __WXMSW__ + wxImage::AddHandler(new wxICOHandler); +#endif + wxXmlResource::Get()->InitAllHandlers(); + wxXmlResource::Get()->AddHandler(new LearnMoreLinkXmlHandler); + +#if defined(__WXOSX__) + wxXmlResource::Get()->LoadAllFiles(wxStandardPaths::Get().GetResourcesDir()); +#elif defined(__WXMSW__) + wxStandardPaths::Get().DontIgnoreAppSubDir(); + wxXmlResource::Get()->LoadAllFiles(wxStandardPaths::Get().GetResourcesDir() + "\\Resources"); +#else + InitXmlResource(); +#endif + + SetDefaultCfg(wxConfig::Get()); + +#if defined(__WXOSX__) || defined(__WXMSW__) + u_setDataDirectory(wxStandardPaths::Get().GetResourcesDir().mb_str()); +#endif + +#ifndef __WXOSX__ + wxArtProvider::PushBack(new PoeditArtProvider); +#endif + + SetupLanguage(); + +#ifdef __WXOSX__ + wxMenuBar *bar = wxXmlResource::Get()->LoadMenuBar("mainmenu_mac_global"); + TweakOSXMenuBar(bar); + wxMenuBar::MacSetCommonMenuBar(bar); + // so that help menu is correctly merged with system-provided menu + // (see http://sourceforge.net/tracker/index.php?func=detail&aid=1600747&group_id=9863&atid=309863) + s_macHelpMenuTitleName = _("&Help"); +#endif + +#ifndef __WXOSX__ + FileHistory().Load(*wxConfig::Get()); +#endif + +#ifndef DONT_MIGRATE_LEGACY_TM + // NB: It's important to do this before TM is used for the first time. + if ( !MigrateLegacyTranslationMemory() ) + return false; +#endif + +#ifdef __WXMSW__ + AssociateFileTypeIfNeeded(); +#endif + +#ifndef __WXOSX__ + // NB: opening files or creating empty window is handled differently on + // Macs, using MacOpenFiles() and MacNewFile(), so don't create empty + // window if no files are given on command line; but still support + // passing files on command line + if (!gs_filesToOpen.empty()) + { + OpenFiles(gs_filesToOpen); + gs_filesToOpen.clear(); + } + else + { + OpenNewFile(); + } +#endif // !__WXOSX__ + +#ifdef USE_SPARKLE + Sparkle_Initialize(CheckForBetaUpdates()); +#endif // USE_SPARKLE + +#ifdef __WXMSW__ + wxString appcast = "https://poedit.net/updates/win/appcast"; + if ( CheckForBetaUpdates() ) + { + // Beta versions use unstable feed. + appcast = "https://poedit.net/updates/win/appcast/beta"; + } + if (!wxPlatformInfo().CheckOSVersion(6,0)) // XP doesn't support SNI + appcast.Replace("https://", "http://"); + + win_sparkle_set_appcast_url(appcast.utf8_str()); + win_sparkle_set_can_shutdown_callback(&PoeditApp::WinSparkle_CanShutdown); + win_sparkle_set_shutdown_request_callback(&PoeditApp::WinSparkle_Shutdown); + auto buildnum = GetAppBuildNumber(); + if (!buildnum.empty()) + win_sparkle_set_app_build_version(buildnum.wc_str()); + win_sparkle_init(); +#endif + +#ifndef __WXOSX__ + // If we failed to open any window during startup (e.g. because the user + // attempted to open MO files), shut the app down. Don't do this on OS X + // where a) the initialization is finished after OnInit() and b) apps + // without windows are OK. + if (!PoeditFrame::HasAnyWindow()) + return false; +#endif + + return true; +} + +int PoeditApp::OnExit() +{ +#ifndef __WXOSX__ + m_instanceChecker.reset(); + m_remoteServer.reset(); +#endif + + // Keep any clipboard data available on Windows after the app terminates: + wxTheClipboard->Flush(); + + // Make sure PoeditFrame instances schedules for deletion are deleted + // early -- e.g. before wxConfig is destroyed, so they can save changes + DeletePendingObjects(); + + TranslationMemory::CleanUp(); + +#ifdef HAVE_HTTP_CLIENT + CrowdinClient::CleanUp(); +#endif + + concurrency_queue::cleanup(); + +#ifdef USE_SPARKLE + Sparkle_Cleanup(); +#endif // USE_SPARKLE +#ifdef __WXMSW__ + win_sparkle_cleanup(); +#endif + + u_cleanup(); + + return wxApp::OnExit(); +} + + +static wxLayoutDirection g_layoutDirection = wxLayout_Default; + +void PoeditApp::SetupLanguage() +{ +#if defined(__WXMSW__) + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(wxStandardPaths::Get().GetResourcesDir() + "\\Translations"); + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(GetGettextPackagePath() + "/share/locale"); +#elif defined(__WXOSX__) + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(GetGettextPackagePath() + "/share/locale"); +#else // UNIX + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(wxStandardPaths::Get().GetInstallPrefix() + "/share/locale"); +#endif + + wxTranslations *trans = new wxTranslations(); + wxTranslations::Set(trans); + + int language = wxLANGUAGE_DEFAULT; + +#if NEED_CHOOSELANG_UI + auto uilang = GetUILanguage(); + if (!uilang.empty()) + { + auto langinfo = wxLocale::FindLanguageInfo(uilang); + if (langinfo) + { + language = langinfo->Language; + uilang.clear(); // will go through locale + } + } +#endif + + // Properly set locale is important for some aspects of GTK+ as well as + // other things. It's also the common thing to do, so don't break + // expectations needlessly: + { + // suppress error logging because setting locale may fail and we want to + // handle that gracefully and invisibly: + wxLogNull null; + m_locale.reset(new wxLocale()); + if (!m_locale->Init(language, wxLOCALE_DONT_LOAD_DEFAULT)) + m_locale.reset(); + +#if NEED_CHOOSELANG_UI + if (!uilang.empty()) + trans->SetLanguage(uilang); +#endif + } + + trans->AddStdCatalog(); + trans->AddCatalog("poedit"); + + wxString bestTrans = trans->GetBestTranslation("poedit"); + Language uiLang = Language::TryParse(bestTrans.ToStdWstring()); + UErrorCode err = U_ZERO_ERROR; + icu::Locale::setDefault(uiLang.ToIcu(), err); + + const wxLanguageInfo *info = wxLocale::FindLanguageInfo(bestTrans); + g_layoutDirection = info ? info->LayoutDirection : wxLayout_Default; + +#ifdef __WXMSW__ + win_sparkle_set_lang(bestTrans.utf8_str()); +#endif +} + +wxLayoutDirection PoeditApp::GetLayoutDirection() const +{ + return g_layoutDirection; +} + + +void PoeditApp::OpenNewFile() +{ + PoeditFrame *unused = PoeditFrame::UnusedWindow(/*active=*/false); + if (unused) + unused->Raise(); + else + PoeditFrame::CreateWelcome(); +} + +void PoeditApp::OpenFiles(const wxArrayString& names) +{ + PoeditFrame *active = PoeditFrame::UnusedActiveWindow(); + + for ( auto name: names ) + { + // MO files cannot be opened directly in Poedit (yet), but they are + // associated with it, so that the app can provide explanation to users + // not familiar with the MO/PO distinction. + auto n = name.Lower(); + if (n.EndsWith(".mo") || n.EndsWith(".gmo")) + { + wxMessageDialog dlg(nullptr, + _("MO files can’t be directly edited in Poedit."), + _("Error opening file"), + wxOK); + dlg.SetExtendedMessage(_("Please open and edit the corresponding PO file instead. When you save it, the MO file will be updated as well.")); + dlg.ShowModal(); + continue; + } + + if (active) + { + active->OpenFile(name); + active = nullptr; + } + else + { + PoeditFrame::Create(name); + } + } +} + +void PoeditApp::SetDefaultExtractors(wxConfigBase *cfg) +{ + ExtractorsDB db; + bool changed = false; + wxString defaultsVersion = cfg->Read("Parsers/DefaultsVersion", + "1.2.x"); + db.Read(cfg); + + // Add extractors for languages supported by gettext itself (but only if the + // user didn't already add language with this name himself): + static struct + { + char enableByDefault; + const char *name; + const char *exts; + } s_gettextLangs[] = { + { 1, "C/C++", "*.c;*.cpp;*.cc;*.C;*.c++;*.cxx;*.h;*.hpp;*.hxx;*.hh" }, + { 1, "C#", "*.cs" }, + { 1, "EmacsLisp", "*.el" }, + { 1, "GSettings", "*.gschema.xml" }, + { 1, "Glade", "*.glade;*.glade2;*.ui" }, + { 1, "AppData", "*.appdata.xml" }, + { 1, "Java", "*.java" }, + { 1, "JavaScript", "*.js" }, + { 1, "Lisp", "*.lisp" }, + { 1, "Lua", "*.lua" }, + { 1, "ObjectiveC", "*.m" }, + { 1, "PHP", "*.php;*.php3;*.php4;*.phtml" }, + { 1, "Perl", "*.pl;*.PL;*.pm;*.perl" }, + { 1, "Python", "*.py" }, + { 0, "RST", "*.rst" }, + { 1, "Scheme", "*.scm" }, + { 0, "Shell", "*.sh;*.bash" }, + { 1, "Smalltalk", "*.st" }, + { 1, "TCL", "*.tcl" }, + { 1, "Vala", "*.vala" }, + { 1, "YCP", "*.ycp" }, + { 1, "awk", "*.awk" }, + { 1, "librep", "*.jl" }, + { 0, NULL, NULL } + }; + + for (size_t i = 0; s_gettextLangs[i].name != NULL; i++) + { + // if this lang is already registered, don't overwrite it: + if (db.FindExtractor(s_gettextLangs[i].name) != -1) + continue; + + wxString langflag; + if ( wxStrcmp(s_gettextLangs[i].name, "C/C++") == 0 ) + langflag = " --language=C++"; + else + langflag = wxString(" --language=") + s_gettextLangs[i].name; + + // otherwise add new extractor: + Extractor ex; + ex.Name = s_gettextLangs[i].name; + ex.Enabled = (bool)s_gettextLangs[i].enableByDefault; + ex.Extensions = s_gettextLangs[i].exts; + ex.Command = wxString("xgettext") + langflag + " --add-comments=TRANSLATORS: --force-po -o %o %C %K %F"; + ex.KeywordItem = "-k%k"; + ex.FileItem = "%f"; + ex.CharsetItem = "--from-code=%c"; + db.Data.push_back(ex); + changed = true; + } + + // If upgrading Poedit to 1.2.4, add dxgettext extractor for Delphi: +#ifdef __WINDOWS__ + if (defaultsVersion == "1.2.x") + { + Extractor p; + p.Name = "Delphi (dxgettext)"; + p.Extensions = "*.pas;*.dpr;*.xfm;*.dfm"; + p.Command = "dxgettext --so %o %F"; + p.KeywordItem = wxEmptyString; + p.FileItem = "%f"; + db.Data.push_back(p); + changed = true; + } +#endif + + // If upgrading Poedit to 1.2.5, update C++ extractor to handle --from-code: + if (defaultsVersion == "1.2.x" || defaultsVersion == "1.2.4") + { + int cpp = db.FindExtractor("C/C++"); + if (cpp != -1) + { + if (db.Data[cpp].Command == "xgettext --force-po -o %o %K %F") + { + db.Data[cpp].Command = "xgettext --force-po -o %o %C %K %F"; + db.Data[cpp].CharsetItem = "--from-code=%c"; + changed = true; + } + } + } + + // Poedit 1.5.6 had a breakage, it add --add-comments without space in front of it. + // Repair this automatically: + for (size_t i = 0; i < db.Data.size(); i++) + { + wxString& cmd = db.Data[i].Command; + if (cmd.Contains("--add-comments=") && !cmd.Contains(" --add-comments=")) + { + cmd.Replace("--add-comments=", " --add-comments="); + changed = true; + } + } + + if (changed) + { + db.Write(cfg); + cfg->Write("Parsers/DefaultsVersion", GetAppVersion()); + } +} + +void PoeditApp::SetDefaultCfg(wxConfigBase *cfg) +{ + SetDefaultExtractors(cfg); + + if (cfg->Read("version", wxEmptyString) == GetAppVersion()) return; + + if (cfg->Read("TM/search_paths", wxEmptyString).empty()) + { + wxString paths; +#if defined(__UNIX__) + paths = wxGetHomeDir() + ":/usr/share/locale:/usr/local/share/locale"; +#elif defined(__WXMSW__) + paths = "C:"; +#endif + cfg->Write("TM/search_paths", paths); + } + + cfg->Write("version", GetAppVersion()); +} + + +namespace +{ +const char *CL_KEEP_TEMP_FILES = "keep-temp-files"; +const char *CL_HANDLE_POEDIT_URI = "handle-poedit-uri"; +} + +void PoeditApp::OnInitCmdLine(wxCmdLineParser& parser) +{ + wxApp::OnInitCmdLine(parser); + + parser.AddSwitch("", CL_KEEP_TEMP_FILES, + _("don't delete temporary files (for debugging)")); + parser.AddLongOption(CL_HANDLE_POEDIT_URI, + _("handle a poedit:// URI"), wxCMD_LINE_VAL_STRING); + parser.AddParam("catalog.po", wxCMD_LINE_VAL_STRING, + wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE); +} + +bool PoeditApp::OnCmdLineParsed(wxCmdLineParser& parser) +{ + if (!wxApp::OnCmdLineParsed(parser)) + return false; + + if ( parser.Found(CL_KEEP_TEMP_FILES) ) + TempDirectory::KeepFiles(); + +#ifndef __WXOSX__ + RemoteClient client(m_instanceChecker.get()); + switch (client.ConnectIfNeeded()) + { + case RemoteClient::Failure: + { + wxLogError(_("Failed to communicate with Poedit process.")); + wxLog::FlushActive(); + return false; // terminate program + } + + case RemoteClient::Connected: + { + wxString poeditURI; + if (parser.Found(CL_HANDLE_POEDIT_URI, &poeditURI)) + client.HandleCustomURI(poeditURI); + + if (parser.GetParamCount() == 0) + { + client.Activate(); + } + else + { + for (size_t i = 0; i < parser.GetParamCount(); i++) + client.OpenFile(parser.GetParam(i)); + } + return false; // terminate program + } + + case RemoteClient::NoOtherInstance: + // fall through and handle normally + break; + } +#endif + + wxString poeditURI; + if (parser.Found(CL_HANDLE_POEDIT_URI, &poeditURI)) + { + // handling the URI shows UI, so do it after OnInit() initialization: + CallAfter([=]{ HandleCustomURI(poeditURI); }); + } + +#ifdef __WXOSX__ + wxArrayString filesToOpen; + for (size_t i = 0; i < parser.GetParamCount(); i++) + filesToOpen.Add(parser.GetParam(i)); + if (!filesToOpen.empty()) + OSXStoreOpenFiles(filesToOpen); +#else + for (size_t i = 0; i < parser.GetParamCount(); i++) + gs_filesToOpen.Add(parser.GetParam(i)); +#endif + + return true; +} + + +void PoeditApp::HandleCustomURI(const wxString& uri) +{ + if (!uri.StartsWith("poedit://")) + return; + +#ifdef HAVE_HTTP_CLIENT + // nothing to do yet + if (CrowdinClient::Get().IsOAuthCallback(uri.ToStdString())) + { + CrowdinClient::Get().HandleOAuthCallback(uri.ToStdString()); + return; + } +#endif +} + + +// --------------------------------------------------------------------------- +// exceptions handling +// --------------------------------------------------------------------------- + +bool PoeditApp::OnExceptionInMainLoop() +{ + try + { + throw; + } + catch ( std::exception& ) + { + wxLogError(_("Unhandled exception occurred: %s"), DescribeCurrentException()); + } +#ifdef __WXOSX__ + catch ( NSException *e ) + { + wxLogError(_("Unhandled exception occurred: %s"), str::to_wx([e reason])); + } +#endif + catch ( ... ) + { + wxLogError(_("Unhandled exception occurred.")); + } + + return true; + +} + + +// --------------------------------------------------------------------------- +// event handlers for app-global menu actions +// --------------------------------------------------------------------------- + +BEGIN_EVENT_TABLE(PoeditApp, wxApp) +#ifndef __WXMSW__ + EVT_MENU (wxID_NEW, PoeditApp::OnNew) + EVT_MENU (XRCID("menu_new_from_pot"),PoeditApp::OnNew) + EVT_MENU (wxID_OPEN, PoeditApp::OnOpen) + #ifdef HAVE_HTTP_CLIENT + EVT_MENU (XRCID("menu_open_crowdin"),PoeditApp::OnOpenFromCrowdin) + #endif + #ifndef __WXOSX__ + EVT_MENU_RANGE (wxID_FILE1, wxID_FILE9, PoeditApp::OnOpenHist) + #endif +#endif // !__WXMSW__ + EVT_MENU (wxID_ABOUT, PoeditApp::OnAbout) + EVT_MENU (XRCID("menu_manager"), PoeditApp::OnManager) + EVT_MENU (wxID_EXIT, PoeditApp::OnQuit) + EVT_MENU (wxID_PREFERENCES, PoeditApp::OnPreferences) + EVT_MENU (wxID_HELP, PoeditApp::OnHelp) + EVT_MENU (XRCID("menu_gettext_manual"), PoeditApp::OnGettextManual) +#ifdef __WXMSW__ + EVT_MENU (XRCID("menu_check_for_updates"), PoeditApp::OnWinsparkleCheck) +#endif +#ifdef __WXOSX__ + EVT_MENU (wxID_CLOSE, PoeditApp::OnCloseWindowCommand) + EVT_IDLE (PoeditApp::OnIdleInstallOpenRecentMenu) +#endif +END_EVENT_TABLE() + + +// OS X and GNOME apps should open new documents in a new window. On Windows, +// however, the usual thing to do is to open the new document in the already +// open window and replace the current document. +#ifndef __WXMSW__ + +#define TRY_FORWARD_TO_ACTIVE_WINDOW(funcCall) \ + { \ + PoeditFrame *active = PoeditFrame::UnusedActiveWindow(); \ + if ( active ) \ + { \ + active->funcCall; \ + return; \ + } \ + } + +void PoeditApp::OnNew(wxCommandEvent& event) +{ + TRY_FORWARD_TO_ACTIVE_WINDOW( OnNew(event) ); + + PoeditFrame *f = PoeditFrame::CreateEmpty(); + f->OnNew(event); +} + + +void PoeditApp::OnOpen(wxCommandEvent&) +{ + PoeditFrame *active = PoeditFrame::UnusedActiveWindow(); + + wxString path = wxConfig::Get()->Read("last_file_path", wxEmptyString); + + wxFileDialog dlg(nullptr, + OSX_OR_OTHER("", _("Open catalog")), + path, + wxEmptyString, + Catalog::GetAllTypesFileMask(), + wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); + + if (dlg.ShowModal() == wxID_OK) + { + wxConfig::Get()->Write("last_file_path", dlg.GetDirectory()); + wxArrayString paths; + dlg.GetPaths(paths); + + if (paths.size() == 1 && active) + { + active->OpenFile(paths[0]); + return; + } + + OpenFiles(paths); + } +} + + +#ifdef HAVE_HTTP_CLIENT +void PoeditApp::OnOpenFromCrowdin(wxCommandEvent& event) +{ + TRY_FORWARD_TO_ACTIVE_WINDOW( OnOpenFromCrowdin(event) ); + + PoeditFrame *f = PoeditFrame::CreateEmpty(); + f->OnOpenFromCrowdin(event); +} +#endif + + +#ifndef __WXOSX__ +void PoeditApp::OnOpenHist(wxCommandEvent& event) +{ + TRY_FORWARD_TO_ACTIVE_WINDOW( OnOpenHist(event) ); + + wxString f(FileHistory().GetHistoryFile(event.GetId() - wxID_FILE1)); + if ( !wxFileExists(f) ) + { + wxLogError(_("File '%s' doesn't exist."), f.c_str()); + return; + } + + OpenFiles(wxArrayString(1, &f)); +} +#endif // !__WXOSX__ + +#endif // !__WXMSW__ + + +void PoeditApp::OnAbout(wxCommandEvent&) +{ +#if 0 + // Forces translation of several strings that are used for about + // dialog internally by wx, but are frequently not translate due to + // state of wx's translations: + + // TRANSLATORS: This is titlebar of about dialog, "%s" is application name + // ("Poedit" here, but please use "%s") + _("About %s"); + // TRANSLATORS: This is version information in about dialog, "%s" will be + // version number when used + _("Version %s"); + + // TRANSLATORS: OS X item in app menu + _("Services"); + // TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" + _("Hide %s"); + // TRANSLATORS: OS X item in app menu + _("Hide Others"); + // TRANSLATORS: OS X item in app menu + _("Show All"); + // TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" + _("Quit %s"); + _("Preferences..."); +#endif + + wxAboutDialogInfo about; + +#ifndef __WXOSX__ + about.SetName("Poedit"); + about.SetVersion(wxGetApp().GetAppVersion()); + about.SetDescription(_("Poedit is an easy to use translations editor.")); +#endif + about.SetCopyright(L"Copyright \u00a9 1999-2016 Václav Slavík"); +#ifdef __WXGTK__ // other ports would show non-native about dlg + about.SetWebSite("https://poedit.net"); +#endif + + wxAboutBox(about); +} + + +void PoeditApp::OnManager(wxCommandEvent&) +{ + wxFrame *f = ManagerFrame::Create(); + f->Raise(); +} + + +void PoeditApp::OnQuit(wxCommandEvent&) +{ +#ifdef __WXOSX__ + // Native apps don't quit if there's any modal window or a sheet open; wx + // only refuses to quit if a app-modal window is open: + for (NSWindow *w in [NSApp windows]) + { + if (w.sheet && w.visible && w.preventsApplicationTerminationWhenModal) + return; + } + + // The Close() calls below may not terminate immediately, they may ask for + // confirmation window-modally on OS X. So change the behavior to terminate + // the app when the last window is closed now, instead of calling + // ExitMainLoop(). This will terminate the app automagically when all the + // windows are closed. + bool delayed = false; + for ( auto& i : wxTopLevelWindows ) + { + if (!i->Close()) + delayed = true; + } + + if (delayed) + SetExitOnFrameDelete(true); + else + ExitMainLoop(); + +#else // !__WXOSX__ + + for ( auto& i : wxTopLevelWindows ) + { + if (!i->Close()) + return; + } + + ExitMainLoop(); + +#endif +} + + +void PoeditApp::EditPreferences() +{ + if (!m_preferences) + m_preferences = PoeditPreferencesEditor::Create(); + m_preferences->Show(nullptr); +} + +void PoeditApp::OnPreferences(wxCommandEvent&) +{ + EditPreferences(); +} + + +void PoeditApp::OnHelp(wxCommandEvent&) +{ + OpenPoeditWeb("/trac/wiki/Doc"); +} + +void PoeditApp::OnGettextManual(wxCommandEvent&) +{ + wxLaunchDefaultBrowser("http://www.gnu.org/software/gettext/manual/html_node/"); +} + + +void PoeditApp::OpenPoeditWeb(const wxString& path) +{ + wxLaunchDefaultBrowser + ( + wxString::Format("https://poedit.net%s?fromVersion=%s", + path, + GetAppVersion()) + ); +} + +#ifdef __WXOSX__ + +static NSMenuItem *AddNativeItem(NSMenu *menu, int pos, const wxString&text, SEL ac, NSString *key) +{ + NSString *str = str::to_NS(text); + if (pos == -1) + return [menu addItemWithTitle:str action:ac keyEquivalent:key]; + else + return [menu insertItemWithTitle:str action:ac keyEquivalent:key atIndex:pos]; +} + +void PoeditApp::TweakOSXMenuBar(wxMenuBar *bar) +{ + wxMenu *apple = bar->OSXGetAppleMenu(); + if (!apple) + return; // huh + + apple->Insert(3, XRCID("menu_manager"), _("Catalogs Manager")); + apple->InsertSeparator(3); + +#if USE_SPARKLE + Sparkle_AddMenuItem(apple->GetHMenu(), _("Check for Updates...").utf8_str()); +#endif + + int editMenuPos = bar->FindMenu(_("&Edit")); + if (editMenuPos == wxNOT_FOUND) + editMenuPos = 1; + wxMenu *edit = bar->GetMenu(editMenuPos); + int pasteItem = -1; + int findItem = -1; + int pos = 0; + for (auto& i : edit->GetMenuItems()) + { + if (i->GetId() == wxID_PASTE) + pasteItem = pos; + else if (i->GetId() == XRCID("menu_sub_find")) + findItem = pos; + pos++; + } + + NSMenu *editNS = edit->GetHMenu(); + + AddNativeItem(editNS, 0, _("Undo"), @selector(undo:), @"z"); + AddNativeItem(editNS, 1, _("Redo"), @selector(redo:), @"Z"); + [editNS insertItem:[NSMenuItem separatorItem] atIndex:2]; + if (pasteItem != -1) pasteItem += 3; + if (findItem != -1) findItem += 3; + + NSMenuItem *item; + if (pasteItem != -1) + { + item = AddNativeItem(editNS, pasteItem+1, _("Paste and Match Style"), + @selector(pasteAsPlainText:), @"V"); + [item setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask]; + item = AddNativeItem(editNS, pasteItem+2, _("Delete"), + @selector(delete:), @""); + [item setKeyEquivalentModifierMask:NSCommandKeyMask]; + if (findItem != -1) findItem += 2; + } + + #define FIND_PLUS(ofset) ((findItem != -1) ? (findItem+ofset) : -1) + if (findItem == -1) + [editNS addItem:[NSMenuItem separatorItem]]; + item = AddNativeItem(editNS, FIND_PLUS(1), _("Spelling and Grammar"), NULL, @""); + NSMenu *spelling = [[NSMenu alloc] initWithTitle:@"Spelling and Grammar"]; + AddNativeItem(spelling, -1, _("Show Spelling and Grammar"), @selector(showGuessPanel:), @":"); + AddNativeItem(spelling, -1, _("Check Document Now"), @selector(checkSpelling:), @";"); + [spelling addItem:[NSMenuItem separatorItem]]; + AddNativeItem(spelling, -1, _("Check Spelling While Typing"), @selector(toggleContinuousSpellChecking:), @""); + AddNativeItem(spelling, -1, _("Check Grammar With Spelling"), @selector(toggleGrammarChecking:), @""); + AddNativeItem(spelling, -1, _("Correct Spelling Automatically"), @selector(toggleAutomaticSpellingCorrection:), @""); + [editNS setSubmenu:spelling forItem:item]; + + item = AddNativeItem(editNS, FIND_PLUS(2), _("Substitutions"), NULL, @""); + NSMenu *subst = [[NSMenu alloc] initWithTitle:@"Substitutions"]; + AddNativeItem(subst, -1, _("Show Substitutions"), @selector(orderFrontSubstitutionsPanel:), @""); + [subst addItem:[NSMenuItem separatorItem]]; + AddNativeItem(subst, -1, _("Smart Copy/Paste"), @selector(toggleSmartInsertDelete:), @""); + AddNativeItem(subst, -1, _("Smart Quotes"), @selector(toggleAutomaticQuoteSubstitution:), @""); + AddNativeItem(subst, -1, _("Smart Dashes"), @selector(toggleAutomaticDashSubstitution:), @""); + AddNativeItem(subst, -1, _("Smart Links"), @selector(toggleAutomaticLinkDetection:), @""); + AddNativeItem(subst, -1, _("Text Replacement"), @selector(toggleAutomaticTextReplacement:), @""); + [editNS setSubmenu:subst forItem:item]; + + item = AddNativeItem(editNS, FIND_PLUS(3), _("Transformations"), NULL, @""); + NSMenu *trans = [[NSMenu alloc] initWithTitle:@"Transformations"]; + AddNativeItem(trans, -1, _("Make Upper Case"), @selector(uppercaseWord:), @""); + AddNativeItem(trans, -1, _("Make Lower Case"), @selector(lowercaseWord:), @""); + AddNativeItem(trans, -1, _("Capitalize"), @selector(capitalizeWord:), @""); + [editNS setSubmenu:trans forItem:item]; + + item = AddNativeItem(editNS, FIND_PLUS(4), _("Speech"), NULL, @""); + NSMenu *speech = [[NSMenu alloc] initWithTitle:@"Speech"]; + AddNativeItem(speech, -1, _("Start Speaking"), @selector(startSpeaking:), @""); + AddNativeItem(speech, -1, _("Stop Speaking"), @selector(stopSpeaking:), @""); + [editNS setSubmenu:speech forItem:item]; + + int viewMenuPos = bar->FindMenu(_("&View")); + if (viewMenuPos != wxNOT_FOUND) + { + NSMenu *viewNS = bar->GetMenu(viewMenuPos)->GetHMenu(); + [viewNS addItem:[NSMenuItem separatorItem]]; + item = AddNativeItem(viewNS, -1, _("Enter Full Screen"), @selector(toggleFullScreen:), @"f"); + [item setKeyEquivalentModifierMask:NSCommandKeyMask | NSControlKeyMask]; + + } + + int windowMenuPos = bar->FindMenu(_("Window")); + if (windowMenuPos != wxNOT_FOUND) + { + NSMenu *windowNS = bar->GetMenu(windowMenuPos)->GetHMenu(); + AddNativeItem(windowNS, -1, _("Minimize"), @selector(performMiniaturize:), @"m"); + AddNativeItem(windowNS, -1, _("Zoom"), @selector(performZoom:), @""); + [windowNS addItem:[NSMenuItem separatorItem]]; + AddNativeItem(windowNS, -1, _("Bring All to Front"), @selector(arrangeInFront:), @""); + [NSApp setWindowsMenu:windowNS]; + } +} + +void PoeditApp::CreateFakeOpenRecentMenu() +{ + // Populate the menu with a hack that will be replaced. + NSMenu *mainMenu = [NSApp mainMenu]; + + NSMenuItem *item = [mainMenu addItemWithTitle:@"File" action:NULL keyEquivalent:@""]; + NSMenu *menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"File", nil)]; + + item = [menu addItemWithTitle:NSLocalizedString(@"Open Recent", nil) + action:NULL + keyEquivalent:@""]; + NSMenu *openRecentMenu = [[NSMenu alloc] initWithTitle:@"Open Recent"]; + [openRecentMenu performSelector:@selector(_setMenuName:) withObject:@"NSRecentDocumentsMenu"]; + [menu setSubmenu:openRecentMenu forItem:item]; + m_recentMenuData->menuItem = item; + m_recentMenuData->menu = openRecentMenu; + + item = [openRecentMenu addItemWithTitle:NSLocalizedString(@"Clear Menu", nil) + action:@selector(clearRecentDocuments:) + keyEquivalent:@""]; +} + +void PoeditApp::InstallOpenRecentMenu(wxMenuBar *bar) +{ + if (m_recentMenuData->menuItem) + [m_recentMenuData->menuItem setSubmenu:nil]; + m_recentMenuData->menuBar = nullptr; + + if (!bar) + return; + + wxMenu *fileMenu; + wxMenuItem *item = bar->FindItem(XRCID("open_recent"), &fileMenu); + if (!item) + return; + + NSMenu *native = fileMenu->GetHMenu(); + NSMenuItem *nativeItem = [native itemWithTitle:str::to_NS(item->GetItemLabelText())]; + if (!nativeItem) + return; + + [nativeItem setSubmenu:m_recentMenuData->menu]; + m_recentMenuData->menuItem = nativeItem; + m_recentMenuData->menuBar = bar; +} + +void PoeditApp::OnIdleInstallOpenRecentMenu(wxIdleEvent& event) +{ + event.Skip(); + auto installed = wxMenuBar::MacGetInstalledMenuBar(); + if (m_recentMenuData->menuBar != installed) + InstallOpenRecentMenu(installed); +} + +void PoeditApp::OSXOnWillFinishLaunching() +{ + wxApp::OSXOnWillFinishLaunching(); + CreateFakeOpenRecentMenu(); + // We already create the menu item, this would cause duplicates "thanks" to the weird + // way wx's menubar works on OS X: + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"]; +} + +// Handle Cmd+W closure of windows globally here +void PoeditApp::OnCloseWindowCommand(wxCommandEvent&) +{ + for (auto w: wxTopLevelWindows) + { + auto tlw = dynamic_cast(w); + if (tlw && tlw->IsActive()) + { + tlw->Close(); + break; + } + } +} + +#endif // __WXOSX__ + + +#ifdef __WXMSW__ + +void PoeditApp::AssociateFileTypeIfNeeded() +{ + // If installed without admin privileges, the installer won't associate + // Poedit with .po extension. Self-associate with it here in per-user + // registry record in this case. + + wchar_t buf[1000]; + DWORD bufSize = sizeof(buf); + HRESULT hr = AssocQueryString(ASSOCF_INIT_IGNOREUNKNOWN, + ASSOCSTR_EXECUTABLE, + L".po", NULL, + buf, &bufSize); + if (SUCCEEDED(hr)) + return; // already associated, nothing to do + + auto poCmd = wxString::Format("\"%s\" \"%%1\"", wxStandardPaths::Get().GetExecutablePath()); + auto poIcon = wxStandardPaths::Get().GetResourcesDir() + "\\Resources\\poedit-translation-generic.ico"; + wxRegKey key1(wxRegKey::HKCU, "Software\\Classes\\.po"); + key1.Create(); + key1.SetValue("", "Poedit.PO"); + wxRegKey key2(wxRegKey::HKCU, "Software\\Classes\\Poedit.PO"); + key2.Create(); + key2.SetValue("", _("PO Translation")); + wxRegKey key3(wxRegKey::HKCU, "Software\\Classes\\Poedit.PO\\Shell\\Open\\Command"); + key3.Create(); + key3.SetValue("", poCmd); + wxRegKey key4(wxRegKey::HKCU, "Software\\Classes\\Poedit.PO\\DefaultIcon"); + key4.Create(); + key4.SetValue("", poIcon); +} + + +void PoeditApp::OnWinsparkleCheck(wxCommandEvent& event) +{ + win_sparkle_check_update_with_ui(); +} + +// WinSparkle callbacks: +int PoeditApp::WinSparkle_CanShutdown() +{ + return !PoeditFrame::AnyWindowIsModified(); +} + +void PoeditApp::WinSparkle_Shutdown() +{ + wxGetApp().OnQuit(wxCommandEvent()); +} + +#endif // __WXMSW__ + diff --git a/src/edapp.h b/src/edapp.h new file mode 100644 index 0000000..ba0b2f8 --- /dev/null +++ b/src/edapp.h @@ -0,0 +1,157 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + + +#ifndef _EDAPP_H_ +#define _EDAPP_H_ + +#include +#include +#include +#include + +#include "prefsdlg.h" + +class WXDLLIMPEXP_FWD_BASE wxConfigBase; +class WXDLLIMPEXP_FWD_BASE wxSingleInstanceChecker; +class WXDLLIMPEXP_FWD_CORE wxMenuBar; + + +/// wxApp for use with +class PoeditApp : public wxApp +{ + public: + PoeditApp(); + ~PoeditApp(); + + /** wxWin initialization hook. Shows PoeditFrame and initializes + configuration entries to default values if they were missing. + */ + virtual bool OnInit(); + virtual int OnExit(); + + virtual wxLayoutDirection GetLayoutDirection() const; + + /// Returns Poedit version string. + wxString GetAppVersion() const; + wxString GetAppBuildNumber() const; + bool IsBetaVersion() const; + bool CheckForBetaUpdates() const; + + // opens files in new frame + void OpenFiles(const wxArrayString& filenames); + // opens empty frame or catalogs manager + void OpenNewFile(); + +#ifndef __WXOSX__ + wxFileHistory& FileHistory() { return m_history; } +#endif + +#ifdef __WXOSX__ + virtual void MacOpenFiles(const wxArrayString& names) { OpenFiles(names); } + virtual void MacNewFile() { OpenNewFile(); } + virtual void MacOpenURL(const wxString &url) { HandleCustomURI(url); } +#endif + + void EditPreferences(); + + virtual bool OnExceptionInMainLoop(); + + // Open page on poedit.net in the browser + void OpenPoeditWeb(const wxString& path); + +#ifdef __WXOSX__ + // Make OSX-specific modifications to the menus, e.g. adding items into + // the apple menu etc. Call on every newly created menubar + void TweakOSXMenuBar(wxMenuBar *bar); + void CreateFakeOpenRecentMenu(); + void InstallOpenRecentMenu(wxMenuBar *bar); + void OnIdleInstallOpenRecentMenu(wxIdleEvent& event); + virtual void OSXOnWillFinishLaunching(); + void OnCloseWindowCommand(wxCommandEvent& event); +#endif + + protected: + /** Sets default values to configuration items that don't + have anything set. (This may happen after fresh installation or + upgrade to new version.) + */ + void SetDefaultCfg(wxConfigBase *cfg); + void SetDefaultExtractors(wxConfigBase *cfg); + + void OnInitCmdLine(wxCmdLineParser& parser); + bool OnCmdLineParsed(wxCmdLineParser& parser); + + private: + void HandleCustomURI(const wxString& uri); + + void SetupLanguage(); + + // App-global menu commands: + void OnNew(wxCommandEvent& event); + void OnOpen(wxCommandEvent& event); + void OnOpenFromCrowdin(wxCommandEvent& event); +#ifndef __WXOSX__ + void OnOpenHist(wxCommandEvent& event); +#endif + void OnAbout(wxCommandEvent& event); + void OnManager(wxCommandEvent& event); + void OnQuit(wxCommandEvent& event); + void OnPreferences(wxCommandEvent& event); + void OnHelp(wxCommandEvent& event); + void OnGettextManual(wxCommandEvent& event); + +#ifdef __WXMSW__ + void AssociateFileTypeIfNeeded(); + void OnWinsparkleCheck(wxCommandEvent& event); + static int WinSparkle_CanShutdown(); + static void WinSparkle_Shutdown(); +#endif + + DECLARE_EVENT_TABLE() + +#ifdef __WXOSX__ + class RecentMenuData; + std::unique_ptr m_recentMenuData; +#else + wxFileHistory m_history; +#endif + + std::unique_ptr m_preferences; + + std::unique_ptr m_locale; + +#ifndef __WXOSX__ + class RemoteServer; + class RemoteClient; + std::unique_ptr m_remoteServer; + std::unique_ptr m_instanceChecker; +#endif +}; + +DECLARE_APP(PoeditApp); + + +#endif // _EDAPP_H_ diff --git a/src/edframe.cpp b/src/edframe.cpp new file mode 100644 index 0000000..dfd7a12 --- /dev/null +++ b/src/edframe.cpp @@ -0,0 +1,3924 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "edframe.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __WXOSX__ +#import +#include "osx_helpers.h" +#endif + +#include +#include +#include +#include + +#include "catalog.h" +#include "concurrency.h" +#include "crowdin_gui.h" +#include "customcontrols.h" +#include "edapp.h" +#include "hidpi.h" +#include "propertiesdlg.h" +#include "prefsdlg.h" +#include "fileviewer.h" +#include "findframe.h" +#include "tm/transmem.h" +#include "language.h" +#include "progressinfo.h" +#include "commentdlg.h" +#include "main_toolbar.h" +#include "manager.h" +#include "pluralforms/pl_evaluate.h" +#include "attentionbar.h" +#include "errorbar.h" +#include "utility.h" +#include "languagectrl.h" +#include "welcomescreen.h" +#include "errors.h" +#include "sidebar.h" +#include "spellchecking.h" +#include "str_helpers.h" +#include "syntaxhighlighter.h" +#include "text_control.h" + + +// this should be high enough to not conflict with any wxNewId-allocated value, +PoeditFrame::PoeditFramesList PoeditFrame::ms_instances; + +// but there's a check for this in the PoeditFrame ctor, too +const wxWindowID ID_POEDIT_FIRST = wxID_HIGHEST + 10000; +const unsigned ID_POEDIT_STEP = 1000; + +const wxWindowID ID_POPUP_REFS = ID_POEDIT_FIRST + 1*ID_POEDIT_STEP; +const wxWindowID ID_POPUP_DUMMY = ID_POEDIT_FIRST + 3*ID_POEDIT_STEP; +const wxWindowID ID_BOOKMARK_GO = ID_POEDIT_FIRST + 4*ID_POEDIT_STEP; +const wxWindowID ID_BOOKMARK_SET = ID_POEDIT_FIRST + 5*ID_POEDIT_STEP; + +const wxWindowID ID_POEDIT_LAST = ID_POEDIT_FIRST + 6*ID_POEDIT_STEP; + +const wxWindowID ID_LIST = wxNewId(); +const wxWindowID ID_TEXTORIG = wxNewId(); +const wxWindowID ID_TEXTORIGPLURAL = wxNewId(); +const wxWindowID ID_TEXTTRANS = wxNewId(); + + +#ifdef __VISUALC__ +// Disabling the useless and annoying MSVC++'s +// warning C4800: 'long' : forcing value to bool 'true' or 'false' +// (performance warning): +#pragma warning ( disable : 4800 ) +#endif + + +// I don't like this global flag, but all PoeditFrame instances must share it +bool g_focusToText = false; + +/*static*/ PoeditFrame *PoeditFrame::Find(const wxString& filename) +{ + wxFileName fn(filename); + + for (auto n: ms_instances) + { + if (wxFileName(n->GetFileName()) == fn) + return n; + } + return NULL; +} + +/*static*/ PoeditFrame *PoeditFrame::UnusedWindow(bool active) +{ + for (auto win: ms_instances) + { + if ((!active || win->IsActive()) && win->m_catalog == nullptr) + return win; + } + return nullptr; +} + +/*static*/ bool PoeditFrame::AnyWindowIsModified() +{ + for (PoeditFramesList::const_iterator n = ms_instances.begin(); + n != ms_instances.end(); ++n) + { + if ((*n)->IsModified()) + return true; + } + return false; +} + +/*static*/ PoeditFrame *PoeditFrame::Create(const wxString& filename) +{ + PoeditFrame *f = PoeditFrame::Find(filename); + if (f) + { + f->Raise(); + } + else + { + // NB: duplicated in ReadCatalog() + CatalogPtr cat = std::make_shared(filename); + if (!cat->IsOk()) + { + wxMessageDialog dlg + ( + nullptr, + _("The file cannot be opened."), + _("Invalid file"), + wxOK | wxICON_ERROR + ); + dlg.SetExtendedMessage( + _("The file may be either corrupted or in a format not recognized by Poedit.") + ); + dlg.ShowModal(); + return nullptr; + } + + f = new PoeditFrame(); + f->Show(true); + f->ReadCatalog(cat); + } + + f->Show(true); + + if (g_focusToText && f->m_textTrans) + ((wxTextCtrl*)f->m_textTrans)->SetFocus(); + else if (f->m_list) + f->m_list->SetFocus(); + + return f; +} + +/*static*/ PoeditFrame *PoeditFrame::CreateEmpty() +{ + PoeditFrame *f = new PoeditFrame; + f->Show(true); + + return f; +} + +/*static*/ PoeditFrame *PoeditFrame::CreateWelcome() +{ + PoeditFrame *f = new PoeditFrame; + f->EnsureContentView(Content::Welcome); + f->Show(true); + + return f; +} + + + +class TransTextctrlHandler : public wxEvtHandler +{ + public: + TransTextctrlHandler(PoeditFrame* frame) : m_frame(frame) {} + + private: + void OnText(wxCommandEvent& event) + { + m_frame->UpdateFromTextCtrl(); + event.Skip(); + } + + PoeditFrame *m_frame; + + DECLARE_EVENT_TABLE() +}; + +BEGIN_EVENT_TABLE(TransTextctrlHandler, wxEvtHandler) + EVT_TEXT(-1, TransTextctrlHandler::OnText) +END_EVENT_TABLE() + + +// special handling of events in listctrl +class ListHandler : public wxEvtHandler +{ + public: + ListHandler(PoeditFrame *frame) : + wxEvtHandler(), m_frame(frame) {} + + private: + void OnSel(wxListEvent& event) { m_frame->OnListSel(event); } + void OnRightClick(wxMouseEvent& event) { m_frame->OnListRightClick(event); } + void OnFocus(wxFocusEvent& event) { m_frame->OnListFocus(event); } + + DECLARE_EVENT_TABLE() + + PoeditFrame *m_frame; +}; + +BEGIN_EVENT_TABLE(ListHandler, wxEvtHandler) + EVT_LIST_ITEM_SELECTED (ID_LIST, ListHandler::OnSel) + EVT_RIGHT_DOWN ( ListHandler::OnRightClick) + EVT_SET_FOCUS ( ListHandler::OnFocus) +END_EVENT_TABLE() + + +BEGIN_EVENT_TABLE(PoeditFrame, wxFrame) +// OS X and GNOME apps should open new documents in a new window. On Windows, +// however, the usual thing to do is to open the new document in the already +// open window and replace the current document. +#ifdef __WXMSW__ + EVT_MENU (wxID_NEW, PoeditFrame::OnNew) + EVT_MENU (XRCID("menu_new_from_pot"),PoeditFrame::OnNew) + EVT_MENU (wxID_OPEN, PoeditFrame::OnOpen) + #ifdef HAVE_HTTP_CLIENT + EVT_MENU (XRCID("menu_open_crowdin"),PoeditFrame::OnOpenFromCrowdin) + #endif +#endif // __WXMSW__ +#ifndef __WXOSX__ + EVT_MENU_RANGE (wxID_FILE1, wxID_FILE9, PoeditFrame::OnOpenHist) + EVT_MENU (wxID_CLOSE, PoeditFrame::OnCloseCmd) +#endif + EVT_MENU (wxID_SAVE, PoeditFrame::OnSave) + EVT_MENU (wxID_SAVEAS, PoeditFrame::OnSaveAs) + EVT_MENU (XRCID("menu_compile_mo"), PoeditFrame::OnCompileMO) + EVT_MENU (XRCID("menu_export"), PoeditFrame::OnExport) + EVT_MENU (XRCID("menu_catproperties"), PoeditFrame::OnProperties) + EVT_MENU (XRCID("menu_update_from_src"), PoeditFrame::OnUpdateFromSources) + EVT_MENU (XRCID("menu_update_from_pot"),PoeditFrame::OnUpdateFromPOT) + #ifdef HAVE_HTTP_CLIENT + EVT_MENU (XRCID("menu_update_from_crowdin"),PoeditFrame::OnUpdateFromCrowdin) + #endif + EVT_MENU (XRCID("toolbar_update"),PoeditFrame::OnUpdateSmart) + EVT_MENU (XRCID("menu_validate"), PoeditFrame::OnValidate) + EVT_MENU (XRCID("menu_purge_deleted"), PoeditFrame::OnPurgeDeleted) + EVT_MENU (XRCID("menu_fuzzy"), PoeditFrame::OnFuzzyFlag) + EVT_MENU (XRCID("menu_ids"), PoeditFrame::OnIDsFlag) + EVT_MENU (XRCID("sort_by_order"), PoeditFrame::OnSortByFileOrder) + EVT_MENU (XRCID("sort_by_source"), PoeditFrame::OnSortBySource) + EVT_MENU (XRCID("sort_by_translation"), PoeditFrame::OnSortByTranslation) + EVT_MENU (XRCID("sort_group_by_context"), PoeditFrame::OnSortGroupByContext) + EVT_MENU (XRCID("sort_untrans_first"), PoeditFrame::OnSortUntranslatedFirst) + EVT_MENU (XRCID("sort_errors_first"), PoeditFrame::OnSortErrorsFirst) + EVT_MENU (XRCID("show_sidebar"), PoeditFrame::OnShowHideSidebar) + EVT_UPDATE_UI (XRCID("show_sidebar"), PoeditFrame::OnUpdateShowHideSidebar) + EVT_MENU (XRCID("show_statusbar"), PoeditFrame::OnShowHideStatusbar) + EVT_UPDATE_UI (XRCID("show_statusbar"), PoeditFrame::OnUpdateShowHideStatusbar) + EVT_MENU (XRCID("menu_copy_from_src"), PoeditFrame::OnCopyFromSource) + EVT_MENU (XRCID("menu_copy_from_singular"), PoeditFrame::OnCopyFromSingular) + EVT_MENU (XRCID("menu_clear"), PoeditFrame::OnClearTranslation) + EVT_MENU (XRCID("menu_references"), PoeditFrame::OnReferencesMenu) + EVT_MENU (wxID_FIND, PoeditFrame::OnFind) + EVT_MENU (wxID_REPLACE, PoeditFrame::OnFindAndReplace) + EVT_MENU (XRCID("menu_find_next"), PoeditFrame::OnFindNext) + EVT_MENU (XRCID("menu_find_prev"), PoeditFrame::OnFindPrev) + EVT_MENU (XRCID("menu_comment"), PoeditFrame::OnEditComment) + EVT_BUTTON (XRCID("menu_comment"), PoeditFrame::OnEditComment) + EVT_MENU (XRCID("go_done_and_next"), PoeditFrame::OnDoneAndNext) + EVT_MENU (XRCID("go_prev"), PoeditFrame::OnPrev) + EVT_MENU (XRCID("go_next"), PoeditFrame::OnNext) + EVT_MENU (XRCID("go_prev_page"), PoeditFrame::OnPrevPage) + EVT_MENU (XRCID("go_next_page"), PoeditFrame::OnNextPage) + EVT_MENU (XRCID("go_prev_unfinished"), PoeditFrame::OnPrevUnfinished) + EVT_MENU (XRCID("go_next_unfinished"), PoeditFrame::OnNextUnfinished) + EVT_MENU (XRCID("go_prev_pluralform"), PoeditFrame::OnPrevPluralForm) + EVT_MENU (XRCID("go_next_pluralform"), PoeditFrame::OnNextPluralForm) + EVT_MENU_RANGE (ID_POPUP_REFS, ID_POPUP_REFS + 999, PoeditFrame::OnReference) + EVT_COMMAND (wxID_ANY, EVT_SUGGESTION_SELECTED, PoeditFrame::OnSuggestion) + EVT_MENU (XRCID("menu_auto_translate"), PoeditFrame::OnAutoTranslateAll) + EVT_MENU_RANGE (ID_BOOKMARK_GO, ID_BOOKMARK_GO + 9, + PoeditFrame::OnGoToBookmark) + EVT_MENU_RANGE (ID_BOOKMARK_SET, ID_BOOKMARK_SET + 9, + PoeditFrame::OnSetBookmark) + EVT_CLOSE ( PoeditFrame::OnCloseWindow) + EVT_SIZE (PoeditFrame::OnSize) + + // handling of selection: + EVT_UPDATE_UI(XRCID("menu_references"), PoeditFrame::OnReferencesMenuUpdate) + EVT_UPDATE_UI_RANGE(ID_BOOKMARK_SET, ID_BOOKMARK_SET + 9, PoeditFrame::OnSingleSelectionUpdate) + + EVT_UPDATE_UI(XRCID("go_done_and_next"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_prev"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_next"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_prev_page"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_next_page"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_prev_unfinished"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_next_unfinished"), PoeditFrame::OnSingleSelectionUpdate) + EVT_UPDATE_UI(XRCID("go_prev_pluralform"), PoeditFrame::OnSingleSelectionWithPluralsUpdate) + EVT_UPDATE_UI(XRCID("go_next_pluralform"), PoeditFrame::OnSingleSelectionWithPluralsUpdate) + + EVT_UPDATE_UI(XRCID("menu_fuzzy"), PoeditFrame::OnSelectionUpdateEditable) + EVT_UPDATE_UI(XRCID("menu_clear"), PoeditFrame::OnSelectionUpdateEditable) + EVT_UPDATE_UI(XRCID("menu_copy_from_src"), PoeditFrame::OnSelectionUpdateEditable) + EVT_UPDATE_UI(XRCID("menu_copy_from_singular"), PoeditFrame::OnSingleSelectionWithPluralsUpdate) + EVT_UPDATE_UI(XRCID("menu_comment"), PoeditFrame::OnEditCommentUpdate) + + // handling of open files: + EVT_UPDATE_UI(wxID_SAVE, PoeditFrame::OnHasCatalogUpdate) + EVT_UPDATE_UI(wxID_SAVEAS, PoeditFrame::OnHasCatalogUpdate) + EVT_UPDATE_UI(XRCID("menu_statistics"), PoeditFrame::OnHasCatalogUpdate) + EVT_UPDATE_UI(XRCID("menu_validate"), PoeditFrame::OnIsEditableUpdate) + EVT_UPDATE_UI(XRCID("menu_update_from_src"), PoeditFrame::OnUpdateFromSourcesUpdate) + #ifdef HAVE_HTTP_CLIENT + EVT_UPDATE_UI(XRCID("menu_update_from_crowdin"), PoeditFrame::OnUpdateFromCrowdinUpdate) + #endif + EVT_UPDATE_UI(XRCID("menu_update_from_pot"), PoeditFrame::OnUpdateFromPOTUpdate) + EVT_UPDATE_UI(XRCID("toolbar_update"), PoeditFrame::OnUpdateSmartUpdate) + + // handling of find/replace: + EVT_UPDATE_UI(XRCID("menu_find_next"), PoeditFrame::OnUpdateFind) + EVT_UPDATE_UI(XRCID("menu_find_prev"), PoeditFrame::OnUpdateFind) + +#if defined(__WXMSW__) || defined(__WXGTK__) + EVT_MENU(wxID_UNDO, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_REDO, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_CUT, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_COPY, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_PASTE, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_DELETE, PoeditFrame::OnTextEditingCommand) + EVT_MENU(wxID_SELECTALL, PoeditFrame::OnTextEditingCommand) + EVT_UPDATE_UI(wxID_UNDO, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_REDO, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_CUT, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_COPY, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_PASTE, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_DELETE, PoeditFrame::OnTextEditingCommandUpdate) + EVT_UPDATE_UI(wxID_SELECTALL, PoeditFrame::OnTextEditingCommandUpdate) +#endif +END_EVENT_TABLE() + +#if 0 + // These translations are provided by wxWidgets. Force the strings here, + // even though unused, because Poedit is translated into many more languages + // than wx is. + _("&Undo"), _("Undo") + _("&Redo"), _("Redo") + _("Cu&t"), _("Cut") + _("&Copy"), _("Copy") + _("&Paste"), _("Paste") + _("&Delete"), _("Delete") + _("Select &All"), _("Select All") + + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Ctrl+"), + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Alt+"), + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Shift+"), + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Enter"), + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Up"), + /// TRANSLATORS: Keyboard shortcut for display in Windows menus + _("Down"), + + /// TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" + _("ctrl"), + /// TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" + _("alt"), + /// TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" + _("shift"), +#endif + + + +class PoeditDropTarget : public wxFileDropTarget +{ +public: + PoeditDropTarget(PoeditFrame *win) : m_win(win) {} + + virtual bool OnDropFiles(wxCoord /*x*/, wxCoord /*y*/, + const wxArrayString& files) + { + if ( files.size() != 1 ) + { + wxLogError(_("You can't drop more than one file on Poedit window.")); + return false; + } + + wxFileName f(files[0]); + + auto ext = f.GetExt().Lower(); + if ( ext != "po" && ext != "pot" ) + { + wxLogError(_("File '%s' is not a message catalog."), + f.GetFullPath().c_str()); + return false; + } + + if ( !f.FileExists() ) + { + wxLogError(_("File '%s' doesn't exist."), f.GetFullPath().c_str()); + return false; + } + + m_win->OpenFile(f.GetFullPath()); + + return true; + } + +private: + PoeditFrame *m_win; +}; + + +// Frame class: + +PoeditFrame::PoeditFrame() : + wxFrame(NULL, -1, _("Poedit"), + wxDefaultPosition, wxDefaultSize, + wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE, + "mainwin"), + m_contentType(Content::Invalid), + m_contentView(nullptr), + m_catalog(nullptr), + m_fileExistsOnDisk(false), + m_list(nullptr), + m_modified(false), + m_hasObsoleteItems(false), + m_dontAutoclearFuzzyStatus(false), + m_setSashPositionsWhenMaximized(false) +{ + m_list = nullptr; + m_textTrans = nullptr; + m_textOrig = nullptr; + m_textOrigPlural = nullptr; + m_splitter = nullptr; + m_sidebarSplitter = nullptr; + m_sidebar = nullptr; + m_errorBar = nullptr; + m_labelContext = m_labelPlural = m_labelSingular = nullptr; + m_pluralNotebook = nullptr; + + // make sure that the [ID_POEDIT_FIRST,ID_POEDIT_LAST] range of IDs is not + // used for anything else: + wxASSERT_MSG( wxGetCurrentId() < ID_POEDIT_FIRST || + wxGetCurrentId() > ID_POEDIT_LAST, + "detected ID values conflict!" ); + wxRegisterId(ID_POEDIT_LAST); + + wxConfigBase *cfg = wxConfig::Get(); + + m_displayIDs = (bool)cfg->Read("display_lines", (long)false); + g_focusToText = (bool)cfg->Read("focus_to_text", (long)false); + +#if defined(__WXGTK__) + wxIconBundle appicons; + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(16,16))); + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(32,32))); + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(48,48))); + SetIcons(appicons); +#elif defined(__WXMSW__) + SetIcons(wxIconBundle(wxStandardPaths::Get().GetResourcesDir() + "\\Resources\\Poedit.ico")); +#endif + + // This is different from the default, because it's a bit smaller on OS X + m_normalGuiFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + m_boldGuiFont = m_normalGuiFont; + m_boldGuiFont.SetWeight(wxFONTWEIGHT_BOLD); + + wxMenuBar *MenuBar = wxXmlResource::Get()->LoadMenuBar("mainmenu"); + if (MenuBar) + { +#ifndef __WXOSX__ + m_menuForHistory = MenuBar->GetMenu(MenuBar->FindMenu(_("&File"))); + FileHistory().UseMenu(m_menuForHistory); + FileHistory().AddFilesToMenu(m_menuForHistory); +#endif + SetMenuBar(MenuBar); + AddBookmarksMenu(MenuBar->GetMenu(MenuBar->FindMenu(_("&Go")))); +#ifdef __WXOSX__ + wxGetApp().TweakOSXMenuBar(MenuBar); +#endif +#ifndef HAVE_HTTP_CLIENT + wxMenu *menu; + wxMenuItem *item; + item = MenuBar->FindItem(XRCID("menu_update_from_crowdin"), &menu); + menu->Destroy(item); + item = MenuBar->FindItem(XRCID("menu_open_crowdin"), &menu); + menu->Destroy(item); +#endif + } + else + { + wxLogError("Cannot load main menu from resource, something must have went terribly wrong."); + wxLog::FlushActive(); + return; + } + + m_toolbar = MainToolbar::Create(this); + + GetMenuBar()->Check(XRCID("menu_ids"), m_displayIDs); + + if (wxConfigBase::Get()->ReadBool("/statusbar_shown", true)) + CreateStatusBar(1, wxST_SIZEGRIP); + + m_contentWrappingSizer = new wxBoxSizer(wxVERTICAL); + SetSizer(m_contentWrappingSizer); + + m_attentionBar = new AttentionBar(this); + m_contentWrappingSizer->Add(m_attentionBar, wxSizerFlags().Expand()); + + SetAccelerators(); + + wxSize defaultSize(PX(1100), PX(750)); + if (!wxRect(wxGetDisplaySize()).Contains(wxSize(PX(1400),PX(850)))) + defaultSize = wxSize(PX(980), PX(700)); + RestoreWindowState(this, defaultSize, WinState_Size | WinState_Pos); + + UpdateMenu(); + + ms_instances.insert(this); + + SetDropTarget(new PoeditDropTarget(this)); + +#ifdef __WXOSX__ + NSWindow *wnd = (NSWindow*)GetWXWindow(); + [wnd setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; +#endif +} + + +void PoeditFrame::EnsureContentView(Content type) +{ + if (m_contentType == type) + return; + +#ifdef __WXMSW__ + wxWindowUpdateLocker no_updates(this); +#endif + + if (m_contentView) + DestroyContentView(); + + switch (type) + { + case Content::Invalid: + m_contentType = Content::Invalid; + return; // nothing to do + + case Content::Welcome: + m_contentView = CreateContentViewWelcome(); + break; + + case Content::Empty_PO: + m_contentView = CreateContentViewEmptyPO(); + break; + + case Content::PO: + case Content::POT: + m_contentView = CreateContentViewPO(type); + break; + } + + m_contentType = type; + m_contentWrappingSizer->Add(m_contentView, wxSizerFlags(1).Expand()); + Layout(); +#ifdef __WXMSW__ + m_contentView->Show(); + Layout(); +#endif +} + +void PoeditFrame::EnsureAppropriateContentView() +{ + wxCHECK_RET( m_catalog, "must have catalog here" ); + + if (m_catalog->empty()) + { + EnsureContentView(Content::Empty_PO); + } + else + { + switch (m_catalog->GetFileType()) + { + case Catalog::Type::PO: + EnsureContentView(Content::PO); + break; + case Catalog::Type::POT: + EnsureContentView(Content::POT); + break; + } + } +} + + +wxWindow* PoeditFrame::CreateContentViewPO(Content type) +{ + auto main = new wxPanel(this, wxID_ANY); + auto mainSizer = new wxBoxSizer(wxHORIZONTAL); + main->SetSizer(mainSizer); + +#ifdef __WXMSW__ + // don't create the window as shown, avoid flicker + main->Hide(); +#endif + + m_sidebarSplitter = new wxSplitterWindow(main, -1, + wxDefaultPosition, wxDefaultSize, + wxSP_NOBORDER | wxSP_LIVE_UPDATE); + m_sidebarSplitter->Bind(wxEVT_SPLITTER_SASH_POS_CHANGING, &PoeditFrame::OnSidebarSplitterSashMoving, this); + + mainSizer->Add(m_sidebarSplitter, wxSizerFlags(1).Expand()); + + m_splitter = new wxSplitterWindow(m_sidebarSplitter, -1, + wxDefaultPosition, wxDefaultSize, + wxSP_NOBORDER | wxSP_LIVE_UPDATE); + m_splitter->Bind(wxEVT_SPLITTER_SASH_POS_CHANGING, &PoeditFrame::OnSplitterSashMoving, this); + + // make only the upper part grow when resizing + m_splitter->SetSashGravity(1.0); + + m_list = new PoeditListCtrl(m_splitter, + ID_LIST, + wxDefaultPosition, wxDefaultSize, + wxLC_REPORT, + m_displayIDs); + + m_bottomPanel = new wxPanel(m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxNO_BORDER | DoubleBufferingWindowStyle()); +#ifdef __WXMSW__ + if (!IsWindowsXP()) + m_bottomPanel->SetDoubleBuffered(true); +#endif + + wxStaticText *labelSource = + new wxStaticText(m_bottomPanel, -1, _("Source text:")); + labelSource->SetFont(m_boldGuiFont); + + m_labelContext = new wxStaticText(m_bottomPanel, -1, wxEmptyString); + m_labelContext->SetFont(m_normalGuiFont); + m_labelContext->Hide(); + + m_labelSingular = new wxStaticText(m_bottomPanel, -1, _("Singular:")); + m_labelSingular->SetFont(m_normalGuiFont); + m_textOrig = new SourceTextCtrl(m_bottomPanel, ID_TEXTORIG); + m_labelPlural = new wxStaticText(m_bottomPanel, -1, _("Plural:")); + m_labelPlural->SetFont(m_normalGuiFont); + m_textOrigPlural = new SourceTextCtrl(m_bottomPanel, ID_TEXTORIGPLURAL); + + auto *panelSizer = new wxBoxSizer(wxVERTICAL); + + wxFlexGridSizer *gridSizer = new wxFlexGridSizer(2); + gridSizer->AddGrowableCol(1); + gridSizer->AddGrowableRow(0); + gridSizer->AddGrowableRow(1); + gridSizer->Add(m_labelSingular, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + gridSizer->Add(m_textOrig, 1, wxEXPAND); + gridSizer->Add(m_labelPlural, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + gridSizer->Add(m_textOrigPlural, 1, wxEXPAND); + gridSizer->SetItemMinSize(m_textOrig, 1, 1); + gridSizer->SetItemMinSize(m_textOrigPlural, 1, 1); + + panelSizer->Add(m_labelContext, 0, wxEXPAND | wxALL, 3); + panelSizer->Add(labelSource, 0, wxEXPAND | wxALL, 3); + panelSizer->Add(gridSizer, 1, wxEXPAND); + + if (type == Content::POT) + CreateContentViewTemplateControls(m_bottomPanel, panelSizer); + else + CreateContentViewEditControls(m_bottomPanel, panelSizer); + + SetCustomFonts(); + + m_bottomPanel->SetAutoLayout(true); + m_bottomPanel->SetSizer(panelSizer); + + m_splitter->SetMinimumPaneSize(PX(200)); + m_sidebarSplitter->SetMinimumPaneSize(PX(200)); + + m_list->PushEventHandler(new ListHandler(this)); + + + auto suggestionsMenu = GetMenuBar()->FindItem(XRCID("menu_suggestions"))->GetSubMenu(); + m_sidebar = new Sidebar(m_sidebarSplitter, suggestionsMenu); + m_sidebar->Bind(wxEVT_UPDATE_UI, &PoeditFrame::OnSingleSelectionUpdate, this); + + ShowPluralFormUI(false); + UpdateMenu(); + + switch ( m_list->sortOrder.by ) + { + case SortOrder::By_FileOrder: + GetMenuBar()->Check(XRCID("sort_by_order"), true); + break; + case SortOrder::By_Source: + GetMenuBar()->Check(XRCID("sort_by_source"), true); + break; + case SortOrder::By_Translation: + GetMenuBar()->Check(XRCID("sort_by_translation"), true); + break; + } + GetMenuBar()->Check(XRCID("sort_group_by_context"), m_list->sortOrder.groupByContext); + GetMenuBar()->Check(XRCID("sort_untrans_first"), m_list->sortOrder.untransFirst); + GetMenuBar()->Check(XRCID("sort_errors_first"), m_list->sortOrder.errorsFirst); + + // Call splitter splitting later, when the window is laid out, otherwise + // the sizes would get truncated immediately: + CallAfter([=]{ + // This is a hack -- windows are not maximized immediately and so we can't + // set correct sash position in ctor (unmaximized window may be too small + // for sash position when maximized -- see bug #2120600) + if ( wxConfigBase::Get()->Read(WindowStatePath(this) + "maximized", long(0)) ) + m_setSashPositionsWhenMaximized = true; + + if (wxConfigBase::Get()->ReadBool("/sidebar_shown", true)) + { + auto split = GetSize().x * wxConfigBase::Get()->ReadDouble("/sidebar_splitter", 0.75); + m_sidebarSplitter->SplitVertically(m_splitter, m_sidebar, split); + } + else + { + m_sidebar->Hide(); + m_sidebarSplitter->Initialize(m_splitter); + Layout(); + } + + m_splitter->SplitHorizontally(m_list, m_bottomPanel, (int)wxConfigBase::Get()->ReadLong("/splitter", -PX(250))); + + if (m_sidebar) + m_sidebar->SetUpperHeight(m_splitter->GetSashPosition()); + }); + + return main; +} + +void PoeditFrame::CreateContentViewEditControls(wxWindow *p, wxBoxSizer *panelSizer) +{ + p->Bind(wxEVT_UPDATE_UI, &PoeditFrame::OnSingleSelectionUpdate, this); + + wxStaticText *labelTrans = new wxStaticText(p, -1, _("Translation:")); + labelTrans->SetFont(m_boldGuiFont); + + m_textTrans = new TranslationTextCtrl(p, ID_TEXTTRANS); + m_textTrans->PushEventHandler(new TransTextctrlHandler(this)); + + // in case of plurals form, this is the control for n=1: + m_textTransSingularForm = nullptr; + + m_pluralNotebook = new wxNotebook(p, -1); + + m_errorBar = new ErrorBar(p); + + panelSizer->Add(labelTrans, 0, wxEXPAND | wxALL, 3); + panelSizer->Add(m_textTrans, 1, wxEXPAND); + panelSizer->Add(m_pluralNotebook, 1, wxEXPAND); + panelSizer->Add(m_errorBar, 0, wxEXPAND | wxALL, 2); +} + +void PoeditFrame::CreateContentViewTemplateControls(wxWindow *p, wxBoxSizer *panelSizer) +{ + auto win = new wxPanel(p, wxID_ANY); + auto sizer = new wxBoxSizer(wxVERTICAL); + + auto explain = new wxStaticText(win, wxID_ANY, _(L"POT files are only templates and don’t contain any translations themselves.\nTo make a translation, create a new PO file based on the template."), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE_HORIZONTAL); +#ifdef __WXOSX__ + explain->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + explain->SetForegroundColour(ExplanationLabel::GetTextColor().ChangeLightness(160)); + win->SetBackgroundColour(GetBackgroundColour().ChangeLightness(50)); + + auto button = new wxButton(win, wxID_ANY, MSW_OR_OTHER(_("Create new translation"), _("Create New Translation"))); + button->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) + { + wxWindowPtr dlg(new LanguageDialog(this)); + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + NewFromPOT(m_catalog->GetFileName(), dlg->GetLang()); + }); + }); + + sizer->AddStretchSpacer(); + sizer->Add(explain, wxSizerFlags().Center().Border(wxLEFT|wxRIGHT, PX(100))); + sizer->Add(button, wxSizerFlags().Center().Border(wxTOP|wxBOTTOM, PX(10))); + sizer->AddStretchSpacer(); + + win->SetSizerAndFit(sizer); + + panelSizer->Add(win, 1, wxEXPAND); +} + + +wxWindow* PoeditFrame::CreateContentViewWelcome() +{ + return new WelcomeScreenPanel(this); +} + + +wxWindow* PoeditFrame::CreateContentViewEmptyPO() +{ + return new EmptyPOScreenPanel(this); +} + + +void PoeditFrame::DestroyContentView() +{ + if (!m_contentView) + return; + + if (m_list) + m_list->PopEventHandler(true/*delete*/); + if (m_textTrans) + m_textTrans->PopEventHandler(true/*delete*/); + for (auto tp : m_textTransPlural) + { + tp->PopEventHandler(true/*delete*/); + } + m_textTransPlural.clear(); + + NotifyCatalogChanged(nullptr); + + if (m_splitter) + wxConfigBase::Get()->Write("/splitter", (long)m_splitter->GetSashPosition()); + + m_contentWrappingSizer->Detach(m_contentView); + m_contentView->Destroy(); + m_contentView = nullptr; + + m_list = nullptr; + m_labelContext = m_labelSingular = m_labelPlural = nullptr; + m_textTrans = m_textTransSingularForm = nullptr; + m_textOrig = nullptr; + m_textOrigPlural = nullptr; + m_errorBar = nullptr; + m_splitter = nullptr; + m_sidebarSplitter = nullptr; + m_sidebar = nullptr; + m_pluralNotebook = nullptr; + + if (m_findWindow) + { + m_findWindow->Destroy(); + m_findWindow.Release(); + } +} + + +PoeditFrame::~PoeditFrame() +{ + ms_instances.erase(this); + + DestroyContentView(); + + wxConfigBase *cfg = wxConfig::Get(); + cfg->SetPath("/"); + + cfg->Write("display_lines", m_displayIDs); + + SaveWindowState(this); + +#ifndef __WXOSX__ + FileHistory().RemoveMenu(m_menuForHistory); + FileHistory().Save(*cfg); +#endif + + // write all changes: + cfg->Flush(); + + m_catalog.reset(); + m_pendingHumanEditedItem.reset(); + + // shutdown the spellchecker: + InitSpellchecker(); +} + + +void PoeditFrame::SetAccelerators() +{ + wxAcceleratorEntry entries[] = { +#ifdef __WXMSW__ + { wxACCEL_CTRL, WXK_F3, XRCID("menu_find_next") }, + { wxACCEL_CTRL | wxACCEL_SHIFT, WXK_F3, XRCID("menu_find_prev") }, +#endif + + { wxACCEL_CTRL, WXK_PAGEUP, XRCID("go_prev_page") }, + { wxACCEL_CTRL, WXK_NUMPAD_PAGEUP, XRCID("go_prev_page") }, + { wxACCEL_CTRL, WXK_PAGEDOWN, XRCID("go_next_page") }, + { wxACCEL_CTRL, WXK_NUMPAD_PAGEDOWN, XRCID("go_next_page") }, + + { wxACCEL_CTRL | wxACCEL_SHIFT, WXK_UP, XRCID("go_prev_unfinished") }, + { wxACCEL_CTRL | wxACCEL_SHIFT, WXK_NUMPAD_UP, XRCID("go_prev_unfinished") }, + { wxACCEL_CTRL | wxACCEL_SHIFT, WXK_DOWN, XRCID("go_next_unfinished") }, + { wxACCEL_CTRL | wxACCEL_SHIFT, WXK_NUMPAD_DOWN, XRCID("go_next_unfinished") }, + + { wxACCEL_CTRL, WXK_UP, XRCID("go_prev") }, + { wxACCEL_CTRL, WXK_NUMPAD_UP, XRCID("go_prev") }, + { wxACCEL_CTRL, WXK_DOWN, XRCID("go_next") }, + { wxACCEL_CTRL, WXK_NUMPAD_DOWN, XRCID("go_next") }, + + { wxACCEL_CTRL, WXK_RETURN, XRCID("go_done_and_next") }, + { wxACCEL_CTRL, WXK_NUMPAD_ENTER, XRCID("go_done_and_next") } + }; + + wxAcceleratorTable accel(WXSIZEOF(entries), entries); + SetAcceleratorTable(accel); +} + + +void PoeditFrame::InitSpellchecker() +{ + if (!IsSpellcheckingAvailable()) + return; + + if (!m_catalog || !m_textTrans) + return; + + Language lang = m_catalog->GetLanguage(); + + bool report_problem = false; + bool enabled = m_catalog && + #ifndef __WXMSW__ // language choice is automatic, per-keyboard on Windows + lang.IsValid() && + #endif + wxConfig::Get()->Read("enable_spellchecking", + (long)true); + const bool enabledInitially = enabled; + +#ifdef __WXOSX__ + if (enabled) + { + if ( !SetSpellcheckerLang(lang.LangAndCountry()) ) + { + enabled = false; + report_problem = true; + } + } +#endif + + if ( !InitTextCtrlSpellchecker(m_textTrans, enabled, lang) ) + report_problem = true; + + for (size_t i = 0; i < m_textTransPlural.size(); i++) + { + if ( !InitTextCtrlSpellchecker(m_textTransPlural[i], enabled, lang) ) + report_problem = true; + } + +#ifndef __WXMSW__ // language choice is automatic, per-keyboard on Windows, can't fail + if ( enabledInitially && report_problem ) + { + // Some languages don't have a reasonable spellchecking method or hunspell support: + const bool notCapable = lang.Lang() == "zh" || lang.Lang() == "ja"; + if (!notCapable) + { + AttentionMessage msg + ( + "missing-spell-dict", + AttentionMessage::Warning, + wxString::Format + ( + // TRANSLATORS: %s is language name in its basic form (as you + // would see e.g. in a list of supported languages). You may need + // to rephrase it, e.g. to an equivalent of "for language %s". + _(L"Spellchecking is disabled, because the dictionary for %s isn’t installed."), + lang.LanguageDisplayName() + ) + ); + msg.AddAction(_("Install"), []{ ShowSpellcheckerHelp(); }); + msg.AddDontShowAgain(); + m_attentionBar->ShowMessage(msg); + } + } +#endif // !__WXMSW__ +} + + +void PoeditFrame::UpdateTextLanguage() +{ + if (!m_catalog || !m_textTrans) + return; + + InitSpellchecker(); + + auto lang = m_catalog->GetLanguage(); + m_textTrans->SetLanguage(lang); + for (auto tp : m_textTransPlural) + tp->SetLanguage(lang); + + if (m_sidebar) + m_sidebar->RefreshContent(); +} + + +#ifndef __WXOSX__ +void PoeditFrame::OnCloseCmd(wxCommandEvent&) +{ + Close(); +} +#endif + + +void PoeditFrame::OpenFile(const wxString& filename) +{ + DoIfCanDiscardCurrentDoc([=]{ + DoOpenFile(filename); + }); +} + + +void PoeditFrame::DoOpenFile(const wxString& filename) +{ + ReadCatalog(filename); + + if (m_textTrans && m_list) + { + if (g_focusToText) + m_textTrans->SetFocus(); + else + m_list->SetFocus(); + } +} + + +bool PoeditFrame::NeedsToAskIfCanDiscardCurrentDoc() const +{ + return m_catalog && m_modified; +} + +template +void PoeditFrame::DoIfCanDiscardCurrentDoc(TFunctor completionHandler) +{ + if ( !NeedsToAskIfCanDiscardCurrentDoc() ) + { + completionHandler(); + return; + } + + wxWindowPtr dlg = CreateAskAboutSavingDialog(); + + dlg->ShowWindowModalThenDo([this,dlg,completionHandler](int retval) { + // hide the dialog asap, WriteCatalog() may show another modal sheet + dlg->Hide(); +#ifdef __WXOSX__ + // Hide() alone is not sufficient on OS X, we need to destroy dlg + // shared_ptr and only then continue. Because this code is called + // from event loop (and not this functions' caller) at an unspecified + // time anyway, we can just as well defer it into the next idle time + // iteration. + CallAfter([this,retval,completionHandler]() { +#endif + + if (retval == wxID_YES) + { + auto doSaveFile = [=](const wxString& fn){ + WriteCatalog(fn, [=](bool saved){ + if (saved) + completionHandler(); + }); + }; + if (!m_fileExistsOnDisk || GetFileName().empty()) + GetSaveAsFilenameThenDo(m_catalog, doSaveFile); + else + doSaveFile(GetFileName()); + } + else if (retval == wxID_NO) + { + // call completion without saving the document + completionHandler(); + } + else if (retval == wxID_CANCEL) + { + // do not call -- not OK + } + +#ifdef __WXOSX__ + }); +#endif + }); +} + +wxWindowPtr PoeditFrame::CreateAskAboutSavingDialog() +{ + wxWindowPtr dlg(new wxMessageDialog + ( + this, + _("Catalog modified. Do you want to save changes?"), + _("Save changes"), + wxYES_NO | wxCANCEL | wxICON_QUESTION + )); + dlg->SetExtendedMessage(_("Your changes will be lost if you don't save them.")); + dlg->SetYesNoLabels + ( + _("Save"), + #ifdef __WXMSW__ + _("Don't save") + #else + _("Don't Save") + #endif + ); + return dlg; +} + + + +void PoeditFrame::OnCloseWindow(wxCloseEvent& event) +{ + if (event.CanVeto() && NeedsToAskIfCanDiscardCurrentDoc()) + { +#ifdef __WXOSX__ + // Veto the event by default, then window-modally ask for permission. + // If it turns out that the window can be closed, the completion handler + // will do it: + event.Veto(); + DoIfCanDiscardCurrentDoc([=]{ + Destroy(); + }); +#else // !__WXOSX__ + // DoIfCanDiscardCurentDoc() doesn't have on-failure callback and + // so we instead veto preemtively and then un-veto it. Note that this + // only works because on non-OSX platforms the question dialog is + // modal and the code below called immediately. + event.Veto(); + DoIfCanDiscardCurrentDoc([=, &event]{ + event.Veto(false); + Destroy(); + }); +#endif + } + else // can't veto + { + Destroy(); + } +} + + +void PoeditFrame::OnOpen(wxCommandEvent&) +{ + DoIfCanDiscardCurrentDoc([=]{ + + wxString path = wxPathOnly(GetFileName()); + if (path.empty()) + path = wxConfig::Get()->Read("last_file_path", wxEmptyString); + + wxString name = wxFileSelector(OSX_OR_OTHER("", _("Open catalog")), + path, wxEmptyString, wxEmptyString, + Catalog::GetAllTypesFileMask(), + wxFD_OPEN | wxFD_FILE_MUST_EXIST, this); + + if (!name.empty()) + { + wxConfig::Get()->Write("last_file_path", wxPathOnly(name)); + + DoOpenFile(name); + } + }); +} + + +#ifdef HAVE_HTTP_CLIENT +void PoeditFrame::OnOpenFromCrowdin(wxCommandEvent&) +{ + DoIfCanDiscardCurrentDoc([=]{ + CrowdinOpenFile(this, [=](wxString name){ + DoOpenFile(name); + }); + }); +} +#endif + + +#ifndef __WXOSX__ +void PoeditFrame::OnOpenHist(wxCommandEvent& event) +{ + wxString f(FileHistory().GetHistoryFile(event.GetId() - wxID_FILE1)); + if ( !wxFileExists(f) ) + { + wxLogError(_("File '%s' doesn't exist."), f.c_str()); + return; + } + + OpenFile(f); +} +#endif // !__WXOSX__ + + +void PoeditFrame::OnSave(wxCommandEvent& event) +{ + try + { + if (!m_fileExistsOnDisk || GetFileName().empty()) + OnSaveAs(event); + else + WriteCatalog(GetFileName()); + } + catch (Exception& e) + { + wxLogError("%s", e.What()); + } +} + + +static wxString SuggestFileName(const CatalogPtr& catalog) +{ + wxString name; + if (catalog) + name = catalog->GetLanguage().Code(); + + if (name.empty()) + return "default"; + else + return name; +} + +template +void PoeditFrame::GetSaveAsFilenameThenDo(const CatalogPtr& cat, F then) +{ + auto current = cat->GetFileName(); + wxString name(wxFileNameFromPath(current)); + wxString path(wxPathOnly(current)); + + if (name.empty()) + { + path = wxConfig::Get()->Read("last_file_path", wxEmptyString); + name = SuggestFileName(cat) + ".po"; + } + + wxWindowPtr dlg( + new wxFileDialog(this, + OSX_OR_OTHER("", _("Save as...")), + path, + name, + m_catalog->GetFileMask(), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode != wxID_OK) + return; + auto fn = dlg->GetPath(); + wxConfig::Get()->Write("last_file_path", wxPathOnly(name)); + then(fn); + }); +} + +void PoeditFrame::DoSaveAs(const wxString& filename) +{ + if (filename.empty()) + return; + + WriteCatalog(filename); +} + +void PoeditFrame::OnSaveAs(wxCommandEvent&) +{ + GetSaveAsFilenameThenDo(m_catalog, [=](const wxString& fn){ + DoSaveAs(fn); + }); +} + +void PoeditFrame::OnCompileMO(wxCommandEvent&) +{ + auto fileName = GetFileName(); + wxString name; + wxFileName::SplitPath(fileName, nullptr, &name, nullptr); + + if (name.empty()) + { + name = SuggestFileName(m_catalog) + ".mo"; + } + else + name += ".mo"; + + wxWindowPtr dlg( + new wxFileDialog(this, + OSX_OR_OTHER("", _("Compile to...")), + wxPathOnly(fileName), + name, + wxString::Format("%s (*.mo)|*.mo", _("Compiled Translation Files")), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode != wxID_OK) + return; + + wxBusyCursor bcur; + auto fn = dlg->GetPath(); + wxConfig::Get()->Write("last_file_path", wxPathOnly(fn)); + int validation_errors = 0; + Catalog::CompilationStatus compilation_status = Catalog::CompilationStatus::NotDone; + m_catalog->CompileToMO(fn, validation_errors, compilation_status); + + if (validation_errors) + { + // Note: this may show window-modal window and because we may + // be called from such window too, run this in the next + // event loop iteration. + CallAfter([=]{ + ReportValidationErrors(validation_errors, compilation_status, /*from_save=*/true, /*other_file_saved=*/false, []{}); + }); + } + }); +} + +void PoeditFrame::OnExport(wxCommandEvent&) +{ + auto fileName = GetFileName(); + wxString name; + wxFileName::SplitPath(fileName, nullptr, &name, nullptr); + + if (name.empty()) + { + name = SuggestFileName(m_catalog) + ".html"; + } + else + name += ".html"; + + wxWindowPtr dlg( + new wxFileDialog(this, + OSX_OR_OTHER("", _("Export as...")), + wxPathOnly(fileName), + name, + wxString::Format("%s (*.html)|*.html", _("HTML Files")), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode != wxID_OK) + return; + auto fn = dlg->GetPath(); + wxConfig::Get()->Write("last_file_path", wxPathOnly(fn)); + ExportCatalog(fn); + }); +} + +bool PoeditFrame::ExportCatalog(const wxString& filename) +{ + wxBusyCursor bcur; + + TempOutputFileFor tempfile(filename); + std::ofstream f; + f.open(tempfile.FileName().fn_str()); + m_catalog->ExportToHTML(f); + f.close(); + if (!tempfile.Commit()) + { + wxLogError(_("Couldn't save file %s."), filename); + return false; + } + return true; +} + + + +void PoeditFrame::OnNew(wxCommandEvent& event) +{ + DoIfCanDiscardCurrentDoc([=]{ + bool isFromPOT = event.GetId() == XRCID("menu_new_from_pot"); + if (isFromPOT) + NewFromPOT(); + else + NewFromScratch(); + }); +} + + +void PoeditFrame::NewFromPOT() +{ + wxString path = wxPathOnly(GetFileName()); + if (path.empty()) + path = wxConfig::Get()->Read("last_file_path", wxEmptyString); + wxString pot_file = + wxFileSelector(_("Open catalog template"), + path, wxEmptyString, wxEmptyString, + Catalog::GetTypesFileMask({Catalog::Type::POT, Catalog::Type::PO}), + wxFD_OPEN | wxFD_FILE_MUST_EXIST, this); + if (!pot_file.empty()) + { + wxConfig::Get()->Write("last_file_path", wxPathOnly(pot_file)); + NewFromPOT(pot_file); + } +} + +void PoeditFrame::NewFromPOT(const wxString& pot_file, Language language) +{ + UpdateResultReason reason; + CatalogPtr catalog = std::make_shared(); + if (!catalog->UpdateFromPOT(pot_file, + /*summary=*/false, + reason, + /*replace_header=*/true)) + { + return; + } + + m_catalog = catalog; + m_pendingHumanEditedItem.reset(); + + m_fileExistsOnDisk = false; + m_modified = true; + + EnsureAppropriateContentView(); + NotifyCatalogChanged(m_catalog); + + UpdateTitle(); + UpdateMenu(); + UpdateStatusBar(); + UpdateTextLanguage(); + + auto setLanguageFunc = [=](Language lang) + { + if (lang.IsValid()) + { + catalog->SetLanguage(lang); + + // Derive save location for the file from the location of the POT + // file (same directory, language-based name). This doesn't always + // work, e.g. WordPress plugins use different naming, so don't actually + // save the file just yet and let the user confirm the location when saving. + wxFileName pot_fn(pot_file); + pot_fn.SetFullName(lang.Code() + ".po"); + m_catalog->SetFileName(pot_fn.GetFullPath()); + } + else + { + // default to English style plural + if (catalog->HasPluralItems()) + catalog->Header().SetHeaderNotEmpty("Plural-Forms", "nplurals=2; plural=(n != 1);"); + } + + RecreatePluralTextCtrls(); + UpdateTitle(); + UpdateMenu(); + UpdateStatusBar(); + UpdateTextLanguage(); + NotifyCatalogChanged(m_catalog); // refresh language column + }; + + if (language.IsValid()) + { + setLanguageFunc(language); + } + else + { + // Choose the language: + wxWindowPtr dlg(new LanguageDialog(this)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + setLanguageFunc(dlg->GetLang()); + else + setLanguageFunc(Language()); + }); + } +} + + +void PoeditFrame::NewFromScratch() +{ + CatalogPtr catalog = std::make_shared(); + catalog->CreateNewHeader(); + + m_catalog = catalog; + m_pendingHumanEditedItem.reset(); + + m_fileExistsOnDisk = false; + m_modified = true; + + EnsureContentView(Content::Empty_PO); + + UpdateTitle(); + UpdateMenu(); + UpdateStatusBar(); + + // Choose the language: + wxWindowPtr dlg(new LanguageDialog(this)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + { + catalog->SetLanguage(dlg->GetLang()); + } + }); +} + + +void PoeditFrame::OnProperties(wxCommandEvent&) +{ + EditCatalogProperties(); +} + +void PoeditFrame::EditCatalogProperties() +{ + wxWindowPtr dlg(new PropertiesDialog(this, m_catalog, m_fileExistsOnDisk)); + + const Language prevLang = m_catalog->GetLanguage(); + dlg->TransferTo(m_catalog); + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + { + dlg->TransferFrom(m_catalog); + m_modified = true; + RecreatePluralTextCtrls(); + UpdateTitle(); + UpdateMenu(); + if (prevLang != m_catalog->GetLanguage()) + { + UpdateTextLanguage(); + // trigger resorting and language header update: + NotifyCatalogChanged(m_catalog); + } + } + }); +} + +void PoeditFrame::EditCatalogPropertiesAndUpdateFromSources() +{ + // TODO: share code with EditCatalogProperties() + + wxWindowPtr dlg(new PropertiesDialog(this, m_catalog, m_fileExistsOnDisk, 1)); + + const Language prevLang = m_catalog->GetLanguage(); + dlg->TransferTo(m_catalog); + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + { + dlg->TransferFrom(m_catalog); + m_modified = true; + if (m_list) + RecreatePluralTextCtrls(); + UpdateTitle(); + UpdateMenu(); + if (prevLang != m_catalog->GetLanguage()) + { + UpdateTextLanguage(); + // trigger resorting and language header update: + NotifyCatalogChanged(m_catalog); + } + + if (!m_catalog->Header().SearchPaths.empty()) + { + EnsureAppropriateContentView(); + UpdateCatalog(); + } + } + }); +} + + +void PoeditFrame::UpdateAfterPreferencesChange() +{ + g_focusToText = (bool)wxConfig::Get()->Read("focus_to_text", + (long)false); + + if (m_list) + { + SetCustomFonts(); + m_list->Refresh(); // if font changed + UpdateTextLanguage(); + } +} + +/*static*/ void PoeditFrame::UpdateAllAfterPreferencesChange() +{ + for (PoeditFramesList::const_iterator n = ms_instances.begin(); + n != ms_instances.end(); ++n) + { + (*n)->UpdateAfterPreferencesChange(); + } +} + + +bool PoeditFrame::UpdateCatalog(const wxString& pot_file) +{ + // This ensures that the list control won't be redrawn during Update() + // call when a dialog box is hidden; another alternative would be to call + // m_list->CatalogChanged(NULL) here + std::unique_ptr locker; + if (m_list) + locker.reset(new wxWindowUpdateLocker(m_list)); + + + UpdateResultReason reason = UpdateResultReason::Unspecified; + bool succ; + + if (pot_file.empty()) + { + if (m_catalog->HasSourcesAvailable()) + { + ProgressInfo progress(this, _("Updating catalog")); + succ = m_catalog->Update(&progress, true, reason); + locker.reset(); + EnsureAppropriateContentView(); + NotifyCatalogChanged(m_catalog); + } + else + { + reason = UpdateResultReason::NoSourcesFound; + succ = false; + } + } + else + { + succ = m_catalog->UpdateFromPOT(pot_file, true, reason); + locker.reset(); + EnsureAppropriateContentView(); + NotifyCatalogChanged(m_catalog); + } + + m_modified = succ || m_modified; + UpdateStatusBar(); + + if (!succ) + { + switch (reason) + { + case UpdateResultReason::NoSourcesFound: + { + wxWindowPtr dlg(new wxMessageDialog + ( + this, + _("Source code not available."), + _("Updating failed"), + wxOK | wxICON_ERROR + )); + dlg->SetExtendedMessage(_(L"Translations couldn’t be updated from the source code, because no code was found in the location specified in the catalog’s Properties.")); + dlg->ShowWindowModalThenDo([dlg](int){}); + break; + } + case UpdateResultReason::Unspecified: + { + wxLogWarning(_("Entries in the catalog are probably incorrect.")); + wxLogError( + _("Updating the catalog failed. Click on 'Details >>' for details.")); + break; + } + case UpdateResultReason::CancelledByUser: + break; + } + } + + return succ; +} + +void PoeditFrame::OnUpdateFromSources(wxCommandEvent&) +{ + DoIfCanDiscardCurrentDoc([=]{ + try + { + if (UpdateCatalog()) + { + if (wxConfig::Get()->ReadBool("use_tm", true) && + wxConfig::Get()->ReadBool("use_tm_when_updating", false)) + { + AutoTranslateCatalog(nullptr, AutoTranslate_OnlyGoodQuality); + } + } + } + catch (...) + { + wxLogError("%s", DescribeCurrentException()); + } + + RefreshControls(); + }); +} + +void PoeditFrame::OnUpdateFromSourcesUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && + !m_catalog->IsFromCrowdin() && + m_catalog->HasSourcesConfigured()); +} + +void PoeditFrame::OnUpdateFromPOT(wxCommandEvent&) +{ + DoIfCanDiscardCurrentDoc([=]{ + wxString path = wxPathOnly(GetFileName()); + if (path.empty()) + path = wxConfig::Get()->Read("last_file_path", wxEmptyString); + + wxWindowPtr dlg( + new wxFileDialog(this, + _("Open catalog template"), + path, + wxEmptyString, + Catalog::GetTypesFileMask({Catalog::Type::POT, Catalog::Type::PO}), + wxFD_OPEN | wxFD_FILE_MUST_EXIST)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode != wxID_OK) + return; + auto pot_file = dlg->GetPath(); + wxConfig::Get()->Write("last_file_path", wxPathOnly(pot_file)); + try + { + if (UpdateCatalog(pot_file)) + { + if (wxConfig::Get()->ReadBool("use_tm", true) && + wxConfig::Get()->ReadBool("use_tm_when_updating", false)) + { + AutoTranslateCatalog(nullptr, AutoTranslate_OnlyGoodQuality); + } + } + } + catch (...) + { + wxLogError("%s", DescribeCurrentException()); + } + }); + + RefreshControls(); + }); +} + +void PoeditFrame::OnUpdateFromPOTUpdate(wxUpdateUIEvent& event) +{ + if (!m_catalog || m_catalog->GetFileType() != Catalog::Type::PO) + event.Enable(false); + else + OnHasCatalogUpdate(event); +} + +#ifdef HAVE_HTTP_CLIENT +void PoeditFrame::OnUpdateFromCrowdin(wxCommandEvent&) +{ + DoIfCanDiscardCurrentDoc([=]{ + CrowdinSyncFile(this, m_catalog, [=](std::shared_ptr cat){ + m_catalog = cat; + EnsureAppropriateContentView(); + NotifyCatalogChanged(m_catalog); + RefreshControls(); + }); + }); +} + +void PoeditFrame::OnUpdateFromCrowdinUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && m_catalog->IsFromCrowdin() && + m_catalog->HasCapability(Catalog::Cap::Translations)); +} +#endif + +void PoeditFrame::OnUpdateSmart(wxCommandEvent& event) +{ + if (!m_catalog) + return; +#ifdef HAVE_HTTP_CLIENT + if (m_catalog->IsFromCrowdin()) + OnUpdateFromCrowdin(event); + else +#endif + OnUpdateFromSources(event); +} + +void PoeditFrame::OnUpdateSmartUpdate(wxUpdateUIEvent& event) +{ + event.Enable(false); + if (m_catalog) + { +#ifdef HAVE_HTTP_CLIENT + if (m_catalog->IsFromCrowdin()) + OnUpdateFromCrowdinUpdate(event); + else +#endif + OnUpdateFromSourcesUpdate(event); + } +} + + +void PoeditFrame::OnValidate(wxCommandEvent&) +{ + try + { + wxBusyCursor bcur; + ReportValidationErrors(m_catalog->Validate(), + /*mo_compilation_failed=*/Catalog::CompilationStatus::NotDone, + /*from_save=*/false, /*other_file_saved=*/false, []{}); + } + catch (Exception& e) + { + wxLogError("%s", e.What()); + } +} + + +template +void PoeditFrame::ReportValidationErrors(int errors, + Catalog::CompilationStatus mo_compilation_status, + bool from_save, bool other_file_saved, + TFunctor completionHandler) +{ + wxWindowPtr dlg; + + if ( errors ) + { + if (m_list && m_catalog->GetCount()) + m_list->RefreshItems(0, m_catalog->GetCount()-1); + RefreshControls(); + + dlg.reset(new wxMessageDialog + ( + this, + wxString::Format + ( + wxPLURAL("%d issue with the translation found.", + "%d issues with the translation found.", + errors), + errors + ), + _("Validation results"), + wxOK | wxICON_ERROR + )); + wxString details = _("Entries with errors were marked in red in the list. Details of the error will be shown when you select such an entry."); + if ( from_save ) + { + details += "\n\n"; + if (other_file_saved) + { + switch ( mo_compilation_status ) + { + case Catalog::CompilationStatus::NotDone: + details += _("The file was saved safely."); + break; + case Catalog::CompilationStatus::Success: + details += _("The file was saved safely and compiled into the MO format, but it will probably not work correctly."); + break; + case Catalog::CompilationStatus::Error: + details += _("The file was saved safely, but it cannot be compiled into the MO format and used."); + break; + } + } + else // saving only the MO file + { + switch ( mo_compilation_status ) + { + case Catalog::CompilationStatus::Success: + details += _("The file was compiled into the MO format, but it will probably not work correctly."); + break; + case Catalog::CompilationStatus::NotDone: + case Catalog::CompilationStatus::Error: + details += _("The file cannot be compiled into the MO format and used."); + break; + } + } + } + dlg->SetExtendedMessage(details); + } + else + { + wxASSERT( !from_save ); + + dlg.reset(new wxMessageDialog + ( + this, + _("No problems with the translation found."), + _("Validation results"), + wxOK | wxICON_INFORMATION + )); + + wxString details; + int unfinished = 0; + m_catalog->GetStatistics(nullptr, nullptr, nullptr, nullptr, &unfinished); + if (unfinished) + { + details = wxString::Format(wxPLURAL("The translation is ready for use, but %d entry is not translated yet.", + "The translation is ready for use, but %d entries are not translated yet.", unfinished), unfinished); + } + else + { + details = _("The translation is ready for use."); + } + dlg->SetExtendedMessage(details); + } + + dlg->ShowWindowModalThenDo([dlg,completionHandler](int){ + completionHandler(); + }); +} + + +void PoeditFrame::OnListSel(wxListEvent& event) +{ + wxWindow *focus = wxWindow::FindFocus(); + bool hasFocus = (focus == m_textTrans) || + (focus && focus->GetParent() == m_pluralNotebook); + + event.Skip(); + + if (m_pendingHumanEditedItem) + { + OnNewTranslationEntered(m_pendingHumanEditedItem); + m_pendingHumanEditedItem.reset(); + } + + UpdateToTextCtrl(ItemChanged); + + if (m_sidebar && m_list) + { + if (m_list->HasMultipleSelection()) + m_sidebar->SetMultipleSelection(); + else + m_sidebar->SetSelectedItem(m_catalog, GetCurrentItem()); // may be nullptr + } + + if (hasFocus && m_textTrans) + { + if (m_textTrans->IsShown()) + m_textTrans->SetFocus(); + else if (!m_textTransPlural.empty()) + m_textTransPlural[0]->SetFocus(); + } + + auto references = FileViewer::GetIfExists(); + if (references) + references->ShowReferences(m_catalog, GetCurrentItem(), 0); +} + + + +void PoeditFrame::OnReferencesMenu(wxCommandEvent&) +{ + auto entry = GetCurrentItem(); + if ( !entry ) + return; + ShowReference(0); +} + +void PoeditFrame::OnReferencesMenuUpdate(wxUpdateUIEvent& event) +{ + OnSingleSelectionUpdate(event); + if (event.GetEnabled()) + { + auto item = GetCurrentItem(); + event.Enable(item && !item->GetReferences().empty()); + } +} + +void PoeditFrame::OnReference(wxCommandEvent& event) +{ + ShowReference(event.GetId() - ID_POPUP_REFS); +} + + + +void PoeditFrame::ShowReference(int num) +{ + auto entry = GetCurrentItem(); + if (!entry) + return; + FileViewer::GetAndActivate()->ShowReferences(m_catalog, entry, num); +} + + + +void PoeditFrame::OnFuzzyFlag(wxCommandEvent& event) +{ + bool setFuzzy = false; + + auto source = event.GetEventObject(); + if (source && dynamic_cast(source)) + { + setFuzzy = GetMenuBar()->IsChecked(XRCID("menu_fuzzy")); + m_toolbar->SetFuzzy(setFuzzy); + } + else + { + setFuzzy = m_toolbar->IsFuzzy(); + GetMenuBar()->Check(XRCID("menu_fuzzy"), setFuzzy); + } + + bool modified = false; + + m_list->ForSelectedCatalogItemsDo([=,&modified](CatalogItem& item){ + if (item.IsFuzzy() != setFuzzy) + { + item.SetFuzzy(setFuzzy); + item.SetModified(true); + modified = true; + } + }); + + if (modified && !IsModified()) + { + m_modified = true; + UpdateTitle(); + } + UpdateStatusBar(); + + UpdateToTextCtrl(UndoableEdit); + + if (m_list->HasSingleSelection()) + { + // The user explicitly changed fuzzy status (e.g. to on). Normally, if the + // user edits an entry, it's fuzzy flag is cleared, but if the user sets + // fuzzy on to indicate the translation is problematic and then continues + // editing the entry, we do not want to annoy him by changing fuzzy back on + // every keystroke. + m_dontAutoclearFuzzyStatus = true; + } +} + + + +void PoeditFrame::OnIDsFlag(wxCommandEvent&) +{ + m_displayIDs = GetMenuBar()->IsChecked(XRCID("menu_ids")); + m_list->SetDisplayLines(m_displayIDs); +} + +void PoeditFrame::OnCopyFromSingular(wxCommandEvent&) +{ + auto current = dynamic_cast(wxWindow::FindFocus()); + if (!current || !m_textTransSingularForm) + return; + + current->SetPlainTextUserWritten(m_textTransSingularForm->GetPlainText()); +} + +void PoeditFrame::OnCopyFromSource(wxCommandEvent&) +{ + bool modified = false; + + m_list->ForSelectedCatalogItemsDo([&modified](CatalogItem& item){ + item.SetTranslationFromSource(); + if (item.IsModified()) + modified = true; + }); + + if (modified && !IsModified()) + { + m_modified = true; + UpdateTitle(); + } + UpdateStatusBar(); + + UpdateToTextCtrl(UndoableEdit); +} + +void PoeditFrame::OnClearTranslation(wxCommandEvent&) +{ + bool modified = false; + + m_list->ForSelectedCatalogItemsDo([&modified](CatalogItem& item){ + item.ClearTranslation(); + if (item.IsModified()) + modified = true; + }); + + if (modified && !IsModified()) + { + m_modified = true; + UpdateTitle(); + } + UpdateStatusBar(); + + UpdateToTextCtrl(UndoableEdit); +} + + +void PoeditFrame::OnFind(wxCommandEvent&) +{ + if (!m_findWindow) + m_findWindow = new FindFrame(this, m_list, m_catalog, m_textOrig, m_textTrans, m_pluralNotebook); + + m_findWindow->ShowForFind(); +} + +void PoeditFrame::OnFindAndReplace(wxCommandEvent&) +{ + if (!m_findWindow) + m_findWindow = new FindFrame(this, m_list, m_catalog, m_textOrig, m_textTrans, m_pluralNotebook); + + m_findWindow->ShowForReplace(); +} + +void PoeditFrame::OnFindNext(wxCommandEvent&) +{ + if (m_findWindow) + m_findWindow->FindNext(); +} + +void PoeditFrame::OnFindPrev(wxCommandEvent&) +{ + if (m_findWindow) + m_findWindow->FindPrev(); +} + +void PoeditFrame::OnUpdateFind(wxUpdateUIEvent& e) +{ + e.Enable(m_catalog && !m_catalog->empty() && + m_findWindow && m_findWindow->HasText()); +} + +CatalogItemPtr PoeditFrame::GetCurrentItem() const +{ + if ( !m_catalog || !m_list ) + return nullptr; + + int item = m_list->GetFirstSelectedCatalogItem(); + if ( item == -1 ) + return nullptr; + + wxASSERT( item >= 0 && item < (int)m_catalog->GetCount() ); + + return (*m_catalog)[item]; +} + + +namespace +{ + +// does some basic processing of user input, e.g. to remove trailing \n +wxString PreprocessEnteredTextForItem(CatalogItemPtr item, wxString t) +{ + auto& orig = item->GetString(); + + if (!t.empty() && !orig.empty()) + { + if (orig.Last() == '\n' && t.Last() != '\n') + t.append(1, '\n'); + else if (orig.Last() != '\n' && t.Last() == '\n') + t.RemoveLast(); + } + + return t; +} + +} // anonymous namespace + +void PoeditFrame::UpdateFromTextCtrl() +{ + if (!m_list || !m_list->HasSingleSelection()) + return; + + auto entry = GetCurrentItem(); + if ( !entry ) + return; + + wxString key = entry->GetString(); + bool newfuzzy = m_toolbar->IsFuzzy(); + + const bool oldIsTranslated = entry->IsTranslated(); + bool allTranslated = true; // will be updated later + bool anyTransChanged = false; // ditto + + if (entry->HasPlural()) + { + wxArrayString str; + for (unsigned i = 0; i < m_textTransPlural.size(); i++) + { + auto val = PreprocessEnteredTextForItem(entry, m_textTransPlural[i]->GetPlainText()); + str.Add(val); + if ( val.empty() ) + allTranslated = false; + } + + if ( str != entry->GetTranslations() ) + { + anyTransChanged = true; + entry->SetTranslations(str); + } + } + else + { + auto newval = PreprocessEnteredTextForItem(entry, m_textTrans->GetPlainText()); + + if ( newval.empty() ) + allTranslated = false; + + if ( newval != entry->GetTranslation() ) + { + anyTransChanged = true; + entry->SetTranslation(newval); + } + } + + if (entry->IsFuzzy() == newfuzzy && !anyTransChanged) + { + return; // not even fuzzy status changed, so return + } + + // did something affecting statistics change? + bool statisticsChanged = false; + + if (newfuzzy == entry->IsFuzzy() && !m_dontAutoclearFuzzyStatus) + newfuzzy = false; + + m_toolbar->SetFuzzy(newfuzzy); + GetMenuBar()->Check(XRCID("menu_fuzzy"), newfuzzy); + + if ( entry->IsFuzzy() != newfuzzy ) + { + entry->SetFuzzy(newfuzzy); + statisticsChanged = true; + } + if ( oldIsTranslated != allTranslated ) + { + entry->SetTranslated(allTranslated); + statisticsChanged = true; + } + entry->SetModified(true); + entry->SetAutomatic(false); + + m_pendingHumanEditedItem = entry; + + m_list->RefreshSelectedItems(); + + if ( statisticsChanged ) + { + UpdateStatusBar(); + } + // else: no point in recomputing stats + + if ( !IsModified() ) + { + m_modified = true; + UpdateTitle(); + } +} + + +void PoeditFrame::OnNewTranslationEntered(const CatalogItemPtr& item) +{ + if (item->IsFuzzy() || !item->IsTranslated()) + return; + + if (wxConfig::Get()->ReadBool("use_tm", true)) + { + auto srclang = m_catalog->GetSourceLanguage(); + auto lang = m_catalog->GetLanguage(); + concurrency_queue::add([=](){ + try + { + auto tm = TranslationMemory::Get().GetWriter(); + tm->Insert(srclang, lang, item); + // Note: do *not* call tm->Commit() here, because Lucene commit is + // expensive. Instead, wait until the file is saved with committing + // the changes. This way TM updates are available immediately for use + // in further translations within the file, but per-item updates + // remain inexpensive. + } + catch (const Exception&) + { + // ignore failures here, they'll become apparent when saving the file + } + }); + } +} + + +namespace +{ + +struct EventHandlerDisabler +{ + EventHandlerDisabler(wxEvtHandler *h) : m_hnd(h) + { m_hnd->SetEvtHandlerEnabled(false); } + ~EventHandlerDisabler() + { m_hnd->SetEvtHandlerEnabled(true); } + + wxEvtHandler *m_hnd; +}; + +void SetTranslationValue(TranslationTextCtrl *txt, const wxString& value, int flags) +{ + // disable EVT_TEXT forwarding -- the event is generated by + // programmatic changes to text controls' content and we *don't* + // want UpdateFromTextCtrl() to be called from here + EventHandlerDisabler disabler(txt->GetEventHandler()); + + if (flags & PoeditFrame::UndoableEdit) + txt->SetPlainTextUserWritten(value); + else + txt->SetPlainText(value); +} + +} // anonymous namespace + +void PoeditFrame::UpdateToTextCtrl(int flags) +{ + m_pendingHumanEditedItem.reset(); + auto entry = GetCurrentItem(); + if ( !entry ) + return; + + m_textOrig->SetPlainText(entry->GetString()); + + if (entry->HasPlural()) + { + m_textOrigPlural->SetPlainText(entry->GetPluralString()); + + unsigned formsCnt = (unsigned)m_textTransPlural.size(); + for (unsigned j = 0; j < formsCnt; j++) + SetTranslationValue(m_textTransPlural[j], wxEmptyString, flags); + + unsigned i = 0; + for (i = 0; i < std::min(formsCnt, entry->GetNumberOfTranslations()); i++) + { + SetTranslationValue(m_textTransPlural[i], entry->GetTranslation(i), flags); + } + } + else + { + if (m_textTrans) + SetTranslationValue(m_textTrans, entry->GetTranslation(), flags); + } + + if ( entry->HasContext() ) + { + const wxString prefix = _("Context:"); + const wxString ctxt = entry->GetContext(); + m_labelContext->SetLabelMarkup( + wxString::Format("%s %s", prefix, EscapeMarkup(ctxt))); + } + m_labelContext->GetContainingSizer()->Show(m_labelContext, entry->HasContext()); + + if (m_errorBar) + { + if( entry->GetValidity() == CatalogItem::Val_Invalid ) + m_errorBar->ShowError(entry->GetErrorString()); + else + m_errorBar->HideError(); + } + + // by default, editing fuzzy item unfuzzies it + m_dontAutoclearFuzzyStatus = false; + + m_toolbar->SetFuzzy(entry->IsFuzzy()); + GetMenuBar()->Check(XRCID("menu_fuzzy"), entry->IsFuzzy()); + + ShowPluralFormUI(entry->HasPlural()); +} + + + +void PoeditFrame::ReadCatalog(const wxString& catalog) +{ + wxBusyCursor bcur; + + // NB: duplicated in PoeditFrame::Create() + CatalogPtr cat = std::make_shared(catalog); + if (cat->IsOk()) + { + ReadCatalog(cat); + } + else + { + wxMessageDialog dlg + ( + this, + _("The file cannot be opened."), + _("Invalid file"), + wxOK | wxICON_ERROR + ); + dlg.SetExtendedMessage( + _("The file may be either corrupted or in a format not recognized by Poedit.") + ); + dlg.ShowModal(); + } +} + + +void PoeditFrame::ReadCatalog(const CatalogPtr& cat) +{ + wxASSERT( cat && cat->IsOk() ); + + { +#ifdef __WXMSW__ + wxWindowUpdateLocker no_updates(this); +#endif + + m_catalog = cat; + m_pendingHumanEditedItem.reset(); + + if (m_catalog->empty()) + { + EnsureContentView(Content::Empty_PO); + } + else + { + EnsureAppropriateContentView(); + // This must be done as soon as possible, otherwise the list would be + // confused. GetCurrentItem() could return nullptr or something invalid, + // causing crash in UpdateToTextCtrl() called from + // RecreatePluralTextCtrls() just few lines below. + NotifyCatalogChanged(m_catalog); + } + + m_fileExistsOnDisk = true; + m_modified = false; + + RecreatePluralTextCtrls(); + RefreshControls(Refresh_NoCatalogChanged /*done right above*/); + UpdateTitle(); + UpdateTextLanguage(); + +#ifdef HAVE_HTTP_CLIENT + m_toolbar->EnableSyncWithCrowdin(m_catalog->IsFromCrowdin()); +#endif + + NoteAsRecentFile(); + + if (cat->HasCapability(Catalog::Cap::Translations)) + WarnAboutLanguageIssues(); + } + + FixDuplicatesIfPresent(); +} + +void PoeditFrame::FixDuplicatesIfPresent() +{ + // Poedit always produces good files, so don't bother with it. Older + // versions would preserve bad files, though. + wxString generator = m_catalog->Header().GetHeader("X-Generator"); + wxString gversion; + if (generator.StartsWith("Poedit ", &gversion) && + !gversion.StartsWith("1.7") && !gversion.StartsWith("1.6") && !gversion.StartsWith("1.5")) + return; + + if (!m_catalog->HasDuplicateItems()) + return; // good + + // Fix duplicates and explain the changes to the user: + m_catalog->FixDuplicateItems(); + NotifyCatalogChanged(m_catalog); + + wxWindowPtr dlg( + new wxMessageDialog + ( + this, + wxString::Format(_(L"Poedit automatically fixed invalid content in the file “%s”."), wxFileName(GetFileName()).GetFullName()), + _("Invalid file"), + wxOK | wxICON_INFORMATION + ) + ); + dlg->SetExtendedMessage(_("The file contained duplicate items, which is not allowed in PO files and would prevent the file from being used. Poedit fixed the issue, but you should review translations of any items marked as fuzzy and correct them if necessary.")); + dlg->ShowWindowModalThenDo([dlg](int){}); + +} + +void PoeditFrame::WarnAboutLanguageIssues() +{ + Language srclang = m_catalog->GetSourceLanguage(); + Language lang = m_catalog->GetLanguage(); + + if (!lang.IsValid()) + { + AttentionMessage msg + ( + "missing-language", + AttentionMessage::Error, + _("Language of the translation isn't set.") + ); + msg.AddAction(MSW_OR_OTHER(_("Set language"), _("Set Language")), + [=]{ EditCatalogProperties(); }); + // TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." + msg.SetExplanation(_("Suggestions are not available if the translation language is not set correctly. Other features, such as plural forms, may be affected as well.")); + m_attentionBar->ShowMessage(msg); + } + + // Check if the language is set wrongly. This is typically done in such a way that + // both languages are English, so check explicitly for the common case of "translating" + // from en to en_US too: + if (lang.IsValid() && srclang.IsValid() && + (lang == srclang || (srclang == Language::English() && lang.Code() == "en_US"))) + { + AttentionMessage msg + ( + "same-language-as-source", + AttentionMessage::Warning, + _("Language of the translation is the same as source language.") + ); + msg.SetExplanation(_("Suggestions are not available if the translation language is not set correctly. Other features, such as plural forms, may be affected as well.")); + msg.AddAction(MSW_OR_OTHER(_("Fix language"), _("Fix Language")), + [=]{ EditCatalogProperties(); }); + if (lang != srclang) + msg.AddDontShowAgain(); // possible that Poedit misjudged the intent + + m_attentionBar->ShowMessage(msg); + } + + // check if plural forms header is correct (only if the language is set, + // otherwise setting the language will fix this issue too): + if ( lang.IsValid() && m_catalog->HasPluralItems() ) + { + wxString err; + + if ( m_catalog->Header().GetHeader("Plural-Forms").empty() ) + { + err = _("This catalog has entries with plural forms, but doesn't have Plural-Forms header configured."); + } + else if ( m_catalog->HasWrongPluralFormsCount() ) + { + err = _("Entries in this catalog have different plural forms count from what catalog's Plural-Forms header says"); + } + + // FIXME: make this part of global error checking + wxString plForms = m_catalog->Header().GetHeader("Plural-Forms"); + PluralFormsCalculator *plCalc = + PluralFormsCalculator::make(plForms.ToAscii()); + if ( !plCalc ) + { + if ( plForms.empty() ) + { + err = _("Required header Plural-Forms is missing."); + } + else + { + err = wxString::Format( + _("Syntax error in Plural-Forms header (\"%s\")."), + plForms.c_str()); + } + } + delete plCalc; + + if ( !err.empty() ) + { + AttentionMessage msg + ( + "malformed-plural-forms", + AttentionMessage::Error, + err + ); + msg.AddAction(MSW_OR_OTHER(_("Fix the header"), _("Fix the Header")), + [=]{ EditCatalogProperties(); }); + + m_attentionBar->ShowMessage(msg); + } + else // no error, check for warning-worthy stuff + { + if ( lang.IsValid() ) + { + // Check for unusual plural forms. Do some normalization to avoid unnecessary + // complains when the only differences are in whitespace for example. + wxString pl1 = plForms; + wxString pl2 = lang.DefaultPluralFormsExpr(); + if (!pl2.empty()) + { + pl1.Replace(" ", ""); + pl2.Replace(" ", ""); + if ( pl1 != pl2 ) + { + if (pl1.Find(";plural=(") == wxNOT_FOUND && pl1.Last() == ';') + { + pl1.Replace(";plural=", ";plural=("); + pl1.RemoveLast(); + pl1 += ");"; + } + } + + if ( pl1 != pl2 ) + { + AttentionMessage msg + ( + "unusual-plural-forms", + AttentionMessage::Warning, + wxString::Format + ( + // TRANSLATORS: %s is language name in its basic form (as you + // would see e.g. in a list of supported languages). You may need + // to rephrase it, e.g. to an equivalent of "for language %s". + _("Plural forms expression used by the catalog is unusual for %s."), + lang.DisplayName() + ) + ); + // TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" + msg.AddAction(_("Review"), [=]{ EditCatalogProperties(); }); + msg.AddDontShowAgain(); + + m_attentionBar->ShowMessage(msg); + } + } + } + } + } +} + + +void PoeditFrame::NoteAsRecentFile() +{ + wxFileName fn(GetFileName()); + fn.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); +#ifdef __WXOSX__ + [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL fileURLWithPath:str::to_NS(fn.GetFullPath())]]; +#else + FileHistory().AddFileToHistory(fn.GetFullPath()); +#endif +} + + +void PoeditFrame::RefreshControls(int flags) +{ + if (!m_catalog) + return; + + m_hasObsoleteItems = false; + if (!m_catalog->IsOk()) + { + wxLogError(_("Error loading message catalog file '%s'."), m_catalog->GetFileName()); + m_fileExistsOnDisk = false; + UpdateMenu(); + UpdateTitle(); + m_catalog.reset(); + m_pendingHumanEditedItem.reset(); + NotifyCatalogChanged(nullptr); + return; + } + + wxBusyCursor bcur; + UpdateMenu(); + + if (m_list) + { + // update catalog view, this may involve reordering the items... + if (!(flags & Refresh_NoCatalogChanged)) + m_list->CatalogChanged(m_catalog); + + if (m_findWindow) + m_findWindow->Reset(m_catalog); + } + + UpdateTitle(); + UpdateStatusBar(); + Refresh(); +} + + +void PoeditFrame::NotifyCatalogChanged(const CatalogPtr& cat) +{ + if (m_sidebar) + m_sidebar->ResetCatalog(); + if (m_list) + m_list->CatalogChanged(cat); +} + + +void PoeditFrame::UpdateStatusBar() +{ + auto bar = GetStatusBar(); + if (m_catalog && bar) + { + int all, fuzzy, untranslated, errors, unfinished; + m_catalog->GetStatistics(&all, &fuzzy, &errors, &untranslated, &unfinished); + + wxString text; + if (m_catalog->HasCapability(Catalog::Cap::Translations)) + { + int percent = (all == 0) ? 0 : (100 * (all - unfinished) / all); + + text.Printf(_("Translated: %d of %d (%d %%)"), all - unfinished, all, percent); + if (unfinished > 0) + { + text += L" • "; + text += wxString::Format(_("Remaining: %d"), unfinished); + } + if (errors > 0) + { + text += L" • "; + text += wxString::Format(wxPLURAL("%d error", "%d errors", errors), errors); + } + } + else + { + text.Printf(wxPLURAL("%d entry", "%d entries", all), all); + } + + bar->SetStatusText(text); + } +} + +void PoeditFrame::DoGiveHelp(const wxString& text, bool show) +{ + if (show || !text.empty()) + wxFrame::DoGiveHelp(text, show); + else + UpdateStatusBar(); +} + + +void PoeditFrame::UpdateTitle() +{ +#ifdef __WXOSX__ + OSXSetModified(IsModified()); +#endif + + wxString title; + auto fileName = GetFileName(); + if ( !fileName.empty() ) + { + wxFileName fn(GetFileName()); + wxString fpath = fn.GetFullName(); + + if (m_fileExistsOnDisk) + SetRepresentedFilename(fileName); + else + fpath += _(" (unsaved)"); + + if ( !m_catalog->Header().Project.empty() ) + { + title.Printf( +#ifdef __WXOSX__ + L"%s — %s", +#else + L"%s • %s", +#endif + fpath, m_catalog->Header().Project); + } + else + { + title = fn.GetFullName(); + } +#ifndef __WXOSX__ + if ( IsModified() ) + title += _(" (modified)"); + title += " - Poedit"; +#endif + } + else + { + title = "Poedit"; + } + + SetTitle(title); +} + + + +void PoeditFrame::UpdateMenu() +{ + wxMenuBar *menubar = GetMenuBar(); + + const bool hasCatalog = m_catalog != nullptr; + const bool nonEmpty = hasCatalog && !m_catalog->empty(); + const bool editable = nonEmpty && m_catalog->HasCapability(Catalog::Cap::Translations); + + menubar->Enable(XRCID("menu_compile_mo"), hasCatalog && m_catalog->GetFileType() == Catalog::Type::PO); + menubar->Enable(XRCID("menu_export"), hasCatalog); + + menubar->Enable(XRCID("menu_references"), nonEmpty); + menubar->Enable(wxID_FIND, nonEmpty); + menubar->Enable(wxID_REPLACE, nonEmpty); + + menubar->Enable(XRCID("menu_auto_translate"), editable); + menubar->Enable(XRCID("menu_purge_deleted"), editable); + menubar->Enable(XRCID("menu_validate"), editable); + menubar->Enable(XRCID("menu_catproperties"), hasCatalog); + + menubar->Enable(XRCID("menu_ids"), nonEmpty); + + menubar->Enable(XRCID("sort_by_order"), nonEmpty); + menubar->Enable(XRCID("sort_by_source"), nonEmpty); + menubar->Enable(XRCID("sort_by_translation"), editable); + menubar->Enable(XRCID("sort_group_by_context"), nonEmpty); + menubar->Enable(XRCID("sort_untrans_first"), editable); + menubar->Enable(XRCID("sort_errors_first"), editable); + + if (m_textTrans) + m_textTrans->Enable(editable); + if (m_list) + m_list->Enable(nonEmpty); + + menubar->Enable(XRCID("menu_purge_deleted"), + editable && m_catalog->HasDeletedItems()); + +#ifdef __WXGTK__ + if (!editable) + { + // work around a wxGTK bug: enabling wxTextCtrl makes it editable too + // in wxGTK <= 2.8: + if (m_textOrig) + m_textOrig->SetEditable(false); + if (m_textOrigPlural) + m_textOrigPlural->SetEditable(false); + } +#endif + + auto goMenuPos = menubar->FindMenu(_("Go")); + if (goMenuPos != wxNOT_FOUND) + menubar->EnableTop(goMenuPos, editable); + for (int i = 0; i < 10; i++) + { + menubar->Enable(ID_BOOKMARK_SET + i, editable); + menubar->Enable(ID_BOOKMARK_GO + i, + editable && + m_catalog->GetBookmarkIndex(Bookmark(i)) != -1); + } +} + + +void PoeditFrame::WriteCatalog(const wxString& catalog) +{ + WriteCatalog(catalog, [](bool){}); +} + +template +void PoeditFrame::WriteCatalog(const wxString& catalog, TFunctor completionHandler) +{ + wxBusyCursor bcur; + + concurrency_queue::future tmUpdateThread; + if (wxConfig::Get()->ReadBool("use_tm", true) && + m_catalog->HasCapability(Catalog::Cap::Translations)) + { + tmUpdateThread = concurrency_queue::add([=]{ + try + { + auto tm = TranslationMemory::Get().GetWriter(); + tm->Insert(m_catalog); + tm->Commit(); + } + catch ( const Exception& e ) + { + wxLogWarning(_("Failed to update translation memory: %s"), e.What()); + } + catch ( ... ) + { + wxLogWarning(_("Failed to update translation memory: %s"), "unknown error"); + } + }); + } + + if (m_catalog->GetFileType() == Catalog::Type::PO) + { + Catalog::HeaderData& dt = m_catalog->Header(); + dt.Translator = wxConfig::Get()->Read("translator_name", dt.Translator); + dt.TranslatorEmail = wxConfig::Get()->Read("translator_email", dt.TranslatorEmail); + } + + int validation_errors = 0; + Catalog::CompilationStatus mo_compilation_status = Catalog::CompilationStatus::NotDone; + if ( !m_catalog->Save(catalog, true, validation_errors, mo_compilation_status) ) + { + if (is_future_valid(tmUpdateThread)) + tmUpdateThread.wait(); + completionHandler(false); + return; + } + + m_modified = false; + m_fileExistsOnDisk = true; + +#ifndef __WXOSX__ + FileHistory().AddFileToHistory(GetFileName()); +#endif + + UpdateTitle(); + + RefreshControls(); + + NoteAsRecentFile(); + + if (ManagerFrame::Get()) + ManagerFrame::Get()->NotifyFileChanged(GetFileName()); + + if (is_future_valid(tmUpdateThread)) + tmUpdateThread.wait(); + + if (validation_errors) + { + // Note: this may show window-modal window and because we may + // be called from such window too, run this in the next + // event loop iteration. + CallAfter([=]{ + ReportValidationErrors(validation_errors, mo_compilation_status, /*from_save=*/true, /*other_file_saved=*/true, [=]{ + completionHandler(true); + }); + }); + } + else + { + completionHandler(true); + } +} + + +void PoeditFrame::OnEditComment(wxCommandEvent& event) +{ + auto firstItem = GetCurrentItem(); + wxCHECK_RET( firstItem, "no entry selected" ); + + (void)event; + wxWindow *parent = this; +#ifndef __WXOSX__ + // Find suitable parent window for the comment dialog (e.g. the button): + parent = dynamic_cast(event.GetEventObject()); + if (parent && dynamic_cast(parent) != nullptr) + parent = nullptr; + if (!parent) + parent = this; +#endif + + wxWindowPtr dlg(new CommentDialog(parent, firstItem->GetComment())); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + { + m_modified = true; + UpdateTitle(); + wxString comment = dlg->GetComment(); + + bool modified = false; + m_list->ForSelectedCatalogItemsDo([&modified,comment](CatalogItem& item){ + if (item.GetComment() != comment) + { + item.SetComment(comment); + item.SetModified(true); + modified = true; + } + }); + if (modified && !IsModified()) + { + m_modified = true; + UpdateTitle(); + } + + // update comment window + if (m_sidebar) + m_sidebar->RefreshContent(); + } + }); +} + +void PoeditFrame::OnPurgeDeleted(wxCommandEvent& WXUNUSED(event)) +{ + const wxString title = + _("Purge deleted translations"); + const wxString main = + _("Do you want to remove all translations that are no longer used?"); + const wxString details = + _("If you continue with purging, all translations marked as deleted will be permanently removed. You will have to translate them again if they are added back in the future."); + + wxWindowPtr dlg(new wxMessageDialog(this, main, title, wxYES_NO | wxICON_QUESTION)); + dlg->SetExtendedMessage(details); + dlg->SetYesNoLabels(_("Purge"), _("Keep")); + + dlg->ShowWindowModalThenDo([this,dlg](int retcode){ + if (retcode == wxID_YES) { + m_catalog->RemoveDeletedItems(); + UpdateMenu(); + } + }); +} + + +void PoeditFrame::OnSuggestion(wxCommandEvent& event) +{ + auto entry = GetCurrentItem(); + if (!entry) + return; + + entry->SetTranslation(event.GetString()); + entry->SetFuzzy(false); + entry->SetModified(true); + + // FIXME: instead of this mess, use notifications of catalog change + m_modified = true; + UpdateTitle(); + UpdateStatusBar(); + + UpdateToTextCtrl(UndoableEdit); + m_list->RefreshSelectedItems(); +} + +void PoeditFrame::OnAutoTranslateAll(wxCommandEvent&) +{ + wxWindowPtr dlg(new wxDialog(this, wxID_ANY, _("Fill missing translations from TM"))); + auto topsizer = new wxBoxSizer(wxVERTICAL); + auto sizer = new wxBoxSizer(wxVERTICAL); + auto onlyExact = new wxCheckBox(dlg.get(), wxID_ANY, _("Only fill in exact matches")); + auto onlyExactE = new ExplanationLabel(dlg.get(), _("By default, inaccurate results are filled in as well and marked as fuzzy. Check this option to only include accurate matches.")); + auto noFuzzy = new wxCheckBox(dlg.get(), wxID_ANY, _(L"Don’t mark exact matches as fuzzy")); + auto noFuzzyE = new ExplanationLabel(dlg.get(), _("Only enable if you trust the quality of your TM. By default, all matches from the TM are marked as fuzzy and should be reviewed.")); + +#ifdef __WXOSX__ + sizer->AddSpacer(PX(5)); + sizer->Add(new HeadingLabel(dlg.get(), _("Fill missing translations from TM")), wxSizerFlags().Expand().PXDoubleBorder(wxBOTTOM)); +#endif + sizer->Add(onlyExact, wxSizerFlags().PXBorder(wxTOP)); + sizer->AddSpacer(PX(1)); + sizer->Add(onlyExactE, wxSizerFlags().Expand().Border(wxLEFT, ExplanationLabel::CHECKBOX_INDENT)); + sizer->Add(noFuzzy, wxSizerFlags().PXDoubleBorder(wxTOP)); + sizer->AddSpacer(PX(1)); + sizer->Add(noFuzzyE, wxSizerFlags().Expand().Border(wxLEFT, ExplanationLabel::CHECKBOX_INDENT)); + topsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + + auto buttons = dlg->CreateButtonSizer(wxOK | wxCANCEL); + auto ok = static_cast(dlg->FindWindow(wxID_OK)); + ok->SetLabel(_("Fill")); + ok->SetDefault(); +#ifdef __WXOSX__ + topsizer->Add(buttons, wxSizerFlags().Expand()); +#else + topsizer->Add(buttons, wxSizerFlags().Expand().PXBorderAll()); + topsizer->AddSpacer(PX(5)); +#endif + + dlg->SetSizer(topsizer); + dlg->SetMinSize(wxSize(PX(400), -1)); + dlg->Layout(); + dlg->Fit(); + dlg->CenterOnParent(); + + dlg->ShowWindowModalThenDo([this,onlyExact,noFuzzy,dlg](int retcode) + { + if (retcode != wxID_OK) + return; + + int matches = 0; + + int flags = 0; + if (onlyExact->GetValue()) + flags |= AutoTranslate_OnlyExact; + if (noFuzzy->GetValue()) + flags |= AutoTranslate_ExactNotFuzzy; + + if (m_list->HasMultipleSelection()) + { + if (!AutoTranslateCatalog(&matches, m_list->GetSelectedCatalogItems(), flags)) + return; + } + else + { + if (!AutoTranslateCatalog(&matches, flags)) + return; + } + + wxString msg, details; + + if (matches) + { + msg = wxString::Format(wxPLURAL("%d entry was filled from the translation memory.", + "%d entries were filled from the translation memory.", + matches), matches); + details = _("The translations were marked as fuzzy, because they may be inaccurate. You should review them for correctness."); + } + else + { + msg = _("No entries could be filled from the translation memory."); + details = _(L"The TM doesn’t contain any strings similar to the content of this file. It is only effective for semi-automatic translations after Poedit learns enough from files that you translated manually."); + } + + wxWindowPtr resultsDlg( + new wxMessageDialog + ( + this, + msg, + _("Fill missing translations from TM"), + wxOK | wxICON_INFORMATION + ) + ); + resultsDlg->SetExtendedMessage(details); + resultsDlg->ShowWindowModalThenDo([resultsDlg](int){}); + }); +} + +bool PoeditFrame::AutoTranslateCatalog(int *matchesCount, int flags) +{ + return AutoTranslateCatalog(matchesCount, boost::counting_range(0, (int)m_catalog->GetCount()), flags); +} + +template +bool PoeditFrame::AutoTranslateCatalog(int *matchesCount, const T& range, int flags) +{ + if (matchesCount) + *matchesCount = 0; + + if (range.empty()) + return false; + + if (!wxConfig::Get()->ReadBool("use_tm", true)) + return false; + + wxBusyCursor bcur; + + TranslationMemory& tm = TranslationMemory::Get(); + auto srclang = m_catalog->GetSourceLanguage(); + auto lang = m_catalog->GetLanguage(); + + // TODO: make this window-modal + ProgressInfo progress(this, _("Translating")); + progress.UpdateMessage(_("Filling missing translations from TM...")); + + // Function to apply fetched suggestions to a catalog item: + auto process_results = [=](CatalogItemPtr dt, const SuggestionsList& results) -> bool + { + if (results.empty()) + return false; + auto& res = results.front(); + if ((flags & AutoTranslate_OnlyExact) && !res.IsExactMatch()) + return false; + + if ((flags & AutoTranslate_OnlyGoodQuality) && res.score < 0.80) + return false; + + dt->SetTranslation(res.text); + dt->SetAutomatic(true); + dt->SetFuzzy(!res.IsExactMatch() || (flags & AutoTranslate_ExactNotFuzzy) == 0); + return true; + }; + + std::vector> operations; + for (int i: range) + { + auto dt = (*m_catalog)[i]; + if (dt->HasPlural()) + continue; // can't handle yet (TODO?) + if (dt->IsTranslated() && !dt->IsFuzzy()) + continue; + + operations.push_back(concurrency_queue::add([=,&tm]{ + auto results = tm.Search(srclang, lang, dt->GetString().ToStdWstring()); + bool ok = process_results(dt, results); + return ok; + })); + } + + progress.SetGaugeMax((int)operations.size()); + + int matches = 0; + for (auto& op: operations) + { + if (!progress.UpdateGauge()) + break; // TODO: cancel pending 'operations' futures + + if (op.get()) + { + matches++; + progress.UpdateMessage(wxString::Format(wxPLURAL("Translated %u string", "Translated %u strings", matches), matches)); + } + } + + if (matchesCount) + *matchesCount = matches; + + if (matches && !m_modified) + { + m_modified = true; + UpdateTitle(); + } + + RefreshControls(); + + return true; +} + + +wxMenu *PoeditFrame::GetPopupMenu(int item) +{ + if (!m_catalog) return NULL; + if (item < 0 || item >= (int)m_list->GetItemCount()) return NULL; + + const wxArrayString& refs = (*m_catalog)[item]->GetReferences(); + wxMenu *menu = new wxMenu; + + menu->Append(XRCID("menu_copy_from_src"), + #ifdef __WXMSW__ + wxString(_("Copy from source text")) + #else + wxString(_("Copy from Source Text")) + #endif + + "\t" + _("Ctrl+") + "B"); + menu->Append(XRCID("menu_clear"), + #ifdef __WXMSW__ + wxString(_("Clear translation")) + #else + wxString(_("Clear Translation")) + #endif + + "\t" + _("Ctrl+") + "K"); + menu->Append(XRCID("menu_comment"), + #ifdef __WXMSW__ + wxString(_("Edit comment")) + #else + wxString(_("Edit Comment")) + #endif + #ifndef __WXOSX__ + + "\t" + _("Ctrl+") + "M" + #endif + ); + + if ( !refs.empty() ) + { + menu->AppendSeparator(); + + wxMenuItem *it1 = new wxMenuItem(menu, ID_POPUP_DUMMY+0, _("References:")); +#ifdef __WXMSW__ + it1->SetFont(m_boldGuiFont); + menu->Append(it1); +#else + menu->Append(it1); + it1->Enable(false); +#endif + + for (int i = 0; i < (int)refs.GetCount(); i++) + menu->Append(ID_POPUP_REFS + i, " " + refs[i]); + } + + return menu; +} + + +static inline void SetCtrlFont(wxWindow *win, const wxFont& font) +{ + if (!win) + return; + +#ifdef __WXMSW__ + // Native wxMSW text control sends EN_CHANGE when the font changes, + // producing a wxEVT_TEXT event as if the user changed the value. + // Unfortunately the event seems to be used internally for sizing, + // so we can't just filter it out completely. What we can do, however, + // is to disable *our* handling of the event. + EventHandlerDisabler disabler(win->GetEventHandler()); +#endif + win->SetFont(font); +} + +void PoeditFrame::SetCustomFonts() +{ + if (!m_list) + return; + wxConfigBase *cfg = wxConfig::Get(); + + static bool prevUseFontText = false; + + bool useFontList = (bool)cfg->Read("custom_font_list_use", (long)false); + bool useFontText = (bool)cfg->Read("custom_font_text_use", (long)false); + + if (useFontList) + { + wxString name = cfg->Read("custom_font_list_name", wxEmptyString); + if (!name.empty()) + { + wxNativeFontInfo fi; + fi.FromString(name); + wxFont font; + font.SetNativeFontInfo(fi); + m_list->SetCustomFont(font); + } + } + else + { + m_list->SetCustomFont(wxNullFont); + } + + if (useFontText) + { + wxString name = cfg->Read("custom_font_text_name", wxEmptyString); + if (!name.empty()) + { + wxNativeFontInfo fi; + fi.FromString(name); + wxFont font; + font.SetNativeFontInfo(fi); + SetCtrlFont(m_textOrig, font); + SetCtrlFont(m_textOrigPlural, font); + SetCtrlFont(m_textTrans, font); + for (size_t i = 0; i < m_textTransPlural.size(); i++) + SetCtrlFont(m_textTransPlural[i], font); + prevUseFontText = true; + } + } + else if (prevUseFontText) + { + wxFont font(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); + SetCtrlFont(m_textOrig, font); + SetCtrlFont(m_textOrigPlural, font); + SetCtrlFont(m_textTrans, font); + for (size_t i = 0; i < m_textTransPlural.size(); i++) + SetCtrlFont(m_textTransPlural[i], font); + prevUseFontText = false; + } +} + +void PoeditFrame::OnSize(wxSizeEvent& event) +{ + wxWindowUpdateLocker lock(this); + + event.Skip(); + + // see the comment in PoeditFrame ctor + if ( m_setSashPositionsWhenMaximized && IsMaximized() ) + { + m_setSashPositionsWhenMaximized = false; + + // update sizes of child windows first: + Layout(); + + // then set sash positions + if (m_splitter) + m_splitter->SetSashPosition((int)wxConfig::Get()->ReadLong("/splitter", PX(250))); + } + + if (m_sidebarSplitter) + { + auto split = wxConfigBase::Get()->ReadDouble("/sidebar_splitter", 0.75); + m_sidebarSplitter->SetSashPosition(split * event.GetSize().x); + } +} + +void PoeditFrame::ShowPluralFormUI(bool show) +{ + if (show && (!m_catalog || m_catalog->GetPluralFormsCount() == 0)) + show = false; + + wxSizer *origSizer = m_textOrig->GetContainingSizer(); + origSizer->Show(m_labelSingular, show); + origSizer->Show(m_labelPlural, show); + origSizer->Show(m_textOrigPlural, show); + origSizer->Layout(); + + if (m_textTrans && m_pluralNotebook) + { + wxSizer *textSizer = m_textTrans->GetContainingSizer(); + textSizer->Show(m_textTrans, !show); + textSizer->Show(m_pluralNotebook, show); + textSizer->Layout(); + } +} + + +void PoeditFrame::RecreatePluralTextCtrls() +{ + if (!m_catalog || !m_list || !m_pluralNotebook) + return; + + for (size_t i = 0; i < m_textTransPlural.size(); i++) + m_textTransPlural[i]->PopEventHandler(true/*delete*/); + m_textTransPlural.clear(); + m_pluralNotebook->DeleteAllPages(); + m_textTransSingularForm = NULL; + + PluralFormsCalculator *calc = PluralFormsCalculator::make( + m_catalog->Header().GetHeader("Plural-Forms").ToAscii()); + + int formsCount = m_catalog->GetPluralFormsCount(); + for (int form = 0; form < formsCount; form++) + { + // find example number that would use this plural form: + static const int maxExamplesCnt = 5; + wxString examples; + int firstExample = -1; + int examplesCnt = 0; + + if (calc && formsCount > 1) + { + for (int example = 0; example < 1000; example++) + { + if (calc->evaluate(example) == form) + { + if (++examplesCnt == 1) + firstExample = example; + if (examplesCnt == maxExamplesCnt) + { + examples += L'…'; + break; + } + else if (examplesCnt == 1) + examples += wxString::Format("%d", example); + else + examples += wxString::Format(", %d", example); + } + } + } + + wxString desc; + if (formsCount == 1) + desc = _("Everything"); + else if (examplesCnt == 0) + desc.Printf(_("Form %i"), form); + else if (examplesCnt == 1) + { + if (formsCount == 2 && firstExample == 1) // English-like + { + desc = _("Singular"); + } + else + { + if (firstExample == 0) + desc = _("Zero"); + else if (firstExample == 1) + desc = _("One"); + else if (firstExample == 2) + desc = _("Two"); + else + desc.Printf(L"n = %s", examples); + } + } + else if (formsCount == 2 && examplesCnt == 2 && firstExample == 0 && examples == "0, 1") + { + desc = _("Singular"); + } + else if (formsCount == 2 && firstExample != 1 && examplesCnt == maxExamplesCnt) + { + if (firstExample == 0 || firstExample == 2) + desc = _("Plural"); + else + desc = _("Other"); + } + else + desc.Printf(L"n → %s", examples); + + // create text control and notebook page for it: + auto txt = new TranslationTextCtrl(m_pluralNotebook, wxID_ANY); + txt->PushEventHandler(new TransTextctrlHandler(this)); + m_textTransPlural.push_back(txt); + m_pluralNotebook->AddPage(txt, desc); + + if (examplesCnt == 1 && firstExample == 1) // == singular + m_textTransSingularForm = txt; + } + + // as a fallback, assume 1st form for plural entries is the singular + // (like in English and most real-life uses): + if (!m_textTransSingularForm && !m_textTransPlural.empty()) + m_textTransSingularForm = m_textTransPlural[0]; + + delete calc; + + SetCustomFonts(); + UpdateTextLanguage(); + UpdateToTextCtrl(ItemChanged); +} + +void PoeditFrame::OnListRightClick(wxMouseEvent& event) +{ + long item; + int flags = wxLIST_HITTEST_ONITEM; + auto list = static_cast(event.GetEventObject()); + + item = list->HitTest(event.GetPosition(), flags); + if (item != -1 && (flags & wxLIST_HITTEST_ONITEM)) + { + list->SelectAndFocus(item); + } + + wxMenu *menu = GetPopupMenu(m_list->ListIndexToCatalog(int(item))); + if (menu) + { + list->PopupMenu(menu, event.GetPosition()); + delete menu; + } + else event.Skip(); +} + +void PoeditFrame::OnListFocus(wxFocusEvent& event) +{ + if (g_focusToText && m_textTrans != nullptr) + { + if (m_textTrans->IsShown()) + m_textTrans->SetFocus(); + else if (!m_textTransPlural.empty()) + (m_textTransPlural)[0]->SetFocus(); + } + else + event.Skip(); +} + +void PoeditFrame::OnSplitterSashMoving(wxSplitterEvent& event) +{ + auto pos = event.GetSashPosition(); + wxConfigBase::Get()->Write("/splitter", (long)pos); + if (m_sidebar) + m_sidebar->SetUpperHeight(pos); +} + +void PoeditFrame::OnSidebarSplitterSashMoving(wxSplitterEvent& event) +{ + auto split = (double)event.GetSashPosition() / (double)GetSize().x; + wxConfigBase::Get()->Write("/sidebar_splitter", split); +} + +void PoeditFrame::AddBookmarksMenu(wxMenu *parent) +{ + wxMenu *menu = new wxMenu(); + + parent->AppendSeparator(); + parent->AppendSubMenu(menu, _("&Bookmarks")); + +#ifdef __WXOSX__ + // on Mac, Alt+something is used during normal typing, so we shouldn't + // use it as shortcuts: + #define BK_ACCEL_SET "Ctrl+rawctrl+%i" + #define BK_ACCEL_GO "Ctrl+Alt+%i" +#else + // TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently + #define BK_ACCEL_SET _("Alt+") + "%i" + // TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently + #define BK_ACCEL_GO _("Ctrl+") + _("Alt+") + "%i" +#endif + +#ifdef __WXMSW__ + #define BK_LABEL_SET _("Set bookmark %i") + #define BK_LABEL_GO _("Go to bookmark %i") +#else + #define BK_LABEL_SET _("Set Bookmark %i") + #define BK_LABEL_GO _("Go to Bookmark %i") +#endif + + for (int i = 0; i < 10; i++) + { + auto label = BK_LABEL_SET + "\t" + BK_ACCEL_SET; + menu->Append(ID_BOOKMARK_SET + i, wxString::Format(label, i, i)); + } + menu->AppendSeparator(); + for (int i = 0; i < 10; i++) + { + auto label = BK_LABEL_GO + "\t" + BK_ACCEL_GO; + menu->Append(ID_BOOKMARK_GO + i, wxString::Format(label, i, i)); + } +} + +void PoeditFrame::OnGoToBookmark(wxCommandEvent& event) +{ + // Go to bookmark, if there is an item for it + Bookmark bk = static_cast(event.GetId() - ID_BOOKMARK_GO); + int bkIndex = m_catalog->GetBookmarkIndex(bk); + if (bkIndex != -1) + { + int listIndex = m_list->CatalogIndexToList(bkIndex); + if (listIndex >= 0 && listIndex < m_list->GetItemCount()) + { + m_list->EnsureVisible(listIndex); + m_list->SelectOnly(listIndex); + } + } +} + +void PoeditFrame::OnSetBookmark(wxCommandEvent& event) +{ + // Set bookmark if different from the current value for the item, + // else unset it + int bkIndex = -1; + int selItemIndex = m_list->GetFirstSelectedCatalogItem(); + if (selItemIndex == -1) + return; + + Bookmark bk = static_cast(event.GetId() - ID_BOOKMARK_SET); + if (m_catalog->GetBookmarkIndex(bk) == selItemIndex) + { + m_catalog->SetBookmark(selItemIndex, NO_BOOKMARK); + } + else + { + bkIndex = m_catalog->SetBookmark(selItemIndex, bk); + } + + // Refresh items + m_list->RefreshSelectedItems(); + if (bkIndex != -1) + m_list->RefreshItem(m_list->CatalogIndexToList(bkIndex)); + + // Catalog has been modified + m_modified = true; + UpdateTitle(); + UpdateMenu(); +} + + +void PoeditFrame::OnSortByFileOrder(wxCommandEvent&) +{ + m_list->sortOrder.by = SortOrder::By_FileOrder; + m_list->Sort(); +} + + +void PoeditFrame::OnSortBySource(wxCommandEvent&) +{ + m_list->sortOrder.by = SortOrder::By_Source; + m_list->Sort(); +} + + +void PoeditFrame::OnSortByTranslation(wxCommandEvent&) +{ + m_list->sortOrder.by = SortOrder::By_Translation; + m_list->Sort(); +} + + +void PoeditFrame::OnSortGroupByContext(wxCommandEvent& event) +{ + m_list->sortOrder.groupByContext = event.IsChecked(); + m_list->Sort(); +} + + +void PoeditFrame::OnSortUntranslatedFirst(wxCommandEvent& event) +{ + m_list->sortOrder.untransFirst = event.IsChecked(); + m_list->Sort(); +} + +void PoeditFrame::OnSortErrorsFirst(wxCommandEvent& event) +{ + m_list->sortOrder.errorsFirst = event.IsChecked(); + m_list->Sort(); +} + + +void PoeditFrame::OnShowHideSidebar(wxCommandEvent&) +{ + bool toShow = !m_sidebarSplitter->IsSplit(); + + if (toShow) + { + auto split = GetSize().x * wxConfigBase::Get()->ReadDouble("/sidebar_splitter", 0.75); + m_sidebarSplitter->SplitVertically(m_splitter, m_sidebar, split); + m_sidebar->RefreshContent(); + } + else + { + m_sidebarSplitter->Unsplit(m_sidebar); + } + + wxConfigBase::Get()->Write("/sidebar_shown", toShow); + +} + +void PoeditFrame::OnUpdateShowHideSidebar(wxUpdateUIEvent& event) +{ + event.Enable(m_sidebar != nullptr); + if (!m_sidebar) + return; + + bool shown = m_sidebarSplitter->IsSplit(); +#ifdef __WXOSX__ + auto shortcut = "\tCtrl+Alt+S"; + if (shown) + event.SetText(_("Hide Sidebar") + shortcut); + else + event.SetText(_("Show Sidebar") + shortcut); +#else + event.Check(shown); +#endif +} + +void PoeditFrame::OnShowHideStatusbar(wxCommandEvent&) +{ + auto bar = GetStatusBar(); + bool toShow = (bar == nullptr); + + if (toShow) + { + CreateStatusBar(1, wxST_SIZEGRIP); + UpdateStatusBar(); + } + else + { + SetStatusBar(nullptr); + bar->Destroy(); + } + + wxConfigBase::Get()->Write("/statusbar_shown", toShow); +} + +void PoeditFrame::OnUpdateShowHideStatusbar(wxUpdateUIEvent& event) +{ + bool shown = GetStatusBar() != nullptr; +#ifdef __WXOSX__ + auto shortcut = "\tCtrl+/"; + if (shown) + event.SetText(_("Hide Status Bar") + shortcut); + else + event.SetText(_("Show Status Bar") + shortcut); +#else + event.Check(shown); +#endif +} + + +void PoeditFrame::OnSelectionUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && m_list && m_list->HasSelection()); +} + +void PoeditFrame::OnSelectionUpdateEditable(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && m_list && m_list->HasSelection() && + m_catalog->HasCapability(Catalog::Cap::Translations)); +} + +void PoeditFrame::OnSingleSelectionUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && m_list && m_list->HasSingleSelection()); +} + +void PoeditFrame::OnSingleSelectionWithPluralsUpdate(wxUpdateUIEvent& event) +{ + // Enable only if a single item with plural forms is selected + event.Enable(m_catalog && m_list && m_list->HasSingleSelection() && + m_pluralNotebook && m_pluralNotebook->IsShown() && + std::find(m_textTransPlural.begin(), m_textTransPlural.end(), FindFocus()) != m_textTransPlural.end()); +} + +void PoeditFrame::OnHasCatalogUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog != nullptr); +} + +void PoeditFrame::OnIsEditableUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && !m_catalog->empty() && + m_catalog->HasCapability(Catalog::Cap::Translations)); +} + +void PoeditFrame::OnEditCommentUpdate(wxUpdateUIEvent& event) +{ + event.Enable(m_catalog && m_list && m_list->HasSelection() && + m_catalog->HasCapability(Catalog::Cap::UserComments)); +} + +#if defined(__WXMSW__) || defined(__WXGTK__) +// Emulate something like OS X's first responder: pass text editing commands to +// the focused text control. +void PoeditFrame::OnTextEditingCommand(wxCommandEvent& event) +{ +#ifdef __WXGTK__ + wxEventBlocker block(this, wxEVT_MENU); +#endif + wxWindow *w = wxWindow::FindFocus(); + if (!w || w == this || !w->ProcessWindowEventLocally(event)) + event.Skip(); +} + +void PoeditFrame::OnTextEditingCommandUpdate(wxUpdateUIEvent& event) +{ +#ifdef __WXGTK__ + wxEventBlocker block(this, wxEVT_UPDATE_UI); +#endif + wxWindow *w = wxWindow::FindFocus(); + if (!w || w == this || !w->ProcessWindowEventLocally(event)) + event.Enable(false); +} +#endif // __WXMSW__ || __WXGTK__ + +// ------------------------------------------------------------------ +// catalog navigation +// ------------------------------------------------------------------ + +namespace +{ + +bool Pred_AnyItem(const CatalogItemPtr&) +{ + return true; +} + +bool Pred_UnfinishedItem(const CatalogItemPtr& item) +{ + return !item->IsTranslated() || + item->IsFuzzy() || + item->GetValidity() == CatalogItem::Val_Invalid; +} + +} // anonymous namespace + +long PoeditFrame::NavigateGetNextItem(const long start, + int step, PoeditFrame::NavigatePredicate predicate, bool wrap, + CatalogItemPtr *out_item) +{ + const int count = m_list ? m_list->GetItemCount() : 0; + if ( !count ) + return -1; + + long i = start; + + for ( ;; ) + { + i += step; + + if ( i < 0 ) + { + if ( wrap ) + i += count; + else + return -1; // nowhere to go + } + else if ( i >= count ) + { + if ( wrap ) + i -= count; + else + return -1; // nowhere to go + } + + if ( i == start ) + return -1; // nowhere to go + + auto item = m_list->ListIndexToCatalogItem(i); + if ( predicate(item) ) + { + if (out_item) + *out_item = item; + return i; + } + } +} + +void PoeditFrame::Navigate(int step, NavigatePredicate predicate, bool wrap) +{ + if (!m_list) + return; + auto i = NavigateGetNextItem(m_list->GetFirstSelected(), step, predicate, wrap, nullptr); + if (i == -1) + return; + + m_list->SelectOnly(i); +} + +void PoeditFrame::OnPrev(wxCommandEvent&) +{ + Navigate(-1, Pred_AnyItem, /*wrap=*/false); +} + +void PoeditFrame::OnNext(wxCommandEvent&) +{ + Navigate(+1, Pred_AnyItem, /*wrap=*/false); +} + +void PoeditFrame::OnPrevUnfinished(wxCommandEvent&) +{ + Navigate(-1, Pred_UnfinishedItem, /*wrap=*/false); +} + +void PoeditFrame::OnNextUnfinished(wxCommandEvent&) +{ + Navigate(+1, Pred_UnfinishedItem, /*wrap=*/false); +} + +void PoeditFrame::OnDoneAndNext(wxCommandEvent&) +{ + auto item = GetCurrentItem(); + if (!item) + return; + + // If the user is "done" with an item, it should be in its final approved state: + if (item->IsFuzzy()) + { + item->SetFuzzy(false); + item->SetAutomatic(false); + item->SetModified(true); + if (!IsModified()) + { + m_modified = true; + UpdateTitle(); + UpdateStatusBar(); + } + + // do additional processing of finished translations, such as adding it to the TM: + m_pendingHumanEditedItem = item; + } + + // like "next unfinished", but wraps + Navigate(+1, Pred_UnfinishedItem, /*wrap=*/true); +} + +void PoeditFrame::OnPrevPage(wxCommandEvent&) +{ + if (!m_list) + return; + auto pos = std::max(m_list->GetFirstSelected()-10, 0L); + m_list->SelectOnly(pos); +} + +void PoeditFrame::OnNextPage(wxCommandEvent&) +{ + if (!m_list) + return; + auto pos = std::min(m_list->GetFirstSelected()+10, long(m_list->GetItemCount())-1); + m_list->SelectOnly(pos); +} + +void PoeditFrame::OnPrevPluralForm(wxCommandEvent&) +{ + m_pluralNotebook->AdvanceSelection(/*forward=*/false); + m_textTransPlural[m_pluralNotebook->GetSelection()]->SetFocus(); +} + +void PoeditFrame::OnNextPluralForm(wxCommandEvent&) +{ + m_pluralNotebook->AdvanceSelection(/*forward=*/true); + m_textTransPlural[m_pluralNotebook->GetSelection()]->SetFocus(); +} diff --git a/src/edframe.h b/src/edframe.h new file mode 100644 index 0000000..5b77b91 --- /dev/null +++ b/src/edframe.h @@ -0,0 +1,409 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _EDFRAME_H_ +#define _EDFRAME_H_ + +#include +#include + +#include +#include +#include +#include + +class WXDLLIMPEXP_FWD_CORE wxSplitterWindow; +class WXDLLIMPEXP_FWD_CORE wxSplitterEvent; +class WXDLLIMPEXP_FWD_CORE wxTextCtrl; +class WXDLLIMPEXP_FWD_CORE wxGauge; +class WXDLLIMPEXP_FWD_CORE wxNotebook; +class WXDLLIMPEXP_FWD_CORE wxStaticText; + +#include "catalog.h" +#include "gexecute.h" +#include "edlistctrl.h" +#include "edapp.h" + +class ListHandler; +class TextctrlHandler; +class TransTextctrlHandler; +class SourceTextCtrl; +class TranslationTextCtrl; + +class PoeditFrame; +class AttentionBar; +class ErrorBar; +class FindFrame; +class MainToolbar; +class Sidebar; + +/** This class provides main editing frame. It handles user's input + and provides frontend to catalog editing engine. Nothing fancy. + */ +class PoeditFrame : public wxFrame +{ + public: + /** Public constructor functions. Creates and shows frame + and opens \a catalog. If \a catalog is already opened + in another Poedit frame, then this function won't create + new frame but instead return pointer to existing one. + + \param catalog filename of catalog to open. + */ + static PoeditFrame *Create(const wxString& catalog); + + /** Public constructor functions. Creates and shows frame + without catalog or other content. + */ + static PoeditFrame *CreateEmpty(); + + /** Public constructor functions. Creates and shows frame + without catalog, just a welcome screen. + */ + static PoeditFrame *CreateWelcome(); + + /// Opens given file in this frame. Asks user for permission first + /// if there's unsaved document. + void OpenFile(const wxString& filename); + + /** Returns pointer to existing instance of PoeditFrame that currently + exists and edits \a catalog. If no such frame exists, returns NULL. + */ + static PoeditFrame *Find(const wxString& catalog); + + /// Returns active PoeditFrame, if it is unused (i.e. not showing + /// content, not having catalog loaded); NULL otherwise. + static PoeditFrame *UnusedActiveWindow() { return UnusedWindow(true); } + /// Ditto, but not required to be active + static PoeditFrame *UnusedWindow(bool active); + + /// Returns true if at least one one window has unsaved changes + static bool AnyWindowIsModified(); + + /// Returns true if any windows (with documents) are open + static bool HasAnyWindow() { return !ms_instances.empty(); } + + ~PoeditFrame(); + + /// Reads catalog, refreshes controls, takes ownership of catalog. + void ReadCatalog(const wxString& catalog); + /// Reads catalog, refreshes controls, takes ownership of catalog. + void ReadCatalog(const CatalogPtr& cat); + /// Writes catalog. + void WriteCatalog(const wxString& catalog); + + template + void WriteCatalog(const wxString& catalog, TFunctor completionHandler); + + void FixDuplicatesIfPresent(); + void WarnAboutLanguageIssues(); + + /// Did the user modify the catalog? + bool IsModified() const { return m_modified; } + /** Updates catalog and sets m_modified flag. Updates from POT + if \a pot_file is not empty and from sources otherwise. + */ + bool UpdateCatalog(const wxString& pot_file = wxEmptyString); + + + virtual void DoGiveHelp(const wxString& text, bool show); + + void UpdateAfterPreferencesChange(); + static void UpdateAllAfterPreferencesChange(); + + void EditCatalogProperties(); + void EditCatalogPropertiesAndUpdateFromSources(); + + /// Returns currently selected (edited) item + CatalogItemPtr GetCurrentItem() const; + + /// Flags for UpdateToTextCtrl() + enum UpdateToTextCtrlFlags + { + /// Change to textctrl should be undoable by the user + UndoableEdit = 0x01, + /// Change is due to item change, discard undo buffer + ItemChanged = 0x02 + }; + + /// Puts text from catalog & listctrl to textctrls. + void UpdateToTextCtrl(int flags); + + /// Puts text from textctrls to catalog & listctrl. + void UpdateFromTextCtrl(); + + private: + /** Ctor. + \param catalog filename of catalog to open. If empty, starts + w/o opened file. + */ + PoeditFrame(); + + /// Current kind of content view + enum class Content + { + Invalid, // no content whatsoever + Welcome, + PO, + POT, + Empty_PO + }; + Content m_contentType; + /// parent of all content controls etc. + wxWindow *m_contentView; + wxSizer *m_contentWrappingSizer; + + /// Ensures creation of specified content view, destroying the + /// current content if necessary + void EnsureContentView(Content type); + void EnsureAppropriateContentView(); + wxWindow* CreateContentViewPO(Content type); + void CreateContentViewEditControls(wxWindow *p, wxBoxSizer *panelSizer); + void CreateContentViewTemplateControls(wxWindow *p, wxBoxSizer *panelSizer); + wxWindow* CreateContentViewWelcome(); + wxWindow* CreateContentViewEmptyPO(); + void DestroyContentView(); + + typedef std::set PoeditFramesList; + static PoeditFramesList ms_instances; + + private: + /// Refreshes controls. + enum { Refresh_NoCatalogChanged = 1 }; + void RefreshControls(int flags = 0); + void NotifyCatalogChanged(const CatalogPtr& cat); + + /// Sets controls custom fonts. + void SetCustomFonts(); + void SetAccelerators(); + + // if there's modified catalog, ask user to save it; return true + // if it's save to discard m_catalog and load new data + template + void DoIfCanDiscardCurrentDoc(TFunctor completionHandler); + bool NeedsToAskIfCanDiscardCurrentDoc() const; + wxWindowPtr CreateAskAboutSavingDialog(); + + // implements opening of files, without asking user + void DoOpenFile(const wxString& filename); + + /// Updates statistics in statusbar. + void UpdateStatusBar(); + /// Updates frame title. + void UpdateTitle(); + /// Updates menu -- disables and enables items. + void UpdateMenu(); + + // Called when catalog's language possibly changed + void UpdateTextLanguage(); + + /// Returns popup menu for given catalog entry. + wxMenu *GetPopupMenu(int item); + + // (Re)initializes spellchecker, if needed + void InitSpellchecker(); + + // navigation to another item in the list + typedef bool (*NavigatePredicate)(const CatalogItemPtr& item); + long NavigateGetNextItem(const long start, int step, NavigatePredicate predicate, bool wrap, CatalogItemPtr *out_item); + void Navigate(int step, NavigatePredicate predicate, bool wrap); + void OnDoneAndNext(wxCommandEvent&); + void OnPrev(wxCommandEvent&); + void OnNext(wxCommandEvent&); + void OnPrevPage(wxCommandEvent&); + void OnNextPage(wxCommandEvent&); + void OnPrevUnfinished(wxCommandEvent&); + void OnNextUnfinished(wxCommandEvent&); + void OnPrevPluralForm(wxCommandEvent&); + void OnNextPluralForm(wxCommandEvent&); + + // Message handlers: +public: // for PoeditApp + void OnNew(wxCommandEvent& event); + void NewFromScratch(); + void NewFromPOT(); + void NewFromPOT(const wxString& pot_file, Language language = Language()); + + void OnOpen(wxCommandEvent& event); + void OnOpenFromCrowdin(wxCommandEvent& event); +#ifndef __WXOSX__ + void OnOpenHist(wxCommandEvent& event); + void OnCloseCmd(wxCommandEvent& event); +#endif +private: + void OnSave(wxCommandEvent& event); + void OnSaveAs(wxCommandEvent& event); + template + void GetSaveAsFilenameThenDo(const CatalogPtr& cat, F then); + void DoSaveAs(const wxString& filename); + void OnProperties(wxCommandEvent& event); + + void OnUpdateFromSources(wxCommandEvent& event); + void OnUpdateFromSourcesUpdate(wxUpdateUIEvent& event); + void OnUpdateFromPOT(wxCommandEvent& event); + void OnUpdateFromPOTUpdate(wxUpdateUIEvent& event); + void OnUpdateFromCrowdin(wxCommandEvent& event); + void OnUpdateFromCrowdinUpdate(wxUpdateUIEvent& event); + void OnUpdateSmart(wxCommandEvent& event); + void OnUpdateSmartUpdate(wxUpdateUIEvent& event); + + void OnValidate(wxCommandEvent& event); + void OnListSel(wxListEvent& event); + void OnListRightClick(wxMouseEvent& event); + void OnListFocus(wxFocusEvent& event); + void OnSplitterSashMoving(wxSplitterEvent& event); + void OnSidebarSplitterSashMoving(wxSplitterEvent& event); + void OnCloseWindow(wxCloseEvent& event); + void OnReference(wxCommandEvent& event); + void OnReferencesMenu(wxCommandEvent& event); + void OnReferencesMenuUpdate(wxUpdateUIEvent& event); + void ShowReference(int num); + void OnRightClick(wxCommandEvent& event); + void OnFuzzyFlag(wxCommandEvent& event); + void OnIDsFlag(wxCommandEvent& event); + void OnCopyFromSource(wxCommandEvent& event); + void OnCopyFromSingular(wxCommandEvent& event); + void OnClearTranslation(wxCommandEvent& event); + void OnFind(wxCommandEvent& event); + void OnFindAndReplace(wxCommandEvent& event); + void OnFindNext(wxCommandEvent& event); + void OnFindPrev(wxCommandEvent& event); + void OnUpdateFind(wxUpdateUIEvent& event); + void OnEditComment(wxCommandEvent& event); + void OnSortByFileOrder(wxCommandEvent&); + void OnSortBySource(wxCommandEvent&); + void OnSortByTranslation(wxCommandEvent&); + void OnSortGroupByContext(wxCommandEvent&); + void OnSortUntranslatedFirst(wxCommandEvent&); + void OnSortErrorsFirst(wxCommandEvent&); + + void OnShowHideSidebar(wxCommandEvent& event); + void OnUpdateShowHideSidebar(wxUpdateUIEvent& event); + void OnShowHideStatusbar(wxCommandEvent& event); + void OnUpdateShowHideStatusbar(wxUpdateUIEvent& event); + + void OnSelectionUpdate(wxUpdateUIEvent& event); + void OnSelectionUpdateEditable(wxUpdateUIEvent& event); + void OnSingleSelectionUpdate(wxUpdateUIEvent& event); + void OnSingleSelectionWithPluralsUpdate(wxUpdateUIEvent& event); + void OnHasCatalogUpdate(wxUpdateUIEvent& event); + void OnIsEditableUpdate(wxUpdateUIEvent& event); + void OnEditCommentUpdate(wxUpdateUIEvent& event); + +#if defined(__WXMSW__) || defined(__WXGTK__) + void OnTextEditingCommand(wxCommandEvent& event); + void OnTextEditingCommandUpdate(wxUpdateUIEvent& event); +#endif + + void OnSuggestion(wxCommandEvent& event); + void OnAutoTranslateAll(wxCommandEvent& event); + + enum AutoTranslateFlags + { + AutoTranslate_OnlyExact = 0x01, + AutoTranslate_ExactNotFuzzy = 0x02, + AutoTranslate_OnlyGoodQuality = 0x04 + }; + bool AutoTranslateCatalog(int *matchesCount, int flags); + template + bool AutoTranslateCatalog(int *matchesCount, const T& range, int flags); + + void OnPurgeDeleted(wxCommandEvent& event); + + void OnGoToBookmark(wxCommandEvent& event); + void OnSetBookmark(wxCommandEvent& event); + + void AddBookmarksMenu(wxMenu *menu); + + void OnCompileMO(wxCommandEvent& event); + void OnExport(wxCommandEvent& event); + bool ExportCatalog(const wxString& filename); + + void OnSize(wxSizeEvent& event); + + void ShowPluralFormUI(bool show = true); + + void RecreatePluralTextCtrls(); + + template + void ReportValidationErrors(int errors, Catalog::CompilationStatus mo_compilation_status, + bool from_save, bool other_file_saved, + TFunctor completionHandler); + +#ifndef __WXOSX__ + wxFileHistory& FileHistory() { return wxGetApp().FileHistory(); } +#endif + void NoteAsRecentFile(); + + void OnNewTranslationEntered(const CatalogItemPtr& item); + + DECLARE_EVENT_TABLE() + + private: + CatalogPtr m_catalog; + + wxString GetFileName() const + { return m_catalog ? m_catalog->GetFileName() : wxString(); } + bool m_fileExistsOnDisk; + + std::unique_ptr m_toolbar; + + CatalogItemPtr m_pendingHumanEditedItem; + + wxPanel *m_bottomPanel; + wxSplitterWindow *m_splitter; + wxSplitterWindow *m_sidebarSplitter; + PoeditListCtrl *m_list; + wxStaticText *m_labelContext; + ErrorBar *m_errorBar; + SourceTextCtrl *m_textOrig, *m_textOrigPlural; + TranslationTextCtrl *m_textTrans; + std::vector m_textTransPlural; + TranslationTextCtrl *m_textTransSingularForm; + wxNotebook *m_pluralNotebook; + wxStaticText *m_labelSingular, *m_labelPlural; +#ifndef __WXOSX__ + wxMenu *m_menuForHistory; +#endif + + wxFont m_normalGuiFont, m_boldGuiFont; + + AttentionBar *m_attentionBar; + Sidebar *m_sidebar; + wxWeakRef m_findWindow; + + bool m_modified; + bool m_hasObsoleteItems; + bool m_displayIDs; + bool m_dontAutoclearFuzzyStatus; + bool m_setSashPositionsWhenMaximized; + + friend class ListHandler; + friend class TextctrlHandler; + friend class TransTextctrlHandler; +}; + + +#endif // _EDFRAME_H_ diff --git a/src/edlistctrl.cpp b/src/edlistctrl.cpp new file mode 100644 index 0000000..6d4a66d --- /dev/null +++ b/src/edlistctrl.cpp @@ -0,0 +1,597 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * Copyright (C) 2005 Olivier Sannier + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "edlistctrl.h" + +#include "hidpi.h" +#include "language.h" +#include "cat_sorting.h" +#include "unicode_helpers.h" +#include "utility.h" + +#include +#include +#include +#include +#include +#include + +#ifdef __WXMSW__ +#include +#include +#endif + +#include + + +namespace +{ + +// how much to darken the other color in shaded list (this value +// is what GTK+ uses in its tree view control) +#define DARKEN_FACTOR 0.95 + +inline bool IsAlmostBlack(const wxColour& clr) +{ + return clr.Red() < 0x60 && clr.Green() < 0x60 && clr.Blue() < 0x60; +} + +inline bool IsAlmostWhite(const wxColour& clr) +{ + return clr.Red() > 0xE0 && clr.Green() > 0xE0 && clr.Blue() > 0xE0; +} + + +// colours used in the list: + +const wxColour gs_ErrorColor("#ff5050"); + +// colors for white list control background +const wxColour gs_UntranslatedForWhite("#103f67"); +const wxColour gs_FuzzyForWhite("#a9861b"); + +// ditto for black background +const wxColour gs_UntranslatedForBlack("#1962a0"); +const wxColour gs_FuzzyForBlack("#a9861b"); + + +const wxColour gs_TranspColor(254, 0, 253); // FIXME: get rid of this + +// wxMSW doesn't need a dummy image to align columns properly, unlike wxOSX +#ifdef __WXMSW__ +#define IMG_NOTHING -1 +#endif + +enum +{ +#ifndef __WXMSW__ + IMG_NOTHING, +#endif + IMG_AUTOMATIC, + IMG_COMMENT, + IMG_BOOKMARK +}; + + +class SelectionPreserver +{ +public: + SelectionPreserver(PoeditListCtrl *list_) : list(list_), focus(-1) + { + if (!list) + return; + selection = list->GetSelectedCatalogItems(); + focus = list->ListIndexToCatalog(list->GetFocusedItem()); + } + + ~SelectionPreserver() + { + if (!list) + return; + if (!selection.empty()) + list->SetSelectedCatalogItems(selection); + if (focus != -1) + { + int idx = list->CatalogIndexToList(focus); + list->EnsureVisible(idx); + list->Focus(idx); + } + } + +private: + PoeditListCtrl *list; + std::vector selection; + int focus; +}; + + +} // anonymous namespace + + +BEGIN_EVENT_TABLE(PoeditListCtrl, wxListCtrl) + EVT_SIZE(PoeditListCtrl::OnSize) +END_EVENT_TABLE() + +PoeditListCtrl::PoeditListCtrl(wxWindow *parent, + wxWindowID id, + const wxPoint &pos, + const wxSize &size, + long style, + bool dispIDs, + const wxValidator& validator, + const wxString &name) + : wxListView(parent, id, pos, size, style | wxLC_VIRTUAL, validator, name) +{ +#ifdef __WXMSW__ + if (wxApp::GetComCtl32Version() >= 600) + { + ::SendMessage(GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER); + } +#endif + + m_displayIDs = dispIDs; + + m_sourceTextDir = m_transTextDir = TextDirection::LTR; + m_appTextDir = (wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft) ? TextDirection::RTL : TextDirection::LTR; + + sortOrder = SortOrder::Default(); + + CreateColumns(); + + wxImageList *list = new wxImageList(PX(16), PX(16)); + + // IMG_XXX: +#ifndef __WXMSW__ + list->Add(wxArtProvider::GetBitmap("poedit-status-nothing")); +#endif + list->Add(wxArtProvider::GetBitmap("poedit-status-automatic")); + list->Add(wxArtProvider::GetBitmap("poedit-status-comment")); + list->Add(wxArtProvider::GetBitmap("poedit-status-bookmark")); + + AssignImageList(list, wxIMAGE_LIST_SMALL); + + // configure items colors & fonts: + + wxVisualAttributes visual = GetDefaultAttributes(); + wxColour shaded = visual.colBg; + +#ifdef __WXMSW__ + // On Windows 7, shaded list items make it impossible to see the selection, + // so use different color for it (see bug #336). + if (IsWindows7OrGreater()) + { + shaded.Set(int(0.99 * shaded.Red()), + int(0.99 * shaded.Green()), + shaded.Blue()); + } + else +#endif // __WXMSW__ +#ifdef __WXOSX__ + if ( shaded == *wxWHITE ) + { + // use standard shaded color from finder/databrowser: + shaded.Set("#f0f5fd"); + } + else +#endif // __WXOSX__ + { + shaded.Set(int(DARKEN_FACTOR * shaded.Red()), + int(DARKEN_FACTOR * shaded.Green()), + int(DARKEN_FACTOR * shaded.Blue())); + } + + m_attrNormal[1].SetBackgroundColour(shaded); + m_attrUntranslated[1].SetBackgroundColour(shaded); + m_attrFuzzy[1].SetBackgroundColour(shaded); + m_attrInvalid[1].SetBackgroundColour(shaded); + + // FIXME: make this user-configurable + if ( IsAlmostWhite(visual.colBg) ) + { + m_attrUntranslated[0].SetTextColour(gs_UntranslatedForWhite); + m_attrUntranslated[1].SetTextColour(gs_UntranslatedForWhite); + m_attrFuzzy[0].SetTextColour(gs_FuzzyForWhite); + m_attrFuzzy[1].SetTextColour(gs_FuzzyForWhite); + } + else if ( IsAlmostBlack(visual.colBg) ) + { + m_attrUntranslated[0].SetTextColour(gs_UntranslatedForBlack); + m_attrUntranslated[1].SetTextColour(gs_UntranslatedForBlack); + m_attrFuzzy[0].SetTextColour(gs_FuzzyForBlack); + m_attrFuzzy[1].SetTextColour(gs_FuzzyForBlack); + } + // else: we don't know if the default colors would be well-visible on + // user's background color, so play it safe and don't highlight + // anything + + // FIXME: todo; use appropriate font for fuzzy/trans/untrans + m_attrInvalid[0].SetBackgroundColour(gs_ErrorColor); + m_attrInvalid[1].SetBackgroundColour(gs_ErrorColor); + + // Use gray for IDs + if ( IsAlmostBlack(visual.colFg) ) + m_attrId.SetTextColour(wxColour("#A1A1A1")); + + SetCustomFont(wxNullFont); + +#ifdef __WXMSW__ + // Setup custom header font & color on Windows 10, where the default look is a bit odd + if (IsWindows10OrGreater()) + { + wxItemAttr headerAttr; + + // Use the same text color as Explorer's headers use + const wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive(); + if (theme) + { + wxUxThemeHandle hTheme(this, L"ItemsView::Header"); + COLORREF clr; + HRESULT hr = theme->GetThemeColor(hTheme, HP_HEADERITEM, 0, TMT_TEXTCOLOR, &clr); + if (SUCCEEDED(hr)) + headerAttr.SetTextColour(wxRGBToColour(clr)); + } + + // In HiDPI modes, standard header has smaller height than Explorer's and it isn't + // separated from the content well. wxListCtrl doesn't allow for customized header + // height (unlike wxDVC), so as a temporary workaround, at least make the text + // slightly larger to compensate. + if (HiDPIScalingFactor() > 1.0) + { + auto headerFont = visual.font; + headerFont.SetPointSize(headerFont.GetPointSize() + 1); + headerAttr.SetFont(headerFont); + } + + SetHeaderAttr(headerAttr); + } +#endif // __WXMSW__ +} + +PoeditListCtrl::~PoeditListCtrl() +{ + sortOrder.Save(); +} + +void PoeditListCtrl::SetCustomFont(wxFont font_) +{ + wxFont font(font_); + + if ( !font.IsOk() ) + font = GetDefaultAttributes().font; + + m_attrNormal[0].SetFont(font); + m_attrNormal[1].SetFont(font); + + wxFont fontb = font; + fontb.SetWeight(wxFONTWEIGHT_BOLD); + + m_attrUntranslated[0].SetFont(fontb); + m_attrUntranslated[1].SetFont(fontb); + + m_attrFuzzy[0].SetFont(fontb); + m_attrFuzzy[1].SetFont(fontb); + + m_attrInvalid[0].SetFont(fontb); + m_attrInvalid[1].SetFont(fontb); +} + +void PoeditListCtrl::SetDisplayLines(bool dl) +{ + m_displayIDs = dl; + CreateColumns(); +} + +void PoeditListCtrl::CreateColumns() +{ + DeleteAllColumns(); + + int curr = 0; + m_colSource = (int)InsertColumn(curr++, _("Source text")); + if (m_catalog && m_catalog->HasCapability(Catalog::Cap::Translations)) + m_colTrans = (int)InsertColumn(curr++, _("Translation")); + else + m_colTrans = -1; + if (m_displayIDs) + m_colId = (int)InsertColumn(curr++, _("ID"), wxLIST_FORMAT_RIGHT); + else + m_colId = -1; + +#ifdef __WXMSW__ + if (m_appTextDir == TextDirection::RTL) + { + // another wx quirk: if we truly need left alignment, we must lie under RTL locales + wxListItem colInfoOrig; + colInfoOrig.SetAlign(wxLIST_FORMAT_RIGHT); + SetColumn(m_colSource, colInfoOrig); + } +#endif + + SizeColumns(); +} + +void PoeditListCtrl::SizeColumns() +{ + const int LINE_COL_SIZE = m_displayIDs ? PX(50) : 0; + + int w = GetSize().x + - wxSystemSettings::GetMetric(wxSYS_VSCROLL_X) - 10 + - LINE_COL_SIZE; + + if (m_colTrans != -1) + { + SetColumnWidth(m_colSource, w / 2); + SetColumnWidth(m_colTrans, w - w / 2); + m_colWidth = (w/2) / GetCharWidth(); + } + else + { + SetColumnWidth(m_colSource, w); + m_colWidth = w / GetCharWidth(); + } + + if (m_displayIDs) + SetColumnWidth(m_colId, LINE_COL_SIZE); +} + + +void PoeditListCtrl::CatalogChanged(const CatalogPtr& catalog) +{ + wxWindowUpdateLocker no_updates(this); + + const bool isSameCatalog = (catalog == m_catalog); + const bool sizeChanged = (catalog && (int)catalog->GetCount() != GetItemCount()); + + SelectionPreserver preserve(isSameCatalog ? this : nullptr); + + // this is to prevent crashes (wxMac at least) when shortening virtual + // listctrl when its scrolled to the bottom: + if (sizeChanged) + { + m_catalog.reset(); + SetItemCount(0); + } + + // now read the new catalog: + m_catalog = catalog; + CreateColumns(); + ReadCatalog(/*resetSizeAndSelection=*/sizeChanged); +} + +void PoeditListCtrl::ReadCatalog(bool resetSizeAndSelection) +{ + wxWindowUpdateLocker no_updates(this); + + // clear the list and its sort order too: + if (resetSizeAndSelection) + SetItemCount(0); + m_mapListToCatalog.clear(); + m_mapCatalogToList.clear(); + + if (!m_catalog) + { + Refresh(); + return; + } + + auto srclang = m_catalog->GetSourceLanguage(); + auto lang = m_catalog->GetLanguage(); + m_sourceTextDir = srclang.Direction(); + m_transTextDir = lang.Direction(); + + auto isRTL = lang.IsRTL(); +#ifdef __WXMSW__ + // a quirk of wx API: if the current locale is RTL, the meaning of L and R is reversed + if (m_appTextDir == TextDirection::RTL) + isRTL = !isRTL; +#endif + + wxListItem colInfo; + colInfo.SetMask(wxLIST_MASK_TEXT); + + if (srclang.IsValid()) + colInfo.SetText(wxString::Format(_(L"Source text — %s"), srclang.DisplayName())); + else + colInfo.SetText(_("Source text")); + SetColumn(m_colSource, colInfo); + + if (m_colTrans != -1) + { + wxString langname = lang.IsValid() ? lang.DisplayName() : _("unknown language"); + colInfo.SetText(wxString::Format(_(L"Translation — %s"), langname)); + colInfo.SetAlign(isRTL ? wxLIST_FORMAT_RIGHT : wxLIST_FORMAT_LEFT); + SetColumn(m_colTrans, colInfo); + } + + // sort catalog items, create indexes mapping + CreateSortMap(); + + // now that everything is prepared, we may set the item count + if (resetSizeAndSelection) + SetItemCount(m_catalog->GetCount()); + + // scroll to the top and refresh everything: + if ( m_catalog->GetCount() ) + { + if (resetSizeAndSelection) + SelectOnly(0); + RefreshItems(0, m_catalog->GetCount()-1); + } + else + { + Refresh(); + } +} + + +void PoeditListCtrl::Sort() +{ + if ( m_catalog && m_catalog->GetCount() ) + { + SelectionPreserver preserve(this); + + CreateSortMap(); + RefreshItems(0, m_catalog->GetCount()-1); + } + else + { + Refresh(); + } +} + + +void PoeditListCtrl::CreateSortMap() +{ + int count = (int)m_catalog->GetCount(); + + m_mapListToCatalog.resize(count); + m_mapCatalogToList.resize(count); + + // First create identity mapping for the sort order. + for ( int i = 0; i < count; i++ ) + m_mapListToCatalog[i] = i; + + // m_mapListToCatalog will hold our desired sort order. Sort it in place + // now, using the desired sort criteria. + CatalogItemsComparator comparator(*m_catalog, sortOrder); + std::sort + ( + m_mapListToCatalog.begin(), + m_mapListToCatalog.end(), + std::ref(comparator) + ); + + // Finally, construct m_mapCatalogToList to be the inverse mapping to + // m_mapListToCatalog. + for ( int i = 0; i < count; i++ ) + m_mapCatalogToList[m_mapListToCatalog[i]] = i; +} + + +wxString PoeditListCtrl::OnGetItemText(long item, long column) const +{ + if (!m_catalog) + return wxEmptyString; + + auto d = ListIndexToCatalogItem((int)item); + + if (column == m_colSource) + { + wxString orig; + if ( d->HasContext() ) + orig.Printf("%s [ %s ]", + d->GetString().c_str(), d->GetContext().c_str()); + else + orig = d->GetString(); + + orig = orig.substr(0, GetMaxColChars()); +#ifdef __WXMSW__ + orig.Replace("\n", " "); +#endif + + // Add RTL Unicode mark to render bidi texts correctly + if (m_appTextDir != m_sourceTextDir) + return bidi::mark_direction(orig, m_sourceTextDir); + else + return orig; + } + else if (column == m_colTrans) + { + auto trans = d->GetTranslation().substr(0, GetMaxColChars()); +#ifdef __WXMSW__ + trans.Replace("\n", " "); +#endif + + // Add RTL Unicode mark to render bidi texts correctly + if (m_appTextDir != m_transTextDir) + return bidi::mark_direction(trans, m_transTextDir); + else + return trans; + } + else if (column == m_colId) + { + return wxString() << d->GetId(); + } + else + { + return wxEmptyString; + } +} + +wxListItemAttr *PoeditListCtrl::OnGetItemAttr(long item) const +{ + long idx = item % 2; + + if (!m_catalog) + return (wxListItemAttr*)&m_attrNormal[idx]; + + auto d = ListIndexToCatalogItem((int)item); + + if (d->GetValidity() == CatalogItem::Val_Invalid) + return (wxListItemAttr*)&m_attrInvalid[idx]; + else if (!d->IsTranslated()) + return (wxListItemAttr*)&m_attrUntranslated[idx]; + else if (d->IsFuzzy()) + return (wxListItemAttr*)&m_attrFuzzy[idx]; + else + return (wxListItemAttr*)&m_attrNormal[idx]; +} + +wxListItemAttr *PoeditListCtrl::OnGetItemColumnAttr(long item, long column) const +{ + if (column == m_colId) + { + return (wxListItemAttr*)&m_attrId; + } + else + { + return OnGetItemAttr(item); + } +} + +int PoeditListCtrl::OnGetItemImage(long item) const +{ + if (!m_catalog) + return IMG_NOTHING; + + auto d = ListIndexToCatalogItem((int)item); + + if (d->GetBookmark() != NO_BOOKMARK) + return IMG_BOOKMARK; + else if (d->HasComment() || d->HasExtractedComments()) + return IMG_COMMENT; + else if (d->IsAutomatic()) + return IMG_AUTOMATIC; + else + return IMG_NOTHING; +} + +void PoeditListCtrl::OnSize(wxSizeEvent& event) +{ + wxWindowUpdateLocker lock(this); + + SizeColumns(); + event.Skip(); +} diff --git a/src/edlistctrl.h b/src/edlistctrl.h new file mode 100644 index 0000000..82e554c --- /dev/null +++ b/src/edlistctrl.h @@ -0,0 +1,209 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * Copyright (C) 2005 Olivier Sannier + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _ED_LIST_CTRL_H_ +#define _ED_LIST_CTRL_H_ + +#include +#include + +#include + +class WXDLLIMPEXP_FWD_CORE wxListCtrl; +class WXDLLIMPEXP_FWD_CORE wxListEvent; + +#include "catalog.h" +#include "cat_sorting.h" +#include "language.h" + +// list control with both columns equally wide: +class PoeditListCtrl : public wxListView +{ + public: + PoeditListCtrl(wxWindow *parent, + wxWindowID id = -1, + const wxPoint &pos = wxDefaultPosition, + const wxSize &size = wxDefaultSize, + long style = wxLC_ICON, + bool dispIDs = false, + const wxValidator& validator = wxDefaultValidator, + const wxString &name = "listctrl"); + + virtual ~PoeditListCtrl(); + + /// Re-sort the control according to user-specified criteria. + void Sort(); + + void SizeColumns(); + + void SetDisplayLines(bool dl); + + void CatalogChanged(const CatalogPtr& catalog); + + virtual wxString OnGetItemText(long item, long column) const; + virtual wxListItemAttr *OnGetItemAttr(long item) const; + virtual wxListItemAttr *OnGetItemColumnAttr(long item, long column) const; + virtual int OnGetItemImage(long item) const; + + /// Returns the list item index for the given catalog index + int CatalogIndexToList(int index) const + { + if ( index < 0 || index >= (int)m_mapCatalogToList.size() ) + return -1; + else + return m_mapCatalogToList[index]; + } + + /// Returns item's index in the catalog + int ListIndexToCatalog(long index) const + { + if ( index < 0 || index >= (int)m_mapListToCatalog.size() ) + return -1; + else + return m_mapListToCatalog[index]; + } + + /// Returns item from the catalog based on list index + CatalogItemPtr ListIndexToCatalogItem(long index) const + { + auto idx = ListIndexToCatalog(index); + return idx != -1 ? (*m_catalog)[idx] : nullptr; + } + CatalogItemPtr ListIndexToCatalogItem(long index) + { + auto idx = ListIndexToCatalog(index); + return idx != -1 ? (*m_catalog)[idx] : nullptr; + } + + /// Returns index of selected catalog item + int GetFirstSelectedCatalogItem() const + { + return ListIndexToCatalog(GetFirstSelected()); + } + + std::vector GetSelectedCatalogItems() const + { + std::vector s; + for (auto i = GetFirstSelected(); i != -1; i = GetNextSelected(i)) + s.push_back(ListIndexToCatalog(i)); + return s; + } + + void SetSelectedCatalogItems(const std::vector& selection) + { + ClearSelection(); + for (auto i: selection) + { + auto idx = CatalogIndexToList(i); + if (idx != -1) + Select(idx); + } + } + + // Perform given function for all selected items. The function takes + // reference to the item as its argument. Also refresh the items touched, + // on the assumption that the operation modifies them. + template + void ForSelectedCatalogItemsDo(T func) + { + for (auto i = GetFirstSelected(); i != -1; i = GetNextSelected(i)) + { + func(*ListIndexToCatalogItem(i)); + RefreshItem(i); + } + } + + void SelectOnly(long n) + { + ClearSelection(); + wxListView::Select(n); + EnsureVisible(n); + } + + void SelectAndFocus(long n) + { + SelectOnly(n); + Focus(n); + } + + void ClearSelection() + { + for (auto i = GetFirstSelected(); i != -1; i = GetNextSelected(i)) + wxListView::Select(i, false); + } + + /// Returns true if at least one item is selected. + bool HasSelection() const { return GetSelectedItemCount() >= 1; } + + /// Returns true if exactly one item is selected. + bool HasSingleSelection() const { return GetSelectedItemCount() == 1; } + + /// Returns true if more than one item are selected. + bool HasMultipleSelection() const { return GetSelectedItemCount() > 1; } + + void RefreshSelectedItems() + { + for (auto i = GetFirstSelected(); i != -1; i = GetNextSelected(i)) + RefreshItem(i); + } + + void SetCustomFont(wxFont font); + + // Order used for sorting + SortOrder sortOrder; + + private: + // Returns average width of one column in number of characters: + size_t GetMaxColChars() const + { + return m_colWidth * 2/*safety coefficient*/; + } + + void CreateSortMap(); + void CreateColumns(); + void ReadCatalog(bool resetSizeAndSelection); + void OnSize(wxSizeEvent& event); + + bool m_displayIDs; + int m_colSource, m_colTrans, m_colId; + unsigned m_colWidth; + TextDirection m_sourceTextDir, m_transTextDir, m_appTextDir; + + CatalogPtr m_catalog; + + std::vector m_mapListToCatalog; + std::vector m_mapCatalogToList; + + wxListItemAttr m_attrId; + wxListItemAttr m_attrNormal[2]; + wxListItemAttr m_attrUntranslated[2]; + wxListItemAttr m_attrFuzzy[2]; + wxListItemAttr m_attrInvalid[2]; + + DECLARE_EVENT_TABLE() +}; + +#endif // _ED_LIST_CTRL_H_ diff --git a/src/errorbar.cpp b/src/errorbar.cpp new file mode 100644 index 0000000..6125678 --- /dev/null +++ b/src/errorbar.cpp @@ -0,0 +1,89 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2012-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "errorbar.h" + +#include "hidpi.h" +#include "utility.h" + +#include +#include +#include + +namespace +{ + +const wxColour gs_ErrorColor("#ff5050"); + +} // anonymous namespace + + +ErrorBar::ErrorBar(wxWindow *parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, + wxTAB_TRAVERSAL | wxBORDER_NONE | wxFULL_REPAINT_ON_RESIZE) +{ + Bind(wxEVT_PAINT, &ErrorBar::OnPaint, this); + +#ifdef __WXOSX__ + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + m_label = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_label->SetBackgroundColour(gs_ErrorColor); + + wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->AddSpacer(PXDefaultBorder); + sizer->Add(m_label, wxSizerFlags(1).Center().Border(wxTOP | wxBOTTOM | wxRIGHT, 3)); + + SetSizer(sizer); + + // the bar should be initially hidden + Show(false); +} + + +void ErrorBar::ShowError(const wxString& error) +{ + const wxString prefix = _("Error:"); + m_label->SetLabelMarkup( + wxString::Format("%s %s", prefix, EscapeMarkup(error))); + + GetContainingSizer()->Show(this); +} + + +void ErrorBar::HideError() +{ + GetContainingSizer()->Hide(this); +} + + +void ErrorBar::OnPaint(wxPaintEvent&) +{ + wxPaintDC dc(this); + dc.SetBrush(gs_ErrorColor); + dc.SetPen(gs_ErrorColor); + dc.DrawRoundedRectangle(wxPoint(0,0), dc.GetSize(), 2.0); +} diff --git a/src/errorbar.h b/src/errorbar.h new file mode 100644 index 0000000..a6f1f25 --- /dev/null +++ b/src/errorbar.h @@ -0,0 +1,51 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2012-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _ERRORBAR_H_ +#define _ERRORBAR_H_ + +#include + +class WXDLLIMPEXP_FWD_CORE wxStaticText; + +/** + Error bar displays an error under the translation. + */ +class ErrorBar : public wxPanel +{ +public: + ErrorBar(wxWindow *parent); + + void ShowError(const wxString& error); + void HideError(); + +private: + void OnPaint(wxPaintEvent& event); + +private: + wxStaticText *m_label; +}; + +#endif // _ERRORBAR_H_ diff --git a/src/errors.h b/src/errors.h new file mode 100644 index 0000000..a40ee35 --- /dev/null +++ b/src/errors.h @@ -0,0 +1,92 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _ERRORS_H_ +#define _ERRORS_H_ + +#include +#include +#include + +/// Any exception error. +/// Pretty much the same as std::runtime_error, except using Unicode strings. +class Exception : public std::runtime_error +{ +public: + Exception(const wxString& what) + : std::runtime_error(std::string(what.utf8_str())), m_what(what) {} + + const wxString& What() const { return m_what; } + + // prevent use of std::exception::what() on Exception-cast instances: +private: +#ifdef _MSC_VER + const char* what() const override { return std::runtime_error::what(); } +#else + const char* what() const noexcept override { return std::runtime_error::what(); } +#endif + +private: + wxString m_what; +}; + + +/// Helper to convert an exception into a human-readable string +inline wxString DescribeException(std::exception_ptr e) +{ + try + { + std::rethrow_exception(e); + return "no error"; // silence stupid VC++ + } + catch (const Exception& e) + { + return e.What(); + } + catch (const std::exception& e) + { + const char *msg = e.what(); + // try interpreting as UTF-8 first as the most likely one (from external sources) + wxString s = wxString::FromUTF8(msg); + if (s.empty()) + { + s = wxString(msg); + if (s.empty()) // not in current locale either, fall back to Latin1 + s = wxString(msg, wxConvISO8859_1); + } + return s; + } + catch (...) + { + return "unknown error"; + } +} + +inline wxString DescribeCurrentException() +{ + return DescribeException(std::current_exception()); +} + +#endif // _ERRORS_H_ diff --git a/src/export_html.cpp b/src/export_html.cpp new file mode 100644 index 0000000..43d0091 --- /dev/null +++ b/src/export_html.cpp @@ -0,0 +1,378 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2003 Christophe Hermier + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "catalog.h" +#include "utility.h" +#include "str_helpers.h" + +#include + +namespace +{ + +inline std::string fmt_trans(const wxString& s) +{ + wxString out = EscapeMarkup(s); + out.Replace("\n", "\n
    "); + return str::to_utf8(out); +} + +template +inline void TableRow(std::ostream& f, const T1& col1, const T2& col2) +{ + f << "" + << "" << str::to_utf8(col1) << "" + << "" << str::to_utf8(col2) << "" + << "\n"; +} + +extern const char *CSS_STYLE; + +} // anonymous namespace + +void Catalog::ExportToHTML(std::ostream& f) +{ + const bool translated = HasCapability(Catalog::Cap::Translations); + + f << "\n" + "\n" + "\n" + " " << str::to_utf8(m_header.Project) << "\n" + " \n" + " \n" + "\n" + "\n" + "
    \n"; + + // Metadata section: + + f << "\n"; + if (!m_header.Project.empty()) + TableRow(f, _("Project:"), m_header.Project); + if (translated && m_header.Lang.IsValid()) + TableRow(f, _("Language:"), m_header.Lang.DisplayName()); + f << "\n"; + + + // Statistics: + if (translated) + { + int all = 0; + int fuzzy = 0; + int untranslated = 0; + int unfinished = 0; + GetStatistics(&all, &fuzzy, nullptr, &untranslated, &unfinished); + int percent = (all == 0 ) ? 0 : (100 * (all - unfinished) / all); + + f << "
    \n" + << "
    \n"; + if (all > unfinished) + f << "
     
    \n"; + if (fuzzy > 0) + f << "
     
    \n"; + if (untranslated > 0) + f << "
     
    \n"; + f << "
    \n" + << "
    "; + f << str::to_utf8(wxString::Format(_("Translated: %d of %d (%d %%)"), all - unfinished, all, percent)); + if (unfinished > 0) + f << str::to_utf8(L" • ") << str::to_utf8(wxString::Format(_("Remaining: %d"), unfinished)); + f << "
    \n" + << "
    \n"; + } + else + { + int all = (int)items().size(); + f << "
    \n" + << "
    \n" + << "
     
    \n" + << "
    \n" + << "
    " + << str::to_utf8(wxString::Format(wxPLURAL("%d entry", "%d entries", all), all)) + << "
    \n" + << "
    \n"; + } + + // Translations: + + std::string lang_src, lang_tra; + if (m_sourceLanguage.IsValid()) + lang_src = " lang='" + m_sourceLanguage.LanguageTag() + "'"; + if (m_header.Lang.IsValid()) + { + lang_tra = " lang='" + m_header.Lang.LanguageTag() + "'"; + if (m_header.Lang.IsRTL()) + lang_tra += " dir='rtl'"; + } + + auto thead_src = m_sourceLanguage.IsValid() + ? (wxString::Format(_(L"Source text — %s"), m_sourceLanguage.DisplayName())) + : _("Source text"); + auto thead_tra = wxString::Format(_(L"Translation — %s"), + m_header.Lang.IsValid() ? m_header.Lang.DisplayName() : _("unknown language")); + + f << "\n" + " \n" + " \n" + " \n"; + if (translated) + { + f << " \n"; + } + f << " \n" + " \n" + " \n"; + + for (auto& item: items()) + { + bool hasComments = item->HasComment() || item->HasExtractedComments(); + + std::string klass("i"); + if (!item->IsTranslated()) + klass += " untrans"; + if (item->IsFuzzy()) + klass += " fuzzy"; + if (hasComments) + klass += " with-comments"; + f << "\n"; + + // Source string: + f << "\n"; + + // Translation: + if (translated) + { + f << "\n"; + } + + // Notes, if present: + if (hasComments) + { + f << "\n" + << "\n" + << " \n"; + } + + f << "\n"; + } + + f << "\n" + "
    " << str::to_utf8(thead_src) << "" << str::to_utf8(thead_tra) << "
    \n"; + if (item->HasPlural()) + { + f << "
      \n" + << "
    1. " << fmt_trans(item->GetString()) << "
    2. \n" + << "
    3. " << fmt_trans(item->GetPluralString()) << "
    4. \n" + << "
    \n"; + } + else + { + f << fmt_trans(item->GetString()); + } + if (item->HasContext()) + f << " [" << fmt_trans(item->GetContext()) << "]"; + f << "
    \n"; + if (item->HasPlural()) + { + if (item->IsTranslated()) + { + f << "
      \n"; + for (auto t: item->GetTranslations()) + f << "
    1. " << fmt_trans(t) << "
    2. \n"; + f << "
    \n"; + } + } + else + { + f << fmt_trans(item->GetTranslation()); + } + f << "
    "; + if (item->HasExtractedComments()) + { + f << "

    \n"; + for (auto& n: item->GetExtractedComments()) + f << fmt_trans(n) << "
    \n"; + f << "

    \n"; + } + if (item->HasComment()) + { + f << "

    \n" + << fmt_trans(item->GetComment()) + << "

    \n"; + } + f << "
    \n" + "
    \n" + "\n" + "\n"; +} + + +namespace +{ + +const char *CSS_STYLE = R"( + +/* +Based on Minimal CSS (minimalcss.com) under the MIT license. +*/ + +/* Reset */ +* { margin: 0; padding: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } + +/* Layout */ +body { background-color: #fff; color: #333; font: 14px/20px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; } + +header { width: 100%; margin: 0 auto; position: relative; padding: 20px 0; margin-bottom: 20px; } + +nav ul { margin: 0; } +nav ul li { display: inline; margin-right: 20px; font-size: 16px; line-height: 28px; color: #333; } +nav ul li a { color: #333; } + +.container { position: relative; max-width: 90%; margin: 0 auto; } + +footer { border-top:1px solid #ccc; font-size:11px; line-height:26px; color:#999; } +footer a { color:#999999; } +footer a:hover { color:#105CB6; } +footer ul li { display:inline; list-style:none; padding-left:20px; } + +/* Typography */ +a { color: #105CB6; text-decoration: none; } +a:hover, a:focus { color: #105CB6; text-decoration: underline; } +a:active { color: #105CB6; } + +h1 { font-size: 24px; line-height: 20px; margin: 10px 0; } +h2 { font-size: 20px; line-height: 20px; margin: 10px 0; } +h3 { font-size: 16px; line-height: 20px; margin: 10px 0; } +h4 { font-size: 14px; line-height: 20px; margin: 10px 0; } +h5 { font-size: 12px; line-height: 20px; margin: 10px 0; } +h5 { font-size: 10px; line-height: 20px; margin: 10px 0; } +h1,h2,h3,h4,h5,h6 { color: #333; } + +p { margin-bottom: 10px; } + +.float-left { float: left; } +.float-right { float: right; } +img.float-left { float: left; margin: 0 20px 20px 0; } +img.float-right { float: right; margin: 0 0 20px 20px; } +img.center { margin: 0 auto; display: block; } + +.text-left { text-align: left; } +.text-center { text-align: center; } +.text-right { text-align: right; } +.text-justify { text-align: justify; } + +/* Misc */ +hr { background-color: #ccc; border: 0px; color: #ccc; height: 1px; margin: 8px 0 20px 0; } +pre, code { background:#E0ECF6; display:block; margin-bottom: 20px; padding:10px; } + +blockquote { margin: 10px 10px 20px; padding: 9px; background-color: #f8f8f8; color: #666; border-left: 5px solid #ddd; font: 14px/20px Georgia, Times, serif; quotes: "\201C" "\201D"; } +blockquote p { margin: 0; } +blockquote:before { content: open-quote; font-weight: bold; } +blockquote:after { content: close-quote; font-weight: bold; } + +/* List */ +ul { list-style-position:inside; } +ol { list-style-position:inside; } + +/* Table */ +table { + border-collapse: collapse; + border-spacing: 0; +} +th { font-weight: bold; } +tfoot { font-style: italic; } + +/* Metadata part */ + +.metadata { + margin-top: 15px; + margin-bottom: 10px; + font-size: 90%; +} +table.metadata td { + padding-right: 20px; +} + +.stats { + padding-top: 5px; + padding-bottom: 20px; +} +.graph { + width: 100%; +} +.graph div { float: left; } +.graph div:first-child { border-top-left-radius: 3px; border-bottom-left-radius: 3px; } +.graph div:last-child { border-top-right-radius: 3px; border-bottom-right-radius: 3px; } +.percent-done { background-color: #71DD46; height: 10px; } +.percent-fuzzy { background-color: #FFD300; height: 10px; } +.percent-untrans { background-color: #F1F1F1; height: 10px; } +.legend { + font-size: smaller; + color: #aaa; + padding-top: 12px; + text-align: center; +} + +/* Translations */ +table.translations { + width: 100%; + table-layout: fixed; +} +table.translations th, table.translations td { + padding: 5px 10px; + vertical-align: top; + border-bottom: 1px solid #E1E1E1; +} +table.translations th { + text-align: left; +} +table.translations th:first-child, table.translations td:first-child { padding-left: 0; } +table.translations th:last-child, table.translations td:last-child { padding-right: 0; } + +.with-comments td { + border-bottom: none !important; +} +tr.comments div { + float: right; + max-width: 75%; + font-size: smaller; + color: #aaa; +} +tr.comments div p:last-child { margin-bottom: 0; } + +.fuzzy .tra { + color: #a9861b; +} + +.msgctxt { + font-size: smaller; + color: #6d8e13; +} + +)"; + +} // anonymous namespace diff --git a/src/extractor.cpp b/src/extractor.cpp new file mode 100644 index 0000000..a14878f --- /dev/null +++ b/src/extractor.cpp @@ -0,0 +1,190 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + + +#include +#include +#include +#include + +#include "extractor.h" +#include "gexecute.h" + + + +void ExtractorsDB::Read(wxConfigBase *cfg) +{ + Data.clear(); + + cfg->SetExpandEnvVars(false); + + Extractor info; + wxString key, oldpath = cfg->GetPath(); + wxStringTokenizer tkn(cfg->Read("Parsers/List", wxEmptyString), ";"); + + while (tkn.HasMoreTokens()) + { + info.Name = tkn.GetNextToken(); + key = info.Name; key.Replace("/", "_"); + cfg->SetPath("Parsers/" + key); + info.Enabled = cfg->ReadBool("Enabled", true); + info.Extensions = cfg->Read("Extensions", wxEmptyString); + info.Command = cfg->Read("Command", wxEmptyString); + info.KeywordItem = cfg->Read("KeywordItem", wxEmptyString); + info.FileItem = cfg->Read("FileItem", wxEmptyString); + info.CharsetItem = cfg->Read("CharsetItem", wxEmptyString); + Data.push_back(info); + cfg->SetPath(oldpath); + } +} + + + +void ExtractorsDB::Write(wxConfigBase *cfg) +{ +#if 0 // asserts on wxGTK, some bug in wx + if (cfg->HasGroup("Parsers")) + cfg->DeleteGroup("Parsers"); +#endif + + cfg->SetExpandEnvVars(false); + + if (Data.empty()) + return; + + size_t i; + wxString list; + list << Data[0].Name; + for (i = 1; i < Data.size(); i++) + list << ";" << Data[i].Name; + cfg->Write("Parsers/List", list); + + wxString oldpath = cfg->GetPath(); + wxString key; + for (const auto& item: Data) + { + key = item.Name; key.Replace("/", "_"); + cfg->SetPath("Parsers/" + key); + cfg->Write("Enabled", item.Enabled); + cfg->Write("Extensions", item.Extensions); + cfg->Write("Command", item.Command); + cfg->Write("KeywordItem", item.KeywordItem); + cfg->Write("FileItem", item.FileItem); + cfg->Write("CharsetItem", item.CharsetItem); + cfg->SetPath(oldpath); + } +} + +int ExtractorsDB::FindExtractor(const wxString& name) +{ + for (size_t i = 0; i < Data.size(); i++) + { + if (Data[i].Name == name) + return int(i); + } + return -1; +} + + +wxArrayString Extractor::SelectParsable(const wxArrayString& files) +{ + wxStringTokenizer tkn(Extensions, ";, \t", wxTOKEN_STRTOK); + wxString wildcard; + wxArrayString result; + size_t i; + + while (tkn.HasMoreTokens()) + { + wildcard = tkn.GetNextToken(); +#ifdef __WXMSW__ + wildcard.MakeLower(); +#endif + for (i = 0; i < files.GetCount(); i++) +#ifdef __WXMSW__ + if (files[i].Lower().Matches(wildcard)) +#else + if (files[i].Matches(wildcard)) +#endif + { + result.Add(files[i]); + } + } + + return result; +} + + + +wxString Extractor::GetCommand(const wxArrayString& files, + const wxArrayString& keywords, + const wxString& output, + const wxString& charset) +{ + wxString cmdline, kline, fline; + + cmdline = Command; + cmdline.Replace("%o", QuoteCmdlineArg(output)); + + wxString dummy; + size_t i; + + for (i = 0; i < keywords.GetCount(); i++) + { + dummy = KeywordItem; + dummy.Replace("%k", keywords[i]); + kline << " " << dummy; + } + + for (i = 0; i < files.GetCount(); i++) + { + wxString fn = files[i]; +#ifdef __WXMSW__ + // Gettext tools can't handle Unicode filenames well (due to using + // char* arguments), so work around this by using the short names. + if (!fn.IsAscii()) + { + fn = wxFileName(fn).GetShortPath(); + fn.Replace("\\", "/"); + } +#endif + + dummy = FileItem; + dummy.Replace("%f", QuoteCmdlineArg(fn)); + fline << " " << dummy; + } + + wxString charsetline; + if (!charset.empty()) + { + charsetline = CharsetItem; + charsetline.Replace("%c", charset); + } + + cmdline.Replace("%C", charsetline); + cmdline.Replace("%K", kline); + cmdline.Replace("%F", fline); + + return cmdline; +} diff --git a/src/extractor.h b/src/extractor.h new file mode 100644 index 0000000..172a4a7 --- /dev/null +++ b/src/extractor.h @@ -0,0 +1,111 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_extractor_h +#define Poedit_extractor_h + +#include +#include + +#include + +class WXDLLIMPEXP_FWD_BASE wxConfigBase; + + +/** This class holds information about an external extractor. It does + \b not do any extraction. The only functionality it provides is + the metadata to invoke extractors. + */ +class Extractor +{ + public: + Extractor() : Enabled(true) {} + + /// User-oriented name of the extractor (e.g. "C/C++"). + wxString Name; + + /// Whether the extractor is currently enabled. + bool Enabled; + + /** Semicolon-separated list of wildcards. The extractor is capable + of parsing files matching these wildcards. Example: "*.cpp;*.h" + */ + wxString Extensions; + /** Command used to execute the extractor. %o expands to output file, + %K to list of keywords and %F to list of files. + */ + wxString Command; + /** Expansion string for single keyword. %k expands to keyword. + %K in Command is replaced by n expansions of KeywordItem where + n is the number of keywords. + */ + wxString KeywordItem; + /** Expansion string for single filename. %f expands to filename. + %F in Command is replaced by n expansions of FileItem where + n is the number of filenames. + */ + wxString FileItem; + + /** Expansion string for single charset setting. %c expands to + charset name. %C in command is replaced with this. */ + wxString CharsetItem; + + /// Returns array of files from 'files' that this extractor understands. + wxArrayString SelectParsable(const wxArrayString& files); + + /** Returns command line used to launch the extractor with specified + input. This expands all veriables in Command property of the + parser and returns string that be directly passed to wxExecute. + \param files list of files to parse + \param keywords list of recognized keywords + \param output name of temporary output file + \param charset source code charset (may be empty) + */ + wxString GetCommand(const wxArrayString& files, + const wxArrayString& keywords, + const wxString& output, + const wxString& charset); +}; + +/** Database of all available extractors. This class is regular pseudo-template + dynamic wxArray with additional methods for storing its content to + wxConfig object and retrieving it. + */ +class ExtractorsDB +{ +public: + /// Reads DB from registry/dotfile. + void Read(wxConfigBase *cfg); + + /// Write DB to registry/dotfile. + void Write(wxConfigBase *cfg); + + /// Returns index of extractor with given name or -1 if it can't be found: + int FindExtractor(const wxString& name); + + std::vector Data; +}; + +#endif // Poedit_extractor_h diff --git a/src/fileviewer.cpp b/src/fileviewer.cpp new file mode 100644 index 0000000..9314fde --- /dev/null +++ b/src/fileviewer.cpp @@ -0,0 +1,413 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "fileviewer.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "customcontrols.h" +#include "hidpi.h" +#include "utility.h" +#include "unicode_helpers.h" + +namespace +{ + +#ifdef __WXOSX__ +const int FRAME_STYLE = wxDEFAULT_FRAME_STYLE | wxFRAME_TOOL_WINDOW; +#else +const int FRAME_STYLE = wxDEFAULT_FRAME_STYLE; +#endif + +} // anonymous namespace + +FileViewer *FileViewer::ms_instance = nullptr; + +FileViewer *FileViewer::GetAndActivate() +{ + if (!ms_instance) + ms_instance = new FileViewer(nullptr); + ms_instance->Show(); + ms_instance->Raise(); + return ms_instance; +} + +FileViewer::FileViewer(wxWindow*) + : wxFrame(nullptr, wxID_ANY, _("Source file"), wxDefaultPosition, wxDefaultSize, FRAME_STYLE) +{ + SetName("fileviewer"); + + wxPanel *panel = new wxPanel(this, -1); + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + panel->SetSizer(sizer); +#ifdef __WXOSX__ + panel->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + wxSizer *barsizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(barsizer, wxSizerFlags().Expand().PXBorderAll()); + + barsizer->Add(new wxStaticText(panel, wxID_ANY, + _("Source file occurrence:")), + wxSizerFlags().Center().PXBorder(wxRIGHT)); + + m_file = new wxChoice(panel, wxID_ANY); + barsizer->Add(m_file, wxSizerFlags(1).Center()); + + m_openInEditor = new wxButton(panel, wxID_ANY, MSW_OR_OTHER(_("Open in editor"), _("Open in Editor"))); + barsizer->Add(m_openInEditor, wxSizerFlags().Center().Border(wxLEFT, PX(10))); + + m_text = new wxStyledTextCtrl(panel, wxID_ANY, + wxDefaultPosition, wxDefaultSize, + wxBORDER_THEME); + SetupTextCtrl(); + sizer->Add(m_text, 1, wxEXPAND); + + m_error = new wxStaticText(panel, wxID_ANY, ""); + m_error->SetForegroundColour(ExplanationLabel::GetTextColor()); + m_error->SetFont(m_error->GetFont().Larger().Larger()); + sizer->Add(m_error, wxSizerFlags(1).Center().Border(wxTOP|wxBOTTOM, PX(80))); + + RestoreWindowState(this, wxSize(PX(600), PX(400))); + + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(panel, wxSizerFlags(1).Expand()); + SetSizer(topsizer); + + // avoid flicker with these initial settings: + m_file->Disable(); + sizer->Hide(m_error); + sizer->Hide(m_text); + + Layout(); + + m_file->Bind(wxEVT_CHOICE, &FileViewer::OnChoice, this); + m_openInEditor->Bind(wxEVT_BUTTON, &FileViewer::OnEditFile, this); + +#ifdef __WXOSX__ + wxAcceleratorEntry entries[] = { + { wxACCEL_CMD, 'W', wxID_CLOSE } + }; + wxAcceleratorTable accel(WXSIZEOF(entries), entries); + SetAcceleratorTable(accel); + + Bind(wxEVT_MENU, [=](wxCommandEvent&){ Destroy(); }, wxID_CLOSE); +#endif +} + + +FileViewer::~FileViewer() +{ + ms_instance = nullptr; + SaveWindowState(this); +} + + +void FileViewer::SetupTextCtrl() +{ + wxStyledTextCtrl& t = *m_text; + + wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + +#ifdef __WXGTK__ + font.SetFaceName("monospace"); +#else + static const char *s_monospaced_fonts[] = { +#ifdef __WXMSW__ + "Consolas", + "Lucida Console", +#endif +#ifdef __WXOSX__ + "Menlo", + "Monaco", +#endif + NULL + }; + + for ( const char **f = s_monospaced_fonts; *f; ++f ) + { + if ( wxFontEnumerator::IsValidFacename(*f) ) + { + font.SetFaceName(*f); + break; + } + } +#endif + + // style used: + wxString fontspec = wxString::Format("face:%s,size:%d", + font.GetFaceName().c_str(), + #ifdef __WXOSX__ + font.GetPointSize() - 1 + #else + font.GetPointSize() + #endif + ); + const wxString DEFAULT = fontspec + ",fore:black,back:white"; + const wxString STRING = fontspec + ",bold,fore:#882d21"; + const wxString COMMENT = fontspec + ",fore:#487e18"; + const wxString KEYWORD = fontspec + ",fore:#2f00f9"; + const wxString LINENUMBERS = fontspec + ",fore:#5d8bab"; + + + // current line marker + t.MarkerDefine(1, wxSTC_MARK_BACKGROUND, wxNullColour, wxColour(255,255,0)); + + // set fonts + t.StyleSetSpec(wxSTC_STYLE_DEFAULT, DEFAULT); + t.StyleSetSpec(wxSTC_STYLE_LINENUMBER, LINENUMBERS); + + // line numbers margin size: + t.SetMarginType(0, wxSTC_MARGIN_NUMBER); + t.SetMarginWidth(0, + t.TextWidth(wxSTC_STYLE_LINENUMBER, "9999 ")); + t.SetMarginWidth(1, 0); + t.SetMarginWidth(2, 3); + + // set syntax highlighting styling + t.StyleSetSpec(wxSTC_C_STRING, STRING); + t.StyleSetSpec(wxSTC_C_COMMENT, COMMENT); + t.StyleSetSpec(wxSTC_C_COMMENTLINE, COMMENT); + + t.StyleSetSpec(wxSTC_P_STRING, STRING); + t.StyleSetSpec(wxSTC_P_COMMENTLINE, COMMENT); + t.StyleSetSpec(wxSTC_P_COMMENTBLOCK, COMMENT); + + t.StyleSetSpec(wxSTC_LUA_STRING, STRING); + t.StyleSetSpec(wxSTC_LUA_LITERALSTRING, STRING); + t.StyleSetSpec(wxSTC_LUA_COMMENT, COMMENT); + t.StyleSetSpec(wxSTC_LUA_COMMENTLINE, COMMENT); + + t.StyleSetSpec(wxSTC_HPHP_HSTRING, STRING); + t.StyleSetSpec(wxSTC_HPHP_SIMPLESTRING, STRING); + t.StyleSetSpec(wxSTC_HPHP_COMMENT, COMMENT); + t.StyleSetSpec(wxSTC_HPHP_COMMENTLINE, COMMENT); + + t.StyleSetSpec(wxSTC_TCL_COMMENT, COMMENT); + t.StyleSetSpec(wxSTC_TCL_COMMENTLINE, COMMENT); + t.StyleSetSpec(wxSTC_TCL_BLOCK_COMMENT, COMMENT); + + t.StyleSetSpec(wxSTC_PAS_STRING, STRING); + t.StyleSetSpec(wxSTC_PAS_COMMENT, COMMENT); + t.StyleSetSpec(wxSTC_PAS_COMMENT2, COMMENT); + t.StyleSetSpec(wxSTC_PAS_COMMENTLINE, COMMENT); +} + + +int FileViewer::GetLexer(const wxString& ext) +{ + struct LexerInfo + { + const char *ext; + int lexer; + }; + + static const LexerInfo s_lexer[] = { + { "c", wxSTC_LEX_CPP }, + { "cpp", wxSTC_LEX_CPP }, + { "cc", wxSTC_LEX_CPP }, + { "cxx", wxSTC_LEX_CPP }, + { "h", wxSTC_LEX_CPP }, + { "hxx", wxSTC_LEX_CPP }, + { "hpp", wxSTC_LEX_CPP }, + { "py", wxSTC_LEX_PYTHON }, + { "htm", wxSTC_LEX_HTML }, + { "html", wxSTC_LEX_HTML }, + { "php", wxSTC_LEX_PHPSCRIPT }, + { "xml", wxSTC_LEX_XML }, + { "pas", wxSTC_LEX_PASCAL }, + { NULL, -1 } + }; + + wxString e = ext.Lower(); + + for ( const LexerInfo *i = s_lexer; i->ext; ++i ) + { + if ( e == wxString::FromAscii(i->ext) ) + return i->lexer; + } + + return wxSTC_LEX_NULL; +} + + +wxFileName FileViewer::GetFilename(wxString ref) const +{ + if ( ref.length() >= 3 && + ref[1] == _T(':') && + (ref[2] == _T('\\') || ref[2] == _T('/')) ) + { + // This is an absolute Windows path (c:\foo... or c:/foo...); fix + // the latter case. + ref.Replace("/", "\\"); + } + + wxPathFormat pathfmt = ref.Contains(_T('\\')) ? wxPATH_WIN : wxPATH_UNIX; + wxFileName filename(ref.BeforeLast(_T(':')), pathfmt); + + if ( filename.IsRelative() ) + { + wxFileName relative(filename); + wxString basePath(m_basePath); + + // Sometimes, the path in source reference is not relative to the PO + // file's location, but is relative to e.g. the root directory. See + // https://code.djangoproject.com/ticket/13936 for exhaustive + // discussion with plenty of examples. + // + // Deal with this by trying parent directories of m_basePath too. So if + // a file named project/locales/cs/foo.po has a reference to src/main.c, + // try not only project/locales/cs/src/main.c, but also + // project/locales/src/main.c and project/src/main.c etc. + while ( !basePath.empty() ) + { + filename = relative; + filename.MakeAbsolute(basePath); + if ( filename.FileExists() ) + { + return filename; // good, found the file + } + else + { + // remove the last path component + size_t last = basePath.find_last_of("\\/"); + if ( last == wxString::npos ) + break; + else + basePath.erase(last); + } + } + } + + return wxFileName(); // invalid +} + + +void FileViewer::ShowReferences(CatalogPtr catalog, CatalogItemPtr item, int defaultReference) +{ + m_basePath = catalog->GetSourcesBasePath(); + if (m_basePath.empty()) + m_basePath = wxPathOnly(catalog->GetFileName()); + + m_references = item->GetReferences(); + + m_file->Clear(); + m_file->Enable(m_references.size() > 1); + + if (m_references.empty()) + { + ShowError(_("No references for the selected item.")); + } + else + { + for (auto& r: m_references) + m_file->Append(bidi::platform_mark_direction(r)); + m_file->SetSelection(defaultReference); + SelectReference(m_references[defaultReference]); + } +} + +void FileViewer::SelectReference(const wxString& ref) +{ + const wxFileName filename = GetFilename(ref); + if (!filename.IsOk()) + { + ShowError(wxString::Format(_("Error opening file %s!"), filename.GetFullPath())); + m_openInEditor->Disable(); + return; + } + + wxFFile file; + wxString data; + + if ( !filename.IsFileReadable() || + !file.Open(filename.GetFullPath()) || + !file.ReadAll(&data, wxConvAuto()) ) + { + ShowError(wxString::Format(_("Error opening file %s!"), filename.GetFullPath())); + m_openInEditor->Disable(); + return; + } + + m_openInEditor->Enable(); + + m_error->GetContainingSizer()->Hide(m_error); + m_text->GetContainingSizer()->Show(m_text); + Layout(); + + // support GNOME's xml2po's extension to references in the form of + // filename:line(xml_node): + wxString linenumStr = ref.AfterLast(_T(':')).BeforeFirst(_T('(')); + + long linenum; + if (!linenumStr.ToLong(&linenum)) + linenum = 0; + + m_text->SetReadOnly(false); + m_text->SetValue(data); + m_text->SetReadOnly(true); + + m_text->MarkerDeleteAll(1); + m_text->MarkerAdd((int)linenum - 1, 1); + + // Center the highlighted line: + int lineHeight = m_text->TextHeight((int)linenum); + int linesInWnd = m_text->GetSize().y / lineHeight; + m_text->ScrollToLine(wxMax(0, (int)linenum - linesInWnd/2)); +} + +void FileViewer::ShowError(const wxString& msg) +{ + m_error->SetLabel(msg); + m_error->GetContainingSizer()->Show(m_error); + m_text->GetContainingSizer()->Hide(m_text); + Layout(); +} + + +void FileViewer::OnChoice(wxCommandEvent &event) +{ + SelectReference(m_references[event.GetSelection()]); +} + +void FileViewer::OnEditFile(wxCommandEvent&) +{ + wxFileName filename = GetFilename(bidi::strip_control_chars(m_file->GetStringSelection())); + if (filename.IsOk()) + wxLaunchDefaultApplication(filename.GetFullPath()); +} diff --git a/src/fileviewer.h b/src/fileviewer.h new file mode 100644 index 0000000..bf61426 --- /dev/null +++ b/src/fileviewer.h @@ -0,0 +1,79 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _FILEVIEWER_H_ +#define _FILEVIEWER_H_ + +#include "catalog.h" + +#include + +class WXDLLIMPEXP_FWD_CORE wxButton; +class WXDLLIMPEXP_FWD_CORE wxChoice; +class WXDLLIMPEXP_FWD_CORE wxStaticText; +class WXDLLIMPEXP_FWD_CORE wxFileName; +class WXDLLIMPEXP_FWD_STC wxStyledTextCtrl; + + +/** This class implements frame that shows part of file + surrounding specified line (40 lines in both directions). + */ +class FileViewer : public wxFrame +{ +protected: + FileViewer(wxWindow *parent); + ~FileViewer(); + +public: + static FileViewer *GetAndActivate(); + static FileViewer *GetIfExists() { return ms_instance; } + + /// Shows given reference, i.e. loads the file + void ShowReferences(CatalogPtr catalog, CatalogItemPtr item, int defaultReference = 0); + +private: + void SetupTextCtrl(); + int GetLexer(const wxString& extension); + wxFileName GetFilename(wxString ref) const; + + void SelectReference(const wxString& ref); + void ShowError(const wxString& msg); + +private: + wxString m_basePath; + wxArrayString m_references; + + wxChoice *m_file; + wxButton *m_openInEditor; + wxStyledTextCtrl *m_text; + wxStaticText *m_error; + + void OnChoice(wxCommandEvent &event); + void OnEditFile(wxCommandEvent &event); + + static FileViewer *ms_instance; +}; + +#endif // _FILEVIEWER_H_ diff --git a/src/findframe.cpp b/src/findframe.cpp new file mode 100644 index 0000000..a53e90a --- /dev/null +++ b/src/findframe.cpp @@ -0,0 +1,613 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __WXOSX__ +#include +#endif + +#ifdef __WXGTK__ +#include +#include +#endif + +#include "catalog.h" +#include "text_control.h" +#include "edframe.h" +#include "edlistctrl.h" +#include "findframe.h" +#include "hidpi.h" +#include "utility.h" + +namespace +{ + +// The word separators used when doing a "Whole words only" search +// FIXME-ICU: use ICU to separate words +const wxString SEPARATORS = wxT(" \t\r\n\\/:;.,?!\"'_|-+=(){}[]<>&#@"); + +enum +{ + Mode_Find, + Mode_Replace +}; + +const int FRAME_STYLE = (wxDEFAULT_FRAME_STYLE | wxFRAME_TOOL_WINDOW | wxTAB_TRAVERSAL | wxFRAME_FLOAT_ON_PARENT) + & ~(wxRESIZE_BORDER | wxMAXIMIZE_BOX); + +} // anonymous namespace + + +wxString FindFrame::ms_text; + +FindFrame::FindFrame(PoeditFrame *owner, + PoeditListCtrl *list, + const CatalogPtr& c, + CustomizedTextCtrl *textCtrlOrig, + CustomizedTextCtrl *textCtrlTrans, + wxNotebook *pluralNotebook) + : wxFrame(owner, wxID_ANY, _("Find"), wxDefaultPosition, wxDefaultSize, FRAME_STYLE), + m_owner(owner), + m_listCtrl(list), + m_catalog(c), + m_position(-1), + m_textCtrlOrig(textCtrlOrig), + m_textCtrlTrans(textCtrlTrans), + m_pluralNotebook(pluralNotebook) +{ + auto panel = new wxPanel(this, wxID_ANY); + wxBoxSizer *panelsizer = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + panelsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + + auto entrySizer = new wxFlexGridSizer(2, wxSize(MSW_OR_OTHER(PX(5), PX(10)), PX(5))); + m_mode = new wxChoice(panel, wxID_ANY); +#ifdef __WXOSX__ + [(NSPopUpButton*)m_mode->GetHandle() setBordered:NO]; +#endif + m_mode->Append(_("Find")); + m_mode->Append(_("Replace")); + m_mode->SetSelection(Mode_Find); + + m_searchField = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(PX(400), -1)); + m_replaceField = new wxTextCtrl(panel, wxID_ANY); + + entrySizer->Add(m_mode); + entrySizer->Add(m_searchField, wxSizerFlags(1).Expand()); + entrySizer->AddSpacer(1); + entrySizer->Add(m_replaceField, wxSizerFlags(1).Expand()); + sizer->Add(entrySizer, wxSizerFlags().Expand().PXBorderAll()); + +#ifdef __WXMSW__ + #define collPane panel +#else + // TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) + auto coll = new wxCollapsiblePane(panel, wxID_ANY, _("Options")); + auto collPane = coll->GetPane(); +#endif + + m_ignoreCase = new wxCheckBox(collPane, wxID_ANY, _("Ignore case")); + m_wrapAround = new wxCheckBox(collPane, wxID_ANY, _("Wrap around")); + m_wholeWords = new wxCheckBox(collPane, wxID_ANY, _("Whole words only")); + m_findInOrig = new wxCheckBox(collPane, wxID_ANY, _("Find in source texts")); + m_findInTrans = new wxCheckBox(collPane, wxID_ANY, _("Find in translations")); + m_findInComments = new wxCheckBox(collPane, wxID_ANY, _("Find in comments")); + + wxBoxSizer *options = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *optionsL = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *optionsR = new wxBoxSizer(wxVERTICAL); + options->Add(optionsL, wxSizerFlags(1).Expand().PXBorder(wxRIGHT)); + options->Add(optionsR, wxSizerFlags(1).Expand()); + optionsL->Add(m_ignoreCase, wxSizerFlags().Expand()); + optionsL->Add(m_wrapAround, wxSizerFlags().Expand().Border(wxTOP, PX(2))); + optionsL->Add(m_wholeWords, wxSizerFlags().Expand().Border(wxTOP, PX(2))); + optionsR->Add(m_findInOrig, wxSizerFlags().Expand().Border(wxTOP, PX(2))); + optionsR->Add(m_findInTrans, wxSizerFlags().Expand().Border(wxTOP, PX(2))); + optionsR->Add(m_findInComments, wxSizerFlags().Expand().Border(wxTOP, PX(2))); + +#ifdef __WXMSW__ + sizer->Add(options, wxSizerFlags().Expand().PXBorderAll()); +#else + collPane->SetSizer(options); + sizer->Add(coll, wxSizerFlags().Expand().PXBorderAll()); +#endif + + m_btnClose = new wxButton(panel, wxID_CLOSE, _("Close")); + m_btnReplaceAll = new wxButton(panel, wxID_ANY, MSW_OR_OTHER(_("Replace all"), _("Replace All"))); + m_btnReplace = new wxButton(panel, wxID_ANY, _("Replace")); + m_btnPrev = new wxButton(panel, wxID_ANY, _("< &Previous")); + m_btnNext = new wxButton(panel, wxID_ANY, _("&Next >")); + m_btnNext->SetDefault(); + + wxBoxSizer *buttons = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(buttons, wxSizerFlags().Expand().PXBorderAll()); + buttons->Add(m_btnClose, wxSizerFlags().PXBorder(wxRIGHT)); + buttons->AddStretchSpacer(); + buttons->Add(m_btnReplaceAll, wxSizerFlags().PXBorder(wxRIGHT)); + buttons->Add(m_btnReplace, wxSizerFlags().PXBorder(wxRIGHT)); + buttons->Add(m_btnPrev, wxSizerFlags().PXBorder(wxRIGHT)); + buttons->Add(m_btnNext, wxSizerFlags()); + + panel->SetSizer(panelsizer); + auto topsizer = new wxBoxSizer(wxHORIZONTAL); + topsizer->Add(panel, wxSizerFlags(1).Expand()); + SetSizerAndFit(topsizer); + + RestoreWindowState(this, wxDefaultSize, WinState_Pos); + + if ( !ms_text.empty() ) + { + m_searchField->SetValue(ms_text); + m_searchField->SelectAll(); + } + + Reset(c); + + m_findInOrig->SetValue(wxConfig::Get()->ReadBool("find_in_orig", true)); + m_findInTrans->SetValue(wxConfig::Get()->ReadBool("find_in_trans", true)); + m_findInComments->SetValue(wxConfig::Get()->ReadBool("find_in_comments", true)); + m_ignoreCase->SetValue(!wxConfig::Get()->ReadBool("find_case_sensitive", false)); + m_wrapAround->SetValue(wxConfig::Get()->ReadBool("find_wrap_around", true)); + m_wholeWords->SetValue(wxConfig::Get()->ReadBool("whole_words", false)); + + wxAcceleratorEntry entries[] = { +#ifndef __WXGTK__ + { wxACCEL_SHIFT, WXK_RETURN, m_btnPrev->GetId() }, +#endif +#ifdef __WXOSX__ + { wxACCEL_CMD, 'W', wxID_CLOSE }, +#endif + { wxACCEL_NORMAL, WXK_ESCAPE, wxID_CLOSE } + }; + wxAcceleratorTable accel(WXSIZEOF(entries), entries); + SetAcceleratorTable(accel); + + m_searchField->Bind(wxEVT_TEXT, &FindFrame::OnTextChange, this); + m_btnPrev->Bind(wxEVT_BUTTON, &FindFrame::OnPrev, this); + m_btnNext->Bind(wxEVT_BUTTON, &FindFrame::OnNext, this); + Bind(wxEVT_BUTTON, &FindFrame::OnClose, this, wxID_CLOSE); + Bind(wxEVT_MENU, &FindFrame::OnClose, this, wxID_CLOSE); + Bind(wxEVT_CHECKBOX, &FindFrame::OnCheckbox, this); + + // Set Shift+Return accelerator natively so that the button is animated. + // (Can't be done on Windows where wxAcceleratorEntry above is used.) +#if defined(__WXGTK__) + GtkAccelGroup *accelGroup = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(GetHandle()), accelGroup); + gtk_widget_add_accelerator(m_btnPrev->GetHandle(), "activate", accelGroup, GDK_KEY_Return, GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); +#elif defined(__WXOSX__) + // wx's code interferes with normal processing of Shift-Return and + // setKeyEquivalent: @"\r" with setKeyEquivalentModifierMask: NSShiftKeyMask + // wouldn't work. Emulate it in custom code instead, by handling the + // event originating from the button and from the accelerator table above + // differently. More than a bit of a hack, but it works. + NSButton *osxPrev = (NSButton*)m_btnPrev->GetHandle(); + Bind(wxEVT_MENU, [=](wxCommandEvent&){ [osxPrev performClick:nil]; }, m_btnPrev->GetId()); +#endif + + OnModeChanged(); + m_mode->Bind(wxEVT_CHOICE, [=](wxCommandEvent&){ OnModeChanged(); }); + + m_btnReplace->Bind(wxEVT_BUTTON, &FindFrame::OnReplace, this); + m_btnReplaceAll->Bind(wxEVT_BUTTON, &FindFrame::OnReplaceAll, this); + m_btnReplace->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ e.Enable((bool)m_lastItem); }); + m_btnReplaceAll->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ e.Enable(!ms_text.empty()); }); + + // SetHint() needs to be called *after* binding any event handlers, for + // compatibility with its generic implementation: + m_searchField->SetHint(_("String to find")); + m_replaceField->SetHint(_("Replacement string")); + + // Create hidden, will be shown after setting it up + Show(false); +} + + +FindFrame::~FindFrame() +{ + SaveWindowState(this, WinState_Pos); +} + + +void FindFrame::Reset(const CatalogPtr& c) +{ + m_catalog = c; + m_position = -1; + m_lastItem.reset(); + + UpdateButtons(); +} + +void FindFrame::UpdateButtons() +{ + m_btnPrev->Enable(!ms_text.empty()); + m_btnNext->Enable(!ms_text.empty()); +} + + +void FindFrame::ShowForFind() +{ + DoShowFor(Mode_Find); +} + +void FindFrame::ShowForReplace() +{ + DoShowFor(Mode_Replace); +} + +void FindFrame::DoShowFor(int mode) +{ + m_position = (int)m_listCtrl->GetFirstSelected(); + + m_mode->SetSelection(mode); + OnModeChanged(); + + Show(true); + Raise(); + + m_searchField->SetFocus(); + m_searchField->SelectAll(); +} + + +void FindFrame::OnClose(wxCommandEvent&) +{ + Destroy(); +} + + +void FindFrame::OnModeChanged() +{ + bool isReplace = m_mode->GetSelection() == Mode_Replace; + + SetTitle(isReplace ? _("Replace") : _("Find")); + + m_btnReplace->Show(isReplace); + m_btnReplaceAll->Show(isReplace); + m_replaceField->GetContainingSizer()->Show(m_replaceField, isReplace); + + m_findInOrig->Enable(!isReplace); + m_findInTrans->Enable(!isReplace); + m_findInComments->Enable(!isReplace); + m_ignoreCase->Enable(!isReplace); + + Layout(); + GetSizer()->SetSizeHints(this); +} + + +void FindFrame::OnTextChange(wxCommandEvent& e) +{ + ms_text = m_searchField->GetValue(); + UpdateButtons(); + e.Skip(); +} + + +void FindFrame::OnCheckbox(wxCommandEvent&) +{ + Reset(m_catalog); + wxConfig::Get()->Write("find_in_orig", m_findInOrig->GetValue()); + wxConfig::Get()->Write("find_in_trans", m_findInTrans->GetValue()); + wxConfig::Get()->Write("find_in_comments", m_findInComments->GetValue()); + wxConfig::Get()->Write("find_case_sensitive", !m_ignoreCase->GetValue()); + wxConfig::Get()->Write("find_wrap_around", m_wrapAround->GetValue()); + wxConfig::Get()->Write("whole_words", m_wholeWords->GetValue()); +} + + +void FindFrame::OnPrev(wxCommandEvent&) +{ + FindPrev(); +} + +void FindFrame::FindPrev() +{ + if (!DoFind(-1)) + m_btnPrev->Enable(false); + else + m_btnNext->Enable(true); +} + + +void FindFrame::OnNext(wxCommandEvent&) +{ + FindNext(); +} + +void FindFrame::FindNext() +{ + if (!DoFind(+1)) + m_btnNext->Enable(false); + else + m_btnPrev->Enable(true); +} + + +namespace +{ + +template +bool FindTextInStringAndDo(S& str, const wxString& text, bool wholeWords, F&& handler) +{ + auto textLen = text.Length(); + + bool found = false; + size_t start = 0; + while (start != wxString::npos) + { + auto index = str.find(text, start); + if (index == wxString::npos) + break; + + if (wholeWords) + { + bool result = true; + if (index >0) + result = result && SEPARATORS.Contains(str[index-1]); + if (index+textLen < str.Length()) + result = result && SEPARATORS.Contains(str[index+textLen]); + + if (!result) + { + start = index + textLen; + continue; + } + } + + found = true; + start = handler(str, index, textLen); + } + + return found; +} + +bool IsTextInString(wxString str, const wxString& text, + bool ignoreCase, bool wholeWords, bool ignoreAmp, bool ignoreUnderscore) +{ + if (ignoreCase) + str.MakeLower(); + if (ignoreAmp) + str.Replace("&", ""); + if (ignoreUnderscore) + str.Replace("_", ""); + + return FindTextInStringAndDo(str, text, wholeWords, + [=](const wxString&,size_t,size_t){ return wxString::npos;/*just 1 hit*/ }); +} + +size_t IsTextInStrings(const wxArrayString& strs, const wxString& text, + bool ignoreCase, bool wholeWords, bool ignoreAmp, bool ignoreUnderscore) +{ + // loop through all strings and search for the substring in them + for (size_t i = 0; i < strs.GetCount(); i++) + { + if (IsTextInString(strs[i], text, ignoreCase, wholeWords, ignoreAmp, ignoreUnderscore)) + return i; + } + + return -1; +} + +bool ReplaceTextInString(wxString& str, const wxString& text, bool wholeWords, const wxString& replacement) +{ + return FindTextInStringAndDo(str, text, wholeWords, + [=](wxString& s, size_t pos, size_t len){ + s.replace(pos, len, replacement); + return pos + replacement.length(); + }); +} + +enum FoundState +{ + Found_Not = 0, + Found_InOrig, + Found_InTrans, + Found_InComments, + Found_InExtractedComments +}; + +} // anonymous space + +bool FindFrame::DoFind(int dir) +{ + wxASSERT( dir == +1 || dir == -1 ); + + if (!m_listCtrl) + return false; + + int mode = m_mode->GetSelection(); + int cnt = m_listCtrl->GetItemCount(); + bool inTrans = m_findInTrans->GetValue() && (m_catalog->HasCapability(Catalog::Cap::Translations)); + bool inSource = (mode == Mode_Find) && m_findInOrig->GetValue(); + bool inComments = (mode == Mode_Find) && m_findInComments->GetValue(); + bool ignoreCase = (mode == Mode_Find) && m_ignoreCase->GetValue(); + bool wholeWords = m_wholeWords->GetValue(); + bool wrapAround = m_wrapAround->GetValue(); + int posOrig = m_position; + size_t trans; + + FoundState found = Found_Not; + CatalogItemPtr lastItem; + + wxString textc; + wxString text(ms_text); + + if (ignoreCase) + text.MakeLower(); + + // Only ignore mnemonics when searching if the text being searched for + // doesn't contain them. That's a reasonable heuristics: most of the time, + // ignoring them is the right thing to do and provides better results. But + // sometimes, people want to search for them. + const bool ignoreAmp = (mode == Mode_Find) && (text.Find(_T('&')) == wxNOT_FOUND); + const bool ignoreUnderscore = (mode == Mode_Find) && (text.Find(_T('_')) == wxNOT_FOUND); + + int oldPosition = m_position; + m_position = oldPosition + dir; + for (int tested = 0; tested < cnt; ++tested, m_position += dir) + { + if (m_position < 0) + { + if (wrapAround) + m_position += cnt; + else + break; + } + else if (m_position >= cnt) + { + if (wrapAround) + m_position -= cnt; + else + break; + } + + auto dt = lastItem = (*m_catalog)[m_listCtrl->ListIndexToCatalog(m_position)]; + + if (inTrans) + { + trans = IsTextInStrings(dt->GetTranslations(), text, ignoreCase, wholeWords, ignoreAmp, ignoreUnderscore); + if (trans != (size_t)-1) + { + found = Found_InTrans; + break; + } + } + if (inSource) + { + if (IsTextInString(dt->GetString(), text, ignoreCase, wholeWords, ignoreAmp, ignoreUnderscore)) + { + found = Found_InOrig; + break; + } + } + if (inComments) + { + if (IsTextInString(dt->GetComment(), text, ignoreCase, wholeWords, false, false)) + { + found = Found_InComments; + break; + } + if (IsTextInStrings(dt->GetExtractedComments(), text, ignoreCase, wholeWords, false, false) != (size_t)-1) + { + found = Found_InExtractedComments; + break; + } + } + } + + if (found != Found_Not) + { + m_lastItem = lastItem; + + m_listCtrl->EnsureVisible(m_position); + m_listCtrl->SelectAndFocus(m_position); + + // find the text on the control and select it: + + CustomizedTextCtrl* txt = nullptr; + switch (found) + { + case Found_InOrig: + txt = m_textCtrlOrig; + break; + case Found_InTrans: + if (lastItem->GetNumberOfTranslations() == 1) + { + txt = m_textCtrlTrans; + } + else + { + m_pluralNotebook->SetSelection(trans); + txt = (CustomizedTextCtrl*)m_pluralNotebook->GetCurrentPage(); + } + break; + case Found_InComments: + case Found_InExtractedComments: + case Found_Not: + break; + } + + if (txt) + { + textc = txt->GetValue(); + if (ignoreCase) + textc.MakeLower(); + int pos = textc.Find(text); + if (pos != wxNOT_FOUND) + txt->ShowFindIndicator(pos, (int)text.length()); + } + + return true; + } + + m_position = posOrig; + return false; +} + +bool FindFrame::DoReplaceInItem(CatalogItemPtr item) +{ + bool wholeWords = m_wholeWords->GetValue(); + auto search = m_searchField->GetValue(); + auto replace = m_replaceField->GetValue(); + + bool replaced = false; + for (auto& t: item->GetTranslations()) + { + if (ReplaceTextInString(t, search, wholeWords, replace)) + replaced = true; + } + + if (replaced && item == m_owner->GetCurrentItem()) + m_owner->UpdateToTextCtrl(PoeditFrame::UndoableEdit); + + return replaced; +} + +void FindFrame::OnReplace(wxCommandEvent&) +{ + if (!m_lastItem) + return; + DoReplaceInItem(m_lastItem); + m_listCtrl->Refresh(); +} + +void FindFrame::OnReplaceAll(wxCommandEvent&) +{ + for (auto& item: m_catalog->items()) + DoReplaceInItem(item); + m_listCtrl->Refresh(); +} diff --git a/src/findframe.h b/src/findframe.h new file mode 100644 index 0000000..d2c7c53 --- /dev/null +++ b/src/findframe.h @@ -0,0 +1,110 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _FINDFRAME_H_ +#define _FINDFRAME_H_ + +#include "edlistctrl.h" + +#include +#include + +class WXDLLIMPEXP_FWD_CORE wxButton; +class WXDLLIMPEXP_FWD_CORE wxCheckBox; +class WXDLLIMPEXP_FWD_CORE wxChoice; +class WXDLLIMPEXP_FWD_CORE wxTextCtrl; + +class Catalog; +class CustomizedTextCtrl; +class PoeditFrame; + +/** FindFrame is small dialog frame that contains controls for searching + in content of EditorFrame's wxListCtrl object and associated Catalog + instance. + + This class assumes that list control's user data contains index + into the catalog. + */ +class FindFrame : public wxFrame +{ + public: + /** Ctor. + \param owner Parent frame, FindFrame will float on it + \param list List control to search in + \param catalog Catalog to search in + */ + FindFrame(PoeditFrame *owner, PoeditListCtrl *list, const CatalogPtr& c, + CustomizedTextCtrl *textCtrlOrig, CustomizedTextCtrl *textCtrlTrans, + wxNotebook *pluralNotebook); + ~FindFrame(); + + /** Resets the search to starting position and changes + the catalog in use. Called by EditorFrame when the user + reloads catalog. + */ + void Reset(const CatalogPtr& c); + + void FindPrev(); + void FindNext(); + + void ShowForFind(); + void ShowForReplace(); + + bool HasText() const { return !ms_text.empty(); } + + private: + void UpdateButtons(); + void DoShowFor(int mode); + void OnClose(wxCommandEvent &event); + void OnModeChanged(); + void OnPrev(wxCommandEvent &event); + void OnNext(wxCommandEvent &event); + void OnTextChange(wxCommandEvent &event); + void OnCheckbox(wxCommandEvent &event); + void OnReplace(wxCommandEvent &event); + void OnReplaceAll(wxCommandEvent &event); + bool DoFind(int dir); + bool DoReplaceInItem(CatalogItemPtr item); + + PoeditFrame *m_owner; + wxChoice *m_mode; + wxTextCtrl *m_searchField, *m_replaceField; + wxCheckBox *m_ignoreCase, *m_wrapAround, *m_wholeWords, + *m_findInOrig, *m_findInTrans, *m_findInComments; + + wxWeakRef m_listCtrl; + CatalogPtr m_catalog; + int m_position; + CatalogItemPtr m_lastItem; + wxButton *m_btnClose, *m_btnReplaceAll, *m_btnReplace, *m_btnPrev, *m_btnNext; + CustomizedTextCtrl *m_textCtrlOrig, *m_textCtrlTrans; + wxNotebook *m_pluralNotebook; + + // NB: this is static so that last search term is remembered + static wxString ms_text; +}; + + +#endif // _FINDFRAME_H_ diff --git a/src/gexecute.cpp b/src/gexecute.cpp new file mode 100644 index 0000000..6ce1702 --- /dev/null +++ b/src/gexecute.cpp @@ -0,0 +1,230 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gexecute.h" +#include "errors.h" + +// GCC's libstdc++ didn't have functional std::regex implementation until 4.9 +#if (defined(__GNUC__) && !defined(__clang__) && !wxCHECK_GCC_VERSION(4,9)) + #include + using boost::wregex; + using boost::wsmatch; + using boost::regex_match; +#else + #include + using std::wregex; + using std::wsmatch; + using std::regex_match; +#endif + +namespace +{ + +#ifdef __WXOSX__ +wxString GetGettextPluginPath() +{ + return wxStandardPaths::Get().GetPluginsDir() + "/GettextTools.bundle"; +} +#endif // __WXOSX__ + +#if defined(__WXOSX__) || defined(__WXMSW__) + +inline wxString GetAuxBinariesDir() +{ + return GetGettextPackagePath() + "/bin"; +} + +wxString GetPathToAuxBinary(const wxString& program) +{ + wxFileName path; + path.SetPath(GetAuxBinariesDir()); + path.SetName(program); +#ifdef __WXMSW__ + path.SetExt("exe"); +#endif + if ( path.IsFileExecutable() ) + { + return wxString::Format(_T("\"%s\""), path.GetFullPath().c_str()); + } + else + { + wxLogTrace("poedit.execute", + "%s doesn't exist, falling back to %s", + path.GetFullPath().c_str(), + program.c_str()); + return program; + } +} +#endif // __WXOSX__ || __WXMSW__ + + +bool ReadOutput(wxInputStream& s, wxArrayString& out) +{ + // the stream could be already at EOF or in wxSTREAM_BROKEN_PIPE state + s.Reset(); + wxTextInputStream tis(s, " ", wxConvUTF8); + + while (true) + { + wxString line = tis.ReadLine(); + if ( !line.empty() ) + out.push_back(line); + if (s.Eof()) + break; + if ( !s ) + return false; + } + + return true; +} + +long DoExecuteGettext(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["GETTEXTIOENCODING"] = "UTF-8"; + + wxString lang = wxTranslations::Get()->GetBestTranslation("gettext-tools"); + if ( !lang.empty() ) + env.env["LANG"] = lang; +#endif // __WXOSX__ || __WXMSW__ + +#ifdef __WXOSX__ + // Hack alert! On Windows, relocation works, but building with it is too + // messy/broken on OS X, so just use some custom hacks instead: + auto sharedir = GetGettextPackagePath() + "/share"; + env.env["POEDIT_LOCALEDIR"] = sharedir + "/locale"; + env.env["GETTEXTDATADIR"] = sharedir + "/gettext"; +#endif + + 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); + + wxInputStream *std_err = process->GetErrorStream(); + if ( std_err && !ReadOutput(*std_err, gstderr) ) + retcode = -1; + + if ( retcode == -1 ) + throw Exception(wxString::Format(_("Cannot execute program: %s"), cmdline.c_str())); + + return retcode; +} + +} // anonymous namespace + + +bool ExecuteGettext(const wxString& cmdline) +{ + wxArrayString gstderr; + long retcode = DoExecuteGettext(cmdline, gstderr); + + for ( size_t i = 0; i < gstderr.size(); i++ ) + { + if ( gstderr[i].empty() ) + continue; + wxLogError("%s", gstderr[i].c_str()); + } + + return retcode == 0; +} + + +bool ExecuteGettextAndParseOutput(const wxString& cmdline, GettextErrors& errors) +{ + wxArrayString gstderr; + long retcode = DoExecuteGettext(cmdline, gstderr); + + static const wregex RE_ERROR(L".*\\.po:([0-9]+)(:[0-9]+)?: (.*)"); + + for (const auto& ewx: gstderr) + { + const auto e = ewx.ToStdWstring(); + wxLogTrace("poedit", " stderr: %s", e.c_str()); + if ( e.empty() ) + continue; + + GettextError rec; + + wsmatch match; + if (regex_match(e, match, RE_ERROR)) + { + rec.line = std::stoi(match.str(1)); + rec.text = match.str(3); + errors.push_back(rec); + wxLogTrace("poedit.execute", + _T(" => parsed error = \"%s\" at %d"), + rec.text.c_str(), rec.line); + } + else + { + wxLogTrace("poedit.execute", " (unrecognized line!)"); + // FIXME: handle the rest of output gracefully too + } + } + + return retcode == 0; +} + + +wxString QuoteCmdlineArg(const wxString& s) +{ + wxString s2(s); +#ifdef __UNIX__ + s2.Replace("\"", "\\\""); +#endif + return "\"" + s2 + "\""; +} + + +#if defined(__WXOSX__) || defined(__WXMSW__) +wxString GetGettextPackagePath() +{ +#if defined(__WXOSX__) + return GetGettextPluginPath() + "/Contents/MacOS"; +#elif defined(__WXMSW__) + return wxStandardPaths::Get().GetDataDir() + wxFILE_SEP_PATH + "GettextTools"; +#endif +} +#endif // __WXOSX__ || __WXMSW__ + diff --git a/src/gexecute.h b/src/gexecute.h new file mode 100644 index 0000000..623d2a1 --- /dev/null +++ b/src/gexecute.h @@ -0,0 +1,56 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _GEXECUTE_H_ +#define _GEXECUTE_H_ + +#include +#include + + +struct GettextError +{ + int line; + wxString text; +}; + +typedef std::vector GettextErrors; + + +/** Executes command. Writes stderr output to \a stderrOutput if not NULL, + and logs it with wxLogError otherwise. + \return true if program exited with exit code 0, false otherwise. + */ +extern bool ExecuteGettext(const wxString& cmdline); + +/// Like ExecuteGettext(), but stores error output parsed into per-item entries. +extern bool ExecuteGettextAndParseOutput(const wxString& cmdline, + GettextErrors& errors); + +extern wxString QuoteCmdlineArg(const wxString& s); + +extern wxString GetGettextPackagePath(); + +#endif // _GEXECUTE_H_ diff --git a/src/hidpi.cpp b/src/hidpi.cpp new file mode 100644 index 0000000..b743867 --- /dev/null +++ b/src/hidpi.cpp @@ -0,0 +1,105 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "hidpi.h" + +#include +#include +#include + + +#ifdef NEEDS_MANUAL_HIDPI + +double g_pxScalingFactor = 1.0; + +void InitHiDPIHandling() +{ + wxSize dpi = wxScreenDC().GetPPI(); + g_pxScalingFactor = dpi.y / 96.0; +} + +namespace +{ +void LoadPNGImage(wxImage& img, const wxString& filename) +{ + img.LoadFile(filename, wxBITMAP_TYPE_PNG); + // wxImage doesn't load alpha from PNG if it could be expressed as a mask. + // Too bad this breaks a) scaling and b) wxToolbar's disabled bitmaps. + // Beat some sense into it: + if (img.IsOk() && img.HasMask()) + { + img.InitAlpha(); + } +} + +} // anonymous namespace + +#endif // NEEDS_MANUAL_HIDPI + + +wxBitmap LoadScaledBitmap(const wxString& name, bool mirror) +{ + const wxString filename(name + ".png"); + if (!wxFileExists(filename)) + return wxNullBitmap; + +#ifdef NEEDS_MANUAL_HIDPI + if (HiDPIScalingFactor() > 1.0) + { + wxImage img; + double imgScale = HiDPIScalingFactor(); + const wxString filename_2x(name + "@2x.png"); + if (wxFileExists(filename_2x)) + { + LoadPNGImage(img, filename_2x); + if (HiDPIScalingFactor() == 2.0) + return wxBitmap(img); + else + imgScale /= 2.0; + } + else + { + LoadPNGImage(img, filename); + } + + wxImageResizeQuality quality; + if (imgScale == 2.0) + quality = wxIMAGE_QUALITY_NEAREST; + else if (imgScale == 1.5) + quality = wxIMAGE_QUALITY_BILINEAR; + else + quality = wxIMAGE_QUALITY_BICUBIC; + img.Rescale(img.GetWidth() * imgScale, img.GetHeight() * imgScale, quality); + return wxBitmap(img); + } + // else: load normally +#endif + + auto img = wxImage(filename, wxBITMAP_TYPE_PNG); + if (mirror) + return wxBitmap(img.Mirror()); + else + return wxBitmap(img); +} diff --git a/src/hidpi.h b/src/hidpi.h new file mode 100644 index 0000000..e4ce39c --- /dev/null +++ b/src/hidpi.h @@ -0,0 +1,85 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_hidpi_h +#define Poedit_hidpi_h + +#include +class WXDLLIMPEXP_FWD_BASE wxString; +class WXDLLIMPEXP_FWD_CORE wxBitmap; + +#ifdef __WXMSW__ + #define NEEDS_MANUAL_HIDPI 1 +#endif + +#ifdef NEEDS_MANUAL_HIDPI + +// Scaling factor against "normal" DPI (2.0 would be OS X's "Retina" scaling) +extern double g_pxScalingFactor; + +/// Returns current scaling factor. +inline double HiDPIScalingFactor() { return g_pxScalingFactor; } + +/** + Use this macro to wrap pixel dimensions to scale them accordingly to the + current DPI setting. + */ +#define PX(x) (int(((x) * g_pxScalingFactor) + 0.5)) +#define PXDefaultBorder PX(wxSizerFlags::GetDefaultBorder()) +#define PXBorder(dir) Border(dir, PX(wxSizerFlags::GetDefaultBorder())) +#define PXDoubleBorder(dir) Border(dir, PX(2 * wxSizerFlags::GetDefaultBorder())) + +/// Tweak notebook tab label to look good +inline wxString PXNotebookTab(const wxString& label) { return HiDPIScalingFactor() < 1.5 ? label : " " + label + " "; } + +/// Initializes HiDPI code, should be called early in OnInit. +void InitHiDPIHandling(); + +#else // ! NEEDS_MANUAL_HIDPI +#define PX(x) (x) +#define PXDefaultBorder wxSizerFlags::GetDefaultBorder() +#define PXBorder(dir) Border(dir) +#define PXDoubleBorder(dir) DoubleBorder(dir) +#define PXNotebookTab(label) (label) +inline void InitHiDPIHandling() {} +inline double HiDPIScalingFactor() { return 1.0; } +#endif + +#define PXBorderAll() PXBorder(wxALL) +#define PXDoubleBorderAll() PXDoubleBorder(wxALL) + + +/** + Load image from given PNG file. + + Depending on the current scaling factor, the file loaded may be + a @2x variant (e.g. "foo@2x.png" instead of "foo.png" for "foo" + argument). In any case, the bitmap will be scaled appropriately. + + Note that @a name is given *without* the ".png" extension. + */ +extern wxBitmap LoadScaledBitmap(const wxString& name, bool mirror); + +#endif // Poedit_hidpi_h diff --git a/src/http_client.cpp b/src/http_client.cpp new file mode 100644 index 0000000..3e1fbb4 --- /dev/null +++ b/src/http_client.cpp @@ -0,0 +1,115 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "http_client.h" + +#include "str_helpers.h" + +#include +#include + +#include +#include +#include + + +multipart_form_data::multipart_form_data() +{ + boost::uuids::random_generator gen; + m_boundary = boost::uuids::to_string(gen()); +} + +void multipart_form_data::add_value(const std::string& name, const std::string& value) +{ + m_body += "--" + m_boundary + "\r\n"; + m_body += "Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n"; + m_body += value; + m_body += "\r\n"; +} + +void multipart_form_data::add_file(const std::string& name, const std::string& filename, const std::string& file_content) +{ + m_body += "--" + m_boundary + "\r\n"; + m_body += "Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" + filename + "\"\r\n"; + m_body += "Content-Type: application/octet-stream\r\n"; + m_body += "Content-Transfer-Encoding: binary\r\n"; + m_body += "\r\n"; + m_body += file_content; + m_body += "\r\n"; +} + +std::string multipart_form_data::content_type() const +{ + return "multipart/form-data; boundary=" + m_boundary; +} + +std::string multipart_form_data::body() const +{ + return m_body + "--" + m_boundary + "--\r\n\r\n"; +} + + +void urlencoded_data::add_value(const std::string& name, const std::string& value) +{ + if (!m_body.empty()) + m_body += '&'; + m_body += name; + m_body += '='; + m_body += http_client::url_encode(value); +} + + +std::string http_client::url_encode(const std::string& s) +{ + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + + for (auto c: s) + { + if (c == '-' || c == '_' || c == '.' || c == '~' || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9')) + { + escaped << c; + } + else if (c == ' ') + { + escaped << '+'; + } + else + { + escaped << '%' << std::setw(2) << int((unsigned char)c); + } + } + + return escaped.str(); +} + +std::string http_client::url_encode(const std::wstring& s) +{ + return url_encode(str::to_utf8(s)); +} diff --git a/src/http_client.h b/src/http_client.h new file mode 100644 index 0000000..76874d4 --- /dev/null +++ b/src/http_client.h @@ -0,0 +1,275 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_http_client_h +#define Poedit_http_client_h + +#ifdef HAVE_HTTP_CLIENT + +#include +#include +#include +#include +#include + +class http_client; + +class json_dict +{ +public: + struct native; + json_dict() {} + json_dict(std::shared_ptr value) : m_native(value) {} + + bool is_null(const char *name) const; + + json_dict subdict(const char *name) const; + + std::string utf8_string(const char *name) const; + std::wstring wstring(const char *name) const; +#ifdef __APPLE__ + std::string native_string(const char *name) const { return utf8_string(name); } +#else + std::wstring native_string(const char *name) const { return wstring(name); } +#endif + + int number(const char *name) const; + double double_number(const char *name) const; + void iterate_array(const char *name, std::function on_item) const; + +private: + std::shared_ptr m_native; +}; + + +/// Abstract base class for encoded body data +class http_body_data +{ +public: + http_body_data() {} + virtual ~http_body_data() {} + + /// Content-Type header to use with the data. + virtual std::string content_type() const = 0; + + /// Returns generated body of the request. + virtual std::string body() const = 0; +}; + +/// Stores POSTed data (RFC 1867) +class multipart_form_data : public http_body_data +{ +public: + multipart_form_data(); + + /// Add a form value. + void add_value(const std::string& name, const std::string& value); + + /// Add file upload. + void add_file(const std::string& name, const std::string& filename, const std::string& file_content); + + std::string content_type() const override; + std::string body() const override; + +private: + std::string m_boundary; + std::string m_body; +}; + +/// Stores application/x-www-form-urlencoded data +class urlencoded_data : public http_body_data +{ +public: + /// Add a form value. + void add_value(const std::string& name, const std::string& value); + + std::string content_type() const override { return "application/x-www-form-urlencoded"; } + std::string body() const override { return m_body; } + +private: + std::string m_body; +}; + + +/// Response to a HTTP request +class http_response +{ +public: + http_response(const json_dict& data) : m_ok(true), m_data(data) {} + http_response(std::exception_ptr e) : m_ok(false), m_error(e) {} + + /// Is the response acceptable? + bool ok() const { return m_ok; } + + /// Returns json data from the response. May throw if there was error. + const json_dict& json() const + { + if (m_error) + std::rethrow_exception(m_error); + return m_data; + } + + /// Returns the stored exception, if any + std::exception_ptr exception() const { return m_error; } + +private: + bool m_ok; + std::exception_ptr m_error; + json_dict m_data; + + friend class http_client; +}; + + +/** + Client for accessing HTTP REST APIs. + */ +class http_client +{ +public: + /// Connection flags for the client. + enum flags + { + /// The host uses SNI for SSL. Will use http instead of https on Windows XP. + uses_sni = 1 + }; + + /** + Creates an instance of the client object. + + The client is good for accessing URLs with the provided prefix + (which may be any prefix, not just the hostname). + + @param flags OR-combination of http_client::flags values. + */ + http_client(const std::string& url_prefix, int flags = 0); + virtual ~http_client(); + + /// Return true if the server is reachable, i.e. client is online + bool is_reachable() const; + + /// Sets Authorization header to be used in all requests + void set_authorization(const std::string& auth); + + typedef std::function response_func_t; + + /// Perform a GET request at the given URL and call function to handle the result + void get(const std::string& url, response_func_t handler); + + /// Perform a GET request at the given URL and ignore the response. + void get(const std::string& url) + { + get(url, [](const http_response&){}); + } + + /** + Perform a GET request and store the body in a file. + + Returned response's body won't be accessible in any way from @a handler. + */ + void download(const std::string& url, const std::wstring& output_file, response_func_t handler); + + /** + Perform a POST request with multipart/form-data formatted @a params. + */ + void post(const std::string& url, const http_body_data& data, response_func_t handler); + + /// Perform a POST request at the given URL and ignore the response. + void post(const std::string& url, const http_body_data& data) + { + post(url, data, [](const http_response&){}); + } + + + // Variants that have separate error and success handlers: + template + void get(const std::string& url, const T1& onResult, const T2& onError) + { + get(url, [onResult,onError](const http_response& r){ + try + { + onResult(r.json()); + } + catch (...) + { + onError(std::current_exception()); + } + }); + } + + template + void download(const std::string& url, const std::wstring& output_file, const T1& onSuccess, const T2& onError) + { + download(url, output_file, [onSuccess,onError](const http_response& r){ + if (r.ok()) + onSuccess(); + else + onError(r.exception()); + }); + } + + template + void post(const std::string& url, const multipart_form_data& data, const T1& onSuccess, const T2& onError) + { + post(url, data, [onSuccess,onError](const http_response& r){ + if (r.ok()) + onSuccess(); + else + onError(r.exception()); + }); + } + + // Helper for encoding text as URL-encoded UTF-8 + static std::string url_encode(const std::string& s); + static std::string url_encode(const std::wstring& s); + +protected: + /** + Extract more detailed, client specific error response from the + JSON body of error response, if available. + + Does nothing by default, but can be overridden in derived class. + */ + virtual std::string parse_json_error(const json_dict& /*response*/) const + { return std::string(); } + + /** + Called when an error response is returned, before calling error handler. + + Can be used to react to specific errors, e.g. invalidate expired OAuth tokens, + or to modify the response. + */ + virtual void on_error_response(int& /*statusCode*/, std::string& /*message*/) {}; + +private: + class impl; + friend class http_response; + + std::unique_ptr m_impl; +}; + +#endif // HAVE_HTTP_CLIENT + +#endif // Poedit_http_client_h diff --git a/src/http_client_casablanca.cpp b/src/http_client_casablanca.cpp new file mode 100644 index 0000000..056fc0a --- /dev/null +++ b/src/http_client_casablanca.cpp @@ -0,0 +1,456 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "http_client.h" + +#include "version.h" +#include "str_helpers.h" + +#include + +#include +#include +#include +#include +#include + +#define CPPREST_TARGET_XP +#include +#include +#include +#include + +#ifdef _WIN32 + #include + #include + #include + #pragma comment(lib, "ole32.lib") + + // can't include both winhttp.h and wininet.h, so put a declaration here + //#include + EXTERN_C DECLSPEC_IMPORT BOOL STDAPICALLTYPE InternetGetConnectedState(__out LPDWORD lpdwFlags, __reserved DWORD dwReserved); +#endif + +using namespace web; + +namespace +{ + +using utility::string_t; +using utility::conversions::to_string_t; + +#ifndef _UTF16_STRINGS +inline string_t to_string_t(const std::wstring& s) { return str::to_utf8(s); } +#endif + +class gzip_compression_support : public http::http_pipeline_stage +{ +public: + pplx::task propagate(http::http_request request) override + { + request.headers().add(http::header_names::accept_encoding, L"gzip"); + + return next_stage()->propagate(request).then([](http::http_response response) -> pplx::task + { + string_t encoding; + if (response.headers().match(http::header_names::content_encoding, encoding) && encoding == _XPLATSTR("gzip")) + { + return response.extract_vector().then([response](std::vector compressed) mutable -> http::http_response + { + namespace io = boost::iostreams; + + io::array_source source(reinterpret_cast(compressed.data()), compressed.size()); + io::filtering_istream in; + in.push(io::gzip_decompressor()); + in.push(source); + + std::vector decompressed; + io::back_insert_device> sink(decompressed); + io::copy(in, sink); + + response.set_body(concurrency::streams::bytestream::open_istream(std::move(decompressed)), decompressed.size()); + return response; + }); + } + else + { + return pplx::task_from_result(response); + } + }); + } +}; + +} // anonymous namespace + +struct json_dict::native +{ + native(const web::json::value& x) : val(x) {} + + web::json::value val; + + const web::json::value& get(const std::string& key) + { + return val.at(to_string_t(key)); + } +}; + +static inline json_dict make_json_dict(const web::json::value& x) +{ + return std::make_shared(x); +} + +bool json_dict::is_null(const char *name) const +{ + return m_native->get(name).is_null(); +} + +json_dict json_dict::subdict(const char *name) const +{ + return make_json_dict(m_native->get(name)); +} + +std::string json_dict::utf8_string(const char *name) const +{ + return str::to_utf8(m_native->get(name).as_string()); +} + +std::wstring json_dict::wstring(const char *name) const +{ + return str::to_wstring(m_native->get(name).as_string()); +} + +int json_dict::number(const char *name) const +{ + return m_native->get(name).as_integer(); +} + +double json_dict::double_number(const char *name) const +{ + return m_native->get(name).as_double(); +} + +void json_dict::iterate_array(const char *name, std::function on_item) const +{ + auto& val = m_native->get(name); + if (!val.is_array()) + return; + auto size = val.size(); + for (size_t i = 0; i < size; ++i) + { + on_item(make_json_dict(val.at(i))); + } +} + + + +class http_client::impl +{ +public: + impl(http_client& owner, const std::string& url_prefix, int flags) + : m_owner(owner), m_native(sanitize_url(url_prefix, flags), get_client_config()) + { + #define make_wide_str(x) make_wide_str_(x) + #define make_wide_str_(x) L ## x + + #if defined(_WIN32) + #define USER_AGENT_PLATFORM L" (Windows NT " + windows_version() + L")" + #elif defined(__unix__) + #define USER_AGENT_PLATFORM L" (Unix)" + #else + #define USER_AGENT_PLATFORM + #endif + m_userAgent = L"Poedit/" make_wide_str(POEDIT_VERSION) USER_AGENT_PLATFORM; + + std::shared_ptr gzip_stage = std::make_shared(); + m_native.add_handler(gzip_stage); + + #ifdef _WIN32 + m_networkListManager = nullptr; + CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_INetworkListManager, (LPVOID *)&m_networkListManager); + #endif + } + + ~impl() + { + #ifdef _WIN32 + if (m_networkListManager) + m_networkListManager->Release(); + #endif + } + + bool is_reachable() const + { + #ifdef _WIN32 + if (m_networkListManager) + { + NLM_CONNECTIVITY result; + HRESULT hr = m_networkListManager->GetConnectivity(&result); + if (SUCCEEDED(hr)) + return result & (NLM_CONNECTIVITY_IPV4_INTERNET|NLM_CONNECTIVITY_IPV6_INTERNET); + } + // XP or manager fallback (IPv6 ignorant): + DWORD flags; + return ::InternetGetConnectedState(&flags, 0); + #else + return true; // TODO + #endif + } + + void set_authorization(const std::string& auth) + { + m_auth = std::wstring(auth.begin(), auth.end()); + } + + void get(const std::string& url, + std::function handler) + { + http::http_request req(http::methods::GET); + req.headers().add(http::header_names::accept, L"application/json"); + req.headers().add(http::header_names::user_agent, m_userAgent); + if (!m_auth.empty()) + req.headers().add(http::header_names::authorization, m_auth); + req.set_request_uri(to_string_t(url)); + + m_native.request(req) + .then([=](http::http_response response) + { + handle_error(response); + handler(make_json_dict(response.extract_json().get())); + }) + .then([=](pplx::task t) + { + try { t.get(); } + catch (...) + { + handler(std::current_exception()); + } + }); + } + + void download(const std::string& url, const std::wstring& output_file, response_func_t handler) + { + using namespace concurrency::streams; + auto fileStream = std::make_shared(); + + fstream::open_ostream(to_string_t(output_file)).then([=](ostream outFile) + { + *fileStream = outFile; + http::http_request req(http::methods::GET); + req.headers().add(http::header_names::user_agent, m_userAgent); + if (!m_auth.empty()) + req.headers().add(http::header_names::authorization, m_auth); + req.set_request_uri(to_string_t(url)); + return m_native.request(req); + }) + .then([=](http::http_response response) + { + handle_error(response); + return response.body().read_to_end(fileStream->streambuf()); + }) + .then([=](size_t) + { + return fileStream->close(); + }) + .then([=](pplx::task t) + { + try + { + t.get(); + handler(json_dict()); + } + catch (...) + { + handler(std::current_exception()); + } + }); + } + + void post(const std::string& url, const http_body_data& data, response_func_t handler) + { + http::http_request req(http::methods::POST); + req.headers().add(http::header_names::accept, L"application/json"); + req.headers().add(http::header_names::user_agent, m_userAgent); + if (!m_auth.empty()) + req.headers().add(http::header_names::authorization, m_auth); + req.set_request_uri(to_string_t(url)); + + auto body = data.body(); + req.set_body(body, data.content_type()); + req.headers().set_content_length(body.size()); + + m_native.request(req) + .then([=](http::http_response response) + { + handle_error(response); + handler(make_json_dict(response.extract_json().get())); + }) + .then([=](pplx::task t) + { + try { t.get(); } + catch (...) + { + handler(std::current_exception()); + } + }); + } + +private: + // handle non-OK responses: + void handle_error(http::http_response r) + { + if (r.status_code() == http::status_codes::OK) + return; // not an error + + int status_code = r.status_code(); + std::string msg; + if (r.headers().content_type() == L"application/json") + { + try + { + auto json = make_json_dict(r.extract_json().get()); + msg = m_owner.parse_json_error(json); + } + catch (...) {} // report original error if parsing broken + } + if (msg.empty()) + msg = str::to_utf8(r.reason_phrase()); + m_owner.on_error_response(status_code, msg); + throw http::http_exception(status_code, msg); + } + + // convert to wstring and make WinXP ready + static string_t sanitize_url(const std::string& url, int flags) + { + (void)flags; + #ifdef _WIN32 + if (flags & http_client::uses_sni) + { + // Windows XP doesn't support SNI and so can't connect over SSL to + // hosts that use it. The use of SNI is increasingly common and some + // APIs Poedit needs to connect to use it. To keep things simple, just + // disable SSL on Windows XP. + if (is_windows_xp()) + { + if (boost::starts_with(url, "https://")) + return U("http://") + string_t(url.begin() + 8, url.end()); + } + } + #endif + return to_string_t(url); + } + + // prepare WinHttp configuration + static http::client::http_client_config get_client_config() + { + http::client::http_client_config c; + #ifdef _WIN32 + // WinHttp doesn't share WinInet/MSIE's proxy settings and has its own, + // but many users don't have properly configured both. Adopting proxy + // settings like this in desktop software is recommended behavior, see + // https ://blogs.msdn.microsoft.com/ieinternals/2013/10/11/understanding-web-proxy-configuration/ + WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ieConfig = { 0 }; + if (WinHttpGetIEProxyConfigForCurrentUser(&ieConfig)) + { + if (ieConfig.fAutoDetect) + { + c.set_proxy(web_proxy::use_auto_discovery); + } + if (ieConfig.lpszProxy) + { + // Explicitly add // to the URL to work around a bug in C++ REST SDK's + // parsing of proxies with port number in their address + // (see https://github.com/Microsoft/cpprestsdk/issues/57) + c.set_proxy(uri(L"//" + std::wstring(ieConfig.lpszProxy))); + } + } + #endif + return c; + } + +private: +#ifdef _WIN32 + static bool is_windows_xp() + { + OSVERSIONINFOEX info; + ZeroMemory(&info, sizeof(info)); + info.dwOSVersionInfoSize = sizeof(info); + GetVersionEx(reinterpret_cast(&info)); + return (info.dwMajorVersion < 6); // XP + } + + static std::wstring windows_version() + { + OSVERSIONINFOEX info; + ZeroMemory(&info, sizeof(info)); + info.dwOSVersionInfoSize = sizeof(info); + GetVersionEx(reinterpret_cast(&info)); + return std::to_wstring(info.dwMajorVersion) + L"." + std::to_wstring(info.dwMinorVersion); + } + + INetworkListManager *m_networkListManager; +#endif + + http_client& m_owner; + http::client::http_client m_native; + std::wstring m_userAgent; + std::wstring m_auth; +}; + + + +http_client::http_client(const std::string& url_prefix, int flags) + : m_impl(new impl(*this, url_prefix, flags)) +{ +} + +http_client::~http_client() +{ +} + +bool http_client::is_reachable() const +{ + return m_impl->is_reachable(); +} + +void http_client::set_authorization(const std::string& auth) +{ + m_impl->set_authorization(auth); +} + +void http_client::get(const std::string& url, + std::function handler) +{ + m_impl->get(url, handler); +} + +void http_client::download(const std::string& url, const std::wstring& output_file, response_func_t handler) +{ + m_impl->download(url, output_file, handler); +} + +void http_client::post(const std::string& url, const http_body_data& data, response_func_t handler) +{ + m_impl->post(url, data, handler); +} diff --git a/src/icons.cpp b/src/icons.cpp new file mode 100644 index 0000000..9363743 --- /dev/null +++ b/src/icons.cpp @@ -0,0 +1,137 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2004-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include + +#include + +#include "icons.h" +#include "edapp.h" +#include "hidpi.h" + +#ifndef __WXOSX__ + +namespace +{ + +#ifdef __WXGTK20__ +// translates poedit item id or Tango stock item id to "legacy" GNOME id: +wxString GetGnomeStockId(const wxString& id) +{ + #define MAP(poedit, gnome) if ( id == _T(poedit) ) return _T(gnome) + + MAP("document-open", "gtk-open"); + MAP("document-save", "gtk-save"); + MAP("window-close", "gtk-close"); + + MAP("document-new", "gtk-new"); + MAP("document-properties", "stock_edit"); + MAP("edit-delete", "gtk-delete"); + + #undef MAP + + return wxEmptyString; // no match found +} +#endif // __WXGTK20__ + +// Check if a given icon needs mirroring in right-to-left locales: +bool ShouldBeMirorredInRTL(const wxArtID& id, const wxArtClient& client) +{ + // Silence warning about unused parameter in some of the builds + (void)client; + + static std::set s_directional = { + "ContributeOn", + "poedit-status-comment", + "follow-link", + "sidebar", + "sidebar-disabled" + }; + + bool mirror = s_directional.find(id) != s_directional.end(); + +#ifdef __WXMSW__ + // Toolbar is already mirrored + if (client == wxART_TOOLBAR) + mirror = !mirror; +#endif + + return mirror; +} + +} // anonymous namespace + +wxBitmap PoeditArtProvider::CreateBitmap(const wxArtID& id, + const wxArtClient& client, + const wxSize& size) +{ + // Silence warning about unused parameter in some of the builds + (void)client; + (void)size; + + // Note: On Unix, this code is only called as last resolt, if standard + // theme provider (that uses current icon theme and files from + // /usr/share/icons/) didn't find any matching icon. + + wxLogTrace("poedit.icons", "getting icon '%s'", id.c_str()); + +#ifdef __WXGTK20__ + // try legacy GNOME icons from standard theme: + wxString gnomeId = GetGnomeStockId(id); + if ( !gnomeId.empty() ) + { + wxLogTrace("poedit.icons", "-> legacy '%s'", gnomeId.c_str()); + wxBitmap gbmp(wxArtProvider::GetBitmap(gnomeId, client, size)); + if ( gbmp.Ok() ) + return gbmp; + } +#endif // __WXGTK20__ + + wxString iconsdir = +#if defined(__WXMSW__) + wxStandardPaths::Get().GetResourcesDir() + "\\Resources"; +#else + wxStandardPaths::Get().GetInstallPrefix() + "/share/poedit/icons"; +#endif + if ( !wxDirExists(iconsdir) ) + { + wxLogTrace("poedit.icons", + "icons dir %s not found", iconsdir.c_str()); + return wxNullBitmap; + } + + bool mirror = false; + if (wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft) + mirror = ShouldBeMirorredInRTL(id, client); + + wxString icon; + icon.Printf("%s/%s", iconsdir.c_str(), id.c_str()); + wxLogTrace("poedit.icons", "loading from %s", icon.c_str()); + return LoadScaledBitmap(icon, mirror); +} + +#endif // !__WXOSX__ diff --git a/src/icons.h b/src/icons.h new file mode 100644 index 0000000..251c7c7 --- /dev/null +++ b/src/icons.h @@ -0,0 +1,45 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2004-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _ICONS_H_ +#define _ICONS_H_ + +#include + +#if defined(__WXGTK20__) + #define HAS_THEMES_SUPPORT +#endif + +#ifndef __WXOSX__ +class PoeditArtProvider : public wxArtProvider +{ +protected: + virtual wxBitmap CreateBitmap(const wxArtID& id, + const wxArtClient& client, + const wxSize& size); +}; +#endif + +#endif // _ICONS_H_ diff --git a/src/keychain/keytar.h b/src/keychain/keytar.h new file mode 100644 index 0000000..596bc8f --- /dev/null +++ b/src/keychain/keytar.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2013 GitHub Inc. + * Copyright (c) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef SRC_KEYTAR_H_ +#define SRC_KEYTAR_H_ + +#include + +namespace keytar +{ + +bool AddPassword(const std::string& account, const std::string& password); + +bool GetPassword(const std::string& account, std::string* password); + +bool DeletePassword(const std::string& account); + +} // namespace keytar + +#endif // SRC_KEYTAR_H_ diff --git a/src/keychain/keytar_posix.cc b/src/keychain/keytar_posix.cc new file mode 100644 index 0000000..2843e77 --- /dev/null +++ b/src/keychain/keytar_posix.cc @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2013 GitHub Inc. + * Copyright (c) 2015-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "keytar.h" + +#include +#include +#include + +namespace keytar +{ + +namespace +{ + +#ifdef __GNUC__ + #pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +const SecretSchema kSchema = { + "net.poedit.Credentials", SECRET_SCHEMA_NONE, + { + { "account", SECRET_SCHEMA_ATTRIBUTE_STRING }, + { NULL, SecretSchemaAttributeType(0) }, + } +}; + +} // namespace + +bool AddPassword(const std::string& account, const std::string& password) +{ + GError *error = NULL; + gboolean result = secret_password_store_sync( + &kSchema, + SECRET_COLLECTION_DEFAULT, + account.c_str(), // label + password.c_str(), + NULL, // not cancellable + &error, + "account", account.c_str(), + NULL); + if (error != NULL) { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + return result; +} + +bool GetPassword(const std::string& account, std::string* password) +{ + GError *error = NULL; + gchar* raw_passwords; + raw_passwords = secret_password_lookup_sync( + &kSchema, + NULL, // not cancellable + &error, + "account", account.c_str(), + NULL); + + if (error != NULL) { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + return false; + } else if (raw_passwords == NULL) { + return false; + } else { + *password = raw_passwords; + } + secret_password_free(raw_passwords); + return true; +} + +bool DeletePassword(const std::string& account) +{ + GError *error = NULL; + gboolean result = secret_password_clear_sync( + &kSchema, + NULL, // not cancellable + &error, + "account", account.c_str(), + NULL); + if (error != NULL) { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + return result; +} + +} // namespace keytar diff --git a/src/language.cpp b/src/language.cpp new file mode 100644 index 0000000..fda3fe2 --- /dev/null +++ b/src/language.cpp @@ -0,0 +1,559 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "language.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "str_helpers.h" + +#ifdef HAVE_CLD2 + #ifdef HAVE_CLD2_PUBLIC_COMPACT_LANG_DET_H + #include + #include + #else + #include "public/compact_lang_det.h" + #include "public/encodings.h" + #endif +#endif + +// GCC's libstdc++ didn't have functional std::regex implementation until 4.9 +#if (defined(__GNUC__) && !defined(__clang__) && !wxCHECK_GCC_VERSION(4,9)) + #include + using boost::wregex; + using boost::regex_match; +#else + #include + using std::wregex; + using std::regex_match; +#endif + +namespace +{ + +// see http://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html +// for description of permitted formats +const wregex RE_LANG_CODE(L"([a-z]){2,3}(_([A-Z]{2}|[0-9]{3}))?(@[a-z]+)?"); + +// a more permissive variant of the same that TryNormalize() would fix +const wregex RE_LANG_CODE_PERMISSIVE(L"([a-zA-Z]){2,3}([_-]([a-zA-Z]{2}|[0-9]{3}))?(@[a-zA-Z]+)?"); + +// try some normalizations: s/-/_/, case adjustments +void TryNormalize(std::wstring& s) +{ + auto begin = s.begin(); + auto end = s.end(); + + size_t pos = s.rfind('@'); + if (pos != std::wstring::npos) + { + for (auto x = begin + pos; x != end; ++x) + *x = std::tolower(*x); + end = begin + pos; + } + + bool upper = false; + for (auto x = begin; x != end; ++x) + { + if (*x == '-') + *x = '_'; + if (*x == '_') + upper = true; + else if (std::isupper(*x) && !upper) + *x = std::tolower(*x); + else if (std::islower(*x) && upper) + *x = std::toupper(*x); + } +} + +bool IsISOLanguage(const std::string& s) +{ + const char *test = s.c_str(); + for (const char * const* i = icu::Locale::getISOLanguages(); *i != nullptr; ++i) + { + if (strcmp(test, *i) == 0) + return true; + } + return false; +} + +bool IsISOCountry(const std::string& s) +{ + const char *test = s.c_str(); + for (const char * const* i = icu::Locale::getISOCountries(); *i != nullptr; ++i) + { + if (strcmp(test, *i) == 0) + return true; + } + return false; +} + +// Mapping of names to their respective ISO codes. +struct DisplayNamesData +{ + typedef std::unordered_map Map; + Map names, namesEng; + std::vector sortedNames; +}; + +std::once_flag of_namesList; + +const DisplayNamesData& GetDisplayNamesData() +{ + static DisplayNamesData data; + + std::call_once(of_namesList, [=]{ + auto locEng = icu::Locale::getEnglish(); + std::vector names; + + int32_t count; + const icu::Locale *loc = icu::Locale::getAvailableLocales(count); + names.reserve(count); + for (int i = 0; i < count; i++, loc++) + { + auto language = loc->getLanguage(); + auto script = loc->getScript(); + auto country = loc->getCountry(); + auto variant = loc->getVariant(); + + // TODO: for now, ignore variants here and in FormatForRoundtrip(), + // because translating them between gettext and ICU is nontrivial + if (variant != nullptr && *variant != '\0') + continue; + + icu::UnicodeString s; + loc->getDisplayName(s); + names.push_back(s); + + if (strcmp(language, "zh") == 0 && *country == '\0') + { + if (strcmp(script, "Hans") == 0) + country = "CN"; + else if (strcmp(script, "Hant") == 0) + country = "TW"; + } + + std::string code(language); + if (*country != '\0') + { + code += '_'; + code += country; + } + if (*script != '\0') + { + if (strcmp(script, "Latn") == 0) + { + code += "@latin"; + } + else if (strcmp(script, "Cyrl") == 0) + { + // add @cyrillic only if it's not the default already + if (strcmp(language, "sr") != 0) + code += "@cyrillic"; + } + } + + s.foldCase(); + data.names[str::to_wstring(s)] = code; + + loc->getDisplayName(locEng, s); + s.foldCase(); + data.namesEng[str::to_wstring(s)] = code; + } + + // sort the names alphabetically for data.sortedNames: + UErrorCode err = U_ZERO_ERROR; + std::unique_ptr coll(icu::Collator::createInstance(err)); + if (coll) + { + coll->setStrength(icu::Collator::SECONDARY); // case insensitive + + std::sort(names.begin(), names.end(), + [&coll](const icu::UnicodeString& a, const icu::UnicodeString& b){ + UErrorCode e = U_ZERO_ERROR; + return coll->compare(a, b, e) == UCOL_LESS; + }); + } + else + { + std::sort(names.begin(), names.end()); + } + + // convert into std::wstring + data.sortedNames.reserve(names.size()); + for (auto s: names) + data.sortedNames.push_back(str::to_wstring(s)); + }); + + return data; +} + +std::string DoGetLanguageTag(const Language& lang) +{ + auto l = lang.Lang(); + auto c = lang.Country(); + auto v = lang.Variant(); + + auto tag = l; + if (v == "latin") + tag += "-Latn"; + else if (v == "cyrillic") + tag += "-Cyrl"; + if (!c.empty()) + tag += "-" + c; + return tag; +} + +bool DoIsRTL(const Language& lang) +{ +#if U_ICU_VERSION_MAJOR_NUM >= 51 + auto locale = lang.IcuLocaleName(); + UErrorCode err = U_ZERO_ERROR; + UScriptCode codes[10]= {USCRIPT_INVALID_CODE}; + if (uscript_getCode(locale.c_str(), codes, 10, &err) == 0 || err != U_ZERO_ERROR) + return false; // fallback + return uscript_isRightToLeft(codes[0]); +#else + return false; // fallback +#endif +} + +} // anonymous namespace + + +void Language::Init(const std::string& code) +{ + m_code = code; + + if (IsValid()) + { + m_tag = DoGetLanguageTag(*this); + m_direction = DoIsRTL(*this) ? TextDirection::RTL : TextDirection::LTR; + } + else + { + m_tag.clear(); + m_direction = TextDirection::LTR; + } +} + +bool Language::IsValidCode(const std::wstring& s) +{ + return regex_match(s, RE_LANG_CODE); +} + +std::string Language::Lang() const +{ + return m_code.substr(0, m_code.find_first_of("_@")); +} + +std::string Language::Country() const +{ + const size_t pos = m_code.find('_'); + if (pos == std::string::npos) + return std::string(); + + const size_t endpos = m_code.rfind('@'); + if (endpos == std::string::npos) + return m_code.substr(pos+1); + else + return m_code.substr(pos+1, endpos - (pos+1)); +} + +std::string Language::LangAndCountry() const +{ + return m_code.substr(0, m_code.rfind('@')); +} + +std::string Language::Variant() const +{ + const size_t pos = m_code.rfind('@'); + if (pos == std::string::npos) + return std::string(); + else + return m_code.substr(pos + 1); +} + +Language Language::TryParse(const std::wstring& s) +{ + if (IsValidCode(s)) + return Language(s); + + // Is it a standard language code? + if (regex_match(s, RE_LANG_CODE_PERMISSIVE)) + { + std::wstring s2(s); + TryNormalize(s2); + if (IsValidCode(s2)) + return Language(s2); + } + + // If not, perhaps it's a human-readable name (perhaps coming from the language control)? + auto names = GetDisplayNamesData(); + icu::UnicodeString s_icu = str::to_icu(s); + s_icu.foldCase(); + std::wstring folded = str::to_wstring(s_icu); + auto i = names.names.find(folded); + if (i != names.names.end()) + return Language(i->second); + + // Maybe it was in English? + i = names.namesEng.find(folded); + if (i != names.namesEng.end()) + return Language(i->second); + + return Language(); // invalid +} + + +Language Language::TryParseWithValidation(const std::wstring& s) +{ + Language lang = Language::TryParse(s); + if (!lang.IsValid()) + return Language(); // invalid + + if (!IsISOLanguage(lang.Lang())) + return Language(); // invalid + + auto country = lang.Country(); + if (!country.empty() && !IsISOCountry(country)) + return Language(); // invalid + + return lang; +} + + +Language Language::FromLegacyNames(const std::string& lang, const std::string& country) +{ + if (lang.empty()) + return Language(); // invalid + + #include "language_impl_legacy.h" + + std::string code; + auto i = isoLanguages.find(lang); + if ( i != isoLanguages.end() ) + code = i->second; + else + return Language(); // invalid + + if (!country.empty()) + { + auto iC = isoCountries.find(country); + if ( iC != isoCountries.end() ) + code += "_" + iC->second; + } + + return Language(code); +} + + +std::string Language::DefaultPluralFormsExpr() const +{ + if (!IsValid()) + return std::string(); + + static const std::unordered_map forms = { + #include "language_impl_plurals.h" + }; + + auto i = forms.find(m_code); + if ( i != forms.end() ) + return i->second; + + i = forms.find(LangAndCountry()); + if ( i != forms.end() ) + return i->second; + + i = forms.find(Lang()); + if ( i != forms.end() ) + return i->second; + + return std::string(); +} + + +icu::Locale Language::ToIcu() const +{ + if (!IsValid()) + return icu::Locale::getEnglish(); + + return icu::Locale(IcuLocaleName().c_str()); +} + + +wxString Language::DisplayName() const +{ + icu::UnicodeString s; + ToIcu().getDisplayName(s); + return str::to_wx(s); +} + +wxString Language::LanguageDisplayName() const +{ + icu::UnicodeString s; + ToIcu().getDisplayLanguage(s); + return str::to_wx(s); +} + +wxString Language::DisplayNameInItself() const +{ + auto loc = ToIcu(); + icu::UnicodeString s; + loc.getDisplayName(loc, s); + return str::to_wx(s); +} + +wxString Language::FormatForRoundtrip() const +{ + // Can't show all variants nicely, but some common one can be + auto v = Variant(); + if (!v.empty() && v != "latin" && v != "cyrillic") + return m_code; + + wxString disp = DisplayName(); + // ICU isn't 100% reliable, some of the display names it produces + // (e.g. "Chinese (China)" aren't in the list of known locale names + // (here because zh-Trans is preferred to zh_CN). So make sure it can + // be parsed back first. + if (TryParse(disp.ToStdWstring()).IsValid()) + return disp; + else + return m_code; +} + + +const std::vector& Language::AllFormattedNames() +{ + return GetDisplayNamesData().sortedNames; +} + + +Language Language::TryGuessFromFilename(const wxString& filename) +{ + wxFileName fn(filename); + fn.MakeAbsolute(); + + // Try matching the filename first: + // - entire name + // - suffix (foo.cs_CZ.po, wordpressTheme-cs_CZ.po) + // - directory name (cs_CZ, cs.lproj, cs/LC_MESSAGES) + std::wstring name = fn.GetName().ToStdWstring(); + Language lang = Language::TryParseWithValidation(name); + if (lang.IsValid()) + return lang; + + size_t pos = name.find_first_of(L".-_"); + while (pos != wxString::npos) + { + auto part = name.substr(pos+1); + lang = Language::TryParseWithValidation(part); + if (lang.IsValid()) + return lang; + pos = name.find_first_of(L".-_", pos+1); + } + + auto dirs = fn.GetDirs(); + if (!dirs.empty()) + { + auto d = dirs.rbegin(); + if (d->IsSameAs("LC_MESSAGES", /*caseSensitive=*/false)) + { + if (++d == dirs.rend()) + return Language(); // failed to match + } + wxString rest; + if (d->EndsWith(".lproj", &rest)) + return Language::TryParseWithValidation(rest.ToStdWstring()); + else + return Language::TryParseWithValidation(d->ToStdWstring()); + } + + return Language(); // failed to match +} + + +Language Language::TryDetectFromText(const char *buffer, size_t len, Language probableLanguage) +{ +#ifdef HAVE_CLD2 + using namespace CLD2; + + CLDHints hints = {NULL, NULL, UNKNOWN_ENCODING, UNKNOWN_LANGUAGE}; + if (probableLanguage.IsValid()) + { + if (probableLanguage.Lang() == "en") + hints.language_hint = ENGLISH; + else + hints.language_hint = GetLanguageFromName(probableLanguage.LanguageTag().c_str()); + } + + // three best guesses; we don't care, but they must be passed in + CLD2::Language language3[3]; + int percent3[3]; + double normalized_score3[3]; + // more result info: + int text_bytes; + bool is_reliable; + + auto lang = CLD2::ExtDetectLanguageSummary( + buffer, (int)len, + /*is_plain_text=*/true, // any embedded HTML markup should be insignificant + &hints, + /*flags=*/0, + language3, percent3, normalized_score3, + /*resultchunkvector=*/nullptr, + &text_bytes, + &is_reliable); + + if (lang == UNKNOWN_LANGUAGE || !is_reliable) + return Language(); + + // CLD2 penalizes English in bilingual content in some cases as "boilerplate" + // because it is tailored for the web. So e.g. 66% English, 33% Italian is + // tagged as Italian. + // + // Poedit's bias is the opposite: English is almost always the correct answer + // for PO source language. Fix this up manually. + if (lang != language3[0] && language3[0] == CLD2::ENGLISH && language3[1] == lang) + lang = language3[0]; + + return Language::TryParse(LanguageCode(lang)); +#else + (void)buffer; + (void)len; + return probableLanguage; +#endif +} diff --git a/src/language.h b/src/language.h new file mode 100644 index 0000000..e8adea1 --- /dev/null +++ b/src/language.h @@ -0,0 +1,178 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_language_h +#define Poedit_language_h + +#include +#include +#include +#include + +/// Language's text writing direction +enum class TextDirection +{ + LTR, + RTL +}; + + +/// Representation of translation's language. +class Language +{ +public: + Language() {} + + bool IsValid() const { return !m_code.empty(); } + const std::string& Code() const { return m_code; } + std::wstring WCode() const { return std::wstring(m_code.begin(), m_code.end()); } + + /// Returns language part (cs) + std::string Lang() const; + /// Returns country part (CZ, may be empty) + std::string Country() const; + /// Returns language+country parts, without the variant + std::string LangAndCountry() const; + /// Returns optional variant (after @, e.g. 'latin', typically empty) + std::string Variant() const; + + /// Return language tag for the language, per BCP 47, e.g. en-US or sr-Latn + std::string LanguageTag() const { return m_tag; } + + /// Returns name of the locale suitable for ICU + std::string IcuLocaleName() const { return LanguageTag(); } + /// Returns ICU equivalent of the language info + icu::Locale ToIcu() const; + + /// Returns name of this language suitable for display to the user in current UI language + wxString DisplayName() const; + + /// Like DisplayName(), but shorted (no country/variant). + wxString LanguageDisplayName() const; + + /// Returns name of this language in itself + wxString DisplayNameInItself() const; + + /** + Human-readable (if possible) form usable for round-tripping, i.e. + understood by TryParse(). Typically "language (country)" in UI language. + + @see AllFormattedNames() + */ + wxString FormatForRoundtrip() const; + + /** + Return all formatted language names known, in sorted order. + + @see FormatForRoundtrip() + */ + static const std::vector& AllFormattedNames(); + + /** + Return appropriate plural form for this language. + + @return Plural form expression suitable for directly using in the + gettext header or empty string if no record was found. + */ + std::string DefaultPluralFormsExpr() const; + + /// Returns language's text writing direction + TextDirection Direction() const { return m_direction; } + + /// Returns true if the language is written right-to-left. + bool IsRTL() const { return m_direction == TextDirection::RTL; } + + /** + Tries to parse the string as language identification. + + Accepts various forms: + - standard code (cs, cs_CZ, cs_CZ@latin, ...) + - ditto with nonstandard capitalization + - language name in English or current UI language + - ditto for "language (country)" + + Returned language instance is either invalid if the value couldn't + be parsed or a language with normalized language code. + + @note + This function does *not* validate language codes: if @a s has standard + form, the codes are assumed to be valid. Use TryParseWithValidation() + if you are not sure. + */ + static Language TryParse(const std::wstring& s); + static Language TryParse(const std::string& s) + { return TryParse(std::wstring(s.begin(), s.end())); } + + /** + Like TryParse(), but only accepts language codes if they are known + valid ISO 639/3166 codes. + */ + static Language TryParseWithValidation(const std::wstring& s); + + /** + Tries to create the language from Poedit's legacy X-Poedit-Language and + X-Poedit-Country headers. + */ + static Language FromLegacyNames(const std::string& lang, const std::string& country); + + /** + Try to guess the language from filename, if the filename follows some + commonly used naming pattern. + */ + static Language TryGuessFromFilename(const wxString& filename); + + /** + Try to detect the language from UTF-8 text. + + Pass @a probableLanguage if the result is likely known, e.g. English + for source texts. + */ + static Language TryDetectFromText(const char *buffer, size_t len, + Language probableLanguage = Language()); + + /// Returns object for English language + static Language English() { return Language("en"); } + + /** + Checks if @a s has the form of language code. + */ + static bool IsValidCode(const std::wstring& s); + + bool operator==(const Language& other) const { return m_code == other.m_code; } + bool operator!=(const Language& other) const { return m_code != other.m_code; } + bool operator<(const Language& other) const { return m_code < other.m_code; } + +private: + Language(const std::string& code) { Init(code); } + Language(const std::wstring& code) { Init(std::string(code.begin(), code.end())); } + void Init(const std::string& code); + +private: + std::string m_code; + std::string m_tag; + TextDirection m_direction; +}; + +#endif // Poedit_language_h diff --git a/src/language_impl_legacy.h b/src/language_impl_legacy.h new file mode 100644 index 0000000..e3162f0 --- /dev/null +++ b/src/language_impl_legacy.h @@ -0,0 +1,413 @@ + +// Legacy language names used by old versions of Poedit + +static const std::unordered_map isoLanguages = { + { "Abkhazian", "ab" }, + { "(Afan) Oromo", "om" }, + { "Afar", "aa" }, + { "Afrikaans", "af" }, + { "Albanian", "sq" }, + { "Amharic", "am" }, + { "Arabic", "ar" }, + { "Armenian", "hy" }, + { "Assamese", "as" }, + { "Avestan", "ae" }, + { "Aymara", "ay" }, + { "Azerbaijani", "az" }, + { "Bashkir", "ba" }, + { "Basque", "eu" }, + { "Belarusian", "be" }, + { "Bengali", "bn" }, + { "Bihari", "bh" }, + { "Bislama", "bi" }, + { "Bosnian", "bs" }, + { "Breton", "br" }, + { "Bulgarian", "bg" }, + { "Burmese", "my" }, + { "Catalan", "ca" }, + { "Chamorro", "ch" }, + { "Chechen", "ce" }, + { "Chichewa; Nyanja", "ny" }, + { "Chinese", "zh" }, + { "Church Slavic", "cu" }, + { "Chuvash", "cv" }, + { "Cornish", "kw" }, + { "Corsican", "co" }, + { "Croatian", "hr" }, + { "Czech", "cs" }, + { "Danish", "da" }, + { "Dutch", "nl" }, + { "Dzongkha", "dz" }, + { "English", "en" }, + { "Esperanto", "eo" }, + { "Estonian", "et" }, + { "Faroese", "fo" }, + { "Fijian", "fj" }, + { "Finnish", "fi" }, + { "French", "fr" }, + { "Frisian", "fy" }, + { "Friulian", "fur" }, + { "Gaelic", "gd" }, + { "Galician", "gl" }, + { "Georgian", "ka" }, + { "German", "de" }, + { "Greek", "el" }, + { "Guarani", "gn" }, + { "Gujarati", "gu" }, + { "Hausa", "ha" }, + { "Hebrew", "he" }, + { "Herero", "hz" }, + { "Hindi", "hi" }, + { "Hiri Motu", "ho" }, + { "Hungarian", "hu" }, + { "Icelandic", "is" }, + { "Indonesian", "id" }, + { "Interlingua", "ia" }, + { "Interlingue", "ie" }, + { "Inuktitut", "iu" }, + { "Inupiaq", "ik" }, + { "Irish", "ga" }, + { "Italian", "it" }, + { "Japanese", "ja" }, + { "Javanese", "jv" }, + { "Kalaallisut", "kl" }, + { "Kannada", "kn" }, + { "Kashmiri", "ks" }, + { "Kazakh", "kk" }, + { "Khmer", "km" }, + { "Kikuyu", "ki" }, + { "Kinyarwanda", "rw" }, + { "Komi", "kv" }, + { "Korean", "ko" }, + { "Kuanyama", "kj" }, + { "Kurdish", "ku" }, + { "Kyrgyz", "ky" }, + { "Lao", "lo" }, + { "Latin", "la" }, + { "Latvian", "lv" }, + { "Letzeburgesch", "lb" }, + { "Lingala", "ln" }, + { "Lithuanian", "lt" }, + { "Macedonian", "mk" }, + { "Malagasy", "mg" }, + { "Malay", "ms" }, + { "Malayalam", "ml" }, + { "Maltese", "mt" }, + { "Maori", "mi" }, + { "Marathi", "mr" }, + { "Marshall", "mh" }, + { "Moldavian", "mo" }, + { "Mongolian", "mn" }, + { "Nauru", "na" }, + { "Navajo", "nv" }, + { "Ndebele, South", "nr" }, + { "Ndonga", "ng" }, + { "Nepali", "ne" }, + { "Northern Sami", "se" }, + { "Norwegian Bokmal", "nb" }, + { "Norwegian Nynorsk", "nn" }, + { "Occitan", "oc" }, + { "Oriya", "or" }, + { "Ossetian; Ossetic", "os" }, + { "Pali", "pi" }, + { "Panjabi", "pa" }, + { "Pashto, Pushto", "ps" }, + { "Persian", "fa" }, + { "Polish", "pl" }, + { "Portuguese", "pt" }, + { "Quechua", "qu" }, + { "Rhaeto-Romance", "rm" }, + { "Romanian", "ro" }, + { "Rundi", "rn" }, + { "Russian", "ru" }, + { "Samoan", "sm" }, + { "Sangro", "sg" }, + { "Sanskrit", "sa" }, + { "Sardinian", "sc" }, + { "Serbian", "sr" }, + { "Serbian (Latin)", "sr_RS@latin" }, + { "Serbo-Croatian", "sh" }, + { "Sesotho", "st" }, + { "Setswana", "tn" }, + { "Shona", "sn" }, + { "Sindhi", "sd" }, + { "Sinhalese", "si" }, + { "Siswati", "ss" }, + { "Slovak", "sk" }, + { "Slovenian", "sl" }, + { "Somali", "so" }, + { "Spanish", "es" }, + { "Sundanese", "su" }, + { "Swahili", "sw" }, + { "Swedish", "sv" }, + { "Tagalog", "tl" }, + { "Tahitian", "ty" }, + { "Tajik", "tg" }, + { "Tamil", "ta" }, + { "Tatar", "tt" }, + { "Telugu", "te" }, + { "Thai", "th" }, + { "Tibetan", "bo" }, + { "Tigrinya", "ti" }, + { "Tonga", "to" }, + { "Tsonga", "ts" }, + { "Turkish", "tr" }, + { "Turkmen", "tk" }, + { "Twi", "tw" }, + { "Ukrainian", "uk" }, + { "Urdu", "ur" }, + { "Uyghur", "ug" }, + { "Uzbek", "uz" }, + { "Vietnamese", "vi" }, + { "Volapuk", "vo" }, + { "Walloon", "wa" }, + { "Welsh", "cy" }, + { "Wolof", "wo" }, + { "Xhosa", "xh" }, + { "Yiddish", "yi" }, + { "Yoruba", "yo" }, + { "Zhuang", "za" }, + { "Zulu", "zu" } +}; + +static const std::unordered_map isoCountries = { + { "AFGHANISTAN", "AF" }, + { "ALBANIA", "AL" }, + { "ALGERIA", "DZ" }, + { "AMERICAN SAMOA", "AS" }, + { "ANDORRA", "AD" }, + { "ANGOLA", "AO" }, + { "ANGUILLA", "AI" }, + { "ANTARCTICA", "AQ" }, + { "ANTIGUA AND BARBUDA", "AG" }, + { "ARGENTINA", "AR" }, + { "ARMENIA", "AM" }, + { "ARUBA", "AW" }, + { "AUSTRALIA", "AU" }, + { "AUSTRIA", "AT" }, + { "AZERBAIJAN", "AZ" }, + { "BAHAMAS", "BS" }, + { "BAHRAIN", "BH" }, + { "BANGLADESH", "BD" }, + { "BARBADOS", "BB" }, + { "BELARUS", "BY" }, + { "BELGIUM", "BE" }, + { "BELIZE", "BZ" }, + { "BENIN", "BJ" }, + { "BERMUDA", "BM" }, + { "BHUTAN", "BT" }, + { "BOLIVIA", "BO" }, + { "BOSNIA AND HERZEGOVINA", "BA" }, + { "BOTSWANA", "BW" }, + { "BOUVET ISLAND", "BV" }, + { "BRAZIL", "BR" }, + { "BRITISH INDIAN OCEAN TERRITORY", "IO" }, + { "BRUNEI DARUSSALAM", "BN" }, + { "BULGARIA", "BG" }, + { "BURKINA FASO", "BF" }, + { "BURUNDI", "BI" }, + { "CAMBODIA", "KH" }, + { "CAMEROON", "CM" }, + { "CANADA", "CA" }, + { "CAPE VERDE", "CV" }, + { "CAYMAN ISLANDS", "KY" }, + { "CENTRAL AFRICAN REPUBLIC", "CF" }, + { "CHAD", "TD" }, + { "CHILE", "CL" }, + { "CHINA", "CN" }, + { "CHRISTMAS ISLAND", "CX" }, + { "COCOS (KEELING) ISLANDS", "CC" }, + { "COLOMBIA", "CO" }, + { "COMOROS", "KM" }, + { "CONGO", "CG" }, + { "CONGO, THE DEMOCRATIC REPUBLIC OF THE", "CD" }, + { "COOK ISLANDS", "CK" }, + { "COSTA RICA", "CR" }, + { "COTE D'IVOIRE", "CI" }, + { "CROATIA", "HR" }, + { "CUBA", "CU" }, + { "CYPRUS", "CY" }, + { "CZECH REPUBLIC", "CZ" }, + { "DENMARK", "DK" }, + { "DJIBOUTI", "DJ" }, + { "DOMINICA", "DM" }, + { "DOMINICAN REPUBLIC", "DO" }, + { "ECUADOR", "EC" }, + { "EGYPT", "EG" }, + { "EL SALVADOR", "SV" }, + { "EQUATORIAL GUINEA", "GQ" }, + { "ERITREA", "ER" }, + { "ESTONIA", "EE" }, + { "ETHIOPIA", "ET" }, + { "FALKLAND ISLANDS (MALVINAS)", "FK" }, + { "FAROE ISLANDS", "FO" }, + { "FIJI", "FJ" }, + { "FINLAND", "FI" }, + { "FRANCE", "FR" }, + { "FRENCH GUIANA", "GF" }, + { "FRENCH POLYNESIA", "PF" }, + { "FRENCH SOUTHERN TERRITORIES", "TF" }, + { "GABON", "GA" }, + { "GAMBIA", "GM" }, + { "GEORGIA", "GE" }, + { "GERMANY", "DE" }, + { "GHANA", "GH" }, + { "GIBRALTAR", "GI" }, + { "GREECE", "GR" }, + { "GREENLAND", "GL" }, + { "GRENADA", "GD" }, + { "GUADELOUPE", "GP" }, + { "GUAM", "GU" }, + { "GUATEMALA", "GT" }, + { "GUINEA", "GN" }, + { "GUINEA-BISSAU", "GW" }, + { "GUYANA", "GY" }, + { "HAITI", "HT" }, + { "HEARD ISLAND AND MCDONALD ISLANDS", "HM" }, + { "HOLY SEE (VATICAN CITY STATE)", "VA" }, + { "HONDURAS", "HN" }, + { "HONG KONG", "HK" }, + { "HUNGARY", "HU" }, + { "ICELAND", "IS" }, + { "INDIA", "IN" }, + { "INDONESIA", "ID" }, + { "IRAN, ISLAMIC REPUBLIC OF", "IR" }, + { "IRAQ", "IQ" }, + { "IRELAND", "IE" }, + { "ISRAEL", "IL" }, + { "ITALY", "IT" }, + { "JAMAICA", "JM" }, + { "JAPAN", "JP" }, + { "JORDAN", "JO" }, + { "KAZAKHSTAN", "KZ" }, + { "KENYA", "KE" }, + { "KIRIBATI", "KI" }, + { "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF", "KP" }, + { "KOREA, REPUBLIC OF", "KR" }, + { "KUWAIT", "KW" }, + { "KYRGYZSTAN", "KG" }, + { "LAO PEOPLE'S DEMOCRATIC REPUBLIC", "LA" }, + { "LATVIA", "LV" }, + { "LEBANON", "LB" }, + { "LESOTHO", "LS" }, + { "LIBERIA", "LR" }, + { "LIBYAN ARAB JAMAHIRIYA", "LY" }, + { "LIECHTENSTEIN", "LI" }, + { "LITHUANIA", "LT" }, + { "LUXEMBOURG", "LU" }, + { "MACAO", "MO" }, + { "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", "MK" }, + { "MADAGASCAR", "MG" }, + { "MALAWI", "MW" }, + { "MALAYSIA", "MY" }, + { "MALDIVES", "MV" }, + { "MALI", "ML" }, + { "MALTA", "MT" }, + { "MARSHALL ISLANDS", "MH" }, + { "MARTINIQUE", "MQ" }, + { "MAURITANIA", "MR" }, + { "MAURITIUS", "MU" }, + { "MAYOTTE", "YT" }, + { "MEXICO", "MX" }, + { "MICRONESIA, FEDERATED STATES OF", "FM" }, + { "MOLDOVA, REPUBLIC OF", "MD" }, + { "MONACO", "MC" }, + { "MONGOLIA", "MN" }, + { "MONTSERRAT", "MS" }, + { "MOROCCO", "MA" }, + { "MOZAMBIQUE", "MZ" }, + { "MYANMAR", "MM" }, + { "NAMIBIA", "NA" }, + { "NAURU", "NR" }, + { "NEPAL", "NP" }, + { "NETHERLANDS", "NL" }, + { "NETHERLANDS ANTILLES", "AN" }, + { "NEW CALEDONIA", "NC" }, + { "NEW ZEALAND", "NZ" }, + { "NICARAGUA", "NI" }, + { "NIGER", "NE" }, + { "NIGERIA", "NG" }, + { "NIUE", "NU" }, + { "NORFOLK ISLAND", "NF" }, + { "NORTHERN MARIANA ISLANDS", "MP" }, + { "NORWAY", "NO" }, + { "OMAN", "OM" }, + { "PAKISTAN", "PK" }, + { "PALAU", "PW" }, + { "PALESTINIAN TERRITORY, OCCUPIED", "PS" }, + { "PANAMA", "PA" }, + { "PAPUA NEW GUINEA", "PG" }, + { "PARAGUAY", "PY" }, + { "PERU", "PE" }, + { "PHILIPPINES", "PH" }, + { "PITCAIRN", "PN" }, + { "POLAND", "PL" }, + { "PORTUGAL", "PT" }, + { "PUERTO RICO", "PR" }, + { "QATAR", "QA" }, + { "REUNION", "RE" }, + { "ROMANIA", "RO" }, + { "RUSSIAN FEDERATION", "RU" }, + { "RWANDA", "RW" }, + { "SAINT HELENA", "SH" }, + { "SAINT KITTS AND NEVIS", "KN" }, + { "SAINT LUCIA", "LC" }, + { "SAINT PIERRE AND MIQUELON", "PM" }, + { "SAINT VINCENT AND THE GRENADINES", "VC" }, + { "SAMOA", "WS" }, + { "SAN MARINO", "SM" }, + { "SAO TOME AND PRINCIPE", "ST" }, + { "SAUDI ARABIA", "SA" }, + { "SENEGAL", "SN" }, + { "SEYCHELLES", "SC" }, + { "SIERRA LEONE", "SL" }, + { "SINGAPORE", "SG" }, + { "SLOVAKIA", "SK" }, + { "SLOVENIA", "SI" }, + { "SOLOMON ISLANDS", "SB" }, + { "SOMALIA", "SO" }, + { "SOUTH AFRICA", "ZA" }, + { "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS", "GS" }, + { "SPAIN", "ES" }, + { "SRI LANKA", "LK" }, + { "SUDAN", "SD" }, + { "SURINAME", "SR" }, + { "SVALBARD AND JAN MAYEN", "SJ" }, + { "SWAZILAND", "SZ" }, + { "SWEDEN", "SE" }, + { "SWITZERLAND", "CH" }, + { "SYRIAN ARAB REPUBLIC", "SY" }, + { "TAIWAN", "TW" }, + { "TAJIKISTAN", "TJ" }, + { "TANZANIA, UNITED REPUBLIC OF", "TZ" }, + { "THAILAND", "TH" }, + { "TIMOR-LESTE", "TL" }, + { "TOGO", "TG" }, + { "TOKELAU", "TK" }, + { "TONGA", "TO" }, + { "TRINIDAD AND TOBAGO", "TT" }, + { "TUNISIA", "TN" }, + { "TURKEY", "TR" }, + { "TURKMENISTAN", "TM" }, + { "TURKS AND CAICOS ISLANDS", "TC" }, + { "TUVALU", "TV" }, + { "UGANDA", "UG" }, + { "UKRAINE", "UA" }, + { "UNITED ARAB EMIRATES", "AE" }, + { "UNITED KINGDOM", "GB" }, + { "UNITED STATES", "US" }, + { "UNITED STATES MINOR OUTLYING ISLANDS", "UM" }, + { "URUGUAY", "UY" }, + { "UZBEKISTAN", "UZ" }, + { "VANUATU", "VU" }, + { "VENEZUELA", "VE" }, + { "VIET NAM", "VN" }, + { "VIRGIN ISLANDS, BRITISH", "VG" }, + { "VIRGIN ISLANDS, U.S.", "VI" }, + { "WALLIS AND FUTUNA", "WF" }, + { "WESTERN SAHARA", "EH" }, + { "YEMEN", "YE" }, + { "YUGOSLAVIA", "YU" }, + { "ZAMBIA", "ZM" }, + { "ZIMBABWE", "ZW" } +}; diff --git a/src/language_impl_plurals.h b/src/language_impl_plurals.h new file mode 100644 index 0000000..f381b0b --- /dev/null +++ b/src/language_impl_plurals.h @@ -0,0 +1,162 @@ +// Code generated with scripts/extract-plural-forms.py begins here + +{ "af" , "nplurals=2; plural=(n != 1);" }, +{ "ak" , "nplurals=2; plural=(n > 1);" }, +{ "aln" , "nplurals=2; plural=(n != 1);" }, +{ "am" , "nplurals=2; plural=(n > 1);" }, +{ "am_ET", "nplurals=2; plural=(n != 1);" }, +{ "an" , "nplurals=2; plural=(n != 1);" }, +{ "ar" , "nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);" }, +{ "arn" , "nplurals=2; plural=(n > 1);" }, +{ "as" , "nplurals=2; plural=(n != 1);" }, +{ "ast" , "nplurals=2; plural=(n != 1);" }, +{ "az" , "nplurals=2; plural=(n != 1);" }, +{ "bal" , "nplurals=2; plural=(n != 1);" }, +// There are 4 forms according to +// http://www.unicode.org/cldr/charts/supplemental/language_plural_rules.html#be +// but the 4th one is not used for natural numbers +{ "be" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "bg" , "nplurals=2; plural=(n != 1);" }, +{ "bn" , "nplurals=2; plural=(n != 1);" }, +{ "bo" , "nplurals=1; plural=0;" }, +{ "br" , "nplurals=2; plural=(n > 1);" }, +{ "brx" , "nplurals=2; plural=(n != 1);" }, +{ "bs" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "ca" , "nplurals=2; plural=(n != 1);" }, +{ "crh" , "nplurals=1; plural=0;" }, +{ "cs" , "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }, +{ "csb" , "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" }, +{ "cy" , "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" }, +{ "da" , "nplurals=2; plural=(n != 1);" }, +{ "de" , "nplurals=2; plural=(n != 1);" }, +{ "dz" , "nplurals=1; plural=0;" }, +{ "el" , "nplurals=2; plural=(n != 1);" }, +{ "en" , "nplurals=2; plural=(n != 1);" }, +{ "eo" , "nplurals=2; plural=(n != 1);" }, +{ "es" , "nplurals=2; plural=(n != 1);" }, +{ "et" , "nplurals=2; plural=(n != 1);" }, +{ "eu" , "nplurals=2; plural=(n != 1);" }, +{ "fa" , "nplurals=1; plural=0;" }, +{ "fi" , "nplurals=2; plural=(n != 1);" }, +{ "fil" , "nplurals=2; plural=(n > 1);" }, +{ "fo" , "nplurals=2; plural=(n != 1);" }, +{ "fr" , "nplurals=2; plural=(n > 1);" }, +{ "frp" , "nplurals=2; plural=(n > 1);" }, +{ "fur" , "nplurals=2; plural=(n != 1);" }, +{ "fy" , "nplurals=2; plural=(n != 1);" }, +{ "ga" , "nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" }, +// Don't change this blindly: this is verified correct form for Scottish Gaelic: +{ "gd" , "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;" }, +{ "gl" , "nplurals=2; plural=(n != 1);" }, +{ "gu" , "nplurals=2; plural=(n != 1);" }, +{ "gun" , "nplurals=2; plural=(n > 1);" }, +{ "ha" , "nplurals=2; plural=(n != 1);" }, +{ "he" , "nplurals=2; plural=(n != 1);" }, +{ "hi" , "nplurals=2; plural=(n != 1);" }, +{ "hne" , "nplurals=2; plural=(n != 1);" }, +{ "hr" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "hsb" , "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }, +{ "ht" , "nplurals=2; plural=(n != 1);" }, +{ "hu" , "nplurals=2; plural=(n != 1);" }, +{ "hy" , "nplurals=2; plural=(n != 1);" }, +{ "ia" , "nplurals=2; plural=(n != 1);" }, +{ "id" , "nplurals=1; plural=0;" }, +{ "ig" , "nplurals=2; plural=(n != 1);" }, +{ "ilo" , "nplurals=2; plural=(n != 1);" }, +{ "is" , "nplurals=2; plural=(n != 1);" }, +{ "it" , "nplurals=2; plural=(n != 1);" }, +{ "ja" , "nplurals=1; plural=0;" }, +{ "jv" , "nplurals=2; plural=(n != 1);" }, +{ "ka" , "nplurals=1; plural=0;" }, +{ "kk" , "nplurals=1; plural=0;" }, +{ "km" , "nplurals=1; plural=0;" }, +{ "kn" , "nplurals=1; plural=0;" }, +{ "ko" , "nplurals=1; plural=0;" }, +{ "ks" , "nplurals=2; plural=(n != 1);" }, +{ "ku" , "nplurals=2; plural=(n != 1);" }, +{ "kw" , "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;" }, +{ "ky" , "nplurals=1; plural=0;" }, +{ "la" , "nplurals=2; plural=(n != 1);" }, +{ "lb" , "nplurals=2; plural=(n != 1);" }, +{ "li" , "nplurals=2; plural=(n != 1);" }, +{ "ln" , "nplurals=2; plural=(n > 1);" }, +{ "lo" , "nplurals=1; plural=0;" }, +{ "lt" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "lv" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }, +{ "mai" , "nplurals=2; plural=(n != 1);" }, +{ "mg" , "nplurals=2; plural=(n > 1);" }, +{ "mi" , "nplurals=2; plural=(n > 1);" }, +{ "mk" , "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }, +{ "ml" , "nplurals=2; plural=(n != 1);" }, +{ "mn" , "nplurals=2; plural=(n != 1);" }, +{ "mr" , "nplurals=2; plural=(n != 1);" }, +{ "ms" , "nplurals=1; plural=0;" }, +{ "mt" , "nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);" }, +{ "my" , "nplurals=1; plural=0;" }, +{ "nah" , "nplurals=2; plural=(n != 1);" }, +{ "nap" , "nplurals=2; plural=(n != 1);" }, +{ "nb" , "nplurals=2; plural=(n != 1);" }, +{ "nds" , "nplurals=2; plural=(n != 1);" }, +{ "ne" , "nplurals=2; plural=(n != 1);" }, +{ "nl" , "nplurals=2; plural=(n != 1);" }, +{ "nn" , "nplurals=2; plural=(n != 1);" }, +{ "no" , "nplurals=2; plural=(n != 1);" }, +{ "nr" , "nplurals=1; plural=0;" }, +{ "nso" , "nplurals=2; plural=(n > 1);" }, +{ "oc" , "nplurals=2; plural=(n > 1);" }, +{ "or" , "nplurals=2; plural=(n != 1);" }, +{ "pa" , "nplurals=2; plural=(n != 1);" }, +{ "pap" , "nplurals=2; plural=(n != 1);" }, +{ "pl" , "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "pms" , "nplurals=2; plural=(n != 1);" }, +{ "ps" , "nplurals=2; plural=(n != 1);" }, +{ "pt" , "nplurals=2; plural=(n != 1);" }, +{ "pt_BR", "nplurals=2; plural=(n > 1);" }, +{ "rm" , "nplurals=2; plural=(n != 1);" }, +{ "ro" , "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" }, +{ "ru" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "rw" , "nplurals=2; plural=(n != 1);" }, +{ "sc" , "nplurals=2; plural=(n != 1);" }, +{ "sco" , "nplurals=2; plural=(n != 1);" }, +{ "se" , "nplurals=2; plural=(n != 1);" }, +{ "si" , "nplurals=2; plural=(n != 1);" }, +{ "sk" , "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }, +{ "sl" , "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }, +{ "sm" , "nplurals=1; plural=0;" }, +{ "sn" , "nplurals=2; plural=(n != 1);" }, +{ "so" , "nplurals=2; plural=(n != 1);" }, +{ "son" , "nplurals=1; plural=0;" }, +{ "sq" , "nplurals=2; plural=(n != 1);" }, +{ "sr" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "st" , "nplurals=2; plural=(n != 1);" }, +{ "su" , "nplurals=1; plural=0;" }, +{ "sv" , "nplurals=2; plural=(n != 1);" }, +{ "sw" , "nplurals=2; plural=(n != 1);" }, +{ "ta" , "nplurals=2; plural=(n != 1);" }, +{ "te" , "nplurals=2; plural=(n != 1);" }, +{ "tg" , "nplurals=2; plural=(n != 1);" }, +{ "th" , "nplurals=1; plural=0;" }, +{ "ti" , "nplurals=2; plural=(n > 1);" }, +{ "tk" , "nplurals=2; plural=(n != 1);" }, +{ "tl" , "nplurals=2; plural=(n > 1);" }, +{ "tlh" , "nplurals=2; plural=(n > 1);" }, +{ "to" , "nplurals=1; plural=0;" }, +{ "tr" , "nplurals=2; plural=(n != 1);" }, +{ "tt" , "nplurals=1; plural=0;" }, +{ "udm" , "nplurals=1; plural=0;" }, +{ "ug" , "nplurals=1; plural=0;" }, +{ "uk" , "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }, +{ "ur" , "nplurals=2; plural=(n != 1);" }, +{ "uz" , "nplurals=1; plural=0;" }, +{ "ve" , "nplurals=2; plural=(n != 1);" }, +{ "vi" , "nplurals=1; plural=0;" }, +{ "vls" , "nplurals=2; plural=(n != 1);" }, +{ "wa" , "nplurals=2; plural=(n > 1);" }, +{ "wo" , "nplurals=1; plural=0;" }, +{ "xh" , "nplurals=2; plural=(n != 1);" }, +{ "yi" , "nplurals=2; plural=(n != 1);" }, +{ "yo" , "nplurals=2; plural=(n != 1);" }, +{ "zh" , "nplurals=1; plural=0;" }, +{ "zu" , "nplurals=2; plural=(n != 1);" } + +// Code generated with scripts/extract-plural-forms.py ends here \ No newline at end of file diff --git a/src/languagectrl.cpp b/src/languagectrl.cpp new file mode 100644 index 0000000..958678c --- /dev/null +++ b/src/languagectrl.cpp @@ -0,0 +1,205 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "languagectrl.h" + +#include "hidpi.h" + +#include +#include +#include + +#ifdef __WXOSX__ +extern "C" { +#import "NSObject+REResponder.h" +} +#endif + +IMPLEMENT_DYNAMIC_CLASS(LanguageCtrl, wxComboBox) + +LanguageCtrl::LanguageCtrl(wxWindow *parent, wxWindowID winid, Language lang) + : wxComboBox(parent, winid) +{ + Init(lang); +} + +void LanguageCtrl::Init(Language lang) +{ + SetHint(_("Language Code or Name (e.g. en_GB)")); + + // wxGTK must have the value set before autocompletion to avoid annoying + // popups in some (hard to determine) cases. +#ifdef __WXGTK__ + if (lang.IsValid()) + SetValue(lang.FormatForRoundtrip()); +#endif + +#ifdef __WXOSX__ + for (auto x: Language::AllFormattedNames()) + Append(x); + NSComboBox *cb = (NSComboBox*) GetHandle(); + [cb setCompletes:YES]; + if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7) + { + // default completion is case-sensitive, we'd rather be case-insensitive, so plug in + // customized completedString: implementation + RESetBlock(cb.cell, @selector(completedString:), NO, nil, ^(NSComboBox *receiver, NSString *string) { + for (NSString *item in receiver.objectValues) { + if ([item compare:string + options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch + range:NSMakeRange(0, std::min([item length], [string length])) + locale:[NSLocale currentLocale]] == NSOrderedSame) + return item; + } + return (NSString*)nil; + }); + } +#else + static wxArrayString choices; + if (choices.empty()) + { + for (auto x: Language::AllFormattedNames()) + choices.push_back(x); + } + Set(choices); + AutoComplete(choices); +#endif + + m_inited = true; + + // ...but wxMSW requires the opposite, otherwise the text wouldn't appear. +#ifndef __WXGTK__ + if (lang.IsValid()) + SetValue(lang.FormatForRoundtrip()); +#endif +} + +void LanguageCtrl::SetLang(const Language& lang) +{ + if (!m_inited) + Init(lang); + else + SetValue(lang.FormatForRoundtrip()); +} + +Language LanguageCtrl::GetLang() const +{ + return Language::TryParse(GetValue().ToStdWstring()); +} + +#ifdef __WXMSW__ +wxSize LanguageCtrl::DoGetBestSize() const +{ + // wxComboBox's implementation is insanely slow, at least on MSW. + // Hardcode a value instead, it doesn't matter for Poedit's use anyway, + // this control's best size is not the determining factor. + return GetSizeFromTextSize(100); +} +#endif + + + +LanguageDialog::LanguageDialog(wxWindow *parent) + : wxDialog(parent, wxID_ANY, _("Translation Language")), + m_validatedLang(-1) +{ + auto lang = GetLastChosen(); + + auto sizer = new wxBoxSizer(wxVERTICAL); + + auto label = new wxStaticText(this, wxID_ANY, _("Language of the translation:")); + m_language = new LanguageCtrl(this, wxID_ANY, lang); + m_language->SetMinSize(wxSize(PX(300),-1)); + auto buttons = CreateButtonSizer(wxOK | wxCANCEL); + +#ifdef __WXOSX__ + sizer->AddSpacer(PX(10)); + sizer->Add(label, wxSizerFlags().PXBorderAll()); + sizer->Add(m_language, wxSizerFlags().Expand().PXDoubleBorder(wxLEFT|wxRIGHT)); + sizer->Add(buttons, wxSizerFlags().Expand()); +#else + sizer->AddSpacer(PX(10)); + sizer->Add(label, wxSizerFlags().PXDoubleBorder(wxLEFT|wxRIGHT)); + sizer->Add(m_language, wxSizerFlags().Expand().PXDoubleBorder(wxLEFT|wxRIGHT)); + sizer->Add(buttons, wxSizerFlags().Expand().PXBorderAll()); +#endif + + m_language->Bind(wxEVT_TEXT, [=](wxCommandEvent& e){ m_validatedLang = -1; e.Skip(); }); + m_language->Bind(wxEVT_COMBOBOX, [=](wxCommandEvent& e){ m_validatedLang = -1; e.Skip(); }); + + Bind(wxEVT_UPDATE_UI, + [=](wxUpdateUIEvent& e){ e.Enable(Validate()); }, + wxID_OK); + + SetSizerAndFit(sizer); + CenterOnParent(); + + m_language->SetFocus(); +#ifdef __WXOSX__ + // Workaround wx bug: http://trac.wxwidgets.org/ticket/9521 + m_language->SelectAll(); +#endif +} + +bool LanguageDialog::Validate() +{ + if (m_validatedLang == -1) + { + m_validatedLang = m_language->IsValid() ? 1 : 0; + } + + return m_validatedLang == 1; +} + +void LanguageDialog::EndModal(int retval) +{ + if (retval == wxID_OK) + { + SetLastChosen(GetLang()); + } + wxDialog::EndModal(retval); +} + + +void LanguageDialog::SetLang(const Language& lang) +{ + m_validatedLang = -1; + m_language->SetLang(lang); +} + +Language LanguageDialog::GetLastChosen() +{ + wxString langcode = wxConfigBase::Get()->Read("/last_translation_lang", ""); + Language lang; + if (!langcode.empty()) + lang = Language::TryParse(langcode.ToStdWstring()); + return lang; +} + +void LanguageDialog::SetLastChosen(Language lang) +{ + wxConfigBase::Get()->Write("/last_translation_lang", lang.Code().c_str()); +} + diff --git a/src/languagectrl.h b/src/languagectrl.h new file mode 100644 index 0000000..2325b37 --- /dev/null +++ b/src/languagectrl.h @@ -0,0 +1,83 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_languagectrl_h +#define Poedit_languagectrl_h + +#include +#include + +#include "language.h" + +/// Control for editing languages nicely +class LanguageCtrl : public wxComboBox +{ +public: + LanguageCtrl() : m_inited(false) {} + LanguageCtrl(wxWindow *parent, wxWindowID winid = wxID_ANY, Language lang = Language()); + + void SetLang(const Language& lang); + Language GetLang() const; + + bool IsValid() const + { + return GetLang().IsValid(); + } + +#ifdef __WXMSW__ + wxSize DoGetBestSize() const; +#endif + +private: + void Init(Language lang); + + bool m_inited; + + DECLARE_DYNAMIC_CLASS(LanguageCtrl) +}; + + +/// A dialog for choosing language for a (new) catalog. +class LanguageDialog : public wxDialog +{ +public: + LanguageDialog(wxWindow *parent); + + void SetLang(const Language& lang); + + Language GetLang() const { return m_language->GetLang(); } + + virtual bool Validate(); + virtual void EndModal(int retval); + + static Language GetLastChosen(); + static void SetLastChosen(Language lang); + +private: + LanguageCtrl *m_language; + int m_validatedLang; +}; + +#endif // Poedit_languagectrl_h diff --git a/src/logcapture.h b/src/logcapture.h new file mode 100644 index 0000000..ccae43a --- /dev/null +++ b/src/logcapture.h @@ -0,0 +1,69 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_logcapture_h +#define Poedit_logcapture_h + +#include +#include + +// Capture all wx log output into a text buffer and suppress normal output: +class LogCapture : public wxLogInterposer +{ +public: + LogCapture(wxLogLevel level = wxLOG_Info) + { + PassMessages(false); + m_oldLevel = wxLog::GetLogLevel(); + m_verbose = wxLog::GetVerbose(); + + wxLog::SetLogLevel(level); + wxLog::SetVerbose(); + } + + ~LogCapture() + { + wxLog::SetLogLevel(m_oldLevel); + wxLog::SetVerbose(m_verbose); + } + + virtual void DoLogTextAtLevel(wxLogLevel, const wxString& msg) + { + Append(msg); + } + + void Append(const wxString& msg) + { + text << msg << "\n"; + } + + wxString text; + +private: + wxLogLevel m_oldLevel; + bool m_verbose; +}; + +#endif // Poedit_logcapture_h diff --git a/src/main_toolbar.h b/src/main_toolbar.h new file mode 100644 index 0000000..16278b2 --- /dev/null +++ b/src/main_toolbar.h @@ -0,0 +1,51 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_main_toolbar_h +#define Poedit_main_toolbar_h + +#include +#include + +/// Abstract interface to the app's main toolbar. +class MainToolbar +{ +public: + virtual ~MainToolbar() {} + + virtual bool IsFuzzy() const = 0; + virtual void SetFuzzy(bool on) = 0; + + virtual void EnableSyncWithCrowdin(bool on) = 0; + + static std::unique_ptr Create(wxFrame *parent); + +protected: + static std::unique_ptr CreateWX(wxFrame *parent); + + MainToolbar() {} +}; + +#endif // Poedit_main_toolbar_h diff --git a/src/manager.cpp b/src/manager.cpp new file mode 100644 index 0000000..dfaa63d --- /dev/null +++ b/src/manager.cpp @@ -0,0 +1,501 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __WXMSW__ +#include +#endif + +#include "catalog.h" +#include "edapp.h" +#include "edframe.h" +#include "hidpi.h" +#include "manager.h" +#include "progressinfo.h" +#include "utility.h" + + +ManagerFrame *ManagerFrame::ms_instance = NULL; + +/*static*/ ManagerFrame *ManagerFrame::Create() +{ + if (!ms_instance) + { + ms_instance = new ManagerFrame; + ms_instance->Show(true); + } + return ms_instance; +} + +ManagerFrame::ManagerFrame() : + wxFrame(NULL, -1, _("Poedit - Catalogs manager"), + wxDefaultPosition, wxDefaultSize, + wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE, + "manager") +{ +#if defined(__WXGTK__) + wxIconBundle appicons; + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(16,16))); + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(32,32))); + appicons.AddIcon(wxArtProvider::GetIcon("poedit", wxART_FRAME_ICON, wxSize(48,48))); + SetIcons(appicons); +#elif defined(__WXMSW__) + SetIcons(wxIconBundle(wxStandardPaths::Get().GetResourcesDir() + "\\Resources\\Poedit.ico")); +#endif + + ms_instance = this; + + auto tb = wxXmlResource::Get()->LoadToolBar(this, "manager_toolbar"); + (void)tb; +#ifdef __WXMSW__ + // De-uglify the toolbar a bit on Windows 10: + if (IsWindows10OrGreater()) + { + const wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive(); + if (theme) + { + wxUxThemeHandle hTheme(tb, L"ExplorerMenu::Toolbar"); + tb->SetBackgroundColour(wxRGBToColour(theme->GetThemeSysColor(hTheme, COLOR_WINDOW))); + } + } +#endif + + wxPanel *panel = wxXmlResource::Get()->LoadPanel(this, "manager_panel"); + + m_listPrj = XRCCTRL(*panel, "prj_list", wxListBox); + m_listCat = XRCCTRL(*panel, "prj_files", wxListCtrl); + m_splitter = XRCCTRL(*panel, "manager_splitter", wxSplitterWindow); + + wxImageList *list = new wxImageList(PX(16), PX(16)); + list->Add(wxArtProvider::GetBitmap("poedit-status-cat-no")); + list->Add(wxArtProvider::GetBitmap("poedit-status-cat-mid")); + list->Add(wxArtProvider::GetBitmap("poedit-status-cat-ok")); + m_listCat->AssignImageList(list, wxIMAGE_LIST_SMALL); + + m_curPrj = -1; + + int last = (int)wxConfig::Get()->Read("manager_last_selected", (long)0); + + // FIXME: do this in background (here and elsewhere) + UpdateListPrj(last); + if (m_listPrj->GetCount() > 0) + UpdateListCat(last); + + RestoreWindowState(this, wxSize(PX(400), PX(300))); + + m_splitter->SetSashPosition((int)wxConfig::Get()->Read("manager_splitter", PX(200))); +} + + + +ManagerFrame::~ManagerFrame() +{ + SaveWindowState(this); + + wxConfigBase *cfg = wxConfig::Get(); + + int sel = m_listPrj->GetSelection(); + if (sel != -1) + { + cfg->Write("manager_last_selected", + (long)m_listPrj->GetClientData(sel)); + } + + wxConfig::Get()->Write("manager_splitter", (long)m_splitter->GetSashPosition()); + + ms_instance = NULL; +} + + +void ManagerFrame::UpdateListPrj(int select) +{ + wxConfigBase *cfg = wxConfig::Get(); + long max = cfg->Read("Manager/max_project_num", (long)0) + 1; + wxString key, name; + + m_listPrj->Clear(); + int item = 0; + for (int i = 0; i <= max; i++) + { + key.Printf("Manager/project_%i/Name", i); + name = cfg->Read(key, wxEmptyString); + if (!name.empty()) + { + m_listPrj->Append(name, (void*)(wxIntPtr)i); + if (i == select) + { + m_listPrj->SetSelection(item); + m_curPrj = select; + UpdateListCat(m_curPrj); + select = -1; + } + item++; + } + } +} + + +static void AddCatalogToList(wxListCtrl *list, int i, int id, const wxString& file) +{ + wxConfigBase *cfg = wxConfig::Get(); + int all = 0, fuzzy = 0, untranslated = 0, badtokens = 0; + wxString lastmodified; + time_t modtime; + wxString key; + wxString file2(file); + file2.Replace("/", "_"); + file2.Replace("\\", "_"); + // FIXME: move cache to cache file and out of *config* file! + key.Printf("Manager/project_%i/FilesCache/%s/", id, file2.c_str()); + + modtime = cfg->Read(key + "timestamp", (long)0); + + if (modtime == wxFileModificationTime(file)) + { + all = (int)cfg->Read(key + "all", (long)0); + fuzzy = (int)cfg->Read(key + "fuzzy", (long)0); + badtokens = (int)cfg->Read(key + "badtokens", (long)0); + untranslated = (int)cfg->Read(key + "untranslated", (long)0); + lastmodified = cfg->Read(key + "lastmodified", "?"); + } + else + { + // suppress error messages, we don't mind if the catalog is corrupted + // FIXME: *do* indicate error somehow + wxLogNull nullLog; + + // FIXME: don't re-load the catalog if it's already loaded in the + // editor, reuse loaded instance + Catalog cat(file); + cat.GetStatistics(&all, &fuzzy, &badtokens, &untranslated, NULL); + modtime = wxFileModificationTime(file); + lastmodified = cat.Header().RevisionDate; + cfg->Write(key + "timestamp", (long)modtime); + cfg->Write(key + "all", (long)all); + cfg->Write(key + "fuzzy", (long)fuzzy); + cfg->Write(key + "badtokens", (long)badtokens); + cfg->Write(key + "untranslated", (long)untranslated); + cfg->Write(key + "lastmodified", lastmodified); + } + + int icon; + if (fuzzy+untranslated+badtokens == 0) icon = 2; + else if ((double)all / (fuzzy+untranslated+badtokens) <= 3) icon = 0; + else icon = 1; + + wxString tmp; + // FIXME: don't put full filename there, remove common prefix (of all + // directories in project's settings) + list->InsertItem(i, file, icon); + tmp.Printf("%i", all); + list->SetItem(i, 1, tmp); + tmp.Printf("%i", untranslated); + list->SetItem(i, 2, tmp); + tmp.Printf("%i", fuzzy); + list->SetItem(i, 3, tmp); + tmp.Printf("%i", badtokens); + list->SetItem(i, 4, tmp); + list->SetItem(i, 5, lastmodified); +} + +void ManagerFrame::UpdateListCat(int id) +{ + wxBusyCursor bcur; + + if (id == -1) id = m_curPrj; + + wxConfigBase *cfg = wxConfig::Get(); + wxString key; + key.Printf("Manager/project_%i/", id); + + wxString dirs = cfg->Read(key + "Dirs", wxEmptyString); + wxStringTokenizer tkn(dirs, wxPATH_SEP); + + m_catalogs.Clear(); + while (tkn.HasMoreTokens()) + wxDir::GetAllFiles(tkn.GetNextToken(), &m_catalogs, + "*.po", wxDIR_FILES | wxDIR_DIRS); + + m_catalogs.Sort(); + + m_listCat->Freeze(); + + m_listCat->ClearAll(); + m_listCat->InsertColumn(0, _("Catalog")); + m_listCat->InsertColumn(1, _("Total")); + m_listCat->InsertColumn(2, _("Untrans")); + m_listCat->InsertColumn(3, _("Fuzzy")); + m_listCat->InsertColumn(4, _("Bad Tokens")); + m_listCat->InsertColumn(5, _("Last modified")); + + // FIXME: this is time-consuming, it should be done in parallel on + // multi-core/SMP systems + for (int i = 0; i < (int)m_catalogs.GetCount(); i++) + AddCatalogToList(m_listCat, i, id, m_catalogs[i]); + + m_listCat->SetColumnWidth(0, wxLIST_AUTOSIZE); + m_listCat->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER); + m_listCat->SetColumnWidth(2, wxLIST_AUTOSIZE_USEHEADER); + m_listCat->SetColumnWidth(3, wxLIST_AUTOSIZE_USEHEADER); + m_listCat->SetColumnWidth(4, wxLIST_AUTOSIZE_USEHEADER); + m_listCat->SetColumnWidth(5, wxLIST_AUTOSIZE); + + m_listCat->Thaw(); +} + + +class ProjectDlg : public wxDialog +{ + protected: + DECLARE_EVENT_TABLE() + void OnBrowse(wxCommandEvent& event); +}; + +BEGIN_EVENT_TABLE(ProjectDlg, wxDialog) + EVT_BUTTON(XRCID("adddir"), ProjectDlg::OnBrowse) +END_EVENT_TABLE() + +void ProjectDlg::OnBrowse(wxCommandEvent&) +{ + wxDirDialog dlg(this, _("Select directory")); + if (dlg.ShowModal() == wxID_OK) + { + wxArrayString a; + wxEditableListBox *l = XRCCTRL(*this, "prj_dirs", wxEditableListBox); + l->GetStrings(a); + a.Add(dlg.GetPath()); + l->SetStrings(a); + } +} + +template +void ManagerFrame::EditProject(int id, TFunctor completionHandler) +{ + wxConfigBase *cfg = wxConfig::Get(); + wxString key; + key.Printf("Manager/project_%i/", id); + + wxWindowPtr dlg(new ProjectDlg); + wxXmlResource::Get()->LoadDialog(dlg.get(), this, "manager_prj_dlg"); + wxEditableListBox *prj_dirs = new wxEditableListBox(dlg.get(), XRCID("prj_dirs"), _("Directories:")); + wxXmlResource::Get()->AttachUnknownControl("prj_dirs", prj_dirs); + + XRCCTRL(*dlg, "prj_name", wxTextCtrl)->SetValue(cfg->Read(key + "Name")); + + { + wxString dirs = cfg->Read(key + "Dirs"); + wxArrayString adirs; + wxStringTokenizer tkn(dirs, wxPATH_SEP); + while (tkn.HasMoreTokens()) + adirs.Add(tkn.GetNextToken()); + prj_dirs->SetStrings(adirs); + } + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode == wxID_OK) + { + wxString dirs; + wxArrayString adirs; + + cfg->Write(key + "Name", + XRCCTRL(*dlg, "prj_name", wxTextCtrl)->GetValue()); + prj_dirs->GetStrings(adirs); + if (adirs.GetCount() > 0) + dirs = adirs[0]; + for (size_t i = 1; i < adirs.GetCount(); i++) + dirs << wxPATH_SEP << adirs[i]; + cfg->Write(key + "Dirs", dirs); + + UpdateListPrj(id); + UpdateListCat(id); + } + completionHandler(retcode == wxID_OK); + }); +} + +void ManagerFrame::DeleteProject(int id) +{ + wxString key; + + key.Printf("Manager/project_%i", id); + wxConfig::Get()->DeleteGroup(key); + UpdateListPrj(); + + if (id == m_curPrj) + { + m_listCat->ClearAll(); + m_curPrj = -1; + } +} + +void ManagerFrame::NotifyFileChanged(const wxString& /*catalog*/) +{ + // VS: We must do full update even if the file 'catalog' is not in + // m_catalogs. The reason is simple: the user might use SaveAs + // function and save new file in one of directories that + // this project matches... + UpdateListCat(); +} + + +BEGIN_EVENT_TABLE(ManagerFrame, wxFrame) + EVT_MENU (XRCID("prj_new"), ManagerFrame::OnNewProject) + EVT_MENU (XRCID("prj_edit"), ManagerFrame::OnEditProject) + EVT_MENU (XRCID("prj_delete"), ManagerFrame::OnDeleteProject) + EVT_MENU (XRCID("prj_update"), ManagerFrame::OnUpdateProject) + EVT_LISTBOX (XRCID("prj_list"), ManagerFrame::OnSelectProject) + EVT_LIST_ITEM_ACTIVATED (XRCID("prj_files"), ManagerFrame::OnOpenCatalog) + EVT_MENU (wxID_CLOSE, ManagerFrame::OnCloseCmd) +END_EVENT_TABLE() + + +void ManagerFrame::OnNewProject(wxCommandEvent&) +{ + wxConfigBase *cfg = wxConfig::Get(); + long max = cfg->Read("Manager/max_project_num", (long)0) + 1; + wxString key; + for (int i = 0; i <= max; i++) + { + key.Printf("Manager/project_%i/Name", i); + if (cfg->Read(key, wxEmptyString).empty()) + { + m_listPrj->Append(_(""), (void*)(wxIntPtr)i); + m_curPrj = i; + EditProject(i, [=](bool added){ + if (added) + { + if (i == max) + cfg->Write("Manager/max_project_num", (long)max); + } + else + { + DeleteProject(i); + } + }); + return; + } + } +} + + +void ManagerFrame::OnEditProject(wxCommandEvent&) +{ + int sel = m_listPrj->GetSelection(); + if (sel == -1) return; + EditProject((int)(wxIntPtr)m_listPrj->GetClientData(sel), [](bool){}); +} + + +void ManagerFrame::OnDeleteProject(wxCommandEvent&) +{ + int sel = m_listPrj->GetSelection(); + if (sel == -1) return; + if (wxMessageBox(_("Do you want to delete the project?"), + _("Confirmation"), wxYES_NO | wxICON_QUESTION, this) == wxYES) + DeleteProject((int)(wxIntPtr)m_listPrj->GetClientData(sel)); +} + + +void ManagerFrame::OnSelectProject(wxCommandEvent&) +{ + int sel = m_listPrj->GetSelection(); + if (sel == -1) return; + m_curPrj = (int)(wxIntPtr)m_listPrj->GetClientData(sel); + UpdateListCat(m_curPrj); +} + + +void ManagerFrame::OnUpdateProject(wxCommandEvent&) +{ + int sel = m_listPrj->GetSelection(); + if (sel == -1) return; + + if (wxMessageBox(_("Do you really want to do mass update of\nall catalogs in this project?"), + _("Confirmation"), wxYES_NO | wxICON_QUESTION, this) == wxYES) + { + wxBusyCursor bcur; + + for (size_t i = 0; i < m_catalogs.GetCount(); i++) + { + // FIXME: there should be only one progress bar for _all_ + // catalogs, it shouldn't restart on next catalog + ProgressInfo pinfo(this, _("Updating catalog")); + + wxString f = m_catalogs[i]; + PoeditFrame *fr = PoeditFrame::Find(f); + if (fr) + { + fr->UpdateCatalog(); + } + else + { + Catalog cat(f); + UpdateResultReason reason; + cat.Update(&pinfo, /*summary=*/false, reason); + int validation_errors = 0; + Catalog::CompilationStatus mo_status; + cat.Save(f, false, validation_errors, mo_status); + } + } + + UpdateListCat(); + } +} + + +void ManagerFrame::OnOpenCatalog(wxListEvent& event) +{ + PoeditFrame *f = PoeditFrame::Create(m_catalogs[event.GetIndex()]); + if (f) + f->Raise(); +} + + +void ManagerFrame::OnCloseCmd(wxCommandEvent&) +{ + Close(); +} diff --git a/src/manager.h b/src/manager.h new file mode 100644 index 0000000..409f26a --- /dev/null +++ b/src/manager.h @@ -0,0 +1,94 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _MANAGER_H_ +#define _MANAGER_H_ + +#include +#include + +class WXDLLIMPEXP_FWD_CORE wxListCtrl; +class WXDLLIMPEXP_FWD_CORE wxListBox; +class WXDLLIMPEXP_FWD_CORE wxSplitterWindow; + +class Catalog; + +/** ManagerFrame provides a convenient way to manage PO catalogs. + The frame contains two lists: a list of projects and list of catalogs + in active project, together with their statistics. + */ +class ManagerFrame : public wxFrame +{ + public: + /// Creates instance of manager or returns pointer to existing one. + static ManagerFrame* Create(); + /** Returns pointer to existing instance or NULL if there's no one. + (I.e. unlike Create, this one doesn't create a new instance.) + */ + static ManagerFrame* Get() { return ms_instance; } + + /** Used to notify the manager that one of files changed and it + has to update the list control. + */ + void NotifyFileChanged(const wxString& catalog); + + private: + ManagerFrame(); + ~ManagerFrame(); + + /** Pops up project settings dialog for project #id. + \return false if user pressed Cancel, true otherwise + */ + template + void EditProject(int id, TFunctor completionHandler); + /// Deletes project + void DeleteProject(int id); + /** Updates projects list + \param select id of project to be selected + */ + void UpdateListPrj(int select = 0); + /// Updates catalogs list for given project + void UpdateListCat(int id = -1); + + DECLARE_EVENT_TABLE() + void OnNewProject(wxCommandEvent& event); + void OnEditProject(wxCommandEvent& event); + void OnDeleteProject(wxCommandEvent& event); + void OnUpdateProject(wxCommandEvent& event); + void OnSelectProject(wxCommandEvent& event); + void OnOpenCatalog(wxListEvent& event); + void OnCloseCmd(wxCommandEvent& event); + + wxListCtrl *m_listCat; + wxListBox *m_listPrj; + wxSplitterWindow *m_splitter; + wxArrayString m_catalogs; + int m_curPrj; + + static ManagerFrame *ms_instance; +}; + + +#endif // _EDFRAME_H_ diff --git a/src/pluralforms/COPYING b/src/pluralforms/COPYING new file mode 100644 index 0000000..c91deed --- /dev/null +++ b/src/pluralforms/COPYING @@ -0,0 +1,53 @@ + wxWindows Library Licence, Version 3 + ==================================== + + Copyright (c) 1998 Julian Smart, Robert Roebling et al + + Everyone is permitted to copy and distribute verbatim copies + of this licence document, but changing it is not allowed. + + WXWINDOWS LIBRARY LICENCE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public Licence as published by + the Free Software Foundation; either version 2 of the Licence, or (at + your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library + General Public Licence for more details. + + You should have received a copy of the GNU Library General Public Licence + along with this software, usually in a file named COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA. + + EXCEPTION NOTICE + + 1. As a special exception, the copyright holders of this library give + permission for additional uses of the text contained in this release of + the library as licenced under the wxWindows Library Licence, applying + either version 3 of the Licence, or (at your option) any later version of + the Licence as published by the copyright holders of version 3 of the + Licence document. + + 2. The exception is that you may use, copy, link, modify and distribute + under the user's own terms, binary object code versions of works based + on the Library. + + 3. If you copy code from files distributed under the terms of the GNU + General Public Licence or the GNU Library General Public Licence into a + copy of this library, as this licence permits, the exception does not + apply to the code that you add in this way. To avoid misleading anyone as + to the status of such modified files, you must delete this exception + notice from such code and/or adjust the licensing conditions notice + accordingly. + + 4. If you write modifications of your own for this library, it is your + choice whether to permit this exception to apply to your modifications. + If you do not wish that, you must delete the exception notice from such + code and/or adjust the licensing conditions notice accordingly. + + diff --git a/src/pluralforms/pl_evaluate.cpp b/src/pluralforms/pl_evaluate.cpp new file mode 100644 index 0000000..9a1511a --- /dev/null +++ b/src/pluralforms/pl_evaluate.cpp @@ -0,0 +1,594 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/common/intl.cpp +// Purpose: Internationalization and localisation for wxWidgets +// Author: Vadim Zeitlin +// Modified by: Michael N. Filippov +// (2003/09/30 - PluralForms support) +// Created: 29/01/98 +// RCS-ID: $Id$ +// Copyright: (c) 1998 Vadim Zeitlin +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include + +#include "pl_evaluate.h" + +// ---------------------------------------------------------------------------- +// Plural forms parser +// ---------------------------------------------------------------------------- + + +PluralFormsScanner::PluralFormsScanner(const char* s) : m_s(s) +{ + nextToken(); +} + +bool PluralFormsScanner::nextToken() +{ + PluralFormsToken::Type type = PluralFormsToken::T_ERROR; + while (isspace(*m_s)) + { + ++m_s; + } + if (*m_s == 0) + { + type = PluralFormsToken::T_EOF; + } + else if (isdigit(*m_s)) + { + PluralFormsToken::Number number = *m_s++ - '0'; + while (isdigit(*m_s)) + { + number = number * 10 + (*m_s++ - '0'); + } + m_token.setNumber(number); + type = PluralFormsToken::T_NUMBER; + } + else if (isalpha(*m_s)) + { + const char* begin = m_s++; + while (isalnum(*m_s)) + { + ++m_s; + } + size_t size = m_s - begin; + if (size == 1 && memcmp(begin, "n", size) == 0) + { + type = PluralFormsToken::T_N; + } + else if (size == 6 && memcmp(begin, "plural", size) == 0) + { + type = PluralFormsToken::T_PLURAL; + } + else if (size == 8 && memcmp(begin, "nplurals", size) == 0) + { + type = PluralFormsToken::T_NPLURALS; + } + } + else if (*m_s == '=') + { + ++m_s; + if (*m_s == '=') + { + ++m_s; + type = PluralFormsToken::T_EQUAL; + } + else + { + type = PluralFormsToken::T_ASSIGN; + } + } + else if (*m_s == '>') + { + ++m_s; + if (*m_s == '=') + { + ++m_s; + type = PluralFormsToken::T_GREATER_OR_EQUAL; + } + else + { + type = PluralFormsToken::T_GREATER; + } + } + else if (*m_s == '<') + { + ++m_s; + if (*m_s == '=') + { + ++m_s; + type = PluralFormsToken::T_LESS_OR_EQUAL; + } + else + { + type = PluralFormsToken::T_LESS; + } + } + else if (*m_s == '%') + { + ++m_s; + type = PluralFormsToken::T_REMINDER; + } + else if (*m_s == '!' && m_s[1] == '=') + { + m_s += 2; + type = PluralFormsToken::T_NOT_EQUAL; + } + else if (*m_s == '&' && m_s[1] == '&') + { + m_s += 2; + type = PluralFormsToken::T_LOGICAL_AND; + } + else if (*m_s == '|' && m_s[1] == '|') + { + m_s += 2; + type = PluralFormsToken::T_LOGICAL_OR; + } + else if (*m_s == '?') + { + ++m_s; + type = PluralFormsToken::T_QUESTION; + } + else if (*m_s == ':') + { + ++m_s; + type = PluralFormsToken::T_COLON; + } else if (*m_s == ';') { + ++m_s; + type = PluralFormsToken::T_SEMICOLON; + } + else if (*m_s == '(') + { + ++m_s; + type = PluralFormsToken::T_LEFT_BRACKET; + } + else if (*m_s == ')') + { + ++m_s; + type = PluralFormsToken::T_RIGHT_BRACKET; + } + m_token.setType(type); + return type != PluralFormsToken::T_ERROR; +} + + + + +PluralFormsNodePtr::~PluralFormsNodePtr() +{ + delete m_p; +} +PluralFormsNode* PluralFormsNodePtr::release() +{ + PluralFormsNode *p = m_p; + m_p = NULL; + return p; +} +void PluralFormsNodePtr::reset(PluralFormsNode *p) +{ + if (p != m_p) + { + delete m_p; + m_p = p; + } +} + + +void PluralFormsNode::setNode(size_t i, PluralFormsNode* n) +{ + m_nodes[i].reset(n); +} + +PluralFormsNode* PluralFormsNode::releaseNode(size_t i) +{ + return m_nodes[i].release(); +} + +PluralFormsToken::Number +PluralFormsNode::evaluate(PluralFormsToken::Number n) const +{ + switch (token().type()) + { + // leaf + case PluralFormsToken::T_NUMBER: + return token().number(); + case PluralFormsToken::T_N: + return n; + // 2 args + case PluralFormsToken::T_EQUAL: + return node(0)->evaluate(n) == node(1)->evaluate(n); + case PluralFormsToken::T_NOT_EQUAL: + return node(0)->evaluate(n) != node(1)->evaluate(n); + case PluralFormsToken::T_GREATER: + return node(0)->evaluate(n) > node(1)->evaluate(n); + case PluralFormsToken::T_GREATER_OR_EQUAL: + return node(0)->evaluate(n) >= node(1)->evaluate(n); + case PluralFormsToken::T_LESS: + return node(0)->evaluate(n) < node(1)->evaluate(n); + case PluralFormsToken::T_LESS_OR_EQUAL: + return node(0)->evaluate(n) <= node(1)->evaluate(n); + case PluralFormsToken::T_REMINDER: + { + PluralFormsToken::Number number = node(1)->evaluate(n); + if (number != 0) + { + return node(0)->evaluate(n) % number; + } + else + { + return 0; + } + } + case PluralFormsToken::T_LOGICAL_AND: + return node(0)->evaluate(n) && node(1)->evaluate(n); + case PluralFormsToken::T_LOGICAL_OR: + return node(0)->evaluate(n) || node(1)->evaluate(n); + // 3 args + case PluralFormsToken::T_QUESTION: + return node(0)->evaluate(n) + ? node(1)->evaluate(n) + : node(2)->evaluate(n); + default: + return 0; + } +} + + +void PluralFormsCalculator::init(PluralFormsToken::Number nplurals, + PluralFormsNode* plural) +{ + m_nplurals = nplurals; + m_plural.reset(plural); +} + +int PluralFormsCalculator::evaluate(int n) const +{ + if (m_plural.get() == 0) + { + return 0; + } + PluralFormsToken::Number number = m_plural->evaluate(n); + if (number < 0 || number > m_nplurals) + { + return 0; + } + return number; +} + + +class PluralFormsParser +{ +public: + PluralFormsParser(PluralFormsScanner& scanner) : m_scanner(scanner) {} + bool parse(PluralFormsCalculator& rCalculator); + +private: + PluralFormsNode* parsePlural(); + // stops at T_SEMICOLON, returns 0 if error + PluralFormsScanner& m_scanner; + const PluralFormsToken& token() const; + bool nextToken(); + + PluralFormsNode* expression(); + PluralFormsNode* logicalOrExpression(); + PluralFormsNode* logicalAndExpression(); + PluralFormsNode* equalityExpression(); + PluralFormsNode* multiplicativeExpression(); + PluralFormsNode* relationalExpression(); + PluralFormsNode* pmExpression(); +}; + +bool PluralFormsParser::parse(PluralFormsCalculator& rCalculator) +{ + if (token().type() != PluralFormsToken::T_NPLURALS) + return false; + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_ASSIGN) + return false; + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_NUMBER) + return false; + PluralFormsToken::Number nplurals = token().number(); + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_SEMICOLON) + return false; + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_PLURAL) + return false; + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_ASSIGN) + return false; + if (!nextToken()) + return false; + PluralFormsNode* plural = parsePlural(); + if (plural == 0) + return false; + if (token().type() != PluralFormsToken::T_SEMICOLON) + return false; + if (!nextToken()) + return false; + if (token().type() != PluralFormsToken::T_EOF) + return false; + rCalculator.init(nplurals, plural); + return true; +} + +PluralFormsNode* PluralFormsParser::parsePlural() +{ + PluralFormsNode* p = expression(); + if (p == NULL) + { + return NULL; + } + PluralFormsNodePtr n(p); + if (token().type() != PluralFormsToken::T_SEMICOLON) + { + return NULL; + } + return n.release(); +} + +const PluralFormsToken& PluralFormsParser::token() const +{ + return m_scanner.token(); +} + +bool PluralFormsParser::nextToken() +{ + if (!m_scanner.nextToken()) + return false; + return true; +} + +PluralFormsNode* PluralFormsParser::expression() +{ + PluralFormsNode* p = logicalOrExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr n(p); + if (token().type() == PluralFormsToken::T_QUESTION) + { + PluralFormsNodePtr qn(new PluralFormsNode(token())); + if (!nextToken()) + { + return 0; + } + p = expression(); + if (p == 0) + { + return 0; + } + qn->setNode(1, p); + if (token().type() != PluralFormsToken::T_COLON) + { + return 0; + } + if (!nextToken()) + { + return 0; + } + p = expression(); + if (p == 0) + { + return 0; + } + qn->setNode(2, p); + qn->setNode(0, n.release()); + return qn.release(); + } + return n.release(); +} + +PluralFormsNode*PluralFormsParser::logicalOrExpression() +{ + PluralFormsNode* p = logicalAndExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr ln(p); + if (token().type() == PluralFormsToken::T_LOGICAL_OR) + { + PluralFormsNodePtr un(new PluralFormsNode(token())); + if (!nextToken()) + { + return 0; + } + p = logicalOrExpression(); + if (p == 0) + { + return 0; + } + PluralFormsNodePtr rn(p); // right + if (rn->token().type() == PluralFormsToken::T_LOGICAL_OR) + { + // see logicalAndExpression comment + un->setNode(0, ln.release()); + un->setNode(1, rn->releaseNode(0)); + rn->setNode(0, un.release()); + return rn.release(); + } + + + un->setNode(0, ln.release()); + un->setNode(1, rn.release()); + return un.release(); + } + return ln.release(); +} + +PluralFormsNode* PluralFormsParser::logicalAndExpression() +{ + PluralFormsNode* p = equalityExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr ln(p); // left + if (token().type() == PluralFormsToken::T_LOGICAL_AND) + { + PluralFormsNodePtr un(new PluralFormsNode(token())); // up + if (!nextToken()) + { + return NULL; + } + p = logicalAndExpression(); + if (p == 0) + { + return NULL; + } + PluralFormsNodePtr rn(p); // right + if (rn->token().type() == PluralFormsToken::T_LOGICAL_AND) + { +// transform 1 && (2 && 3) -> (1 && 2) && 3 +// u r +// l r -> u 3 +// 2 3 l 2 + un->setNode(0, ln.release()); + un->setNode(1, rn->releaseNode(0)); + rn->setNode(0, un.release()); + return rn.release(); + } + + un->setNode(0, ln.release()); + un->setNode(1, rn.release()); + return un.release(); + } + return ln.release(); +} + +PluralFormsNode* PluralFormsParser::equalityExpression() +{ + PluralFormsNode* p = relationalExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr n(p); + if (token().type() == PluralFormsToken::T_EQUAL + || token().type() == PluralFormsToken::T_NOT_EQUAL) + { + PluralFormsNodePtr qn(new PluralFormsNode(token())); + if (!nextToken()) + { + return NULL; + } + p = relationalExpression(); + if (p == NULL) + { + return NULL; + } + qn->setNode(1, p); + qn->setNode(0, n.release()); + return qn.release(); + } + return n.release(); +} + +PluralFormsNode* PluralFormsParser::relationalExpression() +{ + PluralFormsNode* p = multiplicativeExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr n(p); + if (token().type() == PluralFormsToken::T_GREATER + || token().type() == PluralFormsToken::T_LESS + || token().type() == PluralFormsToken::T_GREATER_OR_EQUAL + || token().type() == PluralFormsToken::T_LESS_OR_EQUAL) + { + PluralFormsNodePtr qn(new PluralFormsNode(token())); + if (!nextToken()) + { + return NULL; + } + p = multiplicativeExpression(); + if (p == NULL) + { + return NULL; + } + qn->setNode(1, p); + qn->setNode(0, n.release()); + return qn.release(); + } + return n.release(); +} + +PluralFormsNode* PluralFormsParser::multiplicativeExpression() +{ + PluralFormsNode* p = pmExpression(); + if (p == NULL) + return NULL; + PluralFormsNodePtr n(p); + if (token().type() == PluralFormsToken::T_REMINDER) + { + PluralFormsNodePtr qn(new PluralFormsNode(token())); + if (!nextToken()) + { + return NULL; + } + p = pmExpression(); + if (p == NULL) + { + return NULL; + } + qn->setNode(1, p); + qn->setNode(0, n.release()); + return qn.release(); + } + return n.release(); +} + +PluralFormsNode* PluralFormsParser::pmExpression() +{ + PluralFormsNodePtr n; + if (token().type() == PluralFormsToken::T_N + || token().type() == PluralFormsToken::T_NUMBER) + { + n.reset(new PluralFormsNode(token())); + if (!nextToken()) + { + return NULL; + } + } + else if (token().type() == PluralFormsToken::T_LEFT_BRACKET) { + if (!nextToken()) + { + return NULL; + } + PluralFormsNode* p = expression(); + if (p == NULL) + { + return NULL; + } + n.reset(p); + if (token().type() != PluralFormsToken::T_RIGHT_BRACKET) + { + return NULL; + } + if (!nextToken()) + { + return NULL; + } + } + else + { + return NULL; + } + return n.release(); +} + +PluralFormsCalculator* PluralFormsCalculator::make(const char* s) +{ + PluralFormsCalculator* calculator = new PluralFormsCalculator; + if (s != NULL) + { + PluralFormsScanner scanner(s); + PluralFormsParser p(scanner); + if (!p.parse(*calculator)) + { + delete calculator; + return NULL; + } + } + return calculator; +} diff --git a/src/pluralforms/pl_evaluate.h b/src/pluralforms/pl_evaluate.h new file mode 100644 index 0000000..5bede78 --- /dev/null +++ b/src/pluralforms/pl_evaluate.h @@ -0,0 +1,147 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/common/intl.cpp +// Purpose: Internationalization and localisation for wxWidgets +// Author: Vadim Zeitlin +// Modified by: Michael N. Filippov +// (2003/09/30 - PluralForms support) +// Created: 29/01/98 +// RCS-ID: $Id$ +// Copyright: (c) 1998 Vadim Zeitlin +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include + +// ---------------------------------------------------------------------------- +// Plural forms parser +// ---------------------------------------------------------------------------- + +/* + Simplified Grammar + +Expression: + LogicalOrExpression '?' Expression ':' Expression + LogicalOrExpression + +LogicalOrExpression: + LogicalAndExpression "||" LogicalOrExpression // to (a || b) || c + LogicalAndExpression + +LogicalAndExpression: + EqualityExpression "&&" LogicalAndExpression // to (a && b) && c + EqualityExpression + +EqualityExpression: + RelationalExpression "==" RelationalExperession + RelationalExpression "!=" RelationalExperession + RelationalExpression + +RelationalExpression: + MultiplicativeExpression '>' MultiplicativeExpression + MultiplicativeExpression '<' MultiplicativeExpression + MultiplicativeExpression ">=" MultiplicativeExpression + MultiplicativeExpression "<=" MultiplicativeExpression + MultiplicativeExpression + +MultiplicativeExpression: + PmExpression '%' PmExpression + PmExpression + +PmExpression: + N + Number + '(' Expression ')' +*/ + +class PluralFormsToken +{ +public: + enum Type + { + T_ERROR, T_EOF, T_NUMBER, T_N, T_PLURAL, T_NPLURALS, T_EQUAL, T_ASSIGN, + T_GREATER, T_GREATER_OR_EQUAL, T_LESS, T_LESS_OR_EQUAL, + T_REMINDER, T_NOT_EQUAL, + T_LOGICAL_AND, T_LOGICAL_OR, T_QUESTION, T_COLON, T_SEMICOLON, + T_LEFT_BRACKET, T_RIGHT_BRACKET + }; + Type type() const { return m_type; } + void setType(Type type) { m_type = type; } + // for T_NUMBER only + typedef int Number; + Number number() const { return m_number; } + void setNumber(Number num) { m_number = num; } +private: + Type m_type; + Number m_number; +}; + + +class PluralFormsScanner +{ +public: + PluralFormsScanner(const char* s); + const PluralFormsToken& token() const { return m_token; } + bool nextToken(); // returns false if error +private: + const char* m_s; + PluralFormsToken m_token; +}; + +class PluralFormsNode; + +// NB: Can't use wxDEFINE_SCOPED_PTR_TYPE because PluralFormsNode is not +// fully defined yet: +class PluralFormsNodePtr +{ +public: + PluralFormsNodePtr(PluralFormsNode *p = NULL) : m_p(p) {} + ~PluralFormsNodePtr(); + PluralFormsNode& operator*() const { return *m_p; } + PluralFormsNode* operator->() const { return m_p; } + PluralFormsNode* get() const { return m_p; } + PluralFormsNode* release(); + void reset(PluralFormsNode *p); + +private: + PluralFormsNode *m_p; +}; + +class PluralFormsNode +{ +public: + PluralFormsNode(const PluralFormsToken& token) : m_token(token) {} + const PluralFormsToken& token() const { return m_token; } + const PluralFormsNode* node(size_t i) const + { return m_nodes[i].get(); } + void setNode(size_t i, PluralFormsNode* n); + PluralFormsNode* releaseNode(size_t i); + PluralFormsToken::Number evaluate(PluralFormsToken::Number n) const; + +private: + PluralFormsToken m_token; + PluralFormsNodePtr m_nodes[3]; +}; + + +class PluralFormsCalculator +{ +public: + PluralFormsCalculator() : m_nplurals(0), m_plural(0) {} + + // input: number, returns msgstr index + int evaluate(int n) const; + + // input: text after "Plural-Forms:" (e.g. "nplurals=2; plural=(n != 1);"), + // if s == 0, creates default handler + // returns 0 if error + static PluralFormsCalculator* make(const char* s = 0); + + ~PluralFormsCalculator() {} + + void init(PluralFormsToken::Number nplurals, PluralFormsNode* plural); + wxString getString() const; + +private: + PluralFormsToken::Number m_nplurals; + PluralFormsNodePtr m_plural; +}; diff --git a/src/prefsdlg.cpp b/src/prefsdlg.cpp new file mode 100644 index 0000000..743a8fe --- /dev/null +++ b/src/prefsdlg.cpp @@ -0,0 +1,1004 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !wxCHECK_VERSION(3,1,0) + #define CenterVertical() Center() +#endif + +#include "prefsdlg.h" +#include "edapp.h" +#include "edframe.h" +#include "catalog.h" +#include "crowdin_gui.h" +#include "hidpi.h" +#include "tm/transmem.h" +#include "chooselang.h" +#include "errors.h" +#include "extractor.h" +#include "spellchecking.h" +#include "utility.h" +#include "customcontrols.h" +#include "unicode_helpers.h" + +#ifdef __WXMSW__ +#include +#endif + +#ifdef USE_SPARKLE +#include "osx_helpers.h" +#endif // USE_SPARKLE + +#if defined(USE_SPARKLE) || defined(__WXMSW__) + #define HAS_UPDATES_CHECK +#endif + +namespace +{ + +class PrefsPanel : public wxPanel +{ +public: + PrefsPanel(wxWindow *parent) + : wxPanel(parent), m_suppressDataTransfer(0) + { +#ifdef __WXOSX__ + // Refresh the content of prefs panels when re-opening it. + // TODO: Use proper config settings notifications or user defaults bindings instead + parent->Bind(wxEVT_ACTIVATE, [=](wxActivateEvent& e){ + e.Skip(); + if (e.GetActive()) + TransferDataToWindow(); + }); + Bind(wxEVT_SHOW, [=](wxShowEvent& e){ + e.Skip(); + if (e.IsShown()) + TransferDataToWindow(); + }); +#endif // __WXOSX__ + } + + bool TransferDataToWindow() override + { + if (m_suppressDataTransfer) + return false; + m_suppressDataTransfer++; + InitValues(*wxConfig::Get()); + m_suppressDataTransfer--; + + // This is a "bit" of a hack: we take advantage of being in the last point before + // showing the window and re-layout it on the off chance that some data transferred + // into the window affected its size. And, currently more importantly, to reflect + // ExplanationLabel instances' rewrapping. + Fit(); +#ifndef __WXOSX__ + GetParent()->GetParent()->Fit(); +#endif + return true; + } + + bool TransferDataFromWindow() override + { + if (m_suppressDataTransfer) + return false; + m_suppressDataTransfer++; + SaveValues(*wxConfig::Get()); + m_suppressDataTransfer--; + return true; + } + +protected: + void TransferDataFromWindowAndUpdateUI(wxCommandEvent&) + { + TransferDataFromWindow(); + PoeditFrame::UpdateAllAfterPreferencesChange(); + } + + virtual void InitValues(const wxConfigBase& cfg) = 0; + virtual void SaveValues(wxConfigBase& cfg) = 0; + + int m_suppressDataTransfer; +}; + + + +class GeneralPageWindow : public PrefsPanel +{ +public: + GeneralPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + topsizer->SetMinSize(PX(400), -1); + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + SetSizer(topsizer); + + sizer->Add(new HeadingLabel(this, _("Information about the translator"))); + sizer->AddSpacer(PX(10)); + + auto translator = new wxFlexGridSizer(2, wxSize(5,6)); + translator->AddGrowableCol(1); + sizer->Add(translator, wxSizerFlags().Expand()); + + auto nameLabel = new wxStaticText(this, wxID_ANY, _("Name:")); + translator->Add(nameLabel, wxSizerFlags().CenterVertical().Right().BORDER_OSX(wxTOP, 1)); + m_userName = new wxTextCtrl(this, wxID_ANY); + m_userName->SetHint(_("Your Name")); + translator->Add(m_userName, wxSizerFlags(1).Expand().CenterVertical()); + auto emailLabel = new wxStaticText(this, wxID_ANY, _("Email:")); + translator->Add(emailLabel, wxSizerFlags().CenterVertical().Right().BORDER_OSX(wxTOP, 1)); + m_userEmail = new wxTextCtrl(this, wxID_ANY); + m_userEmail->SetHint(_("your_email@example.com")); + translator->Add(m_userEmail, wxSizerFlags(1).Expand().CenterVertical()); + translator->AddSpacer(PX(1)); + translator->Add(new ExplanationLabel(this, _("Your name and email address are only used to set the Last-Translator header of GNU gettext files.")), wxSizerFlags(1).Expand().PXBorder(wxRIGHT)); +#ifdef __WXOSX__ + nameLabel->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + emailLabel->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + m_userName->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + m_userEmail->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + sizer->AddSpacer(PX(10)); + sizer->Add(new HeadingLabel(this, _("Editing"))); + sizer->AddSpacer(PX(10)); + + m_compileMo = new wxCheckBox(this, wxID_ANY, _("Automatically compile MO file when saving")); + sizer->Add(m_compileMo); + m_showSummary = new wxCheckBox(this, wxID_ANY, _("Show summary after catalog update")); + sizer->Add(m_showSummary, wxSizerFlags().PXBorder(wxTOP)); + + sizer->AddSpacer(PX(10)); + + m_spellchecking = new wxCheckBox(this, wxID_ANY, _("Check spelling")); + sizer->Add(m_spellchecking, wxSizerFlags().PXBorder(wxTOP)); + m_focusToText = new wxCheckBox(this, wxID_ANY, _("Always change focus to text input field")); + sizer->Add(m_focusToText, wxSizerFlags().PXBorder(wxTOP)); + wxString explainFocus(_("Never let the list of strings take focus. If enabled, you must use Ctrl-arrows for keyboard navigation but you can also type text immediately, without having to press Tab to change focus.")); +#ifdef __WXOSX__ + explainFocus.Replace("Ctrl", "Cmd"); +#endif + sizer->AddSpacer(PX(5)); + sizer->Add(new ExplanationLabel(this, explainFocus), wxSizerFlags().Expand().Border(wxLEFT, PX(ExplanationLabel::CHECKBOX_INDENT))); + + sizer->AddSpacer(PX(10)); + sizer->Add(new HeadingLabel(this, _("Appearance"))); + sizer->AddSpacer(PX(4)); + + auto appearance = new wxFlexGridSizer(2, wxSize(5,1)); + appearance->AddGrowableCol(1); + sizer->Add(appearance, wxSizerFlags().Expand()); + + m_useFontList = new wxCheckBox(this, wxID_ANY, _("Use custom list font:")); + m_fontList = new wxFontPickerCtrl(this, wxID_ANY); + m_fontList->SetMinSize(wxSize(PX(120), -1)); + m_useFontText = new wxCheckBox(this, wxID_ANY, _("Use custom text fields font:")); + m_fontText = new wxFontPickerCtrl(this, wxID_ANY); + m_fontText->SetMinSize(wxSize(PX(120), -1)); + + appearance->Add(m_useFontList, wxSizerFlags().CenterVertical().Left()); + appearance->Add(m_fontList, wxSizerFlags().CenterVertical().Expand()); + appearance->Add(m_useFontText, wxSizerFlags().CenterVertical().Left()); + appearance->Add(m_fontText, wxSizerFlags().CenterVertical().Expand()); + +#if NEED_CHOOSELANG_UI + m_uiLanguage = new wxButton(this, wxID_ANY, _("Change UI language")); + sizer->Add(m_uiLanguage, wxSizerFlags().PXBorder(wxTOP)); +#endif + +#ifdef __WXMSW__ + if (!IsSpellcheckingAvailable()) + { + m_spellchecking->Disable(); + m_spellchecking->SetValue(false); + // TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions + m_spellchecking->SetLabel(m_spellchecking->GetLabel() + " " + _("(requires Windows 8 or newer)")); + } +#endif + + Fit(); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + { + Bind(wxEVT_CHECKBOX, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + Bind(wxEVT_TEXT, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + + // Some settings directly affect the UI, so need a more expensive handler: + m_useFontList->Bind(wxEVT_CHECKBOX, &GeneralPageWindow::TransferDataFromWindowAndUpdateUI, this); + m_useFontText->Bind(wxEVT_CHECKBOX, &GeneralPageWindow::TransferDataFromWindowAndUpdateUI, this); + Bind(wxEVT_FONTPICKER_CHANGED, &GeneralPageWindow::TransferDataFromWindowAndUpdateUI, this); + m_focusToText->Bind(wxEVT_CHECKBOX, &GeneralPageWindow::TransferDataFromWindowAndUpdateUI, this); + m_spellchecking->Bind(wxEVT_CHECKBOX, &GeneralPageWindow::TransferDataFromWindowAndUpdateUI, this); + } + + // handle UI updates: + m_fontList->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ e.Enable(m_useFontList->GetValue()); }); + m_fontText->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ e.Enable(m_useFontText->GetValue()); }); + +#if NEED_CHOOSELANG_UI + m_uiLanguage->Bind(wxEVT_BUTTON, [=](wxCommandEvent&){ ChangeUILanguage(); }); +#endif + } + + void InitValues(const wxConfigBase& cfg) override + { + m_userName->SetValue(cfg.Read("translator_name", wxEmptyString)); + m_userEmail->SetValue(cfg.Read("translator_email", wxEmptyString)); + m_compileMo->SetValue(cfg.ReadBool("compile_mo", true)); + m_showSummary->SetValue(cfg.ReadBool("show_summary", false)); + m_focusToText->SetValue(cfg.ReadBool("focus_to_text", false)); + + if (IsSpellcheckingAvailable()) + { + m_spellchecking->SetValue(cfg.ReadBool("enable_spellchecking", true)); + } + + m_useFontList->SetValue(cfg.ReadBool("custom_font_list_use", false)); + m_useFontText->SetValue(cfg.ReadBool("custom_font_text_use", false)); + + #if defined(__WXOSX__) + #define DEFAULT_FONT "Helvetica Neue" + #elif defined(__WXMSW__) + #define DEFAULT_FONT "Arial" + #elif defined(__WXGTK__) + #define DEFAULT_FONT "sans serif" + #endif + auto listFont = wxFont(cfg.Read("custom_font_list_name", "")); + if (!listFont.IsOk()) + listFont = wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, DEFAULT_FONT); + auto textFont = wxFont(cfg.Read("custom_font_text_name", "")); + if (!textFont.IsOk()) + textFont = wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, DEFAULT_FONT); + m_fontList->SetSelectedFont(listFont); + m_fontText->SetSelectedFont(textFont); + } + + void SaveValues(wxConfigBase& cfg) override + { + cfg.Write("translator_name", m_userName->GetValue()); + cfg.Write("translator_email", m_userEmail->GetValue()); + cfg.Write("compile_mo", m_compileMo->GetValue()); + cfg.Write("show_summary", m_showSummary->GetValue()); + cfg.Write("focus_to_text", m_focusToText->GetValue()); + + if (IsSpellcheckingAvailable()) + { + cfg.Write("enable_spellchecking", m_spellchecking->GetValue()); + } + + wxFont listFont = m_fontList->GetSelectedFont(); + wxFont textFont = m_fontText->GetSelectedFont(); + + cfg.Write("custom_font_list_use", m_useFontList->GetValue()); + cfg.Write("custom_font_text_use", m_useFontText->GetValue()); + if ( listFont.IsOk() ) + cfg.Write("custom_font_list_name", listFont.GetNativeFontInfoDesc()); + if ( textFont.IsOk() ) + cfg.Write("custom_font_text_name", textFont.GetNativeFontInfoDesc()); + + // On Windows, we must update the UI here; on other platforms, it was done + // via TransferDataFromWindowAndUpdateUI immediately: + if (!wxPreferencesEditor::ShouldApplyChangesImmediately()) + { + PoeditFrame::UpdateAllAfterPreferencesChange(); + } + } + +private: + wxTextCtrl *m_userName, *m_userEmail; + wxCheckBox *m_compileMo, *m_showSummary, *m_focusToText, *m_spellchecking; + wxCheckBox *m_useFontList, *m_useFontText; + wxFontPickerCtrl *m_fontList, *m_fontText; +#if NEED_CHOOSELANG_UI + wxButton *m_uiLanguage; +#endif +}; + +class GeneralPage : public wxPreferencesPage +{ +public: + wxString GetName() const override { return PXNotebookTab(_("General")); } + wxBitmap GetLargeIcon() const override { return wxArtProvider::GetBitmap("Prefs-General"); } + wxWindow *CreateWindow(wxWindow *parent) override { return new GeneralPageWindow(parent); } +}; + + + +class TMPageWindow : public PrefsPanel +{ +public: + TMPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); +#ifdef __WXOSX__ + topsizer->SetMinSize(PX(430), -1); // for OS X look +#endif + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + SetSizer(topsizer); + + sizer->AddSpacer(PX(5)); + m_useTM = new wxCheckBox(this, wxID_ANY, _("Use translation memory")); + sizer->Add(m_useTM, wxSizerFlags().Expand()); + + m_stats = new wxStaticText(this, wxID_ANY, "--\n--", wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE); + sizer->AddSpacer(PX(10)); + sizer->Add(m_stats, wxSizerFlags().Expand().Border(wxLEFT|wxRIGHT, PX(30))); + sizer->AddSpacer(PX(10)); + + auto buttonsSizer = new wxBoxSizer(wxHORIZONTAL); + + auto import = new wxButton(this, wxID_ANY, + MSW_OR_OTHER(_("Learn from files..."), _("Learn From Files..."))); + buttonsSizer->Add(import, wxSizerFlags()); + // TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). + auto clear = new wxButton(this, wxID_ANY, _("Reset")); + buttonsSizer->Add(clear, wxSizerFlags().Border(wxLEFT, 5)); + + sizer->Add(buttonsSizer, wxSizerFlags().Expand().Border(wxLEFT|wxRIGHT, PX(30))); + sizer->AddSpacer(PX(10)); + + m_useTMWhenUpdating = new wxCheckBox(this, wxID_ANY, _("Consult TM when updating from sources")); + sizer->Add(m_useTMWhenUpdating, wxSizerFlags().Expand().PXBorder(wxTOP|wxBOTTOM)); + + auto explainTxt = _("If enabled, Poedit will try to fill in new entries using your previous\n" + "translations stored in the translation memory. If the TM is\n" + "near-empty, it will not be very effective. The more translations\n" + "you edit and the larger the TM grows, the better it gets."); + auto explain = new ExplanationLabel(this, explainTxt); + sizer->Add(explain, wxSizerFlags().Expand().Border(wxLEFT, PX(ExplanationLabel::CHECKBOX_INDENT))); + + auto learnMore = new LearnMoreLink(this, "https://poedit.net/trac/wiki/Doc/TranslationMemory"); + sizer->AddSpacer(PX(5)); + sizer->Add(learnMore, wxSizerFlags().Border(wxLEFT, PX(ExplanationLabel::CHECKBOX_INDENT + LearnMoreLink::EXTRA_INDENT))); + sizer->AddSpacer(PX(10)); + +#ifdef __WXOSX__ + m_stats->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + import->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + clear->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + m_useTMWhenUpdating->Bind(wxEVT_UPDATE_UI, &TMPageWindow::OnUpdateUI, this); + m_stats->Bind(wxEVT_UPDATE_UI, &TMPageWindow::OnUpdateUI, this); + import->Bind(wxEVT_UPDATE_UI, &TMPageWindow::OnUpdateUI, this); + clear->Bind(wxEVT_UPDATE_UI, &TMPageWindow::OnUpdateUI, this); + + import->Bind(wxEVT_BUTTON, &TMPageWindow::OnImportIntoTM, this); + clear->Bind(wxEVT_BUTTON, &TMPageWindow::OnResetTM, this); + + UpdateStats(); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + { + m_useTMWhenUpdating->Bind(wxEVT_CHECKBOX, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + // Some settings directly affect the UI, so need a more expensive handler: + m_useTM->Bind(wxEVT_CHECKBOX, &TMPageWindow::TransferDataFromWindowAndUpdateUI, this); + } + } + + void InitValues(const wxConfigBase& cfg) override + { + m_useTM->SetValue(cfg.ReadBool("use_tm", true)); + m_useTMWhenUpdating->SetValue(cfg.ReadBool("use_tm_when_updating", false)); + } + + void SaveValues(wxConfigBase& cfg) override + { + cfg.Write("use_tm", m_useTM->GetValue()); + cfg.Write("use_tm_when_updating", m_useTMWhenUpdating->GetValue()); + } + +private: + void UpdateStats() + { + wxString sDocs("--"); + wxString sFileSize("--"); + if (wxConfig::Get()->ReadBool("use_tm", true)) + { + try + { + long docs, fileSize; + TranslationMemory::Get().GetStats(docs, fileSize); + sDocs.Printf("%s", wxNumberFormatter::ToString(docs)); + sFileSize.Printf("%s", wxFileName::GetHumanReadableSize(fileSize, "--", 1, wxSIZE_CONV_SI)); + } + catch (Exception&) + { + // ignore Lucene errors -- if the index doesn't exist yet, just show -- + } + } + + m_stats->SetLabelMarkup(wxString::Format( + "%s %s\n%s %s", + _("Stored translations:"), sDocs, + _("Database size on disk:"), sFileSize + )); + } + + void OnImportIntoTM(wxCommandEvent&) + { + wxWindowPtr dlg(new wxFileDialog( + this, + _("Select translation files to import"), + wxEmptyString, + wxEmptyString, + Catalog::GetTypesFileMask({Catalog::Type::PO}), + wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE)); + + dlg->ShowWindowModalThenDo([=](int retcode){ + if (retcode != wxID_OK) + return; + + wxArrayString paths; + dlg->GetPaths(paths); + + wxProgressDialog progress(_("Translation Memory"), + _("Importing translations..."), + (int)paths.size() * 2 + 1, + this, + wxPD_APP_MODAL|wxPD_AUTO_HIDE|wxPD_CAN_ABORT); + auto tm = TranslationMemory::Get().GetWriter(); + int step = 0; + for (size_t i = 0; i < paths.size(); i++) + { + CatalogPtr cat = std::make_shared(paths[i]); + if (!progress.Update(++step)) + break; + if (cat->IsOk()) + tm->Insert(cat); + if (!progress.Update(++step)) + break; + } + progress.Pulse(_("Finalizing...")); + tm->Commit(); + UpdateStats(); + }); + } + + void OnResetTM(wxCommandEvent&) + { + auto title = _("Reset translation memory"); + auto main = _("Are you sure you want to reset the translation memory?"); + auto details = _(L"Resetting the translation memory will irrevocably delete all stored translations from it. You can’t undo this operation."); + + wxWindowPtr dlg(new wxMessageDialog(this, main, title, wxYES_NO | wxNO_DEFAULT | wxICON_WARNING)); + dlg->SetExtendedMessage(details); + dlg->SetYesNoLabels(_("Reset"), _("Cancel")); + + dlg->ShowWindowModalThenDo([this,dlg](int retcode){ + if (retcode == wxID_YES) { + wxBusyCursor bcur; + auto tm = TranslationMemory::Get().GetWriter(); + tm->DeleteAll(); + tm->Commit(); + UpdateStats(); + } + }); + } + + void OnUpdateUI(wxUpdateUIEvent& e) + { + e.Enable(m_useTM->GetValue()); + } + + wxCheckBox *m_useTM, *m_useTMWhenUpdating; + wxStaticText *m_stats; +}; + +class TMPage : public wxPreferencesPage +{ +public: + wxString GetName() const override + { +#if defined(__WXOSX__) || defined(__WXGTK__) + // TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. + // Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal + // length there. + return _("TM"); +#else + return PXNotebookTab(_("Translation Memory")); +#endif + } + wxBitmap GetLargeIcon() const override { return wxArtProvider::GetBitmap("Prefs-TM"); } + wxWindow *CreateWindow(wxWindow *parent) override { return new TMPageWindow(parent); } +}; + + + +class ExtractorsPageWindow : public PrefsPanel +{ +public: + ExtractorsPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + SetSizer(topsizer); + + sizer->Add(new ExplanationLabel(this, _("Source code extractors are used to find translatable strings in the source code files and extract them so that they can be translated.")), + wxSizerFlags().Expand().PXBorder(wxTOP|wxBOTTOM)); + sizer->AddSpacer(PX(10)); + + auto horizontal = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(horizontal, wxSizerFlags(1).Expand()); + + m_list = new wxCheckListBox(this, wxID_ANY); + m_list->SetMinSize(wxSize(PX(300),PX(300))); +#ifdef __WXOSX__ + m_list->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + horizontal->Add(m_list, wxSizerFlags(1).Expand().PXBorder(wxRIGHT)); + + auto buttons = new wxBoxSizer(wxVERTICAL); + horizontal->Add(buttons, wxSizerFlags().Expand()); + + m_new = new wxButton(this, wxID_ANY, _("New")); + m_edit = new wxButton(this, wxID_ANY, _("Edit")); + m_delete = new wxButton(this, wxID_ANY, _("Delete")); + buttons->Add(m_new, wxSizerFlags().PXBorder(wxBOTTOM)); + buttons->Add(m_edit, wxSizerFlags().PXBorder(wxBOTTOM)); + buttons->Add(m_delete, wxSizerFlags().PXBorder(wxBOTTOM)); + + m_new->Bind(wxEVT_BUTTON, &ExtractorsPageWindow::OnNewExtractor, this); + m_edit->Bind(wxEVT_BUTTON, &ExtractorsPageWindow::OnEditExtractor, this); + m_delete->Bind(wxEVT_BUTTON, &ExtractorsPageWindow::OnDeleteExtractor, this); + + m_edit->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e) { e.Enable(m_list->GetSelection() != wxNOT_FOUND); }); + m_delete->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e) { e.Enable(m_list->GetSelection() != wxNOT_FOUND); }); + + m_list->Bind(wxEVT_CHECKLISTBOX, &ExtractorsPageWindow::OnEnableExtractor, this); + } + + void InitValues(const wxConfigBase& cfg) override + { + m_extractors.Read(const_cast(&cfg)); + + m_list->Clear(); + for (const auto& item: m_extractors.Data) + { + auto index = m_list->Append(bidi::platform_mark_direction(item.Name)); + m_list->Check(index, item.Enabled); + } + + if (!m_extractors.Data.empty()) + { + m_list->SetSelection(0); + m_list->EnsureVisible(0); + } + } + + void SaveValues(wxConfigBase& cfg) override + { + m_extractors.Write(&cfg); + } + +private: + /// Called to launch dialog for editing parser properties. + template + void EditExtractor(int num, TFunctor completionHandler) + { + wxWindowPtr dlg(wxXmlResource::Get()->LoadDialog(this, "edit_extractor")); + dlg->Centre(); + + auto extractor_language = XRCCTRL(*dlg, "extractor_language", wxTextCtrl); + auto extractor_extensions = XRCCTRL(*dlg, "extractor_extensions", wxTextCtrl); + auto extractor_command = XRCCTRL(*dlg, "extractor_command", wxTextCtrl); + auto extractor_keywords = XRCCTRL(*dlg, "extractor_keywords", wxTextCtrl); + auto extractor_files = XRCCTRL(*dlg, "extractor_files", wxTextCtrl); + auto extractor_charset = XRCCTRL(*dlg, "extractor_charset", wxTextCtrl); + + { + const Extractor& nfo = m_extractors.Data[num]; + extractor_language->SetValue(bidi::platform_mark_direction(nfo.Name)); + extractor_extensions->SetValue(bidi::mark_direction(nfo.Extensions, TextDirection::LTR)); + extractor_command->SetValue(bidi::mark_direction(nfo.Command, TextDirection::LTR)); + extractor_keywords->SetValue(bidi::mark_direction(nfo.KeywordItem, TextDirection::LTR)); + extractor_files->SetValue(bidi::mark_direction(nfo.FileItem, TextDirection::LTR)); + extractor_charset->SetValue(bidi::mark_direction(nfo.CharsetItem, TextDirection::LTR)); + } + + dlg->Bind + ( + wxEVT_UPDATE_UI, + [=](wxUpdateUIEvent& e){ + e.Enable(!extractor_language->IsEmpty() && + !extractor_extensions->IsEmpty() && + !extractor_command->IsEmpty() && + !extractor_files->IsEmpty()); + // charset, keywords could in theory be empty if unsupported by the parser tool + }, + wxID_OK + ); + + m_suppressDataTransfer++; + dlg->ShowWindowModalThenDo([=](int retcode){ + m_suppressDataTransfer--; + (void)dlg; // force use + if (retcode == wxID_OK) + { + Extractor& nfo = m_extractors.Data[num]; + nfo.Name = bidi::strip_control_chars(extractor_language->GetValue().Strip(wxString::both)); + nfo.Extensions = bidi::strip_control_chars(extractor_extensions->GetValue().Strip(wxString::both)); + nfo.Command = bidi::strip_control_chars(extractor_command->GetValue().Strip(wxString::both)); + nfo.KeywordItem = bidi::strip_control_chars(extractor_keywords->GetValue().Strip(wxString::both)); + nfo.FileItem = bidi::strip_control_chars(extractor_files->GetValue().Strip(wxString::both)); + nfo.CharsetItem = bidi::strip_control_chars(extractor_charset->GetValue().Strip(wxString::both)); + m_list->SetString(num, nfo.Name); + } + completionHandler(retcode == wxID_OK); + }); + } + + void OnNewExtractor(wxCommandEvent&) + { + m_suppressDataTransfer++; + + Extractor info; + m_extractors.Data.push_back(info); + auto index = m_list->Append(wxEmptyString); + m_list->Check(index); + EditExtractor(index, [=](bool added){ + if (added) + { + m_edit->Enable(true); + m_delete->Enable(true); + } + else + { + m_list->Delete(index); + m_extractors.Data.erase(m_extractors.Data.begin() + index); + } + + m_suppressDataTransfer--; + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + TransferDataFromWindow(); + }); + } + + void OnEditExtractor(wxCommandEvent&) + { + EditExtractor(m_list->GetSelection(), [=](bool changed){ + if (changed && wxPreferencesEditor::ShouldApplyChangesImmediately()) + TransferDataFromWindow(); + }); + } + + void OnDeleteExtractor(wxCommandEvent&) + { + int index = m_list->GetSelection(); + + auto title = _("Delete extractor"); + auto main = wxString::Format(_(L"Are you sure you want to delete the “%s” extractor?"), m_extractors.Data[index].Name); + + wxWindowPtr dlg(new wxMessageDialog(this, main, title, wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION)); + #ifdef __WXOSX__ + dlg->SetExtendedMessage(" "); // prevent wx from using the title stupidly + #endif + dlg->SetYesNoLabels(_("Delete"), _("Cancel")); + + dlg->ShowWindowModalThenDo([this,index,dlg](int retcode){ + if (retcode == wxID_YES) + { + m_extractors.Data.erase(m_extractors.Data.begin() + index); + m_list->Delete(index); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + TransferDataFromWindow(); + } + }); + } + + void OnEnableExtractor(wxCommandEvent& e) + { + int index = e.GetInt(); + m_extractors.Data[index].Enabled = m_list->IsChecked(index); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + TransferDataFromWindow(); + } + + ExtractorsDB m_extractors; + + wxCheckListBox *m_list; + wxButton *m_new, *m_edit, *m_delete; +}; + +class ExtractorsPage : public wxPreferencesPage +{ +public: + wxString GetName() const override { return PXNotebookTab(_("Extractors")); } + wxBitmap GetLargeIcon() const override { return wxArtProvider::GetBitmap("Prefs-Extractors"); } + wxWindow *CreateWindow(wxWindow *parent) override { return new ExtractorsPageWindow(parent); } +}; + + + +#ifdef HAVE_HTTP_CLIENT +class AccountsPageWindow : public PrefsPanel +{ +public: + AccountsPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + m_login = new CrowdinLoginPanel(this); + topsizer->Add(m_login, wxSizerFlags(1).Expand().Border(wxALL, PX(15))); + SetSizer(topsizer); + + #ifdef __WXOSX__ + // This window was created on demand, init immediately: + m_login->EnsureInitialized(); + #else + // On other platforms, notebook pages are all created at once. Don't do + // the expensive initialization until shown for the first time. This code + // is a hack that takes advantage of wxPreferencesEditor's implementation + // detail, but oh well: + auto notebook = dynamic_cast(parent); + if (notebook) + { + notebook->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, [=](wxBookCtrlEvent& e){ + e.Skip(); + if (notebook->GetPage(e.GetSelection()) == this) + m_login->EnsureInitialized(); + }); + } + #endif + } + + void InitValues(const wxConfigBase&) override + { + } + + void SaveValues(wxConfigBase&) override + { + } + +private: + CrowdinLoginPanel *m_login; +}; + +class AccountsPage : public wxPreferencesPage +{ +public: + wxString GetName() const override { return PXNotebookTab(_("Accounts")); } + wxBitmap GetLargeIcon() const override { return wxArtProvider::GetBitmap("Prefs-Accounts"); } + wxWindow *CreateWindow(wxWindow *parent) override { return new AccountsPageWindow(parent); } +}; +#endif // HAVE_HTTP_CLIENT + + +#ifdef HAS_UPDATES_CHECK +class UpdatesPageWindow : public PrefsPanel +{ +public: + UpdatesPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + topsizer->SetMinSize(PX(400), -1); // for OS X look, wouldn't fit the toolbar otherwise + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(sizer, wxSizerFlags().Expand().PXDoubleBorderAll()); + SetSizer(topsizer); + + m_updates = new wxCheckBox(this, wxID_ANY, _("Automatically check for updates")); + sizer->Add(m_updates, wxSizerFlags().Expand().PXBorder(wxTOP|wxBOTTOM)); + + m_beta = new wxCheckBox(this, wxID_ANY, _("Include beta versions")); + sizer->Add(m_beta, wxSizerFlags().Expand().PXBorder(wxBOTTOM)); + + sizer->Add(new ExplanationLabel(this, _("Beta versions contain the latest new features and improvements, but may be a bit less stable.")), + wxSizerFlags().Expand().Border(wxLEFT, PX(ExplanationLabel::CHECKBOX_INDENT))); + sizer->AddSpacer(PX(5)); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + Bind(wxEVT_CHECKBOX, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + } + + void InitValues(const wxConfigBase&) override + { +#ifdef USE_SPARKLE + m_updates->SetValue((bool)UserDefaults_GetBoolValue("SUEnableAutomaticChecks")); +#endif +#ifdef __WXMSW__ + m_updates->SetValue(win_sparkle_get_automatic_check_for_updates() != 0); +#endif + m_beta->SetValue(wxGetApp().CheckForBetaUpdates()); + if (wxGetApp().IsBetaVersion()) + m_beta->Disable(); + } + + void SaveValues(wxConfigBase& cfg) override + { +#ifdef __WXMSW__ + win_sparkle_set_automatic_check_for_updates(m_updates->GetValue()); +#endif + if (!wxGetApp().IsBetaVersion()) + { + cfg.Write("check_for_beta_updates", m_beta->GetValue()); + } +#ifdef USE_SPARKLE + UserDefaults_SetBoolValue("SUEnableAutomaticChecks", m_updates->GetValue()); + Sparkle_Initialize(wxGetApp().CheckForBetaUpdates()); +#endif + } + +private: + wxCheckBox *m_updates, *m_beta; +}; + +class UpdatesPage : public wxPreferencesPage +{ +public: + wxString GetName() const override { return PXNotebookTab(_("Updates")); } + wxBitmap GetLargeIcon() const override { return wxArtProvider::GetBitmap("Prefs-Updates"); } + wxWindow *CreateWindow(wxWindow *parent) override { return new UpdatesPageWindow(parent); } +}; +#endif // HAS_UPDATES_CHECK + + +class AdvancedPageWindow : public PrefsPanel +{ +public: + AdvancedPageWindow(wxWindow *parent) : PrefsPanel(parent) + { + wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(sizer, wxSizerFlags(1).Expand().PXDoubleBorderAll()); + SetSizer(topsizer); + + sizer->Add(new ExplanationLabel(this, _("These settings affect internal formatting of PO files. Adjust them if you have specific requirements e.g. because of version control.")), wxSizerFlags().Expand().PXBorder(wxBOTTOM)); + + auto crlfbox = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(crlfbox, wxSizerFlags().Expand().PXBorder(wxTOP)); + crlfbox->Add(new wxStaticText(this, wxID_ANY, _("Line endings:")), wxSizerFlags().Center().BORDER_WIN(wxTOP, PX(1))); + m_crlf = new wxChoice(this, wxID_ANY); + m_crlf->Append(_("Unix (recommended)")); + m_crlf->Append(_("Windows")); + crlfbox->Add(m_crlf, wxSizerFlags(1).Center().BORDER_OSX(wxLEFT, PX(3)).BORDER_WIN(wxLEFT, PX(5))); + + /// TRANSLATORS: Followed by text control for entering number; wraps text at given width + m_wrap = new wxCheckBox(this, wxID_ANY, _("Wrap at:")); + crlfbox->AddSpacer(PX(10)); + crlfbox->Add(m_wrap, wxSizerFlags().Center().BORDER_WIN(wxTOP, PX(1))); + #ifdef __WXGTK3__ + m_wrapWidth = new wxSpinCtrl(this, wxID_ANY, "", wxDefaultPosition, wxSize(PX(100),-1)); + #else + m_wrapWidth = new wxSpinCtrl(this, wxID_ANY, "", wxDefaultPosition, wxSize(PX(50),-1)); + #endif + m_wrapWidth->SetRange(10, 1000); + crlfbox->Add(m_wrapWidth, wxSizerFlags().Center().BORDER_OSX(wxLEFT, PX(3))); + + m_keepFmt = new wxCheckBox(this, wxID_ANY, _("Preserve formatting of existing files")); + sizer->Add(m_keepFmt, wxSizerFlags().PXBorder(wxTOP)); + + Fit(); + + if (wxPreferencesEditor::ShouldApplyChangesImmediately()) + { + Bind(wxEVT_CHECKBOX, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + Bind(wxEVT_CHOICE, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + Bind(wxEVT_TEXT, [=](wxCommandEvent&){ TransferDataFromWindow(); }); + } + + // handle UI updates: + m_wrapWidth->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ e.Enable(m_wrap->GetValue()); }); + } + + void InitValues(const wxConfigBase& cfg) override + { + m_keepFmt->SetValue(cfg.ReadBool("keep_crlf", true)); + + wxString format = cfg.Read("crlf_format", "unix"); + int sel; + if (format == "win") sel = 1; + else /* "unix" or obsolete settings */ sel = 0; + m_crlf->SetSelection(sel); + + m_wrap->SetValue(cfg.ReadBool("wrap_po_files", true)); + m_wrapWidth->SetValue((int)cfg.ReadLong("wrap_po_files_width", 79)); + } + + void SaveValues(wxConfigBase& cfg) override + { + cfg.Write("keep_crlf", m_keepFmt->GetValue()); + + static const char *formats[] = { "unix", "win" }; + cfg.Write("crlf_format", formats[m_crlf->GetSelection()]); + + cfg.Write("wrap_po_files", m_wrap->GetValue()); + cfg.Write("wrap_po_files_width", m_wrapWidth->GetValue()); + } + +private: + wxChoice *m_crlf; + wxCheckBox *m_wrap; + wxSpinCtrl *m_wrapWidth; + wxCheckBox *m_keepFmt; +}; + +class AdvancedPage : public wxStockPreferencesPage +{ +public: + AdvancedPage() : wxStockPreferencesPage(Kind_Advanced) {} + wxString GetName() const override { return PXNotebookTab(_("Advanced")); } + wxWindow *CreateWindow(wxWindow *parent) override { return new AdvancedPageWindow(parent); } +}; + + +} // anonymous namespace + + + +std::unique_ptr PoeditPreferencesEditor::Create() +{ +#if 0 + // TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. + _("%s Preferences"); +#endif + + std::unique_ptr p(new PoeditPreferencesEditor); + p->AddPage(new GeneralPage); + p->AddPage(new TMPage); + p->AddPage(new ExtractorsPage); +#ifdef HAVE_HTTP_CLIENT + p->AddPage(new AccountsPage); +#endif +#ifdef HAS_UPDATES_CHECK + p->AddPage(new UpdatesPage); +#endif + p->AddPage(new AdvancedPage); + return p; +} + diff --git a/src/prefsdlg.h b/src/prefsdlg.h new file mode 100644 index 0000000..f7ab64c --- /dev/null +++ b/src/prefsdlg.h @@ -0,0 +1,42 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_prefsdlg_h +#define Poedit_prefsdlg_h + +#include +#include + + +class PoeditPreferencesEditor : public wxPreferencesEditor +{ +public: + static std::unique_ptr Create(); + +private: + PoeditPreferencesEditor() {} +}; + +#endif // Poedit_prefsdlg_h \ No newline at end of file diff --git a/src/progressinfo.cpp b/src/progressinfo.cpp new file mode 100644 index 0000000..3d0521a --- /dev/null +++ b/src/progressinfo.cpp @@ -0,0 +1,109 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "progressinfo.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ProgressDlg : public wxDialog +{ + public: + ProgressDlg(bool *cancel) : wxDialog(), m_cancelFlag(cancel) {} + + private: + bool *m_cancelFlag; + + DECLARE_EVENT_TABLE() + + void OnCancel(wxCommandEvent&) + { + ((wxButton*)FindWindow(wxID_CANCEL))->Enable(false); + *m_cancelFlag = true; + } +}; + +BEGIN_EVENT_TABLE(ProgressDlg, wxDialog) + EVT_BUTTON(wxID_CANCEL, ProgressDlg::OnCancel) +END_EVENT_TABLE() + +ProgressInfo::ProgressInfo(wxWindow *parent, const wxString& title) +{ + m_cancelled = false; + m_dlg = new ProgressDlg(&m_cancelled); + wxXmlResource::Get()->LoadDialog(m_dlg, parent, "extractor_progress"); + m_dlg->SetTitle(title); + m_dlg->Show(true); + m_disabler = new wxWindowDisabler(m_dlg); +} + +ProgressInfo::~ProgressInfo() +{ + delete m_disabler; + m_dlg->Destroy(); +} + +void ProgressInfo::SetGaugeMax(int limit) +{ + XRCCTRL(*m_dlg, "progress", wxGauge)->SetRange(limit); +} + +bool ProgressInfo::UpdateGauge(int increment) +{ + wxGauge *g = XRCCTRL(*m_dlg, "progress", wxGauge); + g->SetValue(g->GetValue() + increment); + +#ifdef __WXOSX__ + // Set again the message to workaround a wxOSX bug + wxStaticText *txt = XRCCTRL(*m_dlg, "info", wxStaticText); + txt->SetLabel(txt->GetLabel()); + txt->Update(); +#endif + + return !m_cancelled; +} + +void ProgressInfo::ResetGauge(int value) +{ + XRCCTRL(*m_dlg, "progress", wxGauge)->SetValue(value); +} + +void ProgressInfo::UpdateMessage(const wxString& text) +{ + wxStaticText *txt = XRCCTRL(*m_dlg, "info", wxStaticText); + txt->SetLabel(text); + txt->Refresh(); + txt->Update(); + m_dlg->Refresh(); + wxEventLoop::GetActive()->Yield(/*onlyIfNeeded=*/true); +} diff --git a/src/progressinfo.h b/src/progressinfo.h new file mode 100644 index 0000000..6d92ae2 --- /dev/null +++ b/src/progressinfo.h @@ -0,0 +1,68 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _PROGRESSINFO_H_ +#define _PROGRESSINFO_H_ + +#include + +class WXDLLIMPEXP_FWD_CORE wxWindow; +class WXDLLIMPEXP_FWD_CORE wxDialog; +class WXDLLIMPEXP_FWD_CORE wxWindowDisabler; + +/// This class displays fancy progress dialog. +class ProgressInfo +{ + public: + ProgressInfo(wxWindow *parent, const wxString& title); + ~ProgressInfo(); + + /// Sets gauge's values interval to <0..limit). + void SetGaugeMax(int limit); + + /** Updates the gauge: increments it by specified delta. + \param increment the delta + \return false if user cancelled operation, true otherwise + */ + bool UpdateGauge(int increment = +1); + + /// Resets the gauge to given \a value. + void ResetGauge(int value = 0); + + /// Updates informative message. + void UpdateMessage(const wxString& text); + + /// Returns whether the user cancelled operation. + bool Cancelled() const { return m_cancelled; } + + private: + wxDialog *m_dlg; + bool m_cancelled; + wxWindowDisabler *m_disabler; +}; + + + +#endif // _PROGRESSINFO_H_ diff --git a/src/propertiesdlg.cpp b/src/propertiesdlg.cpp new file mode 100644 index 0000000..c2c7090 --- /dev/null +++ b/src/propertiesdlg.cpp @@ -0,0 +1,814 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#if !wxCHECK_VERSION(3,1,0) + #include "wx_backports/nativewin.h" +#endif + + +#include +#include +#include + +#include "propertiesdlg.h" +#include "hidpi.h" +#include "language.h" +#include "str_helpers.h" +#include "unicode_helpers.h" +#include "pluralforms/pl_evaluate.h" +#include "utility.h" + +namespace +{ + +inline wxString NormalizedPath(const wxString& fn, wxPathFormat format) +{ + auto f = MakeFileName(fn); + f.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); + return f.GetFullPath(format); +} + +inline wxString RelativePath(const wxString& fn, const wxString& to, wxPathFormat format) +{ + if (fn == to || fn + wxFILE_SEP_PATH == to) + return "."; + auto f = MakeFileName(fn); + if (!f.MakeRelativeTo(to)) + { +#ifdef __WXMSW__ + if (format == wxPATH_UNIX) + { + // Paths on different volumes, which are ignored in UNIX path formatting. + // The best we can do is to use Windows path with / instead of \ ... + wxString dos = f.GetFullPath(wxPATH_DOS); + dos.Replace("\\", "/"); + return dos; + } +#endif + } + return f.GetFullPath(format); +} + +inline wxString RelativePathForPO(const wxString& fn, const wxString& to) +{ + auto rel = RelativePath(fn, to, wxPATH_UNIX); + if (rel.Last() == '/') + rel.RemoveLast(); + return rel; +} + + +} // anonymous namespace + +struct PropertiesDialog::PathsData +{ + PathsData() : Changed(false) {} + + std::function RefreshView; + + // Did the data change in any way? + bool Changed; + + // all paths here are absolute, normalized paths + + // directory where the PO(T) file is + wxString filedir; + + // catalog settings + wxString basepath; + wxArrayString paths; + wxArrayString excluded; + + void GetFromCatalog(CatalogPtr cat) + { + Changed = false; + auto& hdr = cat->Header(); + filedir = wxFileName(cat->GetFileName()).GetPathWithSep(); + basepath = cat->GetSourcesBasePath(); + if (basepath.empty()) + basepath = filedir; + paths.clear(); + excluded.clear(); + for (auto& p: hdr.SearchPaths) + { + if (p.empty()) + continue; + paths.push_back(NormalizedPath(basepath + p, wxPATH_NATIVE)); + } + for (auto& p: hdr.SearchPathsExcluded) + { + if (p.empty()) + continue; + if (wxIsWild(p)) + excluded.push_back(p); + else + excluded.push_back(NormalizedPath(basepath + p, wxPATH_NATIVE)); + } + } + + void SetToCatalog(CatalogPtr cat) const + { + auto& hdr = cat->Header(); + hdr.BasePath = RelativePathForPO(basepath, filedir); + hdr.SearchPaths.clear(); + hdr.SearchPathsExcluded.clear(); + for (auto& p: paths) + { + auto rel = RelativePathForPO(p, basepath); + hdr.SearchPaths.push_back(rel); + } + for (auto& p: excluded) + { + if (wxIsWild(p)) + { + hdr.SearchPathsExcluded.push_back(p); + } + else + { + auto rel = RelativePathForPO(p, basepath); + hdr.SearchPathsExcluded.push_back(rel); + } + } + } + + void UpdateBasePath() + { + if (!paths.empty()) + basepath = CommonDirectory(paths).GetFullPath(); + else + basepath = filedir; + } +}; + + +#ifdef __WXOSX__ + +@interface BasePathCtrlController : NSObject +@end + +@implementation BasePathCtrlController +- (void)pathClicked:(NSPathControl*)sender +{ + NSPathComponentCell *cell = [[sender cell] clickedPathComponentCell]; + if (cell) + [[NSWorkspace sharedWorkspace] openURL:[cell URL]]; +} +@end + + +class PropertiesDialog::BasePathCtrl : public wxNativeWindow +{ +public: + BasePathCtrl(wxWindow *parent) : wxNativeWindow() + { + m_path = [NSPathControl new]; + m_ctrl = [BasePathCtrlController new]; + Create(parent, wxID_ANY, m_path); + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + // Do native configuration *after* Create() to undo some of what it did: + if ([m_path respondsToSelector:@selector(setEditable:)]) + [m_path setEditable:NO]; + [m_path setTarget:m_ctrl]; + [m_path setAction:@selector(pathClicked:)]; + [m_path setDoubleAction:@selector(pathClicked:)]; + } + + void SetPath(const wxString& path) + { + m_path.URL = [[NSURL alloc] initFileURLWithPath:str::to_NS(path)]; + } + +private: + NSPathControl *m_path; + BasePathCtrlController *m_ctrl; +}; + +#else // Win/GTK+ + +class PropertiesDialog::BasePathCtrl : public wxStaticText +{ +public: + BasePathCtrl(wxWindow *parent) : wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, + wxST_ELLIPSIZE_MIDDLE | wxST_NO_AUTORESIZE) + { + #ifdef __WXMSW__ + SetBackgroundColour(*wxWHITE); + SetForegroundColour(wxColour("#58595C")); + #endif + } + + void SetPath(const wxString& path) + { + SetLabel(bidi::platform_mark_direction(path)); + } +}; + +#endif + +class PropertiesDialog::PathsList : public wxPanel +{ +public: + PathsList(wxWindow *parent, const wxString& label, std::shared_ptr data) + : wxPanel(parent, wxID_ANY), + m_data(data) + { +#if defined(__WXOSX__) + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + // FIXME: gross hack to make inside-notebook color to match + SetBackgroundColour(parent->GetBackgroundColour().ChangeLightness(93)); +#elif defined(__WXMSW__) + SetBackgroundColour(*wxWHITE); +#endif + + auto sizer = new wxBoxSizer(wxVERTICAL); + SetSizer(sizer); + + auto lbl = new wxStaticText(this, wxID_ANY, label); + sizer->Add(lbl, wxSizerFlags().Expand()); + m_list = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, nullptr, wxLB_EXTENDED); + sizer->Add(m_list, wxSizerFlags(1).Expand()); + +#if defined(__WXOSX__) + auto add = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("NSAddTemplate"), wxDefaultPosition, wxSize(18, 18), wxBORDER_SUNKEN); + auto remove = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("NSRemoveTemplate"), wxDefaultPosition, wxSize(18,18), wxBORDER_SUNKEN); +#elif defined(__WXMSW__) + auto add = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("list-add"), wxDefaultPosition, wxSize(19,19)); + auto remove = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("list-remove"), wxDefaultPosition, wxSize(19,19)); +#elif defined(__WXGTK__) + auto add = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("list-add"), wxDefaultPosition, wxDefaultSize, wxNO_BORDER); + auto remove = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap("list-remove"), wxDefaultPosition, wxDefaultSize, wxNO_BORDER); +#endif + auto buttonSizer = new wxBoxSizer(wxHORIZONTAL); + buttonSizer->Add(add); + buttonSizer->Add(remove); + sizer->Add(buttonSizer); + + SetDropTarget(new DropTarget(this)); + + add->Bind(wxEVT_BUTTON, &PathsList::OnAddMenu, this); + remove->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& e){ + wxArrayInt dummy; + e.Enable(m_list->GetSelections(dummy) > 0); + }); + remove->Bind(wxEVT_BUTTON, [=](wxCommandEvent&){ + wxArrayInt s; + m_list->GetSelections(s); + Remove(s); + }); + +#if 0 + // TODO: Add background overlay with instructions: + _("Drag and Drop Folders Here\n\nor use the + button") + _("Drag and drop folders here\n\nor use the + button") +#endif + } + + void UpdateFromData() + { + m_list->Clear(); + for (auto& p: Array()) + { + wxString s; + if (wxIsWild(p)) + s = p; + else + s = RelativePath(p, m_data->basepath, wxPATH_NATIVE); + m_list->Append(bidi::platform_mark_direction(s)); + } + } + + void Add(const wxArrayString& files) + { + auto& a = Array(); + for (auto& f: files) + { + if (wxIsWild(f)) + a.push_back(f); + else + a.push_back(NormalizedPath(f, wxPATH_NATIVE)); + } + m_data->Changed = true; + m_data->UpdateBasePath(); + m_data->RefreshView(); + } + + void Add(const wxString& f) + { + Add(wxArrayString(1, &f)); + } + + void Remove(wxArrayInt selection) + { + auto& a = Array(); + std::sort(selection.begin(), selection.end()); + for (auto i = selection.rbegin(); i != selection.rend(); ++i) + a.RemoveAt(*i); + m_data->Changed = true; + m_data->UpdateBasePath(); + m_data->RefreshView(); + } + +protected: + virtual wxArrayString& Array() = 0; + virtual bool AllowWildcards() const = 0; + + class DropTarget : public wxFileDropTarget + { + public: + DropTarget(PathsList *parent) : m_parent(parent) {} + + bool OnDropFiles(wxCoord, wxCoord, const wxArrayString& files) override + { + m_parent->Add(files); + return true; + } + + wxDragResult OnDragOver(wxCoord, wxCoord, wxDragResult) override { return wxDragCopy; } + + PathsList *m_parent; + }; + + void OnAddMenu(wxCommandEvent& e) + { + static const auto idFolder = wxNewId(); + static const auto idFile = wxNewId(); + static const auto idWild = wxNewId(); + + wxMenu *menu = new wxMenu(); + menu->Append(idFolder, MSW_OR_OTHER(_("Add folders..."), _("Add Folders..."))); + menu->Append(idFile, MSW_OR_OTHER(_("Add files..."), _("Add Files..."))); + if (AllowWildcards()) + menu->Append(idWild, MSW_OR_OTHER(_("Add wildcard..."), _("Add Wildcard..."))); + + menu->Bind(wxEVT_MENU, [=](wxCommandEvent&){ + wxDirDialog dlg(this, + OSX_OR_OTHER("", _("Select directory")), + m_data->basepath, + wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + if (dlg.ShowModal() == wxID_OK) + Add(dlg.GetPath()); + }, + idFolder); + + menu->Bind(wxEVT_MENU, [=](wxCommandEvent&){ + wxFileDialog dlg(this, + "", + m_data->basepath, + "", + wxFileSelectorDefaultWildcardStr, + wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); + if (dlg.ShowModal() != wxID_OK) + return; + wxArrayString files; + dlg.GetPaths(files); + Add(files); + }, + idFile); + + menu->Bind(wxEVT_MENU, [=](wxCommandEvent&){ + wxTextEntryDialog dlg(this, "", ""); + if (dlg.ShowModal() != wxID_OK) + return; + Add(dlg.GetValue()); + }, + idWild); + + auto win = dynamic_cast(e.GetEventObject()); +#ifdef __WXOSX__ + win->PopupMenu(menu, 9, 29); +#else + win->PopupMenu(menu, 0, win->GetSize().y); +#endif + } + + std::shared_ptr m_data; + wxListBox *m_list; +}; + +class PropertiesDialog::SourcePathsList : public PropertiesDialog::PathsList +{ +public: + SourcePathsList(wxWindow *parent, std::shared_ptr data) + : PathsList(parent, _("Paths"), data) {} + +protected: + wxArrayString& Array() override { return m_data->paths; } + bool AllowWildcards() const override { return false; } +}; + +class PropertiesDialog::ExcludedPathsList : public PropertiesDialog::PathsList +{ +public: + ExcludedPathsList(wxWindow *parent, std::shared_ptr data) + : PathsList(parent, _("Excluded paths"), data) {} + +protected: + wxArrayString& Array() override { return m_data->excluded; } + bool AllowWildcards() const override { return true; } +}; + + +PropertiesDialog::PropertiesDialog(wxWindow *parent, CatalogPtr cat, bool fileExistsOnDisk, int initialPage) + : m_validatedPlural(-1), m_validatedLang(-1) +{ + m_hasLang = cat->HasCapability(Catalog::Cap::LanguageSetting); + + wxXmlResource::Get()->LoadDialog(this, parent, "properties"); + + m_team = XRCCTRL(*this, "team_name", wxTextCtrl); + m_teamEmail = XRCCTRL(*this, "team_email", wxTextCtrl); + m_project = XRCCTRL(*this, "prj_name", wxTextCtrl); + m_language = XRCCTRL(*this, "language", LanguageCtrl); + m_charset = XRCCTRL(*this, "charset", wxComboBox); + m_sourceCodeCharset = XRCCTRL(*this, "source_code_charset", wxComboBox); + + m_pluralFormsDefault = XRCCTRL(*this, "plural_forms_default", wxRadioButton); + m_pluralFormsCustom = XRCCTRL(*this, "plural_forms_custom", wxRadioButton); + m_pluralFormsExpr = XRCCTRL(*this, "plural_forms_expr", wxTextCtrl); +#if defined(__WXMSW__) && !wxCHECK_VERSION(3,1,0) + m_pluralFormsExpr->SetFont(m_pluralFormsExpr->GetFont().Smaller()); +#else + m_pluralFormsExpr->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + if (!m_hasLang) + { + for (auto w: { (wxWindow*)m_language, + (wxWindow*)m_pluralFormsDefault, + (wxWindow*)m_pluralFormsCustom, + (wxWindow*)m_pluralFormsExpr, + XRCCTRL(*this, "language_label", wxWindow), + XRCCTRL(*this, "plural_forms_label", wxWindow), + XRCCTRL(*this, "plural_forms_help", wxWindow) }) + { + w->GetContainingSizer()->Hide(w); + } + } + + // my custom controls: + auto page_paths = XRCCTRL(*this, "page_paths", wxWindow); + auto page_keywords = XRCCTRL(*this, "page_keywords", wxWindow); + + m_keywords = new wxEditableListBox(page_keywords, -1, _("Additional keywords")); + + m_pathsData.reset(new PathsData); + m_basePath = new BasePathCtrl(page_paths); + m_paths = new SourcePathsList(page_paths, m_pathsData); + m_excludedPaths = new ExcludedPathsList(page_paths, m_pathsData); + m_pathsData->RefreshView = [=]{ + m_basePath->SetPath(m_pathsData->basepath); + m_paths->UpdateFromData(); + m_excludedPaths->UpdateFromData(); + }; + + m_paths->SetMinSize(wxSize(PX(450), PX(90))); + m_excludedPaths->SetMinSize(wxSize(-1, PX(90))); + +#ifdef __WXOSX__ + for (auto c: m_keywords->GetChildren()) + { + c->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + for (auto c2: c->GetChildren()) + c2->SetWindowVariant(wxWINDOW_VARIANT_SMALL); + } +#endif // __WXOSX__ + + wxXmlResource::Get()->AttachUnknownControl("basepath", m_basePath); + wxXmlResource::Get()->AttachUnknownControl("keywords", m_keywords); + wxXmlResource::Get()->AttachUnknownControl("paths", m_paths); + wxXmlResource::Get()->AttachUnknownControl("excluded_paths", m_excludedPaths); + + // Controls setup: + m_project->SetHint(_("Name of the project the translation is for")); + m_pluralFormsExpr->SetHint(_("e.g. nplurals=2; plural=(n > 1);")); + + Layout(); + GetSizer()->SetSizeHints(this); + + if (!fileExistsOnDisk) + DisableSourcesControls(); + + auto nb = XRCCTRL(*this, "properties_notebook", wxNotebook); + nb->SetSelection(initialPage); + + m_language->Bind(wxEVT_TEXT, &PropertiesDialog::OnLanguageChanged, this); + m_language->Bind(wxEVT_COMBOBOX, &PropertiesDialog::OnLanguageChanged, this); + + m_pluralFormsDefault->Bind(wxEVT_RADIOBUTTON, &PropertiesDialog::OnPluralFormsDefault, this); + m_pluralFormsCustom->Bind(wxEVT_RADIOBUTTON, &PropertiesDialog::OnPluralFormsCustom, this); + m_pluralFormsExpr->Bind( + wxEVT_UPDATE_UI, + [=](wxUpdateUIEvent& e){ e.Enable(m_pluralFormsCustom->GetValue()); }); + m_pluralFormsExpr->Bind( + wxEVT_TEXT, + [=](wxCommandEvent& e){ m_validatedPlural = -1; e.Skip(); }); + Bind(wxEVT_UPDATE_UI, + [=](wxUpdateUIEvent& e){ e.Enable(Validate()); }, + wxID_OK); + CallAfter([=]{ + m_project->SetFocus(); + }); + + auto openBasepath = XRCCTRL(*this, "open_basepath", wxBitmapButton); + openBasepath->Bind(wxEVT_BUTTON, [=](wxCommandEvent&){ + wxLaunchDefaultApplication(m_pathsData->basepath); + }); +} + + +namespace +{ + +#define UTF_8_CHARSET _("UTF-8 (recommended)") + +void SetCharsetToCombobox(wxComboBox *ctrl, const wxString& value) +{ + static const wxString all_charsets[] = + { + UTF_8_CHARSET, + // and legacy ones + "iso-8859-1", + "iso-8859-2", + "iso-8859-3", + "iso-8859-4", + "iso-8859-5", + "iso-8859-6", + "iso-8859-7", + "iso-8859-8", + "iso-8859-9", + "iso-8859-10", + "iso-8859-11", + "iso-8859-12", + "iso-8859-13", + "iso-8859-14", + "iso-8859-15", + "koi8-r", + "windows-1250", + "windows-1251", + "windows-1252", + "windows-1253", + "windows-1254", + "windows-1255", + "windows-1256", + "windows-1257" + }; + + ctrl->Clear(); + for ( int i = 0; i < (int)WXSIZEOF(all_charsets); i++ ) + ctrl->Append(all_charsets[i]); + + const wxString low = value.Lower(); + if ( low == "utf-8" || low == "utf8" ) + ctrl->SetValue(UTF_8_CHARSET); + else + ctrl->SetValue(value); +} + +wxString GetCharsetFromCombobox(wxComboBox *ctrl) +{ + wxString c = ctrl->GetValue(); + if ( c == UTF_8_CHARSET ) + c = "UTF-8"; + return c; +} + +void GetKeywordsFromControl(wxEditableListBox *box, bool defaultKeywords, wxArrayString& output) +{ + wxArrayString arr; + box->GetStrings(arr); + + output.clear(); + if (!defaultKeywords) + output.push_back(""); + + for (auto x: arr) + { + if (x.empty()) + continue; + wxString rest; + if (x.EndsWith(" ()", &rest) || x.EndsWith("()", &rest)) + x = rest; + output.push_back(x); + } +} + +} // anonymous namespace + + +void PropertiesDialog::TransferTo(const CatalogPtr& cat) +{ + SetCharsetToCombobox(m_charset, cat->Header().Charset); + SetCharsetToCombobox(m_sourceCodeCharset, cat->Header().SourceCodeCharset); + + #define SET_VAL(what,what2) m_##what2->SetValue(cat->Header().what) + SET_VAL(Team, team); + SET_VAL(TeamEmail, teamEmail); + SET_VAL(Project, project); + #undef SET_VAL + + if (m_hasLang) + { + m_language->SetLang(cat->Header().Lang); + OnLanguageValueChanged(m_language->GetValue()); + + wxString pf_def = cat->Header().Lang.DefaultPluralFormsExpr(); + wxString pf_cat = cat->Header().GetHeader("Plural-Forms"); + if (pf_cat == "nplurals=INTEGER; plural=EXPRESSION;") + pf_cat = pf_def; + + m_pluralFormsExpr->SetValue(bidi::mark_direction(pf_cat, TextDirection::LTR)); + if (!pf_cat.empty() && pf_cat == pf_def) + m_pluralFormsDefault->SetValue(true); + else + m_pluralFormsCustom->SetValue(true); + } + + auto kw = cat->Header().Keywords; + auto empty_kw = kw.Index(""); + m_defaultKeywords = (empty_kw == wxNOT_FOUND); + if (empty_kw != wxNOT_FOUND) + kw.RemoveAt(empty_kw); + m_keywords->SetStrings(kw); + + m_pathsData->GetFromCatalog(cat); + m_pathsData->RefreshView(); +} + + +void PropertiesDialog::TransferFrom(const CatalogPtr& cat) +{ + cat->Header().Charset = GetCharsetFromCombobox(m_charset); + cat->Header().SourceCodeCharset = GetCharsetFromCombobox(m_sourceCodeCharset); + + #define GET_VAL(what,what2) cat->Header().what = m_##what2->GetValue() + GET_VAL(Team, team); + GET_VAL(TeamEmail, teamEmail); + GET_VAL(Project, project); + #undef GET_VAL + + if (m_hasLang) + { + Language lang = m_language->GetLang(); + if (lang.IsValid()) + cat->Header().Lang = lang; + + wxString pluralForms; + if (m_pluralFormsDefault->GetValue() && cat->Header().Lang.IsValid()) + { + pluralForms = cat->Header().Lang.DefaultPluralFormsExpr(); + } + + if (pluralForms.empty()) + { + pluralForms = bidi::strip_control_chars(m_pluralFormsExpr->GetValue().Strip(wxString::both)); + if ( !pluralForms.empty() && !pluralForms.EndsWith(";") ) + pluralForms += ";"; + } + cat->Header().SetHeaderNotEmpty("Plural-Forms", pluralForms); + } + + GetKeywordsFromControl(m_keywords, m_defaultKeywords, cat->Header().Keywords); + + if (m_pathsData->Changed) + m_pathsData->SetToCatalog(cat); +} + + +void PropertiesDialog::DisableSourcesControls() +{ + m_basePath->Disable(); + for (auto p: {m_paths, m_excludedPaths}) + { + p->Disable(); + for (auto c: p->GetChildren()) + c->Disable(); + } + + auto label = XRCCTRL(*this, "sources_path_label", wxStaticText); + label->SetLabel(_("Please save the file first. This section cannot be edited until then.")); + label->SetForegroundColour(*wxRED); +} + + +void PropertiesDialog::OnLanguageChanged(wxCommandEvent& event) +{ + m_validatedLang = -1; + OnLanguageValueChanged(event.GetString()); + event.Skip(); +} + +void PropertiesDialog::OnLanguageValueChanged(const wxString& langstr) +{ + Language lang = Language::TryParse(langstr.ToStdWstring()); + wxString pluralForm = lang.DefaultPluralFormsExpr(); + if (pluralForm.empty()) + { + m_pluralFormsDefault->Disable(); + m_pluralFormsCustom->SetValue(true); + } + else + { + m_pluralFormsDefault->Enable(); + if (m_pluralFormsExpr->GetValue().empty() || + m_pluralFormsExpr->GetValue() == pluralForm) + { + m_pluralFormsDefault->SetValue(true); + } + } +} + +void PropertiesDialog::OnPluralFormsDefault(wxCommandEvent& event) +{ + m_rememberedPluralForm = m_pluralFormsExpr->GetValue(); + + Language lang = m_language->GetLang(); + if (lang.IsValid()) + { + wxString defaultForm = lang.DefaultPluralFormsExpr(); + if (!defaultForm.empty()) + m_pluralFormsExpr->SetValue(bidi::mark_direction(defaultForm, TextDirection::LTR)); + } + + event.Skip(); +} + +void PropertiesDialog::OnPluralFormsCustom(wxCommandEvent& event) +{ + if (!m_rememberedPluralForm.empty()) + m_pluralFormsExpr->SetValue(m_rememberedPluralForm); + + event.Skip(); +} + + +bool PropertiesDialog::Validate() +{ + if (!m_hasLang) + return true; + + if (m_validatedPlural == -1) + { + m_validatedPlural = 1; + if (m_pluralFormsCustom->GetValue()) + { + wxString form = bidi::strip_control_chars(m_pluralFormsExpr->GetValue()); + if (!form.empty()) + { + std::unique_ptr calc(PluralFormsCalculator::make(form.ToAscii())); + if (!calc) + m_validatedPlural = 0; + } + } + } + + if (m_validatedLang == -1) + { + m_validatedLang = m_language->IsValid() ? 1 : 0; + } + + return m_validatedLang == 1 && + m_validatedPlural == 1; +} diff --git a/src/propertiesdlg.h b/src/propertiesdlg.h new file mode 100644 index 0000000..d9de382 --- /dev/null +++ b/src/propertiesdlg.h @@ -0,0 +1,88 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _PROPERTIESDLG_H_ +#define _PROPERTIESDLG_H_ + +#include +#include + +#include + +#include "catalog.h" +#include "languagectrl.h" + +class WXDLLIMPEXP_FWD_ADV wxEditableListBox; +class WXDLLIMPEXP_FWD_CORE wxTextCtrl; +class WXDLLIMPEXP_FWD_CORE wxRadioButton; +class WXDLLIMPEXP_FWD_CORE wxComboBox; + +/// Dialog setting various catalog parameters. +class PropertiesDialog : public wxDialog +{ + public: + PropertiesDialog(wxWindow *parent, CatalogPtr cat, bool fileExistsOnDisk, int initialPage = 0); + + /// Reads data from the catalog and fill dialog's controls. + void TransferTo(const CatalogPtr& cat); + + /// Saves data from the dialog to the catalog. + void TransferFrom(const CatalogPtr& cat); + + virtual bool Validate(); + + private: + void DisableSourcesControls(); + + void OnLanguageChanged(wxCommandEvent& event); + void OnLanguageValueChanged(const wxString& langstr); + void OnPluralFormsDefault(wxCommandEvent& event); + void OnPluralFormsCustom(wxCommandEvent& event); + + struct PathsData; + class BasePathCtrl; + class PathsList; + class SourcePathsList; + class ExcludedPathsList; + + wxTextCtrl *m_team, *m_teamEmail, *m_project; + LanguageCtrl *m_language; + wxComboBox *m_charset, *m_sourceCodeCharset; + wxRadioButton *m_pluralFormsDefault, *m_pluralFormsCustom; + wxTextCtrl *m_pluralFormsExpr; + BasePathCtrl *m_basePath; + std::shared_ptr m_pathsData; + PathsList *m_paths, *m_excludedPaths; + wxEditableListBox *m_keywords; + bool m_defaultKeywords; + wxString m_rememberedPluralForm; + + bool m_hasLang; + int m_validatedPlural, m_validatedLang; +}; + + + +#endif // _PROPERTIESDLG_H_ diff --git a/src/resources/comment.xrc b/src/resources/comment.xrc new file mode 100644 index 0000000..5b08361 --- /dev/null +++ b/src/resources/comment.xrc @@ -0,0 +1,60 @@ + + + + Edit comment + + + wxVERTICAL + + + + + 5d + wxLEFT|wxTOP|wxRIGHT + + + 2d + + + + 100,-1d + + 1 + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + 150,80d + + + + + + + 1 + + 5d + wxLEFT|wxRIGHT|wxBOTTOM + + + + + + wxRIGHT|wxBOTTOM + 5d + + + + + Clear the comment + + wxRIGHT|wxBOTTOM + 5d + + + wxTOP|wxALIGN_RIGHT + 5d + + + + diff --git a/src/resources/manager.xrc b/src/resources/manager.xrc new file mode 100644 index 0000000..6e3cee5 --- /dev/null +++ b/src/resources/manager.xrc @@ -0,0 +1,112 @@ + + + + + wxHORIZONTAL + + + 100 + vertical + + + + + small + + + + wxEXPAND|wxALL + 2d + + 200,200d + + + + + + + 4,4 + 32,32 + + + + Create new translations project + + + + + Edit the project + + + + + Delete the project + + + + + + Update all catalogs in the project + + + + Edit project + + wxVERTICAL + + + + + 5d + wxLEFT|wxRIGHT|wxTOP + + + + 1 + + wxEXPAND|wxLEFT|wxRIGHT + 5d + + + + + wxEXPAND|wxALL + 5d + 140,100d + + + + + Add directory to the list + + wxRIGHT|wxBOTTOM|wxALIGN_RIGHT + 5d + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + + + + + 1 + + 5d + wxLEFT|wxRIGHT|wxBOTTOM + + + + + + wxRIGHT|wxBOTTOM + 5d + + + wxALIGN_RIGHT + + + + diff --git a/src/resources/menus.xrc b/src/resources/menus.xrc new file mode 100644 index 0000000..f44f07a --- /dev/null +++ b/src/resources/menus.xrc @@ -0,0 +1,382 @@ + + + + + + + + + Ctrl+N + + + + + + + + + Ctrl+O + + + + + + + + + + + + Ctrl+W + + + + Ctrl+S + + + + + Shift+Ctrl+S + + + + + + + + Shift+Ctrl+E + + + + + + + + Ctrl+, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ctrl+K + + + + + Ctrl+B + + + + + Ctrl+Shift+B + + + + + + Ctrl+U + 1 + + + + + Ctrl+M + + + + + + + + + + + + + Ctrl+F + + + + Ctrl+H + + + + Ctrl+G + + + + Ctrl+Shift+G + + + + + + Ctrl+F + + + + Ctrl+Alt+F + + + + Ctrl+G + + + + Ctrl+Shift+G + + + + + + + + + + + + + + 1 + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + + 1 + Ctrl+Alt+S + + + + + 1 + Ctrl+/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alt+Return + Alt+Enter + Alt+Ctrl+P + + + + + + + + + Ctrl+Return + Ctrl+Enter + + + + + + Ctrl+Up + + + + + Ctrl+Down + + + + + Ctrl+Shift+Up + + + + + Ctrl+Shift+Down + + + + + + Ctrl+Alt+Left + + + + + Ctrl+Alt+Right + + + + + + + + + + F1 + F1 + Ctrl+? + + + + + + + + + + + + + + + + + + + + + + + Ctrl+N + + + + + + + + + Ctrl+O + + + + + + + + + + + + Ctrl+W + + + + Ctrl+, + + + + + + + + + + + + + + + + + + F1 + F1 + Ctrl+? + + + + + + + + + + + + + + + + diff --git a/src/resources/prefs.xrc b/src/resources/prefs.xrc new file mode 100644 index 0000000..d6fd83f --- /dev/null +++ b/src/resources/prefs.xrc @@ -0,0 +1,154 @@ + + + + Extractor setup + small + + 300,-1d + wxVERTICAL + + + + wxVERTICAL + + + + + wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 5d + + + + wxEXPAND|wxLEFT|wxRIGHT + 5d + + + + + + 5d + wxLEFT|wxRIGHT|wxTOP + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + 5d + wxEXPAND|wxLEFT|wxRIGHT|wxTOP + + + + + wxVERTICAL + + + + + wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 5d + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + + + small + #777777 + + wxLEFT|wxRIGHT + 5d + + + + + + 5d + wxLEFT|wxRIGHT|wxTOP + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + + + small + #777777 + + wxLEFT|wxRIGHT + 5d + + + + + + 5d + wxLEFT|wxRIGHT|wxTOP + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + + + small + #777777 + + wxLEFT|wxRIGHT + 5d + + + + + + 5d + wxLEFT|wxRIGHT|wxTOP + + + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + 5d + + + + + small + #777777 + + wxLEFT|wxRIGHT + 5d + + + 5d + wxEXPAND|wxLEFT|wxRIGHT|wxTOP + + + + + + normal + 1 + + + + + normal + + + + wxALIGN_RIGHT + wxALIGN_RIGHT|wxALL + wxALIGN_RIGHT|wxTOP|wxBOTTOM + 5d + + + + diff --git a/src/resources/progress.xrc b/src/resources/progress.xrc new file mode 100644 index 0000000..92ccacc --- /dev/null +++ b/src/resources/progress.xrc @@ -0,0 +1,38 @@ + + + + 1 + + wxHORIZONTAL + + + wxVERTICAL + + + small + + 5d + wxTOP + + + + 160,-1d + + + 2d + wxTOP + + + + + + 6d + wxLEFT|wxTOP|wxBOTTOM|wxALIGN_RIGHT + + + 6d + wxLEFT|wxRIGHT + + + + diff --git a/src/resources/properties.xrc b/src/resources/properties.xrc new file mode 100644 index 0000000..4b50b97 --- /dev/null +++ b/src/resources/properties.xrc @@ -0,0 +1,269 @@ + + + + Catalog properties + 1 + + + wxVERTICAL + + + + + + + 1 + 2 + + + + + wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 100,-1d + 1 + + 5d + wxEXPAND|wxRIGHT|wxTOP|wxBOTTOM + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 5d + wxEXPAND|wxRIGHT|wxBOTTOM + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + + + + 5d + wxEXPAND|wxRIGHT + + + + + + + 5d + wxEXPAND|wxRIGHT + + + + + 3d + wxEXPAND|wxRIGHT|wxTOP|wxBOTTOM + + + 10,20 + + + + + https://poedit.net/trac/wiki/Doc/PluralForms + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 5d + wxEXPAND|wxRIGHT|wxBOTTOM + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 5d + wxEXPAND|wxRIGHT|wxBOTTOM + + + 10,20 + + + 10,20 + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 100,-1d + + 5d + wxEXPAND|wxRIGHT|wxBOTTOM + + + + + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 5d + + + + 100,-1d + + 5d + wxEXPAND|wxRIGHT|wxBOTTOM + + + + + + + + + + wxVERTICAL + + + + + wxLEFT|wxRIGHT|wxTOP + 5d + + + + + + + small + + 5d + wxLEFT|wxTOP|wxALIGN_CENTER_VERTICAL + + + + wxLEFT|wxTOP|wxALIGN_CENTER_VERTICAL + 5d + + + + 3,-1d + + + + + small + + + + #ffffff + + wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL + 5d + + + 1,1d + + + wxEXPAND + + + + + wxEXPAND|wxALL + 5d + + + + + + wxEXPAND|wxALL + 5d + + + + + + + + + wxVERTICAL + + + + + wxLEFT|wxRIGHT|wxTOP + 5d + + + + + wxLEFT|wxRIGHT|wxTOP|wxEXPAND + 5d + + + 0,4 + + + + + https://poedit.net/trac/wiki/Doc/Keywords + + wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_RIGHT + 5d + + + + + + + wxEXPAND|wxTOP|wxLEFT|wxRIGHT + 5d + + + + + + normal + 1 + + + + + normal + + + + wxALIGN_RIGHT + wxALIGN_RIGHT|wxALL + wxALIGN_RIGHT|wxTOP|wxBOTTOM + 5d + + + + diff --git a/src/resources/summary.xrc b/src/resources/summary.xrc new file mode 100644 index 0000000..286f8db --- /dev/null +++ b/src/resources/summary.xrc @@ -0,0 +1,91 @@ + + + + Update summary + + + 300,200d + wxVERTICAL + + + small + + + + wxVERTICAL + + + + + 5d + wxALL + + + + 5d + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + + + + + + + + + wxVERTICAL + + + + + 5d + wxALL + + + + 5d + + wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM + + + + + + + + wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 5d + + + + wxHORIZONTAL + + + small + + + wxALL + 5d + + + + + + 1 + + 5d + wxTOP|wxLEFT|wxBOTTOM + + + + + + 5d + wxALL + + + wxEXPAND + + + + diff --git a/src/resources/toolbar.xrc b/src/resources/toolbar.xrc new file mode 100644 index 0000000..71a6b7b --- /dev/null +++ b/src/resources/toolbar.xrc @@ -0,0 +1,62 @@ + + + + 3,3d + + + + + + + + + Open catalog + + + + + Open catalog + + + + + Save catalog + + + + + Save catalog + + + + + + + + Check for errors in the translation + + + + + + Update catalog - synchronize it with sources + + + + + + + Toggled if selected string has fuzzy translation + 1 + + + + + + + Show or hide the sidebar + + + + diff --git a/src/sidebar.cpp b/src/sidebar.cpp new file mode 100644 index 0000000..9ee02ab --- /dev/null +++ b/src/sidebar.cpp @@ -0,0 +1,857 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "sidebar.h" + +#include "catalog.h" +#include "customcontrols.h" +#include "commentdlg.h" +#include "concurrency.h" +#include "errors.h" +#include "hidpi.h" +#include "utility.h" +#include "unicode_helpers.h" + +#include "tm/suggestions.h" +#include "tm/transmem.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SIDEBAR_BACKGROUND wxColour("#EDF0F4") +#define GRAY_LINES_COLOR wxColour(220,220,220) +#define GRAY_LINES_COLOR_DARK wxColour(180,180,180) + + +class SidebarSeparator : public wxWindow +{ +public: + SidebarSeparator(wxWindow *parent) + : wxWindow(parent, wxID_ANY), + m_sides(SIDEBAR_BACKGROUND), + m_center(GRAY_LINES_COLOR_DARK) + { + Bind(wxEVT_PAINT, &SidebarSeparator::OnPaint, this); + } + + wxSize DoGetBestSize() const override + { + return wxSize(-1, 1); + } + +private: + void OnPaint(wxPaintEvent&) + { + wxPaintDC dc(this); + auto w = dc.GetSize().x; + dc.GradientFillLinear(wxRect(0,0,PX(15),PX(1)), m_sides, m_center); + dc.GradientFillLinear(wxRect(PX(15),0,w,PX(1)), m_center, m_sides); + } + + wxColour m_sides, m_center; +}; + + +SidebarBlock::SidebarBlock(Sidebar *parent, const wxString& label, int flags) +{ + m_parent = parent; + m_sizer = new wxBoxSizer(wxVERTICAL); + if (!(flags & NoUpperMargin)) + m_sizer->AddSpacer(PX(15)); + if (!label.empty()) + { + if (!(flags & NoUpperMargin)) + { + m_sizer->Add(new SidebarSeparator(parent), + wxSizerFlags().Expand().Border(wxBOTTOM|wxLEFT, PX(2))); + } + m_headerSizer = new wxBoxSizer(wxHORIZONTAL); + m_headerSizer->Add(new HeadingLabel(parent, label), wxSizerFlags().Expand()); + m_sizer->Add(m_headerSizer, wxSizerFlags().Expand().PXDoubleBorder(wxLEFT|wxRIGHT)); + } + m_innerSizer = new wxBoxSizer(wxVERTICAL); + m_sizer->Add(m_innerSizer, wxSizerFlags(1).Expand().PXDoubleBorder(wxLEFT|wxRIGHT)); +} + +void SidebarBlock::Show(bool show) +{ + m_sizer->ShowItems(show); +} + +void SidebarBlock::SetItem(const CatalogItemPtr& item) +{ + if (!item) + { + Show(false); + return; + } + + bool use = ShouldShowForItem(item); + if (use) + Update(item); + Show(use); +} + + +class OldMsgidSidebarBlock : public SidebarBlock +{ +public: + OldMsgidSidebarBlock(Sidebar *parent) + /// TRANSLATORS: "Previous" as in used in the past, now replaced with newer. + : SidebarBlock(parent, _("Previous source text:")) + { + m_innerSizer->AddSpacer(PX(2)); + m_innerSizer->Add(new ExplanationLabel(parent, _("The old source text (before it changed during an update) that the fuzzy translation corresponds to.")), + wxSizerFlags().Expand()); + m_innerSizer->AddSpacer(PX(5)); + m_text = new SelectableAutoWrappingText(parent, ""); + m_innerSizer->Add(m_text, wxSizerFlags().Expand()); + } + + bool ShouldShowForItem(const CatalogItemPtr& item) const override + { + return item->HasOldMsgid(); + } + + void Update(const CatalogItemPtr& item) override + { + m_text->SetAndWrapLabel(item->GetOldMsgid()); + } + +private: + SelectableAutoWrappingText *m_text; +}; + + +class ExtractedCommentSidebarBlock : public SidebarBlock +{ +public: + ExtractedCommentSidebarBlock(Sidebar *parent) + : SidebarBlock(parent, _("Notes for translators:")) + { + m_innerSizer->AddSpacer(PX(5)); + m_comment = new SelectableAutoWrappingText(parent, ""); + m_innerSizer->Add(m_comment, wxSizerFlags().Expand()); + } + + bool ShouldShowForItem(const CatalogItemPtr& item) const override + { + return item->HasExtractedComments(); + } + + void Update(const CatalogItemPtr& item) override + { + auto comment = wxJoin(item->GetExtractedComments(), '\n', '\0'); + if (comment.StartsWith("TRANSLATORS:") || comment.StartsWith("translators:")) + { + comment.Remove(0, 12); + if (!comment.empty() && comment[0] == ' ') + comment.Remove(0, 1); + } + m_comment->SetAndWrapLabel(comment); + } + +private: + SelectableAutoWrappingText *m_comment; +}; + + +class CommentSidebarBlock : public SidebarBlock +{ +public: + CommentSidebarBlock(Sidebar *parent) + : SidebarBlock(parent, _("Comment:")) + { + m_innerSizer->AddSpacer(PX(5)); + m_comment = new SelectableAutoWrappingText(parent, ""); + m_innerSizer->Add(m_comment, wxSizerFlags().Expand()); + } + + bool ShouldShowForItem(const CatalogItemPtr& item) const override + { + return item->HasComment(); + } + + void Update(const CatalogItemPtr& item) override + { + auto text = CommentDialog::RemoveStartHash(item->GetComment()); + text.Trim(); + m_comment->SetAndWrapLabel(text); + } + +private: + SelectableAutoWrappingText *m_comment; +}; + + +class AddCommentSidebarBlock : public SidebarBlock +{ +public: + AddCommentSidebarBlock(Sidebar *parent) : SidebarBlock(parent, "") + { + #ifdef __WXMSW__ + auto label = _("Add comment"); + #else + auto label = _("Add Comment"); + #endif + m_btn = new wxButton(parent, XRCID("menu_comment"), _("Add Comment")); + m_innerSizer->AddStretchSpacer(); + m_innerSizer->Add(m_btn, wxSizerFlags().Right()); + } + + bool IsGrowable() const override { return true; } + + bool ShouldShowForItem(const CatalogItemPtr&) const override + { + return m_parent->FileHasCapability(Catalog::Cap::UserComments); + } + + void Update(const CatalogItemPtr& item) override + { + #ifdef __WXMSW__ + auto add = _("Add comment"); + auto edit = _("Edit comment"); + #else + auto add = _("Add Comment"); + auto edit = _("Edit Comment"); + #endif + m_btn->SetLabel(item->HasComment() ? edit : add); + } + +private: + wxButton *m_btn; +}; + + +wxDEFINE_EVENT(EVT_SUGGESTION_SELECTED, wxCommandEvent); + +class SuggestionWidget : public wxPanel +{ +public: + SuggestionWidget(wxWindow *parent) : wxPanel(parent, wxID_ANY) + { + m_icon = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap); + m_text = new AutoWrappingText(this, "TEXT"); + m_info = new InfoStaticText(this); + + auto top = new wxBoxSizer(wxHORIZONTAL); + auto right = new wxBoxSizer(wxVERTICAL); + top->AddSpacer(PX(2)); + top->Add(m_icon, wxSizerFlags().Top().PXBorder(wxTOP|wxBOTTOM)); + top->Add(right, wxSizerFlags(1).Expand().PXBorder(wxLEFT)); + right->Add(m_text, wxSizerFlags().Expand().Border(wxTOP, PX(4))); + right->Add(m_info, wxSizerFlags().Expand().Border(wxTOP|wxBOTTOM, PX(2))); + SetSizerAndFit(top); + + // setup mouse hover highlighting: + m_bg = parent->GetBackgroundColour(); + m_bgHighlight = m_bg.ChangeLightness(160); + + wxWindow* parts [] = { this, m_icon, m_text, m_info }; + for (auto w : parts) + { + w->Bind(wxEVT_MOTION, &SuggestionWidget::OnMouseMove, this); + w->Bind(wxEVT_LEAVE_WINDOW, &SuggestionWidget::OnMouseMove, this); + w->Bind(wxEVT_LEFT_UP, &SuggestionWidget::OnMouseClick, this); + } + } + + void SetValue(int index, const Suggestion& s, Language lang, const wxBitmap& icon, const wxString& tooltip) + { + m_value = s; + + auto percent = wxString::Format("%d%%", int(100 * s.score)); + + index++; + if (index < 10) + { + #ifdef __WXOSX__ + auto shortcut = wxString::Format(L"⌘%d", index); + #else + // TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently + auto shortcut = wxString::Format("%s%d", _("Ctrl+"), index); + #endif + m_info->SetLabel(wxString::Format(L"%s • %s", shortcut, percent)); + } + else + { + m_info->SetLabel(percent); + } + + m_icon->SetBitmap(icon); + + auto text = wxControl::EscapeMnemonics(bidi::mark_direction(s.text, lang)); + + m_text->SetLanguage(lang); + m_text->SetAndWrapLabel(text); + +#ifndef __WXOSX__ + // FIXME: Causes weird issues on OS X: tooltips appearing on the main list control, + // over toolbar, where the mouse just was etc. + m_icon->SetToolTip(tooltip); + m_text->SetToolTip(tooltip); +#endif + (void)tooltip; + + SetBackgroundColour(m_bg); + InvalidateBestSize(); + SetMinSize(wxDefaultSize); + SetMinSize(GetBestSize()); + } + +private: + class InfoStaticText : public wxStaticText + { + public: + InfoStaticText(wxWindow *parent) : wxStaticText(parent, wxID_ANY, "100%") + { + SetForegroundColour(ExplanationLabel::GetTextColor()); + #ifdef __WXMSW__ + SetFont(GetFont().Smaller()); + #else + SetWindowVariant(wxWINDOW_VARIANT_SMALL); + #endif + } + + void DoEnable(bool) override {} // wxOSX's disabling would break color + }; + + void OnMouseMove(wxMouseEvent& e) + { + auto rectWin = GetClientRect(); + rectWin.Deflate(1); // work around off-by-one issue on OS X + auto evtWin = static_cast(e.GetEventObject()); + auto mpos = e.GetPosition(); + if (evtWin != this) + mpos += evtWin->GetPosition(); + bool highlighted = rectWin.Contains(mpos); + SetBackgroundColour(highlighted ? m_bgHighlight : m_bg); + Refresh(); + } + + void OnMouseClick(wxMouseEvent&) + { + wxCommandEvent event(EVT_SUGGESTION_SELECTED); + event.SetEventObject(this); + event.SetString(m_value.text); + ProcessWindowEvent(event); + } + + Suggestion m_value; + wxStaticBitmap *m_icon; + AutoWrappingText *m_text; + wxStaticText *m_info; + wxColour m_bg, m_bgHighlight; +}; + + +SuggestionsSidebarBlock::SuggestionsSidebarBlock(Sidebar *parent, wxMenu *menu) + : SidebarBlock(parent, _("Translation suggestions:"), NoUpperMargin), + m_suggestionsMenu(menu), + m_msgPresent(false), + m_pendingQueries(0), + m_latestQueryId(0), + m_lastUpdateTime(0) +{ + m_provider.reset(new SuggestionsProvider); + + m_msgSizer = new wxBoxSizer(wxHORIZONTAL); + m_msgIcon = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap); + m_msgText = new ExplanationLabel(parent, ""); + m_msgSizer->Add(m_msgIcon, wxSizerFlags().Center().PXBorderAll()); + m_msgSizer->Add(m_msgText, wxSizerFlags(1).Center().PXBorder(wxTOP|wxBOTTOM)); + m_innerSizer->Add(m_msgSizer, wxSizerFlags().Expand()); + + m_innerSizer->AddSpacer(PX(10)); + + m_suggestionsSizer = new wxBoxSizer(wxVERTICAL); + m_extrasSizer = new wxBoxSizer(wxVERTICAL); + m_innerSizer->Add(m_suggestionsSizer, wxSizerFlags().Expand()); + m_innerSizer->Add(m_extrasSizer, wxSizerFlags().Expand()); + + m_iGotNothing = new wxStaticText(parent, wxID_ANY, + #ifdef __WXMSW__ + // TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). + _("No matches found") + #else + // TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). + _("No Matches Found") + #endif + ); + m_iGotNothing->SetForegroundColour(ExplanationLabel::GetTextColor().ChangeLightness(150)); + m_iGotNothing->SetWindowVariant(wxWINDOW_VARIANT_NORMAL); +#ifdef __WXMSW__ + m_iGotNothing->SetFont(m_iGotNothing->GetFont().Larger()); +#endif + m_innerSizer->Add(m_iGotNothing, wxSizerFlags().Center().Border(wxTOP|wxBOTTOM, PX(100))); + + BuildSuggestionsMenu(); + + m_suggestionsTimer.SetOwner(parent); + parent->Bind(wxEVT_TIMER, + &SuggestionsSidebarBlock::OnDelayedShowSuggestionsForItem, this, + m_suggestionsTimer.GetId()); +} + +SuggestionsSidebarBlock::~SuggestionsSidebarBlock() +{ +} + +wxBitmap SuggestionsSidebarBlock::GetIconForSuggestion(const Suggestion&) const +{ + return wxArtProvider::GetBitmap("SuggestionTM"); +} + +wxString SuggestionsSidebarBlock::GetTooltipForSuggestion(const Suggestion&) const +{ + return _(L"This string was found in Poedit’s translation memory."); +} + +void SuggestionsSidebarBlock::ClearMessage() +{ + m_msgPresent = false; + m_msgText->SetAndWrapLabel(""); + UpdateVisibility(); + m_parent->Layout(); +} + +void SuggestionsSidebarBlock::SetMessage(const wxString& icon, const wxString& text) +{ + m_msgPresent = true; + m_msgIcon->SetBitmap(wxArtProvider::GetBitmap(icon)); + m_msgText->SetAndWrapLabel(text); + UpdateVisibility(); + m_parent->Layout(); +} + +void SuggestionsSidebarBlock::ReportError(SuggestionsBackend*, std::exception_ptr e) +{ + SetMessage("SuggestionError", DescribeException(e)); +} + +void SuggestionsSidebarBlock::ClearSuggestions() +{ + m_suggestions.clear(); + UpdateSuggestionsMenu(); + UpdateVisibility(); +} + +void SuggestionsSidebarBlock::UpdateSuggestions(const SuggestionsList& hits) +{ + wxWindowUpdateLocker lock(m_parent); + + for (auto& h: hits) + { + // empty entries screw up menus (treated as stock items), don't use them: + if (!h.text.empty()) + m_suggestions.push_back(h); + } + + std::stable_sort(m_suggestions.begin(), m_suggestions.end()); + + // create any necessary controls: + while (m_suggestions.size() > m_suggestionsWidgets.size()) + { + auto w = new SuggestionWidget(m_parent); + m_suggestionsSizer->Add(w, wxSizerFlags().Expand()); + m_suggestionsWidgets.push_back(w); + } + m_innerSizer->Layout(); + + // update shown suggestions: + auto lang = m_parent->GetCurrentLanguage(); + for (size_t i = 0; i < m_suggestions.size(); ++i) + { + auto s = m_suggestions[i]; + m_suggestionsWidgets[i]->SetValue((int)i, s, lang, GetIconForSuggestion(s), GetTooltipForSuggestion(s)); + } + + m_innerSizer->Layout(); + UpdateVisibility(); + m_parent->Layout(); + + UpdateSuggestionsMenu(); +} + +void SuggestionsSidebarBlock::BuildSuggestionsMenu(int count) +{ + m_suggestionMenuItems.reserve(SUGGESTIONS_MENU_ENTRIES); + auto menu = m_suggestionsMenu; + for (int i = 0; i < count; i++) + { + auto text = wxString::Format("(empty)\t%s%d", _("Ctrl+"), i+1); + auto item = new wxMenuItem(menu, wxID_ANY, text); + item->SetBitmap(wxArtProvider::GetBitmap("SuggestionTM")); + + m_suggestionMenuItems.push_back(item); + menu->Append(item); + + m_suggestionsMenu->Bind(wxEVT_MENU, [this,i,menu](wxCommandEvent&){ + if (i >= (int)m_suggestions.size()) + return; + wxCommandEvent event(EVT_SUGGESTION_SELECTED); + event.SetEventObject(menu); + event.SetString(m_suggestions[i].text); + menu->GetWindow()->ProcessWindowEvent(event); + }, item->GetId()); + } +} + +void SuggestionsSidebarBlock::UpdateSuggestionsMenu() +{ + ClearSuggestionsMenu(); + + bool isRTL = m_parent->GetCurrentLanguage().IsRTL(); + wxString formatMask; + if (isRTL) + formatMask = L"\u202b%s\u202c\t" + _("Ctrl+") + "%d"; + else + formatMask = L"\u202a%s\u202c\t" + _("Ctrl+") + "%d"; + + int index = 0; + for (auto s: m_suggestions) + { + if (index >= SUGGESTIONS_MENU_ENTRIES) + break; + + wxString text = s.text; + text.Replace("\t", " "); + text.Replace("\n", " "); + if (text.length() > 100) + text = text.substr(0, 100) + L"…"; + + auto item = m_suggestionMenuItems[index]; + m_suggestionsMenu->Append(item); + + auto label = wxControl::EscapeMnemonics(wxString::Format(formatMask, text, index+1)); + item->SetItemLabel(label); + item->SetBitmap(GetIconForSuggestion(s)); + + index++; + } +} + +void SuggestionsSidebarBlock::ClearSuggestionsMenu() +{ + auto m = m_suggestionsMenu; + + auto menuItems = m->GetMenuItems(); + for (auto i: menuItems) + { + if (std::find(m_suggestionMenuItems.begin(), m_suggestionMenuItems.end(), i) != m_suggestionMenuItems.end()) + m->Remove(i); + } +} + + +void SuggestionsSidebarBlock::OnQueriesFinished() +{ + if (m_suggestions.empty()) + { + m_innerSizer->Show(m_iGotNothing); + m_parent->Layout(); + } +} + +void SuggestionsSidebarBlock::UpdateVisibility() +{ + m_msgSizer->ShowItems(m_msgPresent); + m_innerSizer->Show(m_iGotNothing, m_suggestions.empty() && !m_pendingQueries); + + int heightRemaining = m_innerSizer->GetSize().y; + size_t w = 0; + for (w = 0; w < m_suggestions.size(); w++) + { + heightRemaining -= m_suggestionsWidgets[w]->GetSize().y; + if (heightRemaining < 20) + break; + m_suggestionsSizer->Show(m_suggestionsWidgets[w]); + } + + for (; w < m_suggestionsWidgets.size(); w++) + m_suggestionsSizer->Hide(m_suggestionsWidgets[w]); + +} + +void SuggestionsSidebarBlock::Show(bool show) +{ + SidebarBlock::Show(show); + if (show) + { + UpdateVisibility(); + } + else + { + ClearSuggestionsMenu(); + } +} + +bool SuggestionsSidebarBlock::ShouldShowForItem(const CatalogItemPtr&) const +{ + return m_parent->FileHasCapability(Catalog::Cap::Translations) && + wxConfig::Get()->ReadBool("use_tm", true); +} + +void SuggestionsSidebarBlock::Update(const CatalogItemPtr& item) +{ + ClearMessage(); + ClearSuggestions(); + + UpdateSuggestionsForItem(item); +} + +void SuggestionsSidebarBlock::UpdateSuggestionsForItem(CatalogItemPtr item) +{ + if (!item) + return; + + long long now = wxGetUTCTimeMillis().GetValue(); + long long delta = now - m_lastUpdateTime; + m_lastUpdateTime = now; + + if (delta < 100) + { + // User is probably holding arrow down and going through the list as crazy + // and not really caring for the suggestions. Throttle them a bit and call + // this code after a small delay. Notice that this may repeat itself several + // times, only continuing through to show suggestions after the dust settled + // and the user didn't change the selection for a few milliseconds. + if (!m_suggestionsTimer.IsRunning()) + m_suggestionsTimer.StartOnce(110); + return; + } + + m_pendingQueries = 0; + + auto srclang = m_parent->GetCurrentSourceLanguage(); + auto lang = m_parent->GetCurrentLanguage(); + if (!srclang.IsValid() || !lang.IsValid() || srclang == lang) + { + OnQueriesFinished(); + return; + } + + QueryAllProviders(item); +} + +void SuggestionsSidebarBlock::OnDelayedShowSuggestionsForItem(wxTimerEvent&) +{ + UpdateSuggestionsForItem(m_parent->GetSelectedItem()); +} + +void SuggestionsSidebarBlock::QueryAllProviders(const CatalogItemPtr& item) +{ + auto thisQueryId = ++m_latestQueryId; + QueryProvider(TranslationMemory::Get(), item, thisQueryId); +} + +void SuggestionsSidebarBlock::QueryProvider(SuggestionsBackend& backend, const CatalogItemPtr& item, uint64_t queryId) +{ + m_pendingQueries++; + + // we need something to talk to GUI thread through that is guaranteed + // to exist, and the app object is a good choice: + auto backendPtr = &backend; + std::weak_ptr weakSelf = std::dynamic_pointer_cast(shared_from_this()); + + m_provider->SuggestTranslation + ( + backend, + m_parent->GetCurrentSourceLanguage(), + m_parent->GetCurrentLanguage(), + item->GetString().ToStdWstring(), + + // when receiving data + [=](const SuggestionsList& hits){ + call_on_main_thread([weakSelf,queryId,hits]{ + auto self = weakSelf.lock(); + // maybe this call is already out of date: + if (!self || self->m_latestQueryId != queryId) + return; + self->UpdateSuggestions(hits); + if (--self->m_pendingQueries == 0) + self->OnQueriesFinished(); + }); + }, + + // on error: + [=](std::exception_ptr e){ + call_on_main_thread([weakSelf,queryId,backendPtr,e]{ + auto self = weakSelf.lock(); + // maybe this call is already out of date: + if (!self || self->m_latestQueryId != queryId) + return; + self->ReportError(backendPtr, e); + if (--self->m_pendingQueries == 0) + self->OnQueriesFinished(); + }); + } + ); +} + + + +Sidebar::Sidebar(wxWindow *parent, wxMenu *suggestionsMenu) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxNO_BORDER | DoubleBufferingWindowStyle()), + m_catalog(nullptr), + m_selectedItem(nullptr) +{ + SetBackgroundColour(SIDEBAR_BACKGROUND); +#ifdef __WXMSW__ + if (!IsWindowsXP()) + SetDoubleBuffered(true); +#endif + + Bind(wxEVT_PAINT, &Sidebar::OnPaint, this); +#ifdef __WXOSX__ + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + + auto *topSizer = new wxBoxSizer(wxVERTICAL); + topSizer->SetMinSize(wxSize(PX(300), -1)); + + m_blocksSizer = new wxBoxSizer(wxVERTICAL); + topSizer->Add(m_blocksSizer, wxSizerFlags(1).Expand().PXDoubleBorder(wxTOP|wxBOTTOM)); + + m_topBlocksSizer = new wxBoxSizer(wxVERTICAL); + m_bottomBlocksSizer = new wxBoxSizer(wxVERTICAL); + + m_blocksSizer->Add(m_topBlocksSizer, wxSizerFlags(1).Expand().ReserveSpaceEvenIfHidden()); + m_blocksSizer->Add(m_bottomBlocksSizer, wxSizerFlags().Expand()); + + AddBlock(new SuggestionsSidebarBlock(this, suggestionsMenu), Top); + AddBlock(new OldMsgidSidebarBlock(this), Bottom); + AddBlock(new ExtractedCommentSidebarBlock(this), Bottom); + AddBlock(new CommentSidebarBlock(this), Bottom); + AddBlock(new AddCommentSidebarBlock(this), Bottom); + + SetSizerAndFit(topSizer); + + SetSelectedItem(nullptr, nullptr); +} + + +void Sidebar::AddBlock(SidebarBlock *block, BlockPos pos) +{ + m_blocks.emplace_back(block); + + auto sizer = (pos == Top) ? m_topBlocksSizer : m_bottomBlocksSizer; + auto grow = (block->IsGrowable()) ? 1 : 0; + sizer->Add(block->GetSizer(), wxSizerFlags(grow).Expand()); +} + + +Sidebar::~Sidebar() +{ +} + + +void Sidebar::SetSelectedItem(const CatalogPtr& catalog, const CatalogItemPtr& item) +{ + m_catalog = catalog; + m_selectedItem = item; + RefreshContent(); +} + +void Sidebar::SetMultipleSelection() +{ + SetSelectedItem(nullptr, nullptr); +} + +Language Sidebar::GetCurrentLanguage() const +{ + if (!m_catalog) + return Language(); + return m_catalog->GetLanguage(); +} + +Language Sidebar::GetCurrentSourceLanguage() const +{ + if (!m_catalog) + return Language::English(); + return m_catalog->GetSourceLanguage(); +} + +bool Sidebar::FileHasCapability(Catalog::Cap cap) const +{ + return m_catalog && m_catalog->HasCapability(cap); +} + +void Sidebar::RefreshContent() +{ + if (!IsShown()) + return; + + auto item = m_selectedItem; + if (!IsThisEnabled()) + item = nullptr; + + wxWindowUpdateLocker lock(this); + for (auto& b: m_blocks) + b->SetItem(item); + Layout(); +} + +void Sidebar::SetUpperHeight(int size) +{ + wxWindowUpdateLocker lock(this); + + int pos = GetSize().y - size; +#ifdef __WXOSX__ + pos += 4; +#else + pos += 6; +#endif + m_bottomBlocksSizer->SetMinSize(wxSize(-1, pos)); + Layout(); +} + +void Sidebar::DoEnable(bool) +{ + RefreshContent(); +} + +void Sidebar::OnPaint(wxPaintEvent&) +{ + wxPaintDC dc(this); + + dc.SetPen(wxPen(GRAY_LINES_COLOR)); +#ifndef __WXMSW__ + dc.DrawLine(0, 0, 0, dc.GetSize().y-1); +#endif +#ifndef __WXOSX__ + dc.DrawLine(0, 0, dc.GetSize().x - 1, 0); +#endif +} diff --git a/src/sidebar.h b/src/sidebar.h new file mode 100644 index 0000000..224484f --- /dev/null +++ b/src/sidebar.h @@ -0,0 +1,209 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_sidebar_h +#define Poedit_sidebar_h + +#include +#include +#include + +#include +#include +#include + +#include "catalog.h" +#include "language.h" +#include "tm/suggestions.h" + +class WXDLLIMPEXP_FWD_CORE wxMenu; +class WXDLLIMPEXP_FWD_CORE wxMenuItem; +class WXDLLIMPEXP_FWD_CORE wxSizer; +class WXDLLIMPEXP_FWD_CORE wxStaticText; +class WXDLLIMPEXP_FWD_CORE wxStaticBitmap; + +class ExplanationLabel; + +struct Suggestion; +class SuggestionsProvider; +class SuggestionWidget; +class Sidebar; + + +/// Implements part of the sidebar. +class SidebarBlock : public std::enable_shared_from_this +{ +public: + virtual ~SidebarBlock() {} + + wxSizer *GetSizer() const { return m_sizer; } + + virtual void Show(bool show); + + void SetItem(const CatalogItemPtr& item); + + virtual bool ShouldShowForItem(const CatalogItemPtr& item) const = 0; + + virtual void Update(const CatalogItemPtr& item) = 0; + + virtual bool IsGrowable() const { return false; } + +protected: + enum Flags + { + NoUpperMargin = 1 + }; + + SidebarBlock(Sidebar *parent, const wxString& label, int flags = 0); + + Sidebar *m_parent; + wxSizer *m_headerSizer; + wxSizer *m_innerSizer; + +private: + wxSizer *m_sizer; +}; + + +wxDECLARE_EVENT(EVT_SUGGESTION_SELECTED, wxCommandEvent); + +/// Sidebar block implementation translation suggestions +class SuggestionsSidebarBlock : public SidebarBlock +{ +public: + SuggestionsSidebarBlock(Sidebar *parent, wxMenu *menu); + ~SuggestionsSidebarBlock(); + + void Show(bool show) override; + bool IsGrowable() const override { return true; } + bool ShouldShowForItem(const CatalogItemPtr& item) const override; + void Update(const CatalogItemPtr& item) override; + +protected: + // How many entries can have shortcuts? + static const int SUGGESTIONS_MENU_ENTRIES = 9; + + virtual void UpdateVisibility(); + + virtual wxBitmap GetIconForSuggestion(const Suggestion& s) const; + virtual wxString GetTooltipForSuggestion(const Suggestion& s) const; + + void ClearMessage(); + void SetMessage(const wxString& icon, const wxString& text); + + virtual void ReportError(SuggestionsBackend *backend, std::exception_ptr e); + virtual void ClearSuggestions(); + virtual void UpdateSuggestions(const SuggestionsList& hits); + virtual void OnQueriesFinished(); + + virtual void BuildSuggestionsMenu(int count = SUGGESTIONS_MENU_ENTRIES); + virtual void UpdateSuggestionsMenu(); + virtual void ClearSuggestionsMenu(); + + virtual void QueryAllProviders(const CatalogItemPtr& item); + void QueryProvider(SuggestionsBackend& backend, const CatalogItemPtr& item, uint64_t queryId); + + // Handle showing of suggestions + void UpdateSuggestionsForItem(CatalogItemPtr item); + void OnDelayedShowSuggestionsForItem(wxTimerEvent& e); + +protected: + std::unique_ptr m_provider; + + wxMenu *m_suggestionsMenu; + + wxSizer *m_msgSizer; + bool m_msgPresent; + wxStaticBitmap *m_msgIcon; + ExplanationLabel *m_msgText; + wxStaticText *m_iGotNothing; + + wxSizer *m_suggestionsSizer; + // Additional sizer for derived classes, shown below suggestions + wxSizer *m_extrasSizer; + + SuggestionsList m_suggestions; + std::vector m_suggestionsWidgets; + std::vector m_suggestionMenuItems; + int m_pendingQueries; + uint64_t m_latestQueryId; + + // delayed showing of suggestions: + long long m_lastUpdateTime; + wxTimer m_suggestionsTimer; +}; + +/** + Control showing Poedit's assistance sidebar. + + Contains TM suggestions, comments and possibly other auxiliary stuff. + */ +class Sidebar : public wxPanel +{ +public: + Sidebar(wxWindow *parent, wxMenu *suggestionsMenu); + ~Sidebar(); + + /// Update selected item, if there's a single one. May be nullptr. + void SetSelectedItem(const CatalogPtr& catalog, const CatalogItemPtr& item); + + /// Tell the sidebar there's multiple selection. + void SetMultipleSelection(); + + /// Returns currently selected item + CatalogItemPtr GetSelectedItem() const { return m_selectedItem; } + Language GetCurrentSourceLanguage() const; + Language GetCurrentLanguage() const; + bool FileHasCapability(Catalog::Cap cap) const; + + /// Refreshes displayed content + void RefreshContent(); + + /// Call when catalog changes/is invalidated + void ResetCatalog() { SetSelectedItem(nullptr, nullptr); } + + /// Set max height of the upper (not input-aligned) part. + void SetUpperHeight(int size); + +protected: + void DoEnable(bool enable) override; + +private: + enum BlockPos { Top, Bottom }; + void AddBlock(SidebarBlock *block, BlockPos pos); + + void OnPaint(wxPaintEvent&); + +private: + CatalogPtr m_catalog; + CatalogItemPtr m_selectedItem; + + std::vector> m_blocks; + + wxSizer *m_blocksSizer; + wxSizer *m_topBlocksSizer, *m_bottomBlocksSizer; +}; + +#endif // Poedit_sidebar_h diff --git a/src/spellchecking.cpp b/src/spellchecking.cpp new file mode 100644 index 0000000..cf05645 --- /dev/null +++ b/src/spellchecking.cpp @@ -0,0 +1,191 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "spellchecking.h" + +#include "str_helpers.h" + +#ifdef __WXGTK__ + #include + extern "C" { + #include + } +#endif + +#ifdef __WXMSW__ + #include + #include + #ifndef IMF_SPELLCHECKING + #define IMF_SPELLCHECKING 0x0800 + #endif +#endif + +#include "edapp.h" + + +#ifdef __WXGTK__ +// helper functions that finds GtkTextView of wxTextCtrl: +static GtkTextView *GetTextView(wxTextCtrl *ctrl) +{ + GtkWidget *parent = ctrl->m_widget; + GList *child = gtk_container_get_children(GTK_CONTAINER(parent)); + while (child) + { + if (GTK_IS_TEXT_VIEW(child->data)) + { + return GTK_TEXT_VIEW(child->data); + } + child = child->next; + } + + wxFAIL_MSG( "couldn't find GtkTextView for text control" ); + return NULL; +} + +#if GTK_CHECK_VERSION(3,0,0) + +bool InitTextCtrlSpellchecker(wxTextCtrl *text, bool enable, const Language& lang) +{ + GtkTextView *textview = GetTextView(text); + wxASSERT_MSG( textview, "wxTextCtrl is supposed to use GtkTextView" ); + + GtkSpellChecker *spell = gtk_spell_checker_get_from_text_view(textview); + + if (enable) + { + if (!spell) + { + spell = gtk_spell_checker_new(); + gtk_spell_checker_attach(spell, textview); + } + + return gtk_spell_checker_set_language(spell, lang.Code().c_str(), nullptr); + } + else + { + if (spell) + gtk_spell_checker_detach(spell); + return true; + } +} + +#else // GTK+ 2.x + +bool InitTextCtrlSpellchecker(wxTextCtrl *text, bool enable, const Language& lang) +{ + GtkTextView *textview = GetTextView(text); + wxASSERT_MSG( textview, "wxTextCtrl is supposed to use GtkTextView" ); + GtkSpell *spell = gtkspell_get_from_text_view(textview); + + GError *err = NULL; + + if (enable) + { + if (spell) + gtkspell_set_language(spell, lang.Code().c_str(), &err); + else + gtkspell_new_attach(textview, lang.Code().c_str(), &err); + } + else // !enable + { + // GtkSpell when used with Zemberek Enchant module doesn't work + // correctly if you repeatedly attach and detach a speller to text + // view. See https://poedit.net/trac/ticket/276 for details. + // + // To work around this, we set the language to a non-existent one + // instead of detaching GtkSpell -- this has the same effect as + // detaching the speller as far as the UI is concerned. + if (spell) + gtkspell_set_language(spell, "unknown_language", &err); + } + + if (err) + g_error_free(err); + + return err == NULL; +} + +#endif // GTK+ 2.x + +#endif // __WXGTK__ + +#ifdef __WXOSX__ +bool SetSpellcheckerLang(const wxString& lang) +{ + NSString *nslang = str::to_NS(lang); + NSSpellChecker *sc = [NSSpellChecker sharedSpellChecker]; + [sc setAutomaticallyIdentifiesLanguages:NO]; + return [sc setLanguage: nslang]; +} + +bool InitTextCtrlSpellchecker(wxTextCtrl *text, bool enable, const Language& /*lang*/) +{ + NSScrollView *scroll = (NSScrollView*)text->GetHandle(); + NSTextView *view = [scroll documentView]; + + [view setContinuousSpellCheckingEnabled:enable]; + [view setGrammarCheckingEnabled:enable]; + + return true; +} +#endif // __WXOSX__ + +#ifdef __WXMSW__ +void PrepareTextCtrlForSpellchecker(wxTextCtrl *text) +{ + // Set spellchecking-friendly style on the text control. Enabling spellchecking + // itself is done with EM_SETLANGOPTIONS in InitTextCtrlSpellchecker() + HWND hwnd = (HWND)text->GetHWND(); + auto editStyle = SES_USECTF | SES_CTFALLOWEMBED | SES_CTFALLOWSMARTTAG | SES_CTFALLOWPROOFING; + ::SendMessage(hwnd, EM_SETEDITSTYLE, editStyle, editStyle); +} + +bool InitTextCtrlSpellchecker(wxTextCtrl *text, bool enable, const Language& /*lang*/) +{ + HWND hwnd = (HWND) text->GetHWND(); + auto langOptions = ::SendMessage(hwnd, EM_GETLANGOPTIONS, 0, 0); + if (enable) + langOptions |= IMF_SPELLCHECKING; + else + langOptions &= ~IMF_SPELLCHECKING; + ::SendMessage(hwnd, EM_SETLANGOPTIONS, 0, langOptions); + return true; +} +#endif // __WXMSW__ + + +#ifndef __WXMSW__ +void ShowSpellcheckerHelp() +{ +#if defined(__WXOSX__) + #define SPELL_HELP_PAGE "SpellcheckerMac" +#elif defined(__UNIX__) + #define SPELL_HELP_PAGE "SpellcheckerLinux" +#else + #error "missing spellchecker instructions for platform" +#endif + wxGetApp().OpenPoeditWeb("/trac/wiki/Doc/" SPELL_HELP_PAGE); +} +#endif // !__WXMSW__ diff --git a/src/spellchecking.h b/src/spellchecking.h new file mode 100644 index 0000000..a329631 --- /dev/null +++ b/src/spellchecking.h @@ -0,0 +1,66 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_spellchecking_h +#define Poedit_spellchecking_h + +#include + +#ifdef __WXMSW__ + #include +#endif + +#include + +#include "language.h" + +inline bool IsSpellcheckingAvailable() +{ +#ifdef __WXMSW__ + return wxPlatformInfo::Get().CheckOSVersion(6,2); +#else + return true; +#endif +} + +#ifdef __WXOSX__ +// Set the global spellchecking language +bool SetSpellcheckerLang(const wxString& lang); +#endif + +// Does any initialization needed to be able to use spellchecker with the control later. +#ifdef __WXMSW__ +void PrepareTextCtrlForSpellchecker(wxTextCtrl *text); +#endif + +// Init given text control to do (or not) spellchecking for given language +bool InitTextCtrlSpellchecker(wxTextCtrl *text, bool enable, const Language& lang); + +#ifndef __WXMSW__ +// Show help about how to add more dictionaries for spellchecking. +void ShowSpellcheckerHelp(); +#endif + +#endif // Poedit_spellchecking_h diff --git a/src/str_helpers.h b/src/str_helpers.h new file mode 100644 index 0000000..6ebba9c --- /dev/null +++ b/src/str_helpers.h @@ -0,0 +1,236 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_str_helpers_h +#define Poedit_str_helpers_h + +#include + +#ifdef __OBJC__ +#include +#endif + +// as of gcc-4.9, no functional support yet +#if defined(__clang__) || defined(_MSC_VER) + #define HAVE_CODECVT +#endif + +#ifdef HAVE_CODECVT + #include + #include +#else + #include +#endif + +#include +#include + +/** + Defines conversions between various string types. + + Supported string classes are std::wstring, std::string (UTF-8 encoded), + wxString and icu::UnicodeString. + + Usage: + - to_wx(...) + - to_icu(...) + - to_wstring(...) + - to_utf8(...) + - to_NSString() + */ +namespace str +{ + +#ifdef HAVE_CODECVT + +inline std::string to_utf8(const std::wstring& str) +{ + std::wstring_convert, wchar_t> convert; + return convert.to_bytes(str.data()); +} + +inline std::string to_utf8(const wchar_t *str) +{ + std::wstring_convert, wchar_t> convert; + return convert.to_bytes(str); +} + +inline std::wstring to_wstring(const std::string& utf8str) +{ + std::wstring_convert, wchar_t> convert; + return convert.from_bytes(utf8str.data()); +} + +#else + +inline std::string to_utf8(const std::wstring& str) +{ + return boost::locale::conv::utf_to_utf(str); +} + +inline std::string to_utf8(const wchar_t *str) +{ + return boost::locale::conv::utf_to_utf(str); +} + +inline std::wstring to_wstring(const std::string& utf8str) +{ + return boost::locale::conv::utf_to_utf(utf8str); +} + +#endif + +inline std::string to_utf8(const wxString& str) +{ + return std::string(str.utf8_str()); +} + +inline std::wstring to_wstring(const wxString& str) +{ + return str.ToStdWstring(); +} + +#if defined(__cplusplus) && defined(__OBJC__) + +inline NSString *to_NS(const wxString& str) +{ + return [NSString stringWithUTF8String:str.utf8_str()]; +} + +inline wxString to_wx(NSString *str) +{ + return wxString::FromUTF8Unchecked([str UTF8String]); +} + +inline NSString *to_NS(const std::string& utf8str) +{ + return [NSString stringWithUTF8String:utf8str.c_str()]; +} + +inline NSString *to_NS(const char *utf8str) +{ + return [NSString stringWithUTF8String:utf8str]; +} + +inline std::string to_utf8(NSString *str) +{ + return std::string([str UTF8String]); +} + +inline NSString *to_NS(const std::wstring& str) +{ + return to_NS(to_utf8(str)); +} + +inline std::wstring to_wstring(NSString *str) +{ + std::wstring_convert, wchar_t> convert; + return convert.from_bytes([str UTF8String]); +} + +#endif // Objective-C++ + + +// ICU conversions; only included them if ICU is included +#ifdef UNISTR_H + +/** + Create read-only icu::UnicodeString from wxString efficiently. + + Notice that the resulting string is only valid for the input wxString's + lifetime duration, unless you make a copy. + */ +inline icu::UnicodeString to_icu(const wxString& str) +{ +#if wxUSE_UNICODE_UTF8 + return icu::UnicodeString::fromUTF8((const char*)str.utf8_str()); +#elif SIZEOF_WCHAR_T == 4 + return icu::UnicodeString::fromUTF32((const UChar32*)str.wx_str(), (int32_t)str.length()); +#elif SIZEOF_WCHAR_T == 2 + // read-only aliasing ctor, doesn't copy data + return icu::UnicodeString(true, str.wx_str(), str.length()); +#else + #error "WTF?!" +#endif +} + +/** +Create read-only icu::UnicodeString from std::wstring efficiently. + +Notice that the resulting string is only valid for the input std::wstring's +lifetime duration, unless you make a copy. +*/ +inline icu::UnicodeString to_icu(const std::wstring& str) +{ +#if SIZEOF_WCHAR_T == 4 + return icu::UnicodeString::fromUTF32((const UChar32*) str.c_str(), (int32_t) str.length()); +#elif SIZEOF_WCHAR_T == 2 + // read-only aliasing ctor, doesn't copy data + return icu::UnicodeString(true, str.c_str(), str.length()); +#else + #error "WTF?!" +#endif +} + +/** + Create buffer with raw UChar* string. + + Notice that the resulting string is only valid for the input's lifetime. + */ +inline wxScopedCharTypeBuffer to_icu_raw(const wxString& str) +{ + static_assert(U_SIZEOF_UCHAR == 2, "unexpected UChar size"); +#if SIZEOF_WCHAR_T == 2 + // read-only aliasing ctor, doesn't copy data + return wxScopedCharTypeBuffer::CreateNonOwned((const UChar*)str.wx_str(), str.length()); +#else + auto buf = wxMBConvUTF16().cWC2MB(str.wc_str()); + auto len = buf.length(); + return wxCharTypeBuffer::CreateOwned((UChar*)buf.release(), len); +#endif +} + + +/// Create wxString from icu::UnicodeString, making a copy. +inline wxString to_wx(const icu::UnicodeString& str) +{ +#if wxUSE_UNICODE_WCHAR && SIZEOF_WCHAR_T == 2 + return wxString(str.getBuffer(), str.length()); +#else + return wxString((const char*)str.getBuffer(), wxMBConvUTF16(), str.length() * 2); +#endif +} + +/// Create std::wstring from icu::UnicodeString, making a copy. +inline std::wstring to_wstring(const icu::UnicodeString& str) +{ + return to_wx(str).ToStdWstring(); +} + +#endif // UNISTR_H + +} // namespace str + +#endif // Poedit_str_helpers_h diff --git a/src/summarydlg.cpp b/src/summarydlg.cpp new file mode 100644 index 0000000..309d0f4 --- /dev/null +++ b/src/summarydlg.cpp @@ -0,0 +1,74 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include + +#include "summarydlg.h" +#include "utility.h" + + +MergeSummaryDialog::MergeSummaryDialog(wxWindow *parent) +{ + wxXmlResource::Get()->LoadDialog(this, parent, "summary"); + + RestoreWindowState(this, wxDefaultSize, WinState_Size); + CentreOnParent(); +} + + + +MergeSummaryDialog::~MergeSummaryDialog() +{ + SaveWindowState(this, WinState_Size); +} + + + +void MergeSummaryDialog::TransferTo(const wxArrayString& snew, const wxArrayString& sobsolete) +{ + wxString sum; + sum.Printf(_("(New: %i, obsolete: %i)"), + (int)snew.GetCount(), (int)sobsolete.GetCount()); + XRCCTRL(*this, "items_count", wxStaticText)->SetLabel(sum); + + wxListBox *listbox; + size_t i; + + listbox = XRCCTRL(*this, "new_strings", wxListBox); + for (i = 0; i < snew.GetCount(); i++) + { + listbox->Append(snew[i]); + } + + listbox = XRCCTRL(*this, "obsolete_strings", wxListBox); + for (i = 0; i < sobsolete.GetCount(); i++) + { + listbox->Append(sobsolete[i]); + } +} diff --git a/src/summarydlg.h b/src/summarydlg.h new file mode 100644 index 0000000..22e13e2 --- /dev/null +++ b/src/summarydlg.h @@ -0,0 +1,54 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2000-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _SUMMARYDLG_H_ +#define _SUMMARYDLG_H_ + +#include +#include + + +/** This class provides simple dialog that displays list + * of changes made in the catalog. + */ +class MergeSummaryDialog : public wxDialog +{ + public: + MergeSummaryDialog(wxWindow *parent = NULL); + ~MergeSummaryDialog(); + + /** Reads data from catalog and fill dialog's controls. + \param snew list of strings that are new to the catalog + \param sobsolete list of strings that no longer appear in the + catalog (as compared to catalog's state before + parsing sources). + */ + void TransferTo(const wxArrayString& snew, + const wxArrayString& sobsolete); +}; + + + +#endif // _SUMMARYDLG_H_ diff --git a/src/syntaxhighlighter.cpp b/src/syntaxhighlighter.cpp new file mode 100644 index 0000000..7902422 --- /dev/null +++ b/src/syntaxhighlighter.cpp @@ -0,0 +1,81 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "syntaxhighlighter.h" + +#include + +void SyntaxHighlighter::Highlight(const std::wstring& s, SyntaxHighlighter::CallbackType highlight) +{ + if (s.empty()) + return; + + const int length = int(s.length()); + + for (auto i = s.begin(); i != s.end(); ++i) + { + if (!u_isblank(*i)) + { + int wlen = int(i - s.begin()); + if (wlen) + highlight(0, wlen, LeadingWhitespace); + break; + } + } + + for (auto i = s.rbegin(); i != s.rend(); ++i) + { + if (!u_isblank(*i)) + { + int wlen = int(i - s.rbegin()); + if (wlen) + highlight(length - wlen, length, LeadingWhitespace); + break; + } + } + + for (auto i = s.begin(); i != s.end(); ++i) + { + if (*i == '\\') + { + int pos = int(i - s.begin()); + if (++i == s.end()) + break; + // Note: this must match AnyTranslatableTextCtrl::EscapePlainText() + switch (*i) + { + case '0': + case 'n': + case 'r': + case 't': + case '\\': + highlight(pos, pos + 2, Escape); + break; + default: + break; + } + } + } +} diff --git a/src/syntaxhighlighter.h b/src/syntaxhighlighter.h new file mode 100644 index 0000000..2e5b7f1 --- /dev/null +++ b/src/syntaxhighlighter.h @@ -0,0 +1,61 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_syntaxhighlighter_h +#define Poedit_syntaxhighlighter_h + +#include +#include + +/** + Highlights parts of translation (or source) text that have special meaning. + + Highlighted parts include e.g. C-style escape sequences (\n etc.), + leading/trailing whitespace or format string parts. + */ +class SyntaxHighlighter +{ +public: + // Kind of the element to highlight + enum TextKind + { + LeadingWhitespace, + Escape + }; + + typedef std::function CallbackType; + + /** + Perform highlighting in given text. + + The @a highlight function is called once for every range that should + be highlighted, with the range boundaries and highlight kind as its + arguments. + */ + void Highlight(const std::wstring& s, CallbackType highlight); +}; + + +#endif // Poedit_syntaxhighlighter_h diff --git a/src/text_control.cpp b/src/text_control.cpp new file mode 100644 index 0000000..6b96dd7 --- /dev/null +++ b/src/text_control.cpp @@ -0,0 +1,836 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "text_control.h" + +#include +#include + +#ifdef __WXOSX__ + #import + #import +#endif + +#ifdef __WXMSW__ + #include + #include + #ifndef BOE_UNICODEBIDI + #define BOE_UNICODEBIDI 0x0080 + #endif + #ifndef BOM_UNICODEBIDI + #define BOM_UNICODEBIDI 0x0080 + #endif + + #include + #include + _COM_SMARTPTR_TYPEDEF(ITextDocument, __uuidof(ITextDocument)); +#endif + +#include "spellchecking.h" +#include "str_helpers.h" +#include "unicode_helpers.h" + + +namespace +{ + +#ifdef __WXOSX__ + +inline NSTextView *TextView(const wxTextCtrl *ctrl) +{ + NSScrollView *scroll = (NSScrollView*)ctrl->GetHandle(); + return [scroll documentView]; +} + +class DisableAutomaticSubstitutions +{ +public: + DisableAutomaticSubstitutions(wxTextCtrl *ctrl) : m_view(TextView(ctrl)) + { + m_dash = m_view.automaticDashSubstitutionEnabled; + m_quote = m_view.automaticQuoteSubstitutionEnabled; + m_text = m_view.automaticTextReplacementEnabled; + m_spelling = m_view.automaticSpellingCorrectionEnabled; + + m_view.automaticDashSubstitutionEnabled = NO; + m_view.automaticQuoteSubstitutionEnabled = NO; + m_view.automaticTextReplacementEnabled = NO; + m_view.automaticSpellingCorrectionEnabled = NO; + } + + DisableAutomaticSubstitutions() + { + m_view.automaticDashSubstitutionEnabled = m_dash; + m_view.automaticQuoteSubstitutionEnabled = m_quote; + m_view.automaticTextReplacementEnabled = m_text; + m_view.automaticSpellingCorrectionEnabled = m_spelling; + } + +private: + NSTextView *m_view; + BOOL m_quote, m_dash, m_text, m_spelling; +}; + +#endif // __WXOSX__ + + +#ifdef __WXMSW__ + +inline ITextDocumentPtr TextDocument(wxTextCtrl *ctrl) +{ + IUnknown *ole_raw; + ::SendMessage((HWND) ctrl->GetHWND(), EM_GETOLEINTERFACE, 0, (LPARAM) &ole_raw); + IUnknownPtr ole(ole_raw, /*addRef=*/false); + ITextDocumentPtr doc; + if (ole) + ole->QueryInterface(&doc); + return doc; +} + +// Temporarily suppresses recording of changes for Undo/Redo functionality +// See http://stackoverflow.com/questions/4138981/temporaily-disabling-the-c-sharp-rich-edit-undo-buffer-while-performing-syntax-h +// and http://forums.codeguru.com/showthread.php?325068-Realizing-Undo-Redo-functionality-for-RichEdit-Syntax-Highlighter +class UndoSuppressor +{ +public: + UndoSuppressor(CustomizedTextCtrl *ctrl) : m_doc(TextDocument(ctrl)) + { + if (m_doc) + m_doc->Undo(tomSuspend, NULL); + } + + ~UndoSuppressor() + { + if (m_doc) + m_doc->Undo(tomResume, NULL); + } + +private: + ITextDocumentPtr m_doc; +}; +#endif + + +#if defined(__WXOSX__) + +// Group undo operations into a single group +class UndoGroup +{ +public: + UndoGroup(TranslationTextCtrl *ctrl) + { + m_undo = [TextView(ctrl) undoManager]; + [m_undo beginUndoGrouping]; + } + + ~UndoGroup() + { + [m_undo endUndoGrouping]; + } + +private: + NSUndoManager *m_undo; +}; + +#elif defined(__WXMSW__) + +class UndoGroup +{ +public: + UndoGroup(TranslationTextCtrl *ctrl) : m_doc(TextDocument(ctrl)) + { + if (m_doc) + m_doc->BeginEditCollection(); + } + + ~UndoGroup() + { + if (m_doc) + m_doc->EndEditCollection(); + } + +private: + ITextDocumentPtr m_doc; +}; + +#elif defined(__WXGTK__) + +class UndoGroup +{ +public: + UndoGroup(TranslationTextCtrl *ctrl) : m_ctrl(ctrl) + { + m_ctrl->BeginUndoGrouping(); + } + + ~UndoGroup() + { + m_ctrl->EndUndoGrouping(); + } + +private: + TranslationTextCtrl *m_ctrl; +}; + +#endif + + +} // anonymous namespace + + +#ifdef __WXOSX__ + +// wxTextCtrl implementation on OS X uses insertText:, which is intended for +// user input and performs some user input processing, such as autocorrections. +// We need to avoid this, because Poedit's text control is filled with data +// when moving in the list control: https://github.com/vslavik/poedit/issues/81 +// Solve this by using a customized control with overridden DoSetValue(). + +CustomizedTextCtrl::CustomizedTextCtrl(wxWindow *parent, wxWindowID winid, long style) + : wxTextCtrl(parent, winid, "", wxDefaultPosition, wxDefaultSize, style | ALWAYS_USED_STYLE) +{ + auto text = TextView(this); + + [text setTextContainerInset:NSMakeSize(1,3)]; + [text setRichText:NO]; + + // TODO: This isn't implemented and doesn't work in OS X + //Bind(wxEVT_TEXT_COPY, &CustomizedTextCtrl::OnCopy, this); + //Bind(wxEVT_TEXT_CUT, &CustomizedTextCtrl::OnCut, this); + //Bind(wxEVT_TEXT_PASTE, &CustomizedTextCtrl::OnPaste, this); +} + +void CustomizedTextCtrl::DoSetValue(const wxString& value, int flags) +{ + wxEventBlocker block(this, (flags & SetValue_SendEvent) ? 0 : wxEVT_ANY); + + [TextView(this) setString:str::to_NS(value)]; + + SendTextUpdatedEventIfAllowed(); +} + +wxString CustomizedTextCtrl::DoGetValue() const +{ + // wx's implementation is not sufficient and neither is [NSTextView string] + // (which wx uses): they ignore formatting, which would be desirable, but + // they also include embedded Unicode marks such as U+202A (Left-to-Right Embedding) + // or U+202C (Pop Directional Format) that are essential for correct + // handling of BiDi text. + // + // Instead, export the internal storage into plain-text, UTF-8 data and + // load that into wxString. That shouldn't be too inefficient (wx does + // UTF-8 roundtrip anyway) and preserves the marks; it is what TextEdit.app + // does when saving text files. + auto ctrl = TextView(this); + NSTextStorage *text = [ctrl textStorage]; + NSDictionary *attrs = @{ + NSDocumentTypeDocumentAttribute: NSPlainTextDocumentType, + NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding) + }; + NSData *data = [text dataFromRange:NSMakeRange(0, [text length]) documentAttributes:attrs error:nil]; + if (data && [data length] > 0) + return wxString::FromUTF8((const char*)[data bytes], [data length]); + else + return wxTextCtrl::DoGetValue(); +} + +#else // !__WXOSX__ + +CustomizedTextCtrl::CustomizedTextCtrl(wxWindow *parent, wxWindowID winid, long style) + : wxTextCtrl(parent, winid, "", wxDefaultPosition, wxDefaultSize, style | ALWAYS_USED_STYLE) +{ + wxTextAttr padding; + padding.SetLeftIndent(5); + padding.SetRightIndent(5); + SetDefaultStyle(padding); + +#if defined(__WXMSW__) || defined(__WXGTK__) + Bind(wxEVT_TEXT_COPY, &CustomizedTextCtrl::OnCopy, this); + Bind(wxEVT_TEXT_CUT, &CustomizedTextCtrl::OnCut, this); + Bind(wxEVT_TEXT_PASTE, &CustomizedTextCtrl::OnPaste, this); +#endif + +#ifdef __WXGTK__ + m_historyLocks = 0; + if (!(style & wxTE_READONLY)) + Bind(wxEVT_TEXT, &CustomizedTextCtrl::OnText, this); +#endif +} + +#endif // !__WXOSX__ + +#if defined(__WXMSW__) || defined(__WXGTK__) +// We use wxTE_RICH2 style, which allows for pasting rich-formatted +// text into the control. We want to allow only plain text (all the +// formatting done is Poedit's syntax highlighting), so we need to +// override copy/cut/paste commands. Plus, the richedit control +// (or wx's use of it) has a bug in it that causes it to copy wrong +// data when copying from the same text control to itself after its +// content was programatically changed: +// https://sourceforge.net/tracker/index.php?func=detail&aid=1910234&group_id=27043&atid=389153 + +// Note that GTK has a very similar problem with pasting rich text, +// which is why this code is enabled for GTK too. + +bool CustomizedTextCtrl::DoCopy() +{ + long from, to; + GetSelection(&from, &to); + if ( from == to ) + return false; + + wxClipboardLocker lock; + wxCHECK_MSG( !!lock, false, "failed to lock clipboard" ); + + auto text = DoCopyText(from, to); + wxClipboard::Get()->SetData(new wxTextDataObject(text)); + return true; +} + +void CustomizedTextCtrl::OnCopy(wxClipboardTextEvent&) +{ + if (!CanCopy()) + return; + + DoCopy(); +} + +void CustomizedTextCtrl::OnCut(wxClipboardTextEvent&) +{ + if (!CanCut()) + return; + + if (!DoCopy()) + return; + + long from, to; + GetSelection(&from, &to); + Remove(from, to); +} + +void CustomizedTextCtrl::OnPaste(wxClipboardTextEvent&) +{ + if (!CanPaste()) + return; + + wxClipboardLocker lock; + wxCHECK_RET( !!lock, "failed to lock clipboard" ); + + wxTextDataObject d; + wxClipboard::Get()->GetData(d); + + long from, to; + GetSelection(&from, &to); + DoPasteText(from, to, d.GetText()); +} + +wxString CustomizedTextCtrl::DoCopyText(long from, long to) +{ + return GetRange(from, to); +} + +void CustomizedTextCtrl::DoPasteText(long from, long to, const wxString& s) +{ + Replace(from, to, s); +} +#endif // __WXMSW__/__WXGTK__ + +#ifdef __WXGTK__ +void CustomizedTextCtrl::BeginUndoGrouping() +{ + m_historyLocks++; +} + +void CustomizedTextCtrl::EndUndoGrouping() +{ + if (--m_historyLocks == 0) + SaveSnapshot(); +} + +void CustomizedTextCtrl::SaveSnapshot() +{ + // if we saved the snapshot in DoSetValue, OnText might still call this function again + // therefore, we make sure to filter out duplicate entries + if (m_historyIndex && m_history[m_historyIndex - 1].text == GetValue()) + return; + + m_history.resize(m_historyIndex); // truncate the list + m_history.push_back({GetValue(), GetInsertionPoint()}); + m_historyIndex++; +} + +void CustomizedTextCtrl::DoSetValue(const wxString& value, int flags) +{ + // SetValue_SendEvent is set if this function was called from SetValue + // SetValue_SendEvent is NOT set if this function was called from ChangeValue + if (flags & SetValue_SendEvent) + { + // clear the history + // m_history itself will be cleared when SaveSnapshot is called + m_historyIndex = 0; + + // set the new value + wxTextCtrl::DoSetValue(value, flags); + + // make sure to save a snapshot even if EVT_TEXT is blocked + SaveSnapshot(); + } + else + { + // just set the new value, don't save a snapshot + // this is what happens when you click Undo or Redo + wxTextCtrl::DoSetValue(value, flags); + } +} + +void CustomizedTextCtrl::OnText(wxCommandEvent& event) +{ + SaveSnapshot(); + event.Skip(); +} + +bool CustomizedTextCtrl::CanUndo() const +{ + return (m_historyIndex > 1); +} + +bool CustomizedTextCtrl::CanRedo() const +{ + return (m_historyIndex < m_history.size()); +} + +void CustomizedTextCtrl::Undo() +{ + // ChangeValue calls AnyTranslatableTextCtrl::DoSetValue, which calls CustomizedTextCtrl::DoSetValue + ChangeValue(m_history[m_historyIndex - 2].text); + SetInsertionPoint(m_history[m_historyIndex - 2].insertionPoint); + m_historyIndex--; +} + +void CustomizedTextCtrl::Redo() +{ + // ChangeValue calls AnyTranslatableTextCtrl::DoSetValue, which calls CustomizedTextCtrl::DoSetValue + ChangeValue(m_history[m_historyIndex].text); + SetInsertionPoint(m_history[m_historyIndex].insertionPoint); + m_historyIndex++; +} +#endif // __WXGTK__ + +void CustomizedTextCtrl::ShowFindIndicator(int from, int length) +{ + ShowPosition(from); +#ifdef __WXOSX__ + [TextView(this) showFindIndicatorForRange:NSMakeRange(from, length)]; +#else + SetSelection(from, from + length); +#endif +} + + + +class AnyTranslatableTextCtrl::Attributes +{ +public: +#ifdef __WXOSX__ + NSDictionary *m_attrSpace, *m_attrEscape; + typedef NSDictionary* AttrType; + + Attributes() + { + m_attrSpace = @{NSBackgroundColorAttributeName: [NSColor colorWithSRGBRed:0.89 green:0.96 blue:0.68 alpha:1]}; + m_attrEscape = @{NSBackgroundColorAttributeName: [NSColor colorWithSRGBRed:1 green:0.95 blue:1 alpha:1], + NSForegroundColorAttributeName: [NSColor colorWithSRGBRed:0.46 green:0 blue:0.01 alpha:1]}; + } +#else // !__WXOSX__ + wxTextAttr m_attrDefault, m_attrSpace, m_attrEscape; + typedef wxTextAttr AttrType; + + Attributes() + { + m_attrDefault.SetBackgroundColour(*wxWHITE); + m_attrDefault.SetTextColour(*wxBLACK); + + m_attrSpace.SetBackgroundColour("#E4F6AE"); + + m_attrEscape.SetBackgroundColour("#FFF1FF"); + m_attrEscape.SetTextColour("#760003"); + } + + const AttrType& Default() const { return m_attrDefault; } +#endif + + const AttrType& For(SyntaxHighlighter::TextKind kind) const + { + switch (kind) + { + case SyntaxHighlighter::LeadingWhitespace: return m_attrSpace; + case SyntaxHighlighter::Escape: return m_attrEscape; + } + return m_attrSpace; // silence bogus warning + } +}; + + +AnyTranslatableTextCtrl::AnyTranslatableTextCtrl(wxWindow *parent, wxWindowID winid, int style) + : CustomizedTextCtrl(parent, winid, style), + m_attrs(new Attributes) +{ + Bind(wxEVT_TEXT, [=](wxCommandEvent& e){ + e.Skip(); + HighlightText(); + }); + + m_language = Language::English(); +} + +AnyTranslatableTextCtrl::~AnyTranslatableTextCtrl() +{ +} + +void AnyTranslatableTextCtrl::SetLanguage(const Language& lang) +{ + m_language = lang; + + wxEventBlocker block(this, wxEVT_TEXT); + +#ifdef __WXOSX__ + NSTextView *text = TextView(this); + if (lang.IsRTL()) + { + [text setBaseWritingDirection:NSWritingDirectionRightToLeft]; + if ([NSApp userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionLeftToRight) + { + // extra nudge to make typing behave as expected: + [text makeTextWritingDirectionRightToLeft:nil]; + } + } + else + { + [text setBaseWritingDirection:NSWritingDirectionLeftToRight]; + } +#endif + +#ifdef __WXMSW__ + BIDIOPTIONS bidi; + ::ZeroMemory(&bidi, sizeof(bidi)); + bidi.cbSize = sizeof(bidi); + bidi.wMask = BOM_UNICODEBIDI; + bidi.wEffects = lang.IsRTL() ? BOE_UNICODEBIDI : 0; + ::SendMessage((HWND)GetHWND(), EM_SETBIDIOPTIONS, 0, (LPARAM) &bidi); + + ::SendMessage((HWND)GetHWND(), EM_SETEDITSTYLE, lang.IsRTL() ? SES_BIDI : 0, SES_BIDI); + + UpdateRTLStyle(); +#endif +} + + +void AnyTranslatableTextCtrl::SetPlainText(const wxString& s) +{ + SetValue(EscapePlainText(s)); +} + +wxString AnyTranslatableTextCtrl::GetPlainText() const +{ + return UnescapePlainText(bidi::strip_pointless_control_chars(GetValue(), m_language.Direction())); +} + + +wxString AnyTranslatableTextCtrl::EscapePlainText(const wxString& s) +{ + // Note: the escapes used here should match with + // SyntaxHighlighter::Highlight() ones + wxString s2; + s2.reserve(s.length()); + for (auto i = s.begin(); i != s.end(); ++i) + { + wchar_t c = *i; + switch (c) + { + case '\n': + s2 += "\\n\n"; + break; + case '\r': + s2 += "\\r"; + break; + case '\t': + s2 += "\\t"; + break; + case '\a': + s2 += "\\a"; + break; + case '\0': + s2 += "\\0"; + break; + case '\\': + { + s2 += c; + auto peek = i + 1; + if ( peek != s.end() ) + { + switch ((wchar_t)*peek) + { + case 'n': case '\n': + case 'r': case '\r': + case 't': case '\t': + case '0': case '\0': + case '\\': + s2 += c; // escape problematic backslash + break; + } + } + break; + } + default: + s2 += c; + break; + } + } + return s2; +} + +wxString AnyTranslatableTextCtrl::UnescapePlainText(const wxString& s) +{ + wxString s2; + s2.reserve(s.length()); + for (auto i = s.begin(); i != s.end(); ++i) + { + wchar_t c0 = *i; + if (c0 == '\\') + { + if ( ++i == s.end() ) + { + s2 += '\\'; + return s2; + } + wchar_t c = *i; + switch (c) + { + case 'r': + s2 += '\r'; + break; + case 't': + s2 += '\t'; + break; + case 'a': + s2 += '\a'; + break; + case '0': + s2 += '\0'; + break; + case 'n': + { + s2 += '\n'; + auto peek = i + 1; + if ( peek != s.end() && *peek == '\n' ) + { + // "\\n\n" should be treated as single newline + i = peek; + } + break; + } + case '\\': + s2 += '\\'; + break; + default: + s2 += '\\'; + s2 += c; + break; + } + } + else + { + s2 += c0; + } + } + return s2; +} + +#if defined(__WXMSW__) || defined(__WXGTK__) +wxString AnyTranslatableTextCtrl::DoCopyText(long from, long to) +{ + return UnescapePlainText(GetRange(from, to)); +} + +void AnyTranslatableTextCtrl::DoPasteText(long from, long to, const wxString& s) +{ + Replace(from, to, EscapePlainText(s)); +} +#endif + +#ifdef __WXMSW__ +void AnyTranslatableTextCtrl::DoSetValue(const wxString& value, int flags) +{ + wxWindowUpdateLocker dis(this); + CustomizedTextCtrl::DoSetValue(value, flags); + UpdateRTLStyle(); +} + +void AnyTranslatableTextCtrl::UpdateRTLStyle() +{ + wxEventBlocker block(this, wxEVT_TEXT); + UndoSuppressor blockUndo(this); + + PARAFORMAT2 pf; + ::ZeroMemory(&pf, sizeof(pf)); + pf.cbSize = sizeof(pf); + pf.dwMask |= PFM_RTLPARA; + if (m_language.IsRTL()) + pf.wEffects |= PFE_RTLPARA; + + long start, end; + GetSelection(&start, &end); + SetSelection(-1, -1); + ::SendMessage((HWND) GetHWND(), EM_SETPARAFORMAT, 0, (LPARAM) &pf); + SetSelection(start, end); +} +#endif // __WXMSW__ + +#ifdef __WXGTK__ +void AnyTranslatableTextCtrl::DoSetValue(const wxString& value, int flags) +{ + CustomizedTextCtrl::DoSetValue(value, flags); + HighlightText(); +} +#endif + +void AnyTranslatableTextCtrl::HighlightText() +{ + auto text = GetValue().ToStdWstring(); + +#ifdef __WXOSX__ + + NSRange fullRange = NSMakeRange(0, text.length()); + NSLayoutManager *layout = [TextView(this) layoutManager]; + [layout removeTemporaryAttribute:NSForegroundColorAttributeName forCharacterRange:fullRange]; + [layout removeTemporaryAttribute:NSBackgroundColorAttributeName forCharacterRange:fullRange]; + + m_syntax.Highlight(text, [=](int a, int b, SyntaxHighlighter::TextKind kind){ + [layout addTemporaryAttributes:m_attrs->For(kind) forCharacterRange:NSMakeRange(a, b-a)]; + }); + +#else // !__WXOSX__ + +#ifndef __WXGTK__ + // Freezing (and more to the point, thawing) the window from inside wxEVT_TEXT + // handler breaks pasting under GTK+ (selection is not replaced). + // See https://github.com/vslavik/poedit/issues/139 + wxWindowUpdateLocker noupd(this); +#endif + + wxEventBlocker block(this, wxEVT_TEXT); + #ifdef __WXMSW__ + UndoSuppressor blockUndo(this); + #endif + + auto deflt = m_attrs->Default(); + deflt.SetFont(GetFont()); + SetStyle(0, text.length(), deflt); + + m_syntax.Highlight(text, [=](int a, int b, SyntaxHighlighter::TextKind kind){ + SetStyle(a, b, m_attrs->For(kind)); + }); + +#endif // __WXOSX__/!__WXOSX__ +} + + + +SourceTextCtrl::SourceTextCtrl(wxWindow *parent, wxWindowID winid) + : AnyTranslatableTextCtrl(parent, winid, wxTE_READONLY) +{ + SetLanguage(Language::English()); +} + + +TranslationTextCtrl::TranslationTextCtrl(wxWindow *parent, wxWindowID winid) + : AnyTranslatableTextCtrl(parent, winid), + m_lastKeyWasReturn(false) +{ +#ifdef __WXMSW__ + PrepareTextCtrlForSpellchecker(this); +#endif + +#ifdef __WXOSX__ + [TextView(this) setAllowsUndo:YES]; +#endif + + Bind(wxEVT_KEY_DOWN, &TranslationTextCtrl::OnKeyDown, this); + Bind(wxEVT_TEXT, &TranslationTextCtrl::OnText, this); +} + +void TranslationTextCtrl::OnKeyDown(wxKeyEvent& e) +{ + m_lastKeyWasReturn = (e.GetUnicodeKey() == WXK_RETURN); + e.Skip(); +} + +void TranslationTextCtrl::OnText(wxCommandEvent& e) +{ + if (m_lastKeyWasReturn) + { + // Insert \n markup in front of newlines: + m_lastKeyWasReturn = false; + long pos = GetInsertionPoint(); + auto range = GetRange(std::max(0l, pos - 3), pos); + if (range.empty() || (range.Last() == '\n' && range != "\\n\n")) + { + #ifdef __WXGTK__ + // GTK+ doesn't like modifying the content in the "changed" signal: + CallAfter([=]{ + Replace(pos - 1, pos, "\\n\n"); + HighlightText(); + }); + #else + Replace(pos - 1, pos, "\\n\n"); + #endif + } + } + + e.Skip(); +} + +#ifdef __WXOSX__ +void TranslationTextCtrl::DoSetValue(const wxString& value, int flags) +{ + AnyTranslatableTextCtrl::DoSetValue(value, flags); + + NSUndoManager *undo = [TextView(this) undoManager]; + [undo removeAllActions]; +} +#endif + +void TranslationTextCtrl::SetPlainTextUserWritten(const wxString& value) +{ + UndoGroup undo(this); + +#ifdef __WXOSX__ + DisableAutomaticSubstitutions disableAuto(this); +#endif + + SelectAll(); + WriteText(EscapePlainText(value)); + SetInsertionPointEnd(); +} diff --git a/src/text_control.h b/src/text_control.h new file mode 100644 index 0000000..fc5bf9d --- /dev/null +++ b/src/text_control.h @@ -0,0 +1,172 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 1999-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_text_control_h +#define Poedit_text_control_h + +#include +#include +#include + +#include "language.h" +#include "syntaxhighlighter.h" + + +/** + Text control with some Poedit-specific customizations: + + - Allow setting text programatically, without user-input processing (OS X) + - Disable user-usable rich text support + - Stylistic tweaks (padding and such) + - Generic undo/redo implementation for GTK + - Search highlighting + */ +class CustomizedTextCtrl : public wxTextCtrl +{ +public: + static const int ALWAYS_USED_STYLE = wxTE_MULTILINE | wxTE_RICH2; + + CustomizedTextCtrl(wxWindow *parent, wxWindowID winid, long style = 0); + + /// Show find result indicator at given part of the text + void ShowFindIndicator(int from, int length); + +#ifdef __WXGTK__ + // Undo/redo implementation: + void BeginUndoGrouping(); + void EndUndoGrouping(); + void SaveSnapshot(); +#endif + +protected: +#ifdef __WXOSX__ + void DoSetValue(const wxString& value, int flags) override; + wxString DoGetValue() const override; +#endif + +#if defined(__WXMSW__) || defined(__WXGTK__) + bool DoCopy(); + void OnCopy(wxClipboardTextEvent& event); + void OnCut(wxClipboardTextEvent& event); + void OnPaste(wxClipboardTextEvent& event); + + virtual wxString DoCopyText(long from, long to); + virtual void DoPasteText(long from, long to, const wxString& s); +#endif // __WXMSW__/__WXGTK__ + +#ifdef __WXGTK__ + struct Snapshot + { + wxString text; + long insertionPoint; + }; + + void DoSetValue(const wxString& value, int flags) override; + void OnText(wxCommandEvent& event); + bool CanUndo() const override; + bool CanRedo() const override; + void Undo() override; + void Redo() override; + + std::vector m_history; + size_t m_historyIndex; // where in the vector to insert the next snapshot + int m_historyLocks; +#endif // __WXGTK__ +}; + + +class AnyTranslatableTextCtrl : public CustomizedTextCtrl +{ +public: + AnyTranslatableTextCtrl(wxWindow *parent, wxWindowID winid, int style = 0); + ~AnyTranslatableTextCtrl(); + + void SetLanguage(const Language& lang); + + // Set and get control's text as plain/raw text, with no escaping or formatting. + // This is the "true" representation, with e.g newlines included. The version + // displayed to the user includes syntax highlighting and escaping of some characters + // (e.g. tabs shown as \t, newlines as \n followed by newline). + void SetPlainText(const wxString& s); + wxString GetPlainText() const; + + // Apply escaping as described in SetPlainText: + static wxString EscapePlainText(const wxString& s); + static wxString UnescapePlainText(const wxString& s); + +protected: +#if defined(__WXMSW__) || defined(__WXGTK__) + wxString DoCopyText(long from, long to) override; + void DoPasteText(long from, long to, const wxString& s) override; +#endif + +#ifdef __WXMSW__ + void DoSetValue(const wxString& value, int flags) override; + void UpdateRTLStyle(); +#endif // __WXMSW__ + +#ifdef __WXGTK__ + void DoSetValue(const wxString& value, int flags) override; +#endif + +protected: + void HighlightText(); + + class Attributes; + SyntaxHighlighter m_syntax; + std::unique_ptr m_attrs; + Language m_language; +}; + + +class SourceTextCtrl : public AnyTranslatableTextCtrl +{ +public: + SourceTextCtrl(wxWindow *parent, wxWindowID winid); + + bool AcceptsFocus() const override { return false; } +}; + + +class TranslationTextCtrl : public AnyTranslatableTextCtrl +{ +public: + TranslationTextCtrl(wxWindow *parent, wxWindowID winid); + + /// Sets the value to something the user wrote + void SetPlainTextUserWritten(const wxString& value); + +protected: + void OnKeyDown(wxKeyEvent& e); + void OnText(wxCommandEvent& e); + +#ifdef __WXOSX__ + void DoSetValue(const wxString& value, int flags) override; +#endif + + bool m_lastKeyWasReturn; +}; + +#endif // Poedit_text_control_h diff --git a/src/tm/dump_legacy_tm.cpp b/src/tm/dump_legacy_tm.cpp new file mode 100644 index 0000000..6a7da31 --- /dev/null +++ b/src/tm/dump_legacy_tm.cpp @@ -0,0 +1,427 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2001-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include + +#include + +#ifdef DB_HEADER + #include DB_HEADER +#else + #include +#endif + +/** \page db_desc Translation Memory Algorithms + + \section tm_def TM Definition + + For the purposes of algorithm description, let's say that TM is a + database that stores original string-translation pairs (where both + original string and translation are strings consisting of words + delimited by spaces and/or interpunction) and supports inexact + retrieval with original string as primary key. Inexact retrieval means + that TM will return non-empty response even though there's no record + with given key. In such case, TM will return \e similar records, that is + records whose key differs in no more than N words from searched key + and is at worst M words longer. + + \section tm_store Storage + + Data are stored in three tables implemented as Berkeley DB databases + (they have a feature important for TM: all data are stored as + string_key:value pairs and B-tree or hash table is used for very fast + access to records; records are variable-length). + + All strings are encoded in UTF-8. + + Table one, DbOrig, contains original strings. Its key is original string + and stored value is 32bit ID of the string (which is identical to + record's index in DbTranse table, see below). There's 1-1 correspondence + between original strings and indexes. + + Table two, DbTrans, holds translations of original strings. Unlike DbOrig, + this one is indexed with IDs, which gives us fastest possible access to + this table. Record's value in DbTrans is UTF-8 encoded string buffer that + contains one or more NULL-terminated strings. (Number of translations in + record is trivially equal to number of zeros in the buffer; this approach + makes adding translations to existing record very simple.) + + These two tables fully describe TM's content, but they only allow exact + retrieval. + + The last table, DbWords, is the core of inexact lookup feature. It is + indexed with a tuple of word (converted to lowercase) and sentence length. + The value is a list of IDs of original strings of given length that + contain given word. These lists are relatively small even in large + databases; this is thanks to fragmentation caused by sentence length part + of the key. An important property of ID lists is that they are always + sorted - we'll need this later. + + + \section tm_ops Operations + + TM supports two operations: + - Store(source_string, translation) + - Lookup(string, max_words_diff, max_length_delta). This operation returns + array of results and integer value indicating exactness of result + (0=worst, 100=exact). All returned strings are of same exactness. + + + \subsection tm_write Writing to TM + + First, TM tries to find \a source_string in DbOrig. This is a trivial + case - if TM finds it, it reads the record with obtained ID from DbTrans, + checks if the list already contains \a translation and if not, adds + \a translation to the list and writes it back to DbTrans. DBs are + consistent at this point and operation finished successfully. + + If DbOrig doesn't contain \a source_string, however, the situation is + more complicated. TM writes \a translation to DbTrans and obtains ID + (which equals new record's index in DbTrans). + It then writes \a source_string and this ID to DbOrig. Last, TM converts + \a source_string to an array of words (by splitting it with usual + word separators, converting to lowercase and removing bad words that + are too common, such as "a", "the" or "will"). Number of words is used + as sentence length and the ID is added to (word,length) records in + DbWords for all words in the sentence (adding new records as necessary). + (IDs are added to the end of list; this ensures, together with ID=index + property, that IDs in DbWords are always sorted.) + + + \subsection tm_lookup TM Lookup + + As a first attempt, exact match is tried, that is, TM tries to retrieve + \a string from DbOrig. If an ID is found, matching translations are + retrieved from DbTrans and returned together with exactness value of 100 + (highest possible). + + This happens only rarely, though. In more common scenario, TM tries + to find similar entries. TM loops over i=0..max_words_diff and + j=0..max_length_delta ranges (the 2nd one is in inner loop) and attempts + to find records with \e exactly i words missing in \e exactly j words + longer sentences. + + To accomplish this, TM must find all possible combinations of \a i + omitted words among the total of N words. The algorithm then gets lists of + IDs for non-omitted words for each such combination and computes + union of all ID lists. ID lists are sorted, so we can do this by merging + lists in O(n) time. If the union is not empty, the algorithm returns + translations identified by IDs in the union, together with success value + computed from i,j values as percentage of i,j-space that was already + processed. + + If all unions for all combinations and for all possible i,j values are + empty, the algorithm fails. + + \remark + - Time complexity of this algorithm is hard to determine; if we assume + DB accesses are constant-time (which is not true; Berkeley DB access is + mostly O(log n) and we do lots of string processing that doesn't exceed + O(size of query)), then the worst case scenario involves + O(max_words_diff*max_length_delta*words_in_string) unifications and + lookups, where union operation depends on sum of lengths of ID lists. A + sample DB created from full RedHat 6.1 installation CD had lists smaller + than 300 IDs. + - Real-life execution speed is more than satisfying - lookup takes hardly + any time on an average Celeron 400MHz system. + + */ + +typedef db_recno_t DbKey; +const DbKey DBKEY_ILLEGAL = 0; + +class DbKeys +{ + public: + DbKeys(const Dbt& data) + { + Count = data.get_size() / sizeof(DbKey); + List = new DbKey[Count]; + memcpy(List, data.get_data(), data.get_size()); + } + + DbKeys(size_t cnt) : Count(cnt) + { + List = new DbKey[Count]; + } + + ~DbKeys() + { + delete[] List; + } + + size_t Count; + DbKey *List; +}; + +/// Simple OO interface to Berkeley DB database. +class DbBase +{ + public: + /// Ctor. + DbBase(DbEnv *env, const std::string& filename, DBTYPE type); + + protected: + virtual ~DbBase(); + + Db m_db; +}; + +/// Interface to the database of translations. +class DbTrans : public DbBase +{ + public: + DbTrans(DbEnv *env, const std::string& path) + : DbBase(env, path + "translations.db", DB_RECNO) {} + + /** Retrieves translations stored under given \index. + \return array of translations or NULL if the key is absent. + \remark The caller must delete returned object + */ + std::vector Read(DbKey index); +}; + +/// Interface to DB of original strings. +class DbOrig : public DbBase +{ + public: + DbOrig(DbEnv *env, const std::string& path) + : DbBase(env, path + "strings.db", DB_HASH) {} + + /** Returns index of string \a str or \c DBKEY_ILLEGAL if not found. + Returned index can be used with DbTrans::Write and DbTrans::Read + */ + DbKey Read(const char *c_str); + + template + void Enumerate(Functor f); +}; + + + +DbBase::DbBase(DbEnv *env, const std::string& filename, DBTYPE type) + : m_db(env, 0) +{ + m_db.open(NULL, + filename.c_str(), + NULL, + type, + DB_RDONLY | DB_AUTO_COMMIT, + 0); +} + + +DbBase::~DbBase() +{ + m_db.close(0); +} + + +std::vector DbTrans::Read(DbKey index) +{ + Dbt key(&index, sizeof(index)); + Dbt data; + + if ( m_db.get(NULL, &key, &data, 0) == DB_NOTFOUND ) + return std::vector(); + + std::vector arr; + char *ptr = (char*)data.get_data(); + char *endptr = ((char*)data.get_data()) + data.get_size(); + while (ptr < endptr) + { + arr.push_back(ptr); + ptr += strlen(ptr) + 1; + } + + return arr; +} + + +DbKey DbOrig::Read(const char *c_str) +{ + Dbt key((void*)c_str, (u_int32_t)strlen(c_str)); + Dbt data; + + if ( m_db.get(NULL, &key, &data, 0) == DB_NOTFOUND ) + return DBKEY_ILLEGAL; + + return *((DbKey*)data.get_data()); +} + + +template +void DbOrig::Enumerate(Functor f) +{ + Dbc *cursor; + m_db.cursor(NULL, &cursor, 0); + + Dbt key, value; + + int ret = cursor->get(&key, &value, DB_FIRST); + while (ret == 0) + { + const std::string keys((const char*)key.get_data(), key.get_size()); + f(keys, *((DbKey*)value.get_data())); + ret = cursor->get(&key, &value, DB_NEXT_NODUP); + } + + cursor->close(); +} + + + +std::unique_ptr CreateDbEnv(const char *path) +{ + const u_int32_t flags = DB_INIT_MPOOL | + DB_INIT_LOCK | + DB_INIT_LOG | + DB_INIT_TXN | + DB_RECOVER | + DB_CREATE; + + std::unique_ptr env(new DbEnv(0)); + env->open(path, flags, 0600); + + // This prevents the log from growing indefinitely + env->log_set_config(DB_LOG_AUTO_REMOVE, 1); + + return env; +} + + +void DestroyDbEnv(std::unique_ptr& env) +{ + const char *dbpath_c; + env->get_home(&dbpath_c); + std::string dbpath(dbpath_c); + + env->close(0); + + // Clean up temporary environment files (unless they're still in use): + DbEnv env2(0); + env2.remove(dbpath.c_str(), 0); + + env.reset(); +} + + +std::string escape(const std::string& data) +{ + std::string buffer; + buffer.reserve(data.size()); + for (size_t pos = 0; pos != data.size(); ++pos) + { + switch(data[pos]) + { + case '&': buffer.append("&"); break; + case '\"': buffer.append("""); break; + case '\'': buffer.append("'"); break; + case '<': buffer.append("<"); break; + case '>': buffer.append(">"); break; + default: buffer.append(1, data[pos]); break; + } + } + return buffer; +} + + +void DumpLanguage(DbEnv *env, const char *envpath, const std::string& lang) +{ + try + { + std::string path(envpath); + path += "/" + lang + "/"; + DbOrig orig(env, path); + DbTrans trans(env, path); + + printf("\n", escape(lang).c_str()); + + orig.Enumerate([&trans](const std::string& str, DbKey key){ + std::vector tr(trans.Read(key)); + for (auto t: tr) + { + printf("\n", escape(str).c_str(), escape(t).c_str()); + } + }); + + printf("\n"); + } + catch (DbException& e) + { + // per-language DB may be missing, this is OK + if (e.get_errno() == ENOENT) + return; + else + throw; + } +} + + +int main(int argc, char *argv[]) +{ + if (argc != 3) + { + fprintf(stderr, "Usage: %s languages (e.g. 'cs:fr:en')...\n", argv[0]); + return 2; + } + + try + { + std::unique_ptr env = CreateDbEnv(argv[1]); + + printf("\n"); + printf("\n"); + + std::string lang; + for (const char *ptr = argv[2];; ptr++) + { + if (*ptr == ':' || *ptr == '\0') + { + if (!lang.empty()) + DumpLanguage(env.get(), argv[1], lang); + lang.clear(); + if (*ptr == '\0') + break; + } + else + lang += *ptr; + } + + printf("\n"); + + DestroyDbEnv(env); + } + catch (DbException& e) + { + fprintf(stderr, "TM Database Error: %s\n", e.what()); + return 1; + } + + return 0; +} diff --git a/src/tm/suggestions.cpp b/src/tm/suggestions.cpp new file mode 100644 index 0000000..76ba2e4 --- /dev/null +++ b/src/tm/suggestions.cpp @@ -0,0 +1,103 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "suggestions.h" + +#include "concurrency.h" + + +class SuggestionsProviderImpl +{ +public: + SuggestionsProviderImpl() {} + + void SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source, + SuggestionsProvider::success_func_type onSuccess, + SuggestionsProvider::error_func_type onError) + { + auto bck = &backend; + concurrency_queue::add([=](){ + // don't bother asking the backend if the language or query is invalid: + if (!srclang.IsValid() || !lang.IsValid() || srclang == lang || source.empty()) + { + onSuccess(SuggestionsList()); + return; + } + // query the backend: + bck->SuggestTranslation(srclang, lang, source, onSuccess, onError); + }); + } + + std::future SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source) + { + auto promise = std::make_shared>(); + + SuggestTranslation(backend, srclang, lang, source, + [=](const SuggestionsList& results) { + promise->set_value(results); + }, + [=](std::exception_ptr e) { + promise->set_exception(e); + } + ); + + return promise->get_future(); + } +}; + + + +SuggestionsProvider::SuggestionsProvider() : m_impl(new SuggestionsProviderImpl) +{ +} + +SuggestionsProvider::~SuggestionsProvider() +{ +} + +void SuggestionsProvider::SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source, + success_func_type onSuccess, + error_func_type onError) +{ + m_impl->SuggestTranslation(backend, srclang, lang, source, onSuccess, onError); +} + +std::future +SuggestionsProvider::SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source) +{ + return m_impl->SuggestTranslation(backend, srclang, lang, source); +} diff --git a/src/tm/suggestions.h b/src/tm/suggestions.h new file mode 100644 index 0000000..a926caf --- /dev/null +++ b/src/tm/suggestions.h @@ -0,0 +1,187 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_suggestions_h +#define Poedit_suggestions_h + +#include +#include +#include +#include +#include +#include +#include + +#include "language.h" + +class SuggestionsBackend; +class SuggestionsProviderImpl; + + +/// A single translation suggestion +struct Suggestion +{ + /// Possible types of suggestion sources + enum class Source + { + LocalTM + }; + + /// Ctor + Suggestion() : score(0.), timestamp(0), source(Source::LocalTM) {} + Suggestion(const std::wstring& text_, + double score_, + time_t timestamp_ = 0, + Source source_ = Source::LocalTM) + : text(text_), score(score_), timestamp(timestamp_), source(source_) + {} + + /// Text of the suggested translation + std::wstring text; + + /// Quality score (1.0 = exact match, 0 = no score assigned) + double score; + + /// Time when the suggestion was stored + time_t timestamp; + + /// Source of the suggestion + Source source; + + bool HasScore() const { return score != 0.0; } + bool IsExactMatch() const { return score == 1.0; } +}; + +inline bool operator<(const Suggestion& a, const Suggestion& b) +{ + if (std::fabs(a.score - b.score) <= std::numeric_limits::epsilon()) + return a.timestamp > b.timestamp; + else + return a.score > b.score; +} + +typedef std::vector SuggestionsList; + +/** + Provides suggestions for translations. + + Under the hood, the translation memory is used, but the API is more + generic and allows for other implementations. + + This is a relatively lightweight object and shouldn't be shared between + users (e.g. opened documents/windows) -- create one instance per user. + */ +class SuggestionsProvider +{ +public: + /// Initializes the provider. + SuggestionsProvider(); + ~SuggestionsProvider(); + + typedef std::function success_func_type; + typedef std::function error_func_type; + + /** + Query for suggested translations. + + This function asynchronously calls either @a onSuccess or @a onError + callback, exactly once, from a worked thread. + + If no suggestions are found, @a onSuccess is called with an empty + list as its argument. + + @param backend Suggestions backend to use, e.g. + TranslationMemory::Get(). + @param srclang Language of the source text. + @param lang Language of the desired translation. + @param source Source text. + @param onSuccess Called with suggestions. + @param onError Called in case of error. + */ + void SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source, + success_func_type onSuccess, + error_func_type onError); + + /// Same as the other version but returns a future + std::future + SuggestTranslation(SuggestionsBackend& backend, + const Language& srclang, + const Language& lang, + const std::wstring& source); + +private: + std::unique_ptr m_impl; +}; + + + +/** + Implements a source of suggestions for SuggestionsProvider. + + This class is abstraction that doesn't depend on a specific source + (such as the translation memory DB). + + @note Implementations must be thread-safe! + */ +class SuggestionsBackend +{ +public: + virtual ~SuggestionsBackend() {} + + typedef SuggestionsProvider::success_func_type success_func_type; + typedef SuggestionsProvider::error_func_type error_func_type; + + /** + Query for suggested translations. + + This function asynchronously calls either @a onSuccess or @a onError + callback, exactly once. + + @note No guarantees are made about the thread the callbacks are called + from; they may be called immediately before SuggestTranslation() + returns (even on the same thread) or at a later time. This is + a difference from SuggestionsProvider, which guarantees that + the callback is called asynchronously from another thread. + + If no suggestions are found, @a onSuccess is called with an empty + list as its argument. + + @param srclang Language of the source text. + @param lang Language of the desired translation. + @param source Source text. + @param onSuccess Called with suggestions. + @param onError Called in case of error. + */ + virtual void SuggestTranslation(const Language& srclang, + const Language& lang, + const std::wstring& source, + success_func_type onSuccess, + error_func_type onError) = 0; +}; + +#endif // Poedit_suggestions_h diff --git a/src/tm/tm_migrate.cpp b/src/tm/tm_migrate.cpp new file mode 100644 index 0000000..19055b3 --- /dev/null +++ b/src/tm/tm_migrate.cpp @@ -0,0 +1,309 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef DONT_MIGRATE_LEGACY_TM + +#include "transmem.h" + +#include "logcapture.h" +#include "errors.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace +{ + +wxString GetLegacyDatabaseDirInternal() +{ + wxString data; +#if defined(__UNIX__) && !defined(__WXOSX__) + if (!wxGetEnv("XDG_DATA_HOME", &data)) + data = wxGetHomeDir() + "/.local/share"; + data += "/poedit"; +#else + data = wxStandardPaths::Get().GetUserDataDir(); +#endif + + data += wxFILE_SEP_PATH; + data += "TM"; + + if (wxFileName::DirExists(data)) + return data; + else + return wxString(); +} + +wxString GetLegacyDatabaseDir() +{ + wxString path = wxConfig::Get()->Read("/TM/database_path", ""); + if (path.empty() || !wxFileName::DirExists(path)) + path = GetLegacyDatabaseDirInternal(); +#ifdef __WXMSW__ + return wxFileName(path).GetShortPath(); +#else + return path; +#endif +} + + +wxString GetDumpToolPath() +{ +#if defined(__WXOSX__) || defined(__WXMSW__) + wxFileName path(wxStandardPaths::Get().GetExecutablePath()); + path.SetName("dump-legacy-tm"); + #ifdef __WXMSW__ + path.SetExt("exe"); + return path.GetShortPath(); + #else + return path.GetFullPath(); + #endif +#else + return wxStandardPaths::Get().GetInstallPrefix() + "/libexec/poedit-dump-legacy-tm"; +#endif +} + + +class DumpProcess : public wxProcess +{ +public: + DumpProcess() : wxProcess(), terminated(false), status(0) {} + + virtual void OnTerminate(int, int status_) + { + status = status_; + terminated = true; + } + + bool terminated; + int status; +}; + + +// Note: Expat is used for parsing, because the data may potentially be huge and +// streaming the content avoids excessive memory usage. + +struct ExpatContext +{ + wxProgressDialog *progress; + Language lang; + int count; + std::shared_ptr tm; +}; + +void XMLCALL OnStartElement(void *data, const char *name, const char **attrs) +{ + ExpatContext& ctxt = *static_cast(data); + + if ( strcmp(name, "language") == 0 ) + { + for ( int i = 0; attrs[i]; i += 2 ) + { + if (strcmp(attrs[i], "lang") == 0) + ctxt.lang = Language::TryParse(wxString::FromUTF8(attrs[i+1]).ToStdWstring()); + } + } + if ( strcmp(name, "i") == 0 ) + { + wxString s, t; + for ( int i = 0; attrs[i]; i += 2 ) + { + if (strcmp(attrs[i], "s") == 0) + s = wxString::FromUTF8(attrs[i+1]); + else if (strcmp(attrs[i], "t") == 0) + t = wxString::FromUTF8(attrs[i+1]); + if (!s.empty() && !t.empty()) + { + static const auto srclang = Language::English(); + ctxt.tm->Insert(srclang, ctxt.lang, s.ToStdWstring(), t.ToStdWstring()); + if (ctxt.count++ % 47 == 0) + ctxt.progress->Pulse(wxString::Format(_("Importing translations: %d"), ctxt.count)); + } + } + } +} + +void XMLCALL OnEndElement(void*, const char*) +{ + // nothing to do +} + +void DoMigrate(const wxString& path, const wxString& languages) +{ + LogCapture log; + + const wxString tool = GetDumpToolPath(); + wxLogTrace("poedit.tm", "TM migration - tool: '%s'", tool); + wxLogVerbose("%s \"%s\" \"%s\"", tool, path, languages); + + wxProgressDialog progress(_("Poedit Update"), _("Preparing migration...")); + + wxCharBuffer tool_utf8(tool.utf8_str()); + wxCharBuffer path_utf8(path.utf8_str()); + wxCharBuffer langs_utf8(languages.utf8_str()); + char *argv_utf8[] = { tool_utf8.data(), path_utf8.data(), langs_utf8.data(), nullptr }; + + DumpProcess callback; + callback.Redirect(); + long executeStatus = wxExecute(argv_utf8, wxEXEC_ASYNC, &callback); + if (executeStatus <= 0) + throw Exception(log.text); + + auto sout = callback.GetInputStream(); + auto serr = callback.GetErrorStream(); + + ExpatContext ctxt; + ctxt.progress = &progress; + ctxt.count = 0; + ctxt.tm = TranslationMemory::Get().GetWriter(); + + XML_Parser parser = XML_ParserCreate(NULL); + XML_SetUserData(parser, &ctxt); + XML_SetElementHandler(parser, OnStartElement, OnEndElement); + + while (!callback.terminated) + { +#if defined(__UNIX__) + if ( wxTheApp ) + wxTheApp->CheckSignal(); +#elif defined(__WXMSW__) + wxYield(); // so that OnTerminate() is called +#endif + + wxMilliSleep(1); + + while (callback.IsInputAvailable()) + { + char buf[4096]; + sout->Read(buf, 4096); + size_t read = sout->LastRead(); + XML_Parse(parser, buf, (int)read, XML_FALSE); + } + while (callback.IsErrorAvailable()) + { + wxStringOutputStream logstream(&log.text); + serr->Read(logstream); + } + } + XML_Parse(parser, "", 0, XML_TRUE); + XML_ParserFree(parser); + + if (callback.status == 0) + { + progress.Pulse(_("Finalizing...")); + progress.Pulse(); + ctxt.tm->Commit(); + } + + if (callback.status != 0) + { + log.Append(wxString::Format(_("Migration exit status: %d"), callback.status)); + throw Exception(log.text); + } +} + +} // anonymous namespace + +/** + Migrates existing BerkeleyDB-based translation memory into the new Lucene + format. + + @return false if the user declined to do it, true otherwise (even on failure!) + */ +bool MigrateLegacyTranslationMemory() +{ + if (wxConfig::Get()->ReadBool("/TM/legacy_migration_failed", false)) + return true; // failed migration shouldn't prevent Poedit from working + + const wxString languages = wxConfig::Get()->Read("/TM/languages", ""); + if (languages.empty()) + return true; // no migration to perform + + const wxString path = GetLegacyDatabaseDir(); + wxLogTrace("poedit.tm", "TM migration - path: '%s', languages: '%s'", path, languages); + if (path.empty()) + return true; // no migration to perform + + { + wxMessageDialog dlg + ( + nullptr, + _("Poedit needs to convert your translation memory to a new format."), + _("Poedit Update"), + wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION + ); + dlg.SetExtendedMessage(_("This must be done before Poedit can start. It may take a few minutes if you have lots of translations stored, but should normally be much faster.")); + dlg.SetYesNoLabels(_("Proceed"), _("Quit")); + if (dlg.ShowModal() != wxID_YES) + return false; + } + + try + { + DoMigrate(path, languages); + + // migration successed, remove old TM: + if (path == GetLegacyDatabaseDirInternal()) + { + wxLogNull null; + wxFileName::Rmdir(path, wxPATH_RMDIR_RECURSIVE); + } + // else: points to a user directory; play it safe and don't delete + + wxConfigBase::Get()->DeleteGroup("/TM"); + } + catch (Exception& e) + { + wxConfig::Get()->Write("/TM/legacy_migration_failed", true); + wxMessageDialog dlg + ( + nullptr, + _("Translation memory migration failed."), + _("Poedit Update"), + wxOK | wxICON_ERROR + ); + dlg.SetExtendedMessage(wxString::Format( + _(L"Your translation memory data couldn't be migrated. The error was:\n\n%s\nPlease email help@poedit.net and we’ll get it fixed."), + e.What())); + dlg.ShowModal(); + } + + return true; +} + +#endif // !DONT_MIGRATE_LEGACY_TM diff --git a/src/tm/transmem.cpp b/src/tm/transmem.cpp new file mode 100644 index 0000000..f445b19 --- /dev/null +++ b/src/tm/transmem.cpp @@ -0,0 +1,700 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "transmem.h" + +#include "catalog.h" +#include "errors.h" +#include "utility.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Lucene; + +namespace +{ + +#define CATCH_AND_RETHROW_EXCEPTION \ + catch (LuceneException& e) \ + { \ + throw Exception(wxString::Format("%s (%d)", \ + e.getError(), (int)e.getType())); \ + } \ + catch (std::exception& e) \ + { \ + throw Exception(e.what()); \ + } + + +// Manages IndexReader and Searcher instances in multi-threaded environment. +// Curiously, Lucene uses shared_ptr-based refcounting *and* explicit one as +// well, with a crucial part not well protected. +// +// See https://issues.apache.org/jira/browse/LUCENE-3567 for the exact issue +// encountered by Poedit's use as well. For an explanation of the manager +// class, see +// http://blog.mikemccandless.com/2011/09/lucenes-searchermanager-simplifies.html +// http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html +class SearcherManager +{ +public: + SearcherManager(IndexWriterPtr writer) + { + m_reader = writer->getReader(); + m_searcher = newLucene(m_reader); + } + + ~SearcherManager() + { + m_searcher.reset(); + m_reader->decRef(); + } + + // Safe, properly ref-counting (in Lucene way, not just shared_ptr) holder. + template + class SafeRef + { + public: + typedef boost::shared_ptr TPtr; + + SafeRef(SafeRef&& other) : m_mng(other.m_mng) { std::swap(m_ptr, other.m_ptr); } + ~SafeRef() { if (m_ptr) m_mng.DecRef(m_ptr); } + + TPtr ptr() { return m_ptr; } + T* operator->() const { return m_ptr.get(); } + + SafeRef(const SafeRef&) = delete; + SafeRef& operator=(const SafeRef&) = delete; + + private: + friend class SearcherManager; + explicit SafeRef(SearcherManager& m, TPtr ptr) : m_mng(m), m_ptr(ptr) {} + + SearcherManager& m_mng; + boost::shared_ptr m_ptr; + }; + + SafeRef Reader() + { + std::lock_guard guard(m_mutex); + ReloadReaderIfNeeded(); + m_reader->incRef(); + return SafeRef(*this, m_reader); + } + + SafeRef Searcher() + { + std::lock_guard guard(m_mutex); + ReloadReaderIfNeeded(); + m_searcher->getIndexReader()->incRef(); + return SafeRef(*this, m_searcher); + } + +private: + void ReloadReaderIfNeeded() + { + // contract: m_mutex is locked when this function is called + if (m_reader->isCurrent()) + return; // nothing to do + + auto newReader = m_reader->reopen(); + auto newSearcher = newLucene(newReader); + + m_reader->decRef(); + + m_reader = newReader; + m_searcher = newSearcher; + } + + void DecRef(IndexReaderPtr& r) + { + std::lock_guard guard(m_mutex); + r->decRef(); + } + void DecRef(IndexSearcherPtr& s) + { + std::lock_guard guard(m_mutex); + s->getIndexReader()->decRef(); + } + + IndexReaderPtr m_reader; + IndexSearcherPtr m_searcher; + std::mutex m_mutex; +}; + + +} // anonymous namespace + +// ---------------------------------------------------------------- +// TranslationMemoryImpl +// ---------------------------------------------------------------- + +class TranslationMemoryImpl +{ +public: +#ifdef __WXMSW__ + typedef SimpleFSDirectory DirectoryType; +#else + typedef MMapDirectory DirectoryType; +#endif + + TranslationMemoryImpl() { Init(); } + + ~TranslationMemoryImpl() + { + m_mng.reset(); + m_writer->close(); + } + + SuggestionsList Search(const Language& srclang, const Language& lang, + const std::wstring& source); + + std::shared_ptr GetWriter() { return m_writerAPI; } + + void GetStats(long& numDocs, long& fileSize); + +private: + void Init(); + + static std::wstring GetDatabaseDir(); + +private: + AnalyzerPtr m_analyzer; + IndexWriterPtr m_writer; + std::shared_ptr m_mng; + + std::shared_ptr m_writerAPI; +}; + + +std::wstring TranslationMemoryImpl::GetDatabaseDir() +{ + wxString data; +#if defined(__UNIX__) && !defined(__WXOSX__) + if ( !wxGetEnv("XDG_DATA_HOME", &data) ) + data = wxGetHomeDir() + "/.local/share"; + data += "/poedit"; +#else + data = wxStandardPaths::Get().GetUserDataDir(); +#endif + + // ensure the parent directory exists: + wxFileName::Mkdir(data, wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); + + data += wxFILE_SEP_PATH; + data += "TranslationMemory"; + + return data.ToStdWstring(); +} + + +namespace +{ + +static const int DEFAULT_MAXHITS = 10; + +// Normalized score that must be met for a suggestion to be shown. This is +// an empirical guess of what constitues good matches. +static const double QUALITY_THRESHOLD = 0.6; + +// Maximum allowed difference in phrase length, in #terms. +static const int MAX_ALLOWED_LENGTH_DIFFERENCE = 2; + + +bool ContainsResult(const SuggestionsList& all, const std::wstring& r) +{ + auto found = std::find_if(all.begin(), all.end(), + [&r](const Suggestion& x){ return x.text == r; }); + return found != all.end(); +} + +// Return translation (or source) text field. +// +// Older versions of Poedit used to store C-like escaped text (e.g. "\n" instead +// of newline), but starting with 1.8, the "true" form of the text is stored. +// To preserve compatibility with older data, a version field is stored with +// TM documents and this function decides whether to decode escapes or not. +// +// TODO: remove this a few years down the road. +std::wstring get_text_field(DocumentPtr doc, const std::wstring& field) +{ + auto version = doc->get(L"v"); + auto value = doc->get(field); + if (version.empty()) // pre-1.8 data + return UnescapeCString(value); + else + return value; +} + + +template +void PerformSearchWithBlock(IndexSearcherPtr searcher, + QueryPtr srclang, QueryPtr lang, + const std::wstring& exactSourceText, + QueryPtr query, + double scoreThreshold, + double scoreScaling, + T callback) +{ + auto fullQuery = newLucene(); + fullQuery->add(srclang, BooleanClause::MUST); + fullQuery->add(lang, BooleanClause::MUST); + fullQuery->add(query, BooleanClause::MUST); + + auto hits = searcher->search(fullQuery, DEFAULT_MAXHITS); + + for (int i = 0; i < hits->scoreDocs.size(); i++) + { + const auto& scoreDoc = hits->scoreDocs[i]; + auto score = scoreDoc->score / hits->maxScore; + if (score < scoreThreshold) + continue; + + auto doc = searcher->doc(scoreDoc->doc); + auto src = get_text_field(doc, L"source"); + if (src == exactSourceText) + { + score = 1.0; + } + else + { + if (score == 1.0) + { + score = 0.95; // can't score non-exact thing as 100%: + + // Check against too small queries having perfect hit in a large stored text. + // Do this by penalizing too large difference in lengths of the source strings. + double len1 = exactSourceText.size(); + double len2 = src.size(); + score *= 1.0 - 0.4 * (std::abs(len1 - len2) / std::max(len1, len2)); + } + + score *= scoreScaling; + } + + callback(doc, score); + } +} + +void PerformSearch(IndexSearcherPtr searcher, + QueryPtr srclang, QueryPtr lang, + const std::wstring& exactSourceText, + QueryPtr query, + SuggestionsList& results, + double scoreThreshold, + double scoreScaling) +{ + PerformSearchWithBlock + ( + searcher, srclang, lang, exactSourceText, query, + scoreThreshold, scoreScaling, + [&results](DocumentPtr doc, double score) + { + auto t = get_text_field(doc, L"trans"); + if (!ContainsResult(results, t)) + { + time_t ts = DateField::stringToTime(doc->get(L"created")); + Suggestion r {t, score, ts}; + results.push_back(r); + } + } + ); + + std::stable_sort(results.begin(), results.end()); +} + +} // anonymous namespace + +SuggestionsList TranslationMemoryImpl::Search(const Language& srclang, + const Language& lang, + const std::wstring& source) +{ + try + { + // TODO: query by srclang too! + auto srclangQ = newLucene(newLucene(L"srclang", srclang.WCode())); + + const Lucene::String fullLang = lang.WCode(); + const Lucene::String shortLang = StringUtils::toUnicode(lang.Lang()); + + QueryPtr langPrimary = newLucene(newLucene(L"lang", fullLang)); + QueryPtr langSecondary; + if (fullLang == shortLang) + { + // for e.g. 'cs', search also 'cs_*' (e.g. 'cs_CZ') + langSecondary = newLucene(newLucene(L"lang", shortLang + L"_")); + } + else + { + // search short variants of the language too + langSecondary = newLucene(newLucene(L"lang", shortLang)); + } + langSecondary->setBoost(0.85); + auto langQ = newLucene(); + langQ->add(langPrimary, BooleanClause::SHOULD); + langQ->add(langSecondary, BooleanClause::SHOULD); + + SuggestionsList results; + + const Lucene::String sourceField(L"source"); + auto boolQ = newLucene(); + auto phraseQ = newLucene(); + + auto stream = m_analyzer->tokenStream(sourceField, newLucene(source)); + int sourceTokensCount = 0; + int sourceTokenPosition = -1; + while (stream->incrementToken()) + { + sourceTokensCount++; + auto word = stream->getAttribute()->term(); + sourceTokenPosition += stream->getAttribute()->getPositionIncrement(); + auto term = newLucene(sourceField, word); + boolQ->add(newLucene(term), BooleanClause::SHOULD); + phraseQ->add(term, sourceTokenPosition); + } + + auto searcher = m_mng->Searcher(); + + // Try exact phrase first: + PerformSearch(searcher.ptr(), srclangQ, langQ, source, phraseQ, results, + QUALITY_THRESHOLD, /*scoreScaling=*/1.0); + if (!results.empty()) + return results; + + // Then, if no matches were found, permit being a bit sloppy: + phraseQ->setSlop(1); + PerformSearch(searcher.ptr(), srclangQ, langQ, source, phraseQ, results, + QUALITY_THRESHOLD, /*scoreScaling=*/0.9); + + if (!results.empty()) + return results; + + // As the last resort, try terms search. This will almost certainly + // produce low-quality results, but hopefully better than nothing. + boolQ->setMinimumNumberShouldMatch(std::max(1, boolQ->getClauses().size() - MAX_ALLOWED_LENGTH_DIFFERENCE)); + PerformSearchWithBlock + ( + searcher.ptr(), srclangQ, langQ, source, boolQ, + QUALITY_THRESHOLD, /*scoreScaling=*/0.8, + [=,&results](DocumentPtr doc, double score) + { + auto s = get_text_field(doc, sourceField); + auto t = get_text_field(doc, L"trans"); + auto stream2 = m_analyzer->tokenStream(sourceField, newLucene(s)); + int tokensCount2 = 0; + while (stream2->incrementToken()) + tokensCount2++; + + if (std::abs(tokensCount2 - sourceTokensCount) <= MAX_ALLOWED_LENGTH_DIFFERENCE && + !ContainsResult(results, t)) + { + time_t ts = DateField::stringToTime(doc->get(L"created")); + Suggestion r {t, score, ts}; + results.push_back(r); + } + } + ); + + std::stable_sort(results.begin(), results.end()); + return results; + } + catch (LuceneException&) + { + return SuggestionsList(); + } +} + + +void TranslationMemoryImpl::GetStats(long& numDocs, long& fileSize) +{ + try + { + auto reader = m_mng->Reader(); + numDocs = reader->numDocs(); + fileSize = wxDir::GetTotalSize(GetDatabaseDir()).GetValue(); + } + CATCH_AND_RETHROW_EXCEPTION +} + +// ---------------------------------------------------------------- +// TranslationMemoryWriterImpl +// ---------------------------------------------------------------- + +class TranslationMemoryWriterImpl : public TranslationMemory::Writer +{ +public: + TranslationMemoryWriterImpl(IndexWriterPtr writer) : m_writer(writer) {} + + ~TranslationMemoryWriterImpl() {} + + void Commit() override + { + try + { + m_writer->commit(); + } + CATCH_AND_RETHROW_EXCEPTION + } + + void Rollback() override + { + try + { + m_writer->rollback(); + } + CATCH_AND_RETHROW_EXCEPTION + } + + void Insert(const Language& srclang, const Language& lang, + const std::wstring& source, const std::wstring& trans) override + { + if (!lang.IsValid() || !srclang.IsValid() || lang == srclang) + return; + + // Compute unique ID for the translation: + + static const boost::uuids::uuid s_namespace = + boost::uuids::string_generator()("6e3f73c5-333f-4171-9d43-954c372a8a02"); + boost::uuids::name_generator gen(s_namespace); + + std::wstring itemId(srclang.WCode()); + itemId += lang.WCode(); + itemId += source; + itemId += trans; + + const std::wstring itemUUID = boost::uuids::to_wstring(gen(itemId)); + + try + { + // Then add a new document: + auto doc = newLucene(); + + doc->add(newLucene(L"uuid", itemUUID, + Field::STORE_YES, Field::INDEX_NOT_ANALYZED)); + doc->add(newLucene(L"v", L"1", + Field::STORE_YES, Field::INDEX_NO)); + doc->add(newLucene(L"created", DateField::timeToString(time(NULL)), + Field::STORE_YES, Field::INDEX_NO)); + doc->add(newLucene(L"srclang", srclang.WCode(), + Field::STORE_YES, Field::INDEX_NOT_ANALYZED)); + doc->add(newLucene(L"lang", lang.WCode(), + Field::STORE_YES, Field::INDEX_NOT_ANALYZED)); + doc->add(newLucene(L"source", source, + Field::STORE_YES, Field::INDEX_ANALYZED)); + doc->add(newLucene(L"trans", trans, + Field::STORE_YES, Field::INDEX_NOT_ANALYZED)); + + m_writer->updateDocument(newLucene(L"uuid", itemUUID), doc); + } + CATCH_AND_RETHROW_EXCEPTION + } + + void Insert(const Language& srclang, const Language& lang, const CatalogItemPtr& item) override + { + if (!lang.IsValid() || !srclang.IsValid()) + return; + + // ignore translations with errors in them + if (item->GetValidity() == CatalogItem::Val_Invalid) + return; + + // can't handle plurals yet (TODO?) + if (item->HasPlural()) + return; + + // ignore untranslated or unfinished translations + if (item->IsFuzzy() || !item->IsTranslated()) + return; + + Insert(srclang, lang, item->GetString().ToStdWstring(), item->GetTranslation().ToStdWstring()); + } + + void Insert(const CatalogPtr& cat) override + { + auto srclang = cat->GetSourceLanguage(); + auto lang = cat->GetLanguage(); + if (!lang.IsValid() || !srclang.IsValid()) + return; + + for (auto& item: cat->items()) + { + // Note that dt.IsModified() is intentionally not checked - we + // want to save old entries in the TM too, so that we harvest as + // much useful translations as we can. + Insert(srclang, lang, item); + } + } + + void DeleteAll() override + { + try + { + m_writer->deleteAll(); + } + CATCH_AND_RETHROW_EXCEPTION + } + +private: + IndexWriterPtr m_writer; +}; + + +void TranslationMemoryImpl::Init() +{ + try + { + auto dir = newLucene(GetDatabaseDir()); + m_analyzer = newLucene(LuceneVersion::LUCENE_CURRENT); + + m_writer = newLucene(dir, m_analyzer, IndexWriter::MaxFieldLengthLIMITED); + m_writer->setMergeScheduler(newLucene()); + + // get the associated realtime reader & searcher: + m_mng.reset(new SearcherManager(m_writer)); + + m_writerAPI = std::make_shared(m_writer); + } + CATCH_AND_RETHROW_EXCEPTION +} + + + +// ---------------------------------------------------------------- +// Singleton management +// ---------------------------------------------------------------- + +static std::once_flag initializationFlag; +TranslationMemory *TranslationMemory::ms_instance = nullptr; + +TranslationMemory& TranslationMemory::Get() +{ + std::call_once(initializationFlag, []() { + ms_instance = new TranslationMemory; + }); + return *ms_instance; +} + +void TranslationMemory::CleanUp() +{ + if (ms_instance) + { + delete ms_instance; + ms_instance = nullptr; + } +} + +TranslationMemory::TranslationMemory() : m_impl(nullptr) +{ + try + { + m_impl = new TranslationMemoryImpl; + } + catch (...) + { + m_error = std::current_exception(); + } +} + +TranslationMemory::~TranslationMemory() { delete m_impl; } + + +// ---------------------------------------------------------------- +// public API +// ---------------------------------------------------------------- + +SuggestionsList TranslationMemory::Search(const Language& srclang, + const Language& lang, + const std::wstring& source) +{ + if (!m_impl) + std::rethrow_exception(m_error); + return m_impl->Search(srclang, lang, source); +} + +void TranslationMemory::SuggestTranslation(const Language& srclang, + const Language& lang, + const std::wstring& source, + success_func_type onSuccess, + error_func_type onError) +{ + try + { + onSuccess(Search(srclang, lang, source)); + } + catch (...) + { + onError(std::current_exception()); + } +} + +std::shared_ptr TranslationMemory::GetWriter() +{ + if (!m_impl) + std::rethrow_exception(m_error); + return m_impl->GetWriter(); +} + +void TranslationMemory::GetStats(long& numDocs, long& fileSize) +{ + if (!m_impl) + std::rethrow_exception(m_error); + m_impl->GetStats(numDocs, fileSize); +} diff --git a/src/tm/transmem.h b/src/tm/transmem.h new file mode 100644 index 0000000..f1882a7 --- /dev/null +++ b/src/tm/transmem.h @@ -0,0 +1,151 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _TRANSMEM_H_ +#define _TRANSMEM_H_ + +#include +#include +#include +#include + +#include "catalog.h" +#include "suggestions.h" + +class TranslationMemoryImpl; + +/** + Lucene-based translation memory. + + All methods may throw Exception. + */ +class TranslationMemory : public SuggestionsBackend +{ +public: + /// Return singleton instance of the TM. + static TranslationMemory& Get(); + + /// Destroys the singleton, must be called (omly) on app shutdown. + static void CleanUp(); + + /** + Search translation memory for similar strings. + + @param srclang Language of the source text. + @param lang Language of the desired translation. + @param source Source text. + + @return List of hits that were found, possibly empty. + */ + SuggestionsList Search(const Language& srclang, + const Language& lang, + const std::wstring& source); + + /// SuggestionsBackend API implementation: + void SuggestTranslation(const Language& srclang, + const Language& lang, + const std::wstring& source, + success_func_type onSuccess, + error_func_type onError) override; + + /** + Performs updates to the translation memory. + + Call Commit() to commit changes since the last commit to disk. + Call Rollback() to undo all changes since the last commit. + + Committing shouldn't be done too often, as it is expensive. + The writer is shared and can be used by multiple threads. + + Note that closing the writer on shutdown, if it has uncommitted + changes, will result in them being committed. You must to explicitly + Rollback() them if you don't want that behavior. + + All methods may throw Exception. + */ + class Writer + { + public: + virtual ~Writer() {} + + /** + Insert translation into the TM. + + @param srclang Source text language. + @param lang Translation language. + @param source Source text. + @param trans Translation text. + */ + virtual void Insert(const Language& srclang, + const Language& lang, + const std::wstring& source, + const std::wstring& trans) = 0; + + /** + Inserts a single catalog item. + + @note + Not everything is included: fuzzy or untranslated entries are skipped. + */ + virtual void Insert(const Language& srclang, + const Language& lang, + const CatalogItemPtr& item) = 0; + + /** + Inserts entire content of the catalog. + + @note + Not everything is included: fuzzy or untranslated entries are omitted. + If the catalog doesn't have language header, it is not included either. + */ + virtual void Insert(const CatalogPtr& cat) = 0; + + /// Deletes everything from the TM. + virtual void DeleteAll() = 0; + + /// Commits changes written so far. + virtual void Commit() = 0; + + /// Rolls back changes written so far. + virtual void Rollback() = 0; + }; + + /// Returns the shared writer instance + std::shared_ptr GetWriter(); + + /// Returns statistics about the TM + void GetStats(long& numDocs, long& fileSize); + +private: + TranslationMemory(); + ~TranslationMemory(); + + TranslationMemoryImpl *m_impl; + std::exception_ptr m_error; + static TranslationMemory *ms_instance; +}; + + +#endif // _TRANSMEM_H_ diff --git a/src/unicode_helpers.cpp b/src/unicode_helpers.cpp new file mode 100644 index 0000000..32fd0db --- /dev/null +++ b/src/unicode_helpers.cpp @@ -0,0 +1,139 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "unicode_helpers.h" + +#include "str_helpers.h" + +#include + +namespace bidi +{ + +TextDirection get_base_direction(const wxString& text) +{ + if (text.empty()) + return TextDirection::LTR; + + auto s = str::to_icu_raw(text); + switch (ubidi_getBaseDirection(s.data(), (int)s.length())) + { + case UBIDI_RTL: + return TextDirection::RTL; + case UBIDI_LTR: + case UBIDI_NEUTRAL: + return TextDirection::LTR; + case UBIDI_MIXED: + assert(false); // impossible value here + return TextDirection::LTR; + } + return TextDirection::LTR; // VC++ is stupid +} + + +wxString strip_pointless_control_chars(const wxString& text, TextDirection dir) +{ + if (text.empty()) + return text; + + const wchar_t first = *text.begin(); + const wchar_t last = *text.rbegin(); + + // POP DIRECTIONAL FORMATTING at the end is pointless (can happen on OS X + // when editing RTL text under LTR locale: + if (last == PDF) + { + return strip_pointless_control_chars(text.substr(0, text.size() - 1), dir); + } + + if (dir == TextDirection::LTR) + { + switch (first) + { + case LRE: + case LRO: + case LRI: + case LRM: + return text.substr(1); + default: + return text; + } + } + else if (dir == TextDirection::RTL) + { + switch (first) + { + case RLE: + case RLO: + case RLI: + case RLM: + return text.substr(1); + default: + return text; + } + } + + return text; +} + + +wxString strip_control_chars(const wxString& text) +{ + if (text.empty()) + return text; + + const wchar_t first = *text.begin(); + switch (first) + { + case LRE: + case LRO: + case LRI: + case LRM: + case RLE: + case RLO: + case RLI: + case RLM: + return text.substr(1); + default: + break; + } + return text; +} + + +wxString mark_direction(const wxString& text, TextDirection dir) +{ + wchar_t mark = (dir == TextDirection::LTR) ? LRE : RLE; + auto out = mark + text; +#ifdef BIDI_NEEDS_DIRECTION_ON_EACH_LINE + wchar_t replacement[3] = {0}; + replacement[0] = L'\n'; + replacement[1] = mark; + out.Replace("\n", replacement); +#endif + return out; +} + +} // namespace bidi diff --git a/src/unicode_helpers.h b/src/unicode_helpers.h new file mode 100644 index 0000000..b7c00a6 --- /dev/null +++ b/src/unicode_helpers.h @@ -0,0 +1,111 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_unicode_helpers_h +#define Poedit_unicode_helpers_h + +#include "language.h" + +#include + +#ifdef __WXMSW__ + #define BIDI_NEEDS_DIRECTION_ON_EACH_LINE + #define BIDI_PLATFORM_DOESNT_DETECT_DIRECTION +#endif + +namespace bidi +{ + +/// Bidi control characters +static const wchar_t LRE = L'\u202a'; // LEFT-TO-RIGHT EMBEDDING +static const wchar_t RLE = L'\u202b'; // RIGHT-TO-LEFT EMBEDDING +static const wchar_t PDF = L'\u202c'; // POP DIRECTIONAL FORMATTING +static const wchar_t LRO = L'\u202d'; // LEFT-TO-RIGHT OVERRIDE +static const wchar_t RLO = L'\u202e'; // RIGHT-TO-LEFT OVERRIDE +static const wchar_t LRI = L'\u2066'; // LEFT‑TO‑RIGHT ISOLATE +static const wchar_t RLI = L'\u2067'; // RIGHT‑TO‑LEFT ISOLATE +static const wchar_t FSI = L'\u2068'; // FIRST STRONG ISOLATE +static const wchar_t PDI = L'\u2069'; // POP DIRECTIONAL ISOLATE +static const wchar_t LRM = L'\u200e'; // LEFT-TO-RIGHT MARK +static const wchar_t RLM = L'\u200f'; // RIGHT-TO-LEFT MARK +static const wchar_t ALM = L'\u061c'; // ARABIC LETTER MARK + + +/// Is the character a directional control character? +inline bool is_direction_mark(wchar_t c) +{ + return (c >= LRE && c <= RLO) || + (c >= LRI && c <= PDI) || + (c >= LRM && c <= RLM) || + (c == ALM); +} + +/** + Determine base direction of the text provided according to the + Unicode Bidirectional Algorithm. + */ +TextDirection get_base_direction(const wxString& text); + +/** + Removes leading directional control characters that don't make sense for + text in given language. For example, prefixing RTL text with RLE is redundant; + prefixing with LRE is not. + + This function exists primarily to solve issues with text controls when + editing text in language different from the UI's language. + */ +wxString strip_pointless_control_chars(const wxString& text, TextDirection dir); + +/** + Remove leading directional control characters. + + For use if the text has known direction or can't have control characters. + */ +wxString strip_control_chars(const wxString& text); + +/** + Prepend directional mark to text, for display purposes on platforms that + don't detect text's directionality on their own or when showing text in + different directionality. + */ +wxString mark_direction(const wxString& text, TextDirection dir); + +inline wxString mark_direction(const wxString& text, const Language& lang) + { return mark_direction(text, lang.Direction()); } + +inline wxString mark_direction(const wxString& text) + { return mark_direction(text, get_base_direction(text)); } + +#ifdef BIDI_PLATFORM_DOESNT_DETECT_DIRECTION +inline wxString platform_mark_direction(const wxString& text) + { return mark_direction(text); } +#else +inline wxString platform_mark_direction(const wxString& text) + { return text; } +#endif + +} // namespace bidi + +#endif // Poedit_unicode_helpers_h diff --git a/src/utility.cpp b/src/utility.cpp new file mode 100644 index 0000000..daf54d0 --- /dev/null +++ b/src/utility.cpp @@ -0,0 +1,447 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "utility.h" + +#include + +#include +#include +#include + +#if wxUSE_GUI + #include +#endif + +#ifdef __WXOSX__ + #include +#endif +#ifdef __UNIX__ + #include + #include + #include +#endif + +#include "str_helpers.h" + +wxString EscapeMarkup(const wxString& str) +{ + wxString s(str); + s.Replace("&", "&"); + s.Replace("<", "<"); + s.Replace(">", ">"); + return s; +} + + +wxFileName CommonDirectory(const wxFileName& a, const wxFileName& b) +{ + if (!a.IsOk()) + return wxFileName::DirName(b.GetPath());; + if (!b.IsOk()) + return wxFileName::DirName(a.GetPath());; + + const auto& dirs_a = a.GetDirs(); + const auto& dirs_b = b.GetDirs(); + + wxFileName d = wxFileName::DirName(a.GetPath()); + const auto count = std::min(dirs_a.size(), dirs_b.size()); + size_t i = 0; + for (i = 0; i < count; i++) + { + if (dirs_a[i] != dirs_b[i]) + break; + } + while (d.GetDirCount() != i) + d.RemoveLastDir(); + return d; +} + +wxFileName MakeFileName(const wxString& path) +{ + wxFileName fn; + if (path.empty()) + return fn; + if (wxFileName::DirExists(path) || path.Last() == wxFILE_SEP_PATH) + fn.AssignDir(path); + else + fn.Assign(path); + fn.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); + return fn; +} + +// ---------------------------------------------------------------------- +// TempDirectory +// ---------------------------------------------------------------------- + +bool TempDirectory::ms_keepFiles = false; + +TempDirectory::TempDirectory() : m_counter(0) +{ +#ifdef HAVE_MKDTEMP + wxString path = wxFileName::GetTempDir(); + path += "/poeditXXXXXX"; + wxCharBuffer buf(path.fn_str()); + if ( mkdtemp(buf.data()) == NULL ) + { + wxLogError(_("Cannot create temporary directory.")); + return; + } + m_dir = wxConvFile.cMB2WX(buf.data()); +#else + for ( ;; ) + { + wxString name = wxFileName::CreateTempFileName("poedit"); + if ( name.empty() ) + { + wxLogError(_("Cannot create temporary directory.")); + return; + } + + wxLogNull null; + if ( wxRemoveFile(name) && wxMkdir(name, 0700) ) + { +#ifdef __WXMSW__ + // prevent possible problems with Unicode filenames in launched + // third party tools (e.g. gettext): + m_dir = wxFileName(name).GetShortPath(); +#else + m_dir = name; +#endif + wxLogTrace("poedit.tmp", "created temp dir %s", name.c_str()); + break; + } + // else: try again + } +#endif +} + + +TempDirectory::~TempDirectory() +{ + Clear(); +} + +void TempDirectory::Clear() +{ + if ( m_dir.empty() ) + return; + + if ( ms_keepFiles ) + { + wxLogTrace("poedit.tmp", "keeping temp files in %s", m_dir.c_str()); + return; + } + + wxLogTrace("poedit.tmp", "removing temp dir %s", m_dir.c_str()); + wxFileName::Rmdir(m_dir, wxPATH_RMDIR_RECURSIVE); + + m_dir.clear(); +} + +wxString TempDirectory::CreateFileName(const wxString& suffix) +{ + wxASSERT( !m_dir.empty() ); + wxString s = wxString::Format("%s%c%d%s", + m_dir.c_str(), wxFILE_SEP_PATH, + m_counter++, + suffix.c_str()); + wxLogTrace("poedit.tmp", "new temp file %s", s.c_str()); + return s; +} + + +// ---------------------------------------------------------------------- +// TempOutputFileFor +// ---------------------------------------------------------------------- + +TempOutputFileFor::TempOutputFileFor(const wxString& filename) : m_filenameFinal(filename) +{ + wxString path, name, ext; + wxFileName::SplitPath(filename, &path, &name, &ext); + if (path.empty()) + path = "."; + if (!ext.empty()) + ext = "." + ext; + +#ifdef __WXOSX__ + NSURL *fileUrl = [NSURL fileURLWithPath:str::to_NS(filename)]; + NSURL *tempdirUrl = + [[NSFileManager defaultManager] URLForDirectory:NSItemReplacementDirectory + inDomain:NSUserDomainMask + appropriateForURL:[fileUrl URLByDeletingLastPathComponent] + create:YES + error:nil]; + if (tempdirUrl) + m_tempDir = str::to_wx([tempdirUrl path]); +#endif + + wxString counter; + for (;;) + { +#ifdef __WXOSX__ + if (!m_tempDir.empty()) + { + m_filenameTmp = m_tempDir + wxFILE_SEP_PATH + name + counter + ext; + } + else +#endif // __WXOSX__ + { + // Temp filenames may be ugly, nobody cares. Make them safe for + // Unicode-unfriendly uses on Windows, i.e. 8.3 without non-ASCII + // characters: + auto base = CliSafeFileName(path) + wxFILE_SEP_PATH; +#ifdef __WXMSW__ + // this is OK, ToAscii() replaces non-ASCII with '_': + base += name.ToAscii(); +#else + base += name; +#endif + m_filenameTmp = base + ".temp" + counter + ext; + } + + if (!wxFileExists(m_filenameTmp)) + break; // good! + + counter += wchar_t('a' + rand() % 26); + } +} + +bool TempOutputFileFor::Commit() +{ + return ReplaceFile(m_filenameTmp, m_filenameFinal); +} + +bool TempOutputFileFor::ReplaceFile(const wxString& temp, const wxString& dest) +{ +#ifdef __WXOSX__ + NSURL *tempURL = [NSURL fileURLWithPath:str::to_NS(temp)]; + NSURL *destURL = [NSURL fileURLWithPath:str::to_NS(dest)]; + NSURL *resultingURL = nil; + return [[NSFileManager defaultManager] replaceItemAtURL:destURL + withItemAtURL:tempURL + backupItemName:nil + options:0 + resultingItemURL:&resultingURL + error:nil]; +#else // !__WXOSX__ + #ifdef __UNIX__ + auto destPath = dest.fn_str(); + bool overwrite = false; + struct stat st; + + if ((overwrite = wxFileExists(dest)) == true) + { + if (stat(destPath, &st) != 0) + overwrite = false; + } + #endif + + if (!wxRenameFile(temp, dest, /*overwrite=*/true)) + return false; + + #ifdef __UNIX__ + if (overwrite) + { + chown(destPath, st.st_uid, st.st_gid); + chmod(destPath, st.st_mode); + } + #endif + + return true; +#endif // !__WXOSX__ +} + +TempOutputFileFor::~TempOutputFileFor() +{ +#ifdef __WXOSX__ + if (!m_tempDir.empty()) + wxFileName::Rmdir(m_tempDir, wxPATH_RMDIR_RECURSIVE); +#else + if (wxFileExists(m_filenameTmp)) + wxRemoveFile(m_filenameTmp); +#endif +} + +#ifdef __WXMSW__ +wxString CliSafeFileName(const wxString& fn) +{ + if (fn.IsAscii()) + { + return fn; + } + else if (wxFileExists(fn) || wxDirExists(fn)) + { + return wxFileName(fn).GetShortPath(); + } + else + { + wxString path, name, ext; + wxFileName::SplitPath(fn, &path, &name, &ext); + if (path.empty()) + path = "."; + if (wxDirExists(path)) + { + auto p = wxFileName(path).GetShortPath() + wxFILE_SEP_PATH + name; + if (!ext.empty()) + p += "." + ext; + return p; + } + } + return fn; +} +#endif // __WXMSW__ + + +// ---------------------------------------------------------------------- +// Helpers for persisting windows' state +// ---------------------------------------------------------------------- + +#if wxUSE_GUI + +void SaveWindowState(const wxTopLevelWindow *win, int flags) +{ +#ifdef __WXOSX__ + // Don't remember dimensions of a fullscreen window: + if ([[NSApplication sharedApplication] currentSystemPresentationOptions] & NSApplicationPresentationFullScreen) + return; +#endif + + wxConfigBase *cfg = wxConfig::Get(); + const wxString path = WindowStatePath(win); + + if ( !win->IsIconized() ) + { + if ( !win->IsMaximized() ) + { +#if defined(__WXMSW__) || defined(__WXOSX__) + + if ( flags & WinState_Pos ) + { + const wxPoint pos = win->GetPosition(); + cfg->Write(path + "x", (long)pos.x); + cfg->Write(path + "y", (long)pos.y); + } +#endif // __WXMSW__/__WXOSX__ + if ( flags & WinState_Size ) + { + const wxSize sz = win->GetClientSize(); + cfg->Write(path + "w", (long)sz.x); + cfg->Write(path + "h", (long)sz.y); + } + } + + if ( flags & WinState_Size ) + cfg->Write(path + "maximized", (long)win->IsMaximized()); + } +} + + +void RestoreWindowState(wxTopLevelWindow *win, const wxSize& defaultSize, int flags) +{ + wxConfigBase *cfg = wxConfig::Get(); + const wxString path = WindowStatePath(win); + + if ( flags & WinState_Size ) + { + int width = (int)cfg->Read(path + "w", defaultSize.x); + int height = (int)cfg->Read(path + "h", defaultSize.y); + if ( width != -1 || height != -1 ) + { + // filter out ridiculous sizes: + if (width != -1 && width < 100) + width = defaultSize.x; + if (height != -1 && height < 100) + height = defaultSize.y; + win->SetClientSize(width, height); + } + } + +#if defined(__WXMSW__) || defined(__WXOSX__) + if ( flags & WinState_Pos ) + { + wxPoint pos; + pos.x = (int)cfg->Read(path + "x", -1); + pos.y = (int)cfg->Read(path + "y", -1); + if ( pos.x != -1 || pos.y != -1 ) + { + // NB: if this is the only Poedit frame opened, place it at remembered + // position, but don't do that if there already are other frames, + // because they would overlap and nobody could recognize that there are + // many of them + for (;;) + { + bool occupied = false; + for (auto& w : wxTopLevelWindows) + { + if (w != win && w->GetPosition() == pos) + { + occupied = true; + break; + } + } + if (!occupied) + break; + pos += wxPoint(20,20); + } + + win->Move(pos); + } + } + + // If the window is completely out of all screens (e.g. because + // screens configuration changed), move it to primary screen: + if ( wxDisplay::GetFromWindow(win) == wxNOT_FOUND ) + win->Move(20, 40); +#endif // __WXMSW__/__WXOSX__ + + // If the window is larger than current screen, resize it to fit: + int display = wxDisplay::GetFromWindow(win); + if ( display == wxNOT_FOUND ) + return; + + wxRect screenRect = wxDisplay(display).GetClientArea(); + + wxRect winRect = win->GetRect(); + if ( winRect.GetPosition() == wxDefaultPosition ) + winRect.SetPosition(screenRect.GetPosition()); // not placed yet, fake it + + if ( !screenRect.Contains(winRect) ) + { + // Don't crop the window immediately, because it could become too small + // due to it. Try to move it to the center of the screen first, then crop. + winRect = winRect.CenterIn(screenRect); + winRect.Intersect(screenRect); + win->SetSize(winRect); + } + + // Maximize if it should be + if ( cfg->Read(path + "maximized", long(0)) ) + { + win->Maximize(); + } +} + +#endif // wxUSE_GUI diff --git a/src/utility.h b/src/utility.h new file mode 100644 index 0000000..55f6f0a --- /dev/null +++ b/src/utility.h @@ -0,0 +1,302 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_utility_h +#define Poedit_utility_h + +#ifndef HAVE_MKDTEMP + #ifdef __WXOSX__ + #define HAVE_MKDTEMP + #endif +#endif + +#include +#include +#include + +#if wxUSE_GUI + #include +#endif + + +// ---------------------------------------------------------------------- +// Misc platform differences +// ---------------------------------------------------------------------- + +#ifdef __WXMSW__ + #define MSW_OR_OTHER(msw, other) msw +#else + #define MSW_OR_OTHER(msw, other) other +#endif + +#ifdef __WXOSX__ + #define OSX_OR_OTHER(msw, other) msw +#else + #define OSX_OR_OTHER(msw, other) other +#endif + +#ifdef __WXOSX__ + #define BORDER_WIN(dir, n) Border(dir, 0) + #define BORDER_OSX(dir, n) Border(dir, n) +#else + #define BORDER_WIN(dir, n) Border(dir, n) + #define BORDER_OSX(dir, n) Border(dir, 0) +#endif + + +// ---------------------------------------------------------------------- +// Platform version checks +// ---------------------------------------------------------------------- + +#ifdef __WXMSW__ + +inline bool IsWindows10OrGreater() +{ + int osmajor = 0; + return wxGetOsVersion(&osmajor, nullptr) == wxOS_WINDOWS_NT && osmajor >= 10; +} + +inline bool IsWindowsXP() +{ + int osmajor = 0; + wxGetOsVersion(&osmajor, nullptr); + return osmajor < 6; +} + +inline bool IsWindows7OrGreater() +{ + int verMaj, verMin; + wxGetOsVersion(&verMaj, &verMin); + return verMaj > 6 || (verMaj == 6 && verMin >= 1); +} + +#endif // __WXMSW__ + +inline int DoubleBufferingWindowStyle() +{ +#ifdef __WXMSW__ + return IsWindowsXP() ? 0 : wxFULL_REPAINT_ON_RESIZE; +#else + return 0; +#endif +} + +// ---------------------------------------------------------------------- +// Misc helpers +// ---------------------------------------------------------------------- + +wxString EscapeMarkup(const wxString& str); + +// Encoding and decoding a string with C escape sequences: + +template +inline T EscapeCString(const T& str) +{ + T out; + out.reserve(str.length()); + for (wchar_t c: str) + { + switch (c) + { + case '"' : out += L"\\\""; break; + case '\a': out += L"\\a"; break; + case '\b': out += L"\\b"; break; + case '\f': out += L"\\f"; break; + case '\n': out += L"\\n"; break; + case '\r': out += L"\\r"; break; + case '\t': out += L"\\t"; break; + case '\v': out += L"\\v"; break; + case '\\': out += L"\\\\"; break; + default: + out += c; + break; + } + } + return out; +} + +template +inline T UnescapeCString(const T& str) +{ + T out; + out.reserve(str.length()); + for (auto i = str.begin(); i != str.end(); ++i) + { + wchar_t c = *i; + if (c == '\\') + { + if (++i != str.end()) + { + switch ((wchar_t)*i) + { + case 'a': out += '\a'; break; + case 'b': out += '\b'; break; + case 'f': out += '\f'; break; + case 'n': out += '\n'; break; + case 'r': out += '\r'; break; + case 't': out += '\t'; break; + case 'v': out += '\v'; break; + case '\\': + case '"': + case '\'': + case '?': + out += *i; + break; + default: + out += c; + out += *i; + break; + } + } + else + { + out += c; + break; + } + } + else + { + out += c; + } + } + return out; +} + + +wxFileName MakeFileName(const wxString& path); + +inline wxFileName MakeFileName(wxFileName fn) +{ + fn.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE); + return fn; +} + +wxFileName CommonDirectory(const wxFileName& a, const wxFileName& b); + +template +inline wxFileName CommonDirectory(const T& a) +{ + wxFileName root; + for (auto& i: a) + root = CommonDirectory(root, MakeFileName(i)); + return root; +} + + + +// ---------------------------------------------------------------------- +// TempDirectory +// ---------------------------------------------------------------------- + +// Helper class for managing temporary directories. +// Cleans the directory when destroyed. +class TempDirectory +{ +public: + // creates randomly-named temp directory with "poedit" name prefix + TempDirectory(); + ~TempDirectory(); + + bool IsOk() const { return !m_dir.empty(); } + + // creates new file name in that directory + wxString CreateFileName(const wxString& suffix); + + /// Clears the temp directory (only safe if none of the files are open). Called by dtor. + void Clear(); + + // whether to keep temporary files + static void KeepFiles(bool keep = true) { ms_keepFiles = keep; } + +private: + int m_counter; + wxString m_dir; + + static bool ms_keepFiles; +}; + +/// Holder of temporary file for creating the output. +/// Use Commit() to move the written file to its final location. +/// Destructor deletes the temp file if it still exists. +class TempOutputFileFor +{ +public: + explicit TempOutputFileFor(const wxString& filename); + ~TempOutputFileFor(); + + /// Name of the temporary placeholder + const wxString& FileName() const { return m_filenameTmp; } + + /// Renames temp file to the final one (passed to ctor). + bool Commit(); + + /// Rename file to replace another *while preserving destination + /// file's permissions*. + /// Make this helper publicly accessible for code that can't + /// use TempOutputFileFor directly. + static bool ReplaceFile(const wxString& temp, const wxString& dest); + +#ifdef __WXOSX__ + wxString m_tempDir; +#endif + wxString m_filenameTmp; + wxString m_filenameFinal; +}; + + +#ifdef __WXMSW__ +/// Return filename safe for passing to CLI tools (gettext). +/// Uses 8.3 short names to avoid Unicode and codepage issues. +wxString CliSafeFileName(const wxString& fn); +#else +inline wxString CliSafeFileName(const wxString& fn) { return fn; } +#endif + + +// ---------------------------------------------------------------------- +// Helpers for persisting windows' state +// ---------------------------------------------------------------------- + +#if wxUSE_GUI + +enum WinStateFlags +{ + WinState_Pos = 1, + WinState_Size = 2, + WinState_All = WinState_Pos | WinState_Size +}; + +void SaveWindowState(const wxTopLevelWindow *win, int flags = WinState_All); +void RestoreWindowState(wxTopLevelWindow *win, const wxSize& defaultSize, + int flags = WinState_All); + +inline wxString WindowStatePath(const wxWindow *win) +{ + return wxString::Format("/windows/%s/", win->GetName().c_str()); +} + +#endif // wxUSE_GUI + +#endif // Poedit_utility_h diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..cfec0f2 --- /dev/null +++ b/src/version.h @@ -0,0 +1,32 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2010-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _VERSION_H_ +#define _VERSION_H_ + +#define POEDIT_VERSION "1.8.11" +#define POEDIT_VERSION_WIN 1,8,11 + +#endif // _VERSION_H_ diff --git a/src/welcomescreen.cpp b/src/welcomescreen.cpp new file mode 100644 index 0000000..8d6604f --- /dev/null +++ b/src/welcomescreen.cpp @@ -0,0 +1,294 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "welcomescreen.h" + +#include "crowdin_gui.h" +#include "edapp.h" +#include "edframe.h" +#include "hidpi.h" +#include "str_helpers.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef __WXOSX__ +#include +#endif + +namespace +{ + +#ifdef __WXOSX__ + +class ActionButton : public wxWindow +{ +public: + ActionButton(wxWindow *parent, wxWindowID winid, const wxString& label, const wxString& note) + : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(500, 65)) + { + m_button = new wxButton(this, winid, ""); + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(m_button, wxSizerFlags(1).Expand()); + SetSizer(sizer); + + NSButton *btn = (NSButton*)m_button->GetHandle(); + + NSString *str = str::to_NS(label + "\n" + note); + NSRange topLine = NSMakeRange(0, label.length() + 1); + NSRange bottomLine = NSMakeRange(label.length() + 1, note.length()); + + NSMutableAttributedString *s = [[NSMutableAttributedString alloc] initWithString:str]; + [s addAttribute:NSFontAttributeName + value:[NSFont systemFontOfSize:[NSFont systemFontSize]+1] + range:topLine]; + [s addAttribute:NSFontAttributeName + value:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]] + range:bottomLine]; + [s addAttribute:NSForegroundColorAttributeName + value:[NSColor grayColor] + range:bottomLine]; + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.headIndent = 10.0; + paragraphStyle.firstLineHeadIndent = 10.0; + paragraphStyle.tailIndent = -10.0; + paragraphStyle.lineSpacing = 2.0; + [s addAttribute:NSParagraphStyleAttributeName + value:paragraphStyle + range:NSMakeRange(0, [s length])]; + + [btn setAttributedTitle:s]; + [btn setShowsBorderOnlyWhileMouseInside:YES]; + [btn setBezelStyle:NSSmallSquareBezelStyle]; + [btn setButtonType:NSMomentaryPushInButton]; + + SetBackgroundColour(wxColour("#F2FCE2")); + Bind(wxEVT_PAINT, &ActionButton::OnPaint, this); + } + +private: + void OnPaint(wxPaintEvent&) + { + wxPaintDC dc(this); + wxRect rect(dc.GetSize()); + auto bg = GetBackgroundColour(); + dc.SetBrush(bg); + dc.SetPen(bg.ChangeLightness(90)); + dc.DrawRoundedRectangle(rect, 2); + dc.DrawRectangle(rect.x+1, rect.y+rect.height-2, rect.width-2, 2); + } + + wxButton *m_button; +}; + +#elif defined(__WXGTK__) + +class ActionButton : public wxButton +{ +public: + ActionButton(wxWindow *parent, wxWindowID winid, const wxString& label, const wxString& note) + : wxButton(parent, winid, label, wxDefaultPosition, wxSize(500, 50), wxBU_LEFT) + { + SetLabelMarkup(wxString::Format("%s\n%s", label, note)); + } +}; + +#else + +typedef wxCommandLinkButton ActionButton; + +#endif + + +#ifdef __WXGTK__ + +// Workaround sizing bug of wxStaticText with custom font by using markup instead. +// See http://trac.wxwidgets.org/ticket/14374 +class HeaderStaticText : public wxStaticText +{ +public: + HeaderStaticText(wxWindow *parent, wxWindowID id, const wxString& text) + : wxStaticText(parent, id, "") + { + SetLabelMarkup("" + text + ""); + } + + virtual bool SetFont(const wxFont&) { return true; } +}; + +#else + +typedef wxStaticText HeaderStaticText; + +#endif + +} // anonymous namespace + + +WelcomeScreenBase::WelcomeScreenBase(wxWindow *parent) + : wxPanel(parent, wxID_ANY), + m_clrHeader("#555555"), + m_clrNorm("#444444"), + m_clrSub("#aaaaaa") +{ + SetBackgroundColour(wxColour("#fffcf5")); + +#if defined(__WXOSX__) + auto guiface = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetFaceName(); + m_fntHeader = wxFont(wxFontInfo(30).FaceName(guiface).Light()); + m_fntNorm = wxFont(wxFontInfo(13).FaceName(guiface).Light()); + m_fntSub = wxFont(wxFontInfo(11).FaceName(guiface).Light()); +#elif defined(__WXMSW__) + #define HEADER_FACE "Segoe UI" + m_fntHeader = wxFont(wxFontInfo(20).FaceName("Segoe UI Light").AntiAliased()); + m_fntNorm = wxFont(wxFontInfo(10).FaceName(HEADER_FACE)); + m_fntSub = wxFont(wxFontInfo(9).FaceName(HEADER_FACE)); +#else + #define HEADER_FACE "sans serif" + m_fntHeader = wxFont(wxFontInfo(16).FaceName(HEADER_FACE).Light()); + m_fntNorm = wxFont(wxFontInfo(10).FaceName(HEADER_FACE).Light()); + m_fntSub = wxFont(wxFontInfo(9).FaceName(HEADER_FACE).Light()); +#endif + + // Translate all button events to wxEVT_MENU and send them to the frame. + Bind(wxEVT_BUTTON, [=](wxCommandEvent& e){ + wxCommandEvent event(wxEVT_MENU, e.GetId()); + event.SetEventObject(this); + GetParent()->GetEventHandler()->AddPendingEvent(event); + }); +} + + +WelcomeScreenPanel::WelcomeScreenPanel(wxWindow *parent) + : WelcomeScreenBase(parent) +{ + auto sizer = new wxBoxSizer(wxVERTICAL); + auto uberSizer = new wxBoxSizer(wxHORIZONTAL); + uberSizer->AddStretchSpacer(); + uberSizer->Add(sizer, wxSizerFlags().Center().Border(wxALL, PX(50))); + uberSizer->AddStretchSpacer(); + SetSizer(uberSizer); + + auto hdr = new wxStaticBitmap(this, wxID_ANY, wxArtProvider::GetBitmap("PoeditWelcome")); + sizer->Add(hdr, wxSizerFlags().Center()); + + auto header = new HeaderStaticText(this, wxID_ANY, _("Welcome to Poedit")); + header->SetFont(m_fntHeader); + header->SetForegroundColour(m_clrHeader); + sizer->Add(header, wxSizerFlags().Center().Border(wxTOP, PX(10))); + + auto version = new wxStaticText(this, wxID_ANY, wxString::Format(_("Version %s"), wxGetApp().GetAppVersion())); + version->SetFont(m_fntSub); + version->SetForegroundColour(m_clrSub); + sizer->Add(version, wxSizerFlags().Center()); + + sizer->AddSpacer(PX(20)); + + sizer->Add(new ActionButton( + this, wxID_OPEN, + _("Edit a translation"), + _("Open an existing PO file and edit the translation.")), + wxSizerFlags().PXBorderAll().Expand()); + + sizer->Add(new ActionButton( + this, XRCID("menu_new_from_pot"), + _("Create new translation"), + _("Take an existing PO file or POT template and create a new translation from it.")), + wxSizerFlags().PXBorderAll().Expand()); + +#ifdef HAVE_HTTP_CLIENT + sizer->Add(new ActionButton( + this, XRCID("menu_open_crowdin"), + _("Collaborate on a translation with Crowdin"), + _("Download a file from Crowdin project, translate and sync your changes back.")), + wxSizerFlags().PXBorderAll().Expand()); + sizer->Add(new LearnAboutCrowdinLink(this, _("What is Crowdin?")), wxSizerFlags().Right().Border(wxRIGHT, PX(8))); +#endif // HAVE_HTTP_CLIENT + + sizer->AddSpacer(PX(50)); +} + + + + +EmptyPOScreenPanel::EmptyPOScreenPanel(PoeditFrame *parent) + : WelcomeScreenBase(parent) +{ + auto sizer = new wxBoxSizer(wxVERTICAL); + auto uberSizer = new wxBoxSizer(wxHORIZONTAL); + uberSizer->AddStretchSpacer(); + uberSizer->Add(sizer, wxSizerFlags().Center().Border(wxALL, PX(100))); + uberSizer->AddStretchSpacer(); + SetSizer(uberSizer); + + auto header = new HeaderStaticText(this, wxID_ANY, _(L"There are no translations. That’s unusual.")); + header->SetFont(m_fntHeader); + header->SetForegroundColour(m_clrHeader); + sizer->Add(header, wxSizerFlags().Center().PXBorderAll()); + + auto explain = new wxStaticText(this, wxID_ANY, _("Translatable entries aren't added manually in the Gettext system, but are automatically extracted\nfrom source code. This way, they stay up to date and accurate.\nTranslators typically use PO template files (POTs) prepared for them by the developer.")); + explain->SetFont(m_fntNorm); + explain->SetForegroundColour(m_clrNorm); + sizer->Add(explain, wxSizerFlags()); + + auto learnMore = new wxHyperlinkCtrl(this, wxID_ANY, _("(Learn more about GNU gettext)"), "http://www.gnu.org/software/gettext/manual/html_node/"); + learnMore->SetFont(m_fntNorm); + sizer->Add(learnMore, wxSizerFlags().PXBorder(wxTOP|wxBOTTOM).Align(wxALIGN_RIGHT)); + + auto explain2 = new wxStaticText(this, wxID_ANY, _("The simplest way to fill this catalog is to update it from a POT:")); + explain2->SetFont(m_fntNorm); + explain2->SetForegroundColour(m_clrNorm); + sizer->Add(explain2, wxSizerFlags().PXDoubleBorder(wxTOP)); + + sizer->Add(new ActionButton( + this, XRCID("menu_update_from_pot"), + _("Update from POT"), + _("Take translatable strings from an existing POT template.")), + wxSizerFlags().PXBorderAll().Expand()); + + auto explain3 = new wxStaticText(this, wxID_ANY, _("You can also extract translatable strings directly from the source code:")); + explain3->SetFont(m_fntNorm); + explain3->SetForegroundColour(m_clrNorm); + sizer->Add(explain3, wxSizerFlags().PXDoubleBorder(wxTOP)); + + auto btnSources = new ActionButton( + this, wxID_ANY, + _("Extract from sources"), + _("Configure source code extraction in Properties.")); + sizer->Add(btnSources, wxSizerFlags().PXBorderAll().Expand()); + + btnSources->Bind(wxEVT_BUTTON, [=](wxCommandEvent&){ + parent->EditCatalogPropertiesAndUpdateFromSources(); + }); +} diff --git a/src/welcomescreen.h b/src/welcomescreen.h new file mode 100644 index 0000000..b19db3d --- /dev/null +++ b/src/welcomescreen.h @@ -0,0 +1,58 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2013-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef Poedit_welcomescreen_h +#define Poedit_welcomescreen_h + +#include + +class PoeditFrame; + +class WelcomeScreenBase : public wxPanel +{ +protected: + WelcomeScreenBase(wxWindow *parent); + + wxFont m_fntHeader, m_fntNorm, m_fntSub; + wxColour m_clrHeader, m_clrNorm, m_clrSub; +}; + +/// Content view for initially opened Poedit, without a file +class WelcomeScreenPanel : public WelcomeScreenBase +{ +public: + WelcomeScreenPanel(wxWindow *parent); +}; + + +/// Content view for an empty file (File->New) +class EmptyPOScreenPanel : public WelcomeScreenBase +{ +public: + EmptyPOScreenPanel(PoeditFrame *parent); +}; + + +#endif // Poedit_welcomescreen_h diff --git a/src/wx/main_toolbar.cpp b/src/wx/main_toolbar.cpp new file mode 100644 index 0000000..51432e6 --- /dev/null +++ b/src/wx/main_toolbar.cpp @@ -0,0 +1,109 @@ +/* + * This file is part of Poedit (https://poedit.net) + * + * Copyright (C) 2014-2016 Vaclav Slavik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include "main_toolbar.h" + +#include "utility.h" +#include "unicode_helpers.h" + +#include +#include +#include +#include + +#ifdef __WXMSW__ +#include +#endif + + +class WXMainToolbar : public MainToolbar +{ +public: + WXMainToolbar(wxFrame *parent) + { + m_tb = wxXmlResource::Get()->LoadToolBar(parent, "toolbar"); + m_idFuzzy = XRCID("menu_fuzzy"); + m_idUpdate = XRCID("toolbar_update"); + +#ifdef __WXMSW__ + // De-uglify the toolbar a bit on Windows 10: + if (IsWindows10OrGreater()) + { + const wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive(); + if (theme) + { + wxUxThemeHandle hTheme(m_tb, L"ExplorerMenu::Toolbar"); + m_tb->SetBackgroundColour(wxRGBToColour(theme->GetThemeSysColor(hTheme, COLOR_WINDOW))); + } + } + if (!IsWindowsXP()) + m_tb->SetDoubleBuffered(true); +#endif + } + + bool IsFuzzy() const override + { + return m_tb->GetToolState(m_idFuzzy); + } + + void SetFuzzy(bool on) override + { + m_tb->ToggleTool(m_idFuzzy, on); + } + + void EnableSyncWithCrowdin(bool on) override + { + auto tool = m_tb->FindById(m_idUpdate); + + if (on) + { + tool->SetLabel(_("Sync")); + tool->SetShortHelp(_("Synchronize the translation with Crowdin")); + m_tb->SetToolNormalBitmap(m_idUpdate, wxArtProvider::GetBitmap("poedit-sync", wxART_TOOLBAR)); + } + else + { + tool->SetLabel(_("Update")); + tool->SetShortHelp(_("Update catalog - synchronize it with sources")); + m_tb->SetToolNormalBitmap(m_idUpdate, wxArtProvider::GetBitmap("poedit-update", wxART_TOOLBAR)); + } + } + +private: + wxToolBar *m_tb; + int m_idFuzzy, m_idUpdate; +}; + + +std::unique_ptr MainToolbar::CreateWX(wxFrame *parent) +{ + return std::unique_ptr(new WXMainToolbar(parent)); +} + + +std::unique_ptr MainToolbar::Create(wxFrame *parent) +{ + return CreateWX(parent); +} diff --git a/src/wx_backports/activityindicator.h b/src/wx_backports/activityindicator.h new file mode 100644 index 0000000..35bdfc2 --- /dev/null +++ b/src/wx_backports/activityindicator.h @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/activityindicator.h +// Purpose: wxActivityIndicator declaration. +// Author: Vadim Zeitlin +// Created: 2015-03-05 +// Copyright: (c) 2015 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ACTIVITYINDICATOR_H_ +#define _WX_ACTIVITYINDICATOR_H_ + +#include "wx/defs.h" + +#include "wx/control.h" + +#define wxActivityIndicatorNameStr wxS("activityindicator") + +// ---------------------------------------------------------------------------- +// wxActivityIndicator: small animated indicator of some application activity. +// ---------------------------------------------------------------------------- + +class wxActivityIndicatorBase : public wxControl +{ +public: + // Start or stop the activity animation (it is stopped initially). + virtual void Start() = 0; + virtual void Stop() = 0; + + // Return true if the control is currently showing activity. + virtual bool IsRunning() const = 0; + + // Override some base class virtual methods. + virtual bool AcceptsFocus() const { return false; } + virtual bool HasTransparentBackground() { return true; } + +protected: + // choose the default border for this window + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } +}; + +#ifndef __WXUNIVERSAL__ +#if defined(__WXGTK20__) + #define wxHAS_NATIVE_ACTIVITYINDICATOR + #include "gtk_activityindicator.h" +#elif defined(__WXOSX_COCOA__) + #define wxHAS_NATIVE_ACTIVITYINDICATOR + #include "osx_activityindicator.h" +#endif +#endif // !__WXUNIVERSAL__ + +#ifndef wxHAS_NATIVE_ACTIVITYINDICATOR + #include "generic_activityindicator.h" +#endif + +#endif // _WX_ACTIVITYINDICATOR_H_ diff --git a/src/wx_backports/gtk_activityindicator.h b/src/wx_backports/gtk_activityindicator.h new file mode 100644 index 0000000..addd7f6 --- /dev/null +++ b/src/wx_backports/gtk_activityindicator.h @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/activityindicator.h +// Purpose: Declaration of wxActivityIndicator for wxGTK. +// Author: Vadim Zeitlin +// Created: 2015-03-05 +// Copyright: (c) 2015 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_ACTIVITYINDICATOR_H_ +#define _WX_GTK_ACTIVITYINDICATOR_H_ + +// With GTK+ 3 we can always be certain that this control is available, so use +// the normal base class. With GTK+ 2 however, we may determine during run-time +// that we need to fall back to the generic implementation because the GTK+ +// version is earlier than 2.20, so we need to inherit from the generic class. +#define wxActivityIndicatorGtkBase wxActivityIndicatorBase + +// ---------------------------------------------------------------------------- +// wxActivityIndicator: implementation using GtkSpinner. +// ---------------------------------------------------------------------------- + +class wxActivityIndicator : public wxActivityIndicatorGtkBase +{ +public: + wxActivityIndicator() + { + } + + explicit + wxActivityIndicator(wxWindow* parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxActivityIndicatorNameStr) + { + Create(parent, winid, pos, size, style, name); + } + + bool Create(wxWindow* parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxActivityIndicatorNameStr); + + virtual void Start(); + virtual void Stop(); + virtual bool IsRunning() const; + +protected: + virtual wxSize DoGetBestClientSize() const; + +private: + wxDECLARE_DYNAMIC_CLASS(wxActivityIndicator); + wxDECLARE_NO_COPY_CLASS(wxActivityIndicator); +}; + +#endif // _WX_GTK_ACTIVITYINDICATOR_H_ diff --git a/src/wx_backports/nativewin.h b/src/wx_backports/nativewin.h new file mode 100644 index 0000000..d733d1e --- /dev/null +++ b/src/wx_backports/nativewin.h @@ -0,0 +1,64 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/nativewin.h +// Purpose: classes allowing to wrap a native window handle +// Author: Vadim Zeitlin +// Created: 2008-03-05 +// Copyright: (c) 2008 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_NATIVEWIN_BACKPORT_H_ +#define _WX_NATIVEWIN_BACKPORT_H_ + +// this file contains only differences between nativewin.h in wx 3.0 and 3.1+ + +#include "wx/nativewin.h" + + +#if defined(__WXMSW__) + typedef HWND wxNativeWindowHandle; + #define wxHAS_NATIVE_WINDOW +#elif defined(__WXGTK__) + #include + typedef GtkWidget *wxNativeWindowHandle; + #define wxHAS_NATIVE_WINDOW +#elif defined(__WXOSX_COCOA__) + typedef NSView *wxNativeWindowHandle; + #define wxHAS_NATIVE_WINDOW +#endif + +#ifdef wxHAS_NATIVE_WINDOW + +// ---------------------------------------------------------------------------- +// wxNativeWindow: for using native windows inside wxWidgets windows +// ---------------------------------------------------------------------------- + +class wxNativeWindow : public wxWindow +{ +public: + // Default ctor, Create() must be called later to really create the window. + wxNativeWindow() { } + + // Create a window from an existing native window handle. + // + // Notice that this ctor doesn't take the usual pos and size parameters, + // they're taken from the window handle itself. + // + // Use GetHandle() to check if the creation was successful, it will return + // 0 if the handle was invalid. + wxNativeWindow(wxWindow* parent, wxWindowID winid, wxNativeWindowHandle handle) + { + Create(parent, winid, handle); + } + + // Same as non-default ctor, but with a return code. + bool Create(wxWindow* parent, wxWindowID winid, wxNativeWindowHandle handle); + +private: + wxDECLARE_NO_COPY_CLASS(wxNativeWindow); +}; + +#endif // wxHAS_NATIVE_WINDOW + +#endif // _WX_NATIVEWIN_BACKPORT_H_ + diff --git a/src/wx_backports/wx_gtk_activityindicator.cpp b/src/wx_backports/wx_gtk_activityindicator.cpp new file mode 100644 index 0000000..c483936 --- /dev/null +++ b/src/wx_backports/wx_gtk_activityindicator.cpp @@ -0,0 +1,163 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/activityindicator.cpp +// Purpose: wxActivityIndicator implementation for wxGTK. +// Author: Vadim Zeitlin +// Created: 2015-03-05 +// Copyright: (c) 2015 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if !wxCHECK_VERSION(3,1,0) + +#include "activityindicator.h" + +#include "wx/math.h" + +#include + +// Macro return the specified expression only if GTK+ run time version is less +// than 2.20 and compiling it only if it is less than 3.0 (which is why this +// has to be a macro and not a function). +#define RETURN_IF_NO_GTK_SPINNER(expr) + +// ============================================================================ +// implementation +// ============================================================================ + +wxIMPLEMENT_DYNAMIC_CLASS(wxActivityIndicator, wxControl); + +bool +wxActivityIndicator::Create(wxWindow* parent, + wxWindowID winid, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + RETURN_IF_NO_GTK_SPINNER( + wxActivityIndicatorGeneric::Create(parent, winid, pos, size, style, name) + ) + + if ( !PreCreation(parent, pos, size) || + !CreateBase(parent, winid, pos, size, style, name) ) + return false; + + m_widget = gtk_spinner_new(); + g_object_ref(m_widget); + + m_parent->DoAddChild(this); + + PostCreation(size); + + return true; +} + +void wxActivityIndicator::Start() +{ + RETURN_IF_NO_GTK_SPINNER( wxActivityIndicatorGeneric::Start() ) + + wxCHECK_RET( m_widget, wxS("Must be created first") ); + + gtk_spinner_start(GTK_SPINNER(m_widget)); +} + +void wxActivityIndicator::Stop() +{ + RETURN_IF_NO_GTK_SPINNER( wxActivityIndicatorGeneric::Stop() ) + + wxCHECK_RET( m_widget, wxS("Must be created first") ); + + gtk_spinner_stop(GTK_SPINNER(m_widget)); +} + +bool wxActivityIndicator::IsRunning() const +{ + RETURN_IF_NO_GTK_SPINNER( wxActivityIndicatorGeneric::IsRunning() ) + + if ( !m_widget ) + return false; + + gboolean b; + g_object_get(m_widget, "active", &b, NULL); + + return b != 0; +} + +wxSize wxActivityIndicator::DoGetBestClientSize() const +{ + RETURN_IF_NO_GTK_SPINNER( wxActivityIndicatorGeneric::DoGetBestClientSize() ) + + if ( !m_widget ) + return wxDefaultSize; + + gint w, h; + +#ifdef __WXGTK3__ + // gtk_widget_get_preferred_size() seems to return the size based on the + // current size of the widget and also always returns 0 if it is hidden, + // so ask GtkSpinner for its preferred size directly instead of using it. + GtkWidgetClass* const wc = GTK_WIDGET_GET_CLASS(m_widget); + + // We're not interested in the natural size (and it's the same as minimal + // one anyhow currently), but we still need a non-NULL pointer for it. + gint dummy; + wc->get_preferred_width(m_widget, &w, &dummy); + wc->get_preferred_height(m_widget, &h, &dummy); +#else // GTK+ 2 + // GTK+ 2 doesn't return any valid preferred size for this control, so we + // use the size of something roughly equivalent to it. + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &w, &h); +#endif // GTK+ 3/2 + + // Adjust for the window variant: note that the default size in GTK+ 3 is + // really small (12px until ~3.10, 16px since then), so we use this size as + // the small size and double it for the normal size. + double factor = 0.; + switch ( GetWindowVariant() ) + { + case wxWINDOW_VARIANT_MAX: + wxFAIL_MSG(wxS("Invalid window variant")); + // wxFALLTHROUGH; + + case wxWINDOW_VARIANT_NORMAL: + factor = 2.; + break; + + case wxWINDOW_VARIANT_SMALL: + factor = 1.; + break; + + case wxWINDOW_VARIANT_MINI: + factor = 0.75; + break; + + case wxWINDOW_VARIANT_LARGE: + // GTK+ 3.11+ limits GtkSpinner size to twice its minimal size, so + // the effective factor here is actually just 2, i.e. the same as + // for the normal size, but use something larger just in case GTK+ + // changes its mind again later. + factor = 2.5; + break; + } + + wxASSERT_MSG( !wxIsSameDouble(factor, 0), wxS("Unknown window variant") ); + + return wxSize(wxRound(w*factor), wxRound(h*factor)); +} + +#endif // !wxCHECK_VERSION(3,1,0) diff --git a/src/wx_backports/wx_gtk_nativewin.cpp b/src/wx_backports/wx_gtk_nativewin.cpp new file mode 100644 index 0000000..cbcd101 --- /dev/null +++ b/src/wx_backports/wx_gtk_nativewin.cpp @@ -0,0 +1,74 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/nativewin.cpp +// Purpose: wxNativeWindow implementation +// Author: Vadim Zeitlin +// Created: 2008-03-05 +// Copyright: (c) 2008 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if !wxCHECK_VERSION(3,1,0) + +#include "nativewin.h" + +#include + +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxNativeWindow +// ---------------------------------------------------------------------------- + +bool +wxNativeWindow::Create(wxWindow* parent, + wxWindowID winid, + wxNativeWindowHandle widget) +{ + wxCHECK_MSG( widget, false, wxS("Invalid null GtkWidget") ); + + // Standard wxGTK controls use PreCreation() but we never have any size + // specified at this stage, so don't bother with it. + if ( !CreateBase(parent, winid) ) + return false; + + // Add a reference to the widget to match g_object_unref() in wxWindow dtor + // (and by using the "_sink" version we avoid memory leaks when we're + // passed a newly allocated widget, as is typically the case). + m_widget = widget; + g_object_ref_sink(m_widget); + + parent->DoAddChild(this); + + PostCreation(); + + // Ensure that the best (and minimal) size is set to fully display the + // widget. + GtkRequisition req; +#ifdef __WXGTK3__ + gtk_widget_get_preferred_size(widget, NULL, &req); +#else + gtk_widget_size_request(widget, &req); +#endif + SetInitialSize(wxSize(req.width, req.height)); + + return true; +} + +#endif // !wxCHECK_VERSION(3,1,0) -- 2.30.2

    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\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Бұл хабарламаны жасыру" + +msgid "Don't Show Again" +msgstr "Келесіде көрсетпеу" + +msgid "Don't show again" +msgstr "Қайтадан көрсетпеу" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i жол \"%s\" файлынан дұрыс жүктелмеді." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Жол %d, \"%s\" файлы, зақымдалған (жарамсыз %s дерегі)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Қате өріс: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Каталог файлы қате: msgstr жекеше түрі msgid_plural нәрсесімен бірге " +"қолданылған" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Каталог файлы қате: msgstr көпше түрі msgid_plural нәрсесіз көрсетілген" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Каталогты жүктеген кезде қателер орын алған. Кейбір ақпарат жоқ не " +"зақымдалған болуы мүмкін." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "%s файлын жүктеу мүмкін емес, мүмкін ол зақымдалған." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' файлы тек оқу үшін қолжетерліқ, сақталмайды.\n" +"Оны басқа атымен сақтаңыз." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s файлын сақтау мүмкін емес." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Файлды жақсы пішімдеу кезінде қате кетті (бірақ ол файл сәтті сақталды)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Каталогты оның баптауларындағыдай көрсетілген \"%s\" кодталуында сақтау " +"мүмкін емес.\n" +"\n" +"Оның орнына ол UTF-8 ретінде сақталды, және баптау сәйкесінше өзгертілді." + +msgid "Error saving catalog" +msgstr "Каталогты сақтау қатесі" + +msgid "PO Translation Files" +msgstr "PO аударма файлдары" + +msgid "POT Translation Templates" +msgstr "POT аударма үлгілері" + +msgid "All Translation Files" +msgstr "Барлық аудармалар файлдары" + +msgid "Merging differences..." +msgstr "Өзгерістерді біріктіру..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' - дұрыс POT файлы емес." + +msgid "(Use default language)" +msgstr "(Негізгі тілді қолдану)" + +msgid "Select your preferred language" +msgstr "Өз тіліңізді таңдаңыз" + +msgid "Language selection" +msgstr "Тілді таңдау" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Өзгерістерді іске асыру үшін Poedit-ті қайта іске қосыңыз." + +msgid "Downloading translations is disabled in this project." +msgstr "Бұл жобада аудармаларды жүктеп алу мүмкіндігі сөндірілген." + +msgid "Not authorized, please sign in again." +msgstr "Авторизацияланбаған, қайтадан кіріңіз." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin - бұл аударлмаларды басқарудың желілік платформасы және бірігіп " +"аудару сайманы. Poedit Crowdin қызметінде орналасқан PO файлдарымен ыңғайлы " +"түрде синхрондай алады." + +msgid "Sign In" +msgstr "Жүйеге кіру" + +msgid "Sign in" +msgstr "Кіру" + +msgid "Sign Out" +msgstr "Шығу" + +msgid "Sign out" +msgstr "Шығу" + +msgid "Waiting for authentication…" +msgstr "Аутентификацияны күту…" + +msgid "Updating user information…" +msgstr "Пайдаланушы ақпаратын жаңарту…" + +msgid "Signed in as:" +msgstr "Сіз:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin туралы" + +msgid "Learn more about Crowdin" +msgstr "Crowdin туралы" + +msgid "Sign in to Crowdin" +msgstr "Crowdin-ға кіру" + +msgid "Open Crowdin translation" +msgstr "Аударманы Crowdin-да ашу" + +msgid "Project:" +msgstr "Жоба:" + +msgid "Language:" +msgstr "Тіл:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Сіздің Crowdin тіркелгіңізде бірде-бір жоба тіркелмеген." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Бұл жобада Poedit ішінде аударуға болатын файлдар жоқ." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Бұл файлды тек Crowdin веб интерфейсінде өңдеуге болады." + +msgid "Downloading latest translations…" +msgstr "Соңғы аудармаларды жүктеп алу…" + +msgid "Syncing with Crowdin" +msgstr "Crowdin қызметімен синхрондау" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin қызметімен синхрондау сәтсіз аяқталды." + +msgid "Crowdin error" +msgstr "Crowdin қатесі" + +msgid "Uploading translations…" +msgstr "Аудармаларды жүктеу…" + +msgid "&Copy" +msgstr "&Көшіру" + +msgid "Learn more" +msgstr "Көбірек білу" + +msgid "Learn More" +msgstr "Көбірек білу" + +#, c-format +msgid "Failed command: %s" +msgstr "Сәтсіз команда: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext каталогтарын біріктіру сәтсіз аяқталды." + +msgid "Scanning files..." +msgstr "Файлдарды скандау..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s файлды талдау..." + +msgid "Failed to load extracted catalog." +msgstr "Тарқатылған каталогты жүктеу сәтсіз аяқталды." + +msgid "&Help" +msgstr "&Көмек" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO файлдарын Poedit ішінде түзетуге болмайды." + +msgid "Error opening file" +msgstr "Файлды ашу қатесі" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Орнына сәйкес PO файлын ашып, түзетіңіз. Оны сақтаған кезде, MO файлы да " +"жаңартылады." + +msgid "don't delete temporary files (for debugging)" +msgstr "уақытша файлдарды өшірмеу (жөндеу режимі үшін пайдалы)" + +msgid "handle a poedit:// URI" +msgstr "poedit:// URI-ін талдау" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit үрдісімен байланысу қатесі." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Өңделмеген ережеден тыс жағдай орын алды: %s" + +msgid "Unhandled exception occurred." +msgstr "Өңделмеген ережеден тыс жағдай орын алды." + +msgid "Open catalog" +msgstr "Каталогты ашу" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' файлы жоқ болып тұр." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s туралы" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Нұсқасы %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Қызметтер" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s жасыру" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Қалғанын жасыру" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Барлығын көрсету" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s шығу" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit - қолдануға ыңғайлы аудармалар түзетушісі." + +msgid "Catalogs Manager" +msgstr "Каталогтар басқарушысы" + +msgid "Check for Updates..." +msgstr "Жаңартуларға тексеру..." + +msgid "&Edit" +msgstr "&Түзету" + +msgid "Undo" +msgstr "Болдырмау" + +msgid "Redo" +msgstr "Қайталау" + +msgid "Paste and Match Style" +msgstr "Кірістіру және сәйкестендіру стилі" + +msgid "Delete" +msgstr "Өшіру" + +msgid "Spelling and Grammar" +msgstr "Емлені тексеру және грамматика" + +msgid "Show Spelling and Grammar" +msgstr "Емлені тексеру және грамматиканы көрсету" + +msgid "Check Document Now" +msgstr "Құжатты қазір тексеру" + +msgid "Check Spelling While Typing" +msgstr "Емлені теру кезінде тексеріп отыру" + +msgid "Check Grammar With Spelling" +msgstr "Грамматиканы теру кезінде тексеріп отыру" + +msgid "Correct Spelling Automatically" +msgstr "Емлені автоматты түрде түзетіп отыру" + +msgid "Substitutions" +msgstr "Алмастырулар" + +msgid "Show Substitutions" +msgstr "Алмастыруларды көрсету" + +msgid "Smart Copy/Paste" +msgstr "Ақылды көшіріп алу/кірістіру" + +msgid "Smart Quotes" +msgstr "Ақылды тырнақшалар" + +msgid "Smart Dashes" +msgstr "Ақылды дефистер" + +msgid "Smart Links" +msgstr "Ақылды сілтемелер" + +msgid "Text Replacement" +msgstr "Мәтінді алмастыру" + +msgid "Transformations" +msgstr "Түрлендірулер" + +msgid "Make Upper Case" +msgstr "Бас әріпті қылу" + +msgid "Make Lower Case" +msgstr "Кіші әріпті қылу" + +msgid "Capitalize" +msgstr "Бас әріппен" + +msgid "Speech" +msgstr "Сөйлеу" + +msgid "Start Speaking" +msgstr "Сөйлеуді бастау" + +msgid "Stop Speaking" +msgstr "Сөйлеуді аяқтау" + +msgid "&View" +msgstr "Тү&рі" + +msgid "Enter Full Screen" +msgstr "Толық экранға өту" + +msgid "Window" +msgstr "Терезе" + +msgid "Minimize" +msgstr "Бүктеу" + +msgid "Zoom" +msgstr "Масштаб" + +msgid "Bring All to Front" +msgstr "Барлығын алдына әкелу" + +msgid "PO Translation" +msgstr "PO аудармасы" + +msgid "The file cannot be opened." +msgstr "Файлды ашу мүмкін емес." + +msgid "Invalid file" +msgstr "Жарамсыз файл" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Бұл файл не зақымдалған, не оның пішімін Poedit түсінбейді." + +msgid "&Undo" +msgstr "&Болдырмау" + +msgid "&Redo" +msgstr "Қа&йталау" + +msgid "Cu&t" +msgstr "Қ&иып алу" + +msgid "Cut" +msgstr "Қиып алу" + +msgid "Copy" +msgstr "Көшіру" + +msgid "&Paste" +msgstr "&Кірістіру" + +msgid "Paste" +msgstr "Кірістіру" + +msgid "&Delete" +msgstr "Ө&шіру" + +msgid "Select &All" +msgstr "Б&арлығын таңдау" + +msgid "Select All" +msgstr "Барлығын таңдау" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Жоғары" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Төмен" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Сіз Poedit терезесіне бірден көп файлды тартып апара алмайсыз." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' файлы хабарламалар каталогы емес." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "Ө&ту" + +msgid "Source text:" +msgstr "Бастапқы код мәтіні:" + +msgid "Singular:" +msgstr "Жекеше:" + +msgid "Plural:" +msgstr "Көпше:" + +msgid "Translation:" +msgstr "Аударма:" + +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 файлдары тек үлгілер, олардың ішінде аудармалар жоқ.\n" +"Аударманы жасау үшін, үлгі негізінде жаңа PO файлын жасаңыз." + +msgid "Create New Translation" +msgstr "Жаңа аударманы жасау" + +msgid "Create new translation" +msgstr "Жаңа аударманы жасау" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Емлені тексеру сөндірілген, өйткені %s тілі үшін сөздік орнатылмаған." + +msgid "Install" +msgstr "Орнату" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталог түзетілген. Өзгерістерді сақтау керек пе?" + +msgid "Save changes" +msgstr "Өзгерістерді сақтау" + +msgid "Your changes will be lost if you don't save them." +msgstr "Өзгерістерді сақтамасаңыз, олар жоғалады." + +msgid "Save" +msgstr "Сақтау" + +msgid "Don't save" +msgstr "Сақтамау" + +msgid "Don't Save" +msgstr "Сақтамау" + +msgid "Save as..." +msgstr "Қалайша сақтау..." + +msgid "Compile to..." +msgstr "Қалайша компиляциялау..." + +msgid "Compiled Translation Files" +msgstr "Компиляцияланған аудармалар файлдары" + +msgid "Export as..." +msgstr "Қалайша экспорттау..." + +msgid "HTML Files" +msgstr "HTML файлдары" + +msgid "Open catalog template" +msgstr "Каталог шаблонын ашу" + +msgid "Updating catalog" +msgstr "Каталогты жаңарту" + +msgid "Source code not available." +msgstr "Бастапқы коды қолжетерсіз." + +msgid "Updating failed" +msgstr "Жаңарту сәтсіз аяқталды" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Аудармаларды бастапқы кодтардан жаңарту мүмкін емес, өйткені каталог " +"баптауларында көрсетілген орында бастапқы кодтар табылмады." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Каталогтағы жазбалар қате сияқты." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Каталогты жаңарту сәтсіз аяқталды. Ақпарат үшін 'Көбірек>>' шертіңіз." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Аударма ішінен %d мәселе табылды." + +msgid "Validation results" +msgstr "Тексеру нәтижелері" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Қателері бар жолдар қызыл түспен белгіленді. Қате ақпараты ондай жол " +"таңдалған кезде көрсетіледі." + +msgid "The file was saved safely." +msgstr "Файл сәтті сақталды." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файл сәтті сақталды және MO пішіміне компиляцияланды, бірақ, ол дұрыс " +"жасамайтын сияқты." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Файл қаупсіз сақталды, бірақ оны MO пішіміне түрлендіру мен қолдануға " +"болмайды." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Файл MO пішіміне сәтті компиляцияланды, бірақ, ол дұрыс жасамайтын сияқты." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Файлды MO пішіміне компиляцилау және қолдану мүмкін емес." + +msgid "No problems with the translation found." +msgstr "Аудармалар мәселелері табылмады." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Аударма қолдануға дайын, бірақ, %d жазба әлі аударылмаған." + +msgid "The translation is ready for use." +msgstr "Аударма қолдануға дайын." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit \"%s\" файлындағы жарамсыз құраманы автотүзеткен." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Бұл файлда қайталанатын жазбалар болды, ол PO файлдарында рұқсат етілмейді, " +"және файлды қолдануға жол бермейді. Poedit мәселені шешті, бірақ, дәлсіз " +"етіп белгіленген барлық жазбаларды қарап шығыңыз және керек болса, түзетіңіз." + +msgid "Language of the translation isn't set." +msgstr "Аударма тілі әлі көрсетілмеген." + +msgid "Set Language" +msgstr "Тілді орнату" + +msgid "Set language" +msgstr "Тілді орнату" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Аударма тілі дұрыс көрсетілмеген болса, ұсыныстар қолжетерсіз болады. Көпше " +"түрлер сияқты, басқа да мүмкіндіктерге кері әсер тиюі мүмкін." + +msgid "Language of the translation is the same as source language." +msgstr "Аударма тілі бастапқы тілмен бірдей." + +msgid "Fix Language" +msgstr "Тілді түзету" + +msgid "Fix language" +msgstr "Тілді түзету" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Бұл каталогта көпше түрі бар жолдар бар, бірақ каталогтың Plural-Forms өрісі " +"бапталмаған." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Бұл каталогтағы нәрселердің көпше түрлері каталогтың Plural-Forms өрісіндегі " +"көрсетілген көпше түрінен өзгеше." + +msgid "Required header Plural-Forms is missing." +msgstr "Міндетті Plural-Forms тақырыптамасы жоқ." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Plural-Forms өрісіндегі синтаксис қатесі (\"%s\")." + +msgid "Fix the Header" +msgstr "Тақырыптаманы дұрыстау" + +msgid "Fix the header" +msgstr "Өрісті дұрыстау" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Каталог қолданатын көпше түрлерінің өрнегі %s үшін тән емес." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Тексеру" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "'%s' хабарламалар каталог файлын жүктеу қатемен аяқталды." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Аударылды: %d, барлығы %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Қалды: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d қате" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d жазба" + +msgid " (unsaved)" +msgstr " (сақталмаған)" + +msgid " (modified)" +msgstr " (түрлендірілген)" + +msgid "Go" +msgstr "Өту" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Аудармалар жадысын жаңарту сәтсіз аяқталды: %s" + +msgid "Purge deleted translations" +msgstr "Өшірілген аудармаларды жою" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Осыдан былай қолданылмайтын аудармаларды өшіруді қалайсыз ба?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Жоюды таңдасаңыз, өшірілген деп белгіленген барлық аудармалар өшірілетін " +"болады. Олар болашақта қайта қосылса, оларды қайта аударуға керек болады." + +msgid "Keep" +msgstr "Ұстау" + +msgid "Purge" +msgstr "Тазарту" + +msgid "Fill missing translations from TM" +msgstr "Жоқ аудармаларды АЖ ішінен толтыру" + +msgid "Only fill in exact matches" +msgstr "Тек дәл сәйкестіктерді толтыру" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Үнсіз келісім бойынша, дәлсіз нәтижелер де толтырылады, және дәлсіз етіп " +"белгіленеді. Тек дәл сәйкестіктерді қолдану үшін бұл опцияны іске қосыңыз." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Дәл сәйкестіктерді дәлсіз етіп белгілемеу" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Өзіңіздің АЖ сапасына сенімді болсаңыз ғана іске қосыңыз. Үнсіз келісім " +"бойынша, АЖ ішінен келген барлық сәйкестіктер дәлсіз ретінде белгіленеді " +"және оларды тексеру керек болады." + +msgid "Fill" +msgstr "Толтыру" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d жазба аудармалар жадысынан толтырылды." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Аудармалар толық сәйкес болмауы мүмкін себебінен дәлсіз етіп белгіленді. " +"Олардың дұрыстығын тексеруіңіз керек." + +msgid "No entries could be filled from the translation memory." +msgstr "Бірде-бір жазбаны аудармалар жадысынан толтыру мүмкін емес." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Аудармалар жадысынан бұл файлдың құрамасына ұқсайтын жолдар табылмады. " +"Poedit сіз қолмен аударған файлдардан жеткілікті ақпарат жинағаннан кейін " +"ғана бұл жартылай автоматты аудармалар үшін пайдалы болады." + +msgid "Translating" +msgstr "Аудару" + +msgid "Filling missing translations from TM..." +msgstr "Жетіспейтін аудармаларды АЖ ішінен толтыру..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u жол аударылған" + +msgid "Copy from source text" +msgstr "Бастапқы код мәтінінен көшіру" + +msgid "Copy from Source Text" +msgstr "Бастапқы код мәтінінен көшіру" + +msgid "Clear translation" +msgstr "Аударманы тазарту" + +msgid "Clear Translation" +msgstr "Аударманы тазарту" + +msgid "Edit comment" +msgstr "Түсіндірмені түзету" + +msgid "Edit Comment" +msgstr "Түсіндірмені түзету" + +msgid "References:" +msgstr "Сілтеулер:" + +msgid "Everything" +msgstr "Барлығы" + +#, c-format +msgid "Form %i" +msgstr "Пішім %i" + +msgid "Singular" +msgstr "Жекеше" + +msgid "Zero" +msgstr "Нөл" + +msgid "One" +msgstr "Бір" + +msgid "Two" +msgstr "Екі" + +msgid "Plural" +msgstr "Көпше" + +msgid "Other" +msgstr "Басқа" + +msgid "&Bookmarks" +msgstr "&Бетбелгілер" + +#, c-format +msgid "Set bookmark %i" +msgstr "Бетбелгі № %i орнату" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Бетбелгі № %i бойынша өту" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Бетбелгі № %i орнату" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Бетбелгі № %i бойынша өту" + +msgid "Hide Sidebar" +msgstr "Бүйір панелін жасыру" + +msgid "Show Sidebar" +msgstr "Бүйір панелін көрсету" + +msgid "Hide Status Bar" +msgstr "Қалып-күй жолағын жасыру" + +msgid "Show Status Bar" +msgstr "Қалып-күй жолағын көрсету" + +msgid "Source text" +msgstr "Бастапқы код мәтіні" + +msgid "Translation" +msgstr "Аударма" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Бастапқы мәтін — %s" + +msgid "unknown language" +msgstr "тіл белгісіз" + +#, c-format +msgid "Translation — %s" +msgstr "Аударма — %s" + +msgid "Error:" +msgstr "Қате:" + +msgid "Source file" +msgstr "Бастапқы код файлы" + +msgid "Source file occurrence:" +msgstr "Бастапқы код файлында кездесу:" + +msgid "Open in Editor" +msgstr "Түзеткіште ашу" + +msgid "Open in editor" +msgstr "Түзеткіште ашу" + +msgid "No references for the selected item." +msgstr "Таңдалған нәрселерге сілтемелер жоқ." + +#, c-format +msgid "Error opening file %s!" +msgstr "%s файлын ашу қатемен аяқталды!" + +msgid "Find" +msgstr "Табу" + +msgid "Replace" +msgstr "Алмастыру" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Опциялар" + +msgid "Ignore case" +msgstr "Регистрді елемеу" + +msgid "Wrap around" +msgstr "Соңына жеткенде басына апару" + +msgid "Whole words only" +msgstr "Тек толық сөздер" + +msgid "Find in source texts" +msgstr "Бастапқы мәтіндерден табу" + +msgid "Find in translations" +msgstr "Аудармалардан табу" + +msgid "Find in comments" +msgstr "Түсіндірмелер ішінен іздеу" + +msgid "Close" +msgstr "Жабу" + +msgid "Replace All" +msgstr "Барлығын алмастыру" + +msgid "Replace all" +msgstr "Барлығын алмастыру" + +msgid "< &Previous" +msgstr "< &Алдыңғы" + +msgid "&Next >" +msgstr "&Келесі >" + +msgid "String to find" +msgstr "Ізделінетін жол" + +msgid "Replacement string" +msgstr "Алмастыру жолы" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Бағдарламаны орындау мүмкін емес: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Тіл коды немесе аты (мыс., kk_KZ)" + +msgid "Translation Language" +msgstr "Аударманың тілі" + +msgid "Language of the translation:" +msgstr "Аударманың тілі:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - каталогтарды басқару" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Жалпы" + +msgid "Untrans" +msgstr "Аударылмаған" + +msgid "Fuzzy" +msgstr "Дәлсіз" + +msgid "Bad Tokens" +msgstr "Қате таңбалар" + +msgid "Last modified" +msgstr "Соңғы рет өзгертілген" + +msgid "Select directory" +msgstr "Буманы таңдау" + +msgid "Directories:" +msgstr "Бумалар:" + +msgid "" +msgstr "<атаусыз>" + +msgid "Do you want to delete the project?" +msgstr "Жобаны өшіруді қалайсыз ба?" + +msgid "Confirmation" +msgstr "Растау" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Бұл жобадағы барлық каталогтарды топтап\n" +"жаңартуды шынымен қалайсыз ба?" + +msgid "Information about the translator" +msgstr "Аудармашы жөніндегі ақпарат" + +msgid "Name:" +msgstr "Аты:" + +msgid "Your Name" +msgstr "Сіздің атыңыз" + +msgid "Email:" +msgstr "Пошта:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Сіздің атыңыз мен эл. пошта адресіңіз тек қана GNU gettext файлдарындағы " +"Last-Translator жолы үшін керек." + +msgid "Editing" +msgstr "Өңдеу" + +msgid "Automatically compile MO file when saving" +msgstr "Сақтағанда, MO файлын авто жасау" + +msgid "Show summary after catalog update" +msgstr "Каталогты жаңартудан кейін жалпы ақпаратты көрсету" + +msgid "Check spelling" +msgstr "Емлені тексеру" + +msgid "Always change focus to text input field" +msgstr "Фокусты әрқашан мәтін енгізу жолына орнату" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Жолдарға фокус алуға тыйым салу. Қосулы тұрса, пернетақта навигациясы үшін " +"Ctrl мен жақтар пернелерін қолдануғы тиістісіз, бірақ мәтінді тере аласыз, " +"фокусты алу үшін Tab пернесін басу керек емес." + +msgid "Appearance" +msgstr "Сыртқы түрі" + +msgid "Use custom list font:" +msgstr "Таңдауыңызша тізім қарібін қолдану:" + +msgid "Use custom text fields font:" +msgstr "Таңдауыңызша мәтіндік өрістер қарібін қолдану:" + +msgid "Change UI language" +msgstr "Бағдарлама тілін өзгерту" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(Windows 8 немесе одан жаңасын талап етеді)" + +msgid "General" +msgstr "Жалпы" + +msgid "Use translation memory" +msgstr "Аудармалар жадысын қолдану" + +msgid "Learn From Files..." +msgstr "Файлдардан үйрету..." + +msgid "Learn from files..." +msgstr "Файлдардан үйрету..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Тастау" + +msgid "Consult TM when updating from sources" +msgstr "Бастапқы кодтардан жаңарту кезінде АЖ қолданып отыру" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Іске қосылған болса, Poedit жаңа аудармаларды аудармалар жадысында\n" +"сақталған сіздің бұрыңғы аудармаларды қолданып,\n" +"толтыру талабын жасайды. Егер АЖ құрамасы аз болса,\n" +"пайдасы аздау болады. Неғұрлық көбірек аудармалар жасап, АЖ өлшемі\n" +"өссе, соғұрлым ол пайдалы болады." + +msgid "Stored translations:" +msgstr "Сақталған аудармалар:" + +msgid "Database size on disk:" +msgstr "Дерекқордың дискідегі өлшемі:" + +msgid "Select translation files to import" +msgstr "Импорттау үшін аудармалар файларын таңдаңыз" + +msgid "Translation Memory" +msgstr "Аудармалар жадысы" + +msgid "Importing translations..." +msgstr "Аудармаларды импорттау..." + +msgid "Finalizing..." +msgstr "Аяқтау..." + +msgid "Reset translation memory" +msgstr "Аудармалар жадысын тастау" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Аудармалар жадысын тастауды шынымен қалайсыз ба?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Аудармалар жадысын тастау әрекеті одан барлық сақталған аудармаларды " +"қайтармастай өшіреді. Бұл әрекетті болдырмау мүмкін емес болады." + +msgid "Cancel" +msgstr "Бас тарту" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Бастапқы кодтар экстракторлары бастапқы кодтар файлдарынан аударуға келетін " +"жолдарды табу және аудару үшін шығарып алуға қолданылады." + +msgid "New" +msgstr "Жаңа" + +msgid "Edit" +msgstr "Түзету" + +msgid "Delete extractor" +msgstr "Экстракторды өшіру" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "\"%s\" экстракторын өшіруді шынымен қалайсыз ба?" + +msgid "Extractors" +msgstr "Экстракторлар" + +msgid "Accounts" +msgstr "Тіркелгілер" + +msgid "Automatically check for updates" +msgstr "Жаңартуларға автотексеру" + +msgid "Include beta versions" +msgstr "Бета нұсқаларын қоса" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Бета нұсқаларында соңғы мүмкіндіктер және жақсартулар бар, бірақ, олар " +"тұрақсыздау болуы мүмкін." + +msgid "Updates" +msgstr "Жаңартулар" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Бұл баптаулар PO файлдарының ішкі құрылымына әсер етеді. Сізде арнайы " +"талаптар болса ғана оларды өзгертіңіз, мысалы, нұсқаларды басқару жүйелерді " +"қолдансаңыз." + +msgid "Line endings:" +msgstr "Жол аяқтаулары:" + +msgid "Unix (recommended)" +msgstr "Unix (ұсынылады)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Тасымалдау:" + +msgid "Preserve formatting of existing files" +msgstr "Бар болып тұрған файлдардың пішімдеуін сақтап отыру" + +msgid "Advanced" +msgstr "Кеңейтілген" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s баптаулары" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Бумаларды осында тартып апарыңыз\n" +"\n" +"немесе + батырмасын қолданыңыз" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Бумаларды осында тартып апарыңыз\n" +"\n" +"немесе + батырмасын қолданыңыз" + +msgid "Add Folders..." +msgstr "Бумаларды қосу..." + +msgid "Add folders..." +msgstr "Бумаларды қосу..." + +msgid "Add Files..." +msgstr "Файлдарды қосу..." + +msgid "Add files..." +msgstr "Файлдарды қосу..." + +msgid "Add Wildcard..." +msgstr "Шаблон бойынша қосу..." + +msgid "Add wildcard..." +msgstr "Шаблон бойынша қосу..." + +msgid "Paths" +msgstr "Жолдар" + +msgid "Excluded paths" +msgstr "Елемейтін жолдар" + +msgid "Additional keywords" +msgstr "Қосымша кілттік сөздер" + +msgid "Name of the project the translation is for" +msgstr "Келесі үшін аударма жобасының аталуы" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "мыс., nplurals=1; plural=0;" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (ұсынылады)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Алдымен файлды сақтаңыз. Оған дейін бұл санатты түзету мүмкін емес." + +msgid "Comment:" +msgstr "Түсіндірме:" + +msgid "OK" +msgstr "ОК" + +msgid "C&lear" +msgstr "Та&зарту" + +msgid "Clear the comment" +msgstr "Түсіндірмені өшіру" + +msgid "Create new translations project" +msgstr "Жаңа аудармалар жобасын жасау" + +msgid "Edit the project" +msgstr "Жобаны түзету" + +msgid "Delete the project" +msgstr "Жобаны өшіру" + +msgid "Update all" +msgstr "Барлығын жаңарту" + +msgid "Update all catalogs in the project" +msgstr "Жобадағы барлық каталогтарды жаңарту" + +msgid "Edit project" +msgstr "Жобаны түзету" + +msgid "Project name:" +msgstr "Жоба аты:" + +msgid "Browse" +msgstr "Шолу" + +msgid "Add directory to the list" +msgstr "Тізімге буманы қосу" + +msgid "&New..." +msgstr "&Жаңа..." + +msgid "New from &POT/PO file..." +msgstr "&POT/PO файлынан жаңа..." + +msgid "New From &POT/PO File..." +msgstr "&POT/PO файлынан жаңа..." + +msgid "&Open..." +msgstr "А&шу..." + +msgid "Open Recent" +msgstr "Соңғысын ашу" + +msgid "Open from Crowdin..." +msgstr "Crowdin сайтынан ашу..." + +msgid "Open From Crowdin..." +msgstr "Crowdin сайтынан ашу..." + +msgid "&Close" +msgstr "Жа&бу" + +msgid "&Save" +msgstr "&Сақтау" + +msgid "Save &as..." +msgstr "Қала&йша сақтау..." + +msgid "Save &As..." +msgstr "Қала&йша сақтау..." + +msgid "Compile to MO..." +msgstr "MO файлына компиляциялау..." + +msgid "E&xport as HTML..." +msgstr "HTML ретінде э&кспорттау..." + +msgid "Check for updates..." +msgstr "Жаңартуларды тексеру..." + +msgid "&Preferences..." +msgstr "&Баптаулар..." + +msgid "Catalogs &manager" +msgstr "Каталогтар &басқарушысы" + +msgid "Catalogs &Manager" +msgstr "Каталогтар &басқарушысы" + +msgid "E&xit" +msgstr "&Шығу" + +msgid "Quit" +msgstr "Шығу" + +msgid "Copy from singular" +msgstr "Жекеше түрден көшіріп алу" + +msgid "Copy From Singular" +msgstr "Жекеше түрден көшіріп алу" + +msgid "Translation is &fuzzy" +msgstr "Аударма &дәлсіз" + +msgid "Translation Is &Fuzzy" +msgstr "Аударма &дәлсіз" + +msgid "Edit &comment" +msgstr "Тү&сіндірмені түзету" + +msgid "Edit &Comment" +msgstr "Тү&сіндірмені түзету" + +msgid "Suggestions" +msgstr "Ұсыныстар" + +msgid "&Show references" +msgstr "Ба&йланыстарды көрсету" + +msgid "&Show References" +msgstr "Ба&йланыстарды көрсету" + +msgid "&Find..." +msgstr "І&здеу..." + +msgid "Replace..." +msgstr "Алмастыру..." + +msgid "Find next" +msgstr "Келесі" + +msgid "Find previous" +msgstr "Алдыңғы" + +msgid "Find and Replace..." +msgstr "Табу және алмастыру..." + +msgid "Find Next" +msgstr "Келесі" + +msgid "Find Previous" +msgstr "Алдыңғы" + +msgid "&Preferences" +msgstr "&Баптаулар" + +msgid "Display entry &IDs" +msgstr "&Жолдар нөмірлерін көрсету" + +msgid "Display Entry &IDs" +msgstr "&Жолдар нөмірлерін көрсету" + +msgid "Sort by &file order" +msgstr "&Файлдар реті бойынша сұрыптау" + +msgid "Sort by &File Order" +msgstr "&Файлдар реті бойынша сұрыптау" + +msgid "Sort by &source" +msgstr "Ба&стапқы коды бойынша сұрыптау" + +msgid "Sort by &Source" +msgstr "Ба&стапқы коды бойынша сұрыптау" + +msgid "Sort by &translation" +msgstr "Аудар&ма бойынша сұрыптау" + +msgid "Sort by &Translation" +msgstr "Аудар&ма бойынша сұрыптау" + +msgid "&Group by context" +msgstr "Контекст бойынша &топтау" + +msgid "&Group By Context" +msgstr "Контекст бойынша &топтау" + +msgid "Entries with errors first" +msgstr "Алдымен қателері бар нәрселер" + +msgid "Entries with Errors First" +msgstr "Алдымен қателері бар нәрселер" + +msgid "&Untranslated entries first" +msgstr "Алд&ымен аударылмаған нәрселер " + +msgid "&Untranslated Entries First" +msgstr "Алд&ымен аударылмаған нәрселер " + +msgid "Show sidebar" +msgstr "Бүйір панелді көрсету" + +msgid "Show status bar" +msgstr "Қалып-күй жолағын көрсету" + +msgid "C&atalog" +msgstr "К&аталог" + +msgid "&Update from sources" +msgstr "&Бастапқы кодтардан жаңарту" + +msgid "&Update from Sources" +msgstr "&Бастапқы кодтан жаңарту" + +msgid "Update from &POT file..." +msgstr "POT &файлынан жаңарту..." + +msgid "Update from &POT File..." +msgstr "POT &файлынан жаңарту..." + +msgid "Sync with Crowdin" +msgstr "Crowdin қызметімен синхрондау" + +msgid "Fill missing translations from &TM..." +msgstr "Жетіспейтін аудармаларды &АЖ ішінен толтыру..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Жетіспейтін аудармаларды &АЖ ішінен толтыру..." + +msgid "&Purge deleted translations" +msgstr "&Өшірілген аудармаларды жою" + +msgid "&Purge Deleted Translations" +msgstr "Ө&шірілген аудармаларды жою" + +msgid "&Validate translations" +msgstr "Аудармаларды &тексеру" + +msgid "&Validate Translations" +msgstr "Аудармаларды &тексеру" + +msgid "&Properties..." +msgstr "Қас&иеттері..." + +msgid "&Done and next" +msgstr "Да&йын және келесі" + +msgid "&Done and Next" +msgstr "Да&йын және келесі" + +msgid "&Previous translation" +msgstr "&Алдыңғы аударма" + +msgid "&Previous Translation" +msgstr "&Алдыңғы аударма" + +msgid "&Next translation" +msgstr "&Келесі аударма" + +msgid "&Next Translation" +msgstr "&Келесі аударма" + +msgid "P&revious unfinished" +msgstr "Алдыңғ&ыі аяқталмаған" + +msgid "P&revious Unfinished" +msgstr "Алдыңғ&ыі аяқталмаған" + +msgid "Ne&xt unfinished" +msgstr "Келе&сі аяқталмаған" + +msgid "Ne&xt Unfinished" +msgstr "Келе&сі аяқталмаған" + +msgid "Previous plural form" +msgstr "Алдыңғы көпше түрі" + +msgid "Previous Plural Form" +msgstr "Алдыңғы көпше түрі" + +msgid "Next plural form" +msgstr "Келесі көпше түрі" + +msgid "Next Plural Form" +msgstr "Келесі көпше түрі" + +msgid "&Online help" +msgstr "Же&лідегі көмек" + +msgid "&Online Help" +msgstr "Же&лідегі көмек" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext нұсқаулығы" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext нұсқаулығы" + +msgid "&About Poedit" +msgstr "Poedit т&уралы" + +msgid "&About" +msgstr "&Осы туралы" + +msgid "Extractor setup" +msgstr "Экстрактор баптаулары" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Нүктелі үтірмен ажыратылған кеңейтулер тізімі (мыс. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Шақыру:" + +msgid "Command to extract translations:" +msgstr "Аудармаларды шығарып алу командасы:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Бұл - экстракторды жөнелту үшін қолданылатын команда.\n" +"%o шығыс файл атын, %K кілттік сөздер\n" +"тізімін, %F кіріс файлдар тізімін,\n" +"ал, %C - кодталу жалаушасын (төменде қараңыз) білдіреді." + +msgid "An item in keywords list:" +msgstr "Кілт сөздер тізімінің біреуі:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Бұл жол әр кілт сөзі үшін командалық жолына қосылады.\n" +"%k - кілт сөзімен алмастырылады." + +msgid "An item in input files list:" +msgstr "Кіріс файлдар тізімінің біреуі:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Бұл жол әр кіріс файлы үшін командалық жолына қосылады.\n" +"%f - файл атымен алмастырылады." + +msgid "Source code charset:" +msgstr "Бастапқы код кодталуы:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Бұл жол бастапқы кодталу көрсетсе ғана командалық жолға\n" +"қосылады. %c кодталу мәнімен алмастырылады." + +msgid "Catalog properties" +msgstr "Каталог қасиеттері" + +msgid "Project name and version:" +msgstr "Жоба аты мен нұсқасы:" + +msgid "Plural Forms:" +msgstr "Көпше түрлері:" + +msgid "Use default rules for this language" +msgstr "Бұл тіл үшін үнсіз келісім ережелерін қолдану" + +msgid "Use custom expression" +msgstr "Таңдауыңызша өрнекті қолдану" + +msgid "Learn about plural forms" +msgstr "Көпше түрлері жөнінде білу" + +msgid "Charset:" +msgstr "Кодтауы:" + +msgid "Team:" +msgstr "Топ:" + +msgid "Team's email address:" +msgstr "Топтың эл. пошта адресі:" + +msgid "Translation properties" +msgstr "Аударма қасиеттері" + +msgid "Sources paths" +msgstr "Бастапқы кодтар орналасу жолдары" + +msgid "Extract text from source files in the following directories:" +msgstr "Келесі бумалардағы бастапқы код файлдарынан мәтінді алу:" + +msgid "Base path:" +msgstr "Негізгі жолы:" + +msgid "Sources keywords" +msgstr "Бастапқы код кілт сөздері" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Келесі кілт сөздерді (функциялар аттары) бастапқы\n" +"кодтарда аударылатын жолдарды тану үшін қолдану:" + +msgid "Learn about gettext keywords" +msgstr "Gettext кілттік сөздері туралы көбірек біліңіз" + +msgid "Update summary" +msgstr "Жаңарту ақпараты" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Бұл жолдар бастапқы кодтардан табылды, бірақ каталогта жоқ.\n" +"Poedit оларды каталог ішіне қазір қосады." + +msgid "New strings" +msgstr "Жаңа жолдар" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Бұл жолдар бастапқы кодтарда енді жоқ.\n" +"Poedit оларды каталог ішінен қазір өшіреді." + +msgid "Obsolete strings" +msgstr "Ескірген жолдар" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 жаңа, 0 ескірген)" + +msgid "Open" +msgstr "Ашу" + +msgid "Save catalog" +msgstr "Каталогты сақтау" + +msgid "Validate" +msgstr "Тексеру" + +msgid "Check for errors in the translation" +msgstr "Аударманы қателерге тексеру" + +msgid "Update" +msgstr "Жаңарту" + +msgid "Update catalog - synchronize it with sources" +msgstr "Каталогты жаңарту - бастапқы кодтармен синхронизация" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Тандалған жол аудармасы дәл/дәлсіздігін көрсетуін ауыстырады." + +msgid "Show or hide the sidebar" +msgstr "Бүйір панелін көрсету/жасыру" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Бастапқы кодтың алдыңғы нұсқасы:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Дәлсіз аударма сәйкес келетін ескі бастапқы код мәтіні (жаңарту кезінде " +"өзгергенге дейін)." + +msgid "Notes for translators:" +msgstr "Аудармашылар үшін ескертулер:" + +msgid "Add comment" +msgstr "Пікір қосу" + +msgid "Add Comment" +msgstr "Пікір қосу" + +msgid "Translation suggestions:" +msgstr "Аудармаға ұсынылатын нұсқалар:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Сәйкестік табылмады" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Сәйкестік табылмады" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Бұл жол Poedit-тің аудармалар жадысы ішінен табылды." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Жаңа: %i, ескірген: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Аудармаларды импорттау: %d" + +msgid "Poedit Update" +msgstr "Poedit жаңартуы" + +msgid "Preparing migration..." +msgstr "Миграцияны дайындау..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Миграцияның аяқталу күйі: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit сіздің аудармалар жадысын жаңа пішімге түрлендіруі керек." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Бұл әрекет Poedit іске қосылғанша дейін жасалуы тиіс. Егер сізде сақталған " +"аудармалар саны үлкен болса, ол бірнеше минут уақытты алуы мүмкін, ал, " +"көбінесе, ол тезірек бітеді." + +msgid "Proceed" +msgstr "Жалғастыру" + +msgid "Translation memory migration failed." +msgstr "Аудармалар жадысын миграциялау сәтсіз аяқталды." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Сіздің аудармалар жадысын миграциялау мүмкін емес. Орын алған қате:\n" +"\n" +"%s\n" +"Ол туралы help@poedit.net адресіне жазыңыз, біз көмектесеміз." + +msgid "Cannot create temporary directory." +msgstr "Уақытша буманы жасау мүмкін емес." + +msgid "Welcome to Poedit" +msgstr "Poedit-ке қош келдіңіз" + +msgid "Edit a translation" +msgstr "Аударманы түзету" + +msgid "Open an existing PO file and edit the translation." +msgstr "Бар болып тұрған PO файлын ашып, аударманы түзету." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Бар болып тұрған PO файлын немесе POT үлгісін алып, одан жаңа аударманы " +"жасау." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Аудармаға Crowdin көмегімен бірігіп қатысу" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Файлды Crowdin қызметінен жүктеп алып, оны аудару және өзгерістерді қайта " +"синхрондау." + +msgid "What is Crowdin?" +msgstr "Crowdin деген не?" + +msgid "There are no translations. That’s unusual." +msgstr "Аудармалар жоқ. Бұл әдепкі жағдай емес сияқты." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Аударуға келетін жазбалар Gettext жүйелерінде қолмен қосылмайды, олар " +"бастапқы кодтан\n" +"автоматты түрде шығарылады. Осылайша, жүйе ескірмеген және дәл күйде " +"болады.\n" +"Аудармашылар әдетте өңдіруші дайындаған PO үлгілер файлдарын (POT) қолданады." + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU gettext туралы көбірек білу)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Бұл каталогты толтырудың ең оңай жолы - оны POT файлынан жаңарту:" + +msgid "Update from POT" +msgstr "POT файлынан жаңарту" + +msgid "Take translatable strings from an existing POT template." +msgstr "Аударуға келетін жолдарды тікелей бар болып тұрған POT үлгісінен алу." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Сонымен қатар, сіз аударуға келетін жолдарды тікелей бастапқы кодтардан " +"шығара аласыз:" + +msgid "Extract from sources" +msgstr "Бастапқы кодтардан алу" + +msgid "Configure source code extraction in Properties." +msgstr "Баптаулар ішінен бастапқы кодтан аудармаларды шығарып алуды баптаңыз." + +msgid "Sync" +msgstr "Синхрондау" + +msgid "Synchronize the translation with Crowdin" +msgstr "Аударманы Crowdin қызметімен синхрондау" diff --git a/locales/ko.mo b/locales/ko.mo new file mode 100644 index 0000000000000000000000000000000000000000..fef754ad64e16c3e2042fa9a3cd499905364d851 GIT binary patch literal 47446 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 literal 0 HcmV?d00001 diff --git a/locales/ko.po b/locales/ko.po new file mode 100644 index 0000000..f293f48 --- /dev/null +++ b/locales/ko.po @@ -0,0 +1,1928 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-09-26 13:56-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ko\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "이 알림 메시지 숨김" + +msgid "Don't Show Again" +msgstr "다시 표시하지 않음" + +msgid "Don't show again" +msgstr "다시 표시하지 않음" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "'%2$s' 파일의 %1$i행을 정상적으로 불러오지 못했습니다." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "'%2$s' 파일의 %1$d행이 손상되었습니다 (올바르지 않은 %3$s 데이터)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "잘못된 헤더: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "카탈로그 파일 오류: msgid_plural을 사용한 단수 형식의 msgstr" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "카탈로그 파일 오류: msgid_plural없이 사용한 복수 형식의 msgstr" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"카탈로그를 읽어들일 때 오류가 발생하였습니다. 그 결과 일부는 누락되거나 깨질 " +"수 있습니다." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "'%s' 파일을 읽을 수 없습니다. 파일이 손상된 것 같습니다." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"'%s' 파일이 읽기 전용이므로 저장할 수 없습니다.\n" +"다른 이름으로 저장하십시오." + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s 파일을 저장할 수 없습니다." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"파일을 정상적으로 포매팅하는데 문제가 있습니다(하지만 문제 없이 저장했습니" +"다)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"이 카탈로그는 카탈로그 설정에 있는 '%s' 문자셋으로\n" +"저장할 수 없습니다. 대신 UTF-8로 저장했으며\n" +"이에 따라 설정 값도 수정했습니다." + +msgid "Error saving catalog" +msgstr "카탈로그 저장 오류" + +msgid "PO Translation Files" +msgstr "PO 번역 파일" + +msgid "POT Translation Templates" +msgstr "POT 번역 양식" + +msgid "All Translation Files" +msgstr "모든 번역 파일" + +msgid "Merging differences..." +msgstr "차이점 병합..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s'은(는) 정상적인 POT 파일이 아닙니다." + +msgid "(Use default language)" +msgstr "(기본 언어 사용)" + +msgid "Select your preferred language" +msgstr "선호하는 언어 선택" + +msgid "Language selection" +msgstr "언어 선택" + +msgid "You must restart Poedit for this change to take effect." +msgstr "바뀐 내용을 반영하려면 Poedit를 다시 시작해야 합니다." + +msgid "Downloading translations is disabled in this project." +msgstr "이 프로젝트에서는 번역 다운로드를 사용할 수 없습니다." + +msgid "Not authorized, please sign in again." +msgstr "인증하지 않았습니다. 다시 로그인하십시오." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin은 온라인 번역 관리 플랫폼이며 협력을 기반으로 한 번역 도구입니다. " +"Poedit는 Crowdin에서 PO 파일을 감쪽같이 동기화할 수 있습니다." + +msgid "Sign In" +msgstr "로그인" + +msgid "Sign in" +msgstr "로그인" + +msgid "Sign Out" +msgstr "로그아웃" + +msgid "Sign out" +msgstr "로그아웃" + +msgid "Waiting for authentication…" +msgstr "인증 대기 중..." + +msgid "Updating user information…" +msgstr "사용자 정보 업데이트 중..." + +msgid "Signed in as:" +msgstr "다음 이름으로 로그인 함:" + +msgid "Learn More About Crowdin" +msgstr "Crowdin 더 알아보기" + +msgid "Learn more about Crowdin" +msgstr "Crowdin 더 알아보기" + +msgid "Sign in to Crowdin" +msgstr "Crowdin에 로그인" + +msgid "Open Crowdin translation" +msgstr "Crowdin 번역 열기" + +msgid "Project:" +msgstr "프로젝트:" + +msgid "Language:" +msgstr "언어:" + +msgid "File:" +msgstr "파일:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Crowdin 계정에 번역 프로젝트가 없습니다." + +msgid "This project has no files that can be translated in Poedit." +msgstr "이 프로젝트에는 Poedit로 편집할 수 있는 파일이 없습니다." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "이 파일은 Crowdin 웹 인터페이스에서만 편집할 수 있습니다." + +msgid "Downloading latest translations…" +msgstr "최신 번역 다운로드 중..." + +msgid "Syncing with Crowdin" +msgstr "Crowdin 동기화 중" + +msgid "Syncing with Crowdin failed." +msgstr "Crowdin 동기화에 실패했습니다." + +msgid "Crowdin error" +msgstr "Crowdin 오류" + +msgid "Uploading translations…" +msgstr "번역 업데이트 중..." + +msgid "&Copy" +msgstr "복사(&C)" + +msgid "Learn more" +msgstr "더 알아보기" + +msgid "Learn More" +msgstr "더 알아보기" + +#, c-format +msgid "Failed command: %s" +msgstr "오류 발생: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "gettext 카탈로그 병합에 실패했습니다." + +msgid "Scanning files..." +msgstr "파일 검사 중..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s 파일 분석 중..." + +msgid "Failed to load extracted catalog." +msgstr "추출한 카탈로그를 불러오지 못했습니다." + +msgid "&Help" +msgstr "도움말(&H)" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO 파일은 Poedit에서 직접 편집할 수 없습니다." + +msgid "Error opening file" +msgstr "파일 여는 중 오류" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"대신 관련 PO 파일을 열어 편집 하십시오. 저장할 때, MO 파일도 함께 업데이트합" +"니다." + +msgid "don't delete temporary files (for debugging)" +msgstr "(디버깅용) 임시 파일을 지우지 않음" + +msgid "handle a poedit:// URI" +msgstr "poedit:// URI 처리" + +msgid "Failed to communicate with Poedit process." +msgstr "Poedit 프로세스와의 통신에 실패했습니다." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "처리하지 못한 오류 발생: %s" + +msgid "Unhandled exception occurred." +msgstr "처리하지 못한 오류가 발생했습니다." + +msgid "Open catalog" +msgstr "카탈로그 열기" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "'%s' 파일이 존재하지 않습니다." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s 정보" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "버전 %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "서비스" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "%s 숨기기" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "다른 항목 숨기기" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "모두 표시" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "%s 끝내기" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit는 사용하기 쉬운 번역 편집기입니다." + +msgid "Catalogs Manager" +msgstr "카탈로그 관리자" + +msgid "Check for Updates..." +msgstr "업데이트 확인..." + +msgid "&Edit" +msgstr "편집(&E)" + +msgid "Undo" +msgstr "실행 취소" + +msgid "Redo" +msgstr "재실행" + +msgid "Paste and Match Style" +msgstr "붙여넣기 및 일치 비교 방식" + +msgid "Delete" +msgstr "삭제" + +msgid "Spelling and Grammar" +msgstr "철자 및 문법" + +msgid "Show Spelling and Grammar" +msgstr "철자 및 문법 표시" + +msgid "Check Document Now" +msgstr "지금 문서 검사" + +msgid "Check Spelling While Typing" +msgstr "입력하는 동안 철자 검사" + +msgid "Check Grammar With Spelling" +msgstr "철자 및 문법 검사" + +msgid "Correct Spelling Automatically" +msgstr "자동으로 철자 교정" + +msgid "Substitutions" +msgstr "대체 항목" + +msgid "Show Substitutions" +msgstr "대체 항목 표시" + +msgid "Smart Copy/Paste" +msgstr "똑똑한 복사/붙여넣기" + +msgid "Smart Quotes" +msgstr "똑똑한 인용" + +msgid "Smart Dashes" +msgstr "똑똑한 대시입력" + +msgid "Smart Links" +msgstr "똑똑한 연결" + +msgid "Text Replacement" +msgstr "텍스트 바꾸기" + +msgid "Transformations" +msgstr "변환" + +msgid "Make Upper Case" +msgstr "대문자로 만들기" + +msgid "Make Lower Case" +msgstr "소문자로 만들기" + +msgid "Capitalize" +msgstr "대문자화" + +msgid "Speech" +msgstr "말하기" + +msgid "Start Speaking" +msgstr "말하기 시작" + +msgid "Stop Speaking" +msgstr "말하기 중지" + +msgid "&View" +msgstr "보기(&V)" + +msgid "Enter Full Screen" +msgstr "전체 화면상태 진입" + +msgid "Window" +msgstr "창" + +msgid "Minimize" +msgstr "최소화" + +msgid "Zoom" +msgstr "확대" + +msgid "Bring All to Front" +msgstr "모두 앞으로" + +msgid "PO Translation" +msgstr "PO 번역" + +msgid "The file cannot be opened." +msgstr "파일을 열 수 없습니다." + +msgid "Invalid file" +msgstr "잘못된 파일" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "파일이 깨졌거나 Poedit에서 인식할 수 없는 형식인 것 같습니다." + +msgid "&Undo" +msgstr "실행 취소(&U)" + +msgid "&Redo" +msgstr "다시 실행(&R)" + +msgid "Cu&t" +msgstr "잘라내기(&T)" + +msgid "Cut" +msgstr "잘라내기" + +msgid "Copy" +msgstr "복사" + +msgid "&Paste" +msgstr "붙여넣기(&P)" + +msgid "Paste" +msgstr "붙여넣기" + +msgid "&Delete" +msgstr "삭제(&D)" + +msgid "Select &All" +msgstr "모두 선택(&A)" + +msgid "Select All" +msgstr "모두 선택" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "↑" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "↓" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit 창에는 둘 이상의 파일을 놓을 수 없습니다." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "'%s' 파일은 메시지 카탈로그가 아닙니다." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "파일(&F)" + +msgid "&Go" +msgstr "이동(&G)" + +msgid "Source text:" +msgstr "원본 텍스트:" + +msgid "Singular:" +msgstr "단수:" + +msgid "Plural:" +msgstr "복수 문장:" + +msgid "Translation:" +msgstr "번역:" + +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 파일은 양식일 뿐이며 어떤 번역 내용도 들어있지 않습니다.\n" +"번역하려면, 이 양식을 기반으로 새 PO 파일을 만드십시오." + +msgid "Create New Translation" +msgstr "새 번역 만들기" + +msgid "Create new translation" +msgstr "새 번역 만들기" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "%s 언어 사전을 설치하지 않아, 철자 검사를 비활성화했습니다." + +msgid "Install" +msgstr "설치" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "카탈로그를 수정했습니다. 바뀐 내용을 저장하시겠습니까?" + +msgid "Save changes" +msgstr "바뀐 내용 저장" + +msgid "Your changes will be lost if you don't save them." +msgstr "저장하지 않으면 바뀐 내용을 잃어버립니다." + +msgid "Save" +msgstr "저장" + +msgid "Don't save" +msgstr "저장하지 않음" + +msgid "Don't Save" +msgstr "저장하지 않음" + +msgid "Save as..." +msgstr "다른 이름으로 저장..." + +msgid "Compile to..." +msgstr "다음 형식으로 컴파일..." + +msgid "Compiled Translation Files" +msgstr "컴파일한 번역 파일" + +msgid "Export as..." +msgstr "다른 이름으로 내보내기..." + +msgid "HTML Files" +msgstr "HTML 파일" + +msgid "Open catalog template" +msgstr "카탈로그 양식 열기" + +msgid "Updating catalog" +msgstr "카탈로그 업데이트 중" + +msgid "Source code not available." +msgstr "소스 코드가 존재하지 않습니다." + +msgid "Updating failed" +msgstr "업데이트 실패" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"카탈로그 속성에 지정한 위치에 코드가 없기 떄문에 소스코드로부터 번역을 업데이" +"트할 수 없습니다." + +msgid "Entries in the catalog are probably incorrect." +msgstr "카탈로그의 항목이 잘못된 것 같습니다." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"카탈로그 업데이트에 실패했습니다. 자세히 보려면 '자세히 >>'를 누르십시오." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "번역에서 문제 %d개를 찾았습니다." + +msgid "Validation results" +msgstr "검증 결과" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"오류가 있는 항목은 항목에서 빨간색으로 표시했습니다. 자세한 오류 내용은 여러" +"분이 각각의 항목을 선택했을 때 나타납니다." + +msgid "The file was saved safely." +msgstr "파일을 안전하게 저장했습니다." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"파일을 안전하게 저장하고 MO 형식으로 컴파일했지만, 올바르게 동작하지 않을 수" +"도 있습니다." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "파일을 안전하게 저장했지만 MO 형식으로 컴파일하고 사용할 수 없습니다." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "MO 형식으로 파일을 컴파일했지만, 올바르게 동작하지 않을 수도 있습니다." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "MO 파일로 컴파일하고 사용할 수 없습니다." + +msgid "No problems with the translation found." +msgstr "번역에 문제가 없습니다." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "번역을 사용할 준비가 되지만, 아직 항목 %d개를 번역하지 않았습니다." + +msgid "The translation is ready for use." +msgstr "번역을 사용할 준비가 되었습니다." + +msgid "Context:" +msgstr "문맥:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit가 “%s” 파일의 잘못된 내용을 자동으로 수정했습니다." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"PO 파일에서 허용하지 않는 중복 항목이 있으며, 이 때문에 파일을 사용하지 못합" +"니다. Poedit에서 이 문제를 해결했지만 모호함 상태로 나타난 일부 항목의 번역" +"을 검토해야 하며, 필요한 경우 해당 항목을 수정해야합니다." + +msgid "Language of the translation isn't set." +msgstr "번역 언어를 설정하지 않았습니다." + +msgid "Set Language" +msgstr "언어 설정" + +msgid "Set language" +msgstr "언어 설정" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"번역 언어를 올바르게 선택하지 않으면 제안 기능을 사용할 수 없습니다. 서수와 " +"같은 기능도 마찬가지로 영향을 받을 수 있습니다." + +msgid "Language of the translation is the same as source language." +msgstr "번역 언어가 원본 언어와 같습니다." + +msgid "Fix Language" +msgstr "언어 수정" + +msgid "Fix language" +msgstr "언어 수정" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"이 카탈로그는 서수 형식을 지닌 항목을 가지고 있지만, Plural-Forms 헤더를 설정" +"하지 않았습니다." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"이 카탈로그의 항목은 카탈로그의 Plural-Forms 헤더에 명시한 서수 형식 카운트" +"와 다른 값을 가지고 있습니다. " + +msgid "Required header Plural-Forms is missing." +msgstr "필요한 Plural-Forms 헤더가 빠졌습니다." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Plural-Forms 헤더(\"%s\")에서 문법 오류." + +msgid "Fix the Header" +msgstr "헤더 수정" + +msgid "Fix the header" +msgstr "헤더 수정" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"카탈로그에서 사용하는 %s 언어에 대한 서수 형식 표현식은 일반적 표현식이 아닙" +"니다." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "검토" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "카탈로그 파일을 불러오는 중 오류: '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "번역함: 문장 %2$d개 중 %1$d개 (%3$d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "남음: %d개" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "오류 %d개" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "항목 %d개" + +msgid " (unsaved)" +msgstr " (저장하지 않음)" + +msgid " (modified)" +msgstr " (수정함)" + +msgid "Go" +msgstr "이동" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "번역 기억장소 업데이트에 실패했습니다: %s" + +msgid "Purge deleted translations" +msgstr "삭제한 번역을 완전히 제거" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "더 이상 사용하지 않는 모든 번역을 제거하시겠습니까?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"계속 제거를 진행하면 삭제한 것으로 표시한 모든 번역을 완전히 제거합니다. 다음" +"에 다시 추가하면 다시 번역해야 합니다." + +msgid "Keep" +msgstr "그대로 유지" + +msgid "Purge" +msgstr "제거" + +msgid "Fill missing translations from TM" +msgstr "번역 기억장소의 내용으로 빠진 번역 채우기" + +msgid "Only fill in exact matches" +msgstr "정확하게 일치하는 내용만 채우기" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"기본적으로, 있는 그대로의 부정확한 결과로 채우며 모호함으로 표시합니다. 정확" +"하게 일치하는 내용만 들어있을 경우 이 옵션을 표시하십시오." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "정확히 일치하는 내용에 모호함으로 표시하지 않음" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"번역 기억장소 품질을 신뢰하는 경우에만 활성화하십시오. 기본적으로 번역 기억장" +"소의 모든 일치 사항은 모호함으로 표시하며 검토해야합니다." + +msgid "Fill" +msgstr "채우기" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "번역 기억장소에서 항목 %d개를 채웠습니다." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"정확하지 않은 상태로 보여 번역을 모호함으로 표시했습니다. 번역이 올바른지 검" +"토하시는게 좋습니다." + +msgid "No entries could be filled from the translation memory." +msgstr "번역 기억장소에서 채울 수 있는 항목이 없습니다." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"이 파일의 내용과 유사한 어떤 문자열도 번역 기억장소에 없습니다. Poedit에서 직" +"접 번역한 파일에서 충분이 내용을 가져온 후에야 반자동 번역의 결과가 제대로 나" +"옵니다." + +msgid "Translating" +msgstr "번역 중" + +msgid "Filling missing translations from TM..." +msgstr "번역 기억장소에서 빠진 번역 채우는 중..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "문자열 %u개 번역함" + +msgid "Copy from source text" +msgstr "소스 텍스트에서 복사" + +msgid "Copy from Source Text" +msgstr "소스 텍스트에서 복사" + +msgid "Clear translation" +msgstr "번역 지우기" + +msgid "Clear Translation" +msgstr "번역 지우기" + +msgid "Edit comment" +msgstr "주석 편집" + +msgid "Edit Comment" +msgstr "주석 편집" + +msgid "References:" +msgstr "참조:" + +msgid "Everything" +msgstr "모두" + +#, c-format +msgid "Form %i" +msgstr "%i번 양식" + +msgid "Singular" +msgstr "단수" + +msgid "Zero" +msgstr "영" + +msgid "One" +msgstr "하나" + +msgid "Two" +msgstr "둘" + +msgid "Plural" +msgstr "복수" + +msgid "Other" +msgstr "기타" + +msgid "&Bookmarks" +msgstr "책갈피(&B)" + +#, c-format +msgid "Set bookmark %i" +msgstr "책갈피 %i번 설정" + +#, c-format +msgid "Go to bookmark %i" +msgstr "책갈피 %i번으로 이동" + +#, c-format +msgid "Set Bookmark %i" +msgstr "책갈피 %i번 설정" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "책갈피 %i번으로 이동" + +msgid "Hide Sidebar" +msgstr "가장자리 표시줄 숨김" + +msgid "Show Sidebar" +msgstr "가장자리 표시줄 표시" + +msgid "Hide Status Bar" +msgstr "상태 표시줄 숨기기" + +msgid "Show Status Bar" +msgstr "상태 표시줄 표시" + +msgid "Source text" +msgstr "원본 텍스트" + +msgid "Translation" +msgstr "번역" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "원본 텍스트 — %s" + +msgid "unknown language" +msgstr "알 수 없는 언어" + +#, c-format +msgid "Translation — %s" +msgstr "번역 — %s" + +msgid "Error:" +msgstr "오류:" + +msgid "Source file" +msgstr "원본 파일" + +msgid "Source file occurrence:" +msgstr "원본 파일 발견 횟수:" + +msgid "Open in Editor" +msgstr "편집기에서 열기" + +msgid "Open in editor" +msgstr "편집기에서 열기" + +msgid "No references for the selected item." +msgstr "선택한 항목의 참조가 없습니다" + +#, c-format +msgid "Error opening file %s!" +msgstr "%s 파일을 여는 중 오류!" + +msgid "Find" +msgstr "찾기" + +msgid "Replace" +msgstr "바꾸기" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "옵션" + +msgid "Ignore case" +msgstr "대소문자 무시" + +msgid "Wrap around" +msgstr "자동 줄 바꾸기" + +msgid "Whole words only" +msgstr "단어 단위로 검색" + +msgid "Find in source texts" +msgstr "원본 문자열에서 찾기" + +msgid "Find in translations" +msgstr "번역에서 찾기" + +msgid "Find in comments" +msgstr "주석에서 찾기" + +msgid "Close" +msgstr "닫기" + +msgid "Replace All" +msgstr "모두 바꾸기" + +msgid "Replace all" +msgstr "모두 바꾸기" + +msgid "< &Previous" +msgstr "< 이전(&P)" + +msgid "&Next >" +msgstr "다음(&N) >" + +msgid "String to find" +msgstr "찾을 문자열" + +msgid "Replacement string" +msgstr "바꿀 문자열" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "프로그램을 실행할 수 없습니다: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "언어 코드 또는 이름(예 en_GB)" + +msgid "Translation Language" +msgstr "번역 언어" + +msgid "Language of the translation:" +msgstr "번역 언어:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - 카탈로그 관리자" + +msgid "Catalog" +msgstr "카탈로그" + +msgid "Total" +msgstr "전체" + +msgid "Untrans" +msgstr "미번역" + +msgid "Fuzzy" +msgstr "모호함" + +msgid "Bad Tokens" +msgstr "잘못된 토큰" + +msgid "Last modified" +msgstr "최종 편집" + +msgid "Select directory" +msgstr "디렉터리 선택" + +msgid "Directories:" +msgstr "디렉터리:" + +msgid "" +msgstr "<이름 없음>" + +msgid "Do you want to delete the project?" +msgstr "프로젝트를 삭제하시겠습니까?" + +msgid "Confirmation" +msgstr "확인" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"정말로 이 프로젝트의 모든 카탈로그를\n" +"통째로 업데이트 하시겠습니까?" + +msgid "Information about the translator" +msgstr "번역자 정보" + +msgid "Name:" +msgstr "이름:" + +msgid "Your Name" +msgstr "이름" + +msgid "Email:" +msgstr "전자메일:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"이름 및 전자메일 주소는 GNU gettext 파일의 Last-Translator 헤더를 설정할 때" +"만 사용합니다." + +msgid "Editing" +msgstr "편집 중" + +msgid "Automatically compile MO file when saving" +msgstr "저장할 때 MO 파일 자동 컴파일" + +msgid "Show summary after catalog update" +msgstr "카탈로그 업데이트 후 요약 정보 보기" + +msgid "Check spelling" +msgstr "철자 검사" + +msgid "Always change focus to text input field" +msgstr "항상 포커스를 입력 창으로 옮김" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"문자열 목록에 포커스가 가지 않게 합니다. 이 상태에서는 키보드 상의 Ctrl-화살" +"표를 눌러 이동한 후, 문자열을 편집해야 합니다. 탭키를 누를 필요는 없습니다." + +msgid "Appearance" +msgstr "모양새" + +msgid "Use custom list font:" +msgstr "개별 목록 글꼴 사용:" + +msgid "Use custom text fields font:" +msgstr "개별 텍스트 입력 창 글꼴 사용:" + +msgid "Change UI language" +msgstr "사용자 언어 바꾸기" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(윈도우 8 이상 필요)" + +msgid "General" +msgstr "일반" + +msgid "Use translation memory" +msgstr "번역 기억장소 사용" + +msgid "Learn From Files..." +msgstr "파일로 학습..." + +msgid "Learn from files..." +msgstr "파일로 학습..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "초기화" + +msgid "Consult TM when updating from sources" +msgstr "소스에서 업데이트 할 때 번역 기억장소 참고" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"활성화하면, Poedit에서는 번역 기억장소에 저장한 이전 번역을\n" +"활용하여 새 항목을 채웁니다. 번역 기억장소가 거의 비어있으면,\n" +"효과가 없습니다. 번역을 더 많이 편집하면 번역 기억장소의\n" +"규모가 늘어나며, 더욱 바람직한 결과를 가져옵니다." + +msgid "Stored translations:" +msgstr "저장한 번역:" + +msgid "Database size on disk:" +msgstr "디스크의 데이터베이스 크기:" + +msgid "Select translation files to import" +msgstr "가져올 번역 파일을 선택하십시오" + +msgid "Translation Memory" +msgstr "번역 기억장소(TM)" + +msgid "Importing translations..." +msgstr "번역 가져오는 중..." + +msgid "Finalizing..." +msgstr "끝내는 중..." + +msgid "Reset translation memory" +msgstr "번역 기억장소 초기화" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "정말로 번역 기억장소를 초기화하시겠습니까?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"번역 기억장소를 초기화하면 저장한 모든 번역을 완전시 삭제합니다. 이 동작은 취" +"소할 수 없습니다." + +msgid "Cancel" +msgstr "취소" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"소스 코드 추출 프로그램은 소스 코드 파일에서 번역할 수 있는 문자열을 찾고, 추" +"출하여 번역할 수 있게 합니다." + +msgid "New" +msgstr "새 파일" + +msgid "Edit" +msgstr "편집" + +msgid "Delete extractor" +msgstr "추출 프로그램 삭제" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "정말로 “%s” 추출 프로그램을 삭제하시겠습니까?" + +msgid "Extractors" +msgstr "추출 프로그램" + +msgid "Accounts" +msgstr "계정" + +msgid "Automatically check for updates" +msgstr "업데이트 자동 확인" + +msgid "Include beta versions" +msgstr "베타 버전 포함" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"베타 버전에는 최신 새 기능과 개선 사항이 있지만, 덜 안정적일 수 있습니다." + +msgid "Updates" +msgstr "업데이트" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"이 설정은 PO 파일 내부 형식에 영향을 줍니다. 버전 관리 등의 특별한 필요성이 " +"있다면 값을 설정하십시오." + +msgid "Line endings:" +msgstr "행 마무리 문자:" + +msgid "Unix (recommended)" +msgstr "유닉스(추천)" + +msgid "Windows" +msgstr "윈도우" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "줄 바꿈 위치:" + +msgid "Preserve formatting of existing files" +msgstr "기존 파일 서식 유지" + +msgid "Advanced" +msgstr "고급" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s 기본 설정" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"여기에 폴더를 끌어 놓거나,\n" +"\n" +"+ 단추를 사용하십시오." + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"여기에 폴더를 끌어 놓거나,\n" +"\n" +"+ 단추를 사용하십시오." + +msgid "Add Folders..." +msgstr "폴더 추가..." + +msgid "Add folders..." +msgstr "폴더 추가..." + +msgid "Add Files..." +msgstr "파일 추가..." + +msgid "Add files..." +msgstr "파일 추가..." + +msgid "Add Wildcard..." +msgstr "와일드카드 추가..." + +msgid "Add wildcard..." +msgstr "와일드카드 추가..." + +msgid "Paths" +msgstr "경로" + +msgid "Excluded paths" +msgstr "제외 경로" + +msgid "Additional keywords" +msgstr "추가 키워드" + +msgid "Name of the project the translation is for" +msgstr "번역 프로젝트 이름" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "예: nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8(추천)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "먼저 파일을 저장하십시오. 그 전까지는 이 섹션을 편집할 수 없습니다." + +msgid "Comment:" +msgstr "주석:" + +msgid "OK" +msgstr "확인" + +msgid "C&lear" +msgstr "지우기(&L)" + +msgid "Clear the comment" +msgstr "주석 지우기" + +msgid "Create new translations project" +msgstr "새 번역 프로젝트 만들기" + +msgid "Edit the project" +msgstr "프로젝트 편집" + +msgid "Delete the project" +msgstr "프로젝트 삭제" + +msgid "Update all" +msgstr "전체 업데이트" + +msgid "Update all catalogs in the project" +msgstr "프로젝트의 모든 카탈로그를 업데이트 합니다" + +msgid "Edit project" +msgstr "프로젝트 편집" + +msgid "Project name:" +msgstr "프로젝트 이름:" + +msgid "Browse" +msgstr "찾아보기" + +msgid "Add directory to the list" +msgstr "디렉터리를 목록에 추가" + +msgid "&New..." +msgstr "새로 만들기(&N)..." + +msgid "New from &POT/PO file..." +msgstr "POT/PO 파일로 새로 만들기(&P)..." + +msgid "New From &POT/PO File..." +msgstr "POT/PO 파일로 새로 만들기(&P)..." + +msgid "&Open..." +msgstr "열기(&O)..." + +msgid "Open Recent" +msgstr "최근 파일 열기" + +msgid "Open from Crowdin..." +msgstr "Crowdin에서 열기..." + +msgid "Open From Crowdin..." +msgstr "클라우드인에서 열기..." + +msgid "&Close" +msgstr "닫기(&C)" + +msgid "&Save" +msgstr "저장(&S)" + +msgid "Save &as..." +msgstr "다른 이름으로 저장(&A)..." + +msgid "Save &As..." +msgstr "다른 이름으로 저장(&A)..." + +msgid "Compile to MO..." +msgstr "MO로 컴파일..." + +msgid "E&xport as HTML..." +msgstr "HTML로 내보내기(&X)..." + +msgid "Check for updates..." +msgstr "업데이트 확인..." + +msgid "&Preferences..." +msgstr "기본 설정(&P)..." + +msgid "Catalogs &manager" +msgstr "카탈로그 관리자(&M)" + +msgid "Catalogs &Manager" +msgstr "카탈로그 관리자(&M)" + +msgid "E&xit" +msgstr "나가기(&X)" + +msgid "Quit" +msgstr "종료" + +msgid "Copy from singular" +msgstr "단수 표현 복사" + +msgid "Copy From Singular" +msgstr "단수 복사" + +msgid "Translation is &fuzzy" +msgstr "모호한 번역(&F)" + +msgid "Translation Is &Fuzzy" +msgstr "모호한 번역(&F)" + +msgid "Edit &comment" +msgstr "주석 편집(&C)" + +msgid "Edit &Comment" +msgstr "주석 편집(&C)" + +msgid "Suggestions" +msgstr "제안" + +msgid "&Show references" +msgstr "참조 보기(&S)" + +msgid "&Show References" +msgstr "참조 보기(&S)" + +msgid "&Find..." +msgstr "찾기(&F)..." + +msgid "Replace..." +msgstr "바꾸기..." + +msgid "Find next" +msgstr "다음 찾기" + +msgid "Find previous" +msgstr "이전 찾기" + +msgid "Find and Replace..." +msgstr "찾아 바꾸기" + +msgid "Find Next" +msgstr "다음 찾기" + +msgid "Find Previous" +msgstr "이전 찾기" + +msgid "&Preferences" +msgstr "기본 설정(&P)" + +msgid "Display entry &IDs" +msgstr "항목 ID 표시(&I)" + +msgid "Display Entry &IDs" +msgstr "항목 ID 표시(&I)" + +msgid "Sort by &file order" +msgstr "파일순 정렬(&F)" + +msgid "Sort by &File Order" +msgstr "파일순 정렬(&F)" + +msgid "Sort by &source" +msgstr "원본순 정렬(&S)" + +msgid "Sort by &Source" +msgstr "원본순 정렬(&S)" + +msgid "Sort by &translation" +msgstr "번역순 정렬(&T)" + +msgid "Sort by &Translation" +msgstr "번역순 정렬(&T)" + +msgid "&Group by context" +msgstr "상태별 모음(&G)" + +msgid "&Group By Context" +msgstr "상태별 모음(&G)" + +msgid "Entries with errors first" +msgstr "오류 항목을 우선 표시" + +msgid "Entries with Errors First" +msgstr "오류 항목을 우선 표시" + +msgid "&Untranslated entries first" +msgstr "번역하지 않은 항목 먼저(&U)" + +msgid "&Untranslated Entries First" +msgstr "번역하지 않은 항목 먼저(&U)" + +msgid "Show sidebar" +msgstr "가장자리 표시줄 표시" + +msgid "Show status bar" +msgstr "상태 표시줄 표시" + +msgid "C&atalog" +msgstr "카탈로그(&A)" + +msgid "&Update from sources" +msgstr "원본으로 업데이트(&U)" + +msgid "&Update from Sources" +msgstr "원본으로 업데이트(&U)" + +msgid "Update from &POT file..." +msgstr "POT 파일로 업데이트(&P)..." + +msgid "Update from &POT File..." +msgstr "POT 파일로 업데이트(&P)..." + +msgid "Sync with Crowdin" +msgstr "Crowdin 동기화" + +msgid "Fill missing translations from &TM..." +msgstr "번역 기억장소의 내용으로 빠진 번역 채우기(&T)..." + +msgid "Fill Missing Translations from &TM..." +msgstr "번역 기억장소의 내용으로 빠진 번역 채우기(&T)..." + +msgid "&Purge deleted translations" +msgstr "삭제한 번역을 완전히 제거(&P)" + +msgid "&Purge Deleted Translations" +msgstr "삭제한 번역을 완전히 제거(&P)" + +msgid "&Validate translations" +msgstr "번역 검증(&V)" + +msgid "&Validate Translations" +msgstr "번역 검증(&V)" + +msgid "&Properties..." +msgstr "속성(&P)..." + +msgid "&Done and next" +msgstr "끝내고 다음으로 진행(&D)" + +msgid "&Done and Next" +msgstr "끝내고 다음으로 진행(&D)" + +msgid "&Previous translation" +msgstr "이전 번역(&P)" + +msgid "&Previous Translation" +msgstr "이전 번역(&P)" + +msgid "&Next translation" +msgstr "다음 번역(&N)" + +msgid "&Next Translation" +msgstr "다음 번역(&N)" + +msgid "P&revious unfinished" +msgstr "이전 미완료(&R)" + +msgid "P&revious Unfinished" +msgstr "이전 미완료(&R)" + +msgid "Ne&xt unfinished" +msgstr "다음 미완료(&X)" + +msgid "Ne&xt Unfinished" +msgstr "다음 미완료(&X)" + +msgid "Previous plural form" +msgstr "이전 복수 형태" + +msgid "Previous Plural Form" +msgstr "이전 복수 형태" + +msgid "Next plural form" +msgstr "다음 복수 형태" + +msgid "Next Plural Form" +msgstr "다음 복수 형태" + +msgid "&Online help" +msgstr "온라인 도움말(&O)" + +msgid "&Online Help" +msgstr "온라인 도움말(&O)" + +msgid "&GNU gettext manual" +msgstr "GNU gettext 설명서(&G)" + +msgid "&GNU gettext Manual" +msgstr "GNU gettext 설명서(&G)" + +msgid "&About Poedit" +msgstr "Poedit 정보(&A)" + +msgid "&About" +msgstr "정보(&A)" + +msgid "Extractor setup" +msgstr "추출 프로그램 설정" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "세미콜론(;)으로 구분한 확장자 목록(예 *.cpp;*.h):" + +msgid "Invocation:" +msgstr "실행:" + +msgid "Command to extract translations:" +msgstr "번역을 추출할 명령:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"이 명령은 추출 프로그램을 실행할 때 사용합니다.\n" +"%o는 출력 파일의 이름이며, %K는 키워드 목록,\n" +"%F는 입력 파일 목록,%C는 문자세트 플래그\n" +"입니다(하단 참조)." + +msgid "An item in keywords list:" +msgstr "키워드 목록의 항목:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"각 키워드에 대해 명령줄당 한번씩 붙습니다.\n" +"%k는 키워드를 의미합니다." + +msgid "An item in input files list:" +msgstr "입력 파일 목록의 항목:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"각 입력 파일에 대해 명령줄당 한번씩 붙습니다.\n" +"%f는 파일 이름을 의미합니다." + +msgid "Source code charset:" +msgstr "소스 코드 문자세트:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"소스 코드 문자세트를 지정했을 경우에만 명령줄에\n" +"붙습니다. %c는 문자세트 값을 의미합니다." + +msgid "Catalog properties" +msgstr "카탈로그 속성" + +msgid "Project name and version:" +msgstr "프로젝트 이름과 버전:" + +msgid "Plural Forms:" +msgstr "복수 표시 형식:" + +msgid "Use default rules for this language" +msgstr "이 언어에 기본 규칙 사용" + +msgid "Use custom expression" +msgstr "사용자 정의 표현식 사용" + +msgid "Learn about plural forms" +msgstr "서수 형식 알아보기" + +msgid "Charset:" +msgstr "문자세트:" + +msgid "Team:" +msgstr "팀:" + +msgid "Team's email address:" +msgstr "팀 전자메일:" + +msgid "Translation properties" +msgstr "번역 속성" + +msgid "Sources paths" +msgstr "소스 경로" + +msgid "Extract text from source files in the following directories:" +msgstr "다음 디렉터리의 소스 파일에서 텍스트를 추출합니다:" + +msgid "Base path:" +msgstr "기본 경로:" + +msgid "Sources keywords" +msgstr "소스 키워드" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"다음 키워드(함수 이름)를 사용하여 소스 파일에서\n" +"번역할 문자열을 인식합니다:" + +msgid "Learn about gettext keywords" +msgstr "gettext 키워드에 대해 알아보기" + +msgid "Update summary" +msgstr "업데이트 요약" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"이 문자열은 소스에 있지만, 카탈로그에 없습니다.\n" +"Poedit가 아래 문자열을 카탈로그에 추가합니다." + +msgid "New strings" +msgstr "새 문자열" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"이 문자열은 더 이상 소스에 없습니다.\n" +"따라서, 카탈로그에서 제거합니다." + +msgid "Obsolete strings" +msgstr "제거한 문자열" + +msgid "(0 new, 0 obsolete)" +msgstr "(신규 개수 0, 제거 개수 0)" + +msgid "Open" +msgstr "열기" + +msgid "Save catalog" +msgstr "카탈로그 저장" + +msgid "Validate" +msgstr "검증하기" + +msgid "Check for errors in the translation" +msgstr "번역 오류 검사" + +msgid "Update" +msgstr "업데이트" + +msgid "Update catalog - synchronize it with sources" +msgstr "카탈로그 업데이트 - 소스와 동기화합니다" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "선택한 문자열의 모호한 번역 상태 여부를 전환합니다" + +msgid "Show or hide the sidebar" +msgstr "가장자리 표시줄을 표시하거나 숨깁니다" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "이전 원본 텍스트:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"모호한 번역이 채워진 각각의 오래된 원본 텍스트(업데이트하여 바뀌기 전)입니다." + +msgid "Notes for translators:" +msgstr "번역 참고:" + +msgid "Add comment" +msgstr "주석 추가" + +msgid "Add Comment" +msgstr "주석 추가" + +msgid "Translation suggestions:" +msgstr "번역 제안:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "일치하는 결과가 없습니다" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "일치하는 결과 없음" + +msgid "This string was found in Poedit’s translation memory." +msgstr "이 문자열은 Poedit의 번역 기억장소에 있습니다." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(새 문자열: %i개, 오래된 문자열: %i개)" + +#, c-format +msgid "Importing translations: %d" +msgstr "번역 가져오는 중: %d개" + +msgid "Poedit Update" +msgstr "Poedit 업데이트" + +msgid "Preparing migration..." +msgstr "가져오기 준비 중..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "가져오기 도중 %d 상태로 빠져나왔습니다" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit에서 번역 기억장소를 새 형식으로 변환해야 합니다." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Poedit를 시작할 수 있으려면 끝내야 합니다. 저장한 번역이 많을 경우 좀 더 많" +"은 시간이 걸리겠지만, 보통은 꽤 빨리 끝납니다." + +msgid "Proceed" +msgstr "진행" + +msgid "Translation memory migration failed." +msgstr "번역 기억장소 가져오기에 실패했습니다." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"번역 기억장소 데이터를 가져올 수 없습니다. 오류는 다음과 같습니다:\n" +"\n" +"%s\n" +"문제점을 수정할 수 있도록 help@poedit.net으로 전자메일을 보내주십시오." + +msgid "Cannot create temporary directory." +msgstr "임시 디렉터리를 만들 수 없습니다." + +msgid "Welcome to Poedit" +msgstr "Poedit에 잘 오셨습니다" + +msgid "Edit a translation" +msgstr "번역 편집" + +msgid "Open an existing PO file and edit the translation." +msgstr "기존 PO 파일을 열어 번역을 편집합니다." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "기존 PO 파일 또는 POT 양식을 취하여 새 번역을 만듭니다." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Crowdin에서 번역 협업 진행" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Crowdin 프로젝트에서 파일을 다운로드하여 번역하고, 동기화하여 파일을 되돌려 " +"보냅니다." + +msgid "What is Crowdin?" +msgstr "Crowdin이 무엇인가요?" + +msgid "There are no translations. That’s unusual." +msgstr "번역이 없습니다. 흔한 일이 아닙니다." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Gettext 시스템에서 번역할 수 있는 항목을 직접 추가하지 않았지만, 소스 코드에" +"서 자동으로 추출했습니다.\n" +"이 방법을 통해, 정확한 최신의 상태를 유지합니다.\n" +"번역자는 보통 개발자가 번역자에게 준비해주는 PO 양식 파일(POT)을 사용합니다." + +msgid "(Learn more about GNU gettext)" +msgstr "(GNU gettext에 대해 더 알아보세요)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "POT로 업데이트 하는 것이 카탈로그를 채우는 가장 쉬운 방법입니다:" + +msgid "Update from POT" +msgstr "POT 파일로 업데이트" + +msgid "Take translatable strings from an existing POT template." +msgstr "기존 POT 양식에서 번역할 수 있는 문자열을 취합니다." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "소스 코드에서 직접 번역 가능 문자열을 가져올 수도 있습니다:" + +msgid "Extract from sources" +msgstr "소스에서 가져오기" + +msgid "Configure source code extraction in Properties." +msgstr "속성에서 소스 코드 추출을 설정합니다." + +msgid "Sync" +msgstr "동기화" + +msgid "Synchronize the translation with Crowdin" +msgstr "Crowdin과 번역 동기화" diff --git a/locales/lt.mo b/locales/lt.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8ee95916f03630738c2307d0c0fceaeb42ee557 GIT binary patch literal 35330 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\n" +"Language-Team: Lithuanian\n" +"Language: lt_LT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: lt\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Slėpti šį perspėjimą" + +msgid "Don't Show Again" +msgstr "Daugiau Neberodyti" + +msgid "Don't show again" +msgstr "Daugiau neberodyti" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Netinkama antraštė: „%s“" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Sugadintas katalogo failas: vienaskaitos forma msgstr turi msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Sugadintas katalogo failas: daugiskaitos forma msgstr neturi msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Skaitant katalogą įvyko klaidų. Kai kurių įrašų gali trūkti arba jie gali " +"būti sugadinti." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nepavyko įkrauti failo %s, jis greičiausiai sugadintas." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Failas „%s“ skirtas tik skaitymui ir negali būti išsaugotas.\n" +"Išsaugokite duomenis kitu vardu." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nepavyko įrašyti failo %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Kilo bėdų gražiai formatuojant failą (bet jis buvo išsaugotas)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Išsaugoti katalogo „%s“ koduote nepavyko.\n" +"\n" +"Jis buvo išsaugotas UTF-8 koduote ir nustatymas atitinkamai pakeistas." + +msgid "Error saving catalog" +msgstr "Klaida išsaugant katalogą" + +msgid "PO Translation Files" +msgstr "PO vertimų failai" + +msgid "POT Translation Templates" +msgstr "POT vertimų šablonai" + +msgid "All Translation Files" +msgstr "Visi vertimų failai" + +msgid "Merging differences..." +msgstr "Suliejami skirtumai..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "„%s“ nėra tinkamas POT failas." + +msgid "(Use default language)" +msgstr "(Naudoti numatytąją kalbą)" + +msgid "Select your preferred language" +msgstr "Pasirinkite pagrindinę kalbą" + +msgid "Language selection" +msgstr "Kalbos pasirinkimas" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Šis pakeitimas įsigalios paleidus Poedit iš naujo." + +msgid "Downloading translations is disabled in this project." +msgstr "Vertimų atsiuntimas šiame projekte yra išjungtas." + +msgid "Not authorized, please sign in again." +msgstr "Nesankcionuota, prašome prisijungti dar kartą." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin yra internetinė lokalizavimo valdymo platforma ir vertimų " +"bendradarbiavimo priemonė. Poedit gali sklandžiai sinchronizuoti PO failus " +"esančius Crowdin sistemoje." + +msgid "Sign In" +msgstr "Prisijungti" + +msgid "Sign in" +msgstr "Prisijungti" + +msgid "Sign Out" +msgstr "Atsijungti" + +msgid "Sign out" +msgstr "Atsijungti" + +msgid "Waiting for authentication…" +msgstr "Laukiama tapatybės nustatymo…" + +msgid "Updating user information…" +msgstr "Atnaujinama naudotojo informacija…" + +msgid "Signed in as:" +msgstr "Prisijungęs kaip:" + +msgid "Learn More About Crowdin" +msgstr "Sužinokite daugiau apie Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Sužinokite daugiau apie Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Prisijungti prie Crowdin" + +msgid "Open Crowdin translation" +msgstr "Atidaryti Crowdin vertimą" + +msgid "Project:" +msgstr "Projektas:" + +msgid "Language:" +msgstr "Kalba:" + +msgid "File:" +msgstr "Failas:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Jūsų Crowdin paskyroje nėra vertimo projektų." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Šį failą galima redaguoti tik per Crowdin tinklalapį." + +msgid "Downloading latest translations…" +msgstr "Atsiunčiami naujausi vertimai…" + +msgid "Syncing with Crowdin" +msgstr "Sinchronizuojama su Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Sinchronizacija su Crowdin nepavyko." + +msgid "Crowdin error" +msgstr "Crowdin klaida" + +msgid "Uploading translations…" +msgstr "Įkeliami vertimai..." + +msgid "&Copy" +msgstr "&Kopijuoti" + +msgid "Learn more" +msgstr "Sužinokite daugiau" + +msgid "Learn More" +msgstr "Sužinoti daugiau" + +#, c-format +msgid "Failed command: %s" +msgstr "Nepavykus komanda: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Sujungti gettext katalogų nepavyko." + +msgid "Scanning files..." +msgstr "Peržiūrimi failai..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Apdorojami %s failai..." + +msgid "Failed to load extracted catalog." +msgstr "Nepavyko įkelti ištrauktų katalogų" + +msgid "&Help" +msgstr "Ž&inynas" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "Klaida atidarant failą" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "netrinti laikinų failų (derinimui)" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "Atverti katalogą" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Failo „%s“ nėra." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Apie %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versija %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit yra lengvai naudojamas vertimų redaktorius." + +msgid "Catalogs Manager" +msgstr "Katalogų tvarkyklė" + +msgid "Check for Updates..." +msgstr "Tikrinti, ar yra atnaujinimų..." + +msgid "&Edit" +msgstr "&Keisti" + +msgid "Undo" +msgstr "Atšaukti" + +msgid "Redo" +msgstr "Pakartoti" + +msgid "Paste and Match Style" +msgstr "Įklijuoti ir sutapatinti stilių" + +msgid "Delete" +msgstr "Pašalinti" + +msgid "Spelling and Grammar" +msgstr "Rašyba ir gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Rodyti rašybą ir gramatiką" + +msgid "Check Document Now" +msgstr "Patikrinti dokumentą" + +msgid "Check Spelling While Typing" +msgstr "Tikrinti rašybą rašant" + +msgid "Check Grammar With Spelling" +msgstr "Tikrinti rašybą ir gramatiką" + +msgid "Correct Spelling Automatically" +msgstr "Rašybą tikrinti automatiškai" + +msgid "Substitutions" +msgstr "Pakeitimai" + +msgid "Show Substitutions" +msgstr "Rodyti pakeitimus" + +msgid "Smart Copy/Paste" +msgstr "Išmanus kopijavimas/įdėjimas" + +msgid "Smart Quotes" +msgstr "Išmanios kabutės" + +msgid "Smart Dashes" +msgstr "Išmanūs brūkšniai" + +msgid "Smart Links" +msgstr "Išmonios nuorodos" + +msgid "Text Replacement" +msgstr "Teksto pakeitimas" + +msgid "Transformations" +msgstr "Transformacijos" + +msgid "Make Upper Case" +msgstr "Didžiosiomis raidėmis" + +msgid "Make Lower Case" +msgstr "Mažosiomis raidėmis" + +msgid "Capitalize" +msgstr "Iš didžiosios raidės" + +msgid "Speech" +msgstr "Kalba" + +msgid "Start Speaking" +msgstr "Pradėti kalbėti" + +msgid "Stop Speaking" +msgstr "Nebeskaityti" + +msgid "&View" +msgstr "&Rodymas" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "Langas" + +msgid "Minimize" +msgstr "Minimizuoti" + +msgid "Zoom" +msgstr "Priartinti" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "PO vertimas" + +msgid "The file cannot be opened." +msgstr "Atverti failo nepavyko." + +msgid "Invalid file" +msgstr "Netinkamas failas" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Failas gali būti sugadintas arba tokio formato kurio Poedit nesupranta." + +msgid "&Undo" +msgstr "&Atšaukti" + +msgid "&Redo" +msgstr "&Pakartoti" + +msgid "Cu&t" +msgstr "Iškirp%ti" + +msgid "Cut" +msgstr "Iškirpti" + +msgid "Copy" +msgstr "Kopijuoti" + +msgid "&Paste" +msgstr "Į&dėti" + +msgid "Paste" +msgstr "Įklijuoti" + +msgid "&Delete" +msgstr "&Ištrinti" + +msgid "Select &All" +msgstr "Žymėti &viską" + +msgid "Select All" +msgstr "Pažymėti viską" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Aukštyn" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Žemyn" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Negalite užvilkti daugiau nei vieno failo ant Poedit lango." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "„%s“ nėra pranešimų katalogo failas." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Failas" + +msgid "&Go" +msgstr "&Eiti" + +msgid "Source text:" +msgstr "Išeities tekstas:" + +msgid "Singular:" +msgstr "Vienaskaita:" + +msgid "Plural:" +msgstr "Daugiskaita:" + +msgid "Translation:" +msgstr "Vertimas:" + +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 "" + +msgid "Create New Translation" +msgstr "Sukurti naują vertimą" + +msgid "Create new translation" +msgstr "Sukurti naują vertimą" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "Įdiegti" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogas pakeistas. Ar norite išsaugoti pakeitimus?" + +msgid "Save changes" +msgstr "Įrašyti pakeitimus" + +msgid "Your changes will be lost if you don't save them." +msgstr "Jūsų pakeitimai bus prarasti, jei jų neišsaugosite." + +msgid "Save" +msgstr "Įrašyti" + +msgid "Don't save" +msgstr "Neįrašyti" + +msgid "Don't Save" +msgstr "Neįrašyti" + +msgid "Save as..." +msgstr "Įrašyti kaip..." + +msgid "Compile to..." +msgstr "Kompiliuoti į..." + +msgid "Compiled Translation Files" +msgstr "Kompiliuoti vertimo failai" + +msgid "Export as..." +msgstr "Eksportuoti kaip..." + +msgid "HTML Files" +msgstr "HTML failai" + +msgid "Open catalog template" +msgstr "Atverti katalogo šabloną" + +msgid "Updating catalog" +msgstr "Atnaujinamas katalogas" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "Atnaujinti nepavyko" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Katalogo įrašai gali būti neteisingi." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Katalogo atnaujinimas nepavyko. Norėdami sužinoti daugiau, spauskite " +"„Daugiau >>“." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Rasta %d vertimo problema." +msgstr[1] "Rastos %d vertimo problemos." +msgstr[2] "Rasta %d vertimo problemų." + +msgid "Validation results" +msgstr "Patvirtinimo rezultatai" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Įrašai su klaidom pažymėti raudonai. Išsamiau apie klaidą bus parodyta " +"pasirinkus įrašą." + +msgid "The file was saved safely." +msgstr "Failas saugiai išsaugotas." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Failas saugiai išsaugotas ir sukompiliuotas į MO formatą, bet jis " +"greičiausiai neveiks." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Failas saugiai išsaugotas, bet jo neįmanoma sukompiliuoti į MO formatą ir " +"naudoti." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Failas buvo sukompiliuotas į MO formatą, tačiau jis tikriausiai neveiks " +"teisingai." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Failas negali būti sukompiliuotas į MO formatą naudojimui." + +msgid "No problems with the translation found." +msgstr "Nerasta vertimo klaidų." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Vertimas paruoštas naudoti, bet %d įrašas dar neišverstas." +msgstr[1] "Vertimas paruoštas naudoti, bet %d įrašai dar neišversti." +msgstr[2] "Vertimas paruoštas naudoti, bet %d įrašų dar neišversta." + +msgid "The translation is ready for use." +msgstr "Vertimas paruoštas naudoti." + +msgid "Context:" +msgstr "Kontekstas:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "Nenustatyta vertimo kalba." + +msgid "Set Language" +msgstr "Nustatyti kalbą" + +msgid "Set language" +msgstr "Nurodyti kalbą" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "Pataisyti kalbą" + +msgid "Fix language" +msgstr "Pataisyti kalbą" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Šio katalogo įrašai su daugiskaitos formomis, bet neturi sukonfigūruotos " +"Plurar-Forms antraštės." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Šio katalogo daugiskaitos formų įrašų ne tiek kiek jų nurodo „Plurar-Forms“ " +"antraštė" + +msgid "Required header Plural-Forms is missing." +msgstr "Trūksta būtinos „Plurar-Forms“ antraštės." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Sintaksės klaida Plural-Forms antraštėje („%s“)." + +msgid "Fix the Header" +msgstr "Pataisyti antraštę" + +msgid "Fix the header" +msgstr "Pataisyti antraštę" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Daugiskaitos forma naudojama kataloge nėra įprasta %s kalbai." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Peržiūrėti" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Klaida įkeliant katalogo failą „%s“." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "Liko: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d klaida" +msgstr[1] "%d klaida" +msgstr[2] "%d klaidos" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid " (unsaved)" +msgstr " (neišsaugota)" + +msgid " (modified)" +msgstr " (pakeista)" + +msgid "Go" +msgstr "Pirmyn" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Nepavyko atnaujinti vertimų atminties: %s" + +msgid "Purge deleted translations" +msgstr "Pašalinti ištrintus vertimus" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Ar tikrai norite pašalinti visus nebenaudojamus vertimus?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Jei tęsite šalinimą, visi vertimai pažymėti kaip „pašalinta“ bus visam " +"laikui pašalinti. Jei ateityje jie bus pridėti turėsite juos versti iš naujo." + +msgid "Keep" +msgstr "Palikti" + +msgid "Purge" +msgstr "Išvalyti" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "Užpildyti" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d įrašas buvo užpildytas vertimu iš vertimų atminties." +msgstr[1] "%d įrašai buvo užpildyti vertimu iš vertimų atminties." +msgstr[2] "%d įrašų buvo užpildyta vertimu iš vertimų atminties." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Vertimai buvo pažymėti kaip neaiškūs, nes jie gali būti netikslūs. " +"Turėtumėte juos peržiūrėti." + +msgid "No entries could be filled from the translation memory." +msgstr "Nebuvo ką pridėti iš vertimų atminties." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Vertimo atmintyje nėra eilučių panašių į šio failo turinį. Tai efektyvu tik " +"pusiau automatiniam vertimui, kai Poedit pakankamai išmoks iš jūsų rankiniu " +"būdu verstų failų." + +msgid "Translating" +msgstr "Verčiama" + +msgid "Filling missing translations from TM..." +msgstr "Vertimais užpildomi trūkstami vertimai iš vertimų atminties..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Copy from source text" +msgstr "Kopijuoti iš išeities tekstų" + +msgid "Copy from Source Text" +msgstr "Kopijuoti iš išeities tekstų" + +msgid "Clear translation" +msgstr "Valyti vertimą" + +msgid "Clear Translation" +msgstr "Valyti vertimą" + +msgid "Edit comment" +msgstr "Keisti komentarą" + +msgid "Edit Comment" +msgstr "Keisti komentarą" + +msgid "References:" +msgstr "Nuorodos:" + +msgid "Everything" +msgstr "Viskas" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Vienaskaita" + +msgid "Zero" +msgstr "Nulis" + +msgid "One" +msgstr "Vienas" + +msgid "Two" +msgstr "Du" + +msgid "Plural" +msgstr "Daugiskaita" + +msgid "Other" +msgstr "Kita" + +msgid "&Bookmarks" +msgstr "Ž&ymelės" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "Išeities tekstas" + +msgid "Translation" +msgstr "Vertimas" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Šaltinio tekstas — %s" + +msgid "unknown language" +msgstr "nežinoma kalba" + +#, c-format +msgid "Translation — %s" +msgstr "Vertimas - %s" + +msgid "Error:" +msgstr "Klaida:" + +msgid "Source file" +msgstr "Išeities failas" + +msgid "Source file occurrence:" +msgstr "Išeities failas pasikartojimai:" + +msgid "Open in Editor" +msgstr "Atversti redaktoriuje" + +msgid "Open in editor" +msgstr "Atversti redaktoriuje" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Klaida atveriant failą %s!" + +msgid "Find" +msgstr "Ieškoti" + +msgid "Replace" +msgstr "Pakeisti" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Parinktys" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "Nekelti teksto aplink" + +msgid "Whole words only" +msgstr "Tik pilnus žodžius" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "Ieškoti vertime" + +msgid "Find in comments" +msgstr "Ieškoti komentaruose" + +msgid "Close" +msgstr "Užverti" + +msgid "Replace All" +msgstr "Pakeisti viską" + +msgid "Replace all" +msgstr "Pakeisti viską" + +msgid "< &Previous" +msgstr "< &Ansktesnis" + +msgid "&Next >" +msgstr "&Sekantis >" + +msgid "String to find" +msgstr "Ieškoma eilutė" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Įvykdyti programos nepavyko: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kalbos kodas arba pavadinimas (pvz., „lt-LT“)" + +msgid "Translation Language" +msgstr "Vertimo kalba" + +msgid "Language of the translation:" +msgstr "Vertimo kalba:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - katalogų tvarkyklė" + +msgid "Catalog" +msgstr "Katalogas" + +msgid "Total" +msgstr "Iš viso" + +msgid "Untrans" +msgstr "Neverstos" + +msgid "Fuzzy" +msgstr "Neaiškus" + +msgid "Bad Tokens" +msgstr "Netaisyklingi skirtukai" + +msgid "Last modified" +msgstr "Paskutinis pakeitimas" + +msgid "Select directory" +msgstr "Pasirinkite aplanką" + +msgid "Directories:" +msgstr "Aplankai:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Ar norite pašalinti projektą?" + +msgid "Confirmation" +msgstr "Patvirtinimas" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Ar tikrai norite masiškai atnaujinti\n" +"visus šio projekto katalogus?" + +msgid "Information about the translator" +msgstr "Informacija apie vertėją" + +msgid "Name:" +msgstr "Vardas:" + +msgid "Your Name" +msgstr "Jūsų vardas" + +msgid "Email:" +msgstr "El. paštas:" + +msgid "your_email@example.com" +msgstr "mano@adresas.lt" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "Keitimas" + +msgid "Automatically compile MO file when saving" +msgstr "Automatiškai kompiliuoti MO failą išsaugant" + +msgid "Show summary after catalog update" +msgstr "Atnaujinus katalogą, rodyti suvestinę" + +msgid "Check spelling" +msgstr "Tikrinti _rašybą" + +msgid "Always change focus to text input field" +msgstr "Visada aktyvuoti teksto įvedimo lauką" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Niekada nefokusuoti eilučių sąrašo. Jei įjungta, turėsite naudoti Ctrl" +"+rodyklės klaviatūros navigacijai, taip pat galėsite įvedinėti tekstą iš " +"karto be TAB paspaudimo nekeičiant fokuso." + +msgid "Appearance" +msgstr "Išvaizda" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "Keisti programos kalbą" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "Bendra" + +msgid "Use translation memory" +msgstr "Naudoti vertimo atminties pasiūlymus" + +msgid "Learn From Files..." +msgstr "Mokytis iš failų..." + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Iš naujo" + +msgid "Consult TM when updating from sources" +msgstr "Atnaujinant iš šaltinių tikrininti vertimų atmintyje" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Jei įjungta, Poedit pabandys užpildyti naujus įrašus senais iš\n" +"vertimo atminties. Jei vertimo atmintis negausi iš to bus maža\n" +"naudos. Kuo daugiau verčiate, tuo greičiau auga vertimų atmintis." + +msgid "Stored translations:" +msgstr "Išsaugoti vertimai:" + +msgid "Database size on disk:" +msgstr "Duomenų bazės dydis diske:" + +msgid "Select translation files to import" +msgstr "Pasirinkite kokius vertimo failus importuosite" + +msgid "Translation Memory" +msgstr "Vertimo atmintis" + +msgid "Importing translations..." +msgstr "Importuojamai vertimai..." + +msgid "Finalizing..." +msgstr "Užbaigiama..." + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Atsisakyti" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "VA" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Naujas" + +msgid "Edit" +msgstr "Keisti" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "Paskyros" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "Įtraukti beta versijas" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "Atnaujinimai" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (rekomenduojama)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "Pridėti aplankus..." + +msgid "Add folders..." +msgstr "Pridėti aplankus..." + +msgid "Add Files..." +msgstr "Pridėti failus..." + +msgid "Add files..." +msgstr "Pridėti failus..." + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Keliai" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "Papildomi raktažodžiai" + +msgid "Name of the project the translation is for" +msgstr "Projekto vardas kuriam skirtas vertimas" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "pvz. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (rekomenduojama)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Prašom pirma išsaugoti failą. Kol neišsaugosite šio skyriaus bus negalima " +"redaguoti." + +msgid "Comment:" +msgstr "Komentaras:" + +msgid "OK" +msgstr "Gerai" + +msgid "C&lear" +msgstr "Iš&valyti" + +msgid "Clear the comment" +msgstr "Išvalyti komentarą" + +msgid "Create new translations project" +msgstr "Sukurti naują vertimų projektą" + +msgid "Edit the project" +msgstr "Keisti projektą" + +msgid "Delete the project" +msgstr "Pašalinti projektą" + +msgid "Update all" +msgstr "Atnaujinti viską" + +msgid "Update all catalogs in the project" +msgstr "Atnaujinti visus projekto katalogus" + +msgid "Edit project" +msgstr "Keisti projektą" + +msgid "Project name:" +msgstr "Projekto pavadinimas:" + +msgid "Browse" +msgstr "Naršyti" + +msgid "Add directory to the list" +msgstr "Į sąrašą pridėti aplanką" + +msgid "&New..." +msgstr "&Naujas..." + +msgid "New from &POT/PO file..." +msgstr "Naujas iš &POT/PO failo..." + +msgid "New From &POT/PO File..." +msgstr "Naujas iš &POT/PO failo..." + +msgid "&Open..." +msgstr "&Atversti..." + +msgid "Open Recent" +msgstr "Atversti paskutinį" + +msgid "Open from Crowdin..." +msgstr "Atversti iš Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Atversti iš Crowdin..." + +msgid "&Close" +msgstr "&Užverti" + +msgid "&Save" +msgstr "&Išsaugoti" + +msgid "Save &as..." +msgstr "Įrašyti &kaip..." + +msgid "Save &As..." +msgstr "Įrašyti &kaip..." + +msgid "Compile to MO..." +msgstr "Kompiliuoti į MO..." + +msgid "E&xport as HTML..." +msgstr "E&kportuoti kaip HTML..." + +msgid "Check for updates..." +msgstr "Tikrinti, ar yra atnaujinimų..." + +msgid "&Preferences..." +msgstr "&Nustatymai..." + +msgid "Catalogs &manager" +msgstr "Katalogų &tvarkyklė" + +msgid "Catalogs &Manager" +msgstr "Katalogų &tvarkyklė" + +msgid "E&xit" +msgstr "&Išeiti" + +msgid "Quit" +msgstr "Baigti darbą" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "&Neaiškus vertimas" + +msgid "Translation Is &Fuzzy" +msgstr "&Neaiškus vertimas" + +msgid "Edit &comment" +msgstr "&Keisti komentarą" + +msgid "Edit &Comment" +msgstr "Keisti &komentarą" + +msgid "Suggestions" +msgstr "Pasiūlymai" + +msgid "&Show references" +msgstr "&Rodyti nuorodas" + +msgid "&Show References" +msgstr "&Rodyti nuorodas" + +msgid "&Find..." +msgstr "&Ieškoti..." + +msgid "Replace..." +msgstr "Pakeisti..." + +msgid "Find next" +msgstr "Surasti kitą" + +msgid "Find previous" +msgstr "Surasti ankstesnį" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "Surasti kitą" + +msgid "Find Previous" +msgstr "Surasti ankstesnį" + +msgid "&Preferences" +msgstr "&Nustatymai" + +msgid "Display entry &IDs" +msgstr "Rodyti įrašų &identifikatorius" + +msgid "Display Entry &IDs" +msgstr "Rodyti įrašų &identifikatorius" + +msgid "Sort by &file order" +msgstr "Rikiuoti pagal &failų eilę" + +msgid "Sort by &File Order" +msgstr "Rikiuoti pagal &Failų eilę" + +msgid "Sort by &source" +msgstr "Rikiuoti pagal &šaltinį" + +msgid "Sort by &Source" +msgstr "Rikiuoti pagal &Šaltinį" + +msgid "Sort by &translation" +msgstr "Rikiuoti pagal &vertimą" + +msgid "Sort by &Translation" +msgstr "Rikiuoti pagal &vertimą" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "&Pirmiausia neišversti įrašai" + +msgid "&Untranslated Entries First" +msgstr "&Pirmiausia neišversti įrašai" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "K&atalogas" + +msgid "&Update from sources" +msgstr "&Atnaujinti iš išeities tekstų" + +msgid "&Update from Sources" +msgstr "&Atnaujinti iš išeities tekstų" + +msgid "Update from &POT file..." +msgstr "Atnaujinti iš &POT failo..." + +msgid "Update from &POT File..." +msgstr "Atnaujinti iš &POT failo..." + +msgid "Sync with Crowdin" +msgstr "Sinchronizuoti su Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&Pašalinti ištrintus vertimus" + +msgid "&Purge Deleted Translations" +msgstr "&Pašalinti ištrintus vertimus" + +msgid "&Validate translations" +msgstr "&Tvirtinti vertimą" + +msgid "&Validate Translations" +msgstr "&Tvirtinti vertimą" + +msgid "&Properties..." +msgstr "&Savybės..." + +msgid "&Done and next" +msgstr "&Atlikta ir toliau" + +msgid "&Done and Next" +msgstr "&Atlikta ir Toliau" + +msgid "&Previous translation" +msgstr "&Ankstesnis vertimas" + +msgid "&Previous Translation" +msgstr "&Ankstesnis vertimas" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "&Ankstesnis nebaigtas" + +msgid "P&revious Unfinished" +msgstr "&Ankstesnis nebaigtas" + +msgid "Ne&xt unfinished" +msgstr "&Kitas nebaigtas" + +msgid "Ne&xt Unfinished" +msgstr "&Kitas nebaigtas" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Pagalba internete" + +msgid "&Online Help" +msgstr "&Pagalba internete" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext žinynas" + +msgid "&GNU gettext Manual" +msgstr "&GNU Gettext žinynas" + +msgid "&About Poedit" +msgstr "&Apie Poedit" + +msgid "&About" +msgstr "&Apie" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Plėtinių, atskirtų kabliataškiais, sąrašas (pvz., *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Iškvietimas:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Elementas raktažodžių sąraše:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Tai bus pridėta komandinėje eilutėje po kartą\n" +"kiekvienam raktiniam žodžiui. %k išplės į raktinį žodį." + +msgid "An item in input files list:" +msgstr "Elementas įvedimo failų sąraše:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Tai bus pridėta komandinėje eilutėje po kartą\n" +"kiekvienam duomenų failui. %f išplės į failo pavadinimą." + +msgid "Source code charset:" +msgstr "Išeities tekstų koduotė:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Tai bus pridėta komandinėje eilutėje po kartą\n" +"kiekvienam duomenų failui. %c išplės į failo pavadinimą." + +msgid "Catalog properties" +msgstr "Katalogo savybės" + +msgid "Project name and version:" +msgstr "Projekto pavadinimas ir versija:" + +msgid "Plural Forms:" +msgstr "Daugiskaitos formos:" + +msgid "Use default rules for this language" +msgstr "Šiai kalbai naudoti numatytąsias taisykles" + +msgid "Use custom expression" +msgstr "Naudoti pasirinktines išraiškas" + +msgid "Learn about plural forms" +msgstr "Sužinkokite apie daugiskaitos formas" + +msgid "Charset:" +msgstr "Koduotė:" + +msgid "Team:" +msgstr "Komanda:" + +msgid "Team's email address:" +msgstr "Komandos el. paštas:" + +msgid "Translation properties" +msgstr "Vertimo savybės" + +msgid "Sources paths" +msgstr "Išeities failų keliai" + +msgid "Extract text from source files in the following directories:" +msgstr "Eksportuoti tekstą iš išeities failų esančių šiuose aplankaluose:" + +msgid "Base path:" +msgstr "Pagrindinis kelias:" + +msgid "Sources keywords" +msgstr "Išeities failų raktažodžiai" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Be standartinių, naudokite šiuos raktažodžius (funkcijų pavadinimus),\n" +"verstinų išeities tekstuose eilučių atpažinimui:" + +msgid "Learn about gettext keywords" +msgstr "Sužinokite daugiau apie gettext raktažodžius" + +msgid "Update summary" +msgstr "Atnaujinti santrauką" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Šios eilutės buvo rastos išeities tekstuose, tačiau neįtrauktos į katalogą.\n" +"Dabar Poedit jas įtrauks į katalogą." + +msgid "New strings" +msgstr "Naujos eilutės" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Šių eilučių išeities tekstuose nebeliko.\n" +"Dabar Poedit jas ištrins iš katalogo." + +msgid "Obsolete strings" +msgstr "Seni žodžiai" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 naujų, 0 senų)" + +msgid "Open" +msgstr "Atverti" + +msgid "Save catalog" +msgstr "Išsaugoti katalogą" + +msgid "Validate" +msgstr "Patvirtinti" + +msgid "Check for errors in the translation" +msgstr "Tikrinti ar nėra vertimo klaidų" + +msgid "Update" +msgstr "Atnaujinti" + +msgid "Update catalog - synchronize it with sources" +msgstr "Atnaujinti katalogą - sinchronizuoti jį su išeities tekstais" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Įjungtas, jei pasirinktos eilutės vertimas yra neaiškus" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Ankstesnis šaltinio tekstas:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "Pastabos vertėjams:" + +msgid "Add comment" +msgstr "Pridėti komentarą" + +msgid "Add Comment" +msgstr "Pridėti komentarą" + +msgid "Translation suggestions:" +msgstr "Vertimų siūlymai:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Atitikmenų nerasta" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Atitikmenų nerasta" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importuojuomi vertimai: %d" + +msgid "Poedit Update" +msgstr "Poedit atnaujinimas" + +msgid "Preparing migration..." +msgstr "Ruošiamasi perkėlimui..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Migracijos išėjimo būsena: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit turi konvertuoti jūsų vertimo atmintį į naują formatą." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Tai turi būti atlikta prieš paleidžiant Poedit. Tai gali užtrukti jei turite " +"daug vertimų, bet paprastai tai ilgai netrunka." + +msgid "Proceed" +msgstr "Tęsti" + +msgid "Translation memory migration failed." +msgstr "Vertimų atminties migravimas nepavyko." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Vertimų atminties duombazės perkelti nepavyko. Klaida:\n" +"\n" +"%s\n" +"Praneškite apie tai help@poedit.net ir mes tai ištaisysime." + +msgid "Cannot create temporary directory." +msgstr "Sukurti laikino aplanko nepavyko." + +msgid "Welcome to Poedit" +msgstr "Jus sveikina Poedit" + +msgid "Edit a translation" +msgstr "Keisti vertimą" + +msgid "Open an existing PO file and edit the translation." +msgstr "Atverti egzistuojantį PO failą ir redaguoti vertimą." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Paimti esamą PO ar POT failą ir sukurti iš jo naują vertimą." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Bendradarbiauti vertime per Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Atsisiųsti failą iš Crowdin projekto, versti ir sinchronizuoti pakeitimus " +"atgal." + +msgid "What is Crowdin?" +msgstr "Kas yra Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Nėra vertimų. Neįprasta." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Gettexxt sistemoje verčiami įrašai nėra pridedami rankiniu būdu, bet " +"automatiškai išgaunami\n" +"iš pradinio kodo. Tokiu būdu jie lieka naujausi ir tikslūs.\n" +"Vertėjai paprastai naudoja PO šablono failus (POT), kuriuos sukuria programų " +"autoriai." + +msgid "(Learn more about GNU gettext)" +msgstr "(Sužinokite daugiau apie GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Paprasčiausias būdas užpildyti šį katalogą yra atnaujinti jį iš POT:" + +msgid "Update from POT" +msgstr "Atnaujinti failą pagal POT šabloną" + +msgid "Take translatable strings from an existing POT template." +msgstr "Paimti verčiamas eilutes iš esamo POT šablono." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Taipogi galite ištraukti veričiamas eilutes tiesiai iš pradinio kodo:" + +msgid "Extract from sources" +msgstr "Išskleisti iš šaltinių" + +msgid "Configure source code extraction in Properties." +msgstr "Pradinio kodo ištraukimą galite sukonfigūruoti savybėse." + +msgid "Sync" +msgstr "Sinchronizuoti" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sinchronizuoti vertimą su Crowdin" diff --git a/locales/lv.mo b/locales/lv.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee623873b9e8b2b936dd3ce20482fe1c893213bd GIT binary patch literal 21503 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 R-#D@2y=MN6NB0wt{{+&9T+;vm literal 0 HcmV?d00001 diff --git a/locales/lv.po b/locales/lv.po new file mode 100644 index 0000000..2664bda --- /dev/null +++ b/locales/lv.po @@ -0,0 +1,1887 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-26 13:01-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Latvian\n" +"Language: lv_LV\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: lv\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Paslēpt šo notifikācijas ziņojumu" + +msgid "Don't Show Again" +msgstr "Vairs nerādīt" + +msgid "Don't show again" +msgstr "Vairs nerādīt" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i rindiņas failā '%s' netika ielādētas pareizi." +msgstr[1] "%i rindiņa failā '%s' netika ielādēta pareizi." +msgstr[2] "%i rindiņas failā '%s' netika ielādētas pareizi." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Rindiņa %d failā '%s' ir sabojāta (nepareizs %s kodējums)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Nepareiza galvene: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Sabojāts kataloga fails: vienskaitļa forma msgstr lietota kopā ar " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Sabojāts kataloga fails: daudzskaitļa forma msgstr lietota bez msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Radās kļūdas ielādējot katalogu. Tā rezultātā daži dati varētu būt sabojāti " +"vai varētu iztrūkt." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nevar ielādēt failu %s, iespējams, ka tas ir sabojāts." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Fails '%s' ir tikai lasāms un to nevar pārrakstīt.\n" +"Lūdzu to saglabāt ar citu nosaukumu." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nevar saglabāt failu %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Radās kļūda formatējot failu (bet tomēr tika veiksmīgi saglabāts)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogu nevarēja saglabāt '%s' kodējumā, kā norādīts iestatījumos.\n" +"\n" +"Viņš tika saglabāts UTF-8 kodējumā un iestatījums tika attiecīgi izmainīts." + +msgid "Error saving catalog" +msgstr "Kļūda saglabājot katalogu" + +msgid "PO Translation Files" +msgstr "PO tulkojumu faili" + +msgid "POT Translation Templates" +msgstr "POT tulkojumu faili" + +msgid "All Translation Files" +msgstr "Visi tulkojumu faili" + +msgid "Merging differences..." +msgstr "Atrisina atšķirības..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nav pareizs POT fails." + +msgid "(Use default language)" +msgstr "(Lietot noklusējuma valodu)" + +msgid "Select your preferred language" +msgstr "Atlasīt vēlamo valodu" + +msgid "Language selection" +msgstr "Valodas izvēle" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Restartēt Poedit, lai novērot šo izmaiņu." + +msgid "Downloading translations is disabled in this project." +msgstr "Šajā projektā tulkojumu lejupielāde ir atspējota." + +msgid "Not authorized, please sign in again." +msgstr "Noraidīts, lūdzu pierakstīties no jauna." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin ir tiešsaistes lokalizācijas vadīšanas platforma un sadarbības veida " +"tulkošanas rīks. Poedit var gludi sinhronizēt pie Crowdin turētus PO failus." + +msgid "Sign In" +msgstr "Pieslēgties" + +msgid "Sign in" +msgstr "Pieslēgties" + +msgid "Sign Out" +msgstr "Izlogoties" + +msgid "Sign out" +msgstr "Izlogoties" + +msgid "Waiting for authentication…" +msgstr "Gaida autentifikāciju…" + +msgid "Updating user information…" +msgstr "Atjauno lietotāja informāciju…" + +msgid "Signed in as:" +msgstr "Pieslēdzies kā:" + +msgid "Learn More About Crowdin" +msgstr "Uzzināt vairak par Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Uzzināt vairak par Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Pieslēgties Crowdin" + +msgid "Open Crowdin translation" +msgstr "Atvērt Crowdin tulkojumu" + +msgid "Project:" +msgstr "Projekts:" + +msgid "Language:" +msgstr "Valoda:" + +msgid "File:" +msgstr "Fails:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Jūsu Crowdin kontā nav tulkošanas projektu saraksts." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Šim projektam nav failu, ko var tulkot ar Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Šo failu var rediģēt tikai Crowdin web interfeisā." + +msgid "Downloading latest translations…" +msgstr "Lejupielādēt jaunāko tulkojumu…" + +msgid "Syncing with Crowdin" +msgstr "Sinhronizējas ar Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Sinhronizēšana ar Crowdin neizdevās." + +msgid "Crowdin error" +msgstr "Crowdin kļūda" + +msgid "Uploading translations…" +msgstr "Augšupielādē tulkojumus…" + +msgid "&Copy" +msgstr "Kopēt" + +msgid "Learn more" +msgstr "Uzzināt vairāk" + +msgid "Learn More" +msgstr "Uzzināt vairāk" + +#, c-format +msgid "Failed command: %s" +msgstr "Neizdevās komanda: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Neizdevās apvienot gettext katalogus." + +msgid "Scanning files..." +msgstr "Aplūko failus..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Parsē %s failus..." + +msgid "Failed to load extracted catalog." +msgstr "Neizdevās ielādēt izvilkto katalogu." + +msgid "&Help" +msgstr "&Palīdzība" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO failu nevar tieši rediģēt Poedit." + +msgid "Error opening file" +msgstr "Kļūda, atverot failu" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Lūdzu, atveriet un rediģējiet atbilstošo PO failu tā vietā. Saglabājot to, " +"tiks atjaunināts arī MO fails." + +msgid "don't delete temporary files (for debugging)" +msgstr "neizdzēst pagaidu failus (atkļūdošanai)" + +msgid "handle a poedit:// URI" +msgstr "rīkoties ar poedit://URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Komunikācija ar Poedit procesu neizdevās." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Neapstrādāts izņēmums notika: %s" + +msgid "Unhandled exception occurred." +msgstr "Radās neapstrādāts izņēmums." + +msgid "Open catalog" +msgstr "Atvērt katalogu" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fails '%s' neeksistē." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Par %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versija %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit ir vienkārši izmantojams tulkojumu redaktors." + +msgid "Catalogs Manager" +msgstr "Katalogu pārvaldnieks" + +msgid "Check for Updates..." +msgstr "Pārbaudīt atjauninājumus..." + +msgid "&Edit" +msgstr "R&ediģēt" + +msgid "Undo" +msgstr "Atsaukt" + +msgid "Redo" +msgstr "Atcelt atsaukšanu" + +msgid "Paste and Match Style" +msgstr "Ielīmēt un pieskaņot stilam" + +msgid "Delete" +msgstr "Izdzēst" + +msgid "Spelling and Grammar" +msgstr "Pareizrakstība un gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Rādīt pareizrakstību un gramatiku" + +msgid "Check Document Now" +msgstr "Pārbaudīt dokumentu" + +msgid "Check Spelling While Typing" +msgstr "Pārbaudīt pareizrakstību rakstīšanas laikā" + +msgid "Check Grammar With Spelling" +msgstr "Pārbaudīt gramatiku kopā ar pareizrakstību" + +msgid "Correct Spelling Automatically" +msgstr "Izlabot pareizrakstību automātiski" + +msgid "Substitutions" +msgstr "Aizvietošanas" + +msgid "Show Substitutions" +msgstr "Rādīt aizvietošanas" + +msgid "Smart Copy/Paste" +msgstr "Gudrs Copy/Paste" + +msgid "Smart Quotes" +msgstr "Figūrpēdiņas" + +msgid "Smart Dashes" +msgstr "Domuzīme" + +msgid "Smart Links" +msgstr "Saites" + +msgid "Text Replacement" +msgstr "Teksta aizstāšana" + +msgid "Transformations" +msgstr "Transformācijas" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "" + +msgid "Speech" +msgstr "Runa" + +msgid "Start Speaking" +msgstr "Sākt izrunāt" + +msgid "Stop Speaking" +msgstr "Beigt izrunāt" + +msgid "&View" +msgstr "&Skats" + +msgid "Enter Full Screen" +msgstr "" + +msgid "Window" +msgstr "Logs" + +msgid "Minimize" +msgstr "Minimizēt" + +msgid "Zoom" +msgstr "" + +msgid "Bring All to Front" +msgstr "" + +msgid "PO Translation" +msgstr "" + +msgid "The file cannot be opened." +msgstr "Fails nav atverams." + +msgid "Invalid file" +msgstr "Nederīgs fails" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "" + +msgid "&Redo" +msgstr "" + +msgid "Cu&t" +msgstr "" + +msgid "Cut" +msgstr "Izgriezt" + +msgid "Copy" +msgstr "Kopēt" + +msgid "&Paste" +msgstr "" + +msgid "Paste" +msgstr "" + +msgid "&Delete" +msgstr "&Dzēst" + +msgid "Select &All" +msgstr "" + +msgid "Select All" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Jūs nevarat nomest vairāk nekā vienu failu Poedit logā." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fails '%s' nav ziņojumu katalogs." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fails" + +msgid "&Go" +msgstr "&Iet" + +msgid "Source text:" +msgstr "Avota teksts:" + +msgid "Singular:" +msgstr "Vienskaitlis:" + +msgid "Plural:" +msgstr "Daudzskaitlis:" + +msgid "Translation:" +msgstr "Tulkojums:" + +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 "" + +msgid "Create New Translation" +msgstr "Izveidot jaunu tulkojumu" + +msgid "Create new translation" +msgstr "Izveidot jaunu tulkojumu" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogs ir modificēts. Vai vēlaties saglabāt izmaiņas?" + +msgid "Save changes" +msgstr "Saglabāt izmaiņas" + +msgid "Your changes will be lost if you don't save them." +msgstr "Jūsu veiktās izmaiņas būs zudušas, ja tās nesaglabāsiet." + +msgid "Save" +msgstr "Saglabāt" + +msgid "Don't save" +msgstr "Nesaglabāt" + +msgid "Don't Save" +msgstr "Nesaglabāt" + +msgid "Save as..." +msgstr "Saglabāt kā..." + +msgid "Compile to..." +msgstr "" + +msgid "Compiled Translation Files" +msgstr "" + +msgid "Export as..." +msgstr "Eksportēt kā..." + +msgid "HTML Files" +msgstr "" + +msgid "Open catalog template" +msgstr "Atvērt kataloga paraugu" + +msgid "Updating catalog" +msgstr "" + +msgid "Source code not available." +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "Ieraksti katalogā, iespējams, nav pareizi." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Kataloga atjaunošana neizdevās. Nospiediet 'Vairāk>>', lai iegūtu papildu " +"informāciju." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Validation results" +msgstr "" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "The translation is ready for use." +msgstr "" + +msgid "Context:" +msgstr "" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "" + +msgid "Set Language" +msgstr "" + +msgid "Set language" +msgstr "" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Katalogam ir ieraksti ar daudzskatļa formām, bet tam nav konfigurēta " +"daudzskaitļa formu galvene." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Ierakstiem šajā katalogā ir atšķirīgs daudzskaitļa formu skaits, nekā tas " +"norādīts daudzskaitļa formu galvenē" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Sintakses kļūda daudzskaitļa formu galvenē (\"%s\")." + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "Salabot galveni" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Kļūda ielādējot ziņojuma kataloga failu '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "" + +#, c-format +msgid "Remaining: %d" +msgstr "" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid " (unsaved)" +msgstr "" + +msgid " (modified)" +msgstr " (modificēts)" + +msgid "Go" +msgstr "" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "" + +msgid "Purge deleted translations" +msgstr "&Iztīrīt dzēstos tulkojumus" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Vai vēlaties izņemt visus tulkojumus, kas vairs netiek izmantoti?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ja jūs turpināsiet ar iztīrīšanu, visi tulkojumi, kas atzīmēti kā dzēsti, " +"tiks pilnībā izņemti. Iespējams, ka vēlāk tie jums būs jātulko vēlreiz, ja " +"tie vēlāk tiks pievienoti atpakaļ." + +msgid "Keep" +msgstr "Paturēt" + +msgid "Purge" +msgstr "Iztīrīt" + +msgid "Fill missing translations from TM" +msgstr "" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "" + +msgid "Filling missing translations from TM..." +msgstr "" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Copy from source text" +msgstr "Kopēt no avota teksta" + +msgid "Copy from Source Text" +msgstr "Kopēt no avota teksta" + +msgid "Clear translation" +msgstr "Notīrīt tulkojumu" + +msgid "Clear Translation" +msgstr "Notīrīt tulkojumu" + +msgid "Edit comment" +msgstr "Rediģēt komentāru" + +msgid "Edit Comment" +msgstr "" + +msgid "References:" +msgstr "Atsauces:" + +msgid "Everything" +msgstr "" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "" + +msgid "One" +msgstr "" + +msgid "Two" +msgstr "" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "&Bookmarks" +msgstr "&Grāmatzīmes" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "" + +msgid "Show Sidebar" +msgstr "" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "Avota teksts" + +msgid "Translation" +msgstr "Tulkojums" + +msgid "ID" +msgstr "" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "" + +#, c-format +msgid "Translation — %s" +msgstr "" + +msgid "Error:" +msgstr "" + +msgid "Source file" +msgstr "Avota fails" + +msgid "Source file occurrence:" +msgstr "Avota faila gadījums:" + +msgid "Open in Editor" +msgstr "" + +msgid "Open in editor" +msgstr "" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "Kļūda atverot failu %s!" + +msgid "Find" +msgstr "" + +msgid "Replace" +msgstr "" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "Tikai veselus vārdus" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "" + +msgid "Find in comments" +msgstr "Meklēt komentāros" + +msgid "Close" +msgstr "Aizvērt" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "" + +msgid "&Next >" +msgstr "" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nevar palaist programmu: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "" + +msgid "Translation Language" +msgstr "" + +msgid "Language of the translation:" +msgstr "" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - katalogu pārvaldnieks" + +msgid "Catalog" +msgstr "Katalogs" + +msgid "Total" +msgstr "Kopā" + +msgid "Untrans" +msgstr "Neiztulk" + +msgid "Fuzzy" +msgstr "Nepilnīgs" + +msgid "Bad Tokens" +msgstr "Sliktie elementi" + +msgid "Last modified" +msgstr "Pēdējo reizi modificēts" + +msgid "Select directory" +msgstr "Izvēlieties mapi" + +msgid "Directories:" +msgstr "Mapes:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vai vēlaties izdzēst projektu?" + +msgid "Confirmation" +msgstr "Apstiprinājums" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Vai tiešām vēlaties veikt masveida atjaunošanu\n" +"visiem katalogiem šajā projektā?" + +msgid "Information about the translator" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Your Name" +msgstr "" + +msgid "Email:" +msgstr "" + +msgid "your_email@example.com" +msgstr "" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "" + +msgid "Automatically compile MO file when saving" +msgstr "" + +msgid "Show summary after catalog update" +msgstr "Parādīt kopsavilkumu pēc kataloga atjaunošanas" + +msgid "Check spelling" +msgstr "" + +msgid "Always change focus to text input field" +msgstr "Vienmēr fokusēties uz teksta ievades lauku" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nekad neļaut virkņu sarakstam pārņemt fokusu. Ja aktivizēts, jums jālieto " +"Ctrl-bultiņas tastatūras navigācijai, bet jūs varat arī rakstīt tekstu " +"nekavējoties, nenospiežot Tab taustiņu, lai mainītu fokusu." + +msgid "Appearance" +msgstr "" + +msgid "Use custom list font:" +msgstr "" + +msgid "Use custom text fields font:" +msgstr "" + +msgid "Change UI language" +msgstr "Mainīt lietojumprogrammas valodu" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Use translation memory" +msgstr "" + +msgid "Learn From Files..." +msgstr "" + +msgid "Learn from files..." +msgstr "" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "Tulkojumu atmiņa" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "Atcelt" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "Jauns" + +msgid "Edit" +msgstr "Rediģēt" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "" + +msgid "Include beta versions" +msgstr "" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "" + +msgid "Unix (recommended)" +msgstr "Unix (ieteicamais)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "" + +msgid "Add folders..." +msgstr "" + +msgid "Add Files..." +msgstr "" + +msgid "Add files..." +msgstr "" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "Ceļi" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "" + +msgid "Name of the project the translation is for" +msgstr "" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (ieteicamais)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "Komentārs:" + +msgid "OK" +msgstr "Labi" + +msgid "C&lear" +msgstr "" + +msgid "Clear the comment" +msgstr "Notīrīt komentāru" + +msgid "Create new translations project" +msgstr "Izveidot jaunu tulkošanas projektu" + +msgid "Edit the project" +msgstr "Rediģēt projeku" + +msgid "Delete the project" +msgstr "Izdzēst projektu" + +msgid "Update all" +msgstr "Atjaunot visus" + +msgid "Update all catalogs in the project" +msgstr "Atjaunot visus katalogus šajā projektā" + +msgid "Edit project" +msgstr "Rediģēt projektu" + +msgid "Project name:" +msgstr "Projekta nosaukums:" + +msgid "Browse" +msgstr "Pārlūkot" + +msgid "Add directory to the list" +msgstr "Pievienot mapi sarakstam" + +msgid "&New..." +msgstr "" + +msgid "New from &POT/PO file..." +msgstr "" + +msgid "New From &POT/PO File..." +msgstr "" + +msgid "&Open..." +msgstr "&Atvērt..." + +msgid "Open Recent" +msgstr "" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "Ai&zvērt" + +msgid "&Save" +msgstr "&Saglabāt" + +msgid "Save &as..." +msgstr "Saglabāt &kā..." + +msgid "Save &As..." +msgstr "Saglabāt &kā..." + +msgid "Compile to MO..." +msgstr "" + +msgid "E&xport as HTML..." +msgstr "" + +msgid "Check for updates..." +msgstr "" + +msgid "&Preferences..." +msgstr "&Iestatījumi..." + +msgid "Catalogs &manager" +msgstr "Katalogu &pārvaldnieks" + +msgid "Catalogs &Manager" +msgstr "Katalogu &pārvaldnieks" + +msgid "E&xit" +msgstr "I&ziet" + +msgid "Quit" +msgstr "Iziet" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "Tulkojums ir &nepilnīgs" + +msgid "Translation Is &Fuzzy" +msgstr "Tulkojums ir &nepilnīgs" + +msgid "Edit &comment" +msgstr "Rediģēt &komentāru" + +msgid "Edit &Comment" +msgstr "Rediģēt &komentāru" + +msgid "Suggestions" +msgstr "" + +msgid "&Show references" +msgstr "&Parādīt atsauces" + +msgid "&Show References" +msgstr "&Parādīt atsauces" + +msgid "&Find..." +msgstr "&Atrast..." + +msgid "Replace..." +msgstr "" + +msgid "Find next" +msgstr "" + +msgid "Find previous" +msgstr "" + +msgid "Find and Replace..." +msgstr "" + +msgid "Find Next" +msgstr "" + +msgid "Find Previous" +msgstr "" + +msgid "&Preferences" +msgstr "&Iestatījumi" + +msgid "Display entry &IDs" +msgstr "" + +msgid "Display Entry &IDs" +msgstr "" + +msgid "Sort by &file order" +msgstr "Kārtot pēc &faila secības" + +msgid "Sort by &File Order" +msgstr "Kārtot pēc &faila secības" + +msgid "Sort by &source" +msgstr "Kārtot pēc a&vota" + +msgid "Sort by &Source" +msgstr "Kārtot pēc a&vota" + +msgid "Sort by &translation" +msgstr "Kārtot pēc &tulkojuma" + +msgid "Sort by &Translation" +msgstr "Kārtot pēc &tulkojuma" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "Vispirms neizt&ulkotos ierakstus" + +msgid "&Untranslated Entries First" +msgstr "Vispirms neizt&ulkotos ierakstus" + +msgid "Show sidebar" +msgstr "" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "K&atalogs" + +msgid "&Update from sources" +msgstr "Atja&unot no avota" + +msgid "&Update from Sources" +msgstr "Atja&unot no avota" + +msgid "Update from &POT file..." +msgstr "Atjaunot no &POT faila..." + +msgid "Update from &POT File..." +msgstr "Atjaunot no &POT faila..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "" + +msgid "Fill Missing Translations from &TM..." +msgstr "" + +msgid "&Purge deleted translations" +msgstr "&Iztīrīt dzēstos tulkojumus" + +msgid "&Purge Deleted Translations" +msgstr "Iztīrīt &dzēstos tulkojumus" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "&Īpašības..." + +msgid "&Done and next" +msgstr "Pa&beigt un pāriet uz nākamo" + +msgid "&Done and Next" +msgstr "Pa&beigt un pāriet uz nākamo" + +msgid "&Previous translation" +msgstr "" + +msgid "&Previous Translation" +msgstr "" + +msgid "&Next translation" +msgstr "" + +msgid "&Next Translation" +msgstr "" + +msgid "P&revious unfinished" +msgstr "Iep&riekšejais nepabeigtais" + +msgid "P&revious Unfinished" +msgstr "Iep&riekšejais nepabeigtais" + +msgid "Ne&xt unfinished" +msgstr "Nā&kamais nepabeigtais" + +msgid "Ne&xt Unfinished" +msgstr "Nā&kamais nepabeigtais" + +msgid "Previous plural form" +msgstr "Iepriekšējā daudzskaitļa forma" + +msgid "Previous Plural Form" +msgstr "Iepriekšējā daudzskaitļa forma" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "&Tiešsaistes palīdzība" + +msgid "&Online Help" +msgstr "&Tiešsaistes palīdzība" + +msgid "&GNU gettext manual" +msgstr "" + +msgid "&GNU gettext Manual" +msgstr "" + +msgid "&About Poedit" +msgstr "" + +msgid "&About" +msgstr "P&ar..." + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Paplašinājumu saraksts, atdalīts ar semikoliem (piem., *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Izsaukšana:" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "Vienums atslēgvārdu sarakstā:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Šis vienums tiks pievienots komandrindai, vienreiz katram\n" +"atslēgvārdam. %k atbilst atslēgvārdam." + +msgid "An item in input files list:" +msgstr "Vienums ievades failu sarakstā:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Šis vienums tiks pievienots komandrindai, vienreiz katram\n" +"ievades failam. %f atbilst faila nosaukumam." + +msgid "Source code charset:" +msgstr "Pirmkoda simbolkopa:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Šis vienums tiks pievienots komandrindai tikai tad, ja\n" +"būs doda pirmkoda simbolkopa. %c atbilst simbolkopas vērtībai." + +msgid "Catalog properties" +msgstr "Kataloga īpašības" + +msgid "Project name and version:" +msgstr "Projekta nosaukums un versija:" + +msgid "Plural Forms:" +msgstr "Daudzskaitļa formas:" + +msgid "Use default rules for this language" +msgstr "" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "Simbolkopa:" + +msgid "Team:" +msgstr "Komanda:" + +msgid "Team's email address:" +msgstr "Komandas e-pasta adrese:" + +msgid "Translation properties" +msgstr "" + +msgid "Sources paths" +msgstr "Avotu ceļi" + +msgid "Extract text from source files in the following directories:" +msgstr "Izvilkt tekstu no avotu failiem sekojošajās mapēs:" + +msgid "Base path:" +msgstr "Bāzes ceļš:" + +msgid "Sources keywords" +msgstr "Avotu atslēgvārdi" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Lietot šos atslēgvārdus (funkciju nosaukumus), lai atpazītu tulkojamās " +"virknes\n" +"avota failos:" + +msgid "Learn about gettext keywords" +msgstr "" + +msgid "Update summary" +msgstr "Atjaunot kopsavilkumu" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Šīs virknes tika atrastas avotos, bet nebija katalogā.\n" +"Poedit tūlīt pat pievienos tās katalogam." + +msgid "New strings" +msgstr "Jaunas virknes" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Šīs virknes vair nav avotos.\n" +"Poedit tūlīt pat izņems tās no kataloga." + +msgid "Obsolete strings" +msgstr "Novecojušās virknes" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 jaunas, 0 novecojušas)" + +msgid "Open" +msgstr "Atvērt" + +msgid "Save catalog" +msgstr "Saglabāt katalogu" + +msgid "Validate" +msgstr "" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "Atjaunot" + +msgid "Update catalog - synchronize it with sources" +msgstr "Atjaunot katalogu - sinhronizēt to ar avotiem" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Noslēgt, ja izvēlētā virkne satur nepilnīgu tulkojumu" + +msgid "Show or hide the sidebar" +msgstr "" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "" + +msgid "Add comment" +msgstr "" + +msgid "Add Comment" +msgstr "" + +msgid "Translation suggestions:" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "Turpināt" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "Nevar izveidot pagaidu datu mapi." + +msgid "Welcome to Poedit" +msgstr "" + +msgid "Edit a translation" +msgstr "" + +msgid "Open an existing PO file and edit the translation." +msgstr "" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/ms.mo b/locales/ms.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3a3a483ce30664b67f046ec5e8eb18144a77462 GIT binary patch literal 44936 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\n" +"Language-Team: Malay\n" +"Language: ms_MY\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: ms\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Sembunyi mesej pemberitahuan ini" + +msgid "Don't Show Again" +msgstr "Jangan Tunjukkan Lagi" + +msgid "Don't show again" +msgstr "Jangan tunjuk lagi" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "Baris %i fail '%s' tidak dimuatkan dengan betul." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Baris %d fail '%s' rosak (data %s tidak sah)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Pengepala canggaan: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Fail katalog rosak: kata tunggal msgstr digunakan bersama dengan msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Fail katalog rosak: kata jamak msgstr digunakan tanpa msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Terdapat ralat ketika memuat katalog. Hasilnya, beberapa data mungkin hilang " +"atau rosak." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Gagal memuat fail %s, ia berkemungkinan rosak." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"File '%s' adalah baca-sahaja dan tidak dapat disimpan.\n" +"Sila simpannya dengan nama lain." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Tidak dapat menyimpan fail %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Terdapat masalah memformat fail secara baik (tetapi telah disimpan dengan " +"baik)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog tidak dapat disimpan dalam set aksara '%s' sebagaimana tetapan " +"dalan katalog.\n" +"\n" +"Ianya tersimpan dalam format UTF-8 dan tetapan juga telah berubah." + +msgid "Error saving catalog" +msgstr "Ralat menyimpan katalog" + +msgid "PO Translation Files" +msgstr "Fail Terjemahan PO" + +msgid "POT Translation Templates" +msgstr "Templat Terjemahan POT" + +msgid "All Translation Files" +msgstr "Semua Fail Terjemahan" + +msgid "Merging differences..." +msgstr "Menggabungkan perbezaan..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' bukan fail POT yang sah." + +msgid "(Use default language)" +msgstr "(Guna bahasa lalai)" + +msgid "Select your preferred language" +msgstr "Pilih bahasa keutamaan anda" + +msgid "Language selection" +msgstr "Pilihan bahasa" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Mula semula Poedit untuk mengaktifkan perubahan ini." + +msgid "Downloading translations is disabled in this project." +msgstr "Memuat turun terjemahan dinyahdayakan dalam projek ini." + +msgid "Not authorized, please sign in again." +msgstr "Tidak dibenarkan, sila log masuk sekali lagi." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin adalah platform pengurusan lokalisasi dalam talian dan alat " +"terjemahan kolaboratif. Poedit boleh menyelaraskan fail PO yang diuruskan di " +"Crowdin dengan lancar." + +msgid "Sign In" +msgstr "Daftar Masuk" + +msgid "Sign in" +msgstr "Daftar masuk" + +msgid "Sign Out" +msgstr "Daftar Keluar" + +msgid "Sign out" +msgstr "Daftar keluar" + +msgid "Waiting for authentication…" +msgstr "Menunggu pengesahan…" + +msgid "Updating user information…" +msgstr "Mengemaskini maklumat pengguna…" + +msgid "Signed in as:" +msgstr "Didaftar masuk sebagai:" + +msgid "Learn More About Crowdin" +msgstr "Ketahui Lebih Lanjut Tentang Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Ketahui lebih lanjut tentang Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Daftar masuk ke Crowdin" + +msgid "Open Crowdin translation" +msgstr "Buka terjemahan Crowdin" + +msgid "Project:" +msgstr "Projek:" + +msgid "Language:" +msgstr "Bahasa:" + +msgid "File:" +msgstr "Fail:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Tiada projek penterjemahan yang disenaraikan dalam akaun Crowdin anda." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Projek ini mempunyai tiada fail yang boleh diterjemahkan dalam Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Fail ini hanya boleh disunting di muka web Crowdin." + +msgid "Downloading latest translations…" +msgstr "Memuat turun terjemahan terbaru…" + +msgid "Syncing with Crowdin" +msgstr "Menyelaras dengan Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Menyelaras dengan Crowdin gagal." + +msgid "Crowdin error" +msgstr "Crowdin ralat" + +msgid "Uploading translations…" +msgstr "Memuat naik terjemahan…" + +msgid "&Copy" +msgstr "&Salin" + +msgid "Learn more" +msgstr "Ketahui lebih lanjut" + +msgid "Learn More" +msgstr "Ketahui Lebih Lanjut" + +#, c-format +msgid "Failed command: %s" +msgstr "Perintah gagal: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gagal menggabungkan katalog gettext." + +msgid "Scanning files..." +msgstr "Mengimbas fail..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Menghurai fail %s..." + +msgid "Failed to load extracted catalog." +msgstr "Gagal memuat katalog yang diekstrak." + +msgid "&Help" +msgstr "&Bantuan" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Fail MO tidak boleh diedit terus dalam Poedit." + +msgid "Error opening file" +msgstr "Ralat membuka fail" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Sila buka dan edit fail PO yang sepadan. Apabila anda menyimpannya, fail MO " +"akan dikemaskini juga." + +msgid "don't delete temporary files (for debugging)" +msgstr "jangan padam fail sementara (untuk menyahpepijat)" + +msgid "handle a poedit:// URI" +msgstr "kendalikan satu poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Gagal untuk berkomunikasi dengan proses Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Pengecualian tidak dikendalikan berlaku: %s" + +msgid "Unhandled exception occurred." +msgstr "Pengecualian tidak dikendalikan berlaku." + +msgid "Open catalog" +msgstr "Buka katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fail '%s' tidak wujud." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Mengenai %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versi %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Perkhidmatan" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Sembunyi %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Sembunyi Lain" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Tunjuk Semua" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Keluar dari %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit adalah editor terjemahan yang mudah digunakan." + +msgid "Catalogs Manager" +msgstr "Pengurus Katalog" + +msgid "Check for Updates..." +msgstr "Periksa Kemaskini..." + +msgid "&Edit" +msgstr "&Edit" + +msgid "Undo" +msgstr "Buat asal" + +msgid "Redo" +msgstr "Buat semula" + +msgid "Paste and Match Style" +msgstr "Tampal dan Padankan Gaya" + +msgid "Delete" +msgstr "Padam" + +msgid "Spelling and Grammar" +msgstr "Ejaan dan Tatabahasa" + +msgid "Show Spelling and Grammar" +msgstr "Tunjuk Ejaan dan Tatabahasa" + +msgid "Check Document Now" +msgstr "Periksa Dokumen Sekarang" + +msgid "Check Spelling While Typing" +msgstr "Periksa Ejaan Ketika Menaip" + +msgid "Check Grammar With Spelling" +msgstr "Periksa Tatabahasa Dengan Ejaan" + +msgid "Correct Spelling Automatically" +msgstr "Betulkan Ejaan Secara Automatik" + +msgid "Substitutions" +msgstr "Penggantian" + +msgid "Show Substitutions" +msgstr "Tunjuk Pertukaran" + +msgid "Smart Copy/Paste" +msgstr "Salin/Tampan Bijak" + +msgid "Smart Quotes" +msgstr "Petikan Bijak" + +msgid "Smart Dashes" +msgstr "Sempang Bijak" + +msgid "Smart Links" +msgstr "Pautan Bijak" + +msgid "Text Replacement" +msgstr "Gantian Teks" + +msgid "Transformations" +msgstr "Pengubahan" + +msgid "Make Upper Case" +msgstr "Jadikan Huruf Besar" + +msgid "Make Lower Case" +msgstr "Jadikan Huruf Kecil" + +msgid "Capitalize" +msgstr "Penghuruf besaran" + +msgid "Speech" +msgstr "Ucapan" + +msgid "Start Speaking" +msgstr "Mula Bercakap" + +msgid "Stop Speaking" +msgstr "Henti Bercakap" + +msgid "&View" +msgstr "&Pandangan" + +msgid "Enter Full Screen" +msgstr "Masuk Skrin Penuh" + +msgid "Window" +msgstr "Tetingkap" + +msgid "Minimize" +msgstr "Meminimumkan" + +msgid "Zoom" +msgstr "Zum" + +msgid "Bring All to Front" +msgstr "Bawa Semua ke Hadapan" + +msgid "PO Translation" +msgstr "Terjemahan PO" + +msgid "The file cannot be opened." +msgstr "Fail ini tidak dapat dibuka." + +msgid "Invalid file" +msgstr "Fail tidak sah" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Fail ini sama ada rosak atau dalam format yang tidak dikenali oleh Poedit." + +msgid "&Undo" +msgstr "&Buat Asal" + +msgid "&Redo" +msgstr "&Buat Semula" + +msgid "Cu&t" +msgstr "Poton&g" + +msgid "Cut" +msgstr "Potong" + +msgid "Copy" +msgstr "Salin" + +msgid "&Paste" +msgstr "&Tampal" + +msgid "Paste" +msgstr "Tampal" + +msgid "&Delete" +msgstr "&Padam" + +msgid "Select &All" +msgstr "Pilih &Semua" + +msgid "Select All" +msgstr "Pilih Semua" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Poedit tidak dapat jatuhkan lebih dari satu fail pada tingkap Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Fail '%s' bukanlah katalog mesej." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fail" + +msgid "&Go" +msgstr "&Pergi" + +msgid "Source text:" +msgstr "Teks sumber:" + +msgid "Singular:" +msgstr "Tunggal:" + +msgid "Plural:" +msgstr "Jamak:" + +msgid "Translation:" +msgstr "Terjemahan:" + +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 "" +"Fail POT hanya template dan tidak mengandungi sebarang terjemahan sendiri.\n" +"Untuk membuat terjemahan, anda perlu membuat fail PO baru berdasarkan " +"template." + +msgid "Create New Translation" +msgstr "Cipta Terjemahan Baharu" + +msgid "Create new translation" +msgstr "Cipta terjemahan baru" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Semakan ejaan dilumpuhkan, kerana kamus untuk %s tidak dipasang." + +msgid "Install" +msgstr "Pasang" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog diubah. Anda ingin menyimpan perubahan?" + +msgid "Save changes" +msgstr "Simpan perubahan" + +msgid "Your changes will be lost if you don't save them." +msgstr "Perubahan anda akan hilang jika anda tidak menyimpannya." + +msgid "Save" +msgstr "Simpan" + +msgid "Don't save" +msgstr "Jangan simpan" + +msgid "Don't Save" +msgstr "&Jangan Simpan" + +msgid "Save as..." +msgstr "Simpan sebagai..." + +msgid "Compile to..." +msgstr "Kumpulkan untuk..." + +msgid "Compiled Translation Files" +msgstr "Fail-fail Terjemahan Disusun" + +msgid "Export as..." +msgstr "Eksport sebagai ..." + +msgid "HTML Files" +msgstr "Fail HTML" + +msgid "Open catalog template" +msgstr "Buka templat katalog" + +msgid "Updating catalog" +msgstr "Mengemaskini katalog" + +msgid "Source code not available." +msgstr "Kod sumber tidak wujud." + +msgid "Updating failed" +msgstr "Mengemas kini gagal" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Terjemahan tidak dapat dikemaskini dari kod sumber, kerana tidak ada kod " +"ditemui di lokasi yang dinyatakan dalam Properties katalog ini." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Masukan di katalog mungkin salah" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Gagal mengemaskini katalog. Klik 'Perincian >>' untuk perincian." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d isu berkaitan terjemahan ditemui." + +msgid "Validation results" +msgstr "Pengesahan keputusan" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Masukan memiliki ralat yang ditanda dengan merah dalam senarai. PErincian " +"ralat akan ditunjukkan ketika anda memilih masukan tersebut." + +msgid "The file was saved safely." +msgstr "Fail disimpan dengan selamat." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Fail disimpan dengan selamat dan dikumpulkan ke dalam format MO, tetapi ia " +"mungkin tidak akan berfungsi dengan betul." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Fail telah disimpan dengan selamat, tetapi ianya tidak dapat dikompil kepada " +"format MO serta digunakan. " + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Fail tersebut telah disusun ke dalam format MO, tetapi ia mungkin tidak akan " +"berfungsi dengan betul." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Fail tidak boleh disusun ke dalam format MO dan digunakan." + +msgid "No problems with the translation found." +msgstr "Tiada masalah berkaitan terjemahan ditemui." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Terjemahan sedia untuk digunakan, tetapi entri %d belum diterjemahkan." + +msgid "The translation is ready for use." +msgstr "Terjemahan sedia untuk digunakan." + +msgid "Context:" +msgstr "Konteks:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit secara automatik tetapkan kandungan yang tidak sah dalam fail \"% s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Fail mengandungi item salinan, yang tidak dibenarkan dalam fail PO dan akan " +"menghalang fail itu daripada digunakan. Poedit tetap isu ini, tetapi anda " +"perlu menyemak terjemahan mana-mana barangan ditanda sebagai kabur dan " +"membetulkan mereka jika perlu." + +msgid "Language of the translation isn't set." +msgstr "Bahasa terjemahan tidak ditetapkan." + +msgid "Set Language" +msgstr "Tetapkan Bahasa" + +msgid "Set language" +msgstr "Tetapkan bahasa " + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Cadangan tidak disediakan jika Bahasa terjemahan tidak diset dengan betul. " +"Ciri-ciri lain, seperti bentuk majmuk, mungkin terjejas juga." + +msgid "Language of the translation is the same as source language." +msgstr "Bahasa Inggeris adalah sama sebagai bahasa sumber." + +msgid "Fix Language" +msgstr "Baiki Bahasa" + +msgid "Fix language" +msgstr "Baiki bahasa" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Katalog ini memiliki bentuk jamak, tetapi tidak mempunyai konfigurasi " +"pengepala Bentuk-Jamak." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Masukan dalam katalog ini memiliki bentuk bilangan jamak yang berbeza " +"daripada yang disebut dalam katalog pengepala Bentuk-Jamak " + +msgid "Required header Plural-Forms is missing." +msgstr "Pengepala Bentuk-Jamak yang diperlukan telah hilang." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Rakat sintaks dalam pengepala Bentuk-Jamak (\"%s\")." + +msgid "Fix the Header" +msgstr "Baiki Pengepala" + +msgid "Fix the header" +msgstr "Baiki pengepala" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Bentuk ungkapan kata jamak yang digunakan oleh katalog untuk %s luar biasa. " + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Kaji semula" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Ralat memuat fail katalog mesej '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Diterjemah: %d daripada %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Baki: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d ralat" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entri" + +msgid " (unsaved)" +msgstr " (tidak disimpan)" + +msgid " (modified)" +msgstr " (diubah suai)" + +msgid "Go" +msgstr "Pergi" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Gagal mengemaskini memori terjemahan: %s" + +msgid "Purge deleted translations" +msgstr "&Hapus terjemahan dipadam" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "" +"Adakah anda ingin menyingkirkan semua terjemahan yang tidak digunakan lagi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Anda ingin meneruskan pengusiran, semua terjemahan akan kekal ditanda " +"sebagai dihapus. Anda perlu menterjemahkannya semula jika ianya kembali pada " +"masa akan datang. " + +msgid "Keep" +msgstr "Kekalkan" + +msgid "Purge" +msgstr "Usir" + +msgid "Fill missing translations from TM" +msgstr "Isi terjemahan yang hilang dari TM" + +msgid "Only fill in exact matches" +msgstr "Hanya masukkan padanan sama" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Secara lalai, keputusan yang tidak tepat akan diisi serta dan ditanda " +"sebagai kabur. Tandakan pilihan ini untuk hanya merangkumi padanan yang " +"tepat." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Tidak tandakan padanan yang tepat sebagai kabur" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Sahaja membolehkan jika awda mempercayai kualiti TM anda. Secara lalai, " +"semua padanan daripada TM yang ditandakan sebagai kabur dan hendaklah dikaji " +"semula." + +msgid "Fill" +msgstr "Isi" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entri telah diisi dari memori terjemahan." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Terjemahan ini telah ditandakan sebagai kabur, kerana mereka mungkin tidak " +"tepat. Anda patut menyemak semula mereka untuk ketepatan." + +msgid "No entries could be filled from the translation memory." +msgstr "Tiada entri boleh diisi dari memori terjemahan." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM tidak mengandungi sebarang rentetan yang sama dengan kandungan fail ini. " +"Ianya hanya berkesan untuk terjemahan separa-automatik selepas Poedit " +"belajar dengan cukup dari fail yang anda terjemahkan secara manual." + +msgid "Translating" +msgstr "Menterjemah" + +msgid "Filling missing translations from TM..." +msgstr "Mengisi terjemahan yang tiada dari TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Rentetan %u yang telah diterjemah" + +msgid "Copy from source text" +msgstr "Salin daripada Sumber Teks" + +msgid "Copy from Source Text" +msgstr "Salin daripada Sumber Teks" + +msgid "Clear translation" +msgstr "Lapangkan terjemahan" + +msgid "Clear Translation" +msgstr "Lapangkan Terjemahan" + +msgid "Edit comment" +msgstr "Edit komen" + +msgid "Edit Comment" +msgstr "Edit Komen" + +msgid "References:" +msgstr "Rujukan:" + +msgid "Everything" +msgstr "Kesemuanya" + +#, c-format +msgid "Form %i" +msgstr "Borang %i" + +msgid "Singular" +msgstr "Tunggal" + +msgid "Zero" +msgstr "Sifar" + +msgid "One" +msgstr "Satu" + +msgid "Two" +msgstr "Dua" + +msgid "Plural" +msgstr "Jamak" + +msgid "Other" +msgstr "Lain" + +msgid "&Bookmarks" +msgstr "&Penanda Buku" + +#, c-format +msgid "Set bookmark %i" +msgstr "Tetapkan penanda buku %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Pergi ke penanda buku %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Tetapkan Penanda buku %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Pergi ke Penanda buku %i" + +msgid "Hide Sidebar" +msgstr "Sembunyi Bar sisi" + +msgid "Show Sidebar" +msgstr "Papar Bar sisi" + +msgid "Hide Status Bar" +msgstr "Sembunyi Bar Status" + +msgid "Show Status Bar" +msgstr "Papar Bar Status" + +msgid "Source text" +msgstr "Teks sumber" + +msgid "Translation" +msgstr "Terjemahan" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Sumber teks — %s" + +msgid "unknown language" +msgstr "bahasa tidak diketahui" + +#, c-format +msgid "Translation — %s" +msgstr "Terjemahan — %s" + +msgid "Error:" +msgstr "Ralat:" + +msgid "Source file" +msgstr "Fail sumber" + +msgid "Source file occurrence:" +msgstr "Berlakunya fail sumber:" + +msgid "Open in Editor" +msgstr "Buka Dalam Editor" + +msgid "Open in editor" +msgstr "Buka Dalam editor" + +msgid "No references for the selected item." +msgstr "Tiada rujukan untuk item terpilih." + +#, c-format +msgid "Error opening file %s!" +msgstr "Ralat membuka fail %s!" + +msgid "Find" +msgstr "Cari" + +msgid "Replace" +msgstr "Ganti" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Pilihan" + +msgid "Ignore case" +msgstr "Abaikan huruf" + +msgid "Wrap around" +msgstr "Balut sekeliling" + +msgid "Whole words only" +msgstr "Semua kata sahaja" + +msgid "Find in source texts" +msgstr "Cari dalam teks sumber" + +msgid "Find in translations" +msgstr "Cari dalam terjemahan" + +msgid "Find in comments" +msgstr "Cari dalam komen" + +msgid "Close" +msgstr "Tutup" + +msgid "Replace All" +msgstr "Ganti Semua" + +msgid "Replace all" +msgstr "Ganti semua" + +msgid "< &Previous" +msgstr "< &Sebelumnya" + +msgid "&Next >" +msgstr "&Seterusnya >" + +msgid "String to find" +msgstr "Rentetan dicari" + +msgid "Replacement string" +msgstr "Rentetan pengganti" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Tidak dapat melaksanakan program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kod atau Nama Bahasa (cth. ms_MY) " + +msgid "Translation Language" +msgstr "Bahasa Terjemahan " + +msgid "Language of the translation:" +msgstr "Bahasa terjemahan:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Pengurus Katalog" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Jumlah" + +msgid "Untrans" +msgstr "Tidak diterjemahkan" + +msgid "Fuzzy" +msgstr "Kabur" + +msgid "Bad Tokens" +msgstr "Token Rosak" + +msgid "Last modified" +msgstr "Terakhir diubah" + +msgid "Select directory" +msgstr "Pilih direktori" + +msgid "Directories:" +msgstr "Direktori:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Anda ingin memadam projek?" + +msgid "Confirmation" +msgstr "Pengesahan" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Anda ingin melakukan mengemaskinian\n" +"menyeluruh semua projek ini?" + +msgid "Information about the translator" +msgstr "Maklumat mengenai penterjemah" + +msgid "Name:" +msgstr "Nama:" + +msgid "Your Name" +msgstr "E-mel Anda" + +msgid "Email:" +msgstr "E-mel:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Nama dan e-mel alamat anda hanya digunakan untuk menetapkan pengepala Last-" +"Translator fail gettext GNU." + +msgid "Editing" +msgstr "Menyunting" + +msgid "Automatically compile MO file when saving" +msgstr "Kumpul fail MO secara automatik semasa menyimpan" + +msgid "Show summary after catalog update" +msgstr "Perlihatkan rumusan selepas mengemaskini katalog" + +msgid "Check spelling" +msgstr "Periksa ejaan" + +msgid "Always change focus to text input field" +msgstr "Sentiasa ubah fokus ke medan input teks" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Jangan biarkan senarai rentetan mengambil fokus. Jika diaktifkan, anda perlu " +"gunakan Ctrl-panah untuk navigasi bahkan boleh terus menaip teks, tanpa " +"perlu menekan Tab untuk megubah fokus" + +msgid "Appearance" +msgstr "Penampilan" + +msgid "Use custom list font:" +msgstr "Gunakan senarai fon khas:" + +msgid "Use custom text fields font:" +msgstr "Gunakan senarai medan teks khas:" + +msgid "Change UI language" +msgstr "Ubah bahasa UI" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(memerlukan Windows 8 atau lebih baru)" + +msgid "General" +msgstr "Umum" + +msgid "Use translation memory" +msgstr "Gunakan memori terjemahan" + +msgid "Learn From Files..." +msgstr "Pelajari Daripada Fail..." + +msgid "Learn from files..." +msgstr "Pelajari daripada fail..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Tetapkan semula" + +msgid "Consult TM when updating from sources" +msgstr "Rujuk TM ketika mengemaskini daripada sumber" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Jika didayakan, Poedit akan cuba mengisi entri baru menggunakan\n" +"terjemahan anda yang disimpan dalam memori terjemahan sebelumnya. Jika TM \n" +"dekat kosong, ia tidak akan berkesan. Lebih banyak terjemahan\n" +"anda edit dan lebih besar TM membesar, lebih baik ia akan jadi." + +msgid "Stored translations:" +msgstr "Terjemahan tersimpan:" + +msgid "Database size on disk:" +msgstr "Saiz pangkalan data pada cakera:" + +msgid "Select translation files to import" +msgstr "Plih fail terjemahan untuk diimport" + +msgid "Translation Memory" +msgstr "Memori Terjemahan" + +msgid "Importing translations..." +msgstr "Mengimport terjemahan..." + +msgid "Finalizing..." +msgstr "Menyelesaikan..." + +msgid "Reset translation memory" +msgstr "Tetapkan semula memori terjemahan" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Adakah anda pasti anda mahu mengeset semula memori terjemahan?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Mengeset semula memori terjemahan tidak akan memadam semua terjemahan yang " +"disimpan daripadanya. Anda tidak dapat membuat asal operasi ini." + +msgid "Cancel" +msgstr "Batal" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Pengekstrak kod sumber digunakan untuk mencari rentetan yang boleh " +"diterjemah dalam fail kod sumber dan mengekstraknya supaya ia boleh " +"diterjemahkan." + +msgid "New" +msgstr "Baru" + +msgid "Edit" +msgstr "Edit" + +msgid "Delete extractor" +msgstr "Hapuskan pengekstrak" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Adakah anda pasti anda mahu menghapus extractor \"%s\"?" + +msgid "Extractors" +msgstr "Pengekstrak" + +msgid "Accounts" +msgstr "Akaun" + +msgid "Automatically check for updates" +msgstr "Periksa kemaskini secara automatik" + +msgid "Include beta versions" +msgstr "Termasuk versi beta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Versi beta mengandungi ciri-ciri dan penambahbaikan baru yang terbaru, " +"tetapi berkemungkinan kurang stabil sedikit." + +msgid "Updates" +msgstr "Kemaskini" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Tetapan berikut menjejaskan pemformatan dalaman fail PO. Laraskannya jika " +"anda mempunyai keperluan khusus misalnya kerana kawalan versi." + +msgid "Line endings:" +msgstr "Garis penamat:" + +msgid "Unix (recommended)" +msgstr "Unix (disarankan)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Balut pada:" + +msgid "Preserve formatting of existing files" +msgstr "Pelihara pemformatan fail sedia ada" + +msgid "Advanced" +msgstr "Lanjutan" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s Keutamaan" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Tarik dan Lepas Folder Di sini\n" +"\n" +"atau gunakan butang +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Tarik dan lepas folder di sini\n" +"\n" +"atau gunakan butang +" + +msgid "Add Folders..." +msgstr "Tambah Folder..." + +msgid "Add folders..." +msgstr "Tambah folder..." + +msgid "Add Files..." +msgstr "Tambah Fail..." + +msgid "Add files..." +msgstr "Tambah fail..." + +msgid "Add Wildcard..." +msgstr "Tambah Kad bebas..." + +msgid "Add wildcard..." +msgstr "Tambah kad bebas..." + +msgid "Paths" +msgstr "Laluan" + +msgid "Excluded paths" +msgstr "Laluan Dikecualikan" + +msgid "Additional keywords" +msgstr "Kata kunci tambahan" + +msgid "Name of the project the translation is for" +msgstr "Nama projek terjemahan adalah untuk" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "cth. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (disarankan)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Sila simpan fail dahulu. Seksyen ini tidak boleh diedit buat masa ini." + +msgid "Comment:" +msgstr "Komen:" + +msgid "OK" +msgstr "OK" + +msgid "C&lear" +msgstr "&Lapang" + +msgid "Clear the comment" +msgstr "Lapangkan komen" + +msgid "Create new translations project" +msgstr "Cipta projek terjemahan baru" + +msgid "Edit the project" +msgstr "Edit projek" + +msgid "Delete the project" +msgstr "Padam projek" + +msgid "Update all" +msgstr "Kemaskini semua" + +msgid "Update all catalogs in the project" +msgstr "Kemaskini semua katalog dalam projek" + +msgid "Edit project" +msgstr "Edit projek" + +msgid "Project name:" +msgstr "Nama Projek" + +msgid "Browse" +msgstr "Lungsur" + +msgid "Add directory to the list" +msgstr "Tambah direktori pada senarai" + +msgid "&New..." +msgstr "&Baru..." + +msgid "New from &POT/PO file..." +msgstr "Daripada fail &POT/PO baru..." + +msgid "New From &POT/PO File..." +msgstr "Daripada Fail &POT/PO Baru..." + +msgid "&Open..." +msgstr "&Buka..." + +msgid "Open Recent" +msgstr "Buka Terbaru" + +msgid "Open from Crowdin..." +msgstr "Buka dari Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Buka Dari Crowdin..." + +msgid "&Close" +msgstr "&Tutup" + +msgid "&Save" +msgstr "&Simpan" + +msgid "Save &as..." +msgstr "Simp&an sebagai..." + +msgid "Save &As..." +msgstr "Simp&an Sebagai ..." + +msgid "Compile to MO..." +msgstr "Kompil ke MO..." + +msgid "E&xport as HTML..." +msgstr "Eksport sebagai HTML..." + +msgid "Check for updates..." +msgstr "Periksa kemaskini..." + +msgid "&Preferences..." +msgstr "&Keutamaan..." + +msgid "Catalogs &manager" +msgstr "&Pegurus katalog" + +msgid "Catalogs &Manager" +msgstr "&Pengurus Katalog" + +msgid "E&xit" +msgstr "K&eluar" + +msgid "Quit" +msgstr "Keluar" + +msgid "Copy from singular" +msgstr "Salin daripada tunggal" + +msgid "Copy From Singular" +msgstr "Salin Daripada Tunggal" + +msgid "Translation is &fuzzy" +msgstr "Terjemahan &kabur" + +msgid "Translation Is &Fuzzy" +msgstr "Terjemahan &Kabur" + +msgid "Edit &comment" +msgstr "Edit &komen" + +msgid "Edit &Comment" +msgstr "Edit &Komen" + +msgid "Suggestions" +msgstr "Cadangan" + +msgid "&Show references" +msgstr "&Tunjuk rujukan" + +msgid "&Show References" +msgstr "&Tunjuk Rujukan" + +msgid "&Find..." +msgstr "&Cari..." + +msgid "Replace..." +msgstr "Ganti..." + +msgid "Find next" +msgstr "Cari berikut" + +msgid "Find previous" +msgstr "Cari terdahulu" + +msgid "Find and Replace..." +msgstr "Cari dan Ganti..." + +msgid "Find Next" +msgstr "Cari Berikut" + +msgid "Find Previous" +msgstr "Cari Terdahulu" + +msgid "&Preferences" +msgstr "&Keutamaan" + +msgid "Display entry &IDs" +msgstr "Paparan &ID masukan" + +msgid "Display Entry &IDs" +msgstr "Paparan &ID Masukan" + +msgid "Sort by &file order" +msgstr "Susun urutan &fail" + +msgid "Sort by &File Order" +msgstr "Susun dengan Urutan &Fail" + +msgid "Sort by &source" +msgstr "Susun dengan &sumber" + +msgid "Sort by &Source" +msgstr "Susun dengan &Sumber" + +msgid "Sort by &translation" +msgstr "Susun dengan &terjemahan" + +msgid "Sort by &Translation" +msgstr "Susun dengan &Terjemahan" + +msgid "&Group by context" +msgstr "&Kumpulan melalui konteks" + +msgid "&Group By Context" +msgstr "&Kumpulkan Melalui Konteks" + +msgid "Entries with errors first" +msgstr "Kemasukan dengan ralat dahulu" + +msgid "Entries with Errors First" +msgstr "Kemasukan dengan Ralat Dahulu" + +msgid "&Untranslated entries first" +msgstr "&Masukan tidak diterjemah terlebih dahulu" + +msgid "&Untranslated Entries First" +msgstr "&Masukan Belum Diterjemah Terlebih Dahulu" + +msgid "Show sidebar" +msgstr "Papar bar sisi" + +msgid "Show status bar" +msgstr "Papar bar status" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Kemas kini dari sumber" + +msgid "&Update from Sources" +msgstr "&Kemas kini dari Sumber" + +msgid "Update from &POT file..." +msgstr "Kemaskini dari fail &POT..." + +msgid "Update from &POT File..." +msgstr "Kemaskini dari Fail &POT..." + +msgid "Sync with Crowdin" +msgstr "Selaras dengan Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Isi terjemahan yang hilang dari &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Isi Terjemahan yang Hilang dari &TM..." + +msgid "&Purge deleted translations" +msgstr "&Singkirkan terjemahan dihapus" + +msgid "&Purge Deleted Translations" +msgstr "&Singkirkan Terjemahan Dihapus" + +msgid "&Validate translations" +msgstr "&Sahkan terjemahan" + +msgid "&Validate Translations" +msgstr "&Sahkan Terjemahan" + +msgid "&Properties..." +msgstr "&Sifat..." + +msgid "&Done and next" +msgstr "&Selesai dan seterusnya" + +msgid "&Done and Next" +msgstr "&Selesai dan Seterusnya" + +msgid "&Previous translation" +msgstr "&Terjemahan sebelumnya" + +msgid "&Previous Translation" +msgstr "&Terjemahan Sebelumnya" + +msgid "&Next translation" +msgstr "&Terjemahan seterusnya" + +msgid "&Next Translation" +msgstr "&Terjemahan Seterusnya" + +msgid "P&revious unfinished" +msgstr "Te&rdahulu tidak selesai" + +msgid "P&revious Unfinished" +msgstr "Te&rdahulu Tidak Selesai" + +msgid "Ne&xt unfinished" +msgstr "&Selepasnya yang tidak selesai" + +msgid "Ne&xt Unfinished" +msgstr "&Selepasnya yang Tidak Selesai" + +msgid "Previous plural form" +msgstr "Bentuk majmuk yang sebelumnya" + +msgid "Previous Plural Form" +msgstr "Bentuk majmuk yang sebelumnya" + +msgid "Next plural form" +msgstr "Bentuk majmuk yang seterusnya" + +msgid "Next Plural Form" +msgstr "Bentuk majmuk yang seterusnya" + +msgid "&Online help" +msgstr "&Bantuan dalam talian" + +msgid "&Online Help" +msgstr "&Bantuan dalam talian" + +msgid "&GNU gettext manual" +msgstr "Manual &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual &GNU gettext" + +msgid "&About Poedit" +msgstr "&Mengenai Poedit" + +msgid "&About" +msgstr "&Mengenai" + +msgid "Extractor setup" +msgstr "Persediaan pengekstrak" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Senarai sambungan dipisah oleh tanda ; (contoh: *.cpp,*.h):" + +msgid "Invocation:" +msgstr "Seruan:" + +msgid "Command to extract translations:" +msgstr "Perintah untuk mengekstrak terjemahan:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ini ialah perintah yang digunakan untuk melancarkan pengekstrak.\n" +"%o mengembang ke nama fail output, %K untuk menyenaraikan, \n" +"kata kunci, %F untuk menyenaraikan fail input,\n" +"%C ke bendera charset (lihat di bawah)." + +msgid "An item in keywords list:" +msgstr "Item dalam senarai kata kunci:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ini akan dilampirkan ke garis perintah sekali\n" +"untuk setiap kata kunci. %k mengembang kepada kata kunci." + +msgid "An item in input files list:" +msgstr "Item dalam fail senarai masukan:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ini akan dilampirkan ke garis perintah sekali\n" +"untuk setiap fail input. %f mengembang kepada nama fail." + +msgid "Source code charset:" +msgstr "Set aksara kod sumber:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ini akan lampirkan ke garis perintah\n" +"hanya jika kod sumber charset telah diberikan. %c mengembang ke nilai " +"charset." + +msgid "Catalog properties" +msgstr "Ciri-ciri katalog" + +msgid "Project name and version:" +msgstr "Nama Projek dan versi :" + +msgid "Plural Forms:" +msgstr "Tatacara jamak:" + +msgid "Use default rules for this language" +msgstr "Gunakan peraturan lalai untuk bahasa ini" + +msgid "Use custom expression" +msgstr "Guna ungkapan langganan" + +msgid "Learn about plural forms" +msgstr "Pelajari perihal bentuk kata jamak" + +msgid "Charset:" +msgstr "Charset:" + +msgid "Team:" +msgstr "Pasukan:" + +msgid "Team's email address:" +msgstr "Alamat email pasukan:" + +msgid "Translation properties" +msgstr "Sifat terjemahan" + +msgid "Sources paths" +msgstr "Laluan sumber" + +msgid "Extract text from source files in the following directories:" +msgstr "Ekstrak teks daripada fail sumber di dalam direktori berikut:" + +msgid "Base path:" +msgstr "Laluan asas:" + +msgid "Sources keywords" +msgstr "Katakunci sumber" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Gunakan katakunci ini (nama fungsi) untuk mengenali rentetan boleh terjemah\n" +"dalam fail sumber:" + +msgid "Learn about gettext keywords" +msgstr "Pelajari perihal katakunci gettext" + +msgid "Update summary" +msgstr "Kemaskini ringkasan" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Rentetan ditemui dalam sumber tetapi tidak di katalog.\n" +"Poedit akan menambahnya ke katalog sekarang." + +msgid "New strings" +msgstr "Rentetan baru" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Rentetan tiada lagi dalam sumber. Poedit\n" +"akan membuangnya dari katalog sekarang." + +msgid "Obsolete strings" +msgstr "Rentetan usang" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 baru, 0 usang)" + +msgid "Open" +msgstr "Buka" + +msgid "Save catalog" +msgstr "Simpan katalog" + +msgid "Validate" +msgstr "Pengesahan" + +msgid "Check for errors in the translation" +msgstr "Periksa kesalahan dalam terjemahan" + +msgid "Update" +msgstr "Kemaskini" + +msgid "Update catalog - synchronize it with sources" +msgstr "Kemaskini katalog - segerakkannya dengan sumber" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Togol jika rentetan dipilih mempunyai terjemahan kabur" + +msgid "Show or hide the sidebar" +msgstr "Papar atau sembunyi bar sisi" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Teks sumber sebelumnya:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Sumber teks lama(sebelum ditukar semasa kemas kini) yang berpadanan " +"terjemahan kabur." + +msgid "Notes for translators:" +msgstr "Nota untuk penterjemah:" + +msgid "Add comment" +msgstr "Tambah komen" + +msgid "Add Comment" +msgstr "Tambah Komen" + +msgid "Translation suggestions:" +msgstr "Cadangan penterjemahan:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Tiada padanan ditemui" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Tiada Padanan Ditemui" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Rentetan ini telah didapati dalam memori terjemahan Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Baru: %i, usang: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Mengimport terjemahan: %d" + +msgid "Poedit Update" +msgstr "Kemaskini Poedit" + +msgid "Preparing migration..." +msgstr "Menyediakan migrasi..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Pemindahan status keluar: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit perlu mengubah memori terjemahan anda kepada format yang baru." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ini mestilah diselesaikan sebelum memulakan Poedit. Ini memerlukan sedikit " +"masa jika anda memiliki banyak terjemahan yang tersimpan, tetapi " +"kebiasaannya sangat cepat." + +msgid "Proceed" +msgstr "Teruskan" + +msgid "Translation memory migration failed." +msgstr "Penghijrahan memori terjemahan gagal." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Data memori terjemahan anda tidak dapat dipindahkan. Ralatnya ialah:\n" +"\n" +"%s\n" +"Sila e-mel help@poedit.net dan kami akan membaikinya." + +msgid "Cannot create temporary directory." +msgstr "Tidak dapat mencipta direktori sementara." + +msgid "Welcome to Poedit" +msgstr "Selamat Datang ke Poedit" + +msgid "Edit a translation" +msgstr "Edit terjemahan" + +msgid "Open an existing PO file and edit the translation." +msgstr "Buka dan edit fail PO sedia ada." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Ambil fail PO atau templat POT dan cipta terjemahan baru daripadanya." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Bekerjasama dalam terjemahan dengan Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Muat turun fail daripada projek Crowdin, terjemah dan segerakkan perubahan " +"anda kembali." + +msgid "What is Crowdin?" +msgstr "Apa itu Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Tida terdapat terjemahan. Ini luar biasa." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Masukan boleh diterjemah tidak ditambah secara manual dalam sistem Getttext, " +"tetapi diekstrak secara automatik\n" +"daripada kod sumber. Dengan cara ini, ianya akan sentiasa dikemaskini dan " +"jitu.\n" +"Penterjemah kebiasaannya menggunakan fail templat PO (POT) yang disediakan " +"untuk mereka oleh pembangun." + +msgid "(Learn more about GNU gettext)" +msgstr "(Ketahui lebih lanjut mengenai GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Cara paling mudah untuk mengisi katalog ini adalah dengan mengemaskini " +"daripada POT:" + +msgid "Update from POT" +msgstr "Kemaskini dari POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Ambil rentetan boleh diterjemah daripada templat POT sedia ada." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Anda boleh ekstrak rentetan boleh diterjemah secara terus daripada kod " +"sumber:" + +msgid "Extract from sources" +msgstr "Ekstrak daripada sumber" + +msgid "Configure source code extraction in Properties." +msgstr "Konfigur pengekstrakan kod sumber pada Ciri-ciri." + +msgid "Sync" +msgstr "Segerak" + +msgid "Synchronize the translation with Crowdin" +msgstr "Menyegerakkan terjemahan dengan Crowdin" diff --git a/locales/nb.mo b/locales/nb.mo new file mode 100644 index 0000000000000000000000000000000000000000..a19adf244247070c56debf1684c3c0e27c833995 GIT binary patch literal 44315 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 literal 0 HcmV?d00001 diff --git a/locales/nb.po b/locales/nb.po new file mode 100644 index 0000000..454d04c --- /dev/null +++ b/locales/nb.po @@ -0,0 +1,1949 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:04-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Norwegian Bokmal\n" +"Language: nb_NO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: nb\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Skjul denne melding" + +msgid "Don't Show Again" +msgstr "Ikke vis igjen" + +msgid "Don't show again" +msgstr "Ikke vis igjen" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i linje i filen \"%s\" ble ikke lastet riktig." +msgstr[1] "%i linjer i filen '%s' ble ikke lastet riktig." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Linje %d i filen '%s' er korrupt (ugyldig %s data)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Ugyldig topptekst: «%s»" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "Ødelagt katalogfil: entallsform msgstr brukt sammen med msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Ødelagt katalogfil: flertallsform msgstr brukt uten msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Det oppstod feil ved lasting av denne katalogen. Som et resultat kan noe " +"data mangle eller være ødelagt." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Klarte ikke laste filen «%s». Den er sannsynligvis ødelagt." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"File «%s» er skrivebeskyttet og kan ikke lagres til.\n" +"Velg et annet navn å lagre under." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Kunne ikke lagre filen %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Det oppstod et problem med å formatere filen på pent vis (men den ble lagret " +"OK)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalogen kunne ikke bli lagret i '%s'-tegnsett som spesifisert i " +"kataloginnstillingene.\n" +"\n" +"Den ble lagret i UTF-8 i stedet og innstillingen ble endret deretter." + +msgid "Error saving catalog" +msgstr "Feil ved lagring av katalog" + +msgid "PO Translation Files" +msgstr "PO oversettelsesfiler" + +msgid "POT Translation Templates" +msgstr "POT Oversettelsesmaler" + +msgid "All Translation Files" +msgstr "Alle oversettelsesfiler" + +msgid "Merging differences..." +msgstr "Slår sammen endringer ..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "«%s» er ikke en gyldig POT-fil." + +msgid "(Use default language)" +msgstr "(Bruk standard språk)" + +msgid "Select your preferred language" +msgstr "Velg foretrukket språk" + +msgid "Language selection" +msgstr "Språk valg" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Du må restarte Poedit for at denne endringene skal bli tatt i bruk." + +msgid "Downloading translations is disabled in this project." +msgstr "Nedlasting av oversettelser er deaktivert i dette prosjektet." + +msgid "Not authorized, please sign in again." +msgstr "Ikke autorisert, vennligst logg inn igjen." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin er en plattform for lokaliseringsbehandling og et samarbeidende " +"oversettelsesverktøy på nett. Poedit kan sømløst synkronisere PO-filer som " +"håndteres på Crowdin." + +msgid "Sign In" +msgstr "Logg inn" + +msgid "Sign in" +msgstr "Logg inn" + +msgid "Sign Out" +msgstr "Logg ut" + +msgid "Sign out" +msgstr "Logg ut" + +msgid "Waiting for authentication…" +msgstr "Venter på godkjenning..." + +msgid "Updating user information…" +msgstr "Oppdaterer brukerinformasjon..." + +msgid "Signed in as:" +msgstr "Pålogget som:" + +msgid "Learn More About Crowdin" +msgstr "Lær mer om Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Lær mer om Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Logg inn på Crowdin" + +msgid "Open Crowdin translation" +msgstr "Åpne Crowdin-oversettelse" + +msgid "Project:" +msgstr "Prosjekt:" + +msgid "Language:" +msgstr "&Språk:" + +msgid "File:" +msgstr "Fil:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Ingen oversettelsesprosjekter er listet i din Crowdin-konto." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Dette prosjektet har ingen filer som kan oversettes i Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Denne filen kan kun redigeres i Crowdin sitt web-grensesnitt." + +msgid "Downloading latest translations…" +msgstr "Laster ned nyeste oversettelser..." + +msgid "Syncing with Crowdin" +msgstr "Synkroniserer med Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synkronisering med Crowdin mislyktes." + +msgid "Crowdin error" +msgstr "Crowdin-feil" + +msgid "Uploading translations…" +msgstr "Laster opp oversettelser..." + +msgid "&Copy" +msgstr "Kopier" + +msgid "Learn more" +msgstr "Lær mer" + +msgid "Learn More" +msgstr "Lær mer" + +#, c-format +msgid "Failed command: %s" +msgstr "Kommandoen mislyktes: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Klarte ikke slå sammen gettex-kataloger." + +msgid "Scanning files..." +msgstr "Skanner filer ..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Tolker %s filer ..." + +msgid "Failed to load extracted catalog." +msgstr "Klarte ikke laste utpakket katalog." + +msgid "&Help" +msgstr "&Hjelp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO-filer kan ikke redigeres direkte i Poedit." + +msgid "Error opening file" +msgstr "Feil med åpning av fil" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Vennligst åpne og rediger den tilsvarende PO-filen i stedet. Når du lagrer " +"den, oppdateres MO-filen også." + +msgid "don't delete temporary files (for debugging)" +msgstr "ikke slett midlertidige filer (for feilsøking)" + +msgid "handle a poedit:// URI" +msgstr "håndter en poedit://-URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Kunne ikke kommunisere med Poedit-prosess." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Ubehandlet unntak oppstod: %s" + +msgid "Unhandled exception occurred." +msgstr "Ubehandlet unntak oppstod." + +msgid "Open catalog" +msgstr "Åpne katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Fila «%s» fins ikke." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Om %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versjon %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Tjenester" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Skjul %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Skjul andre" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Vis alle" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Avslutt %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit er et skriveprogram for oversettelse som er enkelt å bruke." + +msgid "Catalogs Manager" +msgstr "Katalogbehandling" + +msgid "Check for Updates..." +msgstr "Se etter oppdatering..." + +msgid "&Edit" +msgstr "&Rediger" + +msgid "Undo" +msgstr "Angre" + +msgid "Redo" +msgstr "Gjør om" + +msgid "Paste and Match Style" +msgstr "Lim og samsvar med stil" + +msgid "Delete" +msgstr "Slett" + +msgid "Spelling and Grammar" +msgstr "Stavekontroll og grammatikk" + +msgid "Show Spelling and Grammar" +msgstr "Vis stavekontroll og grammatikk" + +msgid "Check Document Now" +msgstr "Sjekk dokumentet nå" + +msgid "Check Spelling While Typing" +msgstr "Stavekontroll mens du skriver" + +msgid "Check Grammar With Spelling" +msgstr "Kontroller grammatikk i stavekontrollen" + +msgid "Correct Spelling Automatically" +msgstr "Korrigere stavefeil automatisk" + +msgid "Substitutions" +msgstr "Erstatninger" + +msgid "Show Substitutions" +msgstr "Vis erstatninger" + +msgid "Smart Copy/Paste" +msgstr "Enkel Kopiering/Lim inn" + +msgid "Smart Quotes" +msgstr "Apostroff" + +msgid "Smart Dashes" +msgstr "Enkle punkter" + +msgid "Smart Links" +msgstr "Enkle lenker" + +msgid "Text Replacement" +msgstr "Teksterstatning" + +msgid "Transformations" +msgstr "Transformasjoner" + +msgid "Make Upper Case" +msgstr "Gjør om til store bokstaver" + +msgid "Make Lower Case" +msgstr "Gjør om til små bokstaver" + +msgid "Capitalize" +msgstr "Stor forbokstav" + +msgid "Speech" +msgstr "Tale" + +msgid "Start Speaking" +msgstr "Begynn å snakke" + +msgid "Stop Speaking" +msgstr "Slutt å snakke" + +msgid "&View" +msgstr "&Vis" + +msgid "Enter Full Screen" +msgstr "Gå til fullskjerm" + +msgid "Window" +msgstr "Vindu" + +msgid "Minimize" +msgstr "Minimer" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Bring All to Front" +msgstr "Plasser fremst" + +msgid "PO Translation" +msgstr "PO-oversettelse" + +msgid "The file cannot be opened." +msgstr "Filen kunne ikke åpnes." + +msgid "Invalid file" +msgstr "Ugyldig fil" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Filen kan være skadet eller i et format som ikke gjenkjennes av Poedit." + +msgid "&Undo" +msgstr "&Angre" + +msgid "&Redo" +msgstr "Gjø&r om" + +msgid "Cu&t" +msgstr "Klipp &ut" + +msgid "Cut" +msgstr "Klipp ut" + +msgid "Copy" +msgstr "Kopier" + +msgid "&Paste" +msgstr "&Lim inn" + +msgid "Paste" +msgstr "Lim inn" + +msgid "&Delete" +msgstr "&Slett" + +msgid "Select &All" +msgstr "&Merk alle" + +msgid "Select All" +msgstr "Merk alle" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Skriv" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Opp" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Ned" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Du kan ikke dra mer enn éi fil til Poedit-vinduet." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Filen '%s' er ikke en meldingskatalog." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fil" + +msgid "&Go" +msgstr "&Gå" + +msgid "Source text:" +msgstr "Kildetekst:" + +msgid "Singular:" +msgstr "Entall:" + +msgid "Plural:" +msgstr "Flertall:" + +msgid "Translation:" +msgstr "Oversettelse:" + +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-filer er bare maler og inneholder ikke noen oversettelser i seg selv.\n" +"For å lage en oversettelse, opprett en ny PO-fil basert på malen." + +msgid "Create New Translation" +msgstr "Opprett ny oversettelse" + +msgid "Create new translation" +msgstr "Opprett ny oversettelse" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "Stavekontroll er deaktivert fordi ordlisten for %s ikke er installert." + +msgid "Install" +msgstr "Installer" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalogen er endret. Vil du lagre endringene?" + +msgid "Save changes" +msgstr "Lagre endringer" + +msgid "Your changes will be lost if you don't save them." +msgstr "Endringene vil gå tapt hvis du ikke lagrer dem." + +msgid "Save" +msgstr "Lagre" + +msgid "Don't save" +msgstr "Ikke lagre" + +msgid "Don't Save" +msgstr "Ikke lagre" + +msgid "Save as..." +msgstr "Lagre som ..." + +msgid "Compile to..." +msgstr "Kompiler til..." + +msgid "Compiled Translation Files" +msgstr "Kompilert oversettelsesfiler" + +msgid "Export as..." +msgstr "Eksporter som..." + +msgid "HTML Files" +msgstr "HTML-filer" + +msgid "Open catalog template" +msgstr "Åpne katalogmal" + +msgid "Updating catalog" +msgstr "Oppdaterer katalog" + +msgid "Source code not available." +msgstr "Kildekode er ikke tilgjengelig." + +msgid "Updating failed" +msgstr "Oppdatering mislyktes" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Oversettelser kunne ikke oppdateres fra kildekoden fordi det ikke fantes " +"noen kode på plasseringen spesifisert i katalogens egenskaper." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Oppføringene i katalogen er sannsynligvis ikke i orden." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"Oppdatering av katalog mislyktes. Klikk på \"Detaljer >>' for detaljer." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problem med oversettelsen funnet." +msgstr[1] "%d problemer med oversettelsen funnet." + +msgid "Validation results" +msgstr "Resultater av validering" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Poster med feil ble markert med rødt i listen. Detaljer om feilen vises når " +"du velger slik oppføring." + +msgid "The file was saved safely." +msgstr "Filen ble trygt lagret.." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Filen ble trygt lagret og kompilert i MO-format, men vil sannsynligvis ikke " +"fungere riktig." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Filen ble trygt lagret, men kunne ikke bli kompilert i MO-format og brukes." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Filen ble kompilert i MO-format, men vil sannsynligvis ikke fungere riktig." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Filen kunne ikke kompileres inn i MO-formatet og brukes." + +msgid "No problems with the translation found." +msgstr "Ingen problemer med oversettelsen funnet." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"Oversettelsen er klar til bruk, men %d oppføringen er ikke oversatt enda." +msgstr[1] "" +"Oversettelsen er klar til bruk, men %d strenger er ikke oversatt enda." + +msgid "The translation is ready for use." +msgstr "Oversettelsen er klar til bruk." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit ordner automatisk innholdet i filen “%s”." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Filen inneholder dupliserte elementer, som ikke er tillatt i PO-filer og vil " +"hindre at filen blir brukt. Poedit har løst problemet, men du bør vurdere " +"oversettelser av alle elementer merket som suspekt og rette dem om nødvendig." + +msgid "Language of the translation isn't set." +msgstr "Språk oversettelsen er ikke satt." + +msgid "Set Language" +msgstr "Angi språk" + +msgid "Set language" +msgstr "Angi språk" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Forslag er ikke tilgjengelig hvis oversettelsespråket ikke er riktig angitt. " +"Andre funksjoner, for eksempel flertallsformer, påvirkes også." + +msgid "Language of the translation is the same as source language." +msgstr "Språket i oversettelsen er det samme som kilde språk." + +msgid "Fix Language" +msgstr "Fastsette språk" + +msgid "Fix language" +msgstr "Fastsette språk" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Denne katalogen har oppføringer med flertallsformer, men har ikke " +"flertallsformer konfigurert i overskriften ." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Oppføringer i denne katalogen har forskjellige flertallsformer ut fra hva " +"katalogens flertallsformer hodet sier" + +msgid "Required header Plural-Forms is missing." +msgstr "Påkrevet flertallsformer i hodet mangler." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaksfeil i flertallsformer hode (\"%s\")." + +msgid "Fix the Header" +msgstr "Reparer hode" + +msgid "Fix the header" +msgstr "Reparer hode" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Flertallsformer uttrykket som brukes av katalogen er uvanlig for %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Gjennomgang" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Feil ved åpning av meldingskatalogfila «%s»" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Oversatt: %d av %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Gjenstår: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d feil" +msgstr[1] "%d feil" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d oppføring" +msgstr[1] "%d oppføringer" + +msgid " (unsaved)" +msgstr " (ulagret)" + +msgid " (modified)" +msgstr " (endret)" + +msgid "Go" +msgstr "Gå" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Kan ikke oppdatere oversetting minne: %s" + +msgid "Purge deleted translations" +msgstr "Fjern slettede oversettelser" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Vil du fjerne alle oversettelser som ikke lenger brukes?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Hvis du fortsetter med rensingen, vil alle oversettelser merket som slettet " +"fjernes permanent. Du må oversette dem igjen hvis de legges tilbake i " +"fremtiden." + +msgid "Keep" +msgstr "Behold" + +msgid "Purge" +msgstr "Tømme" + +msgid "Fill missing translations from TM" +msgstr "Utfyll oversettelser fra TM" + +msgid "Only fill in exact matches" +msgstr "Bare fylle ut nøyaktige treff" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Som standard er unøyaktige resultater utfylt samt og merket som uklar. Sjekk " +"dette alternativet som bare inkluderer nøyaktig treff." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Ikke Merk nøyaktige treff som uklar" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Bare aktiver hvis du stoler på kvaliteten av din TM. Som standard vil alle " +"matchene fra TM bli merket som uklar og bør gjennomgås." + +msgid "Fill" +msgstr "Fyll ut" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d oppføringen ble fylt fra oversettelsesminne." +msgstr[1] "%d oppføringer ble fylt fra oversettelsesminnet." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Oversettelsene ble merket som uklar, fordi de kan være unøyaktig. Du bør " +"vurdere dem for korrekthet." + +msgid "No entries could be filled from the translation memory." +msgstr "Ingen oppføringer kan fylles fra oversettelsesminne." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM inneholder ikke strenger lik innholdet i denne filen. Det er bare " +"effektivt for semi-automatiske oversettelser som Poedit lærer fra filer som " +"du oversetter manuelt." + +msgid "Translating" +msgstr "Oversette" + +msgid "Filling missing translations from TM..." +msgstr "Fyll mangler oversettelser fra TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Oversatt %u streng" +msgstr[1] "Oversatt %u strenger" + +msgid "Copy from source text" +msgstr "Kopier fra kildeteksten" + +msgid "Copy from Source Text" +msgstr "Kopier fra kildeteksten" + +msgid "Clear translation" +msgstr "Tøm oversettelse" + +msgid "Clear Translation" +msgstr "Tøm oversettelse" + +msgid "Edit comment" +msgstr "Rediger kommentar" + +msgid "Edit Comment" +msgstr "Rediger kommentar" + +msgid "References:" +msgstr "Referanser:" + +msgid "Everything" +msgstr "Alt" + +#, c-format +msgid "Form %i" +msgstr "Form %i" + +msgid "Singular" +msgstr "Entall" + +msgid "Zero" +msgstr "Null" + +msgid "One" +msgstr "En" + +msgid "Two" +msgstr "To" + +msgid "Plural" +msgstr "Flertall" + +msgid "Other" +msgstr "Andre" + +msgid "&Bookmarks" +msgstr "&Bokmerker" + +#, c-format +msgid "Set bookmark %i" +msgstr "Angi bokmerke %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Gå til bokmerke %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Angi bokmerke %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Gå til bokmerke %i" + +msgid "Hide Sidebar" +msgstr "Skjul Sidepanel" + +msgid "Show Sidebar" +msgstr "Vis Sidepanel" + +msgid "Hide Status Bar" +msgstr "Skjul statuslinje" + +msgid "Show Status Bar" +msgstr "Vis statuslinje" + +msgid "Source text" +msgstr "Kildetekst" + +msgid "Translation" +msgstr "Oversettelse" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Kildetekst — %s" + +msgid "unknown language" +msgstr "Ukjent språk" + +#, c-format +msgid "Translation — %s" +msgstr "Oversettelse-%s" + +msgid "Error:" +msgstr "Feil:" + +msgid "Source file" +msgstr "Kildefil" + +msgid "Source file occurrence:" +msgstr "Kilde fil forekomst:" + +msgid "Open in Editor" +msgstr "Åpne i redigeringsprogram" + +msgid "Open in editor" +msgstr "Åpne i redigeringsprogram" + +msgid "No references for the selected item." +msgstr "Ingen referanser for det valgte elementet." + +#, c-format +msgid "Error opening file %s!" +msgstr "Feil ved åpning av fila «%s»." + +msgid "Find" +msgstr "Finn" + +msgid "Replace" +msgstr "Erstatt" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Alternativer" + +msgid "Ignore case" +msgstr "Ignorer små/STORE bokstaver" + +msgid "Wrap around" +msgstr "Pakk rundt" + +msgid "Whole words only" +msgstr "Bare hele ord" + +msgid "Find in source texts" +msgstr "Finn i kilde tekster" + +msgid "Find in translations" +msgstr "Finn i oversettelser" + +msgid "Find in comments" +msgstr "Finn i kommentarer" + +msgid "Close" +msgstr "Lukk" + +msgid "Replace All" +msgstr "Erstatt alle" + +msgid "Replace all" +msgstr "Erstatt alle" + +msgid "< &Previous" +msgstr "" +msgstr "&Neste >" + +msgid "String to find" +msgstr "Streng å finne" + +msgid "Replacement string" +msgstr "Erstattingsstreng" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Kan ikke kjøre program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Språkkode eller navn (f.eks no)" + +msgid "Translation Language" +msgstr "Oversettelsespråket" + +msgid "Language of the translation:" +msgstr "Språk oversettelse:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Kataloghåndterer" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Totalt" + +msgid "Untrans" +msgstr "Ikke oversettbart" + +msgid "Fuzzy" +msgstr "Uklare" + +msgid "Bad Tokens" +msgstr "Feil symbol" + +msgid "Last modified" +msgstr "Sist endret" + +msgid "Select directory" +msgstr "Velg mappe" + +msgid "Directories:" +msgstr "Mapper:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Vil du slette prosjektet?" + +msgid "Confirmation" +msgstr "Bekreftelse" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Vil du virkelig gjøre masseoppdatering av\n" +"alle katalogene i prosjektet?" + +msgid "Information about the translator" +msgstr "Informasjon om oversetteren" + +msgid "Name:" +msgstr "Navn:" + +msgid "Your Name" +msgstr "Ditt navn" + +msgid "Email:" +msgstr "Epost:" + +msgid "your_email@example.com" +msgstr "din_epost@eksempel.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Navn og e-postadresse brukes bare for å angi overskriften til siste-" +"oversetter GNU gettext filer." + +msgid "Editing" +msgstr "Redigering" + +msgid "Automatically compile MO file when saving" +msgstr "Automatisk kompiler MO filen ved lagring" + +msgid "Show summary after catalog update" +msgstr "&Vis sammendrag etter katalogoppdatering" + +msgid "Check spelling" +msgstr "Stavekontroll" + +msgid "Always change focus to text input field" +msgstr "&Fokuser automatisk på oversettelsesfeltet" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"La aldri tekstlista få fokus. Du må bruka «Ctrl + piltast» for å flytte " +"mellom tekstene, men kan skrive direkte, uten å måtte trykke på «Tab» først." + +msgid "Appearance" +msgstr "Utseende" + +msgid "Use custom list font:" +msgstr "Bruk egendefinert liste skrift:" + +msgid "Use custom text fields font:" +msgstr "Bruk egendefinerte felt skrift:" + +msgid "Change UI language" +msgstr "Sett språk for brukergrensesnitt" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(krever Windows 8 eller nyere)" + +msgid "General" +msgstr "Generelt" + +msgid "Use translation memory" +msgstr "Bruk oversettelsesminne" + +msgid "Learn From Files..." +msgstr "Lær fra filer..." + +msgid "Learn from files..." +msgstr "Lær fra filer..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Tilbakestill" + +msgid "Consult TM when updating from sources" +msgstr "Kontakt TM ved oppdatering fra kilder" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Hvis aktivert, prøver Poedit å fylle ut nye oppføringer ved hjelp av din " +"forrige\n" +"oversettelse lagret i oversettelse minnet. Hvis TM er\n" +"nærmest tom, vil det ikke være svært effektiv. Jo flere oversettelser\n" +"du redigerer og jo større TM vokser, jo bedre blir det." + +msgid "Stored translations:" +msgstr "Lagrede oversettelser:" + +msgid "Database size on disk:" +msgstr "Databasestørrelsen på disk:" + +msgid "Select translation files to import" +msgstr "Velg oversettelsesfiler til import" + +msgid "Translation Memory" +msgstr "Oversettelsesminne" + +msgid "Importing translations..." +msgstr "Importerer oversettelser..." + +msgid "Finalizing..." +msgstr "Fullfører..." + +msgid "Reset translation memory" +msgstr "Tilbakestill oversetting minne" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Er du sikker på at du vil tilbakestille oversettelse minnet?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Tilbakestille oversettelsesminne vil ugjenkallelig slette alle lagrede " +"oversettelser fra den. Du kan ikke angre operasjonen." + +msgid "Cancel" +msgstr "&Avbryt" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Kildekode utpakker brukes til å finne oversettbare strenger i kildekodefiler " +"og pakke dem ut slik at de kan oversettes." + +msgid "New" +msgstr "&Ny" + +msgid "Edit" +msgstr "&Rediger" + +msgid "Delete extractor" +msgstr "Slett ekstraktor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Er du sikker på at du vil slette \"%s\" ekstraktor?" + +msgid "Extractors" +msgstr "Utpakker" + +msgid "Accounts" +msgstr "Kontoer" + +msgid "Automatically check for updates" +msgstr "Automatisk se etter oppdateringer" + +msgid "Include beta versions" +msgstr "Inkluder betaversjoner" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-versjoner inneholder de nyeste funksjonene og forbedringene, men kan " +"være litt mindre stabil." + +msgid "Updates" +msgstr "Oppdateringer" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Disse innstillingene påvirker interne formateringen av PO-filer. Juster dem " +"hvis du har bestemte krav f.eks på grunn av versjonskontroll." + +msgid "Line endings:" +msgstr "Linjeavslutninger:" + +msgid "Unix (recommended)" +msgstr "UNIX (anbefales)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Vikle på:" + +msgid "Preserve formatting of existing files" +msgstr "Beholde formateringen av eksisterende filer" + +msgid "Advanced" +msgstr "Avansert" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s preferanser" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Dra og slipp mapper her \n" +"\n" +"eller bruk + knappen" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Dra og slipp mapper her \n" +"\n" +"eller bruk + knappen" + +msgid "Add Folders..." +msgstr "Legg til mapper..." + +msgid "Add folders..." +msgstr "Legg til mapper..." + +msgid "Add Files..." +msgstr "Legg til filer..." + +msgid "Add files..." +msgstr "Legg til filer..." + +msgid "Add Wildcard..." +msgstr "Legg til jokertegn..." + +msgid "Add wildcard..." +msgstr "Legg til jokertegn..." + +msgid "Paths" +msgstr "Stier" + +msgid "Excluded paths" +msgstr "Ekskluderte baner" + +msgid "Additional keywords" +msgstr "Flere søkeord" + +msgid "Name of the project the translation is for" +msgstr "Navnet på prosjektet oversettelsen er for" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "f.eks nplurals = 2; flertall = (n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (anbefales)" + +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 "Comment:" +msgstr "Kommentar:" + +msgid "OK" +msgstr "&OK" + +msgid "C&lear" +msgstr "Tøm" + +msgid "Clear the comment" +msgstr "Fjern kommentaren" + +msgid "Create new translations project" +msgstr "Lag nytt oversettelsesprosjekt" + +msgid "Edit the project" +msgstr "Rediger prosjekt" + +msgid "Delete the project" +msgstr "Slett prosjekt" + +msgid "Update all" +msgstr "Oppdater alle" + +msgid "Update all catalogs in the project" +msgstr "Oppdater alle katalogene i prosjektet" + +msgid "Edit project" +msgstr "Rediger prosjekt" + +msgid "Project name:" +msgstr "Prosjektnavn:" + +msgid "Browse" +msgstr "Bla &gjennom" + +msgid "Add directory to the list" +msgstr "Legg katalog til lista" + +msgid "&New..." +msgstr "&Ny..." + +msgid "New from &POT/PO file..." +msgstr "Ny fra &POT/PO fil..." + +msgid "New From &POT/PO File..." +msgstr "Ny fra &POT/PO fil..." + +msgid "&Open..." +msgstr "&Åpne ..." + +msgid "Open Recent" +msgstr "Åpne siste" + +msgid "Open from Crowdin..." +msgstr "Åpne fra Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Åpne fra Crowdin..." + +msgid "&Close" +msgstr "&Avslutt" + +msgid "&Save" +msgstr "La&gre" + +msgid "Save &as..." +msgstr "Lagre &som ..." + +msgid "Save &As..." +msgstr "L&agre som..." + +msgid "Compile to MO..." +msgstr "Kompiler til Mo..." + +msgid "E&xport as HTML..." +msgstr "Eksporter som HTML..." + +msgid "Check for updates..." +msgstr "Se etter oppdateringer..." + +msgid "&Preferences..." +msgstr "&Innstillinger ..." + +msgid "Catalogs &manager" +msgstr "Katalog&håndterer" + +msgid "Catalogs &Manager" +msgstr "Kataloger Behandler" + +msgid "E&xit" +msgstr "Avslutt" + +msgid "Quit" +msgstr "Avslutt" + +msgid "Copy from singular" +msgstr "Kopier fra entall" + +msgid "Copy From Singular" +msgstr "Kopier fra entall" + +msgid "Translation is &fuzzy" +msgstr "&Uklar oversettelse" + +msgid "Translation Is &Fuzzy" +msgstr "Oversettelse er uklar" + +msgid "Edit &comment" +msgstr "&Rediger kommentar" + +msgid "Edit &Comment" +msgstr "Rediger kommentar" + +msgid "Suggestions" +msgstr "Forslag" + +msgid "&Show references" +msgstr "&Vis referanser" + +msgid "&Show References" +msgstr "Vi&s referanser" + +msgid "&Find..." +msgstr "Søk &etter ..." + +msgid "Replace..." +msgstr "Erstatt..." + +msgid "Find next" +msgstr "Finn neste" + +msgid "Find previous" +msgstr "Finn forrige" + +msgid "Find and Replace..." +msgstr "Søk og erstatt..." + +msgid "Find Next" +msgstr "Finn neste" + +msgid "Find Previous" +msgstr "Finn forrige" + +msgid "&Preferences" +msgstr "&Innstillinger" + +msgid "Display entry &IDs" +msgstr "Vis oppførings &ID'er" + +msgid "Display Entry &IDs" +msgstr "Vis oppførings &ID'er" + +msgid "Sort by &file order" +msgstr "Sorter etter &fil rekkefølge" + +msgid "Sort by &File Order" +msgstr "Sorter etter &fil rekkefølge" + +msgid "Sort by &source" +msgstr "Sorter etter kilde" + +msgid "Sort by &Source" +msgstr "Sorter etter kilde" + +msgid "Sort by &translation" +msgstr "Sorter etter overse&ttelse" + +msgid "Sort by &Translation" +msgstr "Sorter etter overse&ttelse" + +msgid "&Group by context" +msgstr "&Grupper på kontekst" + +msgid "&Group By Context" +msgstr "&Grupper på kontekst" + +msgid "Entries with errors first" +msgstr "Poster med feil først" + +msgid "Entries with Errors First" +msgstr "Poster med feil først" + +msgid "&Untranslated entries first" +msgstr "&Uoversatte poster først" + +msgid "&Untranslated Entries First" +msgstr "&Uoversatte poster først" + +msgid "Show sidebar" +msgstr "Vis Sidepanel" + +msgid "Show status bar" +msgstr "Vis statuslinje" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Oppdater fra kilden" + +msgid "&Update from Sources" +msgstr "Oppdater fra kilde" + +msgid "Update from &POT file..." +msgstr "Oppdater fra &POT-fil..." + +msgid "Update from &POT File..." +msgstr "Oppdater fra &POT-fil..." + +msgid "Sync with Crowdin" +msgstr "Synkroniser med Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Utfyll oversettelser fra &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Utfyll oversettelser fra &TM..." + +msgid "&Purge deleted translations" +msgstr "&Fjern slettede oversettelser" + +msgid "&Purge Deleted Translations" +msgstr "Fjern slettede oversettelser" + +msgid "&Validate translations" +msgstr "&Valider oversettelser" + +msgid "&Validate Translations" +msgstr "&Valider oversettelser" + +msgid "&Properties..." +msgstr "Egenska&per..." + +msgid "&Done and next" +msgstr "Utført og neste" + +msgid "&Done and Next" +msgstr "Utført og neste" + +msgid "&Previous translation" +msgstr "Tidligere oversettelse" + +msgid "&Previous Translation" +msgstr "Tidligere oversettelse" + +msgid "&Next translation" +msgstr "&Neste oversettelse" + +msgid "&Next Translation" +msgstr "&Neste oversettelse" + +msgid "P&revious unfinished" +msgstr "Fo&rrige uferdige" + +msgid "P&revious Unfinished" +msgstr "Fo&rrige uferdige" + +msgid "Ne&xt unfinished" +msgstr "Neste uferdige" + +msgid "Ne&xt Unfinished" +msgstr "Neste uferdige" + +msgid "Previous plural form" +msgstr "Forrige flertallsform" + +msgid "Previous Plural Form" +msgstr "Forrige flertallsform" + +msgid "Next plural form" +msgstr "Neste flertallsform" + +msgid "Next Plural Form" +msgstr "Neste flertallsform" + +msgid "&Online help" +msgstr "Hjelp på nett" + +msgid "&Online Help" +msgstr "Hjelp på nett" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext-dokumentasjon" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext-dokumentasjon" + +msgid "&About Poedit" +msgstr "Om Poedit" + +msgid "&About" +msgstr "Om" + +msgid "Extractor setup" +msgstr "Utpakker oppsett" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Liste over etternavn skilt med semikolon (f.eks. «*.cpp; *.h»):" + +msgid "Invocation:" +msgstr "Start: " + +msgid "Command to extract translations:" +msgstr "Kommando for å pakke ut oversettelser:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Denne kommandoen brukes til å starte utpakker.\n" +"%o utvides til navnet på utdatafilen, %K å liste\n" +"av søkeord, %F listen over inndata filer,\n" +"%C til karaktersett flagg (se nedenfor)." + +msgid "An item in keywords list:" +msgstr "Et element i lista over nøkkelord:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Dette blir lagt til kommandolinja en gang\n" +"for hvert nøkkelord. %k blir utvidet til nøkkelorda." + +msgid "An item in input files list:" +msgstr "Et element i lista over inndatafiler:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Dette blir lagt til kommandolinja en gang\n" +"for hver inndatafil. %f blir utvidet til filnavnet." + +msgid "Source code charset:" +msgstr "Kildekodetegnsett:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Dette blir lagt til kommandolinja bare hvis\n" +"kildekodetegnsett ble angitt. %c blir utvidet til tegnsettets verdi." + +msgid "Catalog properties" +msgstr "Katalog egenskaper" + +msgid "Project name and version:" +msgstr "&Prosjektnavn og -versjon:" + +msgid "Plural Forms:" +msgstr "Flertallsformer:" + +msgid "Use default rules for this language" +msgstr "Bruk standardregler for dette språket" + +msgid "Use custom expression" +msgstr "Bruke egendefinerte uttrykk" + +msgid "Learn about plural forms" +msgstr "Lær om flertallsformer" + +msgid "Charset:" +msgstr "&Tegnkoding:" + +msgid "Team:" +msgstr "&Lag:" + +msgid "Team's email address:" +msgstr "&E-post-adressen til laget:" + +msgid "Translation properties" +msgstr "Egenskaper for oversettelse" + +msgid "Sources paths" +msgstr "Kildebaner" + +msgid "Extract text from source files in the following directories:" +msgstr "Trekk ut tekst fra kildefiler i følgende kataloger:" + +msgid "Base path:" +msgstr "&Grunnsti:" + +msgid "Sources keywords" +msgstr "Kilder nøkkelord" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Bruk disse nøkkelordene (funksjonsnavn) til å gjenkjenne oversettbare " +"strenger\n" +"i kildefiler:" + +msgid "Learn about gettext keywords" +msgstr "Lær om gettext søkeord" + +msgid "Update summary" +msgstr "Sammendrag" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Disse tekstene fins i kildefilene, men ikke i katalogen.\n" +"De blir derfor lagt til katalogen." + +msgid "New strings" +msgstr "Nye tekster" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Disse tekstene fins ikke lenger i kildefilene.\n" +"De blir derfor fjernet fra katalogen." + +msgid "Obsolete strings" +msgstr "Utgåtte strenger" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nye, 0 utgåtte)" + +msgid "Open" +msgstr "Åpne" + +msgid "Save catalog" +msgstr "Lagre katalog" + +msgid "Validate" +msgstr "Validere" + +msgid "Check for errors in the translation" +msgstr "Se etter feil i oversettelse" + +msgid "Update" +msgstr "Oppdater" + +msgid "Update catalog - synchronize it with sources" +msgstr "Oppdater katalog" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Uklar oversettelse" + +msgid "Show or hide the sidebar" +msgstr "Vis eller Skjul sidepanelet" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Tidligere kildetekst:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Gammel kilde tekst (før det endres under en oppdatering) som samsvarer med " +"fuzzy oversettelsen." + +msgid "Notes for translators:" +msgstr "Notater for oversettere:" + +msgid "Add comment" +msgstr "Legg til kommentar" + +msgid "Add Comment" +msgstr "Legg til kommentar" + +msgid "Translation suggestions:" +msgstr "Oversettelse forslag:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Ingen treff funnet" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Ingen treff funnet" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Denne strengen ble funnet i Poedits oversettelsesminne." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Ny: %i, foreldet: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Importerer oversettelser: %d" + +msgid "Poedit Update" +msgstr "Poedit oppdatering" + +msgid "Preparing migration..." +msgstr "Forbereder overføring..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Avslutt overføringsstatus: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit trenger å konvertere hukommelse oversettelse til et nytt format." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Dette må gjøres før Poedit kan starte. Det kan ta noen minutter hvis du har " +"mange oversettelser lagret, men bør normalt være mye raskere." + +msgid "Proceed" +msgstr "&Fortsett" + +msgid "Translation memory migration failed." +msgstr "Oversettelse minne overføring mislyktes." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Oversettelse minne dataene kunne ikke overføres. Feil var:\n" +"\n" +"%s\n" +"Vennligst send e-post til help@poedit.net og vi vil få det løst." + +msgid "Cannot create temporary directory." +msgstr "Kan ikke opprette midlertidig katalog." + +msgid "Welcome to Poedit" +msgstr "Velkommen til Poedit" + +msgid "Edit a translation" +msgstr "Redigere en oversettelse" + +msgid "Open an existing PO file and edit the translation." +msgstr "Åpne en eksisterende PO-fil og redigere oversettelsen." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Ta en eksisterende PO-fil eller POT mal og opprette en ny oversettelse fra " +"den." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Samarbeid om en oversettelse med Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Last ned en fil fra Crowdin-prosjekt, oversett og synkroniser endringene " +"dine tilbake." + +msgid "What is Crowdin?" +msgstr "Hva er Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Det finnes ingen oversettelser. Det er uvanlig." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Oversettbare oppføringer legges ikke manuelt i Gettext systemet, men er " +"automatisk utviklet\n" +"fra kildekoden. På denne måten vil de bli oppdatert og nøyaktig. \n" +"Oversettere bruker vanligvis PO malfiler (POTs) beredt for dem av utvikleren." + +msgid "(Learn more about GNU gettext)" +msgstr "(Lær mer om GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Den enkleste måten å fylle denne katalogen er å oppdatere den fra en POT:" + +msgid "Update from POT" +msgstr "Oppdater fra POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Ta oversettbare strenger fra en eksisterende POT mal." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Du kan også hente oversettbare strenger direkte fra kildekoden:" + +msgid "Extract from sources" +msgstr "Utdrag fra kilder" + +msgid "Configure source code extraction in Properties." +msgstr "Konfigurere kilde koden utvinning i egenskaper." + +msgid "Sync" +msgstr "Synkroniser" + +msgid "Synchronize the translation with Crowdin" +msgstr "Synkroniser oversettelsen med Crowdin" diff --git a/locales/nl.mo b/locales/nl.mo new file mode 100644 index 0000000000000000000000000000000000000000..936a63dca7ea3e2aad726e223aee30540da001c4 GIT binary patch literal 46816 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 rd8nj5E)yOrCYW&(W{UGgufEO~y~K\n" +"Language-Team: Dutch\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: nl\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Deze melding verbergen" + +msgid "Don't Show Again" +msgstr "Niet meer weergeven" + +msgid "Don't show again" +msgstr "Niet meer weergeven" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "Regel %i van bestand '%s' is niet correct geladen." +msgstr[1] "Regels %i van bestand '%s' zijn niet correct geladen." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Regel %d van bestand '%s' is beschadigd (niet-geldige %s-gegevens)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Verkeerd vormgegeven header: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Beschadigd catalogusbestand: enkelvoudsvorm 'msgstr' gebruikt samen met " +"'msgid_plural'" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Beschadigd catalogusbestand: meervoudsvorm 'msgstr' gebruikt zonder " +"'msgid_plural'" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Er zijn fouten opgetreden bij het laden van de catalogus. Sommige gegevens " +"kunnen hierdoor ontbreken of corrupt zijn." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Bestand '%s' kon niet geladen worden, het is waarschijnlijk corrupt." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Bestand '%s' is 'alleen-lezen' en kan niet worden\n" +"opgeslagen. Gelieve het op te slaan onder een andere naam." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Bestand '%s' kon niet worden opgeslagen." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Er is een probleem opgetreden bij het netjes opmaken van het bestand (maar " +"het is wel opgeslagen)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"De catalogus kon niet opgeslagen worden met de '%s'-tekenset die opgegeven " +"is in de catalogus-instellingen.\n" +"\n" +"Hij werd in plaats daarvan opgeslagen in UTF8-formaat en de instelling werd " +"in overeenstemming daarmee aangepast." + +msgid "Error saving catalog" +msgstr "Fout bij het opslaan van de catalogus" + +msgid "PO Translation Files" +msgstr "PO-vertaalbestanden" + +msgid "POT Translation Templates" +msgstr "POT-vertaalsjablonen" + +msgid "All Translation Files" +msgstr "Alle vertalingsbestanden" + +msgid "Merging differences..." +msgstr "Samenvoegen van verschillen..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' is geen geldig POT-bestand." + +msgid "(Use default language)" +msgstr "(Gebruik de standaardtaal)" + +msgid "Select your preferred language" +msgstr "Kies uw voorkeurstaal" + +msgid "Language selection" +msgstr "Taalselectie" + +msgid "You must restart Poedit for this change to take effect." +msgstr "U moet Poedit opnieuw starten voordat deze verandering effect heeft." + +msgid "Downloading translations is disabled in this project." +msgstr "Het downloaden van vertalingen is uitgeschakeld in dit project." + +msgid "Not authorized, please sign in again." +msgstr "Niet geautoriseerd, log a.u.b. opnieuw in." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin is een online lokaliserings-platform voor het beheren van, en het " +"samenwerken aan vertalingen. Poedit kan naadloos synchroniseren met de op " +"Crowdin beheerde PO-bestanden." + +msgid "Sign In" +msgstr "Inloggen" + +msgid "Sign in" +msgstr "Inloggen" + +msgid "Sign Out" +msgstr "Uitloggen" + +msgid "Sign out" +msgstr "Uitloggen" + +msgid "Waiting for authentication…" +msgstr "Wachten op autorisatie…" + +msgid "Updating user information…" +msgstr "Gebruikersinformatie bijwerken…" + +msgid "Signed in as:" +msgstr "Ingelogd als:" + +msgid "Learn More About Crowdin" +msgstr "Meer te weten komen over Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Meer te weten komen over Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Inloggen bij Crowdin" + +msgid "Open Crowdin translation" +msgstr "Crowdin-vertaling openen" + +msgid "Project:" +msgstr "Project:" + +msgid "Language:" +msgstr "Taal:" + +msgid "File:" +msgstr "Bestand:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Er zijn geen vertaalprojecten aanwezig in uw Crowdin-account." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Dit project bevat geen bestanden die vertaald kunnen worden in Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Dit bestand kan alleen bewerkt worden in de Crowdin-webinterface." + +msgid "Downloading latest translations…" +msgstr "De meest recente vertalingen downloaden…" + +msgid "Syncing with Crowdin" +msgstr "Synchroniseren met Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Synchronisatie met Crowdin mislukt." + +msgid "Crowdin error" +msgstr "Crowdin-fout" + +msgid "Uploading translations…" +msgstr "Vertalingen uploaden…" + +msgid "&Copy" +msgstr "&Kopiëren" + +msgid "Learn more" +msgstr "Meer informatie" + +msgid "Learn More" +msgstr "Meer informatie" + +#, c-format +msgid "Failed command: %s" +msgstr "Mislukte opdracht: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Gettext-catalogi samenvoegen mislukt." + +msgid "Scanning files..." +msgstr "Bestanden doorzoeken..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s bestanden aan het lezen..." + +msgid "Failed to load extracted catalog." +msgstr "Het laden van de geëxtraheerde catalogus is mislukt." + +msgid "&Help" +msgstr "&Hulp" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO-bestanden kunnen niet direct bewerkt worden in Poedit." + +msgid "Error opening file" +msgstr "Fout bij openen van bestand" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Open en bewerk in plaats daarvan het corresponderende PO-bestand. Als u dat " +"opslaat zal het MO-bestand ook bijgewerkt worden." + +msgid "don't delete temporary files (for debugging)" +msgstr "tijdelijke bestanden niet verwijderen (i.v.m. foutopsporing)" + +msgid "handle a poedit:// URI" +msgstr "omgaan met een poedit://-URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Communicatie met het Poedit-proces mislukt." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Er is een niet-verwerkte uitzondering opgetreden: %s" + +msgid "Unhandled exception occurred." +msgstr "Er is een niet-verwerkte uitzondering opgetreden." + +msgid "Open catalog" +msgstr "Catalogus openen" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Het bestand '%s' bestaat niet." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Over %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Versie %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Voorzieningen" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Verberg %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Verberg andere" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Toon alles" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Stop %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit is een eenvoudig te gebruiken vertalingsbewerker." + +msgid "Catalogs Manager" +msgstr "Catalogusbeheerder" + +msgid "Check for Updates..." +msgstr "Op updates controleren..." + +msgid "&Edit" +msgstr "B&ewerken" + +msgid "Undo" +msgstr "Ongedaan maken" + +msgid "Redo" +msgstr "Opnieuw" + +msgid "Paste and Match Style" +msgstr "Stijl plakken en overeen laten komen" + +msgid "Delete" +msgstr "Verwijderen" + +msgid "Spelling and Grammar" +msgstr "Spelling en grammatica" + +msgid "Show Spelling and Grammar" +msgstr "Spelling en grammatica weergeven" + +msgid "Check Document Now" +msgstr "Document nu controleren" + +msgid "Check Spelling While Typing" +msgstr "Controleer spelling tijdens typen" + +msgid "Check Grammar With Spelling" +msgstr "Grammatica en spelling controleren" + +msgid "Correct Spelling Automatically" +msgstr "Spelling automatisch corrigeren" + +msgid "Substitutions" +msgstr "Vervanging" + +msgid "Show Substitutions" +msgstr "Vervangingen weergeven" + +msgid "Smart Copy/Paste" +msgstr "Slim kopiëren/plakken" + +msgid "Smart Quotes" +msgstr "Slimme aanhalingstekens" + +msgid "Smart Dashes" +msgstr "Slimme streepjes" + +msgid "Smart Links" +msgstr "Slimme links" + +msgid "Text Replacement" +msgstr "Tekstvervanging" + +msgid "Transformations" +msgstr "Omzetting" + +msgid "Make Upper Case" +msgstr "Zet om in hoofdletters" + +msgid "Make Lower Case" +msgstr "Zet om in kleine letters" + +msgid "Capitalize" +msgstr "Zet om in beginhoofdletters" + +msgid "Speech" +msgstr "Spraak" + +msgid "Start Speaking" +msgstr "Beginnen met spreken" + +msgid "Stop Speaking" +msgstr "Stoppen met spreken" + +msgid "&View" +msgstr "&Bekijken" + +msgid "Enter Full Screen" +msgstr "Ga naar volledig scherm" + +msgid "Window" +msgstr "Venster" + +msgid "Minimize" +msgstr "Minimaliseren" + +msgid "Zoom" +msgstr "Zoomen" + +msgid "Bring All to Front" +msgstr "Alles naar de voorgrond brengen" + +msgid "PO Translation" +msgstr "PO-vertaling" + +msgid "The file cannot be opened." +msgstr "Het bestand kan niet geopend worden." + +msgid "Invalid file" +msgstr "Ongeldig bestand" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Het bestand kan corrupt zijn of een opmaak hebben die niet herkend wordt " +"door Poedit." + +msgid "&Undo" +msgstr "&Ongedaan maken" + +msgid "&Redo" +msgstr "Opnie&uw doen" + +msgid "Cu&t" +msgstr "Kni&ppen" + +msgid "Cut" +msgstr "Knippen" + +msgid "Copy" +msgstr "Kopiëren" + +msgid "&Paste" +msgstr "&Plakken" + +msgid "Paste" +msgstr "Plakken" + +msgid "&Delete" +msgstr "&Verwijderen" + +msgid "Select &All" +msgstr "&Alles selecteren" + +msgid "Select All" +msgstr "Alles selecteren" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Omhoog" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Omlaag" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "U kunt niet meer dan één bestand in het Poedit-venster plaatsen." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Het bestand '%s' is geen berichtcatalogus." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Bestand" + +msgid "&Go" +msgstr "&Navigeren" + +msgid "Source text:" +msgstr "Brontekst:" + +msgid "Singular:" +msgstr "Enkelvoud:" + +msgid "Plural:" +msgstr "Meervoud:" + +msgid "Translation:" +msgstr "Vertaling:" + +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-bestanden zijn slechts sjablonen en bevatten zelf geen vertalingen.\n" +"Maak een nieuw PO-bestand aan op basis van dit sjabloon, om een vertaling te " +"maken." + +msgid "Create New Translation" +msgstr "Nieuwe vertaling maken" + +msgid "Create new translation" +msgstr "Nieuwe vertaling maken" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Spellingscontrole is uitgeschakeld, omdat het woordenboek voor %s niet " +"geïnstalleerd is." + +msgid "Install" +msgstr "Installeren" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "De catalogus is gewijzigd. Wilt u de wijzigingen opslaan?" + +msgid "Save changes" +msgstr "Wijzigingen opslaan" + +msgid "Your changes will be lost if you don't save them." +msgstr "De wijzigingen zullen verloren gaan als u ze niet opslaat." + +msgid "Save" +msgstr "Opslaan" + +msgid "Don't save" +msgstr "Niet opslaan" + +msgid "Don't Save" +msgstr "Niet opslaan" + +msgid "Save as..." +msgstr "Opslaan als..." + +msgid "Compile to..." +msgstr "Compileren naar..." + +msgid "Compiled Translation Files" +msgstr "Gecompileerde vertaalbestanden" + +msgid "Export as..." +msgstr "Exporteren als..." + +msgid "HTML Files" +msgstr "HTML-bestanden" + +msgid "Open catalog template" +msgstr "Catalogus-sjabloon openen" + +msgid "Updating catalog" +msgstr "Catalogus bijwerken" + +msgid "Source code not available." +msgstr "De broncode is niet beschikbaar." + +msgid "Updating failed" +msgstr "Het bijwerken is mislukt" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"De vertalingen konden niet bijgewerkt worden vanuit de broncode, omdat er " +"geen code is gevonden op de locatie die is opgegeven in de eigenschappen van " +"de catalogus." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Vermeldingen in de catalogus zijn waarschijnlijk onjuist." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Bijwerken van catalogus mislukt. Klik op 'Details >>' voor details." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d probleem gevonden met de vertaling." +msgstr[1] "%d problemen gevonden met de vertaling." + +msgid "Validation results" +msgstr "Valideringsresultaten" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Vermeldingen met fouten zijn rood gemarkeerd in de lijst. Gegevens van de " +"fout zullen weergegeven worden als u een van de vermeldingen selecteert." + +msgid "The file was saved safely." +msgstr "Het bestand is veilig opgeslagen." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Het bestand is veilig opgeslagen en gecompileerd naar het mo-formaat, maar " +"het zal waarschijnlijk niet goed werken." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Het bestand is veilig opgeslagen maar het kan niet gecompileerd worden naar " +"het mo-formaat, en dus niet gebruikt worden." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Het bestand is gecompileerd naar het MO-formaat, maar zal waarschijnlijk " +"niet goed werken." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" +"Het bestand kan niet gecompileerd worden naar het MO-formaat en dus niet " +"gebruikt." + +msgid "No problems with the translation found." +msgstr "Geen problemen met de vertaling gevonden." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"De vertaling is klaar voor gebruik, maar regel %d is nog niet vertaald." +msgstr[1] "" +"De vertaling is klaar voor gebruik, maar regels %d zijn nog niet vertaald." + +msgid "The translation is ready for use." +msgstr "De vertaling is klaar voor gebruik." + +msgid "Context:" +msgstr "Context:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit heeft automatisch ongeldige content gerepareerd in het bestand '%s'." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Het bestand bevatte dubbele items; dat is niet toegestaan in PO-bestanden, " +"omdat het zou voorkomen dat het bestand gebruikt wordt. Poedit heeft de fout " +"hersteld, maar je moet vertalingen van alle items die als onduidelijk " +"gemarkeerd zijn, nakijken en ze zo nodig corrigeren." + +msgid "Language of the translation isn't set." +msgstr "De taal van de vertaling is niet ingesteld." + +msgid "Set Language" +msgstr "Taal instellen" + +msgid "Set language" +msgstr "Taal instellen" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Suggesties zijn niet beschikbaar als de taal van de vertaling niet juist is " +"ingesteld. Andere functies, zoals meervoudsvormen, kunnen ook worden " +"beïnvloed." + +msgid "Language of the translation is the same as source language." +msgstr "Taal van de vertaling is hetzelfde als de brontaal." + +msgid "Fix Language" +msgstr "Taal repareren" + +msgid "Fix language" +msgstr "Taal repareren" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Deze catalogus bevat vermeldingen met meervoudsvormen, maar er is geen " +"meervoudsvorm-header voor ingesteld." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Vermeldingen in deze catalogus hebben een andere meervoudsvorm dan wat er " +"staat in de meervoudsvorm-header van de catalogus" + +msgid "Required header Plural-Forms is missing." +msgstr "Vereiste meervoudsvorm-header ontbreekt." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Syntaxfout in meervoudsvorm-header ('%s')." + +msgid "Fix the Header" +msgstr "De header repareren" + +msgid "Fix the header" +msgstr "De header repareren" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"De meervoudsvorm-expressie gebruikt door de catalogus is ongebruikelijk voor " +"%s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Nakijken" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Fout bij het laden van het berichtcatalogusbestand '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Vertaald: %d van %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Resterend: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d fout" +msgstr[1] "%d fouten" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d woord" +msgstr[1] "%d woorden" + +msgid " (unsaved)" +msgstr "(niet-opgeslagen)" + +msgid " (modified)" +msgstr " (gewijzigd)" + +msgid "Go" +msgstr "Navigeren" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Bijwerken van vertaalgeheugen mislukt: %s" + +msgid "Purge deleted translations" +msgstr "&Gewiste vertalingen definitief verwijderen" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Wilt u alle vertalingen verwijderen die niet langer worden gebruikt?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Als u doorgaat met verwijderen zullen alle vertalingen die gemarkeerd staan " +"als 'gewist', definitief worden verwijderd. U zult ze dan opnieuw moeten " +"vertalen als u ze in de toekomst weer toevoegt." + +msgid "Keep" +msgstr "Behouden" + +msgid "Purge" +msgstr "Definitief verwijderen" + +msgid "Fill missing translations from TM" +msgstr "Ontbrekende vertalingen invullen vanuit het TM" + +msgid "Only fill in exact matches" +msgstr "Vul alleen exacte overeenkomsten in" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Standaard worden onnauwkeurige resultaten ingevuld maar ook als onduidelijk " +"gemarkeerd. Vink deze optie aan om alleen accurate overeenkomsten te " +"gebruiken." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Markeer exacte overeenkomsten niet als onduidelijk" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Zet dit alleen aan als u de kwaliteit van TM vertrouwt. Standaard worden " +"alle overeenkomsten van TM als onduidelijk gemarkeerd en ze zullen nagekeken " +"moeten worden." + +msgid "Fill" +msgstr "Invullen" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "Regel %d werd ingevuld vanuit het vertaalgeheugen." +msgstr[1] "Regels %d werden ingevuld vanuit het vertaalgeheugen." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"De vertalingen werden gemarkeerd als onduidelijk, omdat ze misschien niet " +"accuraat zijn. U dient ze na te kijken op juistheid." + +msgid "No entries could be filled from the translation memory." +msgstr "" +"Er konden geen vermeldingen ingevuld worden vanuit het vertaalgeheugen." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Het vertaalgeheugen bevat geen strings die gelijk zijn aan de inhoud van dit " +"bestand. Het is alleen geschikt voor semi-automatische vertalingen, nadat " +"Poedit voldoende geleerd heeft van bestanden die u handmatig vertaald hebt." + +msgid "Translating" +msgstr "Aan het vertalen" + +msgid "Filling missing translations from TM..." +msgstr "Ontbrekende vertalingen invullen vanuit TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u string vertaald" +msgstr[1] "%u strings vertaald" + +msgid "Copy from source text" +msgstr "Kopiëren vanuit brontekst" + +msgid "Copy from Source Text" +msgstr "Kopiëren vanuit brontekst" + +msgid "Clear translation" +msgstr "Vertaling wissen" + +msgid "Clear Translation" +msgstr "Vertaling wissen" + +msgid "Edit comment" +msgstr "Opmerking bewerken" + +msgid "Edit Comment" +msgstr "Opmerking bewerken" + +msgid "References:" +msgstr "Verwijzingen:" + +msgid "Everything" +msgstr "Alles" + +#, c-format +msgid "Form %i" +msgstr "Vorm %i" + +msgid "Singular" +msgstr "Enkelvoud" + +msgid "Zero" +msgstr "Nul" + +msgid "One" +msgstr "Één" + +msgid "Two" +msgstr "Twee" + +msgid "Plural" +msgstr "Meervoud" + +msgid "Other" +msgstr "Meer" + +msgid "&Bookmarks" +msgstr "&Bladwijzers" + +#, c-format +msgid "Set bookmark %i" +msgstr "Bladwijzer %i instellen" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Naar bladwijzer %i gaan" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Bladwijzer %i instellen" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Naar bladwijzer %i gaan" + +msgid "Hide Sidebar" +msgstr "Zijbalk verbergen" + +msgid "Show Sidebar" +msgstr "Zijbalk tonen" + +msgid "Hide Status Bar" +msgstr "Statusbalk verbergen" + +msgid "Show Status Bar" +msgstr "Statusbalk weergeven" + +msgid "Source text" +msgstr "Brontekst" + +msgid "Translation" +msgstr "Vertaling" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Brontekst — %s" + +msgid "unknown language" +msgstr "onbekende taal" + +#, c-format +msgid "Translation — %s" +msgstr "Vertaling — %s" + +msgid "Error:" +msgstr "Fout:" + +msgid "Source file" +msgstr "Bronbestand" + +msgid "Source file occurrence:" +msgstr "Vóórkomen van bronbestand:" + +msgid "Open in Editor" +msgstr "Openen in editor" + +msgid "Open in editor" +msgstr "Openen in editor" + +msgid "No references for the selected item." +msgstr "Geen verwijzingen voor het geselecteerde item." + +#, c-format +msgid "Error opening file %s!" +msgstr "Fout bij het openen van bestand %s." + +msgid "Find" +msgstr "Zoeken" + +msgid "Replace" +msgstr "Vervangen" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opties" + +msgid "Ignore case" +msgstr "Hoofd-/kleine letters negeren" + +msgid "Wrap around" +msgstr "Tekstomloop" + +msgid "Whole words only" +msgstr "Alleen hele woorden" + +msgid "Find in source texts" +msgstr "In bronteksten zoeken" + +msgid "Find in translations" +msgstr "In vertalingen zoeken" + +msgid "Find in comments" +msgstr "In opmerkingen zoeken" + +msgid "Close" +msgstr "Sluiten" + +msgid "Replace All" +msgstr "Alles vervangen" + +msgid "Replace all" +msgstr "Alles vervangen" + +msgid "< &Previous" +msgstr "< &Vorige" + +msgid "&Next >" +msgstr "&Volgende >" + +msgid "String to find" +msgstr "Te zoeken term" + +msgid "Replacement string" +msgstr "Vervangende term" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Kan programma: %s niet uitvoeren" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Taalcode of -naam (bijv. nl_NL)" + +msgid "Translation Language" +msgstr "Vertalingstaal" + +msgid "Language of the translation:" +msgstr "Taal:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit-catalogusbeheerder" + +msgid "Catalog" +msgstr "Catalogus" + +msgid "Total" +msgstr "Totaal" + +msgid "Untrans" +msgstr "Onvertaald " + +msgid "Fuzzy" +msgstr "Onduidelijk" + +msgid "Bad Tokens" +msgstr "Ongeldige symbolen" + +msgid "Last modified" +msgstr "Laatst gewijzigd" + +msgid "Select directory" +msgstr "Map kiezen" + +msgid "Directories:" +msgstr "Mappen:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Wilt u het project verwijderen?" + +msgid "Confirmation" +msgstr "Bevestiging" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Wilt u werkelijk alle catalogi in dit\n" +"project in één keer bijwerken?" + +msgid "Information about the translator" +msgstr "Informatie over de vertaler" + +msgid "Name:" +msgstr "Naam:" + +msgid "Your Name" +msgstr "Uw naam" + +msgid "Email:" +msgstr "E-mailadres:" + +msgid "your_email@example.com" +msgstr "uw_e-mail@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Uw naam en e-mailadres worden alleen gebruikt om de header 'Laatste-" +"Vertaler' van de GNU-gettext-bestanden in te stellen." + +msgid "Editing" +msgstr "Bewerken" + +msgid "Automatically compile MO file when saving" +msgstr "Automatisch het MO-bestand compileren bij het opslaan" + +msgid "Show summary after catalog update" +msgstr "Samenvatting tonen na bijwerken catalogus" + +msgid "Check spelling" +msgstr "Spelling controleren" + +msgid "Always change focus to text input field" +msgstr "Altijd cursor in tekstinvoerveld zetten" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Nooit de lijst met strings als actief venster instellen. Als deze optie " +"aanstaat, moet u Ctrl-pijltjestoetsen gebruiken voor de toetsenbord-" +"navigatie, maar u kunt ook meteen tekst typen, zonder met de tabtoets het " +"actieve venster te hoeven veranderen." + +msgid "Appearance" +msgstr "Weergave" + +msgid "Use custom list font:" +msgstr "Aangepast lettertype voor lijst gebruiken:" + +msgid "Use custom text fields font:" +msgstr "Aangepast lettertype voor tekstvelden gebruiken:" + +msgid "Change UI language" +msgstr "Interface-taal veranderen" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(vereist Windows 8 of nieuwer)" + +msgid "General" +msgstr "Algemeen" + +msgid "Use translation memory" +msgstr "Vertaalgeheugen gebruiken" + +msgid "Learn From Files..." +msgstr "Uit bestanden halen..." + +msgid "Learn from files..." +msgstr "Uit bestanden halen..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Resetten" + +msgid "Consult TM when updating from sources" +msgstr "Vertaalgeheugen raadplegen tijdens bijwerken vanuit bronnen" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Indien ingeschakeld, zal Poedit proberen nieuwe termen in te vullen door " +"gebruik te maken van uw vorige \n" +"vertalingen die opgeslagen zijn in het vertaalgeheugen. Als het " +"vertaalgeheugen \n" +" bijna leeg is, zal dat niet erg effectief zijn. Hoe meer vertalingen \n" +"u bewerkt des te meer het vertaalgeheugen groeit, dus hoe beter het wordt." + +msgid "Stored translations:" +msgstr "Opgeslagen vertalingen:" + +msgid "Database size on disk:" +msgstr "Grootte database op schijf:" + +msgid "Select translation files to import" +msgstr "Selecteer de te importeren taalbestanden" + +msgid "Translation Memory" +msgstr "Vertaalgeheugen" + +msgid "Importing translations..." +msgstr "Vertalingen importeren..." + +msgid "Finalizing..." +msgstr "Voltooien..." + +msgid "Reset translation memory" +msgstr "Vertalingsgeheugen resetten" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Bent u er zeker van het vertalingsgeheugen te resetten?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Het resetten van het vertalingsgeheugen zal onherroepelijk alle opgeslagen " +"vertalingen eruit wissen. U kunt deze actie niet terugdraaien." + +msgid "Cancel" +msgstr "Annuleren" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Er worden broncode-uitpakkers gebruikt om vertaalbare strings in de broncode-" +"bestanden te vinden en ze uit te pakken zodat ze vertaald kunnen worden." + +msgid "New" +msgstr "Nieuw" + +msgid "Edit" +msgstr "Bewerken" + +msgid "Delete extractor" +msgstr "Uitpakker verwijderen" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Weet je zeker dat je uitpakker '%s' wilt verwijderen?" + +msgid "Extractors" +msgstr "Uitpakkers" + +msgid "Accounts" +msgstr "Accounts" + +msgid "Automatically check for updates" +msgstr "Automatisch controleren op updates" + +msgid "Include beta versions" +msgstr "Inclusief bèta-versies" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Bèta-versies bevatten de nieuwste functies en verbeteringen, maar kunnen " +"iets minder stabiel zijn." + +msgid "Updates" +msgstr "Updates" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Deze instellingen hebben invloed op de interne opmaak van de PO-bestanden. " +"Werk ze bij als u specifieke eisen hebt, bv vanwege versiecontrole." + +msgid "Line endings:" +msgstr "Regeleinden:" + +msgid "Unix (recommended)" +msgstr "Unix (aanbevolen)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Tekstterugloop bij:" + +msgid "Preserve formatting of existing files" +msgstr "Opmaak van bestaande bestanden behouden" + +msgid "Advanced" +msgstr "Geavanceerd" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "%s-voorkeuren" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Sleep mappen hierheen\n" +"\n" +"of gebruik de knop +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Sleep mappen hierheen\n" +"\n" +"of gebruik de knop +" + +msgid "Add Folders..." +msgstr "Mappen toevoegen..." + +msgid "Add folders..." +msgstr "Mappen toevoegen..." + +msgid "Add Files..." +msgstr "Bestanden toevoegen..." + +msgid "Add files..." +msgstr "Bestanden toevoegen..." + +msgid "Add Wildcard..." +msgstr "Jokertekens toevoegen..." + +msgid "Add wildcard..." +msgstr "Jokertekens toevoegen..." + +msgid "Paths" +msgstr "Paden" + +msgid "Excluded paths" +msgstr "Uitgesloten paden" + +msgid "Additional keywords" +msgstr "Aanvullende zoekwoorden" + +msgid "Name of the project the translation is for" +msgstr "Naam van het project waar de vertaling voor is" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "bijv. nplurals=2; plural=(n != 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (aanbevolen)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Gelieve het bestand eerst op te slaan. Deze sectie kan tot dan niet bewerkt " +"worden." + +msgid "Comment:" +msgstr "Opmerking:" + +msgid "OK" +msgstr "Ok" + +msgid "C&lear" +msgstr "&Wissen" + +msgid "Clear the comment" +msgstr "Opmerking wissen" + +msgid "Create new translations project" +msgstr "Nieuw vertaalproject maken" + +msgid "Edit the project" +msgstr "Het project bewerken" + +msgid "Delete the project" +msgstr "Het project verwijderen" + +msgid "Update all" +msgstr "Alles bijwerken" + +msgid "Update all catalogs in the project" +msgstr "Alle catalogi in het project bijwerken" + +msgid "Edit project" +msgstr "Het project bewerken" + +msgid "Project name:" +msgstr "Projectnaam:" + +msgid "Browse" +msgstr "Bladeren" + +msgid "Add directory to the list" +msgstr "Map aan de lijst toevoegen" + +msgid "&New..." +msgstr "&Nieuw..." + +msgid "New from &POT/PO file..." +msgstr "Nieuw vanuit &POT/PO-bestand..." + +msgid "New From &POT/PO File..." +msgstr "Nieuw vanuit &POT/PO-bestand..." + +msgid "&Open..." +msgstr "&Openen..." + +msgid "Open Recent" +msgstr "Recent bestand openen" + +msgid "Open from Crowdin..." +msgstr "Openen vanuit Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Openen vanuit Crowdin..." + +msgid "&Close" +msgstr "&Sluiten" + +msgid "&Save" +msgstr "Op&slaan" + +msgid "Save &as..." +msgstr "Opslaan &als..." + +msgid "Save &As..." +msgstr "Opslaan &als..." + +msgid "Compile to MO..." +msgstr "Naar MO-formaat compileren..." + +msgid "E&xport as HTML..." +msgstr "E&xporteren als html..." + +msgid "Check for updates..." +msgstr "Controleren op updates..." + +msgid "&Preferences..." +msgstr "&Voorkeuren..." + +msgid "Catalogs &manager" +msgstr "Catalogus&beheerder" + +msgid "Catalogs &Manager" +msgstr "Catalogus&beheerder" + +msgid "E&xit" +msgstr "&Afsluiten" + +msgid "Quit" +msgstr "Afsluiten" + +msgid "Copy from singular" +msgstr "Kopiëren vanuit de enkelvoudsvorm" + +msgid "Copy From Singular" +msgstr "Kopiëren vanuit de enkelvoudsvorm" + +msgid "Translation is &fuzzy" +msgstr "Vertaling is &onduidelijk" + +msgid "Translation Is &Fuzzy" +msgstr "Vertaling is &onduidelijk" + +msgid "Edit &comment" +msgstr "&Opmerking bewerken" + +msgid "Edit &Comment" +msgstr "&Opmerking bewerken" + +msgid "Suggestions" +msgstr "Suggesties" + +msgid "&Show references" +msgstr "&Verwijzingen weergeven" + +msgid "&Show References" +msgstr "&Verwijzingen weergeven" + +msgid "&Find..." +msgstr "&Zoeken..." + +msgid "Replace..." +msgstr "Vervangen..." + +msgid "Find next" +msgstr "Volgende zoeken" + +msgid "Find previous" +msgstr "Vorige zoeken" + +msgid "Find and Replace..." +msgstr "Zoeken en vervangen..." + +msgid "Find Next" +msgstr "Volgende zoeken" + +msgid "Find Previous" +msgstr "Vorige zoeken" + +msgid "&Preferences" +msgstr "&Voorkeuren" + +msgid "Display entry &IDs" +msgstr "Invoer-&ID's weergeven" + +msgid "Display Entry &IDs" +msgstr "Invoer-&ID's weergeven" + +msgid "Sort by &file order" +msgstr "Sorteren op bestands&volgorde" + +msgid "Sort by &File Order" +msgstr "Sorteren op bestands&volgorde" + +msgid "Sort by &source" +msgstr "Sorteren op &bron" + +msgid "Sort by &Source" +msgstr "Sorteren op &bron" + +msgid "Sort by &translation" +msgstr "Sorteren op ver&taling" + +msgid "Sort by &Translation" +msgstr "Sorteren op ver&taling" + +msgid "&Group by context" +msgstr "&Groeperen naar context" + +msgid "&Group By Context" +msgstr "&Groeperen naar context" + +msgid "Entries with errors first" +msgstr "Invoer met fouten eerst" + +msgid "Entries with Errors First" +msgstr "Invoer met fouten eerst" + +msgid "&Untranslated entries first" +msgstr "&Onvertaalde invoer eerst" + +msgid "&Untranslated Entries First" +msgstr "&Onvertaalde invoer eerst" + +msgid "Show sidebar" +msgstr "Zijbalk tonen" + +msgid "Show status bar" +msgstr "Statusbalk tonen" + +msgid "C&atalog" +msgstr "C&atalogus" + +msgid "&Update from sources" +msgstr "Bij&werken vanuit de bronteksten" + +msgid "&Update from Sources" +msgstr "Bij&werken vanuit de bronteksten" + +msgid "Update from &POT file..." +msgstr "Bijwerken vanuit &POT-bestand..." + +msgid "Update from &POT File..." +msgstr "Bijwerken vanuit &POT-bestand..." + +msgid "Sync with Crowdin" +msgstr "Synchroniseren met Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Ontbrekende vertalingen invullen vanuit de &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Ontbrekende vertalingen invullen vanuit de &TM..." + +msgid "&Purge deleted translations" +msgstr "&Gewiste vertalingen definitief verwijderen" + +msgid "&Purge Deleted Translations" +msgstr "&Gewiste vertalingen definitief verwijderen" + +msgid "&Validate translations" +msgstr "Vertalingen &valideren" + +msgid "&Validate Translations" +msgstr "Vertalingen &valideren" + +msgid "&Properties..." +msgstr "&Eigenschappen..." + +msgid "&Done and next" +msgstr "&Klaar en volgende" + +msgid "&Done and Next" +msgstr "&Klaar en volgende" + +msgid "&Previous translation" +msgstr "&Vorige vertaling" + +msgid "&Previous Translation" +msgstr "&Vorige vertaling" + +msgid "&Next translation" +msgstr "&Volgende vertaling" + +msgid "&Next Translation" +msgstr "&Volgende vertaling" + +msgid "P&revious unfinished" +msgstr "Vo&rige onvoltooide" + +msgid "P&revious Unfinished" +msgstr "Vo&rige onvoltooide" + +msgid "Ne&xt unfinished" +msgstr "&Volgende onvoltooide" + +msgid "Ne&xt Unfinished" +msgstr "&Volgende onvoltooide" + +msgid "Previous plural form" +msgstr "Vorige meervoudsvorm" + +msgid "Previous Plural Form" +msgstr "Vorige meervoudsvorm" + +msgid "Next plural form" +msgstr "Volgende meervoudsvorm" + +msgid "Next Plural Form" +msgstr "Volgende meervoudsvorm" + +msgid "&Online help" +msgstr "&Hulp op het internet" + +msgid "&Online Help" +msgstr "&Hulp op het internet" + +msgid "&GNU gettext manual" +msgstr "&GNU-gettext-handleiding" + +msgid "&GNU gettext Manual" +msgstr "&GNU-gettext-handleiding" + +msgid "&About Poedit" +msgstr "&Over Poedit" + +msgid "&About" +msgstr "&Over" + +msgid "Extractor setup" +msgstr "Instellen uitpakker" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lijst met extensies, gescheiden door puntkomma's (bijv. *.cpp; *.h):" + +msgid "Invocation:" +msgstr "Aanroep:" + +msgid "Command to extract translations:" +msgstr "Commando om vertalingen uit te pakken:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Dit is het commando dat gebruikt wordt om de uitpakker te starten .\n" +"%o pakt uit naar de naam van het uitvoerbestand, %K naar de lijst \n" +" van sleutelwoorden, %F naar de lijst van invoervelden, \n" +"%C naar de karakterset-vlag (zie hieronder)." + +msgid "An item in keywords list:" +msgstr "Een item in de lijst met trefwoorden:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Dit wordt voor elk trefwoord aan de opdrachtregel \n" +" toegevoegd. %k wordt vervangen door het trefwoord." + +msgid "An item in input files list:" +msgstr "Een item in de lijst van invoerbestanden:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Dit wordt voor elk invoerbestand \n" +" aan de opdrachtregel toegevoegd. %f wordt vervangen door de bestandsnaam." + +msgid "Source code charset:" +msgstr "Broncode-tekenset:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Dit wordt alleen aan de opdrachtregel toegevoegd als de bron-tekenset \n" +"is opgegeven. %c wordt vervangen door de tekensetwaarde." + +msgid "Catalog properties" +msgstr "Cataloguseigenschappen" + +msgid "Project name and version:" +msgstr "Projectnaam en -versie:" + +msgid "Plural Forms:" +msgstr "Meervoudsvormen:" + +msgid "Use default rules for this language" +msgstr "Standaardregels voor deze taal gebruiken" + +msgid "Use custom expression" +msgstr "Aangepaste expressie gebruiken" + +msgid "Learn about plural forms" +msgstr "Meer informatie over meervoudsvormen" + +msgid "Charset:" +msgstr "Tekenset:" + +msgid "Team:" +msgstr "Team:" + +msgid "Team's email address:" +msgstr "E-mailadres van het team:" + +msgid "Translation properties" +msgstr "Eigenschappen van vertaling" + +msgid "Sources paths" +msgstr "Bronpaden" + +msgid "Extract text from source files in the following directories:" +msgstr "Haal tekst uit de bronbestanden in de volgende mappen:" + +msgid "Base path:" +msgstr "Root-pad:" + +msgid "Sources keywords" +msgstr "Trefwoorden van bronnen" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Gebruik deze trefwoorden (functienamen) om vertaalbare strings in\n" +"bronbestanden te herkennen:" + +msgid "Learn about gettext keywords" +msgstr "Meer informatie over gettext-trefwoorden" + +msgid "Update summary" +msgstr "Samenvatting van de update" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Deze strings zijn in de broncode gevonden, maar stonden niet in de " +"catalogus.\n" +"Poedit zal ze nu aan de catalogus toevoegen." + +msgid "New strings" +msgstr "Nieuwe strings" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Deze strings staan niet meer in de broncode.\n" +"Poedit zal ze nu uit de catalogus verwijderen." + +msgid "Obsolete strings" +msgstr "Verouderde strings" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 nieuw, 0 verouderd)" + +msgid "Open" +msgstr "Openen" + +msgid "Save catalog" +msgstr "Catalogus opslaan" + +msgid "Validate" +msgstr "Valideren" + +msgid "Check for errors in the translation" +msgstr "De vertaling op fouten controleren" + +msgid "Update" +msgstr "Bijwerken" + +msgid "Update catalog - synchronize it with sources" +msgstr "Catalogus bijwerken - synchroniseren met de bronnen" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Ingedrukt als de geselecteerde tekst een onduidelijke vertaling heeft" + +msgid "Show or hide the sidebar" +msgstr "De zijbalk weergeven of verbergen" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Vorige brontekst:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"De oude brontekst (voordat hij veranderd werd tijdens een update) waar de " +"onduidelijke vertaling naar verwijst." + +msgid "Notes for translators:" +msgstr "Opmerkingen voor vertalers:" + +msgid "Add comment" +msgstr "Opmerking toevoegen" + +msgid "Add Comment" +msgstr "Opmerking toevoegen" + +msgid "Translation suggestions:" +msgstr "Vertaalsuggesties:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Geen overeenkomsten gevonden" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Geen overeenkomsten gevonden" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Deze tekenreeks is gevonden in het vertaalgeheugen van Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Nieuw: %i, verouderd: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Vertalingen importeren: %d" + +msgid "Poedit Update" +msgstr "Poedit-update" + +msgid "Preparing migration..." +msgstr "Migratie voorbereiden..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Status migratie-resultaat: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit moet uw vertaalgeheugen naar een nieuw formaat converteren." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Dit moet gebeuren voordat Poedit kan starten. Het kan een paar minuten duren " +"als u veel vertalingen opgeslagen hebt, maar gewoonlijk zou het veel sneller " +"moeten gaan." + +msgid "Proceed" +msgstr "Doorgaan" + +msgid "Translation memory migration failed." +msgstr "Migratie van vertaalgeheugen mislukt." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Uw vertaalgeheugendata konden niet gemigreerd worden. De fout was:\n" +"\n" +"%s\n" +"Gelieve te e-mailen naar help@poedit.net en we zullen het oplossen." + +msgid "Cannot create temporary directory." +msgstr "Tijdelijke map maken niet mogelijk." + +msgid "Welcome to Poedit" +msgstr "Welkom bij Poedit" + +msgid "Edit a translation" +msgstr "Een vertaling bewerken" + +msgid "Open an existing PO file and edit the translation." +msgstr "Een bestaand PO-bestand openen en de vertaling bewerken." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Een bestaand PO-bestand of POT-sjabloon nemen en er een nieuwe vertaling van " +"maken." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Samenwerken aan een vertaling met Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Download een bestand van een Crowdin-project, vertaal het en synchroniseer " +"je wijzigingen terug." + +msgid "What is Crowdin?" +msgstr "Wat is Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Er zijn geen vertalingen. Dat is ongebruikelijk." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Vertaalbare vermeldingen worden niet handmatig aan het Gettext-systeem " +"toegevoegd, maar automatisch geëxtraheerd \n" +"uit de broncode. Op deze manier blijven ze up-to-date en accuraat. \n" +"Vertalers gebruiken meestal PO-sjabloonbestanden (POT's) die de ontwikkelaar " +"voor hen gemaakt heeft." + +msgid "(Learn more about GNU gettext)" +msgstr "(Meer te weten komen over GNU-gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"De eenvoudigste manier om deze catalogus aan te vullen is door hem bij te " +"werken vanuit een POT-bestand:" + +msgid "Update from POT" +msgstr "Bijwerken vanuit POT-bestand" + +msgid "Take translatable strings from an existing POT template." +msgstr "Vertaalbare strings uit een bestaand POT-sjabloon halen." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"U kunt ook vertaalbare strings rechtstreeks extraheren uit de broncode:" + +msgid "Extract from sources" +msgstr "Extraheren uit broncode" + +msgid "Configure source code extraction in Properties." +msgstr "Configureer broncode-extractie in 'Eigenschappen'." + +msgid "Sync" +msgstr "Synchroniseren" + +msgid "Synchronize the translation with Crowdin" +msgstr "De vertaling met Crowdin synchroniseren" diff --git a/locales/oc.mo b/locales/oc.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ab927ca75176ba43ded59f4c46fb2e09bdedbbb GIT binary patch literal 47981 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 JUSDe@{|9~uKEVJ0 literal 0 HcmV?d00001 diff --git a/locales/oc.po b/locales/oc.po new file mode 100644 index 0000000..014373e --- /dev/null +++ b/locales/oc.po @@ -0,0 +1,1988 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-08-01 13:25-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Occitan\n" +"Language: oc_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: oc\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Amagar aqueste messatge de notificacion" + +msgid "Don't Show Again" +msgstr "Afichar pas mai" + +msgid "Don't show again" +msgstr "Afichar pas mai" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i linha del fichièr « %s » es pas estada cargada corrèctament." +msgstr[1] "%i linha del fichièr ' %s' es pas estada cargada corrèctament." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "La linha %d del fichièr '%s' es corrompuda (donadas %s invalidas)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Entèsta mal formada : « %s »" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Catalòg corromput : forma singulara msgstr utilizada conjuntament amb " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "Catalòg corromput : forma plurala msgstr utilizada sens msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"I a agut d'errors al moment del cargament del catalòg. Es possible que de " +"donadas sián mancantas o corrompudas." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Fracàs del cargament del fichièr %s : es probablament corromput." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Lo fichièr « %s » es en lectura sola e pòt pas èsser enregistrat.\n" +"Enregistratz-lo jos un nom diferent." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Impossible d'enregistrar lo fichièr %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"I a agut un problèma al moment del formatatge del fichièr (mas es estat " +"enregistrat corrèctament)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Lo catalòg a pas pogut èsser enregistrat amb lo jòc de caractèrs '%s',\n" +"tal coma indicat dins la configuracion del catalòg. Lo jòc UTF-8 es estat " +"utilizat\n" +"en remplaçament e la configuracion es estada modificada en consequéncia." + +msgid "Error saving catalog" +msgstr "Error d'enregistrament del catalòg" + +msgid "PO Translation Files" +msgstr "Fichièrs de traduccion PO" + +msgid "POT Translation Templates" +msgstr "Modèls de traduccion POT" + +msgid "All Translation Files" +msgstr "Totes los fichièrs de traduccion" + +msgid "Merging differences..." +msgstr "Integracion dels cambiaments..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "« %s » es pas un fichièr POT valid." + +msgid "(Use default language)" +msgstr "(Utilizar la lenga per defaut)" + +msgid "Select your preferred language" +msgstr "Seleccionatz vòstra lenga de preferéncia" + +msgid "Language selection" +msgstr "Seleccion de lenga" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Vos cal reaviar Poedit per qu'aqueste cambiament prenga efièit." + +msgid "Downloading translations is disabled in this project." +msgstr "" +"Lo telecargament de las traduccions es desactivat dins aqueste projècte." + +msgid "Not authorized, please sign in again." +msgstr "Pas autorizat, connectatz-vos tornamai." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin es una plataforma de gestion de localizacion en linha e una aisina " +"de traduccion collaborativa. Poedit pòt sincronizar perfièitament los " +"fichièrs PO amb Crowdin." + +msgid "Sign In" +msgstr "S'identificar" + +msgid "Sign in" +msgstr "S'identificar" + +msgid "Sign Out" +msgstr "Se desconnectar" + +msgid "Sign out" +msgstr "Se desconnectar" + +msgid "Waiting for authentication…" +msgstr "En espèra d'autentificacion..." + +msgid "Updating user information…" +msgstr "Mesa a jorn de las informacions de l'utilizaire..." + +msgid "Signed in as:" +msgstr "Connectat en tant que :" + +msgid "Learn More About Crowdin" +msgstr "Ne saber Mai sus Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Ne saber mai sus Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Connectatz-vos sus Crowdin" + +msgid "Open Crowdin translation" +msgstr "Dobrir la traduccion Crowdin" + +msgid "Project:" +msgstr "Projècte :" + +msgid "Language:" +msgstr "Lenga :" + +msgid "File:" +msgstr "Fichièr :" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Cap de projècte de traduccion pas listat dins vòstre compte Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "" +"Aqueste projècte a pas cap de fichièr que pòsca èsser traduit amb Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" +"Aqueste fichièr pòt pas èsser modificat qu'a partir de l'interfàcia web de " +"Crowdin." + +msgid "Downloading latest translations…" +msgstr "Telecargament de las darrièras traduccions..." + +msgid "Syncing with Crowdin" +msgstr "Sincronizacion amb Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "La sincronizacion amb Crowdin a fracassat." + +msgid "Crowdin error" +msgstr "Error Crowdin" + +msgid "Uploading translations…" +msgstr "Telecargament de las traduccions..." + +msgid "&Copy" +msgstr "&Copiar" + +msgid "Learn more" +msgstr "Ne saber mai" + +msgid "Learn More" +msgstr "Ne saber mai" + +#, c-format +msgid "Failed command: %s" +msgstr "La comanda a fracassat : %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Fracàs de la fusion dels catalògs gettext." + +msgid "Scanning files..." +msgstr "Analisi dels fichièrs..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Analisi de %s fichièrs..." + +msgid "Failed to load extracted catalog." +msgstr "Fracàs de cargament del catalòg extrach." + +msgid "&Help" +msgstr "&Ajuda" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "Los fichièrs MO pòdon pas èsser modificats dirèctament dins Poedit." + +msgid "Error opening file" +msgstr "Error a la dobertura del fichièr" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Dobrissètz e editar lo fichièr PO correspondent. Quand l'enregistraretz, lo " +"fichièr MO serà mes a jorn tanben." + +msgid "don't delete temporary files (for debugging)" +msgstr "suprimir pas los fichièrs temporaris (per fins de desbugar)" + +msgid "handle a poedit:// URI" +msgstr "gerís una URI de poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Impossible de comunicar amb los processus de Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Una excepcion pas gerida s'es produita : %s" + +msgid "Unhandled exception occurred." +msgstr "Una excepcion pas gerida s'es produita." + +msgid "Open catalog" +msgstr "Dobrir un catalòg" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Lo fichièr « %s » existís pas." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "A prepaus de %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Servicis" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Amagar %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Amagar los autres" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Afichar tot" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Quitar %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit es un logicial de traduccion de bon utilizar." + +msgid "Catalogs Manager" +msgstr "Gestionari de catalògs" + +msgid "Check for Updates..." +msgstr "Recèrca de las mesas a jorn..." + +msgid "&Edit" +msgstr "&Modificar" + +msgid "Undo" +msgstr "Anullar" + +msgid "Redo" +msgstr "Refar" + +msgid "Paste and Match Style" +msgstr "Pegar en conservant la mesa en forma" + +msgid "Delete" +msgstr "Suprimir" + +msgid "Spelling and Grammar" +msgstr "Ortografia e Gramatica" + +msgid "Show Spelling and Grammar" +msgstr "Afichar l'ortografia e la gramatica" + +msgid "Check Document Now" +msgstr "Verificar lo document ara" + +msgid "Check Spelling While Typing" +msgstr "Verificar l'ortografia al moment de la picada" + +msgid "Check Grammar With Spelling" +msgstr "Verificar la gramatica amb l’ortografia" + +msgid "Correct Spelling Automatically" +msgstr "Corregir l’ortografia automaticament" + +msgid "Substitutions" +msgstr "Substitucions" + +msgid "Show Substitutions" +msgstr "Afichar las substitucions" + +msgid "Smart Copy/Paste" +msgstr "Copiar/pegar intelligent" + +msgid "Smart Quotes" +msgstr "Verguetas intelligentas" + +msgid "Smart Dashes" +msgstr "Jonhents intelligents" + +msgid "Smart Links" +msgstr "Ligams intelligents" + +msgid "Text Replacement" +msgstr "Tèxte de remplaçament" + +msgid "Transformations" +msgstr "Transformacions" + +msgid "Make Upper Case" +msgstr "Metre en majusculas" + +msgid "Make Lower Case" +msgstr "Metre en minusculas" + +msgid "Capitalize" +msgstr "Metre en majuscula" + +msgid "Speech" +msgstr "Dictar" + +msgid "Start Speaking" +msgstr "Començar de parlar" + +msgid "Stop Speaking" +msgstr "Començar de parlar" + +msgid "&View" +msgstr "&Afichatge" + +msgid "Enter Full Screen" +msgstr "Passar en mòde ecran complet" + +msgid "Window" +msgstr "Fenèstra" + +msgid "Minimize" +msgstr "Reduire" + +msgid "Zoom" +msgstr "Agrandir" + +msgid "Bring All to Front" +msgstr "Tot passar al primièr plan" + +msgid "PO Translation" +msgstr "Traduccion PO" + +msgid "The file cannot be opened." +msgstr "Lo fichièr pòt pas èsser dobèrt." + +msgid "Invalid file" +msgstr "Fichièr invalid" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" +"Benlèu que lo fichièr es corromput o dins un format pas reconegut per Poedit." + +msgid "&Undo" +msgstr "An&ullar" + +msgid "&Redo" +msgstr "&Restablir" + +msgid "Cu&t" +msgstr "&Talhar" + +msgid "Cut" +msgstr "Talhar" + +msgid "Copy" +msgstr "Copiar" + +msgid "&Paste" +msgstr "&Pegar" + +msgid "Paste" +msgstr "Pegar" + +msgid "&Delete" +msgstr "&Suprimir" + +msgid "Select &All" +msgstr "Seleccionar &tot" + +msgid "Select All" +msgstr "Seleccionar tot" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Maj+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Entrada" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Naut" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Bas" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "maj" + +msgid "You can't drop more than one file on Poedit window." +msgstr "" +"Es impossible de depausar mai d'un fichièr a l'encòp dins la fenèstra de " +"Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Lo fichièr « %s » es pas un catalòg de messatges." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Fichièr" + +msgid "&Go" +msgstr "A&viar" + +msgid "Source text:" +msgstr "Tèxte font :" + +msgid "Singular:" +msgstr "Singular :" + +msgid "Plural:" +msgstr "Plural :" + +msgid "Translation:" +msgstr "Traduccion :" + +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 "" +"Los fichièrs POT son pas que de modèls e contenon pas de traduccions. \n" +"Per far una traduccion, creatz un novèl fichièr PO a partir del modèl." + +msgid "Create New Translation" +msgstr "Crear una Novèla Traduccion" + +msgid "Create new translation" +msgstr "Crear una novèla traduccion" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"La verificacion ortografica es desactivada, perque lo diccionari pel %s es " +"pas installat." + +msgid "Install" +msgstr "Installar" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Lo catalòg es estat modificat. Volètz enregistrar las modificacions ?" + +msgid "Save changes" +msgstr "Enregistrar las modificacions" + +msgid "Your changes will be lost if you don't save them." +msgstr "Vòstras modificacions seràn perdudas se las enregistratz pas." + +msgid "Save" +msgstr "Enregistrar" + +msgid "Don't save" +msgstr "Enregistrar pas" + +msgid "Don't Save" +msgstr "Enregistrar pas" + +msgid "Save as..." +msgstr "Enregistrar jos..." + +msgid "Compile to..." +msgstr "Compilacion..." + +msgid "Compiled Translation Files" +msgstr "Fichièrs de traduccion compilats" + +msgid "Export as..." +msgstr "Exportar..." + +msgid "HTML Files" +msgstr "Fichièrs HTML" + +msgid "Open catalog template" +msgstr "Dobrir un modèl de catalòg" + +msgid "Updating catalog" +msgstr "Mesa a jorn del catalòg" + +msgid "Source code not available." +msgstr "Còde font indisponible." + +msgid "Updating failed" +msgstr "Fracàs de la mesa a jorn" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Las traduccions an pas pogut èsser mesas a jorn a partir del còde font, " +"perque cap de còde es pas estat trobat a l'emplaçament precisat dins las " +"proprietats del catalòg." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Certanas entradas del catalòg son probablament incorrèctas." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" +"La mesa a jorn del catalòg a fracassat. Clicatz sus « Detalhs >> » per ne " +"saber mai." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "%d problèma dins la traduccion." +msgstr[1] "%d problèmas dins la traduccion." + +msgid "Validation results" +msgstr "Resultats de la validacion" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Las entradas amb d'errors son estadas marcadas en roge dins la lista. Los " +"detalhs de l'error s'aficharàn quand seleccionaretz aqueste tipe d'entrada." + +msgid "The file was saved safely." +msgstr "Lo fichièr es estat enregistrat en tota seguretat." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Lo fichièr es estat enregistrat en tota seguretat e compilat al format MO, " +"mas foncionarà probablament pas corrèctament." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Lo fichièr es estat enregistrat en tota seguretat, mas pòt pas èsser " +"compilat al format MO ni èsser utilizat." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Lo fichièr es estat compilat al format MO, mas foncionarà probablament pas " +"corrèctament." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Lo fichièr pòt pas èsser compilat al format MO e èsser utilizat." + +msgid "No problems with the translation found." +msgstr "Cap de problèma pas trobat dins la traduccion." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +"La traduccion es prèsta a èsser utilizada, mas %d entrada es pas encara " +"traduita." +msgstr[1] "" +"La traduccion es prèsta a èsser utilizada, mas %d entrada es pas encara " +"traduita." + +msgid "The translation is ready for use." +msgstr "La traduccion es prèsta a èsser utilizada." + +msgid "Context:" +msgstr "Contèxte :" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" +"Poedit a corregit automaticament lo contengut invalid del fichièr \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Lo fichièr conteniá d'elements en doble, aquò es pas permés dins los " +"fichièrs PO e empachariá son utilizacion. Poedit a reglat aqueste problèma, " +"mas vos caldriá repassar las traduccions de totes los elements marcats coma " +"aproximatius e las corregir se necessari." + +msgid "Language of the translation isn't set." +msgstr "La lenga de traduccion es pas definida." + +msgid "Set Language" +msgstr "Definir la lenga" + +msgid "Set language" +msgstr "Definir la lenga" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Las suggestions son pas disponiblas se la lenga de traduccion es pas " +"definida. Las autras foncionalitats, coma los plurals, pòdon èsser afectadas " +"tanben." + +msgid "Language of the translation is the same as source language." +msgstr "La lenga de traduccion es identica a la lenga font." + +msgid "Fix Language" +msgstr "Corregir la lenga" + +msgid "Fix language" +msgstr "Corregir la lenga" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Aqueste catalòg a d'entradas al plural, mas l'entèsta Plural es pas " +"configurada." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Las entradas dins aqueste catalòg an un nombre de formas pluralas diferent " +"de lo qu'es indicat dins l'entèsta Plural" + +msgid "Required header Plural-Forms is missing." +msgstr "L'entèsta Plural requesida es absenta." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Error de sintaxi dins l'entèsta Plural (\"%s\")." + +msgid "Fix the Header" +msgstr "Corregir l'entèsta" + +msgid "Fix the header" +msgstr "Corregir l'entèsta" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Las formas pluralas utilizadas pel catalòg son inabitualas per %s." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Repassar" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Error al cargament del fichièr catalòg « %s »." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Traduit : %d de %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Que demòra : %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errors" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d entrada" +msgstr[1] "%d entradas" + +msgid " (unsaved)" +msgstr " (pas salvat)" + +msgid " (modified)" +msgstr " (modificat)" + +msgid "Go" +msgstr "Anar" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Fracàs de la mesa a jorn de la memòria de traduccion : %s" + +msgid "Purge deleted translations" +msgstr "Escafar las traduccions suprimidas" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Volètz suprimir totas las traduccions que son pas mai utilizadas ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"En contunhant lo netejatge, totas las traduccions marcadas coma suprimidas " +"seràn escafadas definitivament. Caldrà recomençar la traduccion se son " +"apondudas tornamai." + +msgid "Keep" +msgstr "Conservar" + +msgid "Purge" +msgstr "Escafar" + +msgid "Fill missing translations from TM" +msgstr "Completar las traduccions mancantas amb la MT" + +msgid "Only fill in exact matches" +msgstr "Completar unicament las correspondéncias exactas" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Per defaut, de resultats incorrèctes son tanben integrats e marcats coma " +"aproximativas. Marcatz aquesta opcion per inclure solament las " +"correspondéncias exactas." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Marcar pas las correspondéncias exactas coma aproximativas" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Activar unicament se sètz segur de la qualitat de vòstra Memòria de " +"Traduccion. Per defaut, totes los resultats son marcats coma aproximatius e " +"son de repassar." + +msgid "Fill" +msgstr "Completar" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d entrada es estada completada per la memòria de traduccion." +msgstr[1] "%d entradas son estadas completadas per la memòria de traduccion." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Las traduccions son marcadas coma aproximativas perque riscan d'èsser " +"incorrèctas. Vos caldriá verificar lor pertinéncia." + +msgid "No entries could be filled from the translation memory." +msgstr "" +"Cap d'entrada a pas pogut èsser completada a partir de la memòria de " +"traduccion." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"La MT conten pas cap de cadena identica al contengut d'aqueste fichièr. Es " +"efectiu unicament per de traduccions semi-automaticas aprèp que Poedit aja " +"aprés pro de fichièrs traduits manualament." + +msgid "Translating" +msgstr "Traduccion en cors" + +msgid "Filling missing translations from TM..." +msgstr "Emplenatge de las traduccions mancantas amb la MT..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u cadena traduita" +msgstr[1] "%u cadenas traduitas" + +msgid "Copy from source text" +msgstr "Copiar dempuèi lo tèxte font" + +msgid "Copy from Source Text" +msgstr "Copiar dempuèi lo tèxte font" + +msgid "Clear translation" +msgstr "Escafar la traduccion" + +msgid "Clear Translation" +msgstr "Escafar la traduccion" + +msgid "Edit comment" +msgstr "Modificar lo comentari" + +msgid "Edit Comment" +msgstr "Modificar lo comentari" + +msgid "References:" +msgstr "Referéncias :" + +msgid "Everything" +msgstr "Tot" + +#, c-format +msgid "Form %i" +msgstr "Forma %i" + +msgid "Singular" +msgstr "Singular" + +msgid "Zero" +msgstr "Zèro" + +msgid "One" +msgstr "Un" + +msgid "Two" +msgstr "Dos" + +msgid "Plural" +msgstr "Plural" + +msgid "Other" +msgstr "Autre" + +msgid "&Bookmarks" +msgstr "&Marcapaginas" + +#, c-format +msgid "Set bookmark %i" +msgstr "Definir lo marcapagina %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Anar al marcapagina %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Definir lo marcapagina %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Anar al marcapagina %i" + +msgid "Hide Sidebar" +msgstr "Amagar lo panèl lateral" + +msgid "Show Sidebar" +msgstr "Afichar lo panèl lateral" + +msgid "Hide Status Bar" +msgstr "Amagar la barra d'estat" + +msgid "Show Status Bar" +msgstr "Afichar la barra d'estat" + +msgid "Source text" +msgstr "Tèxte font" + +msgid "Translation" +msgstr "Traduccion" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Tèxte font — %s" + +msgid "unknown language" +msgstr "lenga desconeguda" + +#, c-format +msgid "Translation — %s" +msgstr "Traduccion — %s" + +msgid "Error:" +msgstr "Error :" + +msgid "Source file" +msgstr "Fichièr font" + +msgid "Source file occurrence:" +msgstr "Preséncia del fichièr font :" + +msgid "Open in Editor" +msgstr "Dobrir dins l’Editor" + +msgid "Open in editor" +msgstr "Dobrir dins l’Editor" + +msgid "No references for the selected item." +msgstr "Pas cap de referéncia per l'element seleccionat." + +#, c-format +msgid "Error opening file %s!" +msgstr "Error a la dobertura del fichièr %s !" + +msgid "Find" +msgstr "Trobar" + +msgid "Replace" +msgstr "Remplaçar" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcions" + +msgid "Ignore case" +msgstr "Ignorar la cassa" + +msgid "Wrap around" +msgstr "Boclar" + +msgid "Whole words only" +msgstr "Mots entièrs unicament" + +msgid "Find in source texts" +msgstr "Trobar dins los tèxtes fonts" + +msgid "Find in translations" +msgstr "Trobar dins las traduccions" + +msgid "Find in comments" +msgstr "Trobar dins los comentaris" + +msgid "Close" +msgstr "Tampar" + +msgid "Replace All" +msgstr "Remplaçar tot" + +msgid "Replace all" +msgstr "Remplaçar tot" + +msgid "< &Previous" +msgstr "< &Precedenta" + +msgid "&Next >" +msgstr "&Seguenta >" + +msgid "String to find" +msgstr "Cadena de recercar" + +msgid "Replacement string" +msgstr "Cadena de remplaçament" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Impossible d'executar lo programa : %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Còde o nom de la lenga (ex. oc_FR)" + +msgid "Translation Language" +msgstr "Lenga de traduccion" + +msgid "Language of the translation:" +msgstr "Lenga de la traduccion :" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - Gestionari dels catalògs" + +msgid "Catalog" +msgstr "Catalòg" + +msgid "Total" +msgstr "Total" + +msgid "Untrans" +msgstr "Pas traduit" + +msgid "Fuzzy" +msgstr "Aproximativa" + +msgid "Bad Tokens" +msgstr "Marcadors incorrèctes" + +msgid "Last modified" +msgstr "Darrièr cambiament" + +msgid "Select directory" +msgstr "Causir un repertòri" + +msgid "Directories:" +msgstr "Repertòris :" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Volètz escafar aqueste projècte ?" + +msgid "Confirmation" +msgstr "Confirmacion" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Sètz segur que volètz far una mesa a jorn\n" +"de totes los catalògs d'aqueste projècte ?" + +msgid "Information about the translator" +msgstr "Informacions sul traductor" + +msgid "Name:" +msgstr "Nom :" + +msgid "Your Name" +msgstr "Vòstre nom" + +msgid "Email:" +msgstr "Email :" + +msgid "your_email@example.com" +msgstr "vostre.e-maill@exemple.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Vòstre nom e vòstra adreça e-mail son utilizats unicament per definir " +"l'entèsta Last-Translator dels fichièrs de GNU gettext." + +msgid "Editing" +msgstr "Cambiaments" + +msgid "Automatically compile MO file when saving" +msgstr "Compilar automaticament lo fichier MO al moment de l'enregistrament" + +msgid "Show summary after catalog update" +msgstr "Afichar lo resumit aprèp la mesa a jorn del catalòg" + +msgid "Check spelling" +msgstr "Verificar l’ortografia" + +msgid "Always change focus to text input field" +msgstr "Activar totjorn la zòna de picada del tèxte" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Daissar pas jamai la man a la lista de las cadenas. Quand es activada, cal " +"utilizar las tòcas Ctrl + Naut/Bas de navigacion, mas podètz tanben picar lo " +"tèxte dirèctament sens que vos calga utilizar la tòca de tabulacion per " +"activar la zòna de traduccion." + +msgid "Appearance" +msgstr "Aparéncia" + +msgid "Use custom list font:" +msgstr "Utilizar una poliça personalizada :" + +msgid "Use custom text fields font:" +msgstr "Utilizar una poliça personalizada pels camps de tèxte :" + +msgid "Change UI language" +msgstr "Cambiar la lenga de l'interfàcia" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(necessita Windows 8 o mai recent)" + +msgid "General" +msgstr "General" + +msgid "Use translation memory" +msgstr "Utilizar la memòria de traduccion" + +msgid "Learn From Files..." +msgstr "Apréner a partir dels fichièrs..." + +msgid "Learn from files..." +msgstr "Apréner a partir dels fichièrs..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Reïnicializar" + +msgid "Consult TM when updating from sources" +msgstr "Consultar la MT quand metètz a jorn dempuèi las fonts" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Se activat, Poedit ensajarè de completar las novèlas entradas en utilizant " +"vòstras traduccions\n" +"precedentas emmagazinadas dins la memòria de tradhttps://crowdin.com/" +"translate/poedit/3/en-oc#uction. Se la TM es\n" +"gaireben voida, aquò serà pas gaire efectiu. Quora mai tradusissètz\n" +"quora mai vòstra MT grossís, e quora melhor es lo resultat." + +msgid "Stored translations:" +msgstr "Traduccions emmagazinadas :" + +msgid "Database size on disk:" +msgstr "Talha de la basa de donadas sul disc :" + +msgid "Select translation files to import" +msgstr "Seleccionar los fichièrs de traduccion d'importar" + +msgid "Translation Memory" +msgstr "Memòria de traduccion" + +msgid "Importing translations..." +msgstr "Importacion de las traduccions…" + +msgid "Finalizing..." +msgstr "Finalizacion..." + +msgid "Reset translation memory" +msgstr "Reïnicializar la memòria de traduccion" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Sètz segur que volètz reïnicializar la memòria de traduccion ?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"La reïnicializacion de la memòria de traduccion suprimirà definitivament " +"totas las traductions que i son emmagazinadas. Aquesta operacion es " +"irreversibla." + +msgid "Cancel" +msgstr "Anullar" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "MT" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Los extractors de còde font son utilizats per recercar e extraire las " +"cadenas tradusiblas dels fichièrs del còde font per fin de las traduire." + +msgid "New" +msgstr "Novèl" + +msgid "Edit" +msgstr "Modificar" + +msgid "Delete extractor" +msgstr "Suprimir l'extractor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Sètz segur que volètz suprimir l'extractor «%s » ?" + +msgid "Extractors" +msgstr "Extractors" + +msgid "Accounts" +msgstr "Comptes" + +msgid "Automatically check for updates" +msgstr "Recercar automaticament las mesas a jorn" + +msgid "Include beta versions" +msgstr "Inclure las versions bèta" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Las versions bèta contenon las darrièras novetats e melhoraments, mas pòdon " +"èsser un pauc mens establas." + +msgid "Updates" +msgstr "Mesas a jorn" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Aqueles paramètres modifican la mesa en forma intèrna dels fichièrs PO. " +"Ajustatz-las se avètz d'exigéncias especificas, per exemple en rason del " +"contraròtle de version." + +msgid "Line endings:" +msgstr "Fins de linha :" + +msgid "Unix (recommended)" +msgstr "Unix (recomandat)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Passar a la linha a :" + +msgid "Preserve formatting of existing files" +msgstr "Preservar lo formatatge dels fichièrs existents" + +msgid "Advanced" +msgstr "Avançats" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Preferéncias de %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Lisatz-depausatz los dorsièrs aicí\n" +"\n" +"o utilizatz lo boton +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Lisatz-depausatz los dorsièrs aicí\n" +"\n" +"o utilizatz lo boton +" + +msgid "Add Folders..." +msgstr "Apondre de dorsièrs..." + +msgid "Add folders..." +msgstr "Apondre de dorsièrs..." + +msgid "Add Files..." +msgstr "Apondre de fichièrs..." + +msgid "Add files..." +msgstr "Apondre de fichièrs..." + +msgid "Add Wildcard..." +msgstr "Apondon del caractèr generic..." + +msgid "Add wildcard..." +msgstr "Apondon del caractèr generic..." + +msgid "Paths" +msgstr "Camins" + +msgid "Excluded paths" +msgstr "Camins excluses" + +msgid "Additional keywords" +msgstr "Mots claus suplementaris" + +msgid "Name of the project the translation is for" +msgstr "Nom del projècte de traduccion" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "p. ex. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (recomandat)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"D'en primièr, enregistratz lo fichièr. Aquesta seccion pòt pas èsser " +"modificada abans." + +msgid "Comment:" +msgstr "Comentari :" + +msgid "OK" +msgstr "D'acòrdi" + +msgid "C&lear" +msgstr "&Escafar" + +msgid "Clear the comment" +msgstr "Escafar lo comentari" + +msgid "Create new translations project" +msgstr "Crear un novèl projècte de traduccion" + +msgid "Edit the project" +msgstr "Modificar lo projècte" + +msgid "Delete the project" +msgstr "Suprimir aqueste projècte" + +msgid "Update all" +msgstr "Tot metre a jorn" + +msgid "Update all catalogs in the project" +msgstr "Metre a jorn totes los catalògs del projècte" + +msgid "Edit project" +msgstr "Modificar lo projècte" + +msgid "Project name:" +msgstr "Nom del projècte :" + +msgid "Browse" +msgstr "Percórrer" + +msgid "Add directory to the list" +msgstr "Apondre un repertòri a la lista" + +msgid "&New..." +msgstr "&Novèl…" + +msgid "New from &POT/PO file..." +msgstr "Novèl a partir d'un fichièr &POT/PO..." + +msgid "New From &POT/PO File..." +msgstr "Novèl a partir d'un fichièr &POT/PO..." + +msgid "&Open..." +msgstr "D&obrir..." + +msgid "Open Recent" +msgstr "Dobèrts recentament" + +msgid "Open from Crowdin..." +msgstr "Dobrir a partir de Crowdin..." + +msgid "Open From Crowdin..." +msgstr "Dobrir a partir de Crowdin..." + +msgid "&Close" +msgstr "&Tampar" + +msgid "&Save" +msgstr "&Enregistrar" + +msgid "Save &as..." +msgstr "Enregistrer &jos..." + +msgid "Save &As..." +msgstr "Enregistrer &jos..." + +msgid "Compile to MO..." +msgstr "Compilar lo MO..." + +msgid "E&xport as HTML..." +msgstr "Exportar en HTML…" + +msgid "Check for updates..." +msgstr "Recèrca de mesas a jorn..." + +msgid "&Preferences..." +msgstr "&Preferéncias..." + +msgid "Catalogs &manager" +msgstr "Gestion dels &catalògs" + +msgid "Catalogs &Manager" +msgstr "Gestion dels &catalògs" + +msgid "E&xit" +msgstr "&Quitar" + +msgid "Quit" +msgstr "Quitar" + +msgid "Copy from singular" +msgstr "Copiar del singular" + +msgid "Copy From Singular" +msgstr "Copiar del singular" + +msgid "Translation is &fuzzy" +msgstr "Traduccion &aproximativa" + +msgid "Translation Is &Fuzzy" +msgstr "Traduccion &aproximativa" + +msgid "Edit &comment" +msgstr "Mofidificar lo &comentari" + +msgid "Edit &Comment" +msgstr "Mofidificar lo &comentari" + +msgid "Suggestions" +msgstr "Suggestions" + +msgid "&Show references" +msgstr "&Veire las referéncias" + +msgid "&Show References" +msgstr "&Veire las referéncias" + +msgid "&Find..." +msgstr "&Recercar..." + +msgid "Replace..." +msgstr "Remplaçar..." + +msgid "Find next" +msgstr "Cercar lo seguent" + +msgid "Find previous" +msgstr "Trobar lo precedent" + +msgid "Find and Replace..." +msgstr "Recercar e remplaçar..." + +msgid "Find Next" +msgstr "Cercar lo seguent" + +msgid "Find Previous" +msgstr "Cercar lo precedent" + +msgid "&Preferences" +msgstr "&Preferéncias" + +msgid "Display entry &IDs" +msgstr "Afichar los &IDs de las entradas" + +msgid "Display Entry &IDs" +msgstr "Afichar los &IDs de las entradas" + +msgid "Sort by &file order" +msgstr "Triar per &fichièr" + +msgid "Sort by &File Order" +msgstr "Triar per &Fichièr" + +msgid "Sort by &source" +msgstr "Triar per &font" + +msgid "Sort by &Source" +msgstr "Triar per &Font" + +msgid "Sort by &translation" +msgstr "Triar per &traduccion" + +msgid "Sort by &Translation" +msgstr "Triar per &Traduccion" + +msgid "&Group by context" +msgstr "&Gropar per contèxte" + +msgid "&Group By Context" +msgstr "&Gropar per Contèxte" + +msgid "Entries with errors first" +msgstr "Entradas amb errors d'en primièr" + +msgid "Entries with Errors First" +msgstr "Entradas amb Errors d'en primièr" + +msgid "&Untranslated entries first" +msgstr "Entradas &pas traduitas d'en primièr" + +msgid "&Untranslated Entries First" +msgstr "Entradas &pas Traduitas d'en Primièr" + +msgid "Show sidebar" +msgstr "Afichar lo panèl lateral" + +msgid "Show status bar" +msgstr "Afichar la barra d'estat" + +msgid "C&atalog" +msgstr "&Catalòg" + +msgid "&Update from sources" +msgstr "&Metre a jorn dempuèi las fonts" + +msgid "&Update from Sources" +msgstr "&Metre a jorn dempuèi las Fonts" + +msgid "Update from &POT file..." +msgstr "Metre a jorn dempuèi un fichièr &POT..." + +msgid "Update from &POT File..." +msgstr "Metre a jorn dempuèi un fichièr &POT..." + +msgid "Sync with Crowdin" +msgstr "Sincronizar amb Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "Completar las traduccions mancantas amb l'M&T..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Completar las traduccions mancantas amb l'M&T..." + +msgid "&Purge deleted translations" +msgstr "&Escafar las traduccions suprimidas" + +msgid "&Purge Deleted Translations" +msgstr "&Escafar las traduccions suprimidas" + +msgid "&Validate translations" +msgstr "&Validar las traduccions" + +msgid "&Validate Translations" +msgstr "&Validar las traduccions" + +msgid "&Properties..." +msgstr "&Proprietats..." + +msgid "&Done and next" +msgstr "&Aplicar e contunhar" + +msgid "&Done and Next" +msgstr "&Aplicar e contunhar" + +msgid "&Previous translation" +msgstr "Traduccion &precedenta" + +msgid "&Previous Translation" +msgstr "Traduccion &precedenta" + +msgid "&Next translation" +msgstr "Traduccion segue&nta" + +msgid "&Next Translation" +msgstr "Traduccion segue&nta" + +msgid "P&revious unfinished" +msgstr "Incomplet p&recedent" + +msgid "P&revious Unfinished" +msgstr "Incomplet p&recedent" + +msgid "Ne&xt unfinished" +msgstr "Incomplet seguen&t" + +msgid "Ne&xt Unfinished" +msgstr "Incomplet seguen&t" + +msgid "Previous plural form" +msgstr "Forma plural precedenta" + +msgid "Previous Plural Form" +msgstr "Forma plural precedenta" + +msgid "Next plural form" +msgstr "Forma plurala seguenta" + +msgid "Next Plural Form" +msgstr "Forma plurala seguenta" + +msgid "&Online help" +msgstr "&Ajuda en linha" + +msgid "&Online Help" +msgstr "&Ajuda en linha" + +msgid "&GNU gettext manual" +msgstr "Manual de &GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "Manual de &GNU gettext" + +msgid "&About Poedit" +msgstr "&A prepaus de Poedit" + +msgid "&About" +msgstr "&A prepaus" + +msgid "Extractor setup" +msgstr "Installacion de l'extractor" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "" +"Lista de las extensions separadas per de punts-virgulas (ex. *.cpp;*.h) :" + +msgid "Invocation:" +msgstr "Apèl :" + +msgid "Command to extract translations:" +msgstr "Comanda per extraire de traduccions :" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Aquí las comandas qu'avian l'extractor.\n" +"%o : espandir al nom del fichièr de sortida,\n" +"%K : far la lista dels mots claus,\n" +"%F : far la lista dels fichièrs d'entrada,\n" +"%C : jòc de caractèrs (veire çaijós)." + +msgid "An item in keywords list:" +msgstr "Un element de la lista dels mots claus :" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Inserit dins la linha de comanda per cada\n" +"mot clau. %k : lo mot clau." + +msgid "An item in input files list:" +msgstr "Un element de la lista dels fichièrs d'entrada :" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Inserit dins la linha de comanda per cada\n" +"fichièr d'entrada. %f : nom del fichièr." + +msgid "Source code charset:" +msgstr "Jòc de caractèrs del còde font :" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Inserit dins la linha de comanda quand lo còde de jòc de\n" +"caractèrs de la font es provesit. %c : valor del jòc de caractèrs." + +msgid "Catalog properties" +msgstr "Proprietats del catalòg" + +msgid "Project name and version:" +msgstr "Nom e version del projècte :" + +msgid "Plural Forms:" +msgstr "Formas pluralas :" + +msgid "Use default rules for this language" +msgstr "Utilizar las règlas per defaut d'aquesta lenga" + +msgid "Use custom expression" +msgstr "Utilizar una expression personalizada" + +msgid "Learn about plural forms" +msgstr "Ne saber mai sus las formas pluralas" + +msgid "Charset:" +msgstr "Jòc de caractèrs :" + +msgid "Team:" +msgstr "Equipa de traduccion :" + +msgid "Team's email address:" +msgstr "Adreça electronica de l'equipa :" + +msgid "Translation properties" +msgstr "Proprietats de traduccion" + +msgid "Sources paths" +msgstr "Camins de las fonts" + +msgid "Extract text from source files in the following directories:" +msgstr "Extraire lo tèxte dels fichièrs fonts dins los repertòris seguents :" + +msgid "Base path:" +msgstr "Camin de basa :" + +msgid "Sources keywords" +msgstr "Mots claus fonts" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Utilizar aquestes mots claus (noms de foncions) per reconéisser las cadenas\n" +"tradusiblas dins los fichièrs fonts :" + +msgid "Learn about gettext keywords" +msgstr "Ne saber mai suls mots claus gettext" + +msgid "Update summary" +msgstr "Resumit de la mesa a jorn" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Las cadenas seguentas son estadas trobadas dins las fonts mas existisson pas " +"dins lo catalòg.\n" +"Poedit las apond al catalòg." + +msgid "New strings" +msgstr "Cadenas novèlas" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Aquestas cadenas son pas mai dins las fonts.\n" +"Poedit los leva del catalòg." + +msgid "Obsolete strings" +msgstr "Cadenas obsolètas" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 novèla, 0 obsolèta)" + +msgid "Open" +msgstr "Dobrir" + +msgid "Save catalog" +msgstr "Enregistrar lo catalòg" + +msgid "Validate" +msgstr "Validar" + +msgid "Check for errors in the translation" +msgstr "Verificar las errors dins la traduccion" + +msgid "Update" +msgstr "Metre a jorn" + +msgid "Update catalog - synchronize it with sources" +msgstr "Metre a jorn lo catalòg - Sincronizar amb las fonts" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Activar se la cadena seleccionada es traduita aproximativament" + +msgid "Show or hide the sidebar" +msgstr "Afichar o amagar lo panèl lateral" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Tèxte font precedent :" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"L'ancian tèxte font (abans son cambiament pendent una mesa a jorn) al qual " +"correspond la traduccion aproximativa." + +msgid "Notes for translators:" +msgstr "Nòtas pels traductors :" + +msgid "Add comment" +msgstr "Apondre un comentari" + +msgid "Add Comment" +msgstr "Apondre un comentari" + +msgid "Translation suggestions:" +msgstr "Suggestions de traduccion :" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Cap de correspondéncia pas trobada" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Cap de Correspondéncia pas trobada" + +msgid "This string was found in Poedit’s translation memory." +msgstr "" +"Aquesta cadena es estada trobada dins la memòria de traduccion de Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novèla : %i, obsolèta : %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Impòrt de traduccions : %d" + +msgid "Poedit Update" +msgstr "Mesa a jorn de Poedit" + +msgid "Preparing migration..." +msgstr "Preparacion de la migracion..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Estat de la migracion : %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" +"Poedit deu convertir vòstra memòria de traduccion dins un format novèl." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"O cal far abans l'aviada de Poedit. Aquò pòt prene qualques minutas se avètz " +"fòrça traduccions d'emmagazinadas, mas normalament, aquò deuriá èsser mai " +"rapid." + +msgid "Proceed" +msgstr "Contunhar" + +msgid "Translation memory migration failed." +msgstr "Fracàs de la migracion de la memòria de traduccion." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Impossible de migrar vòstra memòria de traduccion. L'error es : \n" +"\n" +" • %s\n" +"\n" +"Mandatz un e-mail a help@poedit.net per que poscam reglar lo problèma." + +msgid "Cannot create temporary directory." +msgstr "Impossible de crear lo repertòri temporari." + +msgid "Welcome to Poedit" +msgstr "Benvenguda dins Poedit" + +msgid "Edit a translation" +msgstr "Modificar una traduccion" + +msgid "Open an existing PO file and edit the translation." +msgstr "Dobrir un fichièr PO existent e modificar la traduccion." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Crear una novèla traduccion a partir d'un fichièr PO o d'un modèl POT " +"existent." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Collaborar a una traduccion amb Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Telecargar un fichièr d'un projècte Crowdin, traduire e sincronizar vòstras " +"modificacions." + +msgid "What is Crowdin?" +msgstr "Qu'es aquò Crowdin ?" + +msgid "There are no translations. That’s unusual." +msgstr "I a pas cap de traduccions. Es pas corrent." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Las entradas tradusiblas son pas apondudas manualament al sistèma Gettext, " +"mas son extrachas automaticament\n" +"a partir del còde font. D'aqueste biais, demòran a jorn e exactas.\n" +"Los traductors utilizan generalament de fichièrs de modèl PO (POTS) " +"preparats pel desvolopaire." + +msgid "(Learn more about GNU gettext)" +msgstr "(Ne saber mai sus GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Lo biais lo mai simple d'emplenar aqueste catalòg es de lo metre a jorn " +"dempuèi un fichièr POT :" + +msgid "Update from POT" +msgstr "Metre a jorn dempuèi un POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Utilizar las cadenas tradusiblas d'un modèl POT existent." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Tanben podètz extraire las cadenas tradusiblas dirèctament a partir del còde " +"font :" + +msgid "Extract from sources" +msgstr "Extraire dempuèi las fonts" + +msgid "Configure source code extraction in Properties." +msgstr "Configurar l’extraccion de còde font dins las Proprietats." + +msgid "Sync" +msgstr "Sincronizar" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sincronizar la traduccion amb Crowdin" diff --git a/locales/pa.mo b/locales/pa.mo new file mode 100644 index 0000000000000000000000000000000000000000..ba4dfe2578864c8339d9866cadbe7ef7835dbe03 GIT binary patch literal 31510 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 literal 0 HcmV?d00001 diff --git a/locales/pa.po b/locales/pa.po new file mode 100644 index 0000000..455145f --- /dev/null +++ b/locales/pa.po @@ -0,0 +1,1855 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:04-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Punjabi\n" +"Language: pa_IN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: pa-IN\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "ਇਹ ਸੂਚਨਾ ਸੁਨੇਹਾ ਓਹਲੇ ਕਰੋ" + +msgid "Don't Show Again" +msgstr "ਮੁੜ ਨਾ ਵੇਖਾਓ" + +msgid "Don't show again" +msgstr "ਮੁੜ ਨਾ ਵੇਖਾਓ" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "" +msgstr[1] "'%s' ਫਾਈਲ ਦੀਆਂ ਲਾਈਨਾਂ %i ਠੀਕ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਸੀ ਹੋਈਆਂ।" + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "" + +#, c-format +msgid "Malformed header: '%s'" +msgstr "ਨਿਕਾਰਾ ਹੈੱਡਰ: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "ਟੁੱਟੀ ਕੈਟਾਲਾਗ ਫਾਇਲ: ਇਕਹੇਰੀ msgstr ਨੂੰ msgid_plural ਨਾਲ ਵਰਤਿਆ ਗਿਆ ਹੈ" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "ਟੁੱਟੀ ਕੈਟਾਲਾਗ ਫਾਇਲ: ਬਹੁ-ਵਚਨ msgstr ਨੂੰ msgid_plural ਬਿਨਾਂ ਵਰਤਿਆ ਗਿਆ ਹੈ" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "ਕੈਟਾਲਾਗ ਲੋਡ ਕਰਨ ਦੋਰਾਨ ਗਲਤੀ ਹੈ। ਨਤੀਜੇ ਵਜੋਂ ਕੁਝ ਡਾਟਾ ਗੁੰਮ ਹੈ ਜਾਂ ਨਿਕਾਰਾ ਹੋ ਗਿਆ ਹੈ।" + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "ਫਾਇਲ %s ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ, ਇਹ ਸ਼ਾਇਦ ਨਿਕਾਰਾ ਹੈ।" + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"ਫਾਇਲ '%s' ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ ਹੈ ਅਤੇ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ।\n" +"ਇੱਕ ਵੱਖਰੇ ਨਾਂ ਨਾਲ ਸੰਭਾਲੋ ਜੀ।" + +#, c-format +msgid "Couldn't save file %s." +msgstr "%s ਫਾਈਲ ਸੰਭਾਲੀ ਨਹੀਂ ਜਾ ਸਕੀ।" + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "ਫਾਈਲ ਨੂੰ ਸਹੀ ਤਰ੍ਹਾਂ ਫਾਰਮੇਟ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਖ਼ਾਮੀ ਆਈ ਸੀ (ਪਰ ਇਹ ਠੀਕ ਤਰ੍ਹਾਂ ਸੰਭਾਲੀ ਗਈ)।" + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" + +msgid "Error saving catalog" +msgstr "ਕੈਟਾਲਾਗ ਸੰਭਾਲਣ ਦੌਰਾਨ ਗਲਤੀ" + +msgid "PO Translation Files" +msgstr "PO ਅਨੁਵਾਦ ਫਾਈਲਾਂ" + +msgid "POT Translation Templates" +msgstr "" + +msgid "All Translation Files" +msgstr "" + +msgid "Merging differences..." +msgstr "ਅੰਤਰ ਵਿਲੀਨ ਕੀਤਾ ਜਾ ਰਹੇ ਹਨ..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' ਇੱਕ ਸਹੀ POT ਫਾਇਲ ਨਹੀਂ ਹੈ।" + +msgid "(Use default language)" +msgstr "(ਮੂਲ ਭਾਸ਼ਾ ਵਰਤੋਂ)" + +msgid "Select your preferred language" +msgstr "ਆਪਣੀ ਪਸੰਦ ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ" + +msgid "Language selection" +msgstr "ਭਾਸ਼ਾ ਚੋਣ" + +msgid "You must restart Poedit for this change to take effect." +msgstr "ਤੁਹਾਨੂੰ ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰਨ ਲਈ ਪੋਆਡਿਟ ਮੁੜ ਚਾਲੂ ਕਰਨਾ ਪਵੇਗਾ।" + +msgid "Downloading translations is disabled in this project." +msgstr "" + +msgid "Not authorized, please sign in again." +msgstr "" + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" + +msgid "Sign In" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid "Sign Out" +msgstr "" + +msgid "Sign out" +msgstr "" + +msgid "Waiting for authentication…" +msgstr "" + +msgid "Updating user information…" +msgstr "" + +msgid "Signed in as:" +msgstr "" + +msgid "Learn More About Crowdin" +msgstr "" + +msgid "Learn more about Crowdin" +msgstr "" + +msgid "Sign in to Crowdin" +msgstr "" + +msgid "Open Crowdin translation" +msgstr "" + +msgid "Project:" +msgstr "ਪਰੋਜੈਕਟ:" + +msgid "Language:" +msgstr "ਭਾਸ਼ਾ:" + +msgid "File:" +msgstr "ਫ਼ਾਇਲ:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "" + +msgid "This project has no files that can be translated in Poedit." +msgstr "" + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "" + +msgid "Downloading latest translations…" +msgstr "" + +msgid "Syncing with Crowdin" +msgstr "" + +msgid "Syncing with Crowdin failed." +msgstr "" + +msgid "Crowdin error" +msgstr "" + +msgid "Uploading translations…" +msgstr "" + +msgid "&Copy" +msgstr "ਕਾਪੀ ਕਰੋ(&C)" + +msgid "Learn more" +msgstr "ਹੋਰ ਜਾਣੋ" + +msgid "Learn More" +msgstr "ਹੋਰ ਜਾਣੋ" + +#, c-format +msgid "Failed command: %s" +msgstr "ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੋਈ: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "gettext ਕੈਟਾਲਾਨ ਮਿਲਾਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।" + +msgid "Scanning files..." +msgstr "ਫਾਇਲਾਂ ਫੋਲੀਆਂ ਜਾ ਰਹੀਆਂ ਹਨ..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "%s ਫਾਇਲਾਂ ਪਾਰਸ ਕੀਤੀਆਂ ਜਾ ਰਹੀਆਂ ਹਨ..." + +msgid "Failed to load extracted catalog." +msgstr "ਖੋਲ੍ਹੇ ਗਏ ਕੈਟਾਲਾਗ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।" + +msgid "&Help" +msgstr "ਮੱਦਦ(&H)" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "" + +msgid "Error opening file" +msgstr "ਫਾਈਲ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" + +msgid "don't delete temporary files (for debugging)" +msgstr "" + +msgid "handle a poedit:// URI" +msgstr "" + +msgid "Failed to communicate with Poedit process." +msgstr "" + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "" + +msgid "Unhandled exception occurred." +msgstr "" + +msgid "Open catalog" +msgstr "ਕੈਟਾਲਾਗ ਖੋਲ੍ਹੋ" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "ਫਾਇਲ '%s' ਮੌਜੂਦ ਨਹੀਂ ਹੈ।" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "%s ਬਾਰੇ" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "%s ਵਰਜ਼ਨ" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "ਪੋਆਡਿਟ ਵਰਤਣ ਲਈ ਸੌਖਾ ਅਨੁਵਾਦ ਸੰਪਾਦਕ ਹੈ।" + +msgid "Catalogs Manager" +msgstr "ਕੈਟਲਾਗ ਮੈਨੇਜਰ" + +msgid "Check for Updates..." +msgstr "ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ..." + +msgid "&Edit" +msgstr "ਸੋਧ(&E)" + +msgid "Undo" +msgstr "ਵਾਪਸ" + +msgid "Redo" +msgstr "ਵਾਪਿਸ ਕਰੋ" + +msgid "Paste and Match Style" +msgstr "" + +msgid "Delete" +msgstr "ਹਟਾਓ" + +msgid "Spelling and Grammar" +msgstr "ਸ਼ਬਦ-ਜੋੜ ਅਤੇ ਵਿਆਕਰਨ" + +msgid "Show Spelling and Grammar" +msgstr "ਸ਼ਬਦ-ਜੋੜ ਅਤੇ ਵਿਆਕਰਨ ਵੇਖਾਓ" + +msgid "Check Document Now" +msgstr "ਦਸਤਾਵੇਜ਼ ਦੀ ਹੁਣੇ ਜਾਂਚ ਕਰੋ" + +msgid "Check Spelling While Typing" +msgstr "ਲਿਖਣ ਦੇ ਨਾਲ ਨਾਲ ਹੀ ਸ਼ਬਦ-ਜੋੜ ਚੈੱਕ ਕਰੋ" + +msgid "Check Grammar With Spelling" +msgstr "ਲਿਖਣ ਦੇ ਨਾਲ ਨਾਲ ਵਿਆਕਰਨ ਦੀ ਜਾਂਚ ਕਰੋ" + +msgid "Correct Spelling Automatically" +msgstr "ਆਪਣੇ-ਆਪ ਹੀ ਸ਼ਬਦ-ਜੋੜ ਠੀਕ ਕਰੋ" + +msgid "Substitutions" +msgstr "" + +msgid "Show Substitutions" +msgstr "" + +msgid "Smart Copy/Paste" +msgstr "ਚੁਸਤ ਕਾਪੀ ਕਰਨਾ/ਚੇਪਣਾ" + +msgid "Smart Quotes" +msgstr "" + +msgid "Smart Dashes" +msgstr "" + +msgid "Smart Links" +msgstr "" + +msgid "Text Replacement" +msgstr "ਪਾਠ ਤਬਾਦਲਾ" + +msgid "Transformations" +msgstr "" + +msgid "Make Upper Case" +msgstr "" + +msgid "Make Lower Case" +msgstr "" + +msgid "Capitalize" +msgstr "ਅੰਗਰੇਜ਼ੀ ਦੇ ਵੱਡੇ ਅੱਖਰ" + +msgid "Speech" +msgstr "ਸਪੀਚ" + +msgid "Start Speaking" +msgstr "ਬੋਲਣਾ ਸ਼ੁਰੂ ਕਰੋ" + +msgid "Stop Speaking" +msgstr "ਬੋਲਣਾ ਰੋਕੋ" + +msgid "&View" +msgstr "ਵੇਖੋ(&V)" + +msgid "Enter Full Screen" +msgstr "ਪੂਰੀ ਸਕਰੀਨ ਉਤੇ ਜਾਓ" + +msgid "Window" +msgstr "ਵਿੰਡੋ" + +msgid "Minimize" +msgstr "ਘੱਟੋ-ਘੱਟ" + +msgid "Zoom" +msgstr "ਜ਼ੂਮ" + +msgid "Bring All to Front" +msgstr "ਸਭ ਤੋਂ ਅੱਗੇ ਲਿਆਓ" + +msgid "PO Translation" +msgstr "PO ਅਨੁਵਾਦ" + +msgid "The file cannot be opened." +msgstr "ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ।" + +msgid "Invalid file" +msgstr "ਗਲਤ ਫਾਈਲ" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "" + +msgid "&Undo" +msgstr "ਵਾਪਿਸ ਲਵੋ(&U)" + +msgid "&Redo" +msgstr "ਪਰਤਾਓ(&R)" + +msgid "Cu&t" +msgstr "ਕੱਟੋ(&t)" + +msgid "Cut" +msgstr "ਕੱਟੋ" + +msgid "Copy" +msgstr "ਕਾਪੀ ਕਰੋ" + +msgid "&Paste" +msgstr "ਚੇਪੋ(&P)" + +msgid "Paste" +msgstr "ਚੇਪੋ" + +msgid "&Delete" +msgstr "ਹਟਾਓ(&D)" + +msgid "Select &All" +msgstr "ਸਭ ਚੁਣੋ(&A)" + +msgid "Select All" +msgstr "ਸਭ ਚੁਣੋ" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Up" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Down" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "ਤੁਸੀ ਪੋਆਡਿਟ ਵਿੰਡੋ ਵਿਚ ਇਕ ਤੋਂ ਵੱਧ ਫਾਇਲ ਸੁੱਟ ਨਹੀ ਸਕਦੇ ਹੋ।" + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "ਫਾਈਲ '%s' ਸੁਨੇਹਾ ਕੈਟਾਲਾਗ ਨਹੀਂ ਹੈ।" + +msgid "Poedit" +msgstr "ਪੋਆਡਿਟ" + +msgid "&File" +msgstr "ਫਾਇਲ(&F)" + +msgid "&Go" +msgstr "ਜਾਓ(&G)" + +msgid "Source text:" +msgstr "ਸਰੋਤ ਪਾਠ:" + +msgid "Singular:" +msgstr "ਇਕਹੇਰਾ:" + +msgid "Plural:" +msgstr "ਬਹੁ-ਵਚਨ:" + +msgid "Translation:" +msgstr "ਅਨੁਵਾਦ:" + +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 "" + +msgid "Create New Translation" +msgstr "" + +msgid "Create new translation" +msgstr "ਨਵਾਂ ਅਨੁਵਾਦ ਬਣਾਓ" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" + +msgid "Install" +msgstr "ਇੰਸਟਾਲ ਕਰੋ" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "ਕੈਟਾਲਾਗ ਸੋਧੀ ਗਈ ਹੈ, ਕੀ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੀਆਂ ਚਾਹੋਗੇ?" + +msgid "Save changes" +msgstr "ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੋ" + +msgid "Your changes will be lost if you don't save them." +msgstr "ਜੇ ਤੁਸੀਂ ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਨਾ ਸੰਭਾਲਿਆ ਤਾਂ ਉਹ ਖਤਮ ਹੋ ਜਾਣਗੀਆਂ।" + +msgid "Save" +msgstr "ਸੰਭਾਲੋ" + +msgid "Don't save" +msgstr "ਨਾ ਸੰਭਾਲੋ" + +msgid "Don't Save" +msgstr "ਨਾ ਸੰਭਾਲੋ" + +msgid "Save as..." +msgstr "...ਵਜੋਂ ਸੰਭਾਲੋ" + +msgid "Compile to..." +msgstr "...ਲਈ ਕੰਪਾਇਲ" + +msgid "Compiled Translation Files" +msgstr "ਕੰਪਾਇਲ ਕੀਤੀਆਂ ਅਨੁਵਾਦ ਫਾਈਲਾਂ" + +msgid "Export as..." +msgstr "...ਵਜੋਂ ਐਕਸਪੋਰਟ" + +msgid "HTML Files" +msgstr "HTML ਫਾਈਲਾਂ" + +msgid "Open catalog template" +msgstr "ਕੈਟਾਲਾਗ ਟੈਪਲੇਟ ਖੋਲ੍ਹੋ" + +msgid "Updating catalog" +msgstr "ਕੈਟਾਲਾਗ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + +msgid "Source code not available." +msgstr "ਸਰੋਤ ਕੋਡ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।" + +msgid "Updating failed" +msgstr "ਅੱਪਡੇਟ ਕਰਨਾ ਫੇਲ੍ਹ ਹੈ।" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" + +msgid "Entries in the catalog are probably incorrect." +msgstr "ਕੈਟਾਲਾਗ ਵਿਚ ਐਂਟਰੀਆਂ ਸੰਭਵ ਹੈ ਕਿ ਠੀਕ ਨਹੀਂ ਹੈ।" + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "" + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "" +msgstr[1] "" + +msgid "Validation results" +msgstr "" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" + +msgid "The file was saved safely." +msgstr "ਫ਼ਾਈਲ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸੰਭਾਲੀ ਗਈ।" + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" + +msgid "The file cannot be compiled into the MO format and used." +msgstr "" + +msgid "No problems with the translation found." +msgstr "ਅਨੁਵਾਦ ਵਿੱਚ ਕੋਈ ਸਮੱਸਿਆ ਨਹੀ ਲੱਭੀ।" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "" +msgstr[1] "" + +msgid "The translation is ready for use." +msgstr "" + +msgid "Context:" +msgstr "" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "" + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" + +msgid "Language of the translation isn't set." +msgstr "ਅਨੁਵਾਦ ਦੀ ਭਾਸ਼ਾ ਹਾਲੇ ਸੈੱਟ ਨਹੀਂ ਹੈ।" + +msgid "Set Language" +msgstr "ਭਾਸ਼ਾ ਦਿਓ" + +msgid "Set language" +msgstr "ਭਾਸ਼ਾ ਦਿਓ" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" + +msgid "Language of the translation is the same as source language." +msgstr "" + +msgid "Fix Language" +msgstr "" + +msgid "Fix language" +msgstr "" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" + +msgid "Required header Plural-Forms is missing." +msgstr "" + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "" + +msgid "Fix the Header" +msgstr "" + +msgid "Fix the header" +msgstr "" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "ਪੜਤਾਲ" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "ਸੁਨੇਹਾ ਕੈਟਾਲਾਗ ਫਾਇਲ '%s' ਲੋਡ ਕਰਨ 'ਚ ਗਲਤੀ।" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "ਅਨੁਵਾਦ ਕੀਤਾ: %2$d ਵਿੱਚੋਂ %1$d (%3$d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "ਬਾਕੀ: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d ਗਲਤੀ" +msgstr[1] "%d ਗਲਤੀਆਂ" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "" +msgstr[1] "" + +msgid " (unsaved)" +msgstr " (ਨਾ-ਸੰਭਾਲਿਆ)" + +msgid " (modified)" +msgstr " (ਸੋਧੀ)" + +msgid "Go" +msgstr "ਜਾਓ" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "ਅਨੁਵਾਦ ਮੈਮੋਰੀ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ: %s" + +msgid "Purge deleted translations" +msgstr "ਹਟਾਏ ਗਏ ਅਨੁਵਾਦ ਨੂੰ ਕੱਢੋ" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "ਕੀ ਤੁਸੀਂ ਸਭ ਅਨੁਵਾਦਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਜੋ ਕਿ ਹੁਣ ਵਰਤੋਂ ਯੋਗ ਨਹੀਂ ਹਨ?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" + +msgid "Keep" +msgstr "ਰੱਖੋ" + +msgid "Purge" +msgstr "" + +msgid "Fill missing translations from TM" +msgstr "ਗ਼ੈਰ-ਮੌਜੂਦ ਅਨੁਵਾਦ ਨੂੰ TM ਰਾਹੀਂ ਭਰੋ" + +msgid "Only fill in exact matches" +msgstr "" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" + +msgid "Don’t mark exact matches as fuzzy" +msgstr "" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" + +msgid "Fill" +msgstr "ਭਰੋ" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" + +msgid "No entries could be filled from the translation memory." +msgstr "" + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" + +msgid "Translating" +msgstr "ਅਨੁਵਾਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + +msgid "Filling missing translations from TM..." +msgstr "...ਗ਼ੈਰ-ਮੌਜੂਦ ਅਨੁਵਾਦ ਨੂੰ TM ਰਾਹੀਂ ਭਰਿਆ ਜਾ ਰਿਹਾ ਹੈ" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "%u ਲਾਈਨ ਦਾ ਅਨੁਵਾਦ ਹੋਇਆ" +msgstr[1] "%u ਲਾਈਨਾਂ ਦਾ ਅਨੁਵਾਦ ਹੋਇਆ" + +msgid "Copy from source text" +msgstr "ਸਰੋਤ ਪਾਠ ਤੋਂ ਕਾਪੀ ਕਰੋ" + +msgid "Copy from Source Text" +msgstr "ਸਰੋਤ ਪਾਠ ਤੋਂ ਕਾਪੀ ਕਰੋ" + +msgid "Clear translation" +msgstr "ਅਨੁਵਾਦ ਸਾਫ਼ ਕਰੋ" + +msgid "Clear Translation" +msgstr "ਅਨੁਵਾਦ ਸਾਫ਼ ਕਰੋ" + +msgid "Edit comment" +msgstr "ਟਿੱਪਣੀ ਸੋਧ" + +msgid "Edit Comment" +msgstr "ਟਿੱਪਣੀ ਸੋਧੋ" + +msgid "References:" +msgstr "ਹਵਾਲਾ:" + +msgid "Everything" +msgstr "ਹਰ ਚੀਜ਼" + +#, c-format +msgid "Form %i" +msgstr "ਫਾਰਮ %i" + +msgid "Singular" +msgstr "" + +msgid "Zero" +msgstr "ਸਿਫ਼ਰ" + +msgid "One" +msgstr "ਇੱਕ" + +msgid "Two" +msgstr "ਦੋ" + +msgid "Plural" +msgstr "" + +msgid "Other" +msgstr "ਹੋਰ" + +msgid "&Bookmarks" +msgstr "ਬੁੱਕਮਾਰਕ(&B)" + +#, c-format +msgid "Set bookmark %i" +msgstr "" + +#, c-format +msgid "Go to bookmark %i" +msgstr "" + +#, c-format +msgid "Set Bookmark %i" +msgstr "" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "" + +msgid "Hide Sidebar" +msgstr "ਬਾਹੀ ਓਹਲੇ ਕਰੋ" + +msgid "Show Sidebar" +msgstr "ਬਾਹੀ ਵੇਖਾਓ" + +msgid "Hide Status Bar" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Source text" +msgstr "ਸਰੋਤ ਪਾਠ" + +msgid "Translation" +msgstr "ਅਨੁਵਾਦ" + +msgid "ID" +msgstr "ਆਈਡੀ" + +#, c-format +msgid "Source text — %s" +msgstr "" + +msgid "unknown language" +msgstr "ਅਣਜਾਣ ਭਾਸ਼ਾ" + +#, c-format +msgid "Translation — %s" +msgstr "ਅਨੁਵਾਦ — %s" + +msgid "Error:" +msgstr "ਗਲਤੀ:" + +msgid "Source file" +msgstr "ਸਰੋਤ ਫਾਇਲ" + +msgid "Source file occurrence:" +msgstr "ਸਰੋਤ ਫ਼ਾਈਲ ਮੌਜੂਦਗੀ:" + +msgid "Open in Editor" +msgstr "ਐਡੀਟਰ ਵਿੱਚ ਖੋਲ੍ਹੋ" + +msgid "Open in editor" +msgstr "ਐਡੀਟਰ ਵਿੱਚ ਖੋਲ੍ਹੋ" + +msgid "No references for the selected item." +msgstr "" + +#, c-format +msgid "Error opening file %s!" +msgstr "ਫਾਇਲ %s ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ!" + +msgid "Find" +msgstr "ਲੱਭੋ" + +msgid "Replace" +msgstr "ਤਬਦੀਲ" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "ਚੋਣਾਂ" + +msgid "Ignore case" +msgstr "" + +msgid "Wrap around" +msgstr "" + +msgid "Whole words only" +msgstr "ਪੂਰੇ ਸ਼ਬਦ ਹੀ" + +msgid "Find in source texts" +msgstr "" + +msgid "Find in translations" +msgstr "ਅਨੁਵਾਦ ਵਿੱਚ ਲੱਭੋ" + +msgid "Find in comments" +msgstr "ਟਿੱਪਣੀ ਵਿੱਚ ਖੋਜ" + +msgid "Close" +msgstr "ਬੰਦ ਕਰੋ" + +msgid "Replace All" +msgstr "" + +msgid "Replace all" +msgstr "" + +msgid "< &Previous" +msgstr "< ਪਿੱਛੇ(&P)" + +msgid "&Next >" +msgstr "ਅੱਗੇ(&N) >" + +msgid "String to find" +msgstr "" + +msgid "Replacement string" +msgstr "" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "ਪ੍ਰੋਗਰਾਮ ਚਲਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "ਭਾਸ਼ਾ ਕੋਡ ਜਾਂ ਨਾਂ (ਜਿਵੇਂ pa_IN)" + +msgid "Translation Language" +msgstr "ਅਨੁਵਾਦ ਭਾਸ਼ਾ" + +msgid "Language of the translation:" +msgstr "ਅਨੁਵਾਦ ਦੀ ਭਾਸ਼ਾ:" + +msgid "Poedit - Catalogs manager" +msgstr "ਪੋਆਡਿਟ - ਕੈਟਾਲਾਗ ਮੈਨੇਜਰ" + +msgid "Catalog" +msgstr "ਕੈਟਾਲਾਗ" + +msgid "Total" +msgstr "ਕੁੱਲ" + +msgid "Untrans" +msgstr "ਨਾ-ਅਨੁਵਾਦ" + +msgid "Fuzzy" +msgstr "ਅਸਪਸ਼ਟ" + +msgid "Bad Tokens" +msgstr "ਗਲਤ ਟੋਕਨ" + +msgid "Last modified" +msgstr "ਆਖਰੀ ਸੋਧ" + +msgid "Select directory" +msgstr "ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ" + +msgid "Directories:" +msgstr "ਡਾਇਰੈਕਟਰੀ:" + +msgid "" +msgstr "<ਬੇਨਾਮ>" + +msgid "Do you want to delete the project?" +msgstr "ਕੀ ਤੁਸੀ ਪ੍ਰੋਜੈਕਟ ਖਤਮ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" + +msgid "Confirmation" +msgstr "ਪੁਸ਼ਟੀ" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"ਕੀ ਤੁਸੀ ਇਸ ਪ੍ਰੋਜੈਕਟ ਦੇ ਸਭ ਕੈਟਾਲਾਗ ਦਾ ਇੱਕ ਵਾਰ\n" +"ਹੀ ਅੱਪਡੇਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" + +msgid "Information about the translator" +msgstr "ਅਨੁਵਾਦਕ ਬਾਰੇ ਜਾਣਕਾਰੀ" + +msgid "Name:" +msgstr "ਨਾਂ:" + +msgid "Your Name" +msgstr "ਤੁਹਾਡਾ ਨਾਂ" + +msgid "Email:" +msgstr "ਈਮੇਲ:" + +msgid "your_email@example.com" +msgstr "your_email@example.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" + +msgid "Editing" +msgstr "ਸੋਧਿਆ ਜਾਂਦਾ ਹੈ" + +msgid "Automatically compile MO file when saving" +msgstr "ਸੰਭਾਲਣ ਉੱਤੇ ਆਟੋਮੈਟਿਕ ਹੀ MO ਫ਼ਾਈਲ ਕੰਪਾਈਲ ਕਰੋ" + +msgid "Show summary after catalog update" +msgstr "ਕੈਟਾਲਾਗ ਅੱਪਡੇਟ ਮਗਰੋਂ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਵੇਖੋ" + +msgid "Check spelling" +msgstr "ਸ਼ਬਦ-ਜੋੜ ਜਾਂਚ ਕਰੋ" + +msgid "Always change focus to text input field" +msgstr "ਹਮੇਸ਼ਾ ਪਾਠ ਲਿਖਣ ਖੇਤਰ 'ਤੇ ਹੀ ਕੇਂਦਰਿਤ ਕਰੋ" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"ਸਤਰਾਂ ਦੀ ਸੂਚੀ ਕਦੇ ਕੇਂਦਰਿਤ ਨਾ ਹੋਣ ਦਿਉ। ਜੇ ਏਦਾਂ ਹੈ ਤਾਂ ਤੁਸੀਂ ਕੀਬੋਰਡ ਦੇ Ctrl- ਤੀਰ ਬਟਨਾਂ ਨਾਲ ਚੱਲ " +"ਸਕਦੇ ਹੋ, ਪਰ ਤੁਸੀ Tab ਦਬਾਏ ਬਿਨਾਂ ਵੀ ਤੁਰੰਤ ਲਿਖ ਸਕਦੇ ਹੋ।" + +msgid "Appearance" +msgstr "ਦਿੱਖ" + +msgid "Use custom list font:" +msgstr "ਪਸੰਦੀਦਾ ਸੂਚੀ ਫ਼ੋਟ ਵਰਤੋਂ:" + +msgid "Use custom text fields font:" +msgstr "ਪਸੰਦੀਦਾ ਪਾਠ ਖੇਤਰ ਫ਼ੋਂਟ ਵਰਤੋਂ:" + +msgid "Change UI language" +msgstr "UI ਭਾਸ਼ਾ ਬਦਲੋ" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(ਵਿੰਡੋਜ਼ 8 ਜਾਂ ਨਵੀਂ ਚਾਹੀਦੀ ਹੈ)" + +msgid "General" +msgstr "ਆਮ" + +msgid "Use translation memory" +msgstr "ਅਨੁਵਾਦ ਮੈਮੋਰੀ ਵਰਤੋਂ" + +msgid "Learn From Files..." +msgstr "...ਫਾਈਲਾਂ ਤੋਂ ਸਿੱਖੋ" + +msgid "Learn from files..." +msgstr "...ਫਾਈਲਾਂ ਤੋਂ ਸਿੱਖੋ" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ" + +msgid "Consult TM when updating from sources" +msgstr "" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" + +msgid "Stored translations:" +msgstr "" + +msgid "Database size on disk:" +msgstr "" + +msgid "Select translation files to import" +msgstr "" + +msgid "Translation Memory" +msgstr "ਅਨੁਵਾਦ ਮੈਮੋਰੀ" + +msgid "Importing translations..." +msgstr "" + +msgid "Finalizing..." +msgstr "" + +msgid "Reset translation memory" +msgstr "" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" + +msgid "Cancel" +msgstr "ਰੱਦ ਕਰੋ" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" + +msgid "New" +msgstr "ਨਵਾਂ" + +msgid "Edit" +msgstr "ਸੋਧ" + +msgid "Delete extractor" +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "" + +msgid "Extractors" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Automatically check for updates" +msgstr "ਆਟੋਮੈਟਿਕ ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ" + +msgid "Include beta versions" +msgstr "ਬੀਟਾ ਵਰਜਨ ਸਮੇਤ" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" + +msgid "Updates" +msgstr "ਅੱਪਡੇਟ" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" + +msgid "Line endings:" +msgstr "ਲਾਈਨ ਸਮਾਪਤੀ:" + +msgid "Unix (recommended)" +msgstr "" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "" + +msgid "Preserve formatting of existing files" +msgstr "" + +msgid "Advanced" +msgstr "ਤਕਨੀਕੀ" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" + +msgid "Add Folders..." +msgstr "...ਫੋਲਡਰ ਜੋੜੋ" + +msgid "Add folders..." +msgstr "...ਫੋਲਡਰ ਜੋੜੋ" + +msgid "Add Files..." +msgstr "...ਫ਼ਾਈਲਾਂ ਜੋੜੋ" + +msgid "Add files..." +msgstr "...ਫਾਈਲਾਂ ਜੋੜੋ" + +msgid "Add Wildcard..." +msgstr "" + +msgid "Add wildcard..." +msgstr "" + +msgid "Paths" +msgstr "ਮਾਰਗ" + +msgid "Excluded paths" +msgstr "" + +msgid "Additional keywords" +msgstr "ਵਾਧੂ ਕੀਵਰਡ" + +msgid "Name of the project the translation is for" +msgstr "ਅਨੁਵਾਦ ਦੇ ਪ੍ਰੋਜੈਕਟ ਦਾ ਨਾਂ" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "ਜਿਵੇਂ nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (ਸਿਫਾਰਸ਼ੀ)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" + +msgid "Comment:" +msgstr "ਟਿੱਪਣੀ:" + +msgid "OK" +msgstr "ਠੀਕ ਹੈ" + +msgid "C&lear" +msgstr "ਸਾਫ਼ ਕਰੋ(&l)" + +msgid "Clear the comment" +msgstr "ਟਿੱਪਣੀ ਸਾਫ਼ ਕਰੋ" + +msgid "Create new translations project" +msgstr "ਨਵਾਂ ਭਾਸ਼ਾ ਅਨੁਵਾਦ ਪ੍ਰੋਜੈਕਟ ਬਣਾਓ" + +msgid "Edit the project" +msgstr "ਪ੍ਰੋਜੈਕਟ ਸੋਧ" + +msgid "Delete the project" +msgstr "ਪ੍ਰੋਜੈਕਟ ਹਟਾਓ" + +msgid "Update all" +msgstr "ਸਭ ਅੱਪਡੇਟ" + +msgid "Update all catalogs in the project" +msgstr "ਪ੍ਰੋਜੈਕਟ ਵਿਚਲੀਆਂ ਸਭ ਕੈਟਾਲਾਗ ਅੱਪਡੇਟ" + +msgid "Edit project" +msgstr "ਪ੍ਰੋਜੈਕਟ ਸੋਧ" + +msgid "Project name:" +msgstr "ਪ੍ਰੋਜੈਕਟ ਨਾਂ :" + +msgid "Browse" +msgstr "ਝਲਕ" + +msgid "Add directory to the list" +msgstr "ਡਾਇਰੈਕਟਰੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ" + +msgid "&New..." +msgstr "ਨਵਾਂ(&N)..." + +msgid "New from &POT/PO file..." +msgstr "...&POT/PO ਫ਼ਾਈਲ ਤੋਂ ਨਵਾਂ" + +msgid "New From &POT/PO File..." +msgstr "&POT/PO ਫ਼ਾਈਲ ਤੋਂ ਨਵਾਂ..." + +msgid "&Open..." +msgstr "ਖੋਲ੍ਹੋ(&O)..." + +msgid "Open Recent" +msgstr "ਤਾਜ਼ਾ ਖੋਲ੍ਹੇ" + +msgid "Open from Crowdin..." +msgstr "" + +msgid "Open From Crowdin..." +msgstr "" + +msgid "&Close" +msgstr "ਬੰਦ ਕਰੋ(&C)" + +msgid "&Save" +msgstr "ਸੰਭਾਲੋ(&S)" + +msgid "Save &as..." +msgstr "...ਵਜੋਂ ਸੰਭਾਲੋ(&a)" + +msgid "Save &As..." +msgstr "...ਵਜੋਂ ਸੰਭਾਲੋ(&A)" + +msgid "Compile to MO..." +msgstr "...MO ਲਈ ਕੰਪਾਈਲ ਕਰੋ" + +msgid "E&xport as HTML..." +msgstr "...HTML ਵਜੋਂ ਦਰਾਮਦ ਕਰੋ(&x)" + +msgid "Check for updates..." +msgstr "ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ..." + +msgid "&Preferences..." +msgstr "ਮੇਰੀ ਪਸੰਦ(&P)..." + +msgid "Catalogs &manager" +msgstr "ਕੈਟਾਲਾਗ ਮੈਨੇਜਰ(&m)" + +msgid "Catalogs &Manager" +msgstr "ਕੈਟਾਲਾਗ ਮੈਨੇਜਰ(&M)" + +msgid "E&xit" +msgstr "ਬਾਹਰ(&x)" + +msgid "Quit" +msgstr "ਬਾਹਰ" + +msgid "Copy from singular" +msgstr "" + +msgid "Copy From Singular" +msgstr "" + +msgid "Translation is &fuzzy" +msgstr "ਅਨੁਵਾਦ ਅਸਪਸ਼ਟ ਹੈ(&f)" + +msgid "Translation Is &Fuzzy" +msgstr "ਅਨੁਵਾਦ ਅਸਪਸ਼ਟ ਹੈ(&F)" + +msgid "Edit &comment" +msgstr "ਟਿੱਪਣੀ ਸੋਧ(&c)" + +msgid "Edit &Comment" +msgstr "ਟਿੱਪਣੀ ਸੋਧ(&C)" + +msgid "Suggestions" +msgstr "ਸੁਝਾਅ" + +msgid "&Show references" +msgstr "ਹਵਾਲਾ ਵੇਖੋ(&S)" + +msgid "&Show References" +msgstr "ਹਵਾਲs ਵੇਖੋ(&S)" + +msgid "&Find..." +msgstr "ਖੋਜ(&F)..." + +msgid "Replace..." +msgstr "...ਤਬਦੀਲ ਕਰੋ" + +msgid "Find next" +msgstr "ਅੱਗੇ ਲੱਭੋ" + +msgid "Find previous" +msgstr "ਪਿੱਛੇ ਲੱਭੋ" + +msgid "Find and Replace..." +msgstr "...ਲੱਭੋ ਤੇ ਤਬਦੀਲ ਕਰੋ" + +msgid "Find Next" +msgstr "ਅੱਗੇ ਲੱਭੋ" + +msgid "Find Previous" +msgstr "ਪਿੱਛੇ ਲੱਭੋ" + +msgid "&Preferences" +msgstr "ਮੇਰੀ ਪਸੰਦ(&P)" + +msgid "Display entry &IDs" +msgstr "ਐਂਟਰੀ &ID ਵੇਖਾਓ" + +msgid "Display Entry &IDs" +msgstr "ਐਂਟਰੀ &ID ਵੇਖਾਓ" + +msgid "Sort by &file order" +msgstr "" + +msgid "Sort by &File Order" +msgstr "" + +msgid "Sort by &source" +msgstr "" + +msgid "Sort by &Source" +msgstr "" + +msgid "Sort by &translation" +msgstr "" + +msgid "Sort by &Translation" +msgstr "" + +msgid "&Group by context" +msgstr "" + +msgid "&Group By Context" +msgstr "" + +msgid "Entries with errors first" +msgstr "" + +msgid "Entries with Errors First" +msgstr "" + +msgid "&Untranslated entries first" +msgstr "ਗ਼ੈਰ-ਅਨੁਵਾਦ ਐਂਟਰੀਆਂ ਪਹਿਲਾਂ(&U)" + +msgid "&Untranslated Entries First" +msgstr "ਗ਼ੈਰ-ਅਨੁਵਾਦ ਐਂਟਰੀਆਂ ਪਹਿਲਾਂ(&U)" + +msgid "Show sidebar" +msgstr "ਬਾਹੀ ਵੇਖਾਓ" + +msgid "Show status bar" +msgstr "" + +msgid "C&atalog" +msgstr "ਕੈਟਾਲਾਗ(&a)" + +msgid "&Update from sources" +msgstr "ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ(&U)" + +msgid "&Update from Sources" +msgstr "ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ ਕਰੋ(&U)" + +msgid "Update from &POT file..." +msgstr "&POT ਫਾਇਲ ਤੋਂ ਅੱਪਡੇਟ..." + +msgid "Update from &POT File..." +msgstr "&POT ਫਾਇਲ ਤੋਂ ਅੱਪਡੇਟ ਕਰੋ..." + +msgid "Sync with Crowdin" +msgstr "" + +msgid "Fill missing translations from &TM..." +msgstr "...ਗ਼ੈਰ-ਮੌਜੂਦ ਅਨੁਵਾਦ ਨੂੰ &TM ਰਾਹੀਂ ਭਰੋ" + +msgid "Fill Missing Translations from &TM..." +msgstr "...ਗ਼ੈਰ-ਮੌਜੂਦ ਅਨੁਵਾਦ ਨੂੰ &TM ਰਾਹੀਂ ਭਰੋ" + +msgid "&Purge deleted translations" +msgstr "ਹਟਾਏ ਗਏ ਅਨੁਵਾਦ ਨੂੰ ਕੱਢੋ(&P)" + +msgid "&Purge Deleted Translations" +msgstr "" + +msgid "&Validate translations" +msgstr "" + +msgid "&Validate Translations" +msgstr "" + +msgid "&Properties..." +msgstr "ਵਿਸ਼ੇਸ਼ਤਾ(&P)..." + +msgid "&Done and next" +msgstr "ਮੁਕੰਮਲ ਤੇ ਅੱਗੇ(&D)" + +msgid "&Done and Next" +msgstr "ਮੁਕੰਮਲ ਤੇ ਅੱਗੇ(&D)" + +msgid "&Previous translation" +msgstr "ਪਿਛਲਾ ਅਨੁਵਾਦ(&P)" + +msgid "&Previous Translation" +msgstr "ਪਿਛਲਾ ਅਨੁਵਾਦ(&P)" + +msgid "&Next translation" +msgstr "ਅਗਲਾ ਅਨੁਵਾਦ(&N)" + +msgid "&Next Translation" +msgstr "ਅਗਲਾ ਅਨੁਵਾਦ(&N)" + +msgid "P&revious unfinished" +msgstr "" + +msgid "P&revious Unfinished" +msgstr "" + +msgid "Ne&xt unfinished" +msgstr "" + +msgid "Ne&xt Unfinished" +msgstr "" + +msgid "Previous plural form" +msgstr "" + +msgid "Previous Plural Form" +msgstr "" + +msgid "Next plural form" +msgstr "" + +msgid "Next Plural Form" +msgstr "" + +msgid "&Online help" +msgstr "ਆਨਲਾਈਨ ਮਦਦ(&O)" + +msgid "&Online Help" +msgstr "ਆਨਲਾਈਨ ਮਦਦ(&O)" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext ਦਸਤਾਵੇਜ਼" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext ਦਸਤਾਵੇਜ਼" + +msgid "&About Poedit" +msgstr "ਪੋਐਡਿਟ ਬਾਰੇ(&A)" + +msgid "&About" +msgstr "ਇਸ ਬਾਰੇ(&A)" + +msgid "Extractor setup" +msgstr "" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "ਇਕਸਟੈਸ਼ਨਾਂ ਦੀ ਲਿਸਟ ਅਰਧ ਕਾਮਿਆਂ ਨਾਲ ਲਿਖੋ (ਜਿਵੇ ਕਿ *.cpp;*.h):" + +msgid "Invocation:" +msgstr "ਸਹਾਇਤਾ :" + +msgid "Command to extract translations:" +msgstr "" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" + +msgid "An item in keywords list:" +msgstr "ਸ਼ਬਦ ਲਿਸਟ 'ਚ ਇੱਕ ਇਕਾਈ:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"ਇਹ ਇੱਕ ਵਾਰ ਕਮਾਂਡ ਲਾਇਨ ਨਾਲ ਹਰੇਕ ਇੰਪੁੱਟ ਫਾਇਲ ਲ਼ਈ ਜੁਡ਼ ਜਾਵੇਗਾ।\n" +"%k ਫਾਇਲ ਨਾਂ ਫੈਲਾ ਦੇਵੇਗਾ।" + +msgid "An item in input files list:" +msgstr "ਇੰਪੁੱਟ ਫਾਇਲ ਲਿਸਟ ਵਿੱਚ ਇਕਾਈ:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"ਇਹ ਇੱਕ ਵਾਰ ਕਮਾਂਡ ਲਾਇਨ ਨਾਲ ਹਰੇਕ ਇੰਪੁੱਟ ਫਾਇਲ ਲਈ ਜੁਡ਼ ਜਾਵੇਗਾ।\n" +"%f ਫਾਇਲ ਨਾਂ ਫੈਲਾ ਦੇਵੇਗਾ।" + +msgid "Source code charset:" +msgstr "ਸਰੋਤ ਕੋਡ ਅੱਖਰ ਸਮੂਹ:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"ਇਹ ਇੱਕ ਵਾਰ ਕਮਾਂਡ ਲਾਇਨ ਨਾਲ ਹਰੇਕ ਇੰਪੁੱਟ ਫਾਇਲ ਲ਼ਈ ਜੁਡ਼ ਜਾਵੇਗਾ।\n" +"%c ਫਾਇਲ ਨਾਂ ਫੈਲਾ ਦੇਵੇਗਾ।" + +msgid "Catalog properties" +msgstr "ਕੈਟਾਲਾਗ ਵਿਸ਼ੇਸ਼ਤਾ" + +msgid "Project name and version:" +msgstr "ਪ੍ਰੋਜੈਕਟ ਨਾਂ ਅਤੇ ਵਰਜਨ :" + +msgid "Plural Forms:" +msgstr "ਬਹੁ-ਵਚਨ ਫਾਰਮ:" + +msgid "Use default rules for this language" +msgstr "ਇਹ ਭਾਸ਼ਾ ਲਈ ਡਿਫਾਲਟ ਨਿਯਮ ਵਰਤੋਂ" + +msgid "Use custom expression" +msgstr "" + +msgid "Learn about plural forms" +msgstr "" + +msgid "Charset:" +msgstr "ਅੱਖਰ-ਸੈਟ :" + +msgid "Team:" +msgstr "ਟੀਮ: " + +msgid "Team's email address:" +msgstr "ਟੀਮ ਦਾ ਈ-ਮੇਲ ਐਡਰੈੱਸ:" + +msgid "Translation properties" +msgstr "ਅਨੁਵਾਦ ਵਿਸ਼ੇਸ਼ਤਾ" + +msgid "Sources paths" +msgstr "" + +msgid "Extract text from source files in the following directories:" +msgstr "" + +msgid "Base path:" +msgstr "ਮੁੱਖ ਮਾਰਗ:" + +msgid "Sources keywords" +msgstr "ਸਰੋਤ ਕੀਵਰਡ" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" + +msgid "Learn about gettext keywords" +msgstr "gettext ਕੀਵਰਡ ਬਾਰੇ ਜਾਣੋ" + +msgid "Update summary" +msgstr "ਅੱਪਡੇਟ ਸੰਖੇਪ" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"ਸਰੋਤ ਵਿਚ ਤਾਂ ਸਤਰਾਂ ਹਨ, ਪਰ ਕੈਟਾਲਾਗ ਵਿੱਚ ਨਹੀਂ ਹੈ।\n" +"ਪੋਆਡਿਟ ਇਹਨਾਂ ਨੂੰ ਕੈਟਾਲਾਗ ਵਿੱਚ ਜੋੜੇਗਾ।" + +msgid "New strings" +msgstr "ਨਵੀਂਆਂ ਸਤਰਾਂ" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"ਸਰੋਤ ਵਿਚ ਇਹ ਸਤਰਾਂ ਮੌਜੂਦ ਨਹੀ ਹਨ।\n" +"ਪੋਆਡਿਟ ਇਹਨਾਂ ਨੂੰ ਸੂਚੀ ਵਿਚੋਂ ਹਟਾ ਰਿਹਾ ਹੈ।" + +msgid "Obsolete strings" +msgstr "ਪੁਰਾਣੀਆਂ ਸਤਰਾਂ" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 ਨਵਾਂ, 0 ਪੁਰਾਣਾ)" + +msgid "Open" +msgstr "ਖੋਲ੍ਹੋ" + +msgid "Save catalog" +msgstr "ਕੈਟਾਲਾਗ ਸੰਭਾਲੋ" + +msgid "Validate" +msgstr "" + +msgid "Check for errors in the translation" +msgstr "" + +msgid "Update" +msgstr "ਅੱਪਡੇਟ" + +msgid "Update catalog - synchronize it with sources" +msgstr "ਕੈਟਾਲਾਗ ਅੱਪਡੇਟ- ਇਸ ਨੂੰ ਸੋਰਤ ਨਾਲ ਸਮਕਾਲੀ ਕਰੋ" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "ਜੇਕਰ ਚੁਣੀ ਸਤਰ ਅਸਪਸ਼ਟ ਅਨੁਵਾਦ ਹੈ ਤਾਂ ਸਥਿਤੀ ਤਬਦੀਲ ਕਰੋ" + +msgid "Show or hide the sidebar" +msgstr "ਬਾਹੀ ਵੇਖੋ ਜਾਂ ਓਹਲੇ ਕਰੋ" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "ਪਿਛਲਾ ਸਰੋਤ ਟੈਕਸਟ:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" + +msgid "Notes for translators:" +msgstr "ਅਨੁਵਾਦਕਾਂ ਲਈ ਸੂਚਨਾ:" + +msgid "Add comment" +msgstr "ਟਿੱਪਣੀ ਜੋੜੋ" + +msgid "Add Comment" +msgstr "ਟਿੱਪਣੀ ਜੋੜੋ" + +msgid "Translation suggestions:" +msgstr "ਅਨੁਵਾਦ ਸੁਝਾਅ:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "ਕੋਈ ਮੇਲ ਨਹੀਂ ਲੱਭਿਆ" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "ਕੋਈ ਮੇਲ ਨਹੀਂ ਲੱਭੇ" + +msgid "This string was found in Poedit’s translation memory." +msgstr "ਇਹ ਲਾਈਨ ਪੋਐਡਿਟ ਦੀ ਅਨੁਵਾਦ ਮੈਮੋਰੀ ਵਿੱਚ ਲੱਭੀ ਸੀ।" + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(ਨਵੇਂ: %i, ਬਰਤਰਫ਼: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "" + +msgid "Poedit Update" +msgstr "ਪੋਐਡਿਟ ਅੱਪਡੇਟ ਕਰੋ" + +msgid "Preparing migration..." +msgstr "" + +#, c-format +msgid "Migration exit status: %d" +msgstr "" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" + +msgid "Proceed" +msgstr "ਅੱਗੇ" + +msgid "Translation memory migration failed." +msgstr "" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" + +msgid "Cannot create temporary directory." +msgstr "" + +msgid "Welcome to Poedit" +msgstr "ਪੋਐਡਿਟ ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ" + +msgid "Edit a translation" +msgstr "ਅਨੁਵਾਦ ਸੋਧੋ" + +msgid "Open an existing PO file and edit the translation." +msgstr "ਮੌਜੂਦਾ PO ਫ਼ਾਈਲ ਖੋਲ੍ਹੋ ਅਤੇ ਅਨੁਵਾਦ ਨੂੰ ਸੋਧੋ।" + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "ਮੌਜੂਦਾ PO ਫ਼ਾਈਲ ਜਾਂ POT ਨਮੂਨਾ ਲਵੋ ਅਤੇ ਉਸ ਤੋਂ ਨਵਾਂ ਅਨੁਵਾਦ ਬਣਾਉ।" + +msgid "Collaborate on a translation with Crowdin" +msgstr "" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" + +msgid "What is Crowdin?" +msgstr "" + +msgid "There are no translations. That’s unusual." +msgstr "" + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" + +msgid "(Learn more about GNU gettext)" +msgstr "" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" + +msgid "Update from POT" +msgstr "POT ਤੋਂ ਅੱਪਡੇਟ ਕਰੋ" + +msgid "Take translatable strings from an existing POT template." +msgstr "" + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" + +msgid "Extract from sources" +msgstr "" + +msgid "Configure source code extraction in Properties." +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Synchronize the translation with Crowdin" +msgstr "" diff --git a/locales/pl.mo b/locales/pl.mo new file mode 100644 index 0000000000000000000000000000000000000000..7f976199b9acfc095a9bfb0ed22d71fb01583f32 GIT binary patch literal 47669 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

  • ZykB>=6*i- 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\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Скриване на това съобщение" + +msgid "Don't Show Again" +msgstr "Да не се показва отново" + +msgid "Don't show again" +msgstr "Да не се показва отново" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i ред от файла „%s“ не беше зареден правилно." +msgstr[1] "%i реда от файла „%s“ не бяха заредени правилно." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Ред %d от файла „%s“ е неправилен (неправилни данни за %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "Неправилна заглавка: „%s“" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Повреден каталог: използвана е единствена форма на msgstr при наличие на " +"msgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Повреден каталог: използвана е множествена форма на msgstr, а msgid_plural " +"липсва" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"Имаше грешки при зареждане на каталога. Може да има липсващи или повредени " +"данни." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Грешка при отваряне на файлът „%s“, той вероятно е повреден." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Файлът „%s“ е без право на запис.\n" +"Запазете го под друго име." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Файлът „%s“ не може да бъде запазен." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "Възникна проблем при форматиране на файлa, но той беше запазен." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Този каталог не може да бъде запазен в знаковият набор „%s“,\n" +"указан в настройките. Вместо това е запазен\n" +"в UTF-8, а настройките са променени." + +msgid "Error saving catalog" +msgstr "Грешка при запазване на каталога" + +msgid "PO Translation Files" +msgstr "Файлове с преводи" + +msgid "POT Translation Templates" +msgstr "Шаблон за преводи" + +msgid "All Translation Files" +msgstr "Всички файлове за превод" + +msgid "Merging differences..." +msgstr "Обединяване на разликите…" + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "„%s“ е неправилен файл POT." + +msgid "(Use default language)" +msgstr "(Ползване на стандартния език)" + +msgid "Select your preferred language" +msgstr "Избиране на предпочитан език" + +msgid "Language selection" +msgstr "Избиране на език" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Трябва да рестартирате Poedit, за да влезе в сила тази промяна." + +msgid "Downloading translations is disabled in this project." +msgstr "Изтеглянето на преводи е изключено за този проект." + +msgid "Not authorized, please sign in again." +msgstr "Не сте удостоверени, моля, впишете се отново." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin е онлайн платформа за управление на локализации и инструмент за " +"съвместни преводи. Poedit може безпроблемно да синхронизира PO, управлявани " +"от Crowdin." + +msgid "Sign In" +msgstr "Вписване" + +msgid "Sign in" +msgstr "Вписване" + +msgid "Sign Out" +msgstr "Изход" + +msgid "Sign out" +msgstr "Изход" + +msgid "Waiting for authentication…" +msgstr "Изчакване за удостоверяване…" + +msgid "Updating user information…" +msgstr "Обновяване на информацията за потребителя…" + +msgid "Signed in as:" +msgstr "Вписани като:" + +msgid "Learn More About Crowdin" +msgstr "Научете повече за Crowdin" + +msgid "Learn more about Crowdin" +msgstr "Научете повече за Crowdin" + +msgid "Sign in to Crowdin" +msgstr "Вписване се в Crowdin" + +msgid "Open Crowdin translation" +msgstr "Отваряне на превод от Crowdin" + +msgid "Project:" +msgstr "Проект:" + +msgid "Language:" +msgstr "Език:" + +msgid "File:" +msgstr "Файл:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Няма проекти за превод във вашия профил в Crowdin." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Този проект няма файлове, които да могат да бъдат преведени с Poedit." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Този файл може да бъде редактиран само през уеб интерфейса на Crowdin." + +msgid "Downloading latest translations…" +msgstr "Изтегляне на актуалния превод…" + +msgid "Syncing with Crowdin" +msgstr "Синхронизиране с Crowdin" + +msgid "Syncing with Crowdin failed." +msgstr "Неуспешно синхронизиране с Crowdin." + +msgid "Crowdin error" +msgstr "Грешка в Crowdin" + +msgid "Uploading translations…" +msgstr "Изпращане на преводи…" + +msgid "&Copy" +msgstr "&Копиране" + +msgid "Learn more" +msgstr "Научете повече" + +msgid "Learn More" +msgstr "Научете повече" + +#, c-format +msgid "Failed command: %s" +msgstr "Неуспешна команда: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Неуспешно обединяване на каталози на gettext." + +msgid "Scanning files..." +msgstr "Обработка на файловете…" + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Анализиране на файловете %s…" + +msgid "Failed to load extracted catalog." +msgstr "Извлеченият каталог не може да бъде зареден." + +msgid "&Help" +msgstr "Помо&щ" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO файлове не могат да бъдат директно редактирани в Poedit." + +msgid "Error opening file" +msgstr "Грешка при отваряне на файл" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Моля, вместо това отворете и редактирате съответния PO файл. Когато запазите " +"промените си там, MO файлът също ще бъде актуализиран." + +msgid "don't delete temporary files (for debugging)" +msgstr "временните файлове да не бъдат изтривани (при проблеми)" + +msgid "handle a poedit:// URI" +msgstr "управление на схемата poedit://" + +msgid "Failed to communicate with Poedit process." +msgstr "Грешка в комуникацията с процес на Poedit." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Неприхванато изключение: %s" + +msgid "Unhandled exception occurred." +msgstr "Неприхванато изключение." + +msgid "Open catalog" +msgstr "Отваряне на каталог" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Файлът „%s“ не съществува!" + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "Относно %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Версия %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "Услуги" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "Скриване на %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "Скриване на всички останали" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "Показване на всички" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "Изход от %s" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit е лесен за ползване редактор на преводи." + +msgid "Catalogs Manager" +msgstr "&Управление на каталози" + +msgid "Check for Updates..." +msgstr "Проверка за &обновления..." + +msgid "&Edit" +msgstr "&Редактиране" + +msgid "Undo" +msgstr "Отмяна" + +msgid "Redo" +msgstr "Повтаряне" + +msgid "Paste and Match Style" +msgstr "Вмъкване със запазване на стила" + +msgid "Delete" +msgstr "&Изтриване" + +msgid "Spelling and Grammar" +msgstr "Правопис и граматика" + +msgid "Show Spelling and Grammar" +msgstr "Правопис и граматика" + +msgid "Check Document Now" +msgstr "Проверка на документа" + +msgid "Check Spelling While Typing" +msgstr "Проверка на правописа при въвеждане" + +msgid "Check Grammar With Spelling" +msgstr "Проверка на граматика и правопис" + +msgid "Correct Spelling Automatically" +msgstr "Автоматична корекция на правописа" + +msgid "Substitutions" +msgstr "Замествания" + +msgid "Show Substitutions" +msgstr "Показване на замествания" + +msgid "Smart Copy/Paste" +msgstr "Умно копипействане" + +msgid "Smart Quotes" +msgstr "Умни кавички" + +msgid "Smart Dashes" +msgstr "Умни тирета" + +msgid "Smart Links" +msgstr "Умни връзки" + +msgid "Text Replacement" +msgstr "Заместване на текст" + +msgid "Transformations" +msgstr "Трансформации" + +msgid "Make Upper Case" +msgstr "Към главни букви" + +msgid "Make Lower Case" +msgstr "Към малки букви" + +msgid "Capitalize" +msgstr "В главни букви" + +msgid "Speech" +msgstr "Говор" + +msgid "Start Speaking" +msgstr "Начало на изчитане" + +msgid "Stop Speaking" +msgstr "Край на изчитане" + +msgid "&View" +msgstr "&Изглед" + +msgid "Enter Full Screen" +msgstr "На &цял екран" + +msgid "Window" +msgstr "Прозорец" + +msgid "Minimize" +msgstr "Минимизиране" + +msgid "Zoom" +msgstr "Мащаб" + +msgid "Bring All to Front" +msgstr "Всички на преден план" + +msgid "PO Translation" +msgstr "Файл с превод PO" + +msgid "The file cannot be opened." +msgstr "Файлът не може да бъде отворен." + +msgid "Invalid file" +msgstr "Невалиден файл" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Файлът може да е повреден или е непознат за Poedit формат." + +msgid "&Undo" +msgstr "&Отмяна" + +msgid "&Redo" +msgstr "&Повтаряне" + +msgid "Cu&t" +msgstr "&Изрязване" + +msgid "Cut" +msgstr "Изрязване" + +msgid "Copy" +msgstr "Копиране" + +msgid "&Paste" +msgstr "По&ставяне" + +msgid "Paste" +msgstr "Поставяне" + +msgid "&Delete" +msgstr "&Изтриване" + +msgid "Select &All" +msgstr "Избор на &всичко" + +msgid "Select All" +msgstr "Избор на &всичко" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Нагоре" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Надолу" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Не може да пускате повече от един файл в прозореца на Poedit." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Файлът „%s“ не е файл за превод." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Файл" + +msgid "&Go" +msgstr "О&бхождане" + +msgid "Source text:" +msgstr "Изходен текст:" + +msgid "Singular:" +msgstr "Единствено число:" + +msgid "Plural:" +msgstr "Множествено число:" + +msgid "Translation:" +msgstr "Превод:" + +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 са само шаблони и сами по себе си не съдържат преводи.\n" +"За да започнете превод създайте нов файл PO базиран на този шаблон." + +msgid "Create New Translation" +msgstr "Създаване на превод" + +msgid "Create new translation" +msgstr "Създаване на &нов превод" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Проверката на правописа е изключена, защото не е инсталиран речник за %s." + +msgid "Install" +msgstr "Инсталиране" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Каталогът е променен. Искате ли да запазите промените?" + +msgid "Save changes" +msgstr "Запазване на промените" + +msgid "Your changes will be lost if you don't save them." +msgstr "Направените промени ще бъдат загубени ако не бъдат запазени." + +msgid "Save" +msgstr "&Запазване" + +msgid "Don't save" +msgstr "О&тказ от промените" + +msgid "Don't Save" +msgstr "О&тказ от промените" + +msgid "Save as..." +msgstr "Запазване като…" + +msgid "Compile to..." +msgstr "Компилиране до" + +msgid "Compiled Translation Files" +msgstr "Компилирани преводи" + +msgid "Export as..." +msgstr "Експортиране като…" + +msgid "HTML Files" +msgstr "HTML файлове" + +msgid "Open catalog template" +msgstr "Отваряне на шаблон на каталог" + +msgid "Updating catalog" +msgstr "Актуализация на каталог" + +msgid "Source code not available." +msgstr "Изходният код не е на разположение." + +msgid "Updating failed" +msgstr "Актуализацията пропадна" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Преводи не можаха да бъдат актуализирани от изходния код, защото код не бе " +"открит на мястото, посочено в настройките на каталога." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Низовете в каталога вероятно са неправилни." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Неуспешна актуализация на каталога. За подробности натиснете „Още»“." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "С превода има %d проблем." +msgstr[1] "С превода има %d проблема." + +msgid "Validation results" +msgstr "Резултат от валидиране" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Низовете с грешки са разграничени в списъка с червен цвят на фона. " +"Подробности ще бъдат показани, когато изберете такъв запис." + +msgid "The file was saved safely." +msgstr "Файлът беше запазен." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Файлът беше запазен и компилиран във формат MO, но вероятно няма да работи." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Файлът беше запазен безопасно, но не може да бъде компилиран във формат MO и " +"използван." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "Файлът беше компилиран във формат MO, но вероятно няма да работи." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Файлът не може да бъде компилиран във формат MO и използван." + +msgid "No problems with the translation found." +msgstr "Не са открити проблеми в превода" + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Преводът е готов за използване, но все още има %d непреведен низ." +msgstr[1] "Преводът е готов за използване, но все още има %d непреведени низа." + +msgid "The translation is ready for use." +msgstr "Преводът е готов за използване." + +msgid "Context:" +msgstr "Контекст:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "PoEdit автоматично оправи невалидно съдържание във файла „%s“." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Файлът съдържа дублирани елементи, което е непозволено във файлове PO и ще " +"пречат на използването му. PoEdit оправя този проблем, но трябва да " +"прегледате преводите на всички, маркирани като мъгляви, елементи и ако е " +"необходимо да ги коригирате." + +msgid "Language of the translation isn't set." +msgstr "Липсва език на превода." + +msgid "Set Language" +msgstr "Задаване на език" + +msgid "Set language" +msgstr "Задаване на език" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Предложенията са недостъпни за неправилно конфигурирани езици. Други " +"възможности като формите за множествено число също може да бъдат засегнати." + +msgid "Language of the translation is the same as source language." +msgstr "Езикът на превода е същият като изходния език." + +msgid "Fix Language" +msgstr "Промяна на езика" + +msgid "Fix language" +msgstr "Промяна на езика" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Този каталог има форми за множествено число, но заглавката „Plural-Forms“ " +"липсва." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"В този каталог се срещат форми за множествено число, които не отговарят на " +"заглавката „Plural-Forms“" + +msgid "Required header Plural-Forms is missing." +msgstr "Задължителната заглавка „Plural-Forms“ липсва." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Синтактична грешка в заглавката „Plural-Forms“ („%s“)." + +msgid "Fix the Header" +msgstr "Коригиране на заглавката" + +msgid "Fix the header" +msgstr "Коригиране на заглавката" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "" +"Изразът за формите на множественото число на каталога е необичаен за %s език." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Рецензия" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "Грешка при зареждане на каталога „%s“" + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Преведени: %d от %d (%d%%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Оставащи: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d грешка" +msgstr[1] "%d грешки" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d елемент" +msgstr[1] "%d елемента" + +msgid " (unsaved)" +msgstr " (незапазен)" + +msgid " (modified)" +msgstr " (незапазен)" + +msgid "Go" +msgstr "Обхождане" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Актуализирането на паметта с преводи е неуспешно: %s" + +msgid "Purge deleted translations" +msgstr "Прочистване на изтрити преводи" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Искате ли да премахнете всички преводи, които вече не се използват?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ако продължите с прочистването, всички преводи, обозначени като изтрити ще " +"бъдат премахнати. Ще трябва да ги превеждате отново, ако в последствие бъдат " +"върнати." + +msgid "Keep" +msgstr "&Отказ" + +msgid "Purge" +msgstr "Прочистване" + +msgid "Fill missing translations from TM" +msgstr "Превеждане от паметта" + +msgid "Only fill in exact matches" +msgstr "Попълване само на точните съвпадения" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Стандартно неточните резултати се добавят, но се отбелязват като мъгляви. " +"Отметнете, за да бъдат добавени само точните съвпадения." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Точните съвпадения да не бъдат отбелязвани като мъгляви" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Отметнете само ако имате доверие в качеството на вашата ПП. Стандартно " +"всички съвпадения от ПП са отбелязани като мъгляви и трябва да бъдат " +"прегледани." + +msgid "Fill" +msgstr "Попълване" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d преведен низ от паметта с преводи" +msgstr[1] "%d преведени низа от паметта с преводи" + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Преведените низове са отбелязани като мъгляви, защото може да съдържат " +"неточности. Трябва да бъдат прегледани." + +msgid "No entries could be filled from the translation memory." +msgstr "Нито един низ не беше преведен от паметта с преводи." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"Паметта с преводи не съдържа низове с подобно съдържание. Тя е ефективна " +"само за полу-автоматичен превод след като се е обучила от файловете, които " +"ръчно превеждате." + +msgid "Translating" +msgstr "Превод" + +msgid "Filling missing translations from TM..." +msgstr "Превеждане от паметта с преводи…" + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Преведен %u низ" +msgstr[1] "Преведени %u низа" + +msgid "Copy from source text" +msgstr "&Копиране изходния текст" + +msgid "Copy from Source Text" +msgstr "Копиране от изходния текст" + +msgid "Clear translation" +msgstr "И&зчистване на превода" + +msgid "Clear Translation" +msgstr "И&зчистване на преводa" + +msgid "Edit comment" +msgstr "Редактиране на &коментар" + +msgid "Edit Comment" +msgstr "Редактиране на &коментар" + +msgid "References:" +msgstr "Позовавания:" + +msgid "Everything" +msgstr "Всичко" + +#, c-format +msgid "Form %i" +msgstr "Форма %i" + +msgid "Singular" +msgstr "Единствено число" + +msgid "Zero" +msgstr "Нула" + +msgid "One" +msgstr "Един" + +msgid "Two" +msgstr "Два" + +msgid "Plural" +msgstr "Множествено число" + +msgid "Other" +msgstr "Повече" + +msgid "&Bookmarks" +msgstr "&Отметки" + +#, c-format +msgid "Set bookmark %i" +msgstr "Добавяне на отметка %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Към отметка %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Добавяне на отметка %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Към отметка %i" + +msgid "Hide Sidebar" +msgstr "&Скриване странична лента" + +msgid "Show Sidebar" +msgstr "&Показване на странична лента" + +msgid "Hide Status Bar" +msgstr "Скриване на лента за състоянието" + +msgid "Show Status Bar" +msgstr "Показване на лента за състоянието" + +msgid "Source text" +msgstr "Изходен текст" + +msgid "Translation" +msgstr "Превод" + +msgid "ID" +msgstr "Идентификатор" + +#, c-format +msgid "Source text — %s" +msgstr "Изходен текст – %s" + +msgid "unknown language" +msgstr "неизвестен език" + +#, c-format +msgid "Translation — %s" +msgstr "Превод на %s" + +msgid "Error:" +msgstr "Грешка:" + +msgid "Source file" +msgstr "Файл с изходен код" + +msgid "Source file occurrence:" +msgstr "&Позоваване:" + +msgid "Open in Editor" +msgstr "Отваряне с редактор" + +msgid "Open in editor" +msgstr "Отваряне с редактор" + +msgid "No references for the selected item." +msgstr "Няма предпочитания за избрания елемент." + +#, c-format +msgid "Error opening file %s!" +msgstr "Грешка при отваряне на „%s“!" + +msgid "Find" +msgstr "Търсене…" + +msgid "Replace" +msgstr "Заместване" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Настройки" + +msgid "Ignore case" +msgstr "Незачитане на регистъра" + +msgid "Wrap around" +msgstr "Безконечно търсене" + +msgid "Whole words only" +msgstr "&Цели думи" + +msgid "Find in source texts" +msgstr "Търсене в изходните низове" + +msgid "Find in translations" +msgstr "Търсене в &преводите" + +msgid "Find in comments" +msgstr "Търсене в &коментарите" + +msgid "Close" +msgstr "&Затваряне" + +msgid "Replace All" +msgstr "Замяна всички" + +msgid "Replace all" +msgstr "Замяна всички" + +msgid "< &Previous" +msgstr "&< Предишен" + +msgid "&Next >" +msgstr "Следващ &>" + +msgid "String to find" +msgstr "Търсете" + +msgid "Replacement string" +msgstr "Заместете" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Програмата не може да бъде изпълнена: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Код или име на езика (например en_GB)" + +msgid "Translation Language" +msgstr "Език" + +msgid "Language of the translation:" +msgstr "Език на превода:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit — управление на каталози" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Total" +msgstr "Всичко" + +msgid "Untrans" +msgstr "Непреведени" + +msgid "Fuzzy" +msgstr "Мъгляв" + +msgid "Bad Tokens" +msgstr "Сгрешени" + +msgid "Last modified" +msgstr "Последна промяна" + +msgid "Select directory" +msgstr "Избиране на папка" + +msgid "Directories:" +msgstr "Папки:" + +msgid "" +msgstr "<без име>" + +msgid "Do you want to delete the project?" +msgstr "Искате ли да изтриете проекта?" + +msgid "Confirmation" +msgstr "Потвърждение" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Наистина ли искате да направите масова актуализация\n" +"на всички каталози в този проект?" + +msgid "Information about the translator" +msgstr "Информация за преводача" + +msgid "Name:" +msgstr "Име:" + +msgid "Your Name" +msgstr "Вашето име" + +msgid "Email:" +msgstr "Електронна поща:" + +msgid "your_email@example.com" +msgstr "вашият_имейл@пример.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"Името и електронната ви поща ще бъдат ползвани само за попълването на " +"заглавката „Last-Translator“ на файловете на GNU gettext." + +msgid "Editing" +msgstr "Редактиране" + +msgid "Automatically compile MO file when saving" +msgstr "&автоматично компилиране до файл MO при запазване" + +msgid "Show summary after catalog update" +msgstr "&резюме след актуализиране на каталог" + +msgid "Check spelling" +msgstr "Проверка на правописа" + +msgid "Always change focus to text input field" +msgstr "полето за превод &винаги на фокус" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Не позволява на списъка с низове да приеме фокус. Ако е отметнато, трябва да " +"използвате Ctrl-стрелки за навигация с клавиатурата, но така можете да " +"въвеждате текст веднага, без да се налага да натискате табулатора, за да " +"промените фокуса." + +msgid "Appearance" +msgstr "Външен вид" + +msgid "Use custom list font:" +msgstr "шрифт за &списъка с низове" + +msgid "Use custom text fields font:" +msgstr "шрифт за &текстовите полета" + +msgid "Change UI language" +msgstr "Смяна на &езика" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(изисква Windows 8 или по-нов)" + +msgid "General" +msgstr "Общи" + +msgid "Use translation memory" +msgstr "Използване на &паметта с преводи" + +msgid "Learn From Files..." +msgstr "&Научаване от файлове…" + +msgid "Learn from files..." +msgstr "Научаване от файлове" + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Възстановяване" + +msgid "Consult TM when updating from sources" +msgstr "използване на п&аметта с преводи при актуализация от изходен код" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Ако е отметнато, Poedit ще опита да преведе новите низове, използвайки\n" +"предишни преводи, запомнени в паметта. Ако ПП е почти празна\n" +"преводите ще бъдат неточни. Колкото повече преводи има запомнени,\n" +"толкова по-точно ще бъде автоматичното им извличане." + +msgid "Stored translations:" +msgstr "Брой запомнени преводи:" + +msgid "Database size on disk:" +msgstr "Големина на базата от данни:" + +msgid "Select translation files to import" +msgstr "Избиране на файлове за импорт" + +msgid "Translation Memory" +msgstr "Памет с преводи" + +msgid "Importing translations..." +msgstr "Импорт на преводи…" + +msgid "Finalizing..." +msgstr "Приключване…" + +msgid "Reset translation memory" +msgstr "Възстановяване на паметта с преводи" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Сигурни ли сте че искате да възстановите паметта с преводи?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Възстановяването на паметта с преводите безвъзвратно ще изтрие всички " +"запомнени от нея преводи. Тази операция не може да бъде отменена." + +msgid "Cancel" +msgstr "О&тказ" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "Памет" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Този инструмент намира годни за превод низове във файлове с изходен код и ги " +"извлича, така че да могат да бъдат преведени." + +msgid "New" +msgstr "&Добавяне" + +msgid "Edit" +msgstr "&Редактиране" + +msgid "Delete extractor" +msgstr "Изтриване на инструмент за извличане" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Наистина ли желаете да изтриете инструментът за извличане „%s“?" + +msgid "Extractors" +msgstr "Извличане" + +msgid "Accounts" +msgstr "Профили" + +msgid "Automatically check for updates" +msgstr "автоматична &проверка за актуализация" + +msgid "Include beta versions" +msgstr "&включително beta-версии" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta-версиите съдържат последните нови функционалности и подобрения, но може " +"да бъдат по-малко стабилни." + +msgid "Updates" +msgstr "Обновления" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Тези настройки влияят върху вътрешния формат на PO файлове. Настройте ги, " +"ако имате конкретни изисквания, например, заради контрол на версиите." + +msgid "Line endings:" +msgstr "&символ за край на ред:" + +msgid "Unix (recommended)" +msgstr "Unix (препоръчително)" + +msgid "Windows" +msgstr "Windows" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "пренасяне &на:" + +msgid "Preserve formatting of existing files" +msgstr "&запазване на формата на съществуващите файлове" + +msgid "Advanced" +msgstr "Разширени" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "Настройки на %s" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Плъзнете и пуснете папки тук \n" +"\n" +"или натиснете бутона „+“" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Плъзнете и пуснете папки тук \n" +"\n" +"или натиснете бутона „+“" + +msgid "Add Folders..." +msgstr "Добавяне на папки…" + +msgid "Add folders..." +msgstr "Добавяне на папки…" + +msgid "Add Files..." +msgstr "Добавяне на файлове…" + +msgid "Add files..." +msgstr "Добавяне на файлове…" + +msgid "Add Wildcard..." +msgstr "Добавяне на заместващ знак…" + +msgid "Add wildcard..." +msgstr "Добавяне на заместващ знак…" + +msgid "Paths" +msgstr "Пътища" + +msgid "Excluded paths" +msgstr "Пренебрегнати пътища" + +msgid "Additional keywords" +msgstr "Допълнителни ключови думи" + +msgid "Name of the project the translation is for" +msgstr "име и версия" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "например nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (препоръчително)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "Моля, първо запазете файла. Тези настройки ще са неактивни дотогава." + +msgid "Comment:" +msgstr "&Коментар:" + +msgid "OK" +msgstr "Д&обре" + +msgid "C&lear" +msgstr "И&зчистване" + +msgid "Clear the comment" +msgstr "Изчистване на коментара" + +msgid "Create new translations project" +msgstr "Създаване на нов проект за превод" + +msgid "Edit the project" +msgstr "Редактиране на проекта" + +msgid "Delete the project" +msgstr "Изтриване на проекта" + +msgid "Update all" +msgstr "&Актуализиране на всичко" + +msgid "Update all catalogs in the project" +msgstr "Актуализиране на всички каталози в проекта" + +msgid "Edit project" +msgstr "Редактиране на проект" + +msgid "Project name:" +msgstr "Име на проекта:" + +msgid "Browse" +msgstr "Избиране" + +msgid "Add directory to the list" +msgstr "Добавяне на папка към списъка" + +msgid "&New..." +msgstr "&Нов…" + +msgid "New from &POT/PO file..." +msgstr "Нов от &файл POT/PO…" + +msgid "New From &POT/PO File..." +msgstr "Нов от &файл POT/PO…" + +msgid "&Open..." +msgstr "&Отваряне…" + +msgid "Open Recent" +msgstr "Отваряне на последните файлове" + +msgid "Open from Crowdin..." +msgstr "Отваряне от Crowdin…" + +msgid "Open From Crowdin..." +msgstr "Отваряне от Crowdin…" + +msgid "&Close" +msgstr "&Затваряне" + +msgid "&Save" +msgstr "&Запазване" + +msgid "Save &as..." +msgstr "Запазване &като…" + +msgid "Save &As..." +msgstr "Запазване &като…" + +msgid "Compile to MO..." +msgstr "&Компилиране до MO файл" + +msgid "E&xport as HTML..." +msgstr "Е&кспортиране като HTML…" + +msgid "Check for updates..." +msgstr "Проверка за &актуализация" + +msgid "&Preferences..." +msgstr "&Настройки…" + +msgid "Catalogs &manager" +msgstr "&Управление на каталози" + +msgid "Catalogs &Manager" +msgstr "&Управление на каталози" + +msgid "E&xit" +msgstr "&Изход" + +msgid "Quit" +msgstr "Изход" + +msgid "Copy from singular" +msgstr "Копиране от ед. ч." + +msgid "Copy From Singular" +msgstr "Копиране от ед. ч." + +msgid "Translation is &fuzzy" +msgstr "Отбелязване като &мъгляв" + +msgid "Translation Is &Fuzzy" +msgstr "Отбелязване като &мъгляв" + +msgid "Edit &comment" +msgstr "Редактиране на &коментар" + +msgid "Edit &Comment" +msgstr "Редактиране на &коментар" + +msgid "Suggestions" +msgstr "Предложения" + +msgid "&Show references" +msgstr "Показване на &позовавания" + +msgid "&Show References" +msgstr "Показване на &позоваване" + +msgid "&Find..." +msgstr "&Търсене…" + +msgid "Replace..." +msgstr "Заместване…" + +msgid "Find next" +msgstr "&Следващо съвпадение" + +msgid "Find previous" +msgstr "&Предишно съвпадение" + +msgid "Find and Replace..." +msgstr "Намиране и заместване..." + +msgid "Find Next" +msgstr "&Следващо съвпадение" + +msgid "Find Previous" +msgstr "&Предишно съвпадение" + +msgid "&Preferences" +msgstr "&Настройки" + +msgid "Display entry &IDs" +msgstr "Показване на и&дентификатор" + +msgid "Display Entry &IDs" +msgstr "Показване на и&дентификатор" + +msgid "Sort by &file order" +msgstr "Сортиране по &файл" + +msgid "Sort by &File Order" +msgstr "Сортиране по &файл" + +msgid "Sort by &source" +msgstr "Сортиране по &изходен текст" + +msgid "Sort by &Source" +msgstr "Подреждане по &изходен текст" + +msgid "Sort by &translation" +msgstr "Сортиране по &превод" + +msgid "Sort by &Translation" +msgstr "Сортиране по &превод" + +msgid "&Group by context" +msgstr "&Групиране по контекст" + +msgid "&Group By Context" +msgstr "&Групиране по контекст" + +msgid "Entries with errors first" +msgstr "Преводите с грешки първи" + +msgid "Entries with Errors First" +msgstr "Преводите с грешки първи" + +msgid "&Untranslated entries first" +msgstr "Н&епреведените първи" + +msgid "&Untranslated Entries First" +msgstr "Н&епреведените първи" + +msgid "Show sidebar" +msgstr "&Показване на странична лента" + +msgid "Show status bar" +msgstr "Показване на лента за състоянието" + +msgid "C&atalog" +msgstr "&Каталог" + +msgid "&Update from sources" +msgstr "Актуализация от &изходен код" + +msgid "&Update from Sources" +msgstr "Актуализация от &изходен код" + +msgid "Update from &POT file..." +msgstr "Актуализация от &файл POT…" + +msgid "Update from &POT File..." +msgstr "Актуализация от &файл POT…" + +msgid "Sync with Crowdin" +msgstr "Синхронизиране с Crowdin" + +msgid "Fill missing translations from &TM..." +msgstr "П&ревеждане от паметта" + +msgid "Fill Missing Translations from &TM..." +msgstr "П&ревеждане от паметта" + +msgid "&Purge deleted translations" +msgstr "&Прочистване на изтрити преводи" + +msgid "&Purge Deleted Translations" +msgstr "&Прочистване на изтрити преводи" + +msgid "&Validate translations" +msgstr "&Валидиране на превода" + +msgid "&Validate Translations" +msgstr "&Валидиране на превода" + +msgid "&Properties..." +msgstr "&Настройки…" + +msgid "&Done and next" +msgstr "&Готово, към следващия" + +msgid "&Done and Next" +msgstr "&Готово, към следващия" + +msgid "&Previous translation" +msgstr "&Предишен низ" + +msgid "&Previous Translation" +msgstr "&Предишен низ" + +msgid "&Next translation" +msgstr "&Следващ низ" + +msgid "&Next Translation" +msgstr "&Следващ низ" + +msgid "P&revious unfinished" +msgstr "П&редишен незавършен" + +msgid "P&revious Unfinished" +msgstr "П&редишен незавършен" + +msgid "Ne&xt unfinished" +msgstr "С&ледващ незавършен" + +msgid "Ne&xt Unfinished" +msgstr "С&ледващ незавършен" + +msgid "Previous plural form" +msgstr "Предишна форма за мн. ч." + +msgid "Previous Plural Form" +msgstr "Предишна форма за мн. ч." + +msgid "Next plural form" +msgstr "Следващата форма за мн. ч." + +msgid "Next Plural Form" +msgstr "Следващата форма за мн. ч." + +msgid "&Online help" +msgstr "Он&лайн помощ" + +msgid "&Online Help" +msgstr "Он&лайн помощ" + +msgid "&GNU gettext manual" +msgstr "&Ръководство на GNU gettext" + +msgid "&GNU gettext Manual" +msgstr "&Ръководство на GNU gettext" + +msgid "&About Poedit" +msgstr "&Относно Poedit" + +msgid "&About" +msgstr "&Относно" + +msgid "Extractor setup" +msgstr "Настройка на извличане" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Списък на разширенията разделени с „;“ (напр. *.cpp; *.h):" + +msgid "Invocation:" +msgstr "Извикване:" + +msgid "Command to extract translations:" +msgstr "&Команда за извличане на низове:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Това е командата за изпълнение на извличанета.\n" +"%o се замества с името на изходния файл,\n" +"%K — със списъка от ключови думи,\n" +"%F — със списъка от входните файлове,\n" +"%C — със знаковия набор на анализатора (виж по-долу)." + +msgid "An item in keywords list:" +msgstr "Елемент от списъка с ключови думи:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Това ще бъде добавено по веднъж за всяка ключова дума\n" +"към командния ред. %k се замества с ключовата дума." + +msgid "An item in input files list:" +msgstr "Елемент от списъка с входящи файлове:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Това ще бъде добавено по веднъж за всеки входящ файл\n" +"към командния ред. %f се замества с името на файла." + +msgid "Source code charset:" +msgstr "Знаков набор на изходния код:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Това ще бъде добавено към командния ред, само ако\n" +"е зададен знаков набор за изходния код. %c се замества със знаковия набор." + +msgid "Catalog properties" +msgstr "Свойства на каталога" + +msgid "Project name and version:" +msgstr "Име и версия на проекта:" + +msgid "Plural Forms:" +msgstr "Форми за множествено число:" + +msgid "Use default rules for this language" +msgstr "Според &стандартните правила" + +msgid "Use custom expression" +msgstr "Специфичен &израз" + +msgid "Learn about plural forms" +msgstr "Повече за множествените форми" + +msgid "Charset:" +msgstr "Знаков набор:" + +msgid "Team:" +msgstr "Екип:" + +msgid "Team's email address:" +msgstr "Електронна поща на екипа:" + +msgid "Translation properties" +msgstr "Свойства на превода" + +msgid "Sources paths" +msgstr "Пътища за претърсване" + +msgid "Extract text from source files in the following directories:" +msgstr "Извличане на низове от изходните файлове в следните папки:" + +msgid "Base path:" +msgstr "Основен път:" + +msgid "Sources keywords" +msgstr "Ключови думи в изходния код" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Ключови думи (имена на функции) за разпознаване на преводими низове\n" +"във файловете с изходен код:" + +msgid "Learn about gettext keywords" +msgstr "Повече за ключовите думи на GNU gettext" + +msgid "Update summary" +msgstr "Резюме" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Тези низове бяха намерени в изходния код, но не и в каталога.\n" +"Poedit ще ги прибави към него." + +msgid "New strings" +msgstr "Добавени" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Тези низове вече не са в изходния код.\n" +"Poedit ще ги премахне от каталога." + +msgid "Obsolete strings" +msgstr "Неизползвани" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 нови, 0 неизползвани)" + +msgid "Open" +msgstr "О&тваряне" + +msgid "Save catalog" +msgstr "Запазване на каталога" + +msgid "Validate" +msgstr "&Валидиране" + +msgid "Check for errors in the translation" +msgstr "Проверяване за грешки в превода" + +msgid "Update" +msgstr "&Актуализиране" + +msgid "Update catalog - synchronize it with sources" +msgstr "Актуализиране на каталог — синхронизиране с изходния код" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Превключване на маркер за мъгляв превод" + +msgid "Show or hide the sidebar" +msgstr "Показва или скрива страничната лента" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Предходен изходен текст:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Старият изходен текст (преди промяна от актуализация), на който съответства " +"мъглявият превод." + +msgid "Notes for translators:" +msgstr "Бележка към преводача:" + +msgid "Add comment" +msgstr "Добавяне на коментар" + +msgid "Add Comment" +msgstr "Добавяне на коментар" + +msgid "Translation suggestions:" +msgstr "Предложения за превод:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Няма открити съвпадения" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Няма съвпадения" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Този низ е от паметта с преводи на Poedit." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(нови: %i, остарели: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Импорт на преводи: %d" + +msgid "Poedit Update" +msgstr "Актуализация на Poedit" + +msgid "Preparing migration..." +msgstr "Подготовка за мигриране…" + +#, c-format +msgid "Migration exit status: %d" +msgstr "Резултат от мигриране: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit трябва да превърне паметта с преводи в нов формат." + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Това трябва да бъде направено преди отваряне на Poedit. Ако имате запазени " +"много преводи може да отнеме няколко минути, но обикновено е по-бързо." + +msgid "Proceed" +msgstr "Продължаване" + +msgid "Translation memory migration failed." +msgstr "Мигриране на памет с преводи" + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Паметта с преводи не може да бъде мигрирана. Грешката е:\n" +"\n" +"%s\n" +"Моля, изпратете писмо до help@poedit.net, за да изгладим проблема." + +msgid "Cannot create temporary directory." +msgstr "Временната папка не може да бъде създадена." + +msgid "Welcome to Poedit" +msgstr "Здравейте от Poedit" + +msgid "Edit a translation" +msgstr "&Редактиране на превод" + +msgid "Open an existing PO file and edit the translation." +msgstr "Отваряне на съществуващ каталог и редактиране на превода." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "Създаване на каталог на базата на съществуващ или от шаблон." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Съвместна работа по превод в Crowdin" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "Изтегляне на файл от проект в Crowdin, превеждане и допринасяне." + +msgid "What is Crowdin?" +msgstr "Какво е Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Няма низове за превод. Това е необичайно." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Низовете за превод не се добавят ръчно в Gettext, а се извличат автоматично " +"от изходен код.\n" +"По този начин те са винаги актуални и точни.\n" +"Преводачите обикновено използват шаблони PO (POT) приготвени за тях от " +"разработчика." + +msgid "(Learn more about GNU gettext)" +msgstr "(Научете повече за GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "Най-лесния начин за попълване на каталог е актуализацията от файл POT:" + +msgid "Update from POT" +msgstr "Актуализация от &файл POT" + +msgid "Take translatable strings from an existing POT template." +msgstr "Използване на изходни низове от съществуващ шаблон POT." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "Може да извличате низове за превод директно от изходен код:" + +msgid "Extract from sources" +msgstr "Актуализация от &изходен код" + +msgid "Configure source code extraction in Properties." +msgstr "Настройка на извличане от изходен код." + +msgid "Sync" +msgstr "Синхронизиране" + +msgid "Synchronize the translation with Crowdin" +msgstr "Синхронизиране на превода с Crowdin" diff --git a/locales/bs.mo b/locales/bs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0bf8c4b2c73d1304dc99b27c9f36d63f2ce918e4 GIT binary patch literal 45697 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 literal 0 HcmV?d00001 diff --git a/locales/bs.po b/locales/bs.po new file mode 100644 index 0000000..e5d8f45 --- /dev/null +++ b/locales/bs.po @@ -0,0 +1,1969 @@ +msgid "" +msgstr "" +"Project-Id-Version: poedit\n" +"Report-Msgid-Bugs-To: help@poedit.net\n" +"POT-Creation-Date: 2016-08-01 19:26+0200\n" +"PO-Revision-Date: 2016-05-24 10:03-0400\n" +"Last-Translator: vslavik \n" +"Language-Team: Bosnian\n" +"Language: bs_BA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: poedit\n" +"X-Crowdin-Language: bs\n" +"X-Crowdin-File: /locales/poedit.pot\n" + +msgid "Hide this notification message" +msgstr "Sakrij ovu napomenu" + +msgid "Don't Show Again" +msgstr "Ne prikazuj ponovo" + +msgid "Don't show again" +msgstr "Ne prikazuj ponovo" + +#, c-format +msgid "%i line of file '%s' was not loaded correctly." +msgid_plural "%i lines of file '%s' were not loaded correctly." +msgstr[0] "%i red fajla '%s' nije ispravno učitan." +msgstr[1] "%i red datoteke '%s' nije ispravno učitan." +msgstr[2] "%i red datoteke '%s' nije ispravno učitan." + +#, c-format +msgid "Line %d of file '%s' is corrupted (not valid %s data)." +msgstr "Linija %d datoteke '%s' nije ispravna (neispravni podaci %s)." + +#, c-format +msgid "Malformed header: '%s'" +msgstr "LoÅ¡e napravljeno zaglavlje: '%s'" + +msgid "" +"Broken catalog file: singular form msgstr used together with msgid_plural" +msgstr "" +"Neispravna datoteka kataloga: obrazac jednine msgstr se koristi zajedno sa " +"mgid_plural" + +msgid "Broken catalog file: plural form msgstr used without msgid_plural" +msgstr "" +"Neispravna datoteka kataloga: obrazac množine iz msgtr se koristi bez " +"msgid_plural" + +msgid "" +"There were errors when loading the catalog. Some data may be missing or " +"corrupted as the result." +msgstr "" +"DoÅ¡lo je do greÅ¡ke prilikom učitavanja kataloga. Moguće je da će neki podaci " +"nedostajati ili ćete dobti netačne rezultate." + +#, c-format +msgid "Couldn't load file %s, it is probably corrupted." +msgstr "Nije moguće učitati datoteku %s, vjerovatno je pokvarena." + +#, c-format +msgid "" +"File '%s' is read-only and cannot be saved.\n" +"Please save it under different name." +msgstr "" +"Datoteka '%s' je samo za čitanje.\n" +"Molimo vas da sačuvate pod drugim imenom." + +#, c-format +msgid "Couldn't save file %s." +msgstr "Nije moguće sačuvati datoteku %s." + +msgid "" +"There was a problem formatting the file nicely (but it was saved all right)." +msgstr "" +"Desio se problem prilikom formatiranja datoteke (sve ostalo je uspjeÅ¡no " +"sačuvano)." + +#, c-format +msgid "" +"The catalog couldn't be saved in '%s' charset as specified in catalog " +"settings.\n" +"\n" +"It was saved in UTF-8 instead and the setting was modified accordingly." +msgstr "" +"Katalog nije mogao biti sačuvan u '%s' kodiranju znakova koje je odabrano u " +"postavkama.\n" +"\n" +"Umjesto toga, sačuvan je kao UTF-8 i postavke su prilagođene u skladu s tim." + +msgid "Error saving catalog" +msgstr "GreÅ¡ka pri snimanju kataloga" + +msgid "PO Translation Files" +msgstr "PO fajlovi sa prijevodom" + +msgid "POT Translation Templates" +msgstr "POT predloÅ¡ci prijevoda" + +msgid "All Translation Files" +msgstr "Sve datoteke s prijevodima" + +msgid "Merging differences..." +msgstr "Sastavljanje razlika..." + +#, c-format +msgid "'%s' is not a valid POT file." +msgstr "'%s' nije ispravna POT datoteka." + +msgid "(Use default language)" +msgstr "(Koristi početni jezik)" + +msgid "Select your preferred language" +msgstr "Odaberite vaÅ¡ omiljeni jezik" + +msgid "Language selection" +msgstr "Odabir jezika" + +msgid "You must restart Poedit for this change to take effect." +msgstr "Morate ponovo pokrenuti Poedit da bi promjene počele djelovati." + +msgid "Downloading translations is disabled in this project." +msgstr "Preuzimanje prijevoda je onemogućeno u ovom projektu." + +msgid "Not authorized, please sign in again." +msgstr "Nemate ovlaÅ¡tenje, molimo vas da se ponovo prijavite." + +msgid "" +"Crowdin is an online localization management platform and collaborative " +"translation tool. Poedit can seamlessly sync PO files managed at Crowdin." +msgstr "" +"Crowdin je online platforma za upravljanje lokalizacijama i kolaborativni " +"prevodilački alat. Poedit može neprimjetno sinhronizovati PO datoteke na " +"Crowdinu." + +msgid "Sign In" +msgstr "Prijava" + +msgid "Sign in" +msgstr "Prijava" + +msgid "Sign Out" +msgstr "Odjava" + +msgid "Sign out" +msgstr "Odjava" + +msgid "Waiting for authentication…" +msgstr "Čekam na autentifikaciju..." + +msgid "Updating user information…" +msgstr "Ažuriram korisničke informacije..." + +msgid "Signed in as:" +msgstr "Prijavljeni ste kao:" + +msgid "Learn More About Crowdin" +msgstr "Saznaj viÅ¡e o Crowdinu" + +msgid "Learn more about Crowdin" +msgstr "Saznaj viÅ¡e o Crowdinu" + +msgid "Sign in to Crowdin" +msgstr "Prijavi se u Crowdin" + +msgid "Open Crowdin translation" +msgstr "Otvori Crowdin prijevod" + +msgid "Project:" +msgstr "Projekat:" + +msgid "Language:" +msgstr "Jezik:" + +msgid "File:" +msgstr "Datoteka:" + +msgid "No translation projects listed in your Crowdin account." +msgstr "Nema projekata u vaÅ¡em Crowdin računu." + +msgid "This project has no files that can be translated in Poedit." +msgstr "Ovaj projekat nema datoteka koje je moguće prevoditi u Poeditu." + +msgid "This file can only be edited in Crowdin’s web interface." +msgstr "Ovu datoteku moguće je uređivati jedino pomoću Crowdin web interfejsa." + +msgid "Downloading latest translations…" +msgstr "Preuzimam najnovije prijevode..." + +msgid "Syncing with Crowdin" +msgstr "Sinhroniziram sa Crowdinom" + +msgid "Syncing with Crowdin failed." +msgstr "Sinhronizacija sa Crowdinom nije uspjela." + +msgid "Crowdin error" +msgstr "Crowdin greÅ¡ka" + +msgid "Uploading translations…" +msgstr "Ažuriram prijevode..." + +msgid "&Copy" +msgstr "&Kopiraj" + +msgid "Learn more" +msgstr "Saznaj viÅ¡e" + +msgid "Learn More" +msgstr "Saznaj viÅ¡e" + +#, c-format +msgid "Failed command: %s" +msgstr "Neuspjela komanda: %s" + +msgid "Failed to merge gettext catalogs." +msgstr "Nije moguće spojiti gettext kataloge." + +msgid "Scanning files..." +msgstr "Skeniram datoteke..." + +#. TRANSLATORS: '%s' is replaced with the kind of the files (e.g. C++, PHP, ...) +#, c-format +msgid "Parsing %s files..." +msgstr "Parsiram %s datoteke..." + +msgid "Failed to load extracted catalog." +msgstr "Nije moguće učitati raspakovani katalog." + +msgid "&Help" +msgstr "&Pomoć" + +msgid "MO files can’t be directly edited in Poedit." +msgstr "MO fajl se ne može direktno uređivati u Poeditu." + +msgid "Error opening file" +msgstr "GreÅ¡ka pri otvaranju fajla" + +msgid "" +"Please open and edit the corresponding PO file instead. When you save it, " +"the MO file will be updated as well." +msgstr "" +"Umjesto ovog, molimo vas da otvorite i izmijenite odgovarajući PO fajl. " +"Nakon Å¡to ga sačuvate, MO fajl će također da bude ažuriran." + +msgid "don't delete temporary files (for debugging)" +msgstr "ne briÅ¡i privremene datoteke (zbog debugginga)" + +msgid "handle a poedit:// URI" +msgstr "upravljač za poedit:// URI" + +msgid "Failed to communicate with Poedit process." +msgstr "Nije moguće komunicirati sa Poedit procesom." + +#, c-format +msgid "Unhandled exception occurred: %s" +msgstr "Desio se neočekivan izuzetak: %s" + +msgid "Unhandled exception occurred." +msgstr "Desio se neočekivan izuzetak." + +msgid "Open catalog" +msgstr "Otvori katalog" + +#, c-format +msgid "File '%s' doesn't exist." +msgstr "Datoteka '%s' ne postoji." + +#. TRANSLATORS: This is titlebar of about dialog, "%s" is application name +#. ("Poedit" here, but please use "%s") +#, c-format +msgid "About %s" +msgstr "O programu %s" + +#. TRANSLATORS: This is version information in about dialog, "%s" will be +#. version number when used +#, c-format +msgid "Version %s" +msgstr "Verzija %s" + +#. TRANSLATORS: OS X item in app menu +msgid "Services" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Hide %s" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Hide Others" +msgstr "" + +#. TRANSLATORS: OS X item in app menu +msgid "Show All" +msgstr "" + +#. TRANSLATORS: OS X item in app menu, %s is replaced with "Poedit" +#, c-format +msgid "Quit %s" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Poedit is an easy to use translations editor." +msgstr "Poedit je jednostavni alat za prevođenje." + +msgid "Catalogs Manager" +msgstr "Upravljanje katalozima" + +msgid "Check for Updates..." +msgstr "Provjeri ima li nadogradnji..." + +msgid "&Edit" +msgstr "&Uredi" + +msgid "Undo" +msgstr "Nazad" + +msgid "Redo" +msgstr "Vrati" + +msgid "Paste and Match Style" +msgstr "Umetni i uskladi stil" + +msgid "Delete" +msgstr "ObriÅ¡i" + +msgid "Spelling and Grammar" +msgstr "Pravopis i gramatika" + +msgid "Show Spelling and Grammar" +msgstr "Prikaži pravopis i gramatiku" + +msgid "Check Document Now" +msgstr "Odmah provjeri dokument" + +msgid "Check Spelling While Typing" +msgstr "Provjeravaj pravopis prilikom pisanja" + +msgid "Check Grammar With Spelling" +msgstr "Provjeri gramatiku i pravopis" + +msgid "Correct Spelling Automatically" +msgstr "Automatski popravljaj greÅ¡ke u pravopisu" + +msgid "Substitutions" +msgstr "Zamjene" + +msgid "Show Substitutions" +msgstr "Prikaži zamjene" + +msgid "Smart Copy/Paste" +msgstr "Pametno kopiranje/umetanje" + +msgid "Smart Quotes" +msgstr "Pametni navodnici" + +msgid "Smart Dashes" +msgstr "Pametne crtice" + +msgid "Smart Links" +msgstr "Pametni linkovi" + +msgid "Text Replacement" +msgstr "Zamjena teksta" + +msgid "Transformations" +msgstr "Tranformacije" + +msgid "Make Upper Case" +msgstr "Pretvori u velika slova" + +msgid "Make Lower Case" +msgstr "Pretvori u mala slova" + +msgid "Capitalize" +msgstr "Velika slova" + +msgid "Speech" +msgstr "Govor" + +msgid "Start Speaking" +msgstr "Počnite pričati" + +msgid "Stop Speaking" +msgstr "Prestanite pričati" + +msgid "&View" +msgstr "&Prikaz" + +msgid "Enter Full Screen" +msgstr "Aktiviraj prikaz preko cijelog ekrana" + +msgid "Window" +msgstr "Prozor" + +msgid "Minimize" +msgstr "Minimiziraj" + +msgid "Zoom" +msgstr "Uvećavanje" + +msgid "Bring All to Front" +msgstr "Dovedi u fokus" + +msgid "PO Translation" +msgstr "PO prijevod" + +msgid "The file cannot be opened." +msgstr "Datoteku nije moguće otvoriti." + +msgid "Invalid file" +msgstr "Neispravna datoteka" + +msgid "" +"The file may be either corrupted or in a format not recognized by Poedit." +msgstr "Datoteka je oÅ¡tećena ili nije u formatu koji Poedit prepoznaje." + +msgid "&Undo" +msgstr "&PoniÅ¡ti" + +msgid "&Redo" +msgstr "&Vrati" + +msgid "Cu&t" +msgstr "Izrež&i" + +msgid "Cut" +msgstr "Izreži" + +msgid "Copy" +msgstr "Kopiraj" + +msgid "&Paste" +msgstr "&Zalijepi" + +msgid "Paste" +msgstr "Zalijepi" + +msgid "&Delete" +msgstr "&ObriÅ¡i" + +msgid "Select &All" +msgstr "Oznaži &sve" + +msgid "Select All" +msgstr "Označi sve" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Ctrl+" +msgstr "Ctrl+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +#. TRANSLATORS: This is the key shortcut used in menus on Windows, some languages call them differently +msgid "Alt+" +msgstr "Alt+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Shift+" +msgstr "Shift+" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Enter" +msgstr "Enter" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Up" +msgstr "Gore" + +#. TRANSLATORS: Keyboard shortcut for display in Windows menus +msgid "Down" +msgstr "Dole" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Ctrl+" +msgid "ctrl" +msgstr "ctrl" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Alt+" +msgid "alt" +msgstr "alt" + +#. TRANSLATORS: Keyboard shortcut, must correspond to translation of "Shift+" +msgid "shift" +msgstr "shift" + +msgid "You can't drop more than one file on Poedit window." +msgstr "Ne možete ubaciti viÅ¡e od jedne Poedit datoteke u prozor." + +#, c-format +msgid "File '%s' is not a message catalog." +msgstr "Datoteka '%s' nije katalog poruka." + +msgid "Poedit" +msgstr "Poedit" + +msgid "&File" +msgstr "&Datoteka" + +msgid "&Go" +msgstr "&Akcije" + +msgid "Source text:" +msgstr "Originalni tekst:" + +msgid "Singular:" +msgstr "Jednina:" + +msgid "Plural:" +msgstr "Množina:" + +msgid "Translation:" +msgstr "Prijevod:" + +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 bilo kakve prijevode.\n" +"Da napravite prijevod, kreirajte novu PO datoteku na osnovu predloÅ¡ka." + +msgid "Create New Translation" +msgstr "Kreiraj novi prijevod" + +msgid "Create new translation" +msgstr "Kreiraj novi prijevod" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "" +"Spellchecking is disabled, because the dictionary for %s isn’t installed." +msgstr "" +"Provjera pravopisa je onemogućena zato Å¡to rječnik za %s nije instaliran." + +msgid "Install" +msgstr "Instaliraj" + +msgid "Catalog modified. Do you want to save changes?" +msgstr "Katalog je mijenjan. Da li želite sačuvati promjene?" + +msgid "Save changes" +msgstr "Sačuvaj promjene" + +msgid "Your changes will be lost if you don't save them." +msgstr "Sve promjene će biti izgubljene ako ih ne sačuvate" + +msgid "Save" +msgstr "Sačuvaj" + +msgid "Don't save" +msgstr "Nemoj sačuvati" + +msgid "Don't Save" +msgstr "Nemoj sačuvati" + +msgid "Save as..." +msgstr "Sačuvaj kao..." + +msgid "Compile to..." +msgstr "Kompajliraj za..." + +msgid "Compiled Translation Files" +msgstr "Kompajlirani prijevodi datoteka" + +msgid "Export as..." +msgstr "Izvezi kao..." + +msgid "HTML Files" +msgstr "HTML fajlovi" + +msgid "Open catalog template" +msgstr "Otvori predložak kataloga" + +msgid "Updating catalog" +msgstr "Ažuriram katalog" + +msgid "Source code not available." +msgstr "Izvorni kod nije dostupan." + +msgid "Updating failed" +msgstr "Ažuriranje nije uspjelo" + +msgid "" +"Translations couldn’t be updated from the source code, because no code was " +"found in the location specified in the catalog’s Properties." +msgstr "" +"Prijevodi nisu mogli biti ažurirani iz izvornog koda zato Å¡to kod nije " +"pronađen u specificiranoj lokaciji unutar svojstava kataloga." + +msgid "Entries in the catalog are probably incorrect." +msgstr "Unosi u katalogu su najvjerovatnije netačni." + +msgid "Updating the catalog failed. Click on 'Details >>' for details." +msgstr "Ažuriranje kataloga nije uspjelo. Za detalje kliknite na 'ViÅ¡e>>'." + +#, c-format +msgid "%d issue with the translation found." +msgid_plural "%d issues with the translation found." +msgstr[0] "Pronađen je %d problem s prijevodima." +msgstr[1] "Pronađena su %d problema s prijevodima." +msgstr[2] "Pronađeno je %d problema s prijevodima." + +msgid "Validation results" +msgstr "Rezultati validacije" + +msgid "" +"Entries with errors were marked in red in the list. Details of the error " +"will be shown when you select such an entry." +msgstr "" +"Unosi koji sadrže greÅ¡ke označeni su crvenom bojom u listi. Detalji o greÅ¡ki " +"će biti prikazani kada odaberete jedan od unosa." + +msgid "The file was saved safely." +msgstr "Datoteka je uspjeÅ¡no sačuvana." + +msgid "" +"The file was saved safely and compiled into the MO format, but it will " +"probably not work correctly." +msgstr "" +"Datoteka je uspjeÅ¡no sačuvana i kompajlirana u MO format, ali navjerovatnije " +"neće ispravno funkcionisati." + +msgid "" +"The file was saved safely, but it cannot be compiled into the MO format and " +"used." +msgstr "" +"Datoteka je uspjeÅ¡no sačuvana ali je nije moguće kompajlirati u MO format i " +"koristiti nakon toga." + +msgid "" +"The file was compiled into the MO format, but it will probably not work " +"correctly." +msgstr "" +"Datoteka je kompajlirana u MO format, ali najvjerovatnije neće funkcionisati " +"ispravno." + +msgid "The file cannot be compiled into the MO format and used." +msgstr "Datoteka ne može biti kompajlirana u MO format i nakon toga koriÅ¡tena." + +msgid "No problems with the translation found." +msgstr "Nisu pronađeni problemi u prijevodu." + +#, c-format +msgid "The translation is ready for use, but %d entry is not translated yet." +msgid_plural "" +"The translation is ready for use, but %d entries are not translated yet." +msgstr[0] "Prijevod je spreman za upotrebu, ali joÅ¡ %d unos nije preveden." +msgstr[1] "Prijevod je spreman za upotrebu, ali joÅ¡ %d unosa nisu prevedena." +msgstr[2] "Prijevod je spreman za upotrebu, ali joÅ¡ %d unosa nije prevedeno." + +msgid "The translation is ready for use." +msgstr "Prijevod je spreman za upotrebu." + +msgid "Context:" +msgstr "Kontekst:" + +#, c-format +msgid "Poedit automatically fixed invalid content in the file “%s”." +msgstr "Poedit je automatski popravio neispravan sadržaj u datoteci \"%s\"." + +msgid "" +"The file contained duplicate items, which is not allowed in PO files and " +"would prevent the file from being used. Poedit fixed the issue, but you " +"should review translations of any items marked as fuzzy and correct them if " +"necessary." +msgstr "" +"Datoteka je sadržavala duple stavke koje nisu dozvoljene unutar PO datoteka " +"i koje bi onemogućile koriÅ¡tenje datoteke. Poedit je popravio problem, ali " +"biste trebali pregledati vaÅ¡ prijevod jer postoji mogućnost da su neki " +"prijevodi označeni kao nejasni." + +msgid "Language of the translation isn't set." +msgstr "Jezik prijevoda joÅ¡ nije postavljen." + +msgid "Set Language" +msgstr "Postavi jezik" + +msgid "Set language" +msgstr "Odaberite jezik" + +#. TRANSLATORS: This is shown underneath "Language of the translation isn't set (or ...is the same as source language)." +msgid "" +"Suggestions are not available if the translation language is not set " +"correctly. Other features, such as plural forms, may be affected as well." +msgstr "" +"Prijedlozi nisu dostupni ako jezik prijevoda nije ispravno odabran. Ostale " +"mogućnosti također mogu biti nedostupne. kao npr. oblici množine." + +msgid "Language of the translation is the same as source language." +msgstr "Jezik prijevoda je isti kao i izvorni jezik." + +msgid "Fix Language" +msgstr "Popravi jezik" + +msgid "Fix language" +msgstr "Popravi jezik" + +msgid "" +"This catalog has entries with plural forms, but doesn't have Plural-Forms " +"header configured." +msgstr "" +"Ovaj katalog sadrži unose koji su u množini ali nema konfigurisan obrazac " +"množine u zaglavlju." + +msgid "" +"Entries in this catalog have different plural forms count from what " +"catalog's Plural-Forms header says" +msgstr "" +"Unosi u ovom katalogu imaju drugačiji oblik množine od onog koji je " +"definisan u zaglavlju datoteke" + +msgid "Required header Plural-Forms is missing." +msgstr "Nedostaje neophodno zaglavlje za oblik množine." + +#, c-format +msgid "Syntax error in Plural-Forms header (\"%s\")." +msgstr "Sintaksna greÅ¡ka u zaglavlju za obrazac množine (\"%s\")." + +msgid "Fix the Header" +msgstr "Popravi zaglavlje" + +msgid "Fix the header" +msgstr "Popravi zaglavlje" + +#. TRANSLATORS: %s is language name in its basic form (as you +#. would see e.g. in a list of supported languages). You may need +#. to rephrase it, e.g. to an equivalent of "for language %s". +#, c-format +msgid "Plural forms expression used by the catalog is unusual for %s." +msgstr "Obrazac množine koji se koristi u katalogu nije uobičajen za %s jezik." + +#. TRANSLATORS: A verb, shown as action button with ""Plural forms expression used by the catalog is unusual for %s.")" +msgid "Review" +msgstr "Pregledaj" + +#, c-format +msgid "Error loading message catalog file '%s'." +msgstr "GreÅ¡ka pri učitavanju datoteke sa katologom '%s'." + +#, c-format +msgid "Translated: %d of %d (%d %%)" +msgstr "Prevedeno: %d od %d (%d %%)" + +#, c-format +msgid "Remaining: %d" +msgstr "Preostalo: %d" + +#, c-format +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d greÅ¡ka" +msgstr[1] "%d greÅ¡ke" +msgstr[2] "%d greÅ¡aka" + +#, c-format +msgid "%d entry" +msgid_plural "%d entries" +msgstr[0] "%d unos" +msgstr[1] "%d unosa" +msgstr[2] "%d unosa" + +msgid " (unsaved)" +msgstr " (nesačuvano)" + +msgid " (modified)" +msgstr " (mijenjano)" + +msgid "Go" +msgstr "Kreni" + +#, c-format +msgid "Failed to update translation memory: %s" +msgstr "Nije moguće ažurirati memoriju prijevoda: %s" + +msgid "Purge deleted translations" +msgstr "Očisti obrisane prijevode" + +msgid "Do you want to remove all translations that are no longer used?" +msgstr "Da li želite ukloniti sve prijevode koji viÅ¡e nisu u upotrebi?" + +msgid "" +"If you continue with purging, all translations marked as deleted will be " +"permanently removed. You will have to translate them again if they are added " +"back in the future." +msgstr "" +"Ako nastavite sa uklanjanjem, svi prijevodi koji su označeni za uklanjanje " +"će trajno biti uklonjeni. Morat ćete ih ponovo prevesti ako budu ponovo " +"dodani nekad u budućnosti." + +msgid "Keep" +msgstr "Zadrži" + +msgid "Purge" +msgstr "Očisti" + +msgid "Fill missing translations from TM" +msgstr "Popuni nedostajuće prijevode koristeći TM" + +msgid "Only fill in exact matches" +msgstr "Samo popunjavaj tačna poklapanja" + +msgid "" +"By default, inaccurate results are filled in as well and marked as fuzzy. " +"Check this option to only include accurate matches." +msgstr "" +"Kao početno, neprecizni rezultati se također upisuju i označeni su kao " +"nejasni. Označite ovu opciju ako samo želite uvrstiti tačne prijevode." + +msgid "Don’t mark exact matches as fuzzy" +msgstr "Tačna poklapanja ne označavaj kao nejasna" + +msgid "" +"Only enable if you trust the quality of your TM. By default, all matches " +"from the TM are marked as fuzzy and should be reviewed." +msgstr "" +"Omogućite ovo samo ako ste sigurni u kvalitet vaÅ¡eg TM-a. Kao početno, svi " +"rezultati iz TM-a se označavaju kao nejasni i potrebno ih je recenzirati." + +msgid "Fill" +msgstr "Popuni" + +#, c-format +msgid "%d entry was filled from the translation memory." +msgid_plural "%d entries were filled from the translation memory." +msgstr[0] "%d unos je popunjen pomoću memorije sa prijevodima." +msgstr[1] "%d unosa su popunjena pomoću memorije sa prijevodima." +msgstr[2] "%d unosa je popunjeno pomoću memorije sa prijevodima." + +msgid "" +"The translations were marked as fuzzy, because they may be inaccurate. You " +"should review them for correctness." +msgstr "" +"Prijevodi su označeni kao nejasni jer su možda neprecizni. Trebali biste ih " +"pregledati da utvrdite njihovu tačnost." + +msgid "No entries could be filled from the translation memory." +msgstr "Nijedan unos nije mogao biti popunjen iz memorije sa prijevodima." + +msgid "" +"The TM doesn’t contain any strings similar to the content of this file. It " +"is only effective for semi-automatic translations after Poedit learns enough " +"from files that you translated manually." +msgstr "" +"TM ne sadrži nijedan string sličan sadržaju u ovoj datoteci. Ovo je moguće " +"efikasno iskoristiti za poluautomatsko prevođenje nakon Å¡to Poedit nauči " +"dovoljno fraza iz datoteka koje ste preveli ručno." + +msgid "Translating" +msgstr "Prevodim" + +msgid "Filling missing translations from TM..." +msgstr "Popuni nedostajuće prijevode koristeći TM..." + +#, c-format +msgid "Translated %u string" +msgid_plural "Translated %u strings" +msgstr[0] "Prevedeno %u stringova" +msgstr[1] "Preveden %u string" +msgstr[2] "Prevedeno %u stringova" + +msgid "Copy from source text" +msgstr "&Kopiraj iz originalnog teksta" + +msgid "Copy from Source Text" +msgstr "Kopiraj iz originalnog teksta" + +msgid "Clear translation" +msgstr "ObriÅ¡i prijevod" + +msgid "Clear Translation" +msgstr "ObriÅ¡i prijevod" + +msgid "Edit comment" +msgstr "Uredi komentar" + +msgid "Edit Comment" +msgstr "Uredi komentar" + +msgid "References:" +msgstr "Reference:" + +msgid "Everything" +msgstr "Sve" + +#, c-format +msgid "Form %i" +msgstr "Oblik %i" + +msgid "Singular" +msgstr "Jednina" + +msgid "Zero" +msgstr "Nula" + +msgid "One" +msgstr "Jedan" + +msgid "Two" +msgstr "Dva" + +msgid "Plural" +msgstr "Množina" + +msgid "Other" +msgstr "Ostalo" + +msgid "&Bookmarks" +msgstr "&ZabiljeÅ¡ke" + +#, c-format +msgid "Set bookmark %i" +msgstr "Postavi zabiljeÅ¡ku %i" + +#, c-format +msgid "Go to bookmark %i" +msgstr "Idi na zabiljeÅ¡ku %i" + +#, c-format +msgid "Set Bookmark %i" +msgstr "Postavi zabiljeÅ¡ku %i" + +#, c-format +msgid "Go to Bookmark %i" +msgstr "Idi na zabiljeÅ¡ku %i" + +msgid "Hide Sidebar" +msgstr "Sakrij bočnu traku" + +msgid "Show Sidebar" +msgstr "Prikaži bočnu traku" + +msgid "Hide Status Bar" +msgstr "Sakrij statusnu traku" + +msgid "Show Status Bar" +msgstr "Prikaži statusnu traku" + +msgid "Source text" +msgstr "Originalni tekst" + +msgid "Translation" +msgstr "Prijevod" + +msgid "ID" +msgstr "ID" + +#, c-format +msgid "Source text — %s" +msgstr "Izvorni tekst — %s" + +msgid "unknown language" +msgstr "nepoznat jezik" + +#, c-format +msgid "Translation — %s" +msgstr "Prijevod — %s" + +msgid "Error:" +msgstr "GreÅ¡ka:" + +msgid "Source file" +msgstr "Izvorna datoteka" + +msgid "Source file occurrence:" +msgstr "Pojavljivanje originalne datoteke:" + +msgid "Open in Editor" +msgstr "Otvori u uređivaču" + +msgid "Open in editor" +msgstr "Otvori u uređivaču" + +msgid "No references for the selected item." +msgstr "Nema referenci za odabranu stavku." + +#, c-format +msgid "Error opening file %s!" +msgstr "GreÅ¡la pri otvaranju datoteke %s!" + +msgid "Find" +msgstr "Pronađi" + +msgid "Replace" +msgstr "Zamijeni" + +#. TRANSLATORS: Expander in Find window for additional options (case sensitive etc.) +msgid "Options" +msgstr "Opcije" + +msgid "Ignore case" +msgstr "Zanemari velika/mala slova" + +msgid "Wrap around" +msgstr "Omotaj" + +msgid "Whole words only" +msgstr "Samo cijele riječi" + +msgid "Find in source texts" +msgstr "Pronađi u izvornim tekstovima" + +msgid "Find in translations" +msgstr "Pronađi u prijevodima" + +msgid "Find in comments" +msgstr "Pronađi u komentarima" + +msgid "Close" +msgstr "Zatvori" + +msgid "Replace All" +msgstr "Zamijeni sve" + +msgid "Replace all" +msgstr "Zamijeni sve" + +msgid "< &Previous" +msgstr "< &Prethodno" + +msgid "&Next >" +msgstr "&Sljedeće >" + +msgid "String to find" +msgstr "String koji tražite" + +msgid "Replacement string" +msgstr "Zamjenski string" + +#, c-format +msgid "Cannot execute program: %s" +msgstr "Nije moguće izvrÅ¡iti program: %s" + +msgid "Language Code or Name (e.g. en_GB)" +msgstr "Kod ili naziv jezika (npr. bs_BA)" + +msgid "Translation Language" +msgstr "Jezik prijevoda" + +msgid "Language of the translation:" +msgstr "Jezik prijevoda:" + +msgid "Poedit - Catalogs manager" +msgstr "Poedit - upravljanje katalozima" + +msgid "Catalog" +msgstr "Katalog" + +msgid "Total" +msgstr "Ukupno" + +msgid "Untrans" +msgstr "Neprevedeno" + +msgid "Fuzzy" +msgstr "Nejasno" + +msgid "Bad Tokens" +msgstr "Neispravne oznake" + +msgid "Last modified" +msgstr "Zadnji put mijenjano" + +msgid "Select directory" +msgstr "Odaberite direktorij" + +msgid "Directories:" +msgstr "Direktoriji:" + +msgid "" +msgstr "" + +msgid "Do you want to delete the project?" +msgstr "Da li želite obrisati ovaj projekt?" + +msgid "Confirmation" +msgstr "Potvrda" + +msgid "" +"Do you really want to do mass update of\n" +"all catalogs in this project?" +msgstr "" +"Da li zaista želite uraditi masovnu nadogradnuDo you really want to do mass " +"update of\n" +"all catalogs in this project?" + +msgid "Information about the translator" +msgstr "Informacije o prevodiocu" + +msgid "Name:" +msgstr "Ime:" + +msgid "Your Name" +msgstr "VaÅ¡e ime" + +msgid "Email:" +msgstr "Email:" + +msgid "your_email@example.com" +msgstr "vaÅ¡_email@primjer.com" + +msgid "" +"Your name and email address are only used to set the Last-Translator header " +"of GNU gettext files." +msgstr "" +"VaÅ¡e ime i email adresa se koriste samo u Last-Translator zaglavlju GNU " +"gettext fajlova." + +msgid "Editing" +msgstr "Uređivanje" + +msgid "Automatically compile MO file when saving" +msgstr "Automatski kompajliraj MO datoteku prilikom snimanja" + +msgid "Show summary after catalog update" +msgstr "Prikaži sažetak nakon ažuriranja kataloga" + +msgid "Check spelling" +msgstr "Provjeri pravopis" + +msgid "Always change focus to text input field" +msgstr "Uvijek promijeni fokus na polje za unos teksta" + +msgid "" +"Never let the list of strings take focus. If enabled, you must use Ctrl-" +"arrows for keyboard navigation but you can also type text immediately, " +"without having to press Tab to change focus." +msgstr "" +"Ne dopusti da lista stringova preuzme fokus.Ako je omogućeno, morat ćete " +"koristiti Ctrl-strelice za navigaciju pomoću tastature ali također možete " +"ukucati tekst odmah, bez da morate pritisnuti Tab za promjenu fokusa." + +msgid "Appearance" +msgstr "Izgled" + +msgid "Use custom list font:" +msgstr "Koristi vlastiti font za listu:" + +msgid "Use custom text fields font:" +msgstr "Koristi vlastiti font za tekstualna polja:" + +msgid "Change UI language" +msgstr "Promijeni jezik interfejsa" + +#. TRANSLATORS: This is a note appended to "Check spelling" when running on older Windows versions +msgid "(requires Windows 8 or newer)" +msgstr "(barem Windows 8 ili noviji)" + +msgid "General" +msgstr "Općenito" + +msgid "Use translation memory" +msgstr "Koristi memoriju prijevoda" + +msgid "Learn From Files..." +msgstr "Nauči iz datoteka..." + +msgid "Learn from files..." +msgstr "Nauči iz datoteka..." + +#. TRANSLATORS: This is a button that deletes everything in the translation memory (i.e. clears/resets it). +msgid "Reset" +msgstr "Resetuj" + +msgid "Consult TM when updating from sources" +msgstr "Koristi TM prilikom ažuriranja iz izvora" + +msgid "" +"If enabled, Poedit will try to fill in new entries using your previous\n" +"translations stored in the translation memory. If the TM is\n" +"near-empty, it will not be very effective. The more translations\n" +"you edit and the larger the TM grows, the better it gets." +msgstr "" +"Ako je omogućeno, Poedit će pokuÅ¡ati da nove unose popuni koristeći vaÅ¡e\n" +"prijevode koje ste prethodno pohranili u memoriju. Ako TM ne sadrži\n" +"puno prijevoda, ovo neće biti efikasno. Ako u TM pohranite\n" +"viÅ¡e prijevoda on će postati efikasniji." + +msgid "Stored translations:" +msgstr "Pohranjeni prijevodi:" + +msgid "Database size on disk:" +msgstr "Veličina baze na disku:" + +msgid "Select translation files to import" +msgstr "Odaberite datoteke prijevoda za uvoz" + +msgid "Translation Memory" +msgstr "Memorija prijevoda" + +msgid "Importing translations..." +msgstr "Uvozim prijevode..." + +msgid "Finalizing..." +msgstr "ZavrÅ¡avam..." + +msgid "Reset translation memory" +msgstr "Resetuj memoriju prijevoda" + +msgid "Are you sure you want to reset the translation memory?" +msgstr "Jeste li sigurni da želite resetovati memoriju prijevoda?" + +msgid "" +"Resetting the translation memory will irrevocably delete all stored " +"translations from it. You can’t undo this operation." +msgstr "" +"Resetiranje memorije prijevoda će nepovratno obrisati sve pohranjene " +"prijevode. Ovu operaciju nije moguće poniÅ¡titi." + +msgid "Cancel" +msgstr "PoniÅ¡ti" + +#. TRANSLATORS: This is abbreviation of "Translation Memory" used in Preferences on OS X. +#. Long text looks weird there, too short (like TM) too, but less so. "General" is about ideal +#. length there. +msgid "TM" +msgstr "TM" + +msgid "" +"Source code extractors are used to find translatable strings in the source " +"code files and extract them so that they can be translated." +msgstr "" +"Izdvajanje izvornog koda se koristi za pronalazak stringova za prijevoda u " +"fajlovima izvornog koda, da biste ih kasnije mogli prevesti." + +msgid "New" +msgstr "Novo" + +msgid "Edit" +msgstr "Uredi" + +msgid "Delete extractor" +msgstr "ObriÅ¡i ekstraktor" + +#, c-format +msgid "Are you sure you want to delete the “%s” extractor?" +msgstr "Jeste li sigurni da želite obrisati \"%s\" ekstrator?" + +msgid "Extractors" +msgstr "Izdvajanje" + +msgid "Accounts" +msgstr "Računi" + +msgid "Automatically check for updates" +msgstr "Automatski provjeravaj ima li ažuriranja" + +msgid "Include beta versions" +msgstr "Uvrsti i beta verzije" + +msgid "" +"Beta versions contain the latest new features and improvements, but may be a " +"bit less stable." +msgstr "" +"Beta verzije sadrže najnovije mogućnosti i poboljÅ¡anja, ali bi mogle biti " +"manje stabilne." + +msgid "Updates" +msgstr "Ažuriranja" + +msgid "" +"These settings affect internal formatting of PO files. Adjust them if you " +"have specific requirements e.g. because of version control." +msgstr "" +"Ove postavke utiču na interno formatiranje PO datoteka. Prilagodite ih vaÅ¡im " +"specifičnim potrebama, npr. zbog kontrole verzija." + +msgid "Line endings:" +msgstr "ZavrÅ¡etak linije:" + +msgid "Unix (recommended)" +msgstr "Unix (preporučeno)" + +msgid "Windows" +msgstr "Prozori" + +#. TRANSLATORS: Followed by text control for entering number; wraps text at given width +msgid "Wrap at:" +msgstr "Prelomi tekst na:" + +msgid "Preserve formatting of existing files" +msgstr "Sačuvaj oblikovanje postojećih datoteka" + +msgid "Advanced" +msgstr "Napredno" + +#. TRANSLATORS: Title of the preferences window on Windows and Linux. "%s" is replaced with "Poedit" when running. +#, c-format +msgid "%s Preferences" +msgstr "" + +msgid "" +"Drag and Drop Folders Here\n" +"\n" +"or use the + button" +msgstr "" +"Ovdje umetnite foldere\n" +"\n" +"ili koristite dugme +" + +msgid "" +"Drag and drop folders here\n" +"\n" +"or use the + button" +msgstr "" +"Ovdje umetnite foldere\n" +"\n" +"ili koristite dugme +" + +msgid "Add Folders..." +msgstr "Dodaj foldere..." + +msgid "Add folders..." +msgstr "Dodaj foldere..." + +msgid "Add Files..." +msgstr "Dodaj datoteke..." + +msgid "Add files..." +msgstr "Dodaj datoteke..." + +msgid "Add Wildcard..." +msgstr "Dodaj zamjenski znak..." + +msgid "Add wildcard..." +msgstr "Dodaj zamjenski znak..." + +msgid "Paths" +msgstr "Putanje" + +msgid "Excluded paths" +msgstr "Izuzete putanje" + +msgid "Additional keywords" +msgstr "Dodatne ključne riječi" + +msgid "Name of the project the translation is for" +msgstr "Naziv projekta za koji je namijenjen ovaj prijevod" + +msgid "e.g. nplurals=2; plural=(n > 1);" +msgstr "npr. nplurals=2; plural=(n > 1);" + +msgid "UTF-8 (recommended)" +msgstr "UTF-8 (preporučeno)" + +msgid "Please save the file first. This section cannot be edited until then." +msgstr "" +"Molimo vas da prvo sačuvate datoteku. Ova sekcija se ne može uređivati dok " +"to ne uradite." + +msgid "Comment:" +msgstr "Komentar:" + +msgid "OK" +msgstr "U redu" + +msgid "C&lear" +msgstr "O&čisti" + +msgid "Clear the comment" +msgstr "Očisti komentar" + +msgid "Create new translations project" +msgstr "Napravi novi projekt prevođenja" + +msgid "Edit the project" +msgstr "Uredi projekt" + +msgid "Delete the project" +msgstr "ObriÅ¡i projekt" + +msgid "Update all" +msgstr "Ažuriraj sve" + +msgid "Update all catalogs in the project" +msgstr "Ažuriraj sve kataloge u projektu" + +msgid "Edit project" +msgstr "Uredi projekt" + +msgid "Project name:" +msgstr "Ime projekta:" + +msgid "Browse" +msgstr "Pretraži" + +msgid "Add directory to the list" +msgstr "Dodaj direktorij u listu" + +msgid "&New..." +msgstr "&Novi..." + +msgid "New from &POT/PO file..." +msgstr "Novo iz &POT/PO datoteke..." + +msgid "New From &POT/PO File..." +msgstr "Novo iz &POT/PO datoteke..." + +msgid "&Open..." +msgstr "&Otvori..." + +msgid "Open Recent" +msgstr "Otvori nedavne" + +msgid "Open from Crowdin..." +msgstr "Otvori iz Crowdina..." + +msgid "Open From Crowdin..." +msgstr "Otvori iz Crowdina..." + +msgid "&Close" +msgstr "&Zatvori" + +msgid "&Save" +msgstr "&Sačuvaj" + +msgid "Save &as..." +msgstr "Sačuvaj &kao..." + +msgid "Save &As..." +msgstr "Sačuvaj &kao..." + +msgid "Compile to MO..." +msgstr "Kompajliraj u MO..." + +msgid "E&xport as HTML..." +msgstr "I&zvezi kao HTML..." + +msgid "Check for updates..." +msgstr "Provjeri ima li nadogradnji..." + +msgid "&Preferences..." +msgstr "&Postavke..." + +msgid "Catalogs &manager" +msgstr "&Upravljanje katalozima" + +msgid "Catalogs &Manager" +msgstr "&Upravljanje katalozima" + +msgid "E&xit" +msgstr "I&zađi" + +msgid "Quit" +msgstr "Zatvori" + +msgid "Copy from singular" +msgstr "Kopiraj iz jednine" + +msgid "Copy From Singular" +msgstr "Kopiraj iz Jednine" + +msgid "Translation is &fuzzy" +msgstr "Prijevod je &nejasan" + +msgid "Translation Is &Fuzzy" +msgstr "Prijevod je &nejasan" + +msgid "Edit &comment" +msgstr "Uredi &komentar" + +msgid "Edit &Comment" +msgstr "Uredi &komentar" + +msgid "Suggestions" +msgstr "Prijedlozi" + +msgid "&Show references" +msgstr "&Prikaži reference" + +msgid "&Show References" +msgstr "&Prikaži reference" + +msgid "&Find..." +msgstr "&Pronađi..." + +msgid "Replace..." +msgstr "Zamijeni..." + +msgid "Find next" +msgstr "Pronađi sljedeće" + +msgid "Find previous" +msgstr "Pronađi prethodno" + +msgid "Find and Replace..." +msgstr "Pronađi i zamijeni..." + +msgid "Find Next" +msgstr "Pronađi sljedeće" + +msgid "Find Previous" +msgstr "Pronađi prethodno" + +msgid "&Preferences" +msgstr "&Postavke" + +msgid "Display entry &IDs" +msgstr "Prikaži &ID-ove unosa" + +msgid "Display Entry &IDs" +msgstr "Prikaži &ID-ove unosa" + +msgid "Sort by &file order" +msgstr "Sortiraj po redoslijedu &datoteka" + +msgid "Sort by &File Order" +msgstr "Sortiraj po redoslijedu &datoteka" + +msgid "Sort by &source" +msgstr "Sortiraj po &originalima" + +msgid "Sort by &Source" +msgstr "Sortiraj po &originalima" + +msgid "Sort by &translation" +msgstr "Sortiraj po &prijevodima" + +msgid "Sort by &Translation" +msgstr "Sortiraj po &prijevodima" + +msgid "&Group by context" +msgstr "& GrupiÅ¡i po kontekstu" + +msgid "&Group By Context" +msgstr "& GrupiÅ¡i po kontekstu" + +msgid "Entries with errors first" +msgstr "Prvo unosi sa greÅ¡kama" + +msgid "Entries with Errors First" +msgstr "Prvo unosi sa greÅ¡kama" + +msgid "&Untranslated entries first" +msgstr "&Prvo prikaži neprevedene rečenice" + +msgid "&Untranslated Entries First" +msgstr "&Prvo prikaži neprevedene rečenice" + +msgid "Show sidebar" +msgstr "Prikaži bočnu traku" + +msgid "Show status bar" +msgstr "Prikaži statusnu traku" + +msgid "C&atalog" +msgstr "K&atalog" + +msgid "&Update from sources" +msgstr "&Ažuriraj iz originala" + +msgid "&Update from Sources" +msgstr "&Ažuriraj iz originala" + +msgid "Update from &POT file..." +msgstr "Ažuriraj iz &POT datoteke..." + +msgid "Update from &POT File..." +msgstr "Ažuriraj iz &POT datoteke..." + +msgid "Sync with Crowdin" +msgstr "Sinhronizuj sa Crowdinom" + +msgid "Fill missing translations from &TM..." +msgstr "Popuni nedostajuće prijevode koristeći &TM..." + +msgid "Fill Missing Translations from &TM..." +msgstr "Popuni nedostajuće prijevode koristeći &TM..." + +msgid "&Purge deleted translations" +msgstr "&Očisti izbrisane prijevode" + +msgid "&Purge Deleted Translations" +msgstr "&Očisti izbrisane prijevode" + +msgid "&Validate translations" +msgstr "&Validacija prijevoda" + +msgid "&Validate Translations" +msgstr "&Validacija prijevoda" + +msgid "&Properties..." +msgstr "&Postavke..." + +msgid "&Done and next" +msgstr "&ZavrÅ¡i i nastavi" + +msgid "&Done and Next" +msgstr "&ZavrÅ¡i i nastavi" + +msgid "&Previous translation" +msgstr "& Prethodni prijevod" + +msgid "&Previous Translation" +msgstr "& Prethodni prijevod" + +msgid "&Next translation" +msgstr "& Sljedeći prijevod" + +msgid "&Next Translation" +msgstr "& Sljedeći prijevod" + +msgid "P&revious unfinished" +msgstr "P&rethodno nedovrÅ¡eno" + +msgid "P&revious Unfinished" +msgstr "P&rethodno nedovrÅ¡eno" + +msgid "Ne&xt unfinished" +msgstr "Slje&deće nedovrÅ¡eno" + +msgid "Ne&xt Unfinished" +msgstr "Slje&deće nedovrÅ¡eno" + +msgid "Previous plural form" +msgstr "Prethodni oblik množine" + +msgid "Previous Plural Form" +msgstr "Prethodni oblik množine" + +msgid "Next plural form" +msgstr "Sljedeći oblik množine" + +msgid "Next Plural Form" +msgstr "Sljedeći oblik množine" + +msgid "&Online help" +msgstr "&Online pomoć" + +msgid "&Online Help" +msgstr "&Online pomoć" + +msgid "&GNU gettext manual" +msgstr "&GNU gettext dokumentacija" + +msgid "&GNU gettext Manual" +msgstr "&GNU gettext dokumentacija" + +msgid "&About Poedit" +msgstr "&O programu" + +msgid "&About" +msgstr "&O programu" + +msgid "Extractor setup" +msgstr "Postavka izdvajanja" + +msgid "List of extensions separated by semicolons (e.g. *.cpp;*.h):" +msgstr "Lista ekstenzija odvojenih pomoću tačka-zareza (npr. *.cpp;*.h):" + +msgid "Invocation:" +msgstr "Pozivanje:" + +msgid "Command to extract translations:" +msgstr "Komanda za izdvajanje prijevoda:" + +msgid "" +"This is the command used to launch the extractor.\n" +"%o expands to the name of output file, %K to list\n" +"of keywords, %F to list of input files,\n" +"%C to charset flag (see below)." +msgstr "" +"Ovo je komanda koja se koristi za pokretanje izdvajanja.\n" +"%o se proÅ¡iruje u naziv izlaznog fajla, %K u listu\n" +" ključnih riječi, %F u listu ulaznih fajlova,\n" +"%C o oznake kodiranja (pogledajte ispod)." + +msgid "An item in keywords list:" +msgstr "Stavka u listi ključnih riječi:" + +msgid "" +"This will be attached to the command line once\n" +"for each keyword. %k expands to the keyword." +msgstr "" +"Ovo će biti dodano komandnoj liniji jednom\n" +"za svaku ključnu riječ. %k se proÅ¡iruje na ključnu riječ." + +msgid "An item in input files list:" +msgstr "Stavka u listi datoteka za ubacivanje:" + +#, c-format +msgid "" +"This will be attached to the command line once\n" +"for each input file. %f expands to the filename." +msgstr "" +"Ovo će biti dodano komandnoj liniji po jednom\n" +"za svaku ulaznu datoteku. %f se proÅ¡iruje na ime datoteke." + +msgid "Source code charset:" +msgstr "Kodiranje znakova izvornog koda:" + +#, c-format +msgid "" +"This will be attached to the command line\n" +"only if source code charset was given. %c expands to charset value." +msgstr "" +"Ovo će biti dodano u komandu liniju\n" +"samo ako je dato izvorno kodiranje znakova. %c se proÅ¡iruje na vrijednost " +"znakova." + +msgid "Catalog properties" +msgstr "Svojstva kataloga" + +msgid "Project name and version:" +msgstr "Ime projekta i verzija:" + +msgid "Plural Forms:" +msgstr "Obrazac množine:" + +msgid "Use default rules for this language" +msgstr "Koristi zadana pravila za ovaj jezik" + +msgid "Use custom expression" +msgstr "Koristi vlastiti izraz" + +msgid "Learn about plural forms" +msgstr "Saznaj viÅ¡e o oblicima množina" + +msgid "Charset:" +msgstr "Kodiranje znakova:" + +msgid "Team:" +msgstr "Tim:" + +msgid "Team's email address:" +msgstr "Email adresa tima:" + +msgid "Translation properties" +msgstr "Svojstva prijevoda" + +msgid "Sources paths" +msgstr "Putanje originala" + +msgid "Extract text from source files in the following directories:" +msgstr "Izvezi tekst iz originalnih datoteka u sljedeće foldere:" + +msgid "Base path:" +msgstr "Bazna putanja:" + +msgid "Sources keywords" +msgstr "Ključne riječi originala" + +msgid "" +"Use these keywords (function names) to recognize translatable strings\n" +"in source files:" +msgstr "" +"Koristite ove ključne riječi (nazivi funkcija) za prepoznavanje stringova za " +"prijevod\n" +"u originalnim datotekama:" + +msgid "Learn about gettext keywords" +msgstr "Saznaj viÅ¡e o gettext ključnim riječima" + +msgid "Update summary" +msgstr "Rezime ažuriranja" + +msgid "" +"These strings were found in the sources but were not in the catalog.\n" +"Poedit will add them to the catalog now." +msgstr "" +"Ovi stringovi su pronađeni u izvoru ali se ne nalaze u katalogu.\n" +"Poedit će ih sada dodati u katalog." + +msgid "New strings" +msgstr "Novi stringovi" + +msgid "" +"These strings are no longer in the sources.\n" +"Poedit will remove them from the catalog now." +msgstr "" +"Ovi stringovi viÅ¡e se ne nalaze u izvoru.\n" +"Poedit će ih sada ukloniti iz kataloga." + +msgid "Obsolete strings" +msgstr "Zastarjeli stringovi" + +msgid "(0 new, 0 obsolete)" +msgstr "(0 novih, 0 suviÅ¡nih)" + +msgid "Open" +msgstr "Otvori" + +msgid "Save catalog" +msgstr "Sačuvaj katalog" + +msgid "Validate" +msgstr "Validacija" + +msgid "Check for errors in the translation" +msgstr "Provjeri ima li greÅ¡ki u prijevodu" + +msgid "Update" +msgstr "Ažuriraj" + +msgid "Update catalog - synchronize it with sources" +msgstr "Ažuriraj katalog - sinhronizacija sa izvorima" + +msgid "Toggled if selected string has fuzzy translation" +msgstr "Uključite ako odabrani string ima nejasan prijevod" + +msgid "Show or hide the sidebar" +msgstr "Prikazuje ili sakriva bočnu traku" + +#. TRANSLATORS: "Previous" as in used in the past, now replaced with newer. +msgid "Previous source text:" +msgstr "Prethodni izvorni tekst:" + +msgid "" +"The old source text (before it changed during an update) that the fuzzy " +"translation corresponds to." +msgstr "" +"Stari izvorni tekst (prije promjene nakon ažuriranja) kojem je odgovarao " +"nejasni prijevod." + +msgid "Notes for translators:" +msgstr "Napomena prevodiocu:" + +msgid "Add comment" +msgstr "Dodaj komentar" + +msgid "Add Comment" +msgstr "Dodaj komentar" + +msgid "Translation suggestions:" +msgstr "Prijedlozi prijevoda:" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (Windows). +msgid "No matches found" +msgstr "Nema rezultata" + +#. TRANSLATORS: This is shown when no translation suggestions can be found in the TM (OS X, Linux). +msgid "No Matches Found" +msgstr "Nema rezultata" + +msgid "This string was found in Poedit’s translation memory." +msgstr "Ovaj string je pronađen u Poedit memoriji prijevoda." + +#, c-format +msgid "(New: %i, obsolete: %i)" +msgstr "(Novo: %i, zastarjelo: %i)" + +#, c-format +msgid "Importing translations: %d" +msgstr "Uvozim prijevode: %d" + +msgid "Poedit Update" +msgstr "Poedit nadogradnja" + +msgid "Preparing migration..." +msgstr "Pripremam migraciju..." + +#, c-format +msgid "Migration exit status: %d" +msgstr "Izlazni status migracije: %d" + +msgid "Poedit needs to convert your translation memory to a new format." +msgstr "Poedit traži da vaÅ¡u memoriju prijevoda pretvorite u novi format" + +msgid "" +"This must be done before Poedit can start. It may take a few minutes if you " +"have lots of translations stored, but should normally be much faster." +msgstr "" +"Ovo morate uraditi prije nego se Poedit bude mogao pokrenuti. Proces će " +"potrajati par minuta ako imate mnogo pohranjenih prijevoda, ali obično ne " +"traje toliko dugo." + +msgid "Proceed" +msgstr "Nastavi" + +msgid "Translation memory migration failed." +msgstr "Migracija memorije prijevoda nije uspjela." + +#, c-format +msgid "" +"Your translation memory data couldn't be migrated. The error was:\n" +"\n" +"%s\n" +"Please email help@poedit.net and we’ll get it fixed." +msgstr "" +"Migracija vaÅ¡e memorije prijevoda nije mogla biti izvrÅ¡ena. GreÅ¡ka:\n" +"\n" +"%s\n" +"Molimo vas da poÅ¡aljete email na help@poedit.net i mi ćemo vam pomoći da ovo " +"popravite." + +msgid "Cannot create temporary directory." +msgstr "Nije moguće napraviti privremeni folder!" + +msgid "Welcome to Poedit" +msgstr "Dobro doÅ¡li u Poedit" + +msgid "Edit a translation" +msgstr "Uredi prijevod" + +msgid "Open an existing PO file and edit the translation." +msgstr "Otvori postojeću PO datoteku i uredi prijevod." + +msgid "" +"Take an existing PO file or POT template and create a new translation from " +"it." +msgstr "" +"Uzmi postojeću PO datoteku ili POT predložak i kreiraj prijevod iz njega." + +msgid "Collaborate on a translation with Crowdin" +msgstr "Sarađujte na prijevodu pomoću Crowdina" + +msgid "" +"Download a file from Crowdin project, translate and sync your changes back." +msgstr "" +"Preuzmite datoteku sa Crowdina, prevedite je i poÅ¡aljite vaÅ¡e prijevode " +"nazad." + +msgid "What is Crowdin?" +msgstr "Å ta je Crowdin?" + +msgid "There are no translations. That’s unusual." +msgstr "Nema prijevoda. Ovo je neobično." + +msgid "" +"Translatable entries aren't added manually in the Gettext system, but are " +"automatically extracted\n" +"from source code. This way, they stay up to date and accurate.\n" +"Translators typically use PO template files (POTs) prepared for them by the " +"developer." +msgstr "" +"Unosi za prijedov se ne dodaju ručno u Gettext sistem, nego se automatski " +"kreiraju iz\n" +"izvornog koda. Na ovaj način ćete uvijek imati najnovije i najtačnije " +"datoteke.\n" +"Prevodioci obično koriste PO datoteke predložaka (POT) koje za njih " +"pripremaju developeri." + +msgid "(Learn more about GNU gettext)" +msgstr "(Saznajte viÅ¡e o GNU gettext)" + +msgid "The simplest way to fill this catalog is to update it from a POT:" +msgstr "" +"Najjednostaviji način da popunite ovaj katalog jeste da ga ažurirate iz POT " +"datoteke:" + +msgid "Update from POT" +msgstr "Ažuriraj iz POT-a" + +msgid "Take translatable strings from an existing POT template." +msgstr "Uzmi stringove za prijevod iz postojećeg POT predloÅ¡ka." + +msgid "" +"You can also extract translatable strings directly from the source code:" +msgstr "" +"Također, možete napraviti stringove za prijevod direktno iz izvornog koda:" + +msgid "Extract from sources" +msgstr "Ažuriraj iz originala" + +msgid "Configure source code extraction in Properties." +msgstr "KonfiguriÅ¡ite izvoz izvornog koda u Svojstvima." + +msgid "Sync" +msgstr "Sinhronizuj" + +msgid "Synchronize the translation with Crowdin" +msgstr "Sinhronizuj prijevode sa Crowdinom" diff --git a/locales/ca.mo b/locales/ca.mo new file mode 100644 index 0000000000000000000000000000000000000000..7dbe06a7100ed7f2b99b6ff91ab7dfc1a8d7d4bb GIT binary patch literal 47339 zcmb`Q2b^71z3(?2MtU!nP036GnMo*O9BN1=5XdBfOlT^2X3m+JL(ZHtoRVZv5k(ON zMFhcu5>x~PM8RtT`(S;-_1-JCYk3c`E4GWhyzlS-Uu&OzCKC|fJD=?N?X~vWtNz!& zt+iLax97HRPWTV@(l2&U>EoVxR)OECP@+48{89| z0#6681}_A^0qzPuuP;fq2bY1nfP!8a2ZNNW*baC?cfV(a9=P9W7x&xj9?oIfDfDLe8 z!dC{o8C1R>2A>6f98`aN8+>L}zgL3F{{~R~cQd#x_-|kj zct0pQd=ylE{{TfV2OJG8fro*|f-eN016~Kt1MdTs?z;hh0=|gw@4!95GmlA<#b6O! z4!#%Exc(Y^8TbcK^=duW<1Y>PYVZ)^uLchU?*UcLmqF3fBOs)ed>2$XJ5#wmz~=-! z65O5e5>U^FK$SBV!jquJ{qle}gL@Nx06Y}@Y6$-isQ%oEPEh{)2RuCB@u28oC8+)w z0#oo(Q03hWsvft4nui|))t)bakYe&EsBznKQIgC7p9AW>0Z`+!5>)-yfct=>A^g%1 zz6KQC-3mf_$%Ej&;1dCNe!hnf1vPH{pz3ixcr7>%s{VflRi21b^LaZ^`RoL0yi!o@ z=mAxqMWE_^MhKr9a2+^6{H37A??Lb+@W-IWuje?==O|F&B_X^LRKH&csvehvXMk6N z%I9k!L!JBqRDFAo_j()+D*ZB0?K&gid7$by2CBZz5PnU->p`{W7EttbFQ|6j4=Vr9 zfEw>FfTFW+furD#C;0rR1$-^oBL3arT=0Msy}VOE_1{`hbX5VB|0_VX`$|xBbseaB zz6(^kdq9dx9t1Uix1#fueh*OXcqVu_xB!%>I6vS^LCxcLg8PG?2i2e72UmmJob2ry z0@YvVgLA+O1HKwmes_Y(=OIx2`2?u++bniIwIitbJ;A-e6jVPR1FHT50nZ0_B3uKN zehO4OUlZ_pQ0>1Z;0HjB!>2&?{})2|ArP^cJOXMwz8Uamp!(&npx)cz6z7M#fhy-9 zQ2jR-d^WfU+!{Ow{2O>acn5gy5`S;&r9Q5^f(H^m7u0-P0;b@3pvt)fRQ|67#ec5> zw*}u09s+IxA<<+S><0e6WeK=`$w_{6|zUf<;bhe7qrOF+H%nt*Q!cn1i}OYRTh--11aw^@#i0gnLn zd^I=+yb@G>-w$g1J_jn_FM=xnTi|8jcR`KY1*iLXOo8ghOF_})jiBmv7kCu-QBdRf zb5P^_M^Nc@h3SYc4-I$}xC7zEp!#DusC26W7D1(-3gIh3_2)alH-aAlHEyS^@b_N` zs=VP4-UwC+UkWmm$uGg}!J`L#Jo`adL2??Xdb|eI^J_qra|5^w_yO=_@RMLK_>U0o zUFrQ-1=XLg237w%1AZD*eI5ao|Ib0?`#W$KaFDD?1;y8H0_TGFfGX#kpvLce;3eQ6K()KRI*c!?CkFACua zQ1!V4+!1_5h<_cZ{<{&>`yT|=zR!Sa&(}cZ_sj77&)~s?yUy}{oDV9$V?y`@a8JSm zA^u!Y{aOg&8n_eTjiB1|N>KS<2dcfBLijFFboen)^?C>t9eg*$|2D*LzsBSD4R{22 z1?f%(HSS*kmG7hAe&FLFy#0{Zb5Bs^&jD4Rqd?Vn38?-$6FdVv7u*|s54bD%F;MBg z7~;Pk;(s3E{|u_!9oHtw8^FCm(cinlJ;2*R(a-(h-rx^F@y|bkM}YgB?fhdg2x%uv z!A0P8;6C72K+)Z!pz8e-@U!5bz_)-OKgZLrJ=go;4d9Q7zXOEzB-fsY%>w>6I0E*a zPg}t^f$F!%K*j$9L}Vo+FYtEU3Tph1d7<-xv%&d{JOz+zcah^HsQzz-@D!+iyA({pJ3+PM zE8uqE4?xxPry>5&;5WCT4eNYde^&8&{sGi`+d#ap0}lk%{#!w&Sn^TuCE)H=r=zRE z9SPq8D*yL^UEl+t`r-2d9}4kb19v6<`vD&ZmF{n#`fJ;o_ruPh=H10DhD`N`nH z;HrQZgR0kcp!)gkpytgj0q+M@&VPZTv+o2h>b*n5+qoOKC*i|D_3!gS_zY0} zcmbG#jSzo5xEJBuLihnt^Xy?z$ABLM z#V3CR9tj@Ya(!tHxHsWffNI|jAVZbB3sk@Cx!(EiJaClo<)G-|XW(1G-+(ITstw-m zH-oC@JHW%i+d=W4{{mIc??H{*Gd6m?_XhVPd^)J-!vQyddl9}G)HrPd)sGK?`-9&A zd%$0VbHM$loX?&J&LunoD&5uKKH#mO@_ztSzF!UD$3W57pFqv?e}H;_{w3aywcu`q zUmS1}d=BBuz+=Hp;LhMTz@x#(K(%jwCbRNA7*xG`K$Y7c!Yf0#0Cp4K0#|@Hfokth zLDhd3n3S*^RQyTc9^eT039tpKoTFdnot31>nU2ZvmCxe}Lkv+g{=6_X5>#2Y~9ABS4Mg@u2#54XFB$2fPea`nP~e|2|OZ z9tikVQ0add@Nb~#exKKPJ)a%0J76EE@jW)+>7eG#1)%6^9jN+l09CIm0=@%0kno4V zZNPsAciIYm0)Cb7cdztueE(~Go;(B|K>UwFSi<(%gbx5U4vRq5dkLs=UjS|oj)8N) zD)@ZxdQjv4FsS+WS5WQW=PGaC;h@4t1w0j0KfMq<7@Po)0j~j5@Ig@R`XQ)ve+89p zm#e7@xB%2VYJjJJSAe32FM%q5>(@IT1d1+>0eiqvQ0;vKsCj-ncm#MaxGnfSQ1AaB z;9tRC65i(x-k;lC<8-=1z{9{@c)l3ad|DN-1g3;v0xkq^3gL&qKEjWO_-DP*^{|zo z=^?=OMR0Uri6UXO!2gWJE!+rJmMJK+IP z^W|(%>6+l4;MD8Xljnim;Dey@`8g>5 z@jFm-v)lFXR&ZZ%8F(3}_%DFFfe(YHf!_o5e$Siz`2tY<;aE`pvj$uZPJqXQp9EKd ze+kdexWVOm3EYSHYXaU1svjNzHUGW>s(z1vdw{LmNW#oPaGQ03kU z?g@S%;54ZGzYeNBKLOQ$e*zB$cY3R*?**0aWN?4*Ebu6B9jJD_6I4HcGCco0sB*p^ z!oLOgCj5-Ic|B54^_>Im2ObToyfZ?$2CAIbfXaVUi2roJZ-UP!{@0-Db@Jii-+^pb}`L0uKcL1n#mGWA$$5 zw}-q3+mQGY*aSZfo((?tR+kG`gX4tn1y_Ry(TKaj3V0-V;BENmz!hK*_$hD*{4qEQ z9)G*fgS$b+FS>)V0ACN5z~6ua;5k(GyWl%OhAer>o!R#8E_5xLp6TySQM!+|Ns_#cY<@YeS8~A-t^zke3nc$xHx&LPYDEheu zJQVyqsQi8gE(CY}ke71;cm&}(*aY7RJ`3FI-<;l#1VvAaK-G5**aKbwrr;Ie-r#MZ z%Ktd1e*YGz{&*DJ2mBeRd6<0I$GHnUiQr1`MDPvZF5p98H~8P+8^NtV!kh!I1GfeH zKI-*48dN{_gNi>9><5>CbHPi&1HjurrTYx1e*PS|7x)bjva#P6`THfV`?;7l$@W|G zho9Q>TdtRcg!jc4h+D(;dBShwI*j|@aGl9@bV#Eh%dCPa|9g4*>sHc(wr?BJO+O9L010vGD9r@R)Fa7PyLM znv>t>((f}|sc!h)$n)=T>9-^JAK)2Wh?V4i!aw5r75Ce5HM!#NYux;q>zU!*82|5t zU%>Tot}hVzNpN4q3_ARahc@}@q%iSyPB*L%dx{B*FT>ruKQ?6%l-N|(% zY1VQb&;1zJwp@pE#owvi??AbqB;sXUt?*z0@jvALHm)bQ-#5JTrhu;{UUd3pF8#!l z^c&|oiZoYq9jAM)t;qkKgg?*yB)Buzc3fkGmvY_Ay?){k@pmzCuL<#rThIL{R}c4p z;@X)!KS=m3dKiA6CHyAtSAbW7-vW0e-E|;rF!|qHOSr!Q{2%c3;O?M)&*u^!e5nHb z{^F3F7@l7n@V|+_gG;<(IdQ)Y@k(Cf`kik0{hsR$;o1KQ_#*H_Tt%)Cu6wvPa_P4x z_1v3lYp(zFsAMDff4JswJw&?CaltOK-@NdyBJK^bI|ke{_w2{Sy^HW=Tvu^_AeVT8 ze(Sl!Pu|V-O|Bnt>9-yA&`&(!>%8|B@aJ5^+)J+fjeGqr;aPXxD(fVx&F!}-u0=F_8Flr{~#{@z8!DCbGaVlx|Q_e z{g;A|a2?P6U%@_5KV|bb!Y|~~@0Z|vxDMf}6aEF)WnB7g;2I?U9Il(V9|woHzRLY1 z*X3OLHMr&ze-`)(P`^tZvcIn*{>$On-Qc<5{$B7CT)R=R0dNyF|C|TBmo)j`hY24`#NWYJb1mooWUd{!?&La@OTYJV?aH-Cf!uE&-gyz>)40}g zeRQ$aR2j_}xajE5HKRex$j8@K3mxKJqy({eDQ? ze{t>4^%kzL6L$^xZLZ&NjS#+;>um1d%Jo6+Zvp=u)bFL-KMFnv)bGCo?h5WjnIG|J z(>Zjz1Mzoo?aO^H_#N;WTn}*lh433d{ieBoK=@Z&&*qB1Y3{#A;Ey5hAn;ka=SsI# zE_^WI4|9E&xc|~ae&6JNXTP<-CBkK{i4gY)cuVfNZXe~jejfoJ0=q-Fm-`oUbrC+D z>p|}I>vG8czMQ)sa6Oka@8;Tz>(^YT6L&fIC$7JT)b9jagzX0&&CMF{i(GSKJaIqg z{uED@930{g3gLecek{a&h`1ZL9|XSyUI@M)Y=q~Vz!wmA5tn{Pa6OxAYvP++H-&UP z;BH(m;n}CbD%UdZ^}CS!$GP;|8+;ph0oOKMOSm59+8=t*?@FGZ$#pgNXM}eu;KvF7 z0o+rG!tY_iyYSvVg!kv_Bm4!fPjSC1@z;P465fOR=W+ik?)7^yco^4fJed3pd}X-b zowWMx!S!jb`?&JI>j><`yZeN6Cv(3I_veH9y&e3h-zHz<{&wzv5B7)WuO>VZ?k@@H z&Lg~<`=#K&aZPb8t);@$Mt-!_i^cWG1pJIPUZSf;*Q{|avy(d34epYtz379$Pa*b5kCwLgt$>~ zF>%*(>GwwP&*8oXzJs`TfGfEcaQ`zsOXp71isjLAsW^}OR<%)BuiH7rv{Y@@r{Yby z)QGoJ>4rih9W7TXrD8f-uT7-Q@lx8X7pjd)p;@j~(}~hVtv=NkU*O$zL#bZ+r{Ag9 zYjt~BH&$-B(P)*@4dv$eW`&K`TGgVJWr-;2$x@ZmO1WA}Yon@6Deall=&|NhYt6J$ zD->zcNUdHkjWjE2fG2OvNUyeR;e|%Jx?UP3L3M;4>s~xuYc&I;t81lVnb0Y<+PaBC zeI3u2RBEi0cQ2_;P9@z-OO;ZS(9#+;EL4l>%F;%XXThok2P}_e)IRB6R;KBFeM$GJ zE7zuDrDl^9>0qJSDpWe-CSqKT_0VjdV7aRv z>4^%1L+ybMF}a~nx>r@LgFS-~7`NP3O_r*b-ReR^&Ftu?T)@-ROY6(ER->~xQh97g zk*n*q$x^)unfa@&`dBIT&MfBNr@vR*v!Zo$F;BBRJF8Trch*4v{2i}tNYBa*q($UM zc5PLu*D^<(?jf830;2V0<$8l&?Rciiq-Uey*<`WMWI|~6tf{r?Ml5S{k&PI6cA-+X zw7Gt#vRQO2pLwU~a%n?iL|twei5AlJ${=06YRD+QFPXbAt(G>-PZy@O;YLjqH!qpH zqEx6eZ)*^CK_r{z2#UuLLVr4^JU@FyA>!9IN@=k)T4+_6J%#F6t1zbA>ZOZYhqH0Q;ob0V{-g(dF;fc^}?8u`%=a+T~@0UOZ7&28guCQ1$y4q z#mg;95}P?99d0$7wd#yli+Xi5ygL3=uePey!bGWfVq()XozqAbkBq=Zn%oqN%!`Q$ z#>?(C&y1|}AkP6LVeF4T&OcqxvdCG?5$duUT5&YRum};aWb!oqFN-2p_ZvyD{ZvG&4xm?sj_^2 zS+gI#?4~)5M=yIvO7ZoAdgP=nzX!>b$Y54!!fUN&Z2|!^Qm9m5RpX_RbuR5700lrXMS7OGTQh=}~3(fKVz-Gc+-=VHkL+Oq+wXb>V*loRD(y8WjeTg zNr_wQ>4@+<*L?cYr8T4ENWfBp!VGGhlqDzEAZKD!Bke}o!t_*E%bOTvZD&lD#HZxi zFnQLKEU_5n75QI?$>|BM<}9gIDo7Wj zD73^vUj8~sE~(cx6wB2_99UEZ$ppTUPurlooYmTmO>&qzP^kJqmA9iS4SE=y&>~ znUBN|Gt{GUNs)XSdh;!SvxE+vyD zgr);MYznD)J3jTtWjY^iVHk!k}e)c z@zL-Z?IWvlPfBJmwVYHARog5{9m9>zRJOSeMSmElhs6A=H3kR0!iAFF7k!z|9B!pJ zFCIg3hG!zBc&lfH`0UZk-YR)nUq|nu7;tM+AQK_Hv_Y9{sLC#bTNpjsWQimcnlV4C zELDdxY>ZJ%>XC(~!-bJ`eOX?br$MCWTlwf^@9jvEf2JA3z)O^y=rg$%itkGXx;J9i z@fX2FKcT!14XzOTFEfx(BVT0ex1TpPO2Xl?YunS|j7)O(jiFIz*K- zSAocA0(^mA8)+EI-AEduGl4W!u z9V;4Ux|xy{qL9LhZBwkyKE*^yrhIg4gajRV z1YVe%tHJx^)shG^bGTS5HN>h)8$}1nvg`pgE#b0}w|ffW~fO?@@lspNxBpIPu!EDDP1!cFVhs;gSuwO-2>`yv~!%F==)YgrykY^*M_=2QRU~UkKUM37)eeo zRZAFE$*DE|NvVt;I3@9z;oy@~jJS6y3TY&#mC*_31YAV{kiW&P;lVH_iU*n)g^l!- z7&hquRpC~JW~EC8K9MY6nk*lMm6#xzA9WOCKob5`ZB%1UpGkib%aPNlWn^L!E%r=T zzWXpT@!SN#)Ts*vS8PhD>K^pfa-*w?4&RFz)toYI(2Cb2fS$!}(h_Waq={P9mk#lg zxrOrOb%{NeB-TU$$`^A}N6PWQ=wrwCF`0K%wlFP_0Y>BXvXDgbm>mwm4oQ! zZ?1T>%}Uo^WCuI5#u9`3&_gIluC^5W((}mL5}0_RH)E~Mc{Jh5M_RVNm@%zmpXZ zWYujWn|JD2j~iqRa<{2_?4q6MX}lYwl!*SS@RmQ!c~u(WfiYTju8pJTBuWpDbH325 zG}$I|ik*uA(utx4mCn^H@?o2U!iYedM?>^lsft}Yh5@hw`J)`*h4`ODMs(#Q9yN(T zT=0$3L>bdY@jjY|_l-RE*WNhKJIPkJ?Ma0NU&Nll^Rwjc;UD0}!U&w6@$Y2?tig7c9CFBa z*oOzA#rPn!k3>|!wPw7}^$Cy2QFF2q$49W7mT4tS5m9cSh*u!0%x7oC&13~}v5xnm z31&-b%19PLrG&0-n%vAcEg21|!GPnEmvykQ7Mt{X5pRwYy;EtX|&Q5nZsN5$1oVx;L$))%o!Vxab5nMw^kC4#ZYvq~cjyWh)Nk)A6Gh2lh5 zRuvQ3Ge$AI9&~GeKLpIxDnr?0je2Gli>5LF-(f;qEeNU*3yM`V5>uLz)!lLBE;rZP zk-7O!eTUlmaMBqJTA3EJa*5I*bQv?~N$$&B?y5F@UH)QwXkAdOIpdT9QlPelDq2^& zJQIr(2(0z+ysjZl2^dU=O+G(5q6?;@#r~C#2+4Flpp!(fcm*FWvA z)yd{>x~4gWpkK{WL?a32L``HM6)PJ!v&$QkHIpXU*p^WlP=ovM1M`B&IT#|Yg9WLP zsZMS)nX_L0dny?wm8=($hY^e!*-`+Ja1E)0v<XrgrZgpKMfaqi*3Rz8Tq8p_;gW~CIKAY+g=C)CkQu(5I zUQT3@d0CM~<_t3WR+c%U7nI)+sVJoos-q23P%K6EBnxq)#dQB0mi%Tcsh`=xEv7#* zp=^1*y`J zd(av1jAY^a!%|?dhj5JvzWn_8PaTRL@7J&ympt>*G5Eg|3Y0r!uVSn`# z@-^G+hA0YTS%O8Q1uif=Vrcm=^3J^7}JeHCCyUHF7~?N3b^tj<%|fBdQ&@ z#uks-;h{D+YeyRQXS+fEMQ0f8G&vF>Qu|k6dh{wZ=%|cNEydu z-f}HV+x{)az?&vBAb*dbxLzzR_c*3)v^Q(`Qx?8Vq(ii&k@3W6cSMW5nxSx}xT?VZ zfzn99L=2Q!ESta;$w{k4dnh+tagnTt*;wPkqO5gGHV>L28;U8Ygk(*VjWPLO4LY$*|`MkHC&IcHj9W9)rUN}go*VKFGzp~0(?&pVsbYNvW1)@#NxQik1isi}t9 zj*9ug(@uxAw?N=Uid!noCq?CPSGd-)hNZkjf809BW*9N!?61&rohEs%v70BEGwR}~OPS@*SZf|(kJ~!4>EM||(WqH2j^0c+%MTFhmND3%exa7u z@q?7Awbt0U8_UiIY|cy1jokrVpb4TmYS*Tk5LvXD!17nY7^D=NlhjrO0;@9j*JNqL zw!n(>#5W;UDFT=QU9@C_ykznHwL{B#7m?PqZW}%ILU_TFM$eWuxxh-vCsxdOOk0n} zSFZgFs#fSsY3rsITE=3Q-l7>V$~NeHDW*QS-sw%z*nCo?_V-j!0?xii34-DGcB zt!A~A!?L4FXJgtZ2A0;0;DWg>2>hUgBSxY)^Sv>tWY5LU6Te{#UTsW_z)TIVcrGW6 z>67%oHwop{bUwL4OyN_;?8aM{<77s0)>~~dX%t3r82QxR@)-aBC?m_`U#6;=we~(@ zH)V7Tn;&fMa0$Y+^(|L5MQLWVzDgDkI6ufRW(Q!SlkN zMVCP6(WV*4X$aLaF~Tw*gWx^vdz6l)Vi$+Ohx(E-i_zBM5A+>X~IZT2s5Z^ORcnw?7g~K zZ6(TO))$(v_srt9x{+9