Thank you very much, I have some problems with my implementation. I was splitting the source files to be able to understand better the code. I will do a mix between this patch and all my changes. Thank you very much. Cheers. P.S.: Sorry if I didn't answer your previous mail, yesterday was a really busy day and I think that today will be a really crazy one :-( El mar, 23-04-2002 a las 07:49, Abel Cheung escribió: > > Thanks to Joe Man, my CVS tree has a status generation .c > file that can provide invididual status for each locale > for Gnome 2.x translation, in addition to the global > status page. > > But this change is a bit big, so I don't want the change > to go uninspected before committed/rejected. For sample, > you can see > http://i18n.deaddog.org/~maddog/gnome-status/unstable/status.shtml, > then click on the links to each locale. > > In particular, it's reported that carlos is working on > the status regeneration too, so I don't want to mess up > with his work. > > Abel > > PS Perhaps my previous email was unclear, so I put this > into seperate email. > > -- > Abel Cheung > GPG Key: (0xC67186FF) http://deaddog.org/gpg.asc > ---- > > Index: gnome-i18n/status//ChangeLog > =================================================================== > RCS file: /cvs/gnome/gnome-i18n/status/ChangeLog,v > retrieving revision 1.117 > diff -u -r1.117 ChangeLog > --- gnome-i18n/status//ChangeLog 23 Apr 2002 03:56:43 -0000 1.117 > +++ gnome-i18n/status//ChangeLog 23 Apr 2002 05:39:05 -0000 > @@ -1,5 +1,11 @@ > 2002-04-23 Abel Cheung <maddog@linux.org.hk> > > + * src/status.c: Individual locale status page, courtesy of Joe Man > + <trmetal at yahoo . com . hk>. Differentiate between "no .po file" > + and "erroneous po file" as well. > + > +2002-04-23 Abel Cheung <maddog@linux.org.hk> > + > * src/compile.sh: Fix for debian system. > > 2002-04-23 Carlos Perelló Marín <carlos@gnome-db.org> > Index: gnome-i18n/status//src/status.c > =================================================================== > RCS file: /cvs/gnome/gnome-i18n/status/src/status.c,v > retrieving revision 1.10 > diff -u -r1.10 status.c > --- gnome-i18n/status//src/status.c 17 Apr 2002 20:53:18 -0000 1.10 > +++ gnome-i18n/status//src/status.c 23 Apr 2002 05:39:06 -0000 > @@ -33,6 +33,11 @@ > > #include "status.h" > > +/* DOWNLOAD_MODULES: if you don't want to download from CVS (use local copy of > + * CVS tree), set this to 0. > + */ > +#define DOWNLOAD_MODULES 0 > + > /* FIXME: We should let change those values at runtime */ > #define CVS_CO_OPTIONS "cvs -q -d \":pserver:carlos@cvs.gnome.org:/cvs/gnome\" co -P" > #define CVSROOTDIR "/home/carlos/cvs/" > @@ -104,6 +109,11 @@ > static gint *translated = NULL; > static gint *total = NULL; > > +static gint *total_trans = NULL; > +static gint *total_fuzzy = NULL; > +static gint *total_untrans = NULL; > + > + > /* Mis funciones */ > gboolean > download_component (component *cmp) > @@ -383,7 +393,9 @@ > } > g_strfreev (tfu); > } else { > - g_warning ("Implement me!! (fill_translation)"); > + trans->translated = -1; > + trans->fuzzy = -1; > + trans->untranslated = -1; > } > } > } > @@ -394,6 +406,7 @@ > { > gchar *dir; > gchar *merge; > + gchar *copy; > DIR *podir; > struct dirent *direntry; > gchar **filesplit; > @@ -421,7 +434,22 @@ > filesplit[0]); > if (system (merge)) { > g_warning ("Unable to update the file %s at %s", > - direntry->d_name, dir); > + direntry->d_name, dir); > + > + /* copy po file even when mesmerge fails, so that broken > + * file is available in webpage for translator to fix. > + */ > + copy = g_strdup_printf ("cp -f %s %s/po/%s.%s.%s.po", > + direntry->d_name, HTMLROOTDIR, > + cmp->name, cmp->branch, filesplit[0]); > + if (system (copy)) { > + g_warning ("Unable to copy file %s to %s", > + direntry->d_name, dir); > + } else { > + currtrans = (translation *) g_new0 (translation, 1); > + fill_translation (currtrans, cmp, filesplit[0]); > + } > + g_free (copy); > } else { > currtrans = (translation *) g_new0 (translation, 1); > fill_translation (currtrans, cmp, filesplit[0]); > @@ -455,6 +483,8 @@ > cmp->translations = g_hash_table_new (g_str_hash, g_str_equal); > > /* Download the component */ > + > +#if DOWNLOAD_MODULES > if (cmp->download && !download_component (cmp)) { > if (strcmp (cmp->dir, "gnome-i18n")) { > g_warning ("Downloading: We have problems with %s.%s (module %s), skiped...", > @@ -464,7 +494,8 @@ > cmp->dir, cmp->name); > } > } > - > +#endif > + > /* Regenerate the .pot file */ > if (cmp->regenerate && !regenerate_component_pot (cmp)) { > if (strcmp (cmp->dir, "gnome-i18n")) { > @@ -509,8 +540,8 @@ > locale = (gchar *) data; > html = (gchar **) user_data; > > - //temp = g_strdup_printf ("<td><a href=\"%s.shtml\">%s</a></td>", locale, locale); > - temp = g_strdup_printf ("\t<td>%s</td>\n", locale); > + temp = g_strdup_printf ("\t<td><a href=\"%s.html\">%s</a></td>\n", locale, locale); > + //temp = g_strdup_printf ("\t<td>%s</td>\n", locale); > *html = g_strconcat (*html, temp, NULL); > g_free (temp); > } > @@ -523,10 +554,12 @@ > translation *ptrns; > gchar **html; > gchar *temp; > + gchar *poname; > gchar *modulelnk; > gchar *comment; > GList *llocale; > - > + struct stat buf; > + > pcmp = (component *) data; > prelease = pcmp->release; > html = (gchar **) user_data; > @@ -542,23 +575,35 @@ > for (; llocale != NULL; llocale = g_list_next (llocale)) { > ptrns = g_hash_table_lookup (pcmp->translations, llocale->data); > if ( ptrns == NULL) { /* We don't have a translation */ > - temp = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.pot\">0</a></td>\n", > - pcmp->name, pcmp->branch); > + temp = g_strdup_printf ("\t<td align=right>N/A</td>\n"); > total[g_list_position (prelease->locales, llocale)] += pcmp->nstrings; > + > } else { /* We have a translation for this locale */ > - gfloat stats; > > - stats = ((gfloat) ptrns->translated / (gfloat) pcmp->nstrings)*100; > - temp = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.%s.po\">%.2f</a></td>\n", > - pcmp->name, pcmp->branch, ptrns->locale, stats); > - translated[g_list_position (prelease->locales, llocale)] += ptrns->translated; > - total[g_list_position (prelease->locales, llocale)] += ptrns->translated + ptrns->fuzzy + ptrns->untranslated; > + /* But if the translation is faulty... */ > + if ((ptrns->translated == -1) && (ptrns->fuzzy == -1) && (ptrns->untranslated == -1)) { > + temp = g_strdup_printf ("\t<td bgcolor='#d06060' align=right>"\ > + "<a href=\"po/%s.%s.%s.po\">Error</a></td>\n", > + pcmp->name, pcmp->branch, ptrns->locale); > + total[g_list_position (prelease->locales, llocale)] += pcmp->nstrings; > + > + } else { > + gfloat stats; > + > + stats = ((gfloat) ptrns->translated / (gfloat) pcmp->nstrings)*100; > + temp = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.%s.po\">%.2f</a></td>\n", > + pcmp->name, pcmp->branch, ptrns->locale, stats); > + translated[g_list_position (prelease->locales, llocale)] += ptrns->translated; > + total[g_list_position (prelease->locales, llocale)] += > + ptrns->translated + ptrns->fuzzy + ptrns->untranslated; > + } > } > *html = g_strconcat (*html, temp, NULL); > g_free (temp); > } > > *html = g_strconcat (*html, modulelnk, "</tr>\n", NULL); > + g_free (modulelnk); > } > > /* > @@ -575,7 +620,7 @@ > GList *llocale; > GList *lcomponent; > component *cmp; > - > + > > prelease = (release *) value; > > @@ -661,6 +706,195 @@ > > } > > + > + > +/* > + * Create individual HTML pages for every locale > + */ > +void > +generate_locale_html (gpointer key, gpointer value, gpointer user_data) > +{ > + release *prelease; > + gchar *html; > + gchar *temp; > + gchar *pdate; > + time_t date; > + GList *llocale; > + > + GList *lcmp; > + translation *ptrns; > + component *pcmp; > + > + gchar *temp_info; > + gchar *modulelnk; > + gchar *comment; > + > + prelease = (release *) value; > + > + date = time (NULL); > + pdate = g_strdup (asctime (gmtime (&date))); > + /* Remove the '\n' char */ > + pdate[strlen (pdate) - 1] = 0; > + > + llocale = g_list_first (prelease->locales); > + for (; llocale != NULL; llocale = g_list_next (llocale)) > + { > + gfloat stats; > + > + /* First we generate "static" section */ > + html = g_strdup_printf ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"\ > + "<html>\n"\ > + "<head>\n"\ > + "<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=ISO-8859-1\">\n"\ > + "<title>%s (%s UTC)</title>\n"\ > + "</head>\n"\ > + "<body>\n"\ > + "<center>\n"\ > + "<h1>%s<br>%s (%s UTC)</h1>\n"\ > + "</center>\n"\ > + "<p>"\ > + "<pre>"\ > + "%s"\ > + "</pre>\n"\ > + "<table cellpadding=1 cellspacing=1 border=1 width=\"90%%\">\n"\ > + "<tr align=center>\n"\ > + "\t<td>Module</td>\n", prelease->maintitle, pdate, prelease->maintitle, > + (gchar *)llocale->data, pdate, prelease->mainhead); > + > + > + //g_list_foreach (prelease->locales, generate_release_locales_html, &html); > + > + html = g_strconcat (html, "\t<td>Translated</td>\n", NULL); > + html = g_strconcat (html, "\t<td>Fuzzy</td>\n", NULL); > + html = g_strconcat (html, "\t<td>Untranslated</td>\n", NULL); > + html = g_strconcat (html, "\t<td>%</td>\n</tr>\n", NULL); > + > + translated = g_new0 (guint, g_list_length (prelease->locales)); > + total = g_new0 (guint, g_list_length (prelease->locales)); > + total_trans = g_new0 (guint, g_list_length (prelease->locales)); > + total_fuzzy = g_new0 (guint, g_list_length (prelease->locales)); > + total_untrans = g_new0 (guint, g_list_length (prelease->locales)); > + > + /*Process each module*/ > + > + lcmp = g_list_first (prelease->components); > + for (; lcmp != NULL; lcmp = g_list_next (lcmp)) > + { > + pcmp = (component *)lcmp->data; > + comment = g_strdup_printf ("\n<!-- %s %s -->\n", pcmp->name, pcmp->branch); > + > + modulelnk = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.pot\">%s</a></td>\n", pcmp->name, > + pcmp->branch, pcmp->name); > + > + html = g_strconcat (html, comment, "<tr bgcolor='#c5c2c5' align=center>\n", modulelnk, NULL); > + > + g_free (comment); > + g_free (modulelnk); > + > + ptrns = g_hash_table_lookup (pcmp->translations, llocale->data); > + if ( ptrns == NULL) /* We don't have a translation */ > + { > + temp = g_strdup_printf ("\t<td align=right>N/A</td>\n"\ > + "\t<td align=right>N/A</td>\n"\ > + "\t<td align=right>N/A</td>\n"); > + > + temp_info = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.pot\">N/A</a></td>\n", > + pcmp->name, pcmp->branch); > + temp = g_strconcat (temp, temp_info, NULL); > + > + total[g_list_position (prelease->locales, llocale)] += pcmp->nstrings; > + } > + else > + { /* We have a translation for this locale */ > + > + /* But if the translation is faulty... */ > + if ((ptrns->translated == -1) && (ptrns->fuzzy == -1) && (ptrns->untranslated == -1)) { > + > + temp = g_strdup_printf ("\t<td bgcolor='#d06060' align=right>Error</td>\n"\ > + "\t<td bgcolor='#d06060' align=right>Error</td>\n"\ > + "\t<td bgcolor='#d06060' align=right>Error</td>\n"); > + temp_info = g_strdup_printf ("\t<td bgcolor='#d06060' align=right><a href=\"po/%s.%s.%s.po\">Error</a></td>\n", > + pcmp->name, pcmp->branch, ptrns->locale); > + temp = g_strconcat (temp, temp_info, NULL); > + total[g_list_position (prelease->locales, llocale)] += pcmp->nstrings; > + > + } else { > + > + gfloat stats; > + > + temp = g_strdup_printf ("\t<td align=right>%d</td>\n", ptrns->translated); > + > + temp_info = g_strdup_printf ("\t<td align=right>%d</td>\n", ptrns->fuzzy); > + temp = g_strconcat (temp, temp_info, NULL); > + temp_info = g_strdup_printf ("\t<td align=right>%d</td>\n", ptrns->untranslated); > + temp = g_strconcat (temp, temp_info, NULL); > + > + stats = ((gfloat) ptrns->translated / (gfloat) pcmp->nstrings)*100; > + temp_info = g_strdup_printf ("\t<td align=right><a href=\"po/%s.%s.%s.po\">%.2f</a></td>\n", > + pcmp->name, pcmp->branch, ptrns->locale, stats); > + translated[g_list_position (prelease->locales, llocale)] += ptrns->translated; > + total[g_list_position (prelease->locales, llocale)] += ptrns->translated + ptrns->fuzzy + > + ptrns->untranslated; > + temp = g_strconcat (temp, temp_info, NULL); > + > + total_trans[g_list_position (prelease->locales, llocale)] += ptrns->translated; > + total_fuzzy[g_list_position (prelease->locales, llocale)] += ptrns->fuzzy; > + total_untrans[g_list_position (prelease->locales, llocale)] += ptrns->untranslated; > + > + } > + } > + html = g_strconcat (html, temp, NULL); > + g_free (temp); > + g_free (temp_info); > + } > + > + > + /*end process each module */ > + > + html = g_strconcat (html, "<tr align=center bgcolor=\"#ffd700\">\n\t<th>Total</th>\n", NULL); > + > + temp = g_strdup_printf ("\t<th align=right>%d</th>\n", > + total_trans[g_list_position (prelease->locales, llocale)]); > + html = g_strconcat (html, temp, NULL); > + > + temp = g_strdup_printf ("\t<th align=right>%d</th>\n", > + total_fuzzy[g_list_position (prelease->locales, llocale)]); > + html = g_strconcat (html, temp, NULL); > + > + temp = g_strdup_printf ("\t<th align=right>%d</th>\n", > + total_untrans[g_list_position (prelease->locales, llocale)]); > + html = g_strconcat (html, temp, NULL); > + > + stats = ((gfloat) translated[g_list_position (prelease->locales, llocale)] / > + (gfloat) total[g_list_position (prelease->locales, llocale)])*100; > + temp = g_strdup_printf ("\t<th align=right>%.2f</th>\n", stats); > + html = g_strconcat (html, temp, NULL); > + > + html = g_strconcat (html, "</tr></table>\n", NULL); > + > + html = g_strconcat (html, "</body></html>\n", NULL); > + > + /* TODO: We should made a new function with this code */ > + { > + FILE *htmlpage; > + gchar *locale; > + > + locale = (gchar *)llocale->data; > + /*g_print("filename: %s\n", locale);*/ > + temp = g_strdup_printf (HTMLROOTDIR "/%s.html", locale); > + htmlpage = fopen (temp, "w"); > + if (fwrite (html, strlen (html), 1, htmlpage) != 1) { > + g_warning ("We couldn't write %s.html!!", locale); > + } > + } > + g_free (temp); > + > + } > + g_free (pdate); > +} > + > + > + > void > process_module (gpointer data, gpointer user_data) > { > @@ -709,6 +943,8 @@ > g_list_foreach (modules, process_module, NULL); > > g_hash_table_foreach (releases, generate_release_html, NULL); > + > + g_hash_table_foreach (releases, generate_locale_html, NULL); > > exit(EXIT_SUCCESS); > } /* main */ -- Carlos Perelló Marín mailto:carlos@gnome-db.org mailto:carlos.perello@hispalinux.es http://www.gnome-db.org http://www.Hispalinux.es Valencia - Spain
Esta parte del mensaje esta firmada digitalmente