From 15d06954409b3f50342b35354b642396a4779b84 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 1 Jun 2005 21:16:30 +0000 Subject: [PATCH] added wxPLURAL() macro git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + docs/latex/wx/function.tex | 33 ++++++++++++++++++++++++++------- include/wx/intl.h | 5 +++-- locale/Makefile | 4 ++-- samples/internat/internat.cpp | 2 +- samples/internat/readme.txt | 16 ++++++++++------ 6 files changed, 43 insertions(+), 18 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index bb52f0cc4a82..e2540d28f212 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -8,6 +8,7 @@ wxWidgets Change Log - For more verbose changes, see the manual All: - Added wxLaunchDefaultBrowser. +- Added wxPLURAL() macro in addition to _() (Jonas Rydberg) All (GUI): diff --git a/docs/latex/wx/function.tex b/docs/latex/wx/function.tex index 58e596449913..f0abd30cc958 100644 --- a/docs/latex/wx/function.tex +++ b/docs/latex/wx/function.tex @@ -251,6 +251,7 @@ \section{Alphabetical functions and macros list}\label{functionsalphabetically} \helpref{wx\_reinterpret\_cast}{wxreinterpretcastraw}\\ \helpref{wx\_static\_cast}{wxstaticcastraw}\\ \helpref{\_}{underscore}\\ +\helpref{wxPLURAL}{wxplural}\\ \helpref{\_T}{underscoret} @@ -1504,17 +1505,27 @@ \section{String functions}\label{stringfunctions} The second form is used when retrieving translation of string that has different singular and plural form in English or different plural forms in some -other language. It takes two extra arguments: \arg{str} -parameter must contain the singular form of the string to be converted. -It is also used as the key for the search in the catalog. -The \arg{strPlural} parameter is the plural form (in English). -The parameter \arg{n} is used to determine the plural form. If no -message catalog is found \arg{str} is returned if `n == 1', +other language. It takes two extra arguments: as above, \arg{str} +parameter must contain the singular form of the string to be converted and +is used as the key for the search in the catalog. The \arg{strPlural} parameter +is the plural form (in English). The parameter \arg{n} is used to determine the +plural form. If no message catalog is found \arg{str} is returned if `n == 1', otherwise \arg{strPlural}. -See \urlref{GNU gettext manual}{http://www.gnu.org/manual/gettext/html\_chapter/gettext\_10.html\#SEC150} for additional information on plural forms handling. + +See \urlref{GNU gettext manual}{http://www.gnu.org/manual/gettext/html\_chapter/gettext\_10.html\#SEC150} +for additional information on plural forms handling. For a shorter alternative +see the \helpref{wxPLURAL()}{wxplural} macro. Both versions call \helpref{wxLocale::GetString}{wxlocalegetstring}. +Note that this function is not suitable for literal strings in Unicode +builds, since you the literal strings must be enclosed into +\helpref{\_T()}{underscoret} or \helpref{wxT}{wxt} macro which makes them +unrecognised by \texttt{xgettext}, and so they are not extracted to the message +catalog. Instead, use the \helpref{\_()}{underscore} and +\helpref{wxPLURAL}{wxplural} macro for all literal strings. + + \membersection{::wxIsEmpty}\label{wxisempty} \func{bool}{wxIsEmpty}{\param{const char *}{ p}} @@ -1688,6 +1699,14 @@ \section{String functions}\label{stringfunctions} Don't confuse this macro with \helpref{\_T()}{underscoret}! +\membersection{wxPLURAL}\label{wxplural} + +\func{const wxChar *}{wxPLURAL}{\param{const char *}{sing}, \param{const char *}{plur}, \param{size\_t}{n}} + +This macro is identical to \helpref{\_()}{underscore} but for the plural variant +of \helpref{wxGetTranslation}{wxgettranslation}. + + \membersection{\_T}\label{underscoret} \func{wxChar}{\_T}{\param{char }{ch}} diff --git a/include/wx/intl.h b/include/wx/intl.h index de2680636ec9..b108e5931e40 100644 --- a/include/wx/intl.h +++ b/include/wx/intl.h @@ -33,10 +33,11 @@ // ---------------------------------------------------------------------------- // gettext() style macros (notice that xgettext should be invoked with -// --keyword="_" --keyword="wxGetTranslation:1,2" options +// --keyword="_" --keyword="wxPLURAL:1,2" options // to extract the strings from the sources) #ifndef WXINTL_NO_GETTEXT_MACRO - #define _(s) wxGetTranslation(_T(s)) + #define _(s) wxGetTranslation(_T(s)) + #define wxPLURAL(sing, plur, n) wxGetTranslation(_T(sing), _T(plur), n) #endif // another one which just marks the strings for extraction, but doesn't diff --git a/locale/Makefile b/locale/Makefile index 28b84eb07874..2adfdd9d32fd 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -16,7 +16,7 @@ XGETTEXT=xgettext XARGS=xargs # common xgettext args: C++ syntax, use the specified macro names as markers -XGETTEXT_ARGS=-C -k_ -kwxGetTranslation -kwxTRANSLATE -s -j +XGETTEXT_ARGS=-C -k_ -kwxPLURAL:1,2 -kwxTRANSLATE -s -j # implicit rules %.mo: %.po @@ -42,7 +42,7 @@ allmo: force-update: $(RM) wxstd.po -# print out the percentage of the trsnalted strings +# print out the percentage of the translated strings stats: FORCE @for i in $(WX_LINGUAS); do \ x=`$(MSGFMT) -o /dev/null "$$i.po" 2>&1 | sed -e 's/[,\.]//g' \ diff --git a/samples/internat/internat.cpp b/samples/internat/internat.cpp index f84b7b3aa011..7644f7fb7748 100644 --- a/samples/internat/internat.cpp +++ b/samples/internat/internat.cpp @@ -354,7 +354,7 @@ void MyFrame::OnTest2(wxCommandEvent& WXUNUSED(event)) for (int n = first; n <= last; ++n) { s << n << _T(" ") << - wxGetTranslation(_T("file deleted"), _T("files deleted"), n) << + wxPLURAL("file deleted", "files deleted", n) << _T("\n"); } wxMessageBox(s); diff --git a/samples/internat/readme.txt b/samples/internat/readme.txt index a08085c4bcc2..b8fd6fea186c 100644 --- a/samples/internat/readme.txt +++ b/samples/internat/readme.txt @@ -44,14 +44,18 @@ A. First of all, you will need the GNU gettext tools (see the next question). # generate the .po file for the program itself # see `xgettext --help' for options, "-C" is important! - xgettext -C -n -k_ -o internat.po ../internat.cpp + xgettext -C -n -k_ -kwxPLURAL:1,2 -kwxTRANSLATE -o internat.po ../internat.cpp - # .po file for wxWindows might be generated in the same way, but for now just - # take this one... - cp ../wxstd.po . + # .po file for wxWindows might be generated in the same way. An already + # generated wxstd.po as well as translations for some languages can be + # found in the locale directory. + cp ../../locale/.po ./wxstd.po + - or - + cp ../../locale/wxstd.po . # now edit the files and do translate strings (this isn't done by gettext) - # you can use another editor if you wish :-) + # you can use another editor if you wish :-) No need to edit wxstd.po if you + # already got a translated one. vi internat.po wxstd.po # create the message catalog files @@ -60,7 +64,7 @@ A. First of all, you will need the GNU gettext tools (see the next question). # run the sample to test it cd .. - ./internat + ./internat Q. How to get the gettext tools? A. For Unix, you should be able to get the source distribution of any GNU mirror