r15882 - gnucash/trunk/src/app-utils - Fix i18n; add explanation of word meanings and i18n issues here.

Christian Stimming cstim at cvs.gnucash.org
Sat Apr 14 07:24:15 EDT 2007


Author: cstim
Date: 2007-04-14 07:24:15 -0400 (Sat, 14 Apr 2007)
New Revision: 15882
Trac: http://svn.gnucash.org/trac/changeset/15882

Modified:
   gnucash/trunk/src/app-utils/gnc-ui-util.c
Log:
Fix i18n; add explanation of word meanings and i18n issues here.

Modified: gnucash/trunk/src/app-utils/gnc-ui-util.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-ui-util.c	2007-04-14 10:47:04 UTC (rev 15881)
+++ gnucash/trunk/src/app-utils/gnc-ui-util.c	2007-04-14 11:24:15 UTC (rev 15882)
@@ -1575,7 +1575,23 @@
 
 #define FUDGE .00001
 
+/* Sigh. This (from r15709) is a translators/i18nator's nightmare. I'd
+   guess out of the 29 translations we have, 20 will have their number
+   wordings in a totally different way than English has (not to
+   mention gender-dependent number endings). Which means this
+   word-by-word translation will be useless or even plain
+   wrong. However, in many of those countries there might be no need
+   for check printing with amounts in words anyway, which means many
+   of those languages probably can ignore this whole section
+   altogether. Let's simply pretend a word-by-word translation were
+   "almost" correct. cstim, 2007-04-14. */
 static gchar *small_numbers[] = {
+  /* Translators: This section is for generating the "amount, in
+     words" field when printing a check. This function gets the
+     wording right for English, but unfortunately not for most other
+     languages. Decide for yourself whether the check printing is
+     actually needed in your language; if not, you can safely skip the
+     translation of all of these strings.  */
   N_("Zero"), N_("One"), N_("Two"), N_("Three"), N_("Four"),
   N_("Five"), N_("Six"), N_("Seven"), N_("Eight"), N_("Nine"),
   N_("Ten"), N_("Eleven"), N_("Twelve"), N_("Thirteen"), N_("Fourteen"),
@@ -1585,8 +1601,26 @@
   N_("Zero"), N_("Ten"), N_("Twenty"), N_("Thirty"), N_("Forty"),
   N_("Fifty"), N_("Sixty"), N_("Seventy"), N_("Eighty"), N_("Ninety")};
 static gchar *big_numbers[] = {
-  N_("Hundred"), N_("Thousand"), N_("Million"), N_("Billion"),
-  N_("Trillion"), N_("Quadrillion"), N_("Quintillion")};
+  /* Translators: This is the word for the number 10^2 */
+  N_("Hundred"),
+  /* Translators: This is the word for the number 10^3 */
+  N_("Thousand"),
+  /* Translators: This is the word for the number 10^6, one thousand
+     thousands. */
+  N_("Million"),
+  /* Translators: This is the word for the number 10^9, one thousand
+     millions. WATCH OUT: In British english and many other languages
+     this word is used for 10^12 which is one million millions! In
+     contrast to this, here in GnuCash this is used in the American
+     english meaning of 10^9.  */
+  N_("Billion"),
+  /* Translators: This is the word for the number 10^12, one million
+     millions. */
+  N_("Trillion"),
+  /* Translators: This is the word for the number 10^15 */
+  N_("Quadrillion"),
+  /* Translators: This is the word for the number 10^18 */
+  N_("Quintillion")};
 
 static gchar *
 integer_to_words(gint64 val)
@@ -1643,7 +1677,7 @@
 number_to_words(gdouble val, gint64 denom)
 {
   gint64 int_part, frac_part;
-  gchar *int_string, *full_string;
+  gchar *int_string, *nomin_string, *denom_string, *full_string;
 
   if (val < 0) val = -val;
   if (denom < 0) denom = -denom;
@@ -1652,10 +1686,21 @@
   frac_part = round((val - int_part) * denom);
 
   int_string = integer_to_words(int_part);
+  /* Inside of the gettext macro _(...) we must not use any macros but
+     only plain string literals. For this reason, convert the strings
+     separately. */
+  nomin_string = g_strdup_printf("%" G_GINT64_FORMAT, frac_part);
+  denom_string = g_strdup_printf("%" G_GINT64_FORMAT, denom);
   full_string =
-    g_strdup_printf(_("%s and %" G_GINT64_FORMAT "/%" G_GINT64_FORMAT),
-		    int_string, frac_part, denom);
+    /* Translators: This is for the "amount, in words" field in check
+       printing. The first %s is the integer amount of dollars (or
+       whatever currency), the second and third %s the cent amount as
+       a fraction, e.g. 47/100.  */
+    g_strdup_printf(_("%s and %s/%s"),
+		    int_string, nomin_string, denom_string);
   g_free(int_string);
+  g_free(nomin_string);
+  g_free(denom_string);
   return full_string;
 }
 



More information about the gnucash-changes mailing list