Index: i18nstrings.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/i18n/i18nstrings/i18nstrings.module,v
retrieving revision 1.8.2.44
diff -u -p -r1.8.2.44 i18nstrings.module
--- i18nstrings.module	11 Apr 2010 23:21:40 -0000	1.8.2.44
+++ i18nstrings.module	19 Apr 2010 01:39:07 -0000
@@ -25,7 +25,7 @@
  * 
  * Default language
  * - Default language may be English or not. It will be the language set as default.
- *   Source strings will be stored in default language.
+ *   Source strings will be stored in default language. You shouldn't change default language for optimum consistency.
  *
  * The API other modules to translate/update/remove user defined strings consists of
  * 
@@ -34,6 +34,9 @@
  * @see i18nstrings_remove($name, $string)
  * 
  * @ TO DO: Handle default language changes.
+ * If - however - you need to change default language you need to enable the feature "i18nstrings_translate_default" (variable). The Source string can then be considered neutral language (fallback). All strings will then be translated - including default language.
+ * Note: this will cause more lookup queries for default language.
+ *
  *
  * @author Jose A. Reyero, 2007
  */
@@ -215,6 +218,32 @@ function i18nstrings_translate_edit_form
 }
 
 /**
+ * Check if translation is required
+ * 
+ * This function decides if current langcode requires translation.
+ * Default language translation regularly gets omitted.
+ * A local static cache reduces function call overhead.
+ */
+function i18nstrings_translate_langcode($langcode) {
+  static $translate = array();
+  // check decision cache.
+  if (isset($translate[$langcode])) {
+    return $translate[$langcode];
+  }
+  // always translate non-default language.
+  $default = language_default('language');
+  if ($default!=$langcode) {
+    return $translate[$langcode] = TRUE;
+  }
+  // translate default language if configured so.
+  $translate_default = variable_get('i18nstrings_translate_default', 0);
+  if ($translate_default) {
+    return $translate[$langcode] = TRUE;
+  }
+  return $translate[$langcode] = FALSE;
+}
+
+/**
  * Get configurable string,
  *
  * The difference with i18nstrings() is that it doesn't use a default string, it will be retrieved too.
@@ -236,7 +265,7 @@ function i18nstrings_ts($name, $string =
     i18nstrings_update_string($name, $string);
   }
   // if language is default look in sources table
-  if (language_default('language') != $langcode) {
+  if (i18nstrings_translate_langcode($langcode)) {
     $translation = i18nstrings_get_string($name, $langcode);
   }
   if (!$translation) {
@@ -299,7 +337,7 @@ function i18nstrings_translate_object($c
 
   $langcode = $langcode ? $langcode : $language->language;
   // If language is default, just return.
-  if (language_default('language') != $langcode) {
+  if (i18nstrings_translate_langcode($langcode)) {
     $context = i18nstrings_context($context);
     // @ TODO Object prefetch
     foreach ($properties as $property) {
@@ -1035,13 +1073,10 @@ function i18nstrings_save_translation($l
 function i18nstrings($name, $string, $langcode = NULL) {
   global $language;
   $langcode = $langcode ? $langcode : $language->language;
-  // If language is default, just return
-  if (language_default('language') == $langcode) {
-    return $string;
-  }
-  else {
+  if (i18nstrings_translate_langcode($langcode)) {
     return i18nstrings_translate_string($name, $string, $langcode);
   }
+  return $string;
 }
 
 /**
@@ -1059,13 +1094,11 @@ function i18nstrings($name, $string, $la
 function i18nstrings_text($name, $default, $langcode = NULL) {
   global $language;
   $langcode = $langcode ? $langcode : $language->language;
-  // If language is default or we don't have translation, just return default string
-  if ((language_default('language') != $langcode) && ($translation = i18nstrings_get_translation($name, $langcode))) {
+  if (i18nstrings_translate_langcode($langcode)
+   && ($translation = i18nstrings_get_translation($name, $langcode))) {
     return check_markup($translation->translation, $translation->format, FALSE);
   }
-  else {
-    return $default;
-  }  
+  return $default;
 }
 
 /**
@@ -1124,4 +1157,4 @@ function i18nstrings_remove($name, $stri
 
 /**
  * @} End of "ingroup i18napi".
- */
\ No newline at end of file
+ */
