Skip to content

Commit

Permalink
added wxPLURAL() macro
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
  • Loading branch information
vadz committed Jun 1, 2005
1 parent ed33d52 commit 15d0695
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 18 deletions.
1 change: 1 addition & 0 deletions docs/changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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):

Expand Down
33 changes: 26 additions & 7 deletions docs/latex/wx/function.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}


Expand Down Expand Up @@ -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}}
Expand Down Expand Up @@ -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}}
Expand Down
5 changes: 3 additions & 2 deletions include/wx/intl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions locale/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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' \
Expand Down
2 changes: 1 addition & 1 deletion samples/internat/internat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
16 changes: 10 additions & 6 deletions samples/internat/readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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/<language>.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
Expand All @@ -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 <language> <langid>
./internat <language>

Q. How to get the gettext tools?
A. For Unix, you should be able to get the source distribution of any GNU mirror
Expand Down

0 comments on commit 15d0695

Please sign in to comment.