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 + */