+2004-09-11 Bruno Haible <bruno@clisp.org>
+
+ * Makefile.am (msginit_SOURCES): Add plural-count.c.
+ * msginit.c (update_msgstr_plurals): New function.
+ (main): Call it.
+ * msgmerge.c (match_domain): Provide the appropriate number of plural
+ forms for messages that don't occur in the Def.po file.
+ Reported by Jens A. Tkotz <jens@peino.de>.
+
2004-09-06 Bruno Haible <bruno@clisp.org>
* format.h (formatstring_error_logger_t): New type.
msgexec_SOURCES = msgexec.c
msgfilter_SOURCES = msgfilter.c
msggrep_SOURCES = msggrep.c
-msginit_SOURCES = msginit.c ../../gettext-runtime/intl/localealias.c
+msginit_SOURCES = msginit.c plural-count.c ../../gettext-runtime/intl/localealias.c
msguniq_SOURCES = msguniq.c
hostname_SOURCES = hostname.c
urlget_SOURCES = urlget.c
#include "pathname.h"
#include "xerror.h"
#include "msgl-english.h"
+#include "plural-count.h"
#include "pipe.h"
#include "wait-process.h"
#include "getline.h"
static const char *language_of_locale (const char *locale);
static char *get_field (const char *header, const char *field);
static msgdomain_list_ty *fill_header (msgdomain_list_ty *mdlp);
+static msgdomain_list_ty *update_msgstr_plurals (msgdomain_list_ty *mdlp);
int
/* Initialize translations. */
if (strcmp (language, "en") == 0)
result = msgdomain_list_english (result);
+ else
+ result = update_msgstr_plurals (result);
/* Write the modified message list out. */
msgdomain_list_print (result, output_file, true, false);
return mdlp;
}
+
+
+/* Update the msgstr plural entries according to the nplurals count. */
+static msgdomain_list_ty *
+update_msgstr_plurals (msgdomain_list_ty *mdlp)
+{
+ size_t k;
+
+ for (k = 0; k < mdlp->nitems; k++)
+ {
+ message_list_ty *mlp = mdlp->item[k]->messages;
+ message_ty *header_entry;
+ unsigned long int nplurals;
+ char *untranslated_plural_msgstr;
+ size_t j;
+
+ header_entry = message_list_search (mlp, "");
+ nplurals = get_plural_count (header_entry ? header_entry->msgstr : NULL);
+ untranslated_plural_msgstr = (char *) xmalloc (nplurals);
+ memset (untranslated_plural_msgstr, '\0', nplurals);
+
+ for (j = 0; j < mlp->nitems; j++)
+ {
+ message_ty *mp = mlp->item[j];
+ bool is_untranslated;
+ const char *p;
+ const char *pend;
+
+ if (mp->msgid_plural != NULL)
+ {
+ /* Test if mp is untranslated. (It most likely is.) */
+ is_untranslated = true;
+ for (p = mp->msgstr, pend = p + mp->msgstr_len; p < pend; p++)
+ if (*p != '\0')
+ {
+ is_untranslated = false;
+ break;
+ }
+ if (is_untranslated)
+ {
+ /* Change mp->msgstr_len consecutive empty strings into
+ nplurals consecutive empty strings. */
+ if (nplurals > mp->msgstr_len)
+ mp->msgstr = untranslated_plural_msgstr;
+ mp->msgstr_len = nplurals;
+ }
+ }
+ }
+ }
+ return mdlp;
+}
message_list_ty *resultmlp,
struct statistics *stats, unsigned int *processed)
{
+ message_ty *header_entry;
+ unsigned long int nplurals;
+ char *untranslated_plural_msgstr;
size_t j;
+ header_entry = message_list_search (definitions->item[0], "");
+ nplurals = get_plural_count (header_entry ? header_entry->msgstr : NULL);
+ untranslated_plural_msgstr = (char *) xmalloc (nplurals);
+ memset (untranslated_plural_msgstr, '\0', nplurals);
+
for (j = 0; j < refmlp->nitems; j++, (*processed)++)
{
message_ty *refmsg;
else
{
message_ty *mp;
+ bool is_untranslated;
+ const char *p;
+ const char *pend;
if (verbosity_level > 1)
po_gram_error_at_line (&refmsg->pos, _("\
mp = message_copy (refmsg);
+ if (mp->msgid_plural != NULL)
+ {
+ /* Test if mp is untranslated. (It most likely is.) */
+ is_untranslated = true;
+ for (p = mp->msgstr, pend = p + mp->msgstr_len; p < pend; p++)
+ if (*p != '\0')
+ {
+ is_untranslated = false;
+ break;
+ }
+ if (is_untranslated)
+ {
+ /* Change mp->msgstr_len consecutive empty strings into
+ nplurals consecutive empty strings. */
+ if (nplurals > mp->msgstr_len)
+ mp->msgstr = untranslated_plural_msgstr;
+ mp->msgstr_len = nplurals;
+ }
+ }
+
message_list_append (resultmlp, mp);
stats->missing++;
}
+2004-09-11 Bruno Haible <bruno@clisp.org>
+
+ * msginit-1: New file.
+ * msgmerge-17: New file.
+ * Makefile.am (TESTS): Add msginit-1, msgmerge-17.
+ (TESTS_ENVIRONMENT): Also define MSGINIT.
+ Reported by Jens A. Tkotz <jens@peino.de>.
+
2004-09-08 Bruno Haible <bruno@clisp.org>
Make lang-java work again on platforms with Java version < 1.4.
msgfmt-properties-1 \
msgfmt-qt-1 \
msggrep-1 msggrep-2 msggrep-3 msggrep-4 msggrep-5 msggrep-6 \
+ msginit-1 \
msgmerge-1 msgmerge-2 msgmerge-3 msgmerge-4 msgmerge-5 msgmerge-6 \
msgmerge-7 msgmerge-8 msgmerge-9 msgmerge-10 msgmerge-11 msgmerge-12 \
- msgmerge-13 msgmerge-14 msgmerge-15 msgmerge-16 \
+ msgmerge-13 msgmerge-14 msgmerge-15 msgmerge-16 msgmerge-17 \
msgmerge-compendium-1 msgmerge-compendium-2 msgmerge-compendium-3 \
msgmerge-compendium-4 \
msgmerge-properties-1 msgmerge-properties-2 \
MSGFILTER="$(CHECKER) msgfilter" \
MSGFMT="$(CHECKER) msgfmt" \
MSGGREP="$(CHECKER) msggrep" \
+ MSGINIT="$(CHECKER) msginit" \
MSGMERGE="$(CHECKER) msgmerge" \
MSGUNFMT="$(CHECKER) msgunfmt" \
MSGUNIQ="$(CHECKER) msguniq" \